feat(ui): AtlasAgentInterface — observe/act named-intent control channel (D-226, T-971)
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>
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user