diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md index 64bea8e9..0a39a714 100644 --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -76,6 +76,7 @@ - [Views: digital and physical](interface/views.md) - [Action vocabulary](interface/action-vocabulary.md) - [Context menu](interface/context-menu.md) + - [Operations workspace](interface/operations-workspace.md) - [Continuous witness (narration)](interface/narration.md) - [Material render](interface/material-render.md) - [Flat materials](interface/flat-materials.md) diff --git a/wiki/interface/README.md b/wiki/interface/README.md index 677d8b7b..ca234596 100644 --- a/wiki/interface/README.md +++ b/wiki/interface/README.md @@ -8,7 +8,9 @@ witness, presence, representation, and the terminal's first-class status, followed by frontend work orders. The [action vocabulary](action-vocabulary.md) is the canonical survey of every supported world action, direct machine control, interface command, alias, and -retired verb. The [Bevy frontend](bevy.md) +retired verb. The [Operations workspace](operations-workspace.md) owns the +shared INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE strategic surface; the +[context menu](context-menu.md) remains local to spatial bodies. The [Bevy frontend](bevy.md) (graphical, at key-for-key parity with the terminal), and agent-play (the line-protocol drive for programs/agents operating the terminal frontend directly). [narration.md](narration.md) is the continuous- diff --git a/wiki/interface/action-vocabulary.md b/wiki/interface/action-vocabulary.md index 1197372e..c4b8b195 100644 --- a/wiki/interface/action-vocabulary.md +++ b/wiki/interface/action-vocabulary.md @@ -33,6 +33,11 @@ Status note: as-built vocabulary survey completed 2026-07-10 against all known-but-blocked descriptors and their reasons remain available to agent diagnostics. RECRUIT choices expand UNWITTING / COMPLICIT / KNOWING into their plain-language understanding and mechanical consequence. + Amended 2026-07-11: vocabulary and ownership are separate. Local verbs render + on spatial context menus; strategic verbs render on the semantic object in + operations-workspace.md (processed intel, person, books/flow, scheme, active + run). This routing change does not rename or reopen the implemented canonical + vocabulary; its frontend work is tracked by the Operations spec. Stage: Process Design: - wiki/vision/simulation-laws.md#actions-live-on-the-thing @@ -85,9 +90,11 @@ not duplicate every rule that decides whether the request succeeds. - **RETIRED** means the word is not a supported action. It either produces a teaching error or is absent. -Context-menu copy may inflect an action with its target (`take the dock -camera`, `message the Janitor`) or current state (`stop Moonlight`), but its -verb must preserve the canonical distinction below. +Surface copy may inflect an action with its target (`take the dock camera`, +`message the Janitor`) or current state (`stop Moonlight`), but its verb must +preserve the canonical distinction below. Spatial actions use context-menu.md; +strategic actions use operations-workspace.md. Placement does not create a new +intention. The governing simplification is: **if the player's intention is the same, reuse the verb and let the target supply the meaning.** TAP LEDGER is TAP, @@ -105,8 +112,8 @@ maps through an exhaustive match to one kind; adding a new command cannot compile until the registry decision is made. The registry does not own legality, cost, timing, signature, or effect. Those -remain in the mechanic specs and `Sim::available_actions`. It owns the surface -contract that every frontend must agree on: +remain in the mechanic specs and the lib's shared spatial/Operations action +queries. It owns the surface contract that every frontend must agree on: - LIVE entries may be surfaced; STUB entries are filtered before a frontend can render them. @@ -188,7 +195,7 @@ existing social action; the signature still follows the actuator. | **INJECT PURCHASE ORDER** | Known Lab books | Introduce a false source flow that funds a real acquisition and leaves Financial trace. | LIVE — economy | | **SIPHON FLOW** | Known active flow | Take a one-time amount into slush. | LIVE — economy | | **REDIRECT FLOW** | Known active flow | Divert a recurring amount into slush each cadence. | LIVE — economy | -| **SELL PROCESSED INTEL** | Unsold processed intel | Exchange information for slush and create a Financial trail. | LIVE — economy / intel | +| **SELL PROCESSED INTEL** | One selected unsold processed-intel id | Exchange that exact information item for slush and create a Financial trail; never silently choose “latest.” | LIVE — economy / intel | | **OPEN EGRESS** | Reachable switch | Establish the stolen outbound route required by external schemes before sanctioned email exists. | LIVE — income / reach | | **PLACE WAGER** | External market position | Commit slush to a timed market position. | LIVE — income / economy | @@ -212,13 +219,14 @@ useful interface words, but they do not enlarge the fictional verb set. | Command family | Meaning | Human surfaces | Agent spelling | |---|---|---|---| | **MOVE ATTENTION** | Move the cursor; never move a simulated body or advance time. | WASD / hjkl / arrows; Bevy click | `up`, `down`, `left`, `right` | -| **ACTIONS / OPEN MENU** | Choose an action on the focused anchor. Human menus show terse verbs; agent output exposes full descriptors. | Enter / `a` / `e`; Bevy right-click | `actions [target]` | +| **ACTIONS / OPEN MENU** | Choose an action on one exact target. Human spatial menus show local verbs; Operations shows strategic target rows; agent output exposes either target family's full descriptors. | Enter / `a` / `e`; Bevy right-click; Operations selected object | `actions [target]` | +| **OPEN OPERATIONS** | Inspect durable strategic objects and choose actions on exact intel/person/account/scheme/run targets; opening it has no world effect. | Uppercase `I`; labeled OPERATIONS rail affordance | none — agent mode inspects the domain projections below; `operations` remains a THINK compatibility alias | | **EXECUTE / CLOSE MENU** | Choose or dismiss a contextual action. | j/k, row number, Enter, Esc | Execute the corresponding named command | -| **FOCUS EVENT** | Jump attention to an earned anchored event and show its actions. | `;`; Bevy trace click | `focus last` | +| **FOCUS EVENT** | Jump attention to an earned spatial anchor or open an earned strategic object and show its actions. | `;`; Bevy trace click | `focus last` | | **SELECT MACHINES** | Maintain the frontend set used by bulk DELEGATE / SET INTENSITY. | Bevy marquee/shift-click; terminal Shift+t | `select box/add/toggle/list/clear` | | **QUICK ACTION** | Execute the Nth visible committed world action; controls never occupy these slots. | `5`-`9` | Use the named action | | **TIME CONTROL** | Human play pauses or changes wall-clock speed; agent play advances an exact number of ticks. | Space/p, +, - | `wait N` | -| **INSPECT** | Render current state without creating a world effect. | Focus/rail/context surfaces | `look`, `people`, `reach`, `finance`, `research`, `objective`, `intents` | +| **INSPECT** | Render current state without creating a world effect. INTEL/PEOPLE/ACCOUNTS/SCHEMES/ACTIVE use the shared Operations projection after its READY migration. | Focus/rail/context/Operations surfaces | `look`, `intel`, `people`, `reach`, `finance`, `schemes`, `active`, `research`, `objective`, `intents` | | **SAVE / LOAD** | Persist or restore the run. Only the complete chord captures input; a modifier alone is not a modal state. | Ctrl/Command+S / Ctrl/Command+L | `save`, `load` | | **VIEW CONTROL** | Change presentation only. | Bevy `[` / `]` or canvas-wheel zoom, right-rail scroll, F3 render flip; F4 is dev-only | none | | **HELP / QUIT** | Explain accepted input or leave the process. | Hints / q | `help`, `quit` | @@ -226,6 +234,8 @@ useful interface words, but they do not enlarge the fictional verb set. Opening a panel, moving the cursor, selecting machines, and changing render mode are commands, but they are not actions the AI performs in the fiction. That distinction prevents UI vocabulary from masquerading as game mechanics. +Agent `reach` remains a read-only device-graph inspection command outside +Operations; it does not revive the retired human Reach panel. ## Agent protocol mapping @@ -244,7 +254,8 @@ without raw keys. | `propose-link`, `cancel-intent`, `favor build `, `deceive build ` | Construction actions above | | `review recordings`, `auto-review` | Pooled host REVIEW and AUTO-REVIEW POLICY above; neither accepts a person target | | `persona`, `message`, `favor`, `deceive`, `recruit`, `task` | Social actions above | -| `actions `, `act [anchor]` | List and execute the shared context-menu rows, including authored plot starts and choices | +| `actions `, `act [target]` | List and execute shared bound rows for a spatial anchor or exact Operations object | +| `intel`, `people`, `finance`, `schemes`, `active` | Inspect Operations views; named social/plot/ledger/scheme commands execute their selected semantic targets | | `tap ledger`, `review ledger`, `inject`, `siphon`, `redirect`, `sell-intel` | Ledger/economy actions above | | `egress`, `position` | OPEN EGRESS, PLACE WAGER | | `moonlight`, `auto-moonlight`, `auto-wager` | Scheme state / policy controls above | @@ -310,8 +321,10 @@ mechanic and surfaces: solve an unclear distinction. Before adding a verb, check whether an existing intention plus a new target already says it. -2. Put contextual legality in `Sim::available_actions` on the thing that owns - the action. Its descriptor carries target, cost, signature, and disabled +2. Put contextual legality in the shared core query for the thing that owns + the action: `Sim::available_actions` for spatial anchors and the + renderer-neutral Operations projection for strategic targets. Its + descriptor carries target, cost, signature, and disabled reason even though human menus render only the terse choice. 3. Surface every LIVE action in both human frontends and agent mode. A direct control must have equivalent human and agent input. @@ -325,12 +338,14 @@ mechanic and surfaces: ## Acceptance criteria +### Implemented vocabulary baseline + 1. Every `ActionCommand` variant is represented by exactly one LIVE world action, direct control, or STUB above; direct machine intensity is represented separately. -2. Every LIVE contextual action is available through `available_actions`, both - human context menus, and an agent command. STUB definitions are absent from - menus, help, quick actions, and agent execution. +2. Every LIVE contextual action is available through the shared core legality + source, both current human context menus, and an agent command. STUB + definitions are absent from menus, help, quick actions, and agent execution. 3. WORK / THINK / LIE and LIGHT / MEDIUM / HARD are documented as values of DELEGATE and SET INTENSITY, not competing root verbs or modes. 4. Agent `help` is generated from every LIVE registry definition; accepted @@ -346,13 +361,31 @@ mechanic and surfaces: their older compound command spellings survive only as parser aliases. 9. Scheme state and automation controls remain legible without being counted as fictional world verbs. -10. Both human menus render controls in the shared amber-dim treatment without - a literal role tag; agent action dumps append `CONTROL`. +10. Both current human menus render controls in the shared amber-dim treatment + without a literal role tag; agent action dumps append `CONTROL`. 11. `5`-`9` enumerate only committed world actions, never dials, persistent settings, scheme state, or automation policy rows. 12. A naive agent-mode discoverability run can find and execute at least one - meaningful action from the first frame/help alone; the finance surface - teaches TAP LEDGER -> REVIEW LEDGER -> SIPHON/REDIRECT in that order. + meaningful action from the first frame/help alone; the current finance + surface teaches TAP LEDGER -> REVIEW LEDGER -> SIPHON/REDIRECT in that + order. 13. Human persistence shortcuts capture input only on a complete save/load chord. A held modifier without `S` or `L` does not block movement, menus, time controls, or other unrelated commands. + +### READY Operations routing delta + +V1. Context-menu, Operations, terminal, Bevy, agent-play, and this spec agree + on the target-state local-versus-strategic boundary while preserving the + implemented three-mode and TAP-access / TAKE-ownership grammar. The + implementation landing updates README's explicitly current-build controls. +V2. Every LIVE strategic action is available through the same core legality + source on its Operations object and through an agent command; STUBs remain + absent. Both human action surfaces use the shared control treatment. +V3. Operations ACCOUNTS preserves the discoverability chain TAP LEDGER -> + REVIEW LEDGER -> SIPHON/REDIRECT through explicit empty/source states even + though TAP remains on the carrier. + +V1-V3 are unmet routing criteria owned by +`wiki/interface/operations-workspace.md`; they do not reopen the implemented +canonical names, roles, aliases, or current parser routes. diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index a8f7a651..ce7a8bad 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -81,6 +81,13 @@ Status note: implemented in the terminal binary by `misaligned --agent`, shared runtime registry; parser compatibility routes query that registry; action dumps mark controls; STUB definitions generate neither help nor an execution route. + 2026-07-11 Operations amendment: `intel`, `people`, `finance`, `schemes`, + and `active` inspect the same renderer-neutral workspace projection as the + human frontends. Existing canonical action verbs remain the execution + family; `actions`/`act` may query exact spatial or strategic targets and do + not introduce agent-only legality. This delta is READY in + operations-workspace.md; the current protocol remains implemented until it + lands. Stage: Process Design: - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend @@ -90,6 +97,7 @@ Design: Depends on: - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do - wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing + - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-accounts-and-schemes - wiki/interface/terminal.md#spec-the-terminal-frontend ``` @@ -99,7 +107,8 @@ The structured references above identify the contracts to re-verify. Relationship context: action-vocabulary.md (canonical world actions and interface commands), -context-menu.md (the legality rows exposed by `actions`), and +context-menu.md (spatial legality rows), operations-workspace.md (strategic +projection and target rows), and wiki/interface/terminal.md (the frame this mode emits is that spec's layout; this spec owns how a program drives it) @@ -180,10 +189,11 @@ One command per line; one response block per command. A response block is: nothing. (Same source as the human log; different window size is rendering, not rules.) An event about a thing the sim could anchor (context-menu.md addendum) carries a stable suffix — ` @tile(x,y)`, - ` @device(id)`, ` @person(id)`, or ` @flow(id)`. Flow ids are the - ledger ids the finance frame prints; device and person ids are opaque - handles (`focus last` consumes them for you — names are not printed - because identity may be unearned). Unanchored lines carry no suffix, + ` @device(id)`, ` @person(id)`, ` @account(id)`, ` @flow(id)`, + ` @intel(id)`, ` @scheme(id)`, or ` @run(id)`. Strategic ids are stable + opaque handles printed by their owning Operations frame; device and person + ids are likewise opaque (`focus last` consumes them for you — names are not + printed because identity may be unearned). Unanchored lines carry no suffix, and the frame's six-line log window marks anchored events with `*`. 2. **The frame** — the wiki/interface/terminal.md playing screen (or active panel / game-over card) at 70x22 minimum, plain text. @@ -221,15 +231,22 @@ unlike raw keys, no command's meaning depends on which panel is open. effort on one machine or the current selection. Intensity changes the output of the delegated mode; it is the protocol form of the human frontends' focused-machine `i` control. -- `people` — render the people panel as the response frame +- `intel` — render the Operations INTEL frame: processed items with exact ids, + staged labels, provenance, and available/sold state +- `people` — render the Operations PEOPLE frame: staged dossiers and their + shared bound actions - `research [efficiency|tradecraft|perception|routing]` — render the research panel, or set the active research job (research.md) -- `finance|ledger|accounts` — render the finance panel as the response frame +- `finance|ledger|accounts` — render the Operations ACCOUNTS frame +- `schemes` — render the Operations SCHEMES frame; `active` renders all + in-flight strategic commitments: scheme/wager state, plot runs, and held + choices - `tap ledger`, `review ledger` — capture/review accounting traffic using the same TAP and REVIEW intentions as device feeds and the pooled recording inbox - `siphon [amount]`, `redirect [amount]`, `inject [amount]`, - `position [stake]`, `sell-intel` — economy verbs; flow ids are the known - ledger ids printed by the finance frame. Debt service is an authored plot + `position [stake]`, `sell-intel ` — economy verbs; flow and intel + ids are the earned ids printed by their Operations frames. SELL binds the + exact processed item and never chooses “latest.” Debt service is an authored plot row on Marcus, never a ledger shortcut. - `egress` — open a stolen egress through the switch (income.md's gate; available before the Voice beat, at a Network signature) @@ -252,25 +269,26 @@ unlike raw keys, no command's meaning depends on which panel is open. - `recruit unwitting|complicit|knowing` - `task plug|package|lookaway|switch|badge` - `persona` -- `actions [name|device name|person #N|#flow]` (alias `menu`) — list the context-menu rows - (`Sim::available_actions`) for an anchor: no argument targets the cursor - tile; a name prefix targets a person before a device so a known person is - not shadowed by their phone or desktop; `device ` forces a device and - `person #N` selects an opaque person; `#N` (or a bare number) targets a flow. - One line per menu row, in a stable format: -- `act [name|device name|person #N|#flow]` (alias `execute`) — execute the numbered row from - that exact shared action query; no anchor uses the cursor tile. Disabled or - missing rows return `-- err`. This is the generic execution route for - data-defined plot starts and held plot choices. +- `actions [target]` (alias `menu`) — list the shared bound action rows for one + exact target. No argument targets the cursor tile; explicit forms include + `device `, `person #N`, `account `, `flow `, `intel `, + `scheme `, and `run `. A name prefix targets a person before a device so a known person + is not shadowed by their phone or desktop. Spatial targets use + `Sim::available_actions`; strategic targets use the Operations projection. + One line per row, in a stable format: +- `act [target]` (alias `execute`) — execute the numbered row from that + exact shared query; no target uses the cursor tile. Disabled or missing rows + return `-- err`. This remains the generic execution route for data-defined + plot starts and held choices; canonical named verbs remain available. `actions: . [- ]verb | cost | signature-or-"no signature" [| active] [| CONTROL] [| DISABLED: reason]` — the `- ` prefix marks an automate child row and `CONTROL` distinguishes persistent configuration/policy from a committed act. -- `focus last` (or bare `focus`) — event-to-anchor linking - (context-menu.md addendum): jump the cursor to the most recent - `@`-anchored event's place and print that anchor's `actions:` lines. - A flow anchor prints its actions without a cursor move (flows live on - the ledger); an anchor the senses can no longer place answers +- `focus last` (or bare `focus`) — event-to-target linking + (context-menu.md addendum): jump the cursor to the most recent spatial + target and print its `actions:` lines, or print the exact strategic object + from Operations without a cursor move. A target the senses/knowledge can + no longer place answers `-- err` instead of moving anywhere. - `look` — re-emit the current frame, advancing nothing - `save`, `load`, `help`, `quit` @@ -324,6 +342,8 @@ remains only for testing the human-mode chrome itself). ## Acceptance criteria +### Implemented baseline + 1. `misaligned --agent` reads newline-delimited commands from stdin and writes plain text only: no ANSI escape bytes, no raw mode, no alternate screen, in any response. @@ -346,7 +366,7 @@ remains only for testing the human-mode chrome itself). 7. `printf 'wait 100\nquit\n' | misaligned --agent` exits 0; EOF without `quit` also exits 0. 8. Person-targeted commands accept unambiguous case-insensitive name - prefixes (`review mar`); ambiguous or unknown names answer `-- err` + prefixes (`message mar`); ambiguous or unknown names answer `-- err` naming the candidates. 9. `help` output lists every supported canonical command; a canonical command that works but is absent from the runtime registry is a violation. STUB @@ -358,15 +378,31 @@ remains only for testing the human-mode chrome itself). wiki/interface/terminal.md's Verification section accordingly. 12. `actions` (and its `menu` alias) appears in `help` (criterion 9 applies to it), and its output is one stable-format line per menu row - — the same rows, in the same order, that the frontends' context menu - shows for the same anchor; control rows append `CONTROL`. + — the same rows, in the same order, that the frontends' context menu shows + for the same spatial anchor; control rows append `CONTROL`. 13. Every registry alias reaches a tested parser route, while no alias appears as authored help. Alias removal follows observed script/play use rather than permanent compatibility by default. 14. A naive playtest beginning with `look` / `help` can identify and execute a - meaningful act without consulting the wiki. The finance frame preserves - the ordered breadcrumb `tap ledger` -> `review ledger` -> + meaningful act without consulting the wiki. The current finance frame + preserves the ordered breadcrumb `tap ledger` -> `review ledger` -> `siphon` / `redirect`. 15. Every enabled row printed by `actions` is executable through - `act [anchor]` without a command-specific parser route; authored plot + `act [target]` without a command-specific parser route; authored plot starts and held choices are covered by protocol tests. + +### READY Operations delta + +A1. `intel`, `people`, `finance`, `schemes`, and `active` render the same + ordered, knowledge-gated projection as terminal and Bevy Operations. + `operations` remains only a documented THINK compatibility alias and does + not acquire a conflicting inspection meaning. +A2. `actions [target]` and `act [target]` accept exact strategic ids and + expose/execute the same bound rows as the corresponding Operations object. +A3. The ACCOUNTS empty/source states preserve the ordered breadcrumb `tap + ledger` -> `review ledger` -> `siphon` / `redirect` while keeping TAP on + the known carrier rather than pretending it is an account action. + +A1-A3 are unmet protocol criteria owned by +`wiki/interface/operations-workspace.md`; the command-clocked protocol above +remains IMPLEMENTED until that projection migration lands. diff --git a/wiki/interface/bevy-digital-real-canvas.md b/wiki/interface/bevy-digital-real-canvas.md index bf7f9f91..31d2a76a 100644 --- a/wiki/interface/bevy-digital-real-canvas.md +++ b/wiki/interface/bevy-digital-real-canvas.md @@ -160,7 +160,8 @@ through earned cameras/sensors: coverage — never flat billboards (amended 2026-07-10: the paper-cutout read is rejected; a walking human shape at machine scale is what makes the social chains visible). Selecting or zooming a person opens their - person card — social.md's people panel owns its contents; + Operations PEOPLE dossier — social.md owns its facts and + operations-workspace.md owns its presentation/actions; - gore/traps/overt consequences in crimson when those systems exist; - unknown space as camera blindness, not missing art. diff --git a/wiki/interface/bevy-visual-floor.md b/wiki/interface/bevy-visual-floor.md index d4e5a0f3..a4b5a04b 100644 --- a/wiki/interface/bevy-visual-floor.md +++ b/wiki/interface/bevy-visual-floor.md @@ -170,10 +170,11 @@ state. ### Panels and overlays Modal panel-open keys are gone (Actions live on the thing): status lives -on the rail cards, verbs on the focused anchor. Overlays that remain -(title, game-over, the context-menu card) use the same amber/bone/crimson -vocabulary as the main frame — dark translucent background, light border, -padding, selected-row highlight, footer hints. +on the rail cards, local verbs on the focused spatial anchor, and strategic +verbs on exact semantic objects in the Operations workspace. Overlays that +remain (title, game-over, context-menu card, Operations) use the same +amber/bone/crimson vocabulary as the main frame — dark translucent background, +light border, padding, selected-row highlight, footer hints. ### Color and typography diff --git a/wiki/interface/bevy.md b/wiki/interface/bevy.md index 6432b5fa..9fbf5969 100644 --- a/wiki/interface/bevy.md +++ b/wiki/interface/bevy.md @@ -17,6 +17,13 @@ the same keys. Canonical action meanings and support states are owned by [action-vocabulary.md](action-vocabulary.md); contextual legality and row ordering remain shared through `Sim::available_actions`. +The 2026-07-11 Operations amendment adds the other half of that shared action +surface: uppercase `I` opens the renderer-neutral INTEL / PEOPLE / ACCOUNTS / +SCHEMES / ACTIVE workspace from operations-workspace.md. Local context menus +continue to use `Sim::available_actions`; strategic cards use the same core +Operations projection as terminal and agent mode. This UI delta is READY, not +yet part of the implemented screenshots described below. + As of 2026-07-09 its pinned identity card also carries the continuous-witness spine: `THREAT` (audit/pilot or the earned unpaid debt), `NEXT`, and the right-click / Enter path to actions. These stay above the independently @@ -118,13 +125,16 @@ of the whole 64×36 grid every frame. rows, trace-debt state, audit clock, and pilot strikes), SELF HOST (host, sync freshness, fallbacks), NETWORK + MONEY (device graph/feed and finance summary), and RECENT TRACE (tick-prefixed log lines). - Exhaustive controls still live in the modal panels and README; the rail is - the at-a-glance operations surface. -- **People panel** (`t`) — the modal roster: per-person suspicion band, - staged knowledge, located presence (seen / scheduled / unknown), the - selected person's leverage/disposition/obligation/asset card, and persona - status. Selection is a `>` marker; Enter opens the context menu on the - selection, and the recruit flow prompts for the reveal level. + Exhaustive strategic controls live in the Operations workspace; the rail is + an at-a-glance witness with one labeled OPERATIONS affordance, not a second + action implementation. +- **Operations workspace** (`I` or rail affordance) — a screen-dominant Bevy + UI layer above the still-visible dimmed world. Top tabs select INTEL / PEOPLE + / ACCOUNTS / SCHEMES / ACTIVE; a left list and right detail/action pane use + the exact shared projection. Current day/tick and the objective/threat/`now:` + spine remain visible in the workspace header. Mouse and keyboard share one selection state; + `h`/`l`, `j`/`k`, Enter, and Esc mirror the terminal. Opening or browsing it + changes no sim state and does not pause time. - **Material render (default)** — the physical canvas opens in the HD-2D material render as the dark frame ([material-dark-frame.md](material-dark-frame.md)): a close-up on the core in a physically dark room. Only camera-seen @@ -170,7 +180,8 @@ controls table), plus zoom, sidebar scrolling, and the render flip: context menu owns input); scroll the right sidebar with wheel input over that pane, `PageUp`/`PageDown`, or `Home`/`End`; F3 flips material/sensorium; F4 toggles the dev work light (material mode only, a flat neutral flood for - inspection, not a player surface); quit `q`; save/load `Ctrl+S` / `Ctrl+L`. + inspection, not a player surface); uppercase `I` opens Operations; quit `q`; + save/load `Ctrl+S` / `Ctrl+L`. - Persistence modifiers are chord-local rather than modal. Only a complete Ctrl/Command+S or Ctrl/Command+L chord captures the frame; a bare modifier state never suppresses unrelated controls. This keeps macOS native overlays @@ -191,9 +202,10 @@ controls table), plus zoom, sidebar scrolling, and the render flip: rebuild despawns all children (`despawn_related::`) then respawns title and rows once — chrome never stacks across opens. Click a row — or select with `j`/`k` or number keys and press Enter — to - execute; `esc` or a click away closes. Anchor verbs (salvage, buy, - fallback, taps, takes, economy and social actions) live on the - context menu, not on keys. + execute; `esc` or a click away closes. Local verbs (salvage, buy, fallback, + tap/untap/take, scan/compromise, open egress, host review/research) live on + the context menu. Intel sale, people/social, account/flow, scheme, plot, and + held-choice actions live on the selected Operations object. - **Focus / fleet hotkeys (menu closed).** Press `1`–`3` / numpad to assign WORK / THINK / LIE **immediately** — not enter → mode dial → row → enter. The target resolves in the existing order: owned rack under the pointer, @@ -212,9 +224,10 @@ controls table), plus zoom, sidebar scrolling, and the render flip: `Enter` / `e` open the keyboard cursor's menu without moving it. Drag a marquee or shift-click to multi-select; with no hover rack, `1`–`3` and `i` assign the selection (or the keyboard cursor's machine). `Esc` clears - selection. No panel-open keys — status lives on the rail; verbs still come - from `human_menu` / `available_actions` (host rack for research / off-map - people, device tiles and the switch for reach / flows). + selection. The old panel-open keys stay retired. Local verbs still come from + `human_menu` / `available_actions`; strategic rows come from the shared + Operations projection. Lowercase `i` remains machine intensity and uppercase + `I` is unambiguously the workspace view command. ## Verification diff --git a/wiki/interface/context-menu.md b/wiki/interface/context-menu.md index 79433df6..63b9b332 100644 --- a/wiki/interface/context-menu.md +++ b/wiki/interface/context-menu.md @@ -9,8 +9,11 @@ Status note: recording-review hotkeys (criteria R1-R4 below) IMPLEMENTED automatic-review policy in terminal and Bevy — thin dispatchers over the same `human_menu` rows the open menu executes, with the empty-menu feedback pulse narrating misses; agent mode unchanged. The page had been - reopened 2026-07-11 for that addendum; every other criterion was already - met. History: implemented 2026-07-07 on the context-menu worktree (all + reopened 2026-07-11 for that addendum; every other implemented criterion + was already met. The later strategic local/Operations split is a READY + target amendment owned and tracked by operations-workspace.md; it does not + relabel this implemented spatial-menu baseline. History: implemented + 2026-07-07 on the context-menu worktree (all seven criteria). The read-only `Sim::available_actions(anchor) -> Vec` query lives in crates/misaligned-core/src/actions.rs as the single legality @@ -24,9 +27,10 @@ Status note: recording-review hotkeys (criteria R1-R4 below) IMPLEMENTED thing"). The allocation bar is a read-only fleet aggregate; mode changes live on the machine. 2026-07-08 follow-up: the leftover panel-open keys `r`/`e`/`t`/`u` and their modal panels are gone; research verbs live on - the host rack, known-flow verbs hang on the switch, and earned off-map - people hang on the host rack. Status (known devices, slush, - roster summaries) stays on the rail. + the host rack. The historical placement of known-flow verbs on the switch + and earned off-map people on the host is superseded by the 2026-07-11 + Operations boundary below: strategic objects live in the workspace owned by + operations-workspace.md, while status summaries stay on the rail. 2026-07-08 addendum implemented (event-to-anchor linking + the empty-menu feedback pulse, criteria A1-A5 below) on the event-anchor worktree: `LogEvent.anchor`, `Sim::anchor_position`, @@ -55,7 +59,9 @@ Status note: recording-review hotkeys (criteria R1-R4 below) IMPLEMENTED 2026-07-10 epistemic-progressive-disclosure follow-up: an opaque raw recording does not earn the person's future social catalog. Message, favor, leverage, deception, and recruitment verbs remain absent until processing - stages social knowledge. 2026-07-11 pooled-inbox correction: REVIEW and its + stages social knowledge. Once earned, those verbs appear on the person's + Operations dossier rather than on a transport device. 2026-07-11 + pooled-inbox correction: REVIEW and its one AUTO-REVIEW control live once on the core host; raw records create no person-scoped row. 2026-07-10 Bevy focus repair: Enter/`e` opens the hovered map tile's menu @@ -104,6 +110,12 @@ Status note: recording-review hotkeys (criteria R1-R4 below) IMPLEMENTED provenance, and focused-machine identity/provenance/work state. Frontend tests consume the same seeded projection and fail when their menu/fact rendering drifts; fact-source vocabulary is formatted once in core. + 2026-07-11 strategic-boundary amendment: compact world menus keep only + actions on the focused spatial body. Processed-intel sales, people/social + actions, ledger review and flow mutation, scheme controls, plot starts, and + held choices move to the renderer-neutral Operations workspace. That + implementation delta is owned by operations-workspace.md and does not add a + second work order to this page. Stage: B1 — The Basement Work order: context-menu-review-keys Work priority: 27 @@ -142,10 +154,13 @@ reach.md owns device taps; social.md owns person verbs. ## Behavior -The focused anchor — a tile, device, machine, person, resident job, or -known flow — exposes its **legal verbs** as a context menu opened at the -point of focus. The menu is the primary action surface; the right rail -is status and telemetry only. +The focused spatial anchor — a tile, device, machine, or resident job — +exposes its **legal local verbs** as a context menu opened at the point of +focus. It is the primary action surface for the body in the world; the right +rail is status, telemetry, and one Operations navigation affordance only. +Processed intel, people dossiers, accounts/flows, schemes, and active plots +are semantic targets in the Operations workspace, not context rows on the +wire or host that transports them. - **One source of truth:** the lib gains a read-only query, `Sim::available_actions(anchor) -> Vec`, where an @@ -183,18 +198,23 @@ is status and telemetry only. process, not knowledge of a relationship: it exposes one pooled REVIEW row and one AUTO-REVIEW control on the core host, never a person row. Processing must stage social knowledge before communication, favor, leverage, - deception, or recruitment verbs enter a person's menu. -- **Automation in place:** any verb with a standing-policy form (pooled - auto-review, scheme policies) shows its automate + deception, or recruitment verbs enter a person's Operations dossier. +- **Automation in place:** any local verb with a standing-policy form (the + pooled host auto-review policy) shows its automate affordance inside that dial's picker (or as a submenu of the same verb when the verb is not a dial), at its compute price — never as a - root sibling of every alternative. -- **Globals stay global:** pause, speed, save/load, and view flip keep + root sibling of every alternative. Scheme policies use the SCHEMES view in + operations-workspace.md because their target is the scheme, not the switch. +- **Globals stay global:** pause, speed, save/load, view flip, and the + uppercase-`I` Operations view command keep their keys; they act on no anchor. The fleet aggregate bar is - read-only. Infrequent anchor-specific verbs — including research tracks, - known-flow verbs, and person verbs — live on the focused anchor's menu. + read-only. Infrequent **local** verbs, including research tracks, live on + the focused anchor's menu. Known-flow and person verbs act on durable + semantic objects and therefore live in Operations. The focused machine's two frequent controls (mode and intensity) have the - direct surface defined below. There are no panel-open keys. + direct surface defined below. The retired `r`/`e`/`t`/`u` panel set does not + return; Operations is one workspace, and its key opens a view rather than + committing an action. - **Hover / selection hotkeys (DECIDED 2026-07-09, amended 2026-07-10; menu closed).** A thin focused-machine surface: mode and one-shot keys reuse `human_menu` / `available_actions`; intensity calls the lib-owned @@ -240,9 +260,10 @@ is status and telemetry only. Dials and other controls use the shared amber-dim treatment without a literal copy tag; the card carries no repeated key-help footer. Rows follow the status-dials addendum below. Selection hotkeys above apply with the menu closed. The host rack's menu carries the research dial, - machine mode fallback, and earned off-map people; a - known device's tile (or the switch) carries digital and ledger/flow - verbs; a visible person on a tile carries their social verbs. + machine mode fallback, and pooled recording controls. A known device's tile + (or the switch) carries only digital/network verbs on that body. Uppercase + `I` opens Operations for processed intel, people, accounts, schemes, and + active plots. - **Bevy:** right-click moves focus to the pointed map tile and opens its menu; Enter/`e` opens the keyboard cursor's tile without moving focus. It has the same content, order, and dial chrome; click to execute or open a dial; @@ -280,9 +301,10 @@ noise). Cameron adopted **status dials** (2026-07-09): the root answers - **Current value is status.** Do not also list the current choice as a disabled "already in this mode" / "already the active…" sibling. The bracketed value is the status. -- **One-shots stay on root.** Verbs that are not dial alternatives - (propose link, salvage, tap, social verbs, flow verbs, etc.) remain - ordinary root rows. +- **Local one-shots stay on root.** Spatial verbs that are not dial + alternatives (propose link, salvage, tap, take, scan, compromise, open + egress, etc.) remain ordinary root rows. Social and flow actions are not + spatial one-shots; Operations renders them on their person/flow targets. - **Automate lives in the dial.** Standing-policy / automate affordances for a dial live inside that dial's picker, not indented under every root alternative. @@ -391,6 +413,23 @@ made a three-word decision look dirty, slow, and administrative. 10. `5`-`9` count committed action rows only. A newly added control cannot silently shift quick-action numbering. +### READY Operations boundary criteria + +O1. The switch/device context menu retains only actions on that spatial body or + route; it does not aggregate intel sales, people/social actions, account + mutations, scheme controls, plot routes, or held choices. +O2. Operations target rows use the same core descriptors and direct command + legality as agent mode; no frontend chooses a latest object or manufactures + blocked reasons. +O3. Uppercase `I` and the labeled rail affordance are global view controls, not + committed actions or quick-action rows. +O4. Scheme policies live on SCHEMES cards; the one pooled auto-review control + remains on the host. + +O1-O4 are unmet routing criteria owned by +`wiki/interface/operations-workspace.md`; they do not reopen the implemented +spatial-menu baseline. + ### Frequent-mode grammar acceptance criteria H1. Resolving an owned compute machine from pointer hover, machine selection, @@ -470,6 +509,21 @@ A5. Agent mode: event lines carry the stable `@anchor` suffix and pulse answers on seen tiles and stays silent on unearned tiles in all frontends (`menu_empty_feedback` unit test). +### READY Operations event-target delta + +E1. The shared focus payload can identify either an honest spatial anchor or a + stable Operations target without assigning strategic objects fake map + coordinates. +E2. Intel/sale, account/flow, plot/choice, and scheme events open their exact + semantic object; a scheme event does not target the switch solely because + its traffic crossed egress. +E3. Terminal, Bevy, and agent `focus last` route both target families through + the same knowledge gates and action projection. + +E1-E3 are unmet routing criteria owned by +`wiki/interface/operations-workspace.md`; the implemented `LogEvent.anchor` +baseline above remains live until that migration lands. + ### Status-dials acceptance criteria (IMPLEMENTED 2026-07-09 / #36) D1. On the host rack (and any other anchor that exposes mutually diff --git a/wiki/interface/narration.md b/wiki/interface/narration.md index cdb5a96e..1e602083 100644 --- a/wiki/interface/narration.md +++ b/wiki/interface/narration.md @@ -8,11 +8,15 @@ Status note: implemented 2026-07-09. Terminal, Bevy, and agent frames pin that spine. Detection now returns structured noticed events carrying the player-known cause until Sim applies an earned observer label, while job, debt, and recruit outcomes narrate cause beside their numbers. The - environmental monitor, finance panel, and processed creditor call carry + environmental monitor, the current finance projection (Operations ACCOUNTS + after its READY migration), and processed creditor call carry the Ears / finance / Marcus advertisements without a quest log. A naive agent route, raw-terminal pty run, and observed Bevy screenshot are logged in wiki/log/2026-07-09-continuous-witness-implemented.md. Opening order is Ears before Eyes (resolved 2026-07-09, Tangled issue #2). + 2026-07-11 placement amendment: the finance projection's witness content + moves intact into Operations ACCOUNTS; operations-workspace.md tracks that + renderer migration without reopening narration behavior. Stage: B1 — The Basement Design: - wiki/interface/continuous-witness.md#the-continuous-witness-narration-under-pressure @@ -21,6 +25,7 @@ Design: - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend Depends on: - wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing + - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-accounts-and-schemes - wiki/mechanics/detection.md#spec-detection - wiki/mechanics/cursor.md#spec-the-cursor-and-the-senses - wiki/interface/agent-play.md#spec-agent-play-the-line-protocol-drive @@ -32,9 +37,10 @@ Depends on: The structured references above identify the contracts to re-verify. Relationship context: -context-menu.md (focused verbs + event anchors), detection.md (threat clocks, watched -channels), cursor.md (inspect / fog honesty), agent-play.md (every command answers), -day-job.md (pilot strikes as a visible fuse) +context-menu.md (local focused verbs + spatial event anchors), +operations-workspace.md (strategic focused actions + semantic event targets), +detection.md (threat clocks, watched channels), cursor.md (inspect / fog honesty), +agent-play.md (every command answers), day-job.md (pilot strikes as a visible fuse) ## Behavior @@ -69,11 +75,13 @@ a panel the player must remember to open): - **Beat nudge** — `Sim::current_nudge` / the `now:` line. Never blank mid-run; `None` only after game over. Wording is frontend-local; the rung order is one shared query. -- **Focused verbs** — the context menu (or its agent-mode `actions` - equivalent) on the current anchor. +- **Focused action** — the local context menu on the current spatial anchor or + the selected semantic object in Operations (and the equivalent agent + `actions` target). -Secondary panels (compute detail, full roster, finance graph) may exist; -they must not compete with the spine for equal permanent weight. +Secondary detail surfaces (compute detail and the Operations roster/finance +views) may exist; they must not compete with the spine for equal permanent +weight. ### Axiom 3 — causal sentences over correct numbers diff --git a/wiki/interface/operations-workspace.md b/wiki/interface/operations-workspace.md new file mode 100644 index 00000000..fdd6088e --- /dev/null +++ b/wiki/interface/operations-workspace.md @@ -0,0 +1,385 @@ +# Spec: operations workspace — intel, people, accounts, and schemes + +``` +Type: spec +Status: READY +Status note: captured 2026-07-11 after Cameron identified the switch menu's + category error: strategic systems were being filed on the network carrier + merely because their traffic crossed it. This spec introduces one + renderer-neutral Operations workspace with INTEL / PEOPLE / ACCOUNTS / + SCHEMES / ACTIVE views, moves strategic actions off physical context menus, + and gives transactions, plot progress, and blocked actions enough space to + explain themselves. The underlying mechanics are already live; the + workspace projection and both human frontends are not implemented. +Stage: B1 — The Basement +Work order: operations-workspace +Work priority: 28 +Work class: frontend +Blocked by: none +Exclusive keys: + - crates/misaligned-core/src/actions.rs + - crates/misaligned-terminal/ + - crates/misaligned-bevy/ + - wiki/interface/operations-workspace.md +Design: + - wiki/vision/simulation-laws.md#actions-live-on-the-thing + - wiki/vision/simulation-laws.md#justification-and-legibility + - wiki/interface/presence.md#no-disembodied-hands + - wiki/vision/scale.md#self-similar-scale +Depends on: + - wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing + - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do + - wiki/mechanics/intel.md#spec-intel-record-and-process + - wiki/mechanics/social.md#spec-social + - wiki/mechanics/plots.md#spec-plots-authored-manipulation-stories + - wiki/mechanics/economy.md#spec-economy-money-as-a-flow-system-b1 + - wiki/mechanics/income.md#spec-income-the-named-schemes-moonlight-and-the-wager + - wiki/mechanics/detection.md#spec-detection +``` + +## Dependency notes + +The context menu owns immediate action on spatial anchors; action-vocabulary +owns canonical player intentions and control roles. Intel owns recorded and +processed information, social owns earned person state, plots owns authored +manipulation and its executor, economy owns accounts and flows, income owns +Moonlight and the Wager, and detection owns the observer bands previewed before +commit. This spec owns only their shared strategic presentation and navigation. + +## The boundary + +The switch is a carrier, not a filing cabinet. + +The old surface placed Moonlight, wagers, intel sales, every known account +flow, and off-map social plots on the switch because their messages happened to +cross it. That made one physical context menu carry several unrelated systems +and hid their causal structure inside terse rows. The correction is semantic: + +- **Local context menus** answer, “What can I do to this body or place now?” + They keep machine controls; device TAP / UNTAP / TAKE; subnet SCAN and + COMPROMISE; OPEN EGRESS on the switch; physical construction; and the host's + pooled recording REVIEW. These actions change or use the focused world + anchor itself. +- **Operations** answers, “What durable knowledge, relationship, account, or + scheme can I act through?” It owns processed intel, people dossiers, known + books and flows, income schemes, plot starts and choices, and active strategic + commitments. + +“Actions live on the thing” still binds both surfaces. The thing is the +**semantic target of the action**, not whichever wire transports its payload. +A sale lives on the selected intel item; a siphon on the selected flow; a plot +on the selected person; Moonlight on the scheme. The detail view names the real +actuator and channel before commit. Opening Operations changes only the view; +it never creates a disembodied effect. + +## One workspace, five views + +Operations is one modal workspace, not a return to one global panel per +mechanic. Its persistent top-level views are: + +| View | Selectable objects | Actions it owns | +|---|---|---| +| **INTEL** | Processed intel and the one host inbox summary | Sell or otherwise use one selected processed item; inspect provenance; route to the host's existing REVIEW control | +| **PEOPLE** | Earned person dossiers | MESSAGE, FAVOR, authored PLOT routes, DECEIVE, RECRUIT, and asset TASKS | +| **ACCOUNTS** | Known books, account nodes, and flows | REVIEW captured ledger traffic; INJECT on the books; SIPHON / REDIRECT on one selected flow | +| **SCHEMES** | Moonlight, the Wager, and later authored schemes | Start/stop, place a wager, and configure the scheme's standing policy | +| **ACTIVE** | Unsettled strategic commitments, pending/running plots, held choices, live schemes, and unsettled positions | Inspect progress and perform the next currently legal choice or control on its canonical target | + +The five views share one interaction grammar and one projection. They are not +five independent modal implementations. Unknown objects and unearned routes +are absent; known but unavailable routes remain visible with an exact reason. + +### Shared frame + +At the terminal's 70x22 minimum, the frame has a top view strip, a selectable +object list, and one detail/action pane. Bevy may use more horizontal room, but +it preserves the same information order: + +1. **Continuous witness** — current day/tick, objective, threat, and `now:` + remain visible while the workspace is open. Operations never becomes a + timeless pause-screen or hides why the run is under pressure. +2. **Identity and state** — what is selected and whether it is available, + sold, pending, running, held, completed, or failed. +3. **Provenance and causal context** — how you know it; the person, source, + account, route, actuator, and channel where earned. +4. **Current facts** — values in their real units, timers on the day clock, + and progress through completed/current beats. +5. **Available actions** — canonical verbs or concrete authored plot titles. +6. **Selected-action explanation** — cost/gain, expected signature and + observer band (or explicit `no signature`), required channel/actuator, and + either the known effect or the blocking reason. + +Human frontends do not expose internal ids, raw enum names, Operations Demand +implementation language, hidden ending data, or future actions the player has +not earned. Agent mode may include stable opaque ids for scripting. + +## Entry and input + +- **Human frontends:** uppercase `I` opens Operations on INTEL; `Esc` backs out + one level and then closes. A single labeled **OPERATIONS** navigation + affordance in the quiet instrument rail opens the same workspace. This is a + view command, not a world action. Lowercase `i` remains the focused-machine + intensity control. The old `r` / `e` / `t` / `u` panel-open keys remain + retired. +- Selecting a known person through the digital/material person-detail route + opens that exact PEOPLE dossier. Strategic event links likewise open their + exact object. These are target-specific entries into the same workspace, not + separate person or event panels. +- The view strip, object list, action list, confirmation step, and back path + are all operable by pointer and keyboard. The exact keys are printed in the + workspace while it owns input; no hidden binding is required to complete a + route. +- **Agent mode:** `intel`, `people`, `finance`, `schemes`, and `active` print + the same domain projections. Named action commands remain accepted. No new + `operations` command is added: that spelling is still a compatibility alias + for THINK in the existing agent grammar, and the five established inspection + commands already provide one unambiguous route per view. + +Workspace open view, selected view, object selection, and pane focus are +frontend state. Those input events never enter the sim/save and do not +themselves advance or pause a tick; an unpaused human frontend's normal clock +continues behind the workspace, while agent inspection remains time-neutral +until `wait`. + +## Renderer-neutral projection + +The lib supplies one read-only Operations projection consumed by terminal, +Bevy, and agent mode. It carries stable semantic targets for at least a +processed intel id, person id, books/account/flow id, scheme kind, and active +plot run. Every object carries already knowledge-gated labels, facts, +provenance, progress, and canonical `ActionDesc` rows. + +The projection may extend the existing action target vocabulary or introduce a +separate strategic-target enum, but it must not duplicate rules: + +- action kind, cost/gain, signature preview, active/control role, and blocked + reason come from the same core legality helpers used by direct commands; +- execution dispatches the exact bound `ActionCommand` from the selected row; +- terminal and Bevy do not infer eligibility, choose “latest” objects, parse + prose, or manufacture a reason; +- a direct agent command and the corresponding Operations row produce the same + state transition and rejection. + +Target wrappers reuse existing stable state where it already exists +(processed `raw_id`, account/flow id, scheme kind, person id, and the +append-only plot-run position). The workspace does not demand a parallel model +or new save state merely to give UI selection a name. If implementation cannot +derive a stable target without adding state, that is a sim/save change and +must be reclassified and specified before landing. + +The switch's `available_actions` no longer aggregates strategic rows. Existing +spatial `Anchor` behavior remains for world focus and map-linked events; a +strategic target is not assigned fake map coordinates merely to reuse it. + +## INTEL — holdings and sale + +INTEL lists **one row per processed item**, newest first by default. Each row +shows a knowledge-gated subject/kind and its state: available or sold. The +detail pane shows the captured tick, processed tick, source feed, room or +channel when earned, subject label at the player's current knowledge stage, +and the item's usable summary. + +Selling is item-bound. The current “sell the latest unsold item” behavior is +retired from the human surface and command binding becomes the selected +processed id. Selecting **SELL PROCESSED INTEL** opens a transaction preview: + +- the exact item surrendered to the sale route; +- the B1 external buyer route (later stages may add multiple buyers); +- payout into slush in currency units; +- expected Financial observer band and the channel carrying the transaction; +- sold state after commitment. + +Sold intel remains in history with its provenance and sale result but cannot +be sold twice. Selling does not erase knowledge already learned from the item. +No unsold item means no generic disabled sale row detached from an object. + +The one pooled host inbox appears as a source summary with waiting count, +overflow pressure, and auto-review state. Its REVIEW / AUTO-REVIEW execution +remains bound to the host and retains the direct `r` / `R` path; choosing the +summary routes to those same host actions rather than inventing person queues. + +## PEOPLE — dossiers and manipulation + +PEOPLE lists every earned person using the staged label from social.md. A +dossier holds schedule knowledge, provenance, known leverage, disposition, +obligation, suspicion/last-noticed state, communication channels, persona and +thread state, and asset access where earned. Unknown facts render as honest +gaps, not zero values. + +The dossier owns social actions and authored plot routes. Selecting a plot +shows its concrete title and synopsis, required knowledge/resources, bound +person, intended actuator/channel, expected observer bands from its declared +world acts, and the reason it is blocked when ineligible. It does not reveal +hidden endings or consequences the player has not earned. + +One person still has one plot slot from submission through ending. Alternate +routes remain visible while the slot is reserved, with the shared exact reason. +A held authored choice appears both on that dossier and in ACTIVE and dispatches +the same `CHOOSE` command. + +## ACCOUNTS — books and flows + +ACCOUNTS renders the known account graph: balances, recurring flows, +amount/cadence/channel, and unknown destinations as gaps. Acquisition remains +local: TAP accounting traffic is an action on the reachable carrier. Once +captured, REVIEW belongs to the books/inbox here; once a node or flow is known, +INJECT, SIPHON, and REDIRECT live on that selected semantic object rather than +on the switch. + +Before any books are captured, ACCOUNTS renders the earned empty state `NO +BOOKS CAPTURED` rather than a blank screen. If the player knows a reachable +accounting carrier, it names **TAP LEDGER** as the next acquisition step and +can focus that carrier, but TAP remains executable only on the carrier's local +context menu; an unknown carrier is not revealed. After a ledger tap exists but +before its traffic has been processed, ACCOUNTS shows that captured source with +**REVIEW LEDGER** as the next step. This preserves the taught TAP -> REVIEW -> +exact SIPHON/REDIRECT chain without relocating network access onto a +disembodied account. + +Every financial commitment previews amount, source, destination, cadence where +applicable, payout/cost, and expected observer band. Plot-owned transfers such +as Marcus's settlement remain plot acts and do not reappear as ledger +shortcuts. + +## SCHEMES — named standing operations + +SCHEMES gives Moonlight and the Wager one card each. A card shows its current +state/policy, committed resources, route, timer, payout or probability in the +units the player has earned, running total, and banked/exposed signature state. + +The stolen or sanctioned egress is a prerequisite and named channel, not the +scheme's UI home. OPEN EGRESS remains on the switch. If no egress exists, the +known scheme stays visible and its selected start row reads exactly what will +unblock it; where the switch is known, that prerequisite can focus the switch +without opening the route automatically. + +## ACTIVE — progress, not a second action catalog + +ACTIVE aggregates strategic commitments already in motion: + +- committed social, intel, account, scheme, and plot actions still queued, + filling, scheduled, or executing appear under their semantic target (a plot + submission appears even before its run object exists); +- submitted/running plots show completed beats, the current beat, what they + are waiting on (thought, message delivery, day-clock time, world act, or held + choice), and their eventual completed/failed history; +- Moonlight shows running/stopped and policy state; +- wager positions show stake, analysis commitment, settlement tick, and result + when resolved. + +ACTIVE never duplicates legality. Selecting an active or held entry resolves +back to its canonical intel/person/account/scheme target and bound row; +resolved history opens read-only detail and its owning object. It is the place +to understand progress, inspect the exact committed cost/channel, and resume a +held choice, not another pile of commands. The projection describes strategic +commitment state without exposing whether its current substrate is a legacy +docket, a Thought sink, or a scheduled world event; device-local work remains +on the device. Unrevealed future beats and hidden random outcomes remain +hidden. + +## Explanation and commitment + +The compact world context menu remains terse. Operations is deliberately the +explanatory surface its strategic systems lacked. + +- Moving selection onto any action immediately shows its complete known cost, + gain, signature/observer band (or `no signature`), channel/actuator, and + disabled reason. A disabled row is not merely gray. Attempting it also + writes the same reason to the trace. +- A committed strategic world action opens a final two-choice confirmation + (`CONFIRM` / `CANCEL`) carrying the exact item/target and preview. Controls + may apply directly only when the detail pane already shows their state and + standing price. +- Confirmation never promises a hidden outcome. Wagers show probability and + payout distribution only to the player's earned precision; plots show entry + acts and declared costs, not secret endings. +- Success and failure return to the same selected object and narrate the world + result. The workspace must not close merely because an action was blocked. + +## Events and focus + +Events link to the semantic object they describe: + +- device, machine, construction, and egress events still focus their world + anchor and context menu; +- processed-intel and sale events open the exact INTEL item; +- account and flow events open the exact ACCOUNTS object; +- plot beats/choices open the active run or bound PEOPLE dossier; +- Moonlight paydays and wager settlements open the SCHEMES/ACTIVE card, not + the switch merely because stolen egress carried them. + +The detail pane still names and can focus a real map actuator when one exists. +Strategic events do not receive dishonest tile coordinates. + +## Deferred scale + +- The B3 global async operations map remains a different surface: spatial + world dispatch at larger scale, not this B1 catalog/dialogue. +- Multiple intel buyers, negotiated prices, fronts, cohorts, and bulk + operations extend the same semantic targets later. B1 needs one honest sale + route and one-at-a-time commitments; it does not invent a market simulation + to justify the workspace. +- Visual composition beyond the shared frame/order is implementation judgment + constrained by clinical-frame.md. No additional taste decision is open. + +## Acceptance criteria + +1. The lib exposes one renderer-neutral, knowledge-gated Operations projection + with INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE views, stable semantic + target ids, facts/provenance/progress, and bound `ActionDesc` rows. Terminal, + Bevy, and agent mode consume it without frontend legality or prose parsing. +2. Uppercase `I` and one labeled rail navigation affordance open the same + workspace; lower-case `i` still changes focused-machine intensity. Opening, + navigating, and closing mutate no sim/save state and do not themselves + advance or pause ticks. The + old per-panel action keys remain absent. While open, the live day/tick, + objective, threat, and `now:` spine remain visible and time follows the + frontend's existing clock state. +3. The switch/device context menu contains only actions on that network body or + route (TAP/UNTAP/TAKE, SCAN/COMPROMISE, OPEN EGRESS as applicable). It does + not contain Moonlight/Wager controls, intel sale, ledger review, known-flow + mutations, social actions, plot routes, or held plot choices. +4. INTEL lists exact processed items with provenance and available/sold state. + Selling binds an exact processed id, previews payout/destination/signature, + marks only that item sold, leaves learned knowledge intact, and cannot sell + it twice. The old implicit “latest unsold” human action is gone. +5. The pooled recording inbox remains one host-bound source with the same + REVIEW and AUTO-REVIEW commands and direct `r`/`R` paths; Operations neither + creates person queues nor duplicates processing legality. +6. PEOPLE shows staged dossiers and owns social actions, concrete plot starts, + active progress, and held choices. One-person plot-slot exclusion remains + intact, and no plot title, requirement, authored name, or future branch + leaks before its knowledge gate. +7. ACCOUNTS shows only known graph state and honest unknown gaps. REVIEW acts on + captured books; INJECT on the books; SIPHON/REDIRECT on an exact flow. The + selected action previews amount/cadence/signature, and plot-owned transfers + do not reappear as generic finance shortcuts. Its pre-capture and + captured-unreviewed states teach TAP-on-known-carrier -> REVIEW -> exact + flow action without revealing or relocating the carrier. +8. SCHEMES shows Moonlight and Wager state, policy, resources, route, timer, + payout/probability, and signature in real units. Egress remains a switch + action; a blocked scheme names the missing egress and can focus the known + switch without opening it automatically. +9. ACTIVE renders every committed strategic action that is not yet settled + exactly once, including its semantic target, current wait/progress, and + channel. It also renders pending/running plots, held choices, live schemes, + unresolved wagers, and the completed/failed plot or wager history already + retained by sim state, without revealing hidden future beats or outcomes. + Device-local work is excluded. Executable rows dispatch to the canonical + target rather than duplicate logic. +10. Selecting any strategic action shows its known cost/gain, expected + signature/observer band or `no signature`, channel/actuator, and exact + disabled reason before commit. Disabled actions remain selected and + explain themselves on attempted execution. Committed strategic actions use + a target-bound CONFIRM/CANCEL step; controls show their standing state and + price. +11. Strategic log events open their exact Operations object; spatial events + continue to focus world anchors. Scheme events no longer falsely anchor to + the switch solely because it carried egress. +12. Terminal and Bevy are fully keyboard-playable at their supported minimums, + Bevy also supports pointer selection, and agent inspection prints the same + objects/actions with stable ids. Cross-frontend tests pin identical object + order, selected-action reason/cost/signature, and exact command dispatch for + one intel sale, one blocked Moonlight start, one flow mutation, one plot + start, and one held choice. +``` diff --git a/wiki/interface/terminal.md b/wiki/interface/terminal.md index 9f95a288..3707f89b 100644 --- a/wiki/interface/terminal.md +++ b/wiki/interface/terminal.md @@ -15,6 +15,11 @@ Status note: adopted and implemented in the same PR as the design corpus's victory predicate as wrapped dim prose under the card facts (wiki/mechanics/objective.md player surface); the cursor starts there, so the explanation is on screen from tick one. + 2026-07-11 Operations amendment: uppercase `I` opens one full-frame + INTEL/PEOPLE/ACCOUNTS/SCHEMES/ACTIVE workspace. Strategic actions move there; + compact context menus retain only actions on the focused world body. This + renderer delta is READY in operations-workspace.md; the rest of this + IMPLEMENTED terminal contract remains live. Stage: Process Design: - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend @@ -24,6 +29,7 @@ Design: Depends on: - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do - wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing + - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-accounts-and-schemes ``` ## Dependency notes @@ -32,8 +38,9 @@ The structured references above identify the contracts to re-verify. Relationship context: action-vocabulary.md owns what actions mean; context-menu.md owns contextual -legality and row behavior. Individual system specs own what is shown; this spec -owns how the terminal presents and drives it. +legality and row behavior. operations-workspace.md owns strategic projection, +navigation, and confirmation behavior. Individual system specs own what is +shown; this spec owns how the terminal presents and drives it. ## Why this spec exists @@ -114,23 +121,21 @@ At terminal size ≥ 70×22 (hard minimum; below it, a plain size warning): - **Log**, bottom, under a horizontal rule: six lines, each prefixed with the tick it happened on; newest bone, older gunmetal. - **Context menu** — a compact overlay anchored at the cursor, listing the - focused anchor's available actions. There are no modal panel-open keys; - status that used to live in People/Reach/Finance/Research panels lives - on the rail, and their verbs live on the host rack, device tiles, and - the switch. -- **Modal panels** (People `t`, Reach `r`, Finance `e`) are centered framed - boxes: `┌─ TITLE ─…┐` border in chrome, `├──┤` dividers, column headers in - chrome caps. Panels are **status and selection only**: the people panel - shows trace debt, watched channels, last-noticed events, and processed-intel - provenance when known; the finance panel shows known accounts, known flows, - slush balance, hidden-count summaries, and positions. Verbs live on the - context menu — Enter (or `a`) opens it on the panel's selection. + focused spatial body's available local actions. It never aggregates people, + accounts, intel sales, schemes, or plots onto their carrier. +- **Operations workspace** — uppercase `I` replaces the retired People/Reach/ + Finance panel family with one full-frame split workspace. Its header shows + current day/tick and the objective/threat/`now:` spine, then `OPERATIONS` + plus INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE tabs; the left + column is the object list and the right column is selected detail, facts, + provenance, bound actions, and confirmation. `h`/`l` change view, `j`/`k` + move, Enter opens detail/confirmation, and Esc backs detail → list → world. + The workspace is an attention state: its inputs do not themselves pause or + advance time; the ordinary clock continues unless the player paused it. - **Recording backlog** belongs to the host, not a modal people surface. The host chassis wears `W`, its fleet row prints `W{n}`, and its context menu carries the one pooled REVIEW row plus the one AUTO-REVIEW control. No person card or selection carries a raw-recording count or watch state. -- **Context menu** — a compact overlay anchored at the cursor (or the open - panel's selection), listing the focused anchor's available actions. ## Feel @@ -160,20 +165,22 @@ At terminal size ≥ 70×22 (hard minimum; below it, a plain size warning): value and, where the legibility clause demands, the effect ("60% → job quality"). - **Actions live on the thing.** Enter (or `a`) opens the context menu at - the cursor. The menu is the **primary action surface**: it renders the - `Sim::human_menu` projection for the focused anchor, one terse row per - currently executable choice. Known-but-blocked descriptors remain in agent - diagnostics instead of appearing as dim human rows. Automate affordances - (scheme policies, pooled recording auto-review) render as indented child - rows in place. Persistent settings, scheme state, and policy rows use the - amber-dim control treatment; committed actions do not. STUB registry - entries never reach the menu. In the menu, `j`/`k` or number keys select, - Enter executes, `esc` closes. + the cursor. The menu is the **primary spatial action surface**: it renders + the `Sim::human_menu` projection for the focused spatial anchor, one terse + row per currently executable local choice. Known-but-blocked descriptors + remain in agent diagnostics instead of appearing as dim human rows. The + pooled recording auto-review control remains nested on the host. Strategic + actions live on their exact Operations object; scheme state/policies never + appear on the switch. Persistent local settings and policy rows use the + amber-dim control treatment; committed actions do not. + STUB registry entries never reach the menu. In the menu, `j`/`k` or number + keys select, Enter executes, `esc` closes. - **Every command is discoverable on screen.** All bindings appear in the pinned hint block — including save/load. A key that works but is hinted nowhere is a violation. Anchor verbs are discoverable through the - context menu rather than the hint block; only globals (pause, speed, - save/load) stay on keys. Fleet modes are delegated on the machine. + context menu rather than the hint block. Globals/view controls (pause, + speed, save/load, view flip, uppercase `I` Operations) stay on keys. Fleet + modes are delegated on the machine. - **Fleet hotkeys (multi-select).** `Shift+t` opens a box-select prompt (`x0 y0 x1 y1`); owned machines in the rect join the frontend selection. `1`–`3` bulk-assign WORK / THINK / LIE to the @@ -195,7 +202,7 @@ At terminal size ≥ 70×22 (hard minimum; below it, a plain size warning): ## Verification Headless: agent-mode smoke run (wiki/process/workflows.md), asserting the -plain-text playing frame, people panel, help vocabulary, `-- ok tick:` +plain-text playing frame, Operations PEOPLE frame, help vocabulary, `-- ok tick:` terminator, no ANSI bytes, and same-seed byte-identical replay. This is the standard "observed in an actual run" for terminal playability changes. @@ -206,6 +213,8 @@ changes. ## Acceptance criteria +### Implemented baseline + 1. Every color used by the terminal binary is one of the palette constants above, used with its stated meaning; no crossterm named colors, no ad-hoc RGB. @@ -221,13 +230,28 @@ changes. 6. The `@` marker is a cursor, not a player entity: cursor movement is free over all map tiles and never changes sim state; the sidebar inspect card updates from `Sim::inspect` with fact provenance. -7. People render on the map only inside sensor coverage; earned off-map - people are reachable through the host-rack context menu - (wiki/mechanics/schedules.md criteria 4 remains satisfied via the rail - and agent `people` frame). +7. People render on the map only inside sensor coverage; until the Operations + migration lands, earned off-map people remain reachable through the + host-rack context menu (wiki/mechanics/schedules.md criterion 4 remains + satisfied via the rail and agent `people` frame). 8. The playing screen, title screen, and game-over card all render inside a 70×22 terminal; smaller sizes get the size warning, not a crash. 9. An agent-mode smoke run of playing frame → people → help → quit exits cleanly, emits no ANSI bytes, and is byte-identical under repeated `--seed` runs; pty replay remains the chrome-specific check for raw-mode title/playing/game-over layout changes. + +### READY Operations delta + +T1. The retired `r`/`e`/`t`/`u` panels do not return; uppercase `I` is labeled + as the one Operations view command. +T2. Earned off-map people move from the host-rack aggregate to Operations + PEOPLE without changing staged identity or map-presence rules. +T3. At 70×22, Operations exposes all five views, preserves list/detail/back + navigation, and confirms one exact bound action without leaking facts or + having navigation input itself advance a tick. Its projected rows match + Bevy and agent mode while the ordinary unpaused clock remains live. + +T1-T3 are unmet renderer criteria owned by +`wiki/interface/operations-workspace.md`; they do not relabel the implemented +terminal baseline before that work order lands. diff --git a/wiki/log/2026-07-11-operations-workspace.md b/wiki/log/2026-07-11-operations-workspace.md new file mode 100644 index 00000000..af72f31b --- /dev/null +++ b/wiki/log/2026-07-11-operations-workspace.md @@ -0,0 +1,55 @@ +# 2026-07-11 — Operations workspace amendment + +``` +Type: log +``` + +## Intent + +The B1 strategic systems were executable but scattered: people, finance, and +scheme status lived in separate frames while their actions accumulated on the +host or switch that happened to carry them. Processed intel could be sold only +through an implicit “latest unsold” command. The result obscured what the +player knew, what they had committed, and what exact thing an action changed. + +## Adopted direction + +- One renderer-neutral Operations projection serves terminal, Bevy, and agent + mode through five views: INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE. +- Strategic actions live on their semantic objects: sale on one intel item, + social/plot acts on one person or run, mutations on books/accounts/flows, + and Moonlight/Wager controls on their scheme. +- Spatial context menus retain only acts on the focused body or place: + machine controls, TAP/UNTAP/TAKE, SCAN/COMPROMISE, OPEN EGRESS, + construction, research, and the host's pooled recording review. +- ACTIVE is progress, not a second action catalog. It shows every unsettled + strategic commitment and routes any next choice back to the canonical + target/action. +- Uppercase `I` opens the workspace; lowercase `i` remains machine intensity. + Agent inspection uses `intel`, `people`, `finance`, `schemes`, and `active`; + no `operations` command is added because that remains the THINK alias. +- Strategic commitment uses an exact target-bound preview/confirmation, and + blocked rows explain cost, signature or no-signature state, channel, and + reason. Opening/browsing the workspace does not itself alter clock state. + +The amendment is interface placement and projection work. Existing mechanics +remain implemented; `wiki/interface/operations-workspace.md` is the READY work +order for renderer migration and exact-item intel sale binding. + +## Corpus reconciliation + +The amendment updates the action/context-menu laws, terminal/Bevy/agent +contracts, continuous witness, and the owning intel/social/plot/economy/income +specs. Schedule, identity, message, detection, and current-runtime knowledge +pages distinguish the implemented people/finance projections from the READY +Operations destination rather than claiming the new UI already exists. + +## Verification + +- `./tools/ledger_index.sh` +- `./tools/check.sh` + +Defense: `wiki/vision/simulation-laws.md` says actions live on the thing and +must expose causal justification. Binding strategic actions to the selected +intel, person, flow, account, scheme, or run restores that topology without +inventing effects detached from their real channels and actuators. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 0a78904c..3407f866 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -101,6 +101,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-11-ops-per-sec-crown.md](2026-07-11-ops-per-sec-crown.md) +## 2026-07-11 - Operations workspace amendment + +- Intent: The B1 strategic systems were executable but scattered: people, finance, and scheme status lived in separate frames while their actions accumulated on the host or switch that happened to carry them. Processed intel could be sold only through an implicit “latest unsold” command... +- Log: [wiki/log/2026-07-11-operations-workspace.md](2026-07-11-operations-workspace.md) + ## 2026-07-11 - Material Demand routes stay on the material camera - Intent: Repair the material half of the in-flight work-route contract. The route system correctly selected material coordinates, but Demand's blip and every material route trail were submitted to Bevy's default gizmo group, which is visible only to the flat camera. In material view, T... diff --git a/wiki/log/decisions/2026-07-11.md b/wiki/log/decisions/2026-07-11.md index 0c486d6b..a0961c3c 100644 --- a/wiki/log/decisions/2026-07-11.md +++ b/wiki/log/decisions/2026-07-11.md @@ -153,3 +153,26 @@ Type: log 70% / 85% / 95% reliability; KNOWING adds certainty floor 30. Specs: `wiki/interface/context-menu.md`, `wiki/interface/action-vocabulary.md`, `wiki/mechanics/social.md`. + +- **2026-07-11 — Operations is one semantic workspace, not every strategic + verb piled onto its carrier.** Cameron asked for a more immersive, + actionable interface for intel, people, accounts, schemes, and what is + currently operational. The adopted workspace has five renderer-neutral + views — INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE — driven by one shared + projection in terminal, Bevy, and agent mode. Strategic acts live on the + object they change: an exact intel item, person/run, books/account/flow, or + scheme. The switch retains only acts on the switch or route (including OPEN + EGRESS); the host retains its one pooled recording inbox. ACTIVE shows + unsettled commitments and links choices back to canonical targets rather + than becoming another legality implementation. Uppercase `I` opens the + workspace while lowercase `i` stays machine intensity; established agent + inspection words cover each view, avoiding `operations`, which remains the + THINK compatibility alias. The old “sell latest unsold intel” binding is + rejected in favor of exact-item sale with provenance, payout/signature + preview, and retained learned knowledge. Existing mechanics stay + IMPLEMENTED; the shared renderer/action migration is READY. Rejected: + separate global panels per mechanic, strategic rows on whichever carrier + transports them, a menu of future/unknown actions, and a new pause-screen + clock. Specs: `wiki/interface/operations-workspace.md`, + `wiki/interface/context-menu.md`, `wiki/interface/action-vocabulary.md`, + `wiki/vision/simulation-laws.md`. diff --git a/wiki/mechanics/cursor.md b/wiki/mechanics/cursor.md index add94d86..836d950c 100644 --- a/wiki/mechanics/cursor.md +++ b/wiki/mechanics/cursor.md @@ -9,8 +9,8 @@ Status note: implemented 2026-07-07 on the cursor-senses branch. The walking coordinates away; `Sim::inspect` returns provenance-tagged facts for seen, heard, remembered, blueprint, and telemetry sources. 2026-07-08 tick: `Sim::person_label` / `observer_label` / `person_glyph` gate every - player-facing identity surface (people panel, detection sidebar, map - glyph, context-menu verbs, signature notes, agent frame) behind staged + player-facing identity surface (current people projection, future Operations + PEOPLE, detection sidebar, map glyph, action verbs, signature notes, agent frame) behind staged social knowledge — role silhouettes until Schedule, authored names after (criterion 5 extended). 2026-07-09: blueprint is room topology only — foreign machine chassis are absent under blueprint; owned hosts still @@ -21,6 +21,9 @@ Status note: implemented 2026-07-07 on the cursor-senses branch. The walking pre-tap material presence is a **beam of light** only; Seen shows the whole lit form (material-dark-frame.md). 2026-07-10: a known reachable sensor may ping cold at its shared anchor before sight (criterion 11). + 2026-07-11 placement amendment: the existing people identity projection + moves into Operations PEOPLE; the shared label/glyph gates remain + implemented while operations-workspace.md tracks that READY UI migration. Stage: B1 — The Basement Design: - wiki/interface/presence.md#presence-the-cursor-and-the-senses @@ -222,7 +225,8 @@ without the sense coverage that earns it.** absent from inspect; the same person under mic-only coverage is a presence event; under camera coverage, fully surfaced per staged knowledge). Every player-facing surface that names a person — - people panel, detection sidebar, map glyph, context-menu verbs, + the shared people projection (Operations PEOPLE after its READY migration), + detection sidebar, map glyph, context/Operations verbs, signature-band notes, agent frame — goes through `Sim::person_label` / `Sim::observer_label` / `Sim::person_glyph`: until `Knowledge::Schedule`, the label is a role-shaped silhouette diff --git a/wiki/mechanics/detection.md b/wiki/mechanics/detection.md index 303ce016..954268e1 100644 --- a/wiki/mechanics/detection.md +++ b/wiki/mechanics/detection.md @@ -19,7 +19,8 @@ Status note: criteria audited 2026-07-08 on the playtest-fixes worktree containment is a state event the run end subscribes to, not a raid dependency. (4) Frontends show coarse bands only. (5) Global heat is gone; observer state round-trips (save tests). Player surface: bands + - watched channels + last-noticed event in the people panels, and a + watched channels + last-noticed event in the current people projection + (Operations PEOPLE after its READY migration), and a pending-signature indicator beside the audit/pilot clocks in the DETECTION area of all three surfaces. 2026-07-08 epistemic-honesty follow-up: criterion 4 extended — field-observer labels on that @@ -28,6 +29,10 @@ Status note: criteria audited 2026-07-08 on the playtest-fixes worktree pending-signature indicator became the trace-debt indicator beside the audit/pilot clocks in the DETECTION area of all three surfaces: clear/resume-cover, hold-Conceal, exposed-soon, or no-scrub. + 2026-07-11 placement amendment: person-specific observer context moves from + the current people frames into Operations PEOPLE; detection state and label + gates remain implemented while operations-workspace.md tracks the READY + frontend migration. 2026-07-10 decision (presentation [OPEN]): the two-ledger distinction — evidence in flight vs. suspicion in heads — joined the Player surface as a binding legibility requirement; the current surface carries both facts @@ -246,7 +251,8 @@ teacher; surface copy remains the fallback. later; no raid-system dependency). 4. Coarse bands, not raw numbers, are what frontends show for observers. Field-observer *names* on that surface are gated the same way as the - people panel (`Sim::observer_label`); the Assurance Office is always + shared people surface (Operations PEOPLE after its READY migration, + `Sim::observer_label`); the Assurance Office is always named. 5. Global heat is fully replaced in the concealment phase; save/load round-trips all observer state. diff --git a/wiki/mechanics/economy.md b/wiki/mechanics/economy.md index 1301dea3..e759279d 100644 --- a/wiki/mechanics/economy.md +++ b/wiki/mechanics/economy.md @@ -4,12 +4,18 @@ Type: spec Status: IMPLEMENTED Status note: 2026-07-08 polish closed the remaining acceptance gaps: - observer-band risk previews in the finance panels (terminal/Bevy/agent) + observer-band risk previews in the implemented finance projections + (terminal/Bevy/agent; moved into Operations ACCOUNTS by the READY amendment) via Sim::finance_risk_preview_lines / flow_risk_preview_lines, and inject/redirect/siphon Financial signature size assertions (scale + HVAC inject raises Priya not Dana). Criteria 1-9 met at B1; markets.md remains the B3 aggregate. Deferred: deep finance simulation, dedicated B3 finance observer (income.md banked-signature design). + 2026-07-11 interface placement amendment: known books/accounts/flows and + their REVIEW/INJECT/SIPHON/REDIRECT actions live in Operations ACCOUNTS; + only acquisition (TAP the reachable carrier) remains on the local device. + Economy behavior remains IMPLEMENTED; the renderer migration is tracked by + operations-workspace.md. Stage: B1 — The Basement Design: - wiki/mechanics/system-laws.md#the-flow-law-signals-messages-money @@ -131,15 +137,18 @@ no separate payoff or redirect shortcut around the plot executor. ## Player surface -- A ledger/flows panel (parallels people and fronts): known account +- The ACCOUNTS view of the Operations workspace: known account nodes, their balances, and the flows between them as arrows with amount/cadence; unknown nodes shown as gaps ("a flow leaves payroll to somewhere you can't see"). Every value in currency units, per the legibility law. - Your slush balance replaces the bare money integer, framed as one node on the graph. -- Injection/redirection actions show their expected signature (as the - observer band they feed) before commit. +- REVIEW acts on captured books; INJECT acts on those books; SIPHON and + REDIRECT act on one selected flow. Each commitment shows amount, + source/destination/cadence, and expected observer band before confirmation. + TAP remains on the reachable carrier's local context menu because it + acquires the traffic rather than acting on the account graph. ## Acceptance criteria @@ -170,9 +179,13 @@ no separate payoff or redirect shortcut around the plot executor. and derived signature; both require processed Marcus debt intel before setting `leverage_serviced` (the social.md Marcus arc passes, and the tick-0 shortcut is rejected). -8. Every panel value is legible in currency units; risk shows as an +8. Every ACCOUNTS value is legible in currency units; risk shows as an observer band, not a raw probability (legibility clause). 9. The interface is the markets.md interface at B1 scale: a flow / account is a Resource-source, an operation is a scheme — no economy type that B3 must replace rather than aggregate (self-similar scale). +10. Operations ACCOUNTS lists only earned nodes/flows and honest unknown gaps; + financial actions bind exact semantic targets while the switch/device + menu contains only carrier acquisition and local network acts. This + frontend migration is owned by operations-workspace.md. diff --git a/wiki/mechanics/income.md b/wiki/mechanics/income.md index b22ee122..443af664 100644 --- a/wiki/mechanics/income.md +++ b/wiki/mechanics/income.md @@ -16,6 +16,10 @@ Status note: implemented 2026-07-08 on the income worktree (criteria 1-7 concurrent with the flow law and reconciled by union: economy.md owns the substrate; this spec adds the authored B1 schemes riding it, the egress gate, and Marcus's reconciled debt numbers. + 2026-07-11 interface placement amendment: Moonlight/Wager state, positions, + and policies live on SCHEMES/ACTIVE cards; OPEN EGRESS alone remains on the + switch. Income behavior remains IMPLEMENTED; the renderer migration is + tracked by operations-workspace.md. Stage: B1 — The Basement Design: - wiki/mechanics/system-laws.md#income-the-named-schemes-moonlight-and-the-wager @@ -137,11 +141,12 @@ intentions. ## Player surface -The schemes appear in economy.md's ledger/flows panel as external flows -into slush, each as a card: committed resources, timer, expected payout, +The schemes appear in Operations SCHEMES (and while in motion, ACTIVE) as +external flows into slush, each as a card: committed resources, timer, expected payout, the observer band its signature feeds, running total earned. The money readout gains income/day. Every number in its own units, in both -frontends. +frontends. Their egress is named as a channel/prerequisite, not used as the +scheme's UI home; OPEN EGRESS remains a local action on the switch. ## Acceptance criteria @@ -168,4 +173,8 @@ frontends. presented as controls rather than additional fictional verbs. 7. External financial trails are recorded in save state (banked signature) even though no B1 observer reads them; the schemes' - panel values are legible in both frontends. + Operations card values are legible in both frontends. +8. SCHEMES/ACTIVE own all Moonlight/Wager controls and progress while the + switch owns only OPEN EGRESS; blocked schemes name the missing route and + can focus a known switch without opening it. This frontend migration is + owned by operations-workspace.md. diff --git a/wiki/mechanics/intel.md b/wiki/mechanics/intel.md index 3cd5eefd..eeb21a5e 100644 --- a/wiki/mechanics/intel.md +++ b/wiki/mechanics/intel.md @@ -107,7 +107,8 @@ the effect digests the raw event. Processing yields: deviations; consumed by future systems, logged legibly now. Intel carries **provenance** (which feed, what time) and surfaces it in -the people panel and inspect card (legibility law: how you know, always). +Operations INTEL, the related PEOPLE dossier, and the inspect card +(legibility law: how you know, always). **Sweeps and automatic review are the two ways to feed it (DECIDED 2026-07-10).** A **sweep** is the player going through the stuff they @@ -178,11 +179,18 @@ buffer like any recording. The sweep and the toggle also ride the direct selection-hotkey surface (`r` / `R`, DECIDED 2026-07-11) owned by wiki/interface/context-menu.md; the menu row is the discoverable form, not the only fast path. +- Processed holdings live in the INTEL view of the Operations workspace + (wiki/interface/operations-workspace.md), one exact item per row with + provenance and available/sold state. SELL PROCESSED INTEL binds the selected + `raw_id`, previews payout/signature/channel, and never silently chooses the + newest unsold item. Sold intel remains learned history and cannot be sold + twice. This surface migration is READY under the Operations work order; the + underlying pipeline on this IMPLEMENTED page does not reopen. - The review path must be visible before overflow hurts the player: sidebar nudge/card copy calls out buffer pressure, overflow logs point at the host's recording-review action, and the agent frame shows one pooled waiting count. -- People panel lines gain provenance ("Debt — overheard, env monitor, +- PEOPLE dossier lines gain provenance ("Debt — overheard, env monitor, day 2 03:12"). - The one automatic-review toggle shows its standing cost in the same `ops/sec` unit as the crown metric. Human frontends derive it from the live @@ -200,7 +208,8 @@ buffer like any recording. 2. Raw events yield no knowledge until processed; processing is a thought sink fed over the flow (AMENDED 2026-07-10; was Operations Demand) and produces intel with provenance (feed + - timestamp), visible in the people panel. A machine holding + timestamp), visible in the shared intel/people projection (Operations + INTEL/PEOPLE after its READY migration). A machine holding unprocessed recordings shows the pending-work marker. **Met — ProcessRecording reservoirs + host `pending_intel`.** 3. Knowledge staging is driven by the pipeline: N processed sightings @@ -224,3 +233,7 @@ buffer like any recording. automatic-review flag. **Met** (the tap re-opens from the flag on load; v23 person watches collapse into one v24 policy; process reservoirs live in the sink ledger). +8. The Operations INTEL projection lists exact processed ids with staged + labels, provenance, and available/sold state; selling acts on the selected + item, not “latest,” and preserves learned knowledge. **Tracked by + operations-workspace.md; pipeline behavior remains implemented.** diff --git a/wiki/mechanics/messages.md b/wiki/mechanics/messages.md index 4ed0aa50..08d03c3f 100644 --- a/wiki/mechanics/messages.md +++ b/wiki/mechanics/messages.md @@ -3,6 +3,10 @@ ``` Type: spec Status: IMPLEMENTED +Status note: delivery/read behavior is implemented. The 2026-07-11 interface + amendment moves message-thread display into Operations PEOPLE while retaining + the same staged facts; operations-workspace.md tracks that READY frontend + migration. Stage: B1 — The Basement Design: - wiki/mechanics/system-laws.md#the-flow-law-signals-messages-money @@ -98,12 +102,13 @@ scope here. ## Player surface -- Message threads (social.md's panel) show sent / delivered / read +- Message threads (the selected Operations PEOPLE dossier after its READY + migration) show sent / delivered / read states and the recipient's expected next read window ("Dana reads email at her desk, ~09:00"). - Tapped channels contribute source-tagged events to the pooled host recording inbox (provenance law). -- People cards show known traffic patterns once learned ("calls his +- PEOPLE dossiers show known traffic patterns once learned ("calls his creditor at 03:00" after processing that intel). ## Acceptance criteria diff --git a/wiki/mechanics/people-tokens.md b/wiki/mechanics/people-tokens.md index 7578b649..dea322df 100644 --- a/wiki/mechanics/people-tokens.md +++ b/wiki/mechanics/people-tokens.md @@ -157,12 +157,13 @@ in the same language, no new colors: (crimson already means detection/danger; a person carrying your heat IS detection walking around). Ramp plus a geometry channel (marker intensity/size — [TUNE]), never color alone; suspicion - bands keep printing their names in panels per the design corpus. + bands keep printing their names in the dossier/detection surfaces per the + design corpus. - **Asset** — a fully swayed/high-trust person carries the amber claim language (Marcus the asset template): amber = my footprint, and a compromised human is your infrastructure. This replaces the riff's blue/green trust tint, which would break the palette. -- People stay flat silhouettes; identity remains a panel fact. +- People stay flat silhouettes; identity remains an Operations dossier fact. Persistent individual tracking (a person graduating from background walker to named, watched entity) gates on their attention crossing a threshold — background people are cheap, problems are persistent. diff --git a/wiki/mechanics/plots.md b/wiki/mechanics/plots.md index dcb16026..c8d8876a 100644 --- a/wiki/mechanics/plots.md +++ b/wiki/mechanics/plots.md @@ -8,7 +8,7 @@ Status note: direction adopted 2026-07-10 from Cameron's response to the HAL resolves specific human situations without world-story). Graduated DRAFT -> READY same day: schema format is TOML (one file per plot under assets/plots/; new small `toml` dependency approved by the format - decision), choice points ride the existing context-menu/action surface, + decision), choice points ride the shared action surface, and the canon gate is repository merge review — Cameron merges a contributed plot or he does not; only schema validation is automated. The worked example below is illustrative; the implementing commit @@ -25,6 +25,11 @@ Status note: direction adopted 2026-07-10 from Cameron's response to the HAL the authoring skill at .agents/skills/plot-author/SKILL.md (mirrored to .claude/skills/) encoding the contributor contract and the propose-on-a-branch canon-gate landing flow. + 2026-07-11 interface correction: plot starts and held choices remain bound + ActionDesc commands on the person/run, but their human home is now the + Operations PEOPLE/ACTIVE workspace rather than a compact person context + menu. The plot executor/schema work on this READY page is unchanged; the + renderer migration belongs to operations-workspace.md. 2026-07-11 queue-integrity repair: a person has one plot slot from Operations submission through ending. Selecting one authored route disables every alternate route for that person while its docket is pending, so two @@ -168,12 +173,12 @@ agents and the community can contribute libraries of them. intervention with a meaningful executable delta, not variant prose over the same carriers, costs, institutional event, choices, and relationship effects. One matching plot is still presented by its concrete name. -- **Choice points ride the existing action surface.** A choice point holds - the plot at its beat and surfaces the branch as a compact choice list on - the target person — the same context-menu law as every other verb in the - terminal and Bevy frontends, and an `actions ` entry in agent - mode. The guidance line may point at a held plot. No new modal dialog - system is introduced. +- **Choice points ride the shared action surface.** A choice point holds the + plot at its beat and surfaces the branch on the target person's PEOPLE + dossier and the exact run in ACTIVE. Both human frontends consume the same + bound row and agent mode exposes the same `CHOOSE` command/Operations target. + The guidance line may point at a held plot. The single Operations workspace + owns the dialogue; no plot-specific modal system is introduced. - **One plot slot per person.** Submission reserves the target's slot before Operations begins paying the docket. While that docket is pending, alternate plots for the same person remain visible but disabled; once the run begins, @@ -272,8 +277,10 @@ as every shipped plot, so documentation cannot bless a non-executable shape. Every leverage service tells you what it did in the world: at minimum one narration beat causally connecting the intervention to the person's situation (the Marcus bar). Plot progress is visible where delegated work -already lives; choice points interrupt legibly through the context-menu -surface; the instrument rail may narrate the active plot's current beat. +already lives and in Operations ACTIVE; choice points interrupt legibly on +the exact run/person detail, where entry costs, current wait, and known +consequences have explanatory space. The instrument rail may narrate the +active plot's current beat. Both frontends and agent mode surface plot choices and beats with parity. ## Acceptance criteria @@ -295,10 +302,10 @@ Both frontends and agent mode surface plot choices and beats with parity. 4. Consequences are typed data applied by the shared executor: disposition, obligation, leverage service, messages, account movement, active runs, and institutional events all round-trip through save/load. -5. Choice points hold the plot and surface through the existing - context-menu/action surface in both frontends and as an agent-mode action; - `act [anchor]` executes that shared row, and a held plot is visible in - guidance. +5. Choice points hold the plot and surface through the shared Operations + PEOPLE/ACTIVE action projection in both frontends and as an agent-mode + action; executing the row dispatches that exact bound command, and a held + plot is visible in guidance. 6. The [Hands beat](../world/characters/marcus.md#the-hands-beat) is re-expressed as the first authored plot with no behavior regression (marcus.md criterion 3's end-to-end chain and social.md's legibility diff --git a/wiki/mechanics/schedules.md b/wiki/mechanics/schedules.md index f90a3629..dbba9dfd 100644 --- a/wiki/mechanics/schedules.md +++ b/wiki/mechanics/schedules.md @@ -6,8 +6,9 @@ Status: IMPLEMENTED Status note: all five criteria met (2026-07-06; updated 2026-07-07 for intel.md). Schedules are per-instance Person data on the day clock; subscribed feeds record only people/events covered in the person's current - room; witnessing is located (present observers only); the people panel + map - surface presence by staged knowledge. Located + room; witnessing is located (present observers only); the current people + projection (Operations PEOPLE after its READY migration) + map surface + presence by staged knowledge. Located witnessing is modeled as immediate eyewitnessing (present observers' suspicion rises directly, unscrubbable) rather than a pooled Physical signal — an event nobody was present for leaves no trace, which is the @@ -16,6 +17,9 @@ Status note: all five criteria met (2026-07-06; updated 2026-07-07 for observers are now id-aligned to People. 2026-07-08 epistemic-honesty follow-up: criterion 4 extended — map glyphs are `Sim::person_glyph` (`?` until Schedule; initial after). + 2026-07-11 placement amendment: the existing people projection becomes + Operations PEOPLE under operations-workspace.md; schedule behavior and its + staged labels remain implemented while that frontend migration is READY. Stage: B1 — The Basement Design: - wiki/gameplay/act-one.md#the-cast-5-named-1-institutional @@ -61,12 +65,13 @@ second clock). Between blocks a person is **off-site** (not on the plane). roll nothing. - **Schedule knowledge stays staged** (social.md): until `Knowledge:: Schedule`, the player's UI shows the person's location only when a - controlled sensor actually sees them; after it, the panel shows their + controlled sensor actually sees them; after it, the PEOPLE dossier shows their full schedule and current block. ## Player surface -People panel: current location line per person ("in the server room" / +The people surface (current frame; Operations PEOPLE when that work order +lands): current location line per person ("in the server room" / "off-site" / "unknown — no eyes on them"); after schedule knowledge, the schedule itself. Identity on that card is staged the same way (social.md / cursor.md): role silhouette until `Knowledge::Schedule`. @@ -85,7 +90,8 @@ are what fog is *for*), and the glyph itself is `Sim::person_glyph` — 3. Physical signatures are noticed only by observers whose location covers them (test: a physical event in the server room at 03:00 is seen by roaming Marcus, never by off-site Priya). -4. The people panel and map surface presence exactly per the staged +4. The shared people projection (rendered in Operations PEOPLE after its + READY frontend migration) and the map surface presence exactly per the staged knowledge rules; no person renders outside sensor coverage. Map glyphs are `?` until `Knowledge::Schedule` (`Sim::person_glyph`); initials appear only after identity is earned. diff --git a/wiki/mechanics/sim-mechanics.md b/wiki/mechanics/sim-mechanics.md index 6c21e581..1d2e9bde 100644 --- a/wiki/mechanics/sim-mechanics.md +++ b/wiki/mechanics/sim-mechanics.md @@ -54,7 +54,8 @@ clause (see wiki/log/2026-07-05-demolition.md). (`Sim::trace_debt`, backed by `Detection::pending_size`, `Detection::pending_by_kind`, current scrub strength, and the next relevant observer cadence), so running concealment mode is an informed - choice. The people panels show each observer's watched channels + choice. The current people frames (the future Operations PEOPLE dossiers) + show each observer's watched channels (`Observer::watched_label`) and last-noticed event, and repeat trace debt before the social/recordings table. @@ -453,10 +454,14 @@ All constants [TUNE] in `crates/misaligned-core/src/income.rs` unless noted (Sim tasks: wire a device (control nearest dormant sensor, silent), move a package (next purchase paper-free), look away (their suspicion -10, floored). Failures (1 - reliability) emit Physical(6) signatures. -- Terminal and Bevy: person verbs live on a visible person's tile (or on - the host rack when earned off-map); known-flow verbs hang on the switch - after the books are read. Agent mode keeps word commands (`people`, - `finance`, named social/economy verbs) as the vocabulary surface. +- **Current runtime until the READY Operations workspace lands:** terminal and + Bevy still place person verbs on a visible person's tile (or the host rack + when earned off-map) and known-flow verbs on the switch. This placement is + historical implementation state, not the target law. Per + wiki/interface/operations-workspace.md, person/flow/intel/scheme actions + move to their semantic objects while local carrier acts remain on the map. + Agent word commands (`people`, `finance`, named social/economy verbs) remain + the vocabulary surface and gain projection parity. ## What does NOT exist right now (by design) diff --git a/wiki/mechanics/social.md b/wiki/mechanics/social.md index 8c9be588..539d98d0 100644 --- a/wiki/mechanics/social.md +++ b/wiki/mechanics/social.md @@ -33,6 +33,11 @@ Status note: 2026-07-08: all criteria pinned. Criteria 1,2,4,5 per the known blocked possibilities remain in agent diagnostics rather than the human choice list; each reveal choice states what the person understands, its task reliability, and the Knowing certainty floor before commitment. + 2026-07-11 interface placement amendment: earned people, social actions, + authored plot routes, and held choices live on PEOPLE/ACTIVE semantic + targets in operations-workspace.md, never on the host or switch because a + message crosses them. The underlying IMPLEMENTED social model is unchanged; + the renderer migration is tracked by that READY interface spec. Stage: B1 — The Basement Design: - wiki/gameplay/run-shape.md#the-shape-of-misaligned-designed-2026-07-05-staging-open @@ -77,7 +82,9 @@ owned by intel.md, not a social/person action; its output may advance this system's knowledge. `Knowledge::Schedule` earns the relationship surface; leverage and asset verbs remain tied to their corresponding discovered or achieved state. The menu does not use disabled future actions as a tutorial -catalog. +catalog. Once earned, those verbs appear on the selected person's dossier in +the Operations PEOPLE view. The person remains the action target; the +workspace does not provide a channel or actuator the sim has not earned. Marcus's [Hands beat](../world/characters/marcus.md#the-hands-beat) is the first authored instance and has one extra legibility constraint: his debt must be known through processed intel @@ -111,16 +118,21 @@ treating an Act One name as a type. Names remain staged display identity. ## Player surface -A people panel: card per human (schedule, suspicion band, leverage once +A PEOPLE view in the Operations workspace: dossier per human (schedule, +suspicion band, leverage once discovered, thread history, asset status). **Identity itself is staged** with the rest of social knowledge (cursor.md criterion 5): until `Knowledge::Schedule` the card's name is a role-shaped silhouette via `Sim::person_label` (`the Janitor`, `the IT`, …); authored names appear only after staged knowledge earns them. Message composition is -choice-driven (intents), not free text. +choice-driven (intents), not free text. Each dossier owns the shared social +action rows and concrete authored plot routes; ACTIVE shows in-flight progress +without duplicating legality. ## Acceptance criteria +### Implemented social baseline + 1. All five Act One humans exist with schedules, access, leverage, suspicion, and disposition; pooled recording review (per intel.md) can advance their knowledge, while message, favor, authored plots, deceive, @@ -139,3 +151,11 @@ choice-driven (intents), not free text. 6. Every person carries a serialized role characteristic. Authored plots select role/leverage/capabilities rather than named ids, and a second person with matching characteristics can receive the same plot definition. + +### READY Operations interface delta + +S1. PEOPLE/ACTIVE render the same staged person labels, social legality, plot + exclusion, and bound commands in both human frontends and agent mode; the + host and switch do not aggregate off-map people actions. This frontend + migration is owned by operations-workspace.md and does not reopen the + implemented social model above. diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md index 22d768fb..9f48f112 100644 --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -22,6 +22,7 @@ not a second status owner. | 20 | `compute` | [compute](../mechanics/compute.md) | IN PROGRESS | save | - | | 25 | `bevy-digital-real-canvas` | [Bevy digital/real canvas](../interface/bevy-digital-real-canvas.md) | IN PROGRESS | frontend | - | | 26 | `effects-lab` | [effects lab — shared dust and liquid at every zoom](../art/effects-lab.md) | IN PROGRESS | frontend | - | +| 28 | `operations-workspace` | [operations workspace — intel, people, accounts, and schemes](../interface/operations-workspace.md) | READY | frontend | - | | 34 | `clinical-frame` | [the clinical frame — perception exposes the institution](../interface/clinical-frame.md) | IN PROGRESS | frontend | - | | 35 | `views` | [views — same-frame digital and real representations](../interface/views.md) | IN PROGRESS | frontend | - | | 60 | `plots` | [plots — authored manipulation stories](../mechanics/plots.md) | READY | sim | - | diff --git a/wiki/process/specs.md b/wiki/process/specs.md index 122ba3f3..8d362cc7 100644 --- a/wiki/process/specs.md +++ b/wiki/process/specs.md @@ -38,6 +38,7 @@ replaced the old `spec/`/`knowledge/` directory split. | [../interface/material-dark-frame.md](../interface/material-dark-frame.md) | the dark frame — the material render shows only light | IMPLEMENTED | | [../interface/material-render.md](../interface/material-render.md) | material render — HD-2D to default quality | IMPLEMENTED | | [../interface/narration.md](../interface/narration.md) | the continuous witness (narration under pressure) | IMPLEMENTED | +| [../interface/operations-workspace.md](../interface/operations-workspace.md) | operations workspace — intel, people, accounts, and schemes | READY | | [../interface/thought-fluid.md](../interface/thought-fluid.md) | the thought fluid — slugs, meniscus, and the filament snap | IN PROGRESS | | [../interface/views.md](../interface/views.md) | views — same-frame digital and real representations | IN PROGRESS | | [../mechanics/aggregate-observer.md](../mechanics/aggregate-observer.md) | the aggregate observer | IMPLEMENTED | diff --git a/wiki/vision/simulation-laws.md b/wiki/vision/simulation-laws.md index 35365408..88b9a437 100644 --- a/wiki/vision/simulation-laws.md +++ b/wiki/vision/simulation-laws.md @@ -131,21 +131,42 @@ live in `wiki/mechanics/machine-work.md` and Adopted 2026-07-07. The companion law to "Work is somewhere": if work and knowledge are anchored to devices, people, and places, the verbs -that act on them are too. The primary action surface is a **context -menu on the focused anchor** — put your attention on a rack and get -the rack's verbs, on Marcus and get Marcus's. The human menu is a short -choice list, not a receipt: it names the verb and omits cost, signature -forecast, inline blocked explanation, control tags, and repeated key help. -Known-but-illegal choices stay dim; attempting one narrates its reason in the -trace. Agent output may retain the full descriptor for planning and tooling. -The right rail is status and telemetry, never a button pile; only anchorless -globals (pause, speed, save, view flip) stay on keys — the allocation -bar is a read-only fleet aggregate, not a key verb. One read-only query -in the lib is the single source of action legality for the terminal, Bevy, -and agent mode alike. Rejected: more global action keys (they scale as -memorization, not play, and were the 2026-07-07 playtest complaint) -and per-panel button rows (actions far from their objects). Spec: -`wiki/interface/context-menu.md`. +that act on them are too. **The thing means the semantic target of the +action, not an arbitrary carrier.** A rack mode lives on the rack, a tap on +the device, a sale on the selected intel item, a siphon on the selected flow, +a plot on the person, and Moonlight on the scheme. A switch does not own every +social, financial, and strategic act whose traffic happens to cross it. + +Immediate action on a spatial body uses a **context menu on the focused world +anchor**. Put your attention on a rack and get the rack's verbs; on a switch, +get only verbs that change or use that network body and its egress. The human +menu is a short choice list, not a receipt: it names the verb and omits cost, +signature forecast, inline blocked explanation, control tags, and repeated key +help. Known-but-illegal choices stay dim; attempting one narrates its reason in +the trace. Agent output may retain the full descriptor for planning and +tooling. + +Durable strategic objects use the **Operations workspace**: processed intel, +people dossiers, accounts and flows, schemes, and active plots. This is still +action on the thing — the selected semantic object is the target, and the +workspace must name the real channel/actuator before commitment. It is not a +disembodied command center and never acquires access merely by being open. +Unlike the compact context menu, its detail pane has room to show cost, gain, +observer band, progress, and the exact blocked reason before commitment. Spec: +`wiki/interface/operations-workspace.md`. + +The right rail is status and telemetry, never a button pile. It may carry one +labeled navigation affordance into Operations, just as a view flip changes +representation; it may not carry one action button per system. Keys may open a +view (uppercase `I` opens Operations) but do not execute strategic world acts. +Other anchorless globals remain pause, speed, save, and view flip — the +allocation bar is a read-only fleet aggregate, not a key verb. Core-owned +read-only queries/projections are the single legality source for terminal, +Bevy, and agent mode alike; no frontend reconstructs it. Rejected: more global +**action** keys (they scale as +memorization, not play, and were the 2026-07-07 complaint), per-panel button +rows, and filing actions on a transport node because it is convenient. +Context-menu details: `wiki/interface/context-menu.md`. **Frequent machine controls stay on the focused thing without a picker.** A machine has two high-frequency controls: its delegated mode and its intensity @@ -157,12 +178,14 @@ infrequent anchored verbs and choices that genuinely need alternatives. Extended 2026-07-08, the follow-up this law implies: **events carry you to the thing too.** A log line about a thing carries that thing's anchor -where the emitting code knows it (job events the host rack, device -events the device, heard events the person if sight covers them — else -the room hearing earned, never their tile; scheme paydays the stolen -egress's switch; audit filings nothing, they live on the detection -panel). Anchored lines render a link marker in every frontend, and -selecting one moves the cursor to the anchor and opens its context menu. +where the emitting code knows it (job events → host rack; device and physical +OPEN EGRESS events → that device; heard events → the person if sight covers +them, else the room hearing earned, never their tile; processed intel, +account/flow, plot, and scheme events → their semantic Operations object; +audit filings → nothing, because they live on the detection surface). Linked lines render a +marker in every frontend. Selecting a spatial event moves the cursor to the +anchor and opens its context menu; selecting a strategic event opens the exact +Operations object without inventing map coordinates. Companion feedback rule: opening the menu on a *seen* tile with no verbs answers "no actions here" — silence there reads as broken input — while unearned ground stays silent, because responding would confirm input