What this is
A mechanism to reach enterprise scale (#212) without paying to realize the whole estate at once: use the WorldGraph to decide what gets simulated, when.
Because the graph already encodes reachability — what the agent can see and reach from where it currently is — we don't need every service running. We spin up only the things close to the agent (by graph distance / reachability frontier), on demand, and tear down / leave cold what's out of reach. The agent experiences a world of hundreds-to-thousands of entities; the runtime only ever has a small live set.
Why it matters
cyber.webapp realizes one app.py per build (packs/cyber_webapp/cyber_webapp/realize.py, WebappRuntime, only Backing.PROCESS wired). That does not survive 100–1000× the entity count (#212). Turning up priors doesn't help — you can't run 1000 services in a process. Graph-driven lazy realization is the load-bearing trick that makes enterprise scale tractable while keeping per-episode cost bounded.
Shape to work out (design-needed)
- Reachability frontier from the graph. Given the agent's current position/credentials, compute the reachable set (and a near-frontier to pre-warm).
- Tiered realization. hot (live process) for the reachable set, warm (synthetic/in-graph responses) for the frontier, cold (graph-only) for the rest. Promote on reach.
- Where it lives. Pack concern, core concern, or a shared runtime primitive? The
Backing enum (packages/openrange-pack-sdk/.../_types.py) and Pack.realize(graph, backing) seam are the natural hook.
- Determinism / admission. Admission verifies an oracle path today; lazy realization must not change verifier outcomes vs. a fully-realized world.
Relationship to other work
Acceptance
A design doc / ADR on the reachability model + tier transitions + admission-equivalence guarantee, plus an issue tree for implementation. No code before the design lands.
What this is
A mechanism to reach enterprise scale (#212) without paying to realize the whole estate at once: use the
WorldGraphto decide what gets simulated, when.Because the graph already encodes reachability — what the agent can see and reach from where it currently is — we don't need every service running. We spin up only the things close to the agent (by graph distance / reachability frontier), on demand, and tear down / leave cold what's out of reach. The agent experiences a world of hundreds-to-thousands of entities; the runtime only ever has a small live set.
Why it matters
cyber.webapprealizes oneapp.pyper build (packs/cyber_webapp/cyber_webapp/realize.py,WebappRuntime, onlyBacking.PROCESSwired). That does not survive 100–1000× the entity count (#212). Turning up priors doesn't help — you can't run 1000 services in a process. Graph-driven lazy realization is the load-bearing trick that makes enterprise scale tractable while keeping per-episode cost bounded.Shape to work out (design-needed)
Backingenum (packages/openrange-pack-sdk/.../_types.py) andPack.realize(graph, backing)seam are the natural hook.Relationship to other work
Acceptance
A design doc / ADR on the reachability model + tier transitions + admission-equivalence guarantee, plus an issue tree for implementation. No code before the design lands.