Interaction Model & Menu System ⚠️ CRITICAL — NOT OPTIONAL
The game is NOT just a hex grid with units. Every tile, unit, and node has nested menus. The full interaction tree is 4 levels deep. This is the core UX — the team MUST implement this.
Menu Tree (Collapsed)
L0 HEX GRID — D-pad navigates, A selects hex
L1 TILE MENU — unit summary + node summary. X→Unit Menu, Y→Node Menu
L2a UNIT MENU — Status, Config, Trail, Access, History, Move, Interact
L2b NODE MENU — Properties, Output, Edges, Config, History
L3 — full detail screens for each L2 item
L4a — expanded output section
L4b — full output page (cross-device to Mac if too dense)
L4c — routing action (Curate Context / Point Wholesale)
Key Interaction Patterns
Correction Interview (when output is wrong): Player selects “Correct” at interrupt. MC branching interview narrows problem: what’s wrong? → which section? → suggested fix direction. Agent echoes back interpretation. Player: Correct / Close / Not-at-all. All gamepad — no text input required.
Context Routing: From a completed node’s Output view → select Route → choose content scope (entire/section/curated) → choose method (Curate/Pointer) → return to grid in routing mode → select target hex → confirm.
Output Display: Every node produces two things: full output (wiki page on Pi) + summary (structured sections with header/body/status). RG displays summary. A expands section inline. Y opens full wiki page (on Mac if too dense).
Interactive Terminal: When a unit is active at a node, the terminal shows live agent output, chain of thought, and the interrupt prompt. Player can type corrections (fallback) or use MC interview (primary).
Live Prompt Injection: Player corrections accumulate per-node. On next turn, the node reads all prior corrections and restructures. Corrections never overwrite — they append via reducer.
Per-Unit Independence: Each unit has its own turn counter, config, trail, and access lists. Only one unit per hex. Cross-unit context sharing via access lists.
Gamepad Controls
| Button | Context | Action |
|---|---|---|
| D-pad | Grid | Move cursor between hexes |
| D-pad | Menu | Navigate items |
| A | Grid | Open Tile Menu |
| A | Menu | Select / Confirm / Drill down |
| B | Any | Back one level |
| X | Grid | Cycle unit focus |
| X | Tile Menu | Open Unit Menu |
| Y | Tile Menu | Open Node Menu |
| Y | Output | Open full page (cross-device) |
| SELECT | Grid | Toggle phase color overlay |
| START | Any | Pause menu (save, quit, settings) |
| L1/R1 | Grid | Previous/next unit |
Wiki Reference Pages (Read These)
| Topic | Wiki Page |
|---|---|
| Full menu system spec (L0→L4) | wiki/concepts/menu-system-full-spec.md |
| Correction interview protocol | wiki/research/correction-interview-protocol.md |
| Poller/stager pattern | wiki/concepts/poller-stager-pattern.md |
| Context curation pattern | wiki/concepts/langgraph-context-curation-pattern.md |
| Live prompt injection | wiki/concepts/langgraph-live-prompt-injection.md |
| Output summary protocol | wiki/concepts/output-summary-protocol.md |
| Routing submenu design | wiki/research/routing-submenu-design.md |
| Edge case protocols | wiki/research/edge-case-protocols.md |
| Gamepad input patterns (research) | wiki/research/gamepad-input-patterns.md |
| Nested menu protocol | wiki/concepts/nested-menu-protocol.md |
| Node config catalog (12 dimensions) | wiki/concepts/langgraph-node-config-catalog.md |
| Soft mechanics (context/prompts/comms) | wiki/concepts/langgraph-soft-mechanics.md |