D-226 layer 4, rebuilt against the post-D-255 stepped Atlas after the Phase-1 reconciliation (the original intent list targeted the retired continuous-zoom viewer). Eleven intents, each backed by the exact production handler a click calls — select/open for systems and bodies (extracted shared by-id tails so click and intent paths are one code path), scroll_rung, reset_view, back, open/close_atlas, set_overlay — plus two new first-class capabilities: jump_to_center (the fixed-center revisit pattern proven by five eyeball drivers, via a new StepCanvasViewer.jump_to seam that reuses _scroll_rung's exact request tail — same extent cap, same cache keys) and get_current_canvas_summary (allocation-light reads off the raw wire dict, courses-by-class, draw-matched settlement dedup — no PNG decode). Contract shape: dumb AtlasAgentBridge autoload holding the app handle (untyped per the parse-order rule), all logic in the static AtlasAgentInterface class. observe() is side-effect-free: current state + a generic Control-walk affordance tree. In-process consumers only this ticket (documented); the committed reference driver (atlas_agent_driver.gd, InputSwallower + settle-until-ready from the T-1157 inventory) replaces the scratch eyeball drivers as the sanctioned headless-drive pattern. select_city/open_regional dropped with recorded rationale (no settlement hit-test affordance exists post-D-255) — diff on the ticket. 33 new tests across three suites. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
30 lines
1.6 KiB
GDScript
30 lines
1.6 KiB
GDScript
extends Node
|
|
|
|
## AtlasAgentBridge (T-971, D-226 item 4) — the ONE stable, always-reachable
|
|
## handle onto the live AtlasApp instance, so an in-process agent driver (a
|
|
## `-s` SceneTree script, a gdUnit suite, the T-1157 capture harness) has a
|
|
## fixed autoload address to start from instead of walking the scene tree
|
|
## itself.
|
|
##
|
|
## Deliberately a DUMB holder, per CLAUDE.md's autoload parse-order rule: an
|
|
## autoload script compiles before global `class_name` scripts are
|
|
## registered, so referencing a `class_name` type (AtlasApp, AtlasAgent
|
|
## Interface) at this file's top level or in _ready() would fail to
|
|
## resolve. This file therefore declares its field UNTYPED (`var
|
|
## current_app = null`) and does nothing else — every actual observe()/act()
|
|
## call is a STATIC method on AtlasAgentInterface
|
|
## (res://ui/implant/apps/atlas/atlas_agent_interface.gd), loaded via
|
|
## `load()` inline at call time by whatever script needs it (the same
|
|
## deferred-load pattern game_state.gd/sim_bridge.gd already use for their
|
|
## own class_name-typed fields). This autoload carries no logic of its own
|
|
## to keep that boundary clean — "dumb holder delegating to a static class",
|
|
## per the ruling.
|
|
##
|
|
## `current_app` is set by AtlasApp.on_install() (the same lifecycle point
|
|
## ImplantApp guarantees runs once, before any HudGroups open event) and
|
|
## cleared by nothing — an installed app instance lives for the process
|
|
## lifetime, matching every other ImplantApp subclass's own singleton-per-
|
|
## process posture (HudGroups.register() itself assumes one instance per
|
|
## app_path).
|
|
var current_app = null # AtlasApp, set by atlas_app.gd's on_install()
|