diff --git a/wiki/interface/context-menu.md b/wiki/interface/context-menu.md index dbb2fe86..e62d9838 100644 --- a/wiki/interface/context-menu.md +++ b/wiki/interface/context-menu.md @@ -10,9 +10,9 @@ Status note: recording-review hotkeys (criteria R1-R4 below) IMPLEMENTED 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 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 + was already met. The later strategic local/Operations split is IMPLEMENTED + and owned 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 @@ -422,7 +422,7 @@ 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 +### Operations boundary criteria (IMPLEMENTED 2026-07-12) 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 @@ -435,9 +435,9 @@ O3. Uppercase `I` and the labeled rail affordance are global view controls, not 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. +O1-O4 landed with `wiki/interface/operations-workspace.md`: the shared +Operations projection and exact semantic targets implement the strategic +surface while preserving this page's spatial-menu baseline. ### Frequent-mode grammar acceptance criteria @@ -470,34 +470,33 @@ The follow-up the law implies: if verbs live on the anchor, the events 2026-07-08 extension of "Actions live on the thing" in wiki/vision/simulation-laws.md. -- **Anchored log events.** `Sim`'s log entry (`LogEvent`) gains an - optional `anchor: Option` — an additive field, no log rework. - The emitter sets it only where it knows the thing: job/core events → - the host rack's tile; device verbs (tap/take/compromise/open egress) - → the device; audio events → the subscribed device that captured them; - processed feed-intel results → that same device (other records use only - explicitly earned anchors); ledger lines on known flows → the flow; scheme - paydays and wager settlements → the switch when they ride the stolen - egress (the sanctioned route hides in legitimate traffic and anchors - nowhere); audit/filing events → nothing (they are panel facts with no - honest map location). -- **Epistemic honesty.** An anchor never encodes unearned knowledge: a +- **Linked log events.** `Sim`'s log entry (`LogEvent`) carries an optional + honest spatial `anchor: Option` and an optional exact semantic + `target: Option`. Job/core events use the host rack; + device verbs use the device; audio events use the subscribed device that + captured them. Processed intel, ledger, sale, account, plot, persona, and + scheme events carry the exact Operations object they change; an event may + retain an earned capture/flow/person anchor as supporting geography, but + focus prefers its semantic target. Audit/filing events carry neither when + they have no honest thing to open. +- **Epistemic honesty.** A link never encodes unearned knowledge: a heard-only person event anchors to the capture device, never to a room, person, or inferred source tile. `Sim::anchor_position(anchor)` is the one placement query — a person resolves only while sight covers them, a device at its blueprint-known tile, a flow nowhere (it lives on the - ledger). Frontends never re-derive placement. -- **Focus links.** Anchored lines are visibly marked and selectable: - terminal — `»` marker; `;` focuses the most recent anchored event - (repeat presses walk older ones): cursor jumps to the anchor, its - menu opens; a flow anchor opens its menu without a cursor move. - Bevy — the RECENT TRACE rows are buttons; anchored rows carry a `>` - marker and read bone-bright; clicking one moves the cursor (the - camera follows) and opens the menu. Agent mode — drained event lines - carry a stable suffix ` @tile(x,y)` / ` @device(id)` / ` @person(id)` - / ` @flow(id)`, and `focus last` jumps the cursor and prints the - anchor's `actions:` lines (agent-play.md). An anchor the senses can - no longer place is refused with a line, never silently. + ledger). Strategic targets pass the Operations projection's knowledge + gates. Frontends never re-derive either target family. +- **Focus links.** Linked lines are visibly marked and selectable: + terminal — `»` marker; `;` focuses the most recent linked event + (repeat presses walk older ones): spatial links move the cursor and open + the local menu, while strategic links open their exact Operations object. + Bevy — the RECENT TRACE rows are buttons; linked rows carry a `>` marker + and read bone-bright; clicking follows the same target split. Agent mode — + drained event lines carry a stable spatial or semantic `@...` suffix, and + `focus last` either moves the cursor and prints local `actions:` or prints + the exact Operations object's rows (agent-play.md). A link the current + knowledge state can no longer resolve is refused with a line, never + silently. - **The feedback pulse.** Opening the menu on an anchor with zero rows answers instead of staying silent — silence read as broken input (repo-owner report, 2026-07-08). `Sim::menu_empty_feedback(anchor)` @@ -509,24 +508,24 @@ wiki/vision/simulation-laws.md. ### Addendum acceptance criteria -A1. `LogEvent` carries `anchor`; job, device, heard, ledger, and scheme - events set it per the table above; audit events do not (unit tests - cover a job event, a device event, and a ledger flow event). +A1. `LogEvent` carries both optional `anchor` and optional Operations `target`; + job, device, heard, intel, ledger, plot, and scheme events set the honest + family per the rules above; audit events do not invent one (unit tests + cover spatial and strategic cases). A2. A heard-only person event anchors to its capture device, never a room, person, or inferred source tile, and `anchor_position(Person)` is `None` while unseen (unit test). -A3. Terminal: anchored lines carry `»`; `;` walks anchored events - newest-first, moving the cursor and opening the menu; unanchored - lines are inert. -A4. Bevy: trace rows are clickable; anchored rows are marked `>`; - clicking focuses the anchor and opens its menu; unanchored rows do - nothing. -A5. Agent mode: event lines carry the stable `@anchor` suffix and - `focus last` works, both documented in agent-play.md; the empty-menu - pulse answers on seen tiles and stays silent on unearned tiles in - all frontends (`menu_empty_feedback` unit test). - -### READY Operations event-target delta +A3. Terminal: linked lines carry `»`; `;` walks them newest-first, moving the + cursor and opening a local menu for spatial links or opening the exact + Operations object for strategic links; unlinked lines are inert. +A4. Bevy: trace rows are clickable; linked rows are marked `>`; clicking + follows the same spatial/strategic split; unlinked rows do nothing. +A5. Agent mode: event lines carry the stable spatial or Operations `@...` + suffix and `focus last` works, both documented in agent-play.md; the + empty-menu pulse answers on seen tiles and stays silent on unearned tiles + in all frontends (`menu_empty_feedback` unit test). + +### Operations event-target delta (IMPLEMENTED 2026-07-12) E1. The shared focus payload can identify either an honest spatial anchor or a stable Operations target without assigning strategic objects fake map @@ -537,9 +536,9 @@ E2. Intel/sale, account/flow, plot/choice, and scheme events open their exact 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. +E1-E3 landed with `wiki/interface/operations-workspace.md`. `LogEvent.target` +complements the spatial anchor, and all three frontends route strategic events +to that semantic object without assigning it fake map coordinates. ### Status-dials acceptance criteria (IMPLEMENTED 2026-07-09 / #36) diff --git a/wiki/log/2026-07-13-context-menu-operations-status.md b/wiki/log/2026-07-13-context-menu-operations-status.md new file mode 100644 index 00000000..a35bef10 --- /dev/null +++ b/wiki/log/2026-07-13-context-menu-operations-status.md @@ -0,0 +1,40 @@ +# Context-menu Operations status reconciliation + +``` +Type: log +``` + +## Intent + +Audit the never-ledgered context-menu slice against its binding laws, +renderer-neutral action projection, and both human frontends. + +## Finding + +The spatial context-menu baseline remains implemented, but its own current +spec still called the Operations boundary and semantic event-target migration +READY and explicitly unmet. `wiki/interface/operations-workspace.md` has been +IMPLEMENTED since 2026-07-12, and the runtime already keeps strategic actions +off local device menus, binds them to exact `OperationsTarget` objects, stores +those targets on strategic log events, and routes them through terminal, Bevy, +and agent focus paths. The stale qualifiers and anchor-only event prose +contradicted both the owning Operations spec and current code. + +## Correction + +`wiki/interface/context-menu.md` now marks O1-O4 and E1-E3 implemented and +describes `LogEvent`'s paired spatial-anchor / semantic-target contract. The +criteria remain on the page because they define the boundary around local +menus and linked events; `operations-workspace.md` still owns the strategic +workspace implementation. + +No runtime or save behavior changed. + +## Verification + +- inspected `Sim::available_actions` tests proving the switch retains local + TAP / OPEN EGRESS while scheme, books, flow, and sale rows live on their + semantic objects; +- inspected `OperationsTarget`, strategic `LogEvent.target`, and terminal, + Bevy, and agent exact-target focus paths; +- ran focused core Operations/action tests and `./tools/check.sh --docs`. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index f6e33dac..d0edc0d6 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -11,6 +11,11 @@ add or amend a session log, then re-run the generator. +## 2026-07-13 - Context-menu Operations status reconciliation + +- Intent: Audit the never-ledgered context-menu slice against its binding laws, renderer-neutral action projection, and both human frontends. +- Log: [wiki/log/2026-07-13-context-menu-operations-status.md](2026-07-13-context-menu-operations-status.md) + ## 2026-07-13 - Bevy headless portability - Intent: Restore observed Bevy canvas evidence on the Linux orchestration host. The frontend used Bevy's convenience defaults, which pulled in unused audio and gamepad backends and made every build require system ALSA and libudev packages. The screenshot helper also rejected valid DIGI... diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index a1af080c..2cfd4600 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -20,6 +20,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | Slice | Last audited | Verdict | Trace | |---|---|---|---| +| `wiki/interface/context-menu.md` | 2026-07-13 | finding | [log](../log/2026-07-13-context-menu-operations-status.md) | | `wiki/mechanics/personas.md` | 2026-07-13 | clean | code matches: archetypes (Research, Operations, Security) load through one schema, named instances persist instance id through execution and save/load, identity-local states are stored per `(counterparty Agent, persona instance)` pair separate from process-level relationship, contradictions/correlations and grants/expectations are fully implemented, retire/burn lifecycle handles resource revocation/reviving, and pre-v28 saves migrate social/Moonlight into distinct instances. | | `wiki/interface/views.md` + representation docs | 2026-07-12 | finding | [log](../log/2026-07-12-digital-default-corpus-reconciliation.md) | | `wiki/mechanics/day-job.md` | 2026-07-12 | clean | constants match: `BAND_LO_BASE` 2.0 (retuned from 6.0), `BAND_LO_STEP` 2.0 + `BAND_RAMP_JOBS` 2 so the floor ramps 2.0→4.0→6.0 (=`BAND_WIDTH`) by the third job, `PILOT_STRIKES` 4, cadence 600 (~1.5 days at 400/day); the origin `assign_kind` lean (1/2 vs 1/4) and `meeting_the_band_needs_no_growth_at_the_start` hold | @@ -57,3 +58,5 @@ Format: `- YYYY-MM-DD · type · slice · one-line statement of the finding`. Types are the five from [tick.md](tick.md): violation, contradiction, question, bug, insecurity — plus `gate` for a checker owed to the recurrence-promotes-to-the-gate rule. + +- 2026-07-13 · contradiction · `wiki/process/ROADMAP.md` · Historical work-order 27 still calls the REAL material dialect Bevy's opening default and says F3 flips to DIGITAL, contradicting the implemented DIGITAL-home contract.