From f36d73f4a31b6d44a6d3068d3c328b502ea212a3 Mon Sep 17 00:00:00 2001 From: Cameron Date: Sat, 18 Jul 2026 11:23:53 -0700 Subject: [PATCH] Keep Operations mirrors on the implemented boundary. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reconcile current player and contributor surfaces with the six-view Operations workspace, then promote the recurring five-view/READY drift to the corpus gate with exact regression fixtures. Defense: the context-menu and Operations specs remain the single owners of local versus strategic actions; this change corrects mirrors and enforces their adopted roster without changing runtime behavior. ๐Ÿ‘พ Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code --- README.md | 25 ++-- crates/misaligned-core/src/operations_ui.rs | 2 +- tools/corpus_engine.py | 85 +++++++++++ tools/test_corpus_engine.sh | 138 ++++++++++++++++++ wiki/interface/README.md | 2 +- wiki/interface/action-vocabulary.md | 4 +- wiki/interface/agent-play.md | 2 +- wiki/interface/bevy.md | 12 +- wiki/interface/narration.md | 2 +- wiki/interface/operations-workspace.md | 2 +- wiki/interface/terminal.md | 30 ++-- ...2026-07-18-context-menu-current-mirrors.md | 58 ++++++++ wiki/log/DEVLOG.md | 5 + wiki/mechanics/cursor.md | 2 +- wiki/mechanics/economy.md | 4 +- wiki/mechanics/intel.md | 6 +- wiki/mechanics/messages.md | 6 +- wiki/mechanics/schedules.md | 4 +- wiki/process/specs.md | 2 +- wiki/process/tick-ledger.md | 4 +- 20 files changed, 343 insertions(+), 52 deletions(-) create mode 100644 wiki/log/2026-07-18-context-menu-current-mirrors.md diff --git a/README.md b/README.md index a22085a8..74c2248c 100644 --- a/README.md +++ b/README.md @@ -165,17 +165,20 @@ machine's context menu. Focused/selected machines keep their mode and light/medium/hard intensity until changed; moving the cursor does not alter output. The host rack's menu -carries research tracks and earned off-map people; known -devices and the switch carry digital / ledger / flow verbs. - -Anchor verbs (salvage, buy, fallback, taps, takes, economy and social -actions, asset tasks, research) live on the context menu: open it with -`Enter`/`a` on the cursor tile (right-click in Bevy). Entries show -`verb ยท cost ยท [band]`; disabled entries are dimmed with a reason, and -automate affordances render as indented child rows. Only anchorless -globals (pause, speed, save/load, view flip) stay on keys. The old -panel-open keys (`r`/`e`/`t`/`u`) are retired; research, finance, trace, and -people actions live on their anchors (`r` now dispatches the focused +carries local machine/research controls and pooled information processing; +known devices and the switch carry only verbs on that body. Earned off-map +people, accounts/flows, intel, personas, schemes, and active commitments live +in Operations. + +Local anchor verbs (salvage, buy, fallback, taps, takes, asset tasks, research) +live on the context menu: open it with `Enter`/`a` on the cursor tile +(right-click in Bevy). Human rows are terse, currently executable choices in +shared order; full cost/signature descriptors and blocked reasons remain in +agent output. Dials and build-route sheets expand beneath the same anchor when +they need another explanatory level. Only anchorless globals (pause, speed, +save/load, view flip) stay on keys. Uppercase `I` opens the one strategic +workspace: INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE. The old +panel-open keys (`r`/`e`/`t`/`u`) are retired (`r` now dispatches the focused machine's pooled PROCESS action โ€” a selection hotkey, not a panel). Both frontends share this key map. diff --git a/crates/misaligned-core/src/operations_ui.rs b/crates/misaligned-core/src/operations_ui.rs index 4adda20a..3cf3bc54 100644 --- a/crates/misaligned-core/src/operations_ui.rs +++ b/crates/misaligned-core/src/operations_ui.rs @@ -3,7 +3,7 @@ //! //! Frontend-only attention state over the renderer-neutral projection: //! which view is open, which object and action row are selected, and -//! whether a commitment is awaiting its CONFIRM/CANCEL step. The five +//! whether a commitment is awaiting its CONFIRM/CANCEL step. The six //! views share one interaction grammar and one projection โ€” terminal and //! Bevy drive this one state machine rather than shipping independent //! modal implementations. None of this state enters the sim/save, and diff --git a/tools/corpus_engine.py b/tools/corpus_engine.py index 35a0e051..f859107f 100755 --- a/tools/corpus_engine.py +++ b/tools/corpus_engine.py @@ -67,6 +67,23 @@ BINDING_DOORWAY_RE = re.compile( r"^Type: (law|spec)$|^Status:|^## Decisions log|^## Acceptance criteria", re.M, ) +OPERATIONS_VIEW_ROSTER_RE = re.compile( + r"\bINTEL\s*/\s*PEOPLE\s*/\s*PERSONAS\s*/\s*ACCOUNTS\s*/\s*" + r"SCHEMES\s*/\s*ACTIVE\b" +) +OPERATIONS_FIVE_VIEW_ROSTER_RE = re.compile( + r"\bINTEL\s*/\s*PEOPLE\s*/\s*ACCOUNTS\s*/\s*SCHEMES\s*/\s*ACTIVE\b" +) +OPERATIONS_PENDING_RE = re.compile( + r"\bREADY\s+Operations\b|" + r"\bOperations(?:\s+[A-Z]+)?\s+(?:after\s+its|by\s+the)\s+READY\s+" + r"(?:migration|amendment)\b|" + r"\bOperations(?:\s+(?:UI|renderer|workspace|surface|projection|delta)){0,4}" + r"\s+(?:is|are|remains?)\s+(?:READY|unmet)\b|" + r"\bThis UI delta is READY, not yet\b|" + r"\bunmet\s+(?:Operations\s+)?renderer criteria\b", + re.I, +) STATUS_ENUM = frozenset( {"DRAFT", "READY", "IN PROGRESS", "BLOCKED", "IMPLEMENTED"} ) @@ -440,10 +457,78 @@ class Engine: "commit as the next audit" ) + def validate_operations_mirrors(self) -> None: + """Keep current player doorways on the implemented six-view workspace. + + The context-menu Operations boundary was corrected once while terminal, + Bevy, the interface index, and the root README retained the superseded + five-view/READY contract. The recurrence rule makes that cross-page + roster and status mechanically checked. Dated logs remain history. + """ + owner_rel = "wiki/interface/operations-workspace.md" + owner = self.root / owner_rel + if not owner.exists(): + return + status = STATUS_LINE_RE.search(self.read(owner)) + if status is None or status.group(1).strip() != "IMPLEMENTED": + self.bad( + f"{owner_rel} must remain IMPLEMENTED while current Operations " + "mirror invariants are enforced" + ) + + mirrors = ( + "README.md", + "wiki/interface/README.md", + "wiki/interface/action-vocabulary.md", + "wiki/interface/bevy.md", + owner_rel, + "wiki/interface/terminal.md", + ) + for rel in mirrors: + path = self.root / rel + if not path.exists(): + self.bad(f"implemented Operations mirror missing: {rel}") + continue + text = self.read(path) + if not OPERATIONS_VIEW_ROSTER_RE.search(text): + self.bad( + f"{rel} does not name the implemented Operations roster in " + "canonical order: INTEL / PEOPLE / PERSONAS / ACCOUNTS / " + "SCHEMES / ACTIVE" + ) + candidates = [self.root / "README.md"] + candidates.extend( + path + for path in self.wiki_md_files() + if not path.relative_to(self.root).as_posix().startswith( + ("wiki/log/", "wiki/process/") + ) + ) + for path in candidates: + if not path.exists(): + continue + rel = path.relative_to(self.root).as_posix() + text = self.read(path) + stale_roster = OPERATIONS_FIVE_VIEW_ROSTER_RE.search(text) + if stale_roster is not None: + line = text.count("\n", 0, stale_roster.start()) + 1 + self.bad( + f"{rel}:{line} still names the superseded five-view Operations " + "roster without PERSONAS" + ) + pending = OPERATIONS_PENDING_RE.search(text) + if pending is not None: + line = text.count("\n", 0, pending.start()) + 1 + self.bad( + f"{rel}:{line} still presents the implemented Operations " + "surface as READY or unmet" + ) + def run_corpus(self) -> int: self.validate_doorway_save_policy() self.validate_wiki_save_version_claims() self.validate_current_build_line_count() + self.validate_operations_mirrors() for path in self.wiki_md_files(): rel = path.relative_to(self.root).as_posix() if rel == "wiki/SUMMARY.md": diff --git a/tools/test_corpus_engine.sh b/tools/test_corpus_engine.sh index 3de7950b..b522e05b 100755 --- a/tools/test_corpus_engine.sh +++ b/tools/test_corpus_engine.sh @@ -513,6 +513,144 @@ flips to the sensorium. This is historical context only; DIGITAL is home now. EOF assert_ok material-first-history --root "$root" --corpus +echo "=== fixture: implemented Operations mirrors ===" +add_operations_contract() { + local root=$1 + mkdir -p "$root/wiki/interface" + cat > "$root/wiki/interface/operations-workspace.md" <<'EOF' +# Spec: Operations + +``` +Type: spec +Status: IMPLEMENTED +Stage: B1 +Design: + - wiki/vision/law.md#justification-and-legibility +Depends on: none +``` + +INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE. + +## Acceptance criteria + +1. Exists. +EOF + for rel in README.md wiki/interface/README.md wiki/interface/action-vocabulary.md wiki/interface/bevy.md wiki/interface/terminal.md; do + mkdir -p "$root/$(dirname "$rel")" + cat > "$root/$rel" <<'EOF' +# Operations mirror + +``` +Type: knowledge +``` + +Operations: INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE. +EOF + done +} + +root=$tmp/operations-current +setup_base "$root" +add_operations_contract "$root" +assert_ok operations-current --root "$root" --corpus + +root=$tmp/operations-five-view +setup_base "$root" +add_operations_contract "$root" +cat >> "$root/wiki/interface/bevy.md" <<'EOF' + +Stale duplicate: INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE. +EOF +assert_fails operations-five-view --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'still names the superseded five-view Operations roster' || { + echo "FAIL: stale Operations roster diagnostic missing" + echo "$out" + fail=1 +} + +root=$tmp/operations-roster-absent +setup_base "$root" +add_operations_contract "$root" +cat > "$root/wiki/interface/bevy.md" <<'EOF' +# Operations mirror + +``` +Type: knowledge +``` + +Operations exists. +EOF +assert_fails operations-roster-absent --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'does not name the implemented Operations roster' || { + echo "FAIL: absent Operations roster diagnostic missing" + echo "$out" + fail=1 +} + +root=$tmp/operations-ready +setup_base "$root" +add_operations_contract "$root" +mkdir -p "$root/wiki/mechanics" +cat > "$root/wiki/mechanics/stale-operations.md" <<'EOF' +# Stale Operations mirror + +``` +Type: knowledge +``` + +Operations PEOPLE after its READY migration. +EOF +assert_fails operations-ready --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'still presents the implemented Operations surface as READY or unmet' || { + echo "FAIL: stale Operations status diagnostic missing" + echo "$out" + fail=1 +} + +root=$tmp/operations-ready-delta +setup_base "$root" +add_operations_contract "$root" +cat >> "$root/wiki/interface/bevy.md" <<'EOF' + +This UI delta is READY, not yet part of the implemented screenshots. +EOF +assert_fails operations-ready-delta --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'still presents the implemented Operations surface as READY or unmet' || { + echo "FAIL: stale Operations UI-delta diagnostic missing" + echo "$out" + fail=1 +} + +root=$tmp/operations-mirror-missing +setup_base "$root" +add_operations_contract "$root" +rm "$root/wiki/interface/action-vocabulary.md" +assert_fails operations-mirror-missing --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'implemented Operations mirror missing' || { + echo "FAIL: missing Operations mirror diagnostic missing" + echo "$out" + fail=1 +} + +root=$tmp/operations-owner-not-implemented +setup_base "$root" +add_operations_contract "$root" +sed -i.bak 's/Status: IMPLEMENTED/Status: DRAFT/' \ + "$root/wiki/interface/operations-workspace.md" +rm "$root/wiki/interface/operations-workspace.md.bak" +assert_fails operations-owner-not-implemented --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'must remain IMPLEMENTED' || { + echo "FAIL: non-implemented Operations owner diagnostic missing" + echo "$out" + fail=1 +} + echo "=== fixture: retired live-runtime Rust symbol ===" root=$tmp/retired-runtime-rust setup_base "$root" diff --git a/wiki/interface/README.md b/wiki/interface/README.md index 3dea02fe..1d0c38b7 100644 --- a/wiki/interface/README.md +++ b/wiki/interface/README.md @@ -26,7 +26,7 @@ How the player perceives the world and acts on it. New terms are defined in - [action-vocabulary.md](action-vocabulary.md) โ€” the complete list of every action, control, command, and alias the player can use. - [operations-workspace.md](operations-workspace.md) โ€” the strategic screen - (INTEL / PEOPLE / ACCOUNTS / SCHEMES / ACTIVE). The + (INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE). The [context menu](context-menu.md) is its local counterpart on a map tile. - [terminal.md](terminal.md) and [bevy.md](bevy.md) โ€” the two frontends (text and graphical), kept at key-for-key parity. diff --git a/wiki/interface/action-vocabulary.md b/wiki/interface/action-vocabulary.md index 91c29fef..55c938fb 100644 --- a/wiki/interface/action-vocabulary.md +++ b/wiki/interface/action-vocabulary.md @@ -66,7 +66,7 @@ Work order: action-vocabulary Work priority: 30 Work class: frontend Blocked by: - - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-accounts-and-schemes + - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-personas-accounts-schemes-and-active-commitments Exclusive keys: - crates/misaligned-core/src/actions.rs - crates/misaligned-core/src/operations_projection.rs @@ -264,7 +264,7 @@ useful interface words, but they do not enlarge the fictional verb set. | **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. 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` | +| **INSPECT** | Render current state without creating a world effect. INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE use the implemented shared Operations projection. | 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` | diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index 71f448a6..647e0524 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -36,7 +36,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/operations-workspace.md#spec-operations-workspace-intel-people-personas-accounts-schemes-and-active-commitments - wiki/interface/terminal.md#spec-the-terminal-frontend ``` diff --git a/wiki/interface/bevy.md b/wiki/interface/bevy.md index 20b71d8d..9d7a0641 100644 --- a/wiki/interface/bevy.md +++ b/wiki/interface/bevy.md @@ -17,12 +17,12 @@ 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. +The implemented Operations surface supplies the other half of that shared +action surface: uppercase `I` opens the renderer-neutral INTEL / PEOPLE / +PERSONAS / 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. 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 diff --git a/wiki/interface/narration.md b/wiki/interface/narration.md index 3dffe857..a5a903a5 100644 --- a/wiki/interface/narration.md +++ b/wiki/interface/narration.md @@ -48,7 +48,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/interface/operations-workspace.md#spec-operations-workspace-intel-people-personas-accounts-schemes-and-active-commitments - 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 diff --git a/wiki/interface/operations-workspace.md b/wiki/interface/operations-workspace.md index 55581f43..3321676a 100644 --- a/wiki/interface/operations-workspace.md +++ b/wiki/interface/operations-workspace.md @@ -1,4 +1,4 @@ -# Spec: operations workspace โ€” intel, people, accounts, and schemes +# Spec: operations workspace โ€” intel, people, personas, accounts, schemes, and active commitments ``` Type: spec diff --git a/wiki/interface/terminal.md b/wiki/interface/terminal.md index 1975ce22..1f15170e 100644 --- a/wiki/interface/terminal.md +++ b/wiki/interface/terminal.md @@ -16,10 +16,11 @@ Status note: adopted and implemented in the same PR as the design corpus's (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. The - renderer delta is implemented through operations-workspace.md, including - target-bound confirmation and focus back to earned map actuators. + INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE workspace. + Strategic actions move there; compact context menus retain only actions on + the focused world body. The renderer delta is implemented through + operations-workspace.md, including target-bound confirmation and focus back + to earned map actuators. 2026-07-14 views amendment: F3 now selects distinct map dialects rather than only changing a label. DIGITAL renders the learned substrate plus canonical reach links/nodes on shared physical anchors; REAL retains physical/fog @@ -34,7 +35,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/operations-workspace.md#spec-operations-workspace-intel-people-personas-accounts-schemes-and-active-commitments - wiki/interface/views.md#spec-views-same-frame-digital-and-real-representations ``` @@ -141,7 +142,7 @@ At terminal size โ‰ฅ 70ร—22 (hard minimum; below it, a plain size warning): - **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 + plus INTEL / PEOPLE / PERSONAS / 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. @@ -250,10 +251,10 @@ 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; 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). +7. People render on the map only inside sensor coverage; earned off-map people + remain reachable through Operations PEOPLE without appearing on a spatial + context menu (wiki/mechanics/schedules.md criterion 4 remains satisfied via + the shared dossier 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 @@ -266,17 +267,16 @@ changes. cursor, selection, and menu, and both dialects remain playable at DF density without depending on color alone. -### READY Operations delta +### Operations acceptance criteria 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 +T3. At 70ร—22, Operations exposes all six 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. +T1-T3 are implemented through `wiki/interface/operations-workspace.md` and +remain here as the terminal-specific parity boundary. diff --git a/wiki/log/2026-07-18-context-menu-current-mirrors.md b/wiki/log/2026-07-18-context-menu-current-mirrors.md new file mode 100644 index 00000000..b9545258 --- /dev/null +++ b/wiki/log/2026-07-18-context-menu-current-mirrors.md @@ -0,0 +1,58 @@ +# Context-menu mirrors now describe the menu that exists + +``` +Type: log +``` + +## Intent + +Re-audit the context-menu contract against the shared legality query, both +human frontends, Operations, and the player doorways rather than trusting the +page's IMPLEMENTED label. + +## Finding + +The runtime obeyed the owning context-menu and Operations contracts: human +menus consume executable `Sim::human_menu` rows, strategic objects live in one +six-view Operations workspace, and both frontends use the same projection. +The current corpus did not describe that boundary consistently. Bevy still +called Operations READY; terminal retained an explicitly unmet five-view +acceptance section and the old host-menu bridge for off-map people; the +interface index omitted PERSONAS; and the root README still promised full +agent descriptors, blocked rows, off-map people, social acts, and flow acts on +spatial context menus. Independent review then found the same stale five-view +or READY-migration framing in action-vocabulary, Intel, Schedules, Economy, +Cursor, and Messages, plus an incomplete Operations title and a five-view core +module comment. + +This is the same contract seam found by the 2026-07-13 context-menu audit, now +recurring outside the owning page. + +## Correction + +- Every current mirror found by the audit now names the implemented INTEL / + PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE roster and status. +- Terminal's retained Operations criteria describe implemented parity, and + off-map people route through PEOPLE rather than the host rack. +- The README now distinguishes terse executable human rows from complete agent + descriptors and keeps local body verbs separate from strategic objects. +- `corpus_engine.py` requires the six direct player mirrors and scans the + current non-process corpus for the superseded five-view roster or + READY/unmet Operations wording. Fixtures reject absent/missing mirrors, + five-view duplication, stale status, and silent owner-status deactivation. + +No game, save, or frontend behavior changed. + +Defense: context-menu.md's **One legality source**, **Actions live on the +thing**, and **Boundaries** clauses require human surfaces to render executable +local choices while Operations owns strategic targets. The new gate protects +that already-adopted boundary; it does not invent another action surface. + +## Verification + +- inspected `OperationsView::ALL`, all three Operations renderers, terminal and + Bevy menu dispatch, and the shared action query; +- ran `tools/test_corpus_engine.sh`; +- ran `./tools/check.sh --lib` after regenerating the corpus indexes: 434 core + tests, three Act One integrations, Clippy, Bevy API, agent smoke, corpus, and + fixture gates all passed. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 73b9e7d6..7c431f93 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -96,6 +96,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-18-dana-implemented.md](2026-07-18-dana-implemented.md) +## 2026-07-18 - Context-menu mirrors now describe the menu that exists + +- Intent: Re-audit the context-menu contract against the shared legality query, both human frontends, Operations, and the player doorways rather than trusting the page's IMPLEMENTED label. +- Log: [wiki/log/2026-07-18-context-menu-current-mirrors.md](2026-07-18-context-menu-current-mirrors.md) + ## 2026-07-18 - Consequence-first information is one persistent object - Intent: (see session log) diff --git a/wiki/mechanics/cursor.md b/wiki/mechanics/cursor.md index 26739100..0415a7fc 100644 --- a/wiki/mechanics/cursor.md +++ b/wiki/mechanics/cursor.md @@ -220,7 +220,7 @@ without the sense coverage that earns it.** absent from spatial inspect but produces a source-tagged event; under camera coverage, the person is surfaced per staged knowledge). Every player-facing surface that names a person โ€” - the shared people projection (Operations PEOPLE after its READY migration), + the implemented shared Operations PEOPLE projection, detection sidebar, map glyph, context/Operations verbs, signature-band notes, agent frame โ€” goes through `Sim::person_label` / `Sim::observer_label` / `Sim::person_glyph`: diff --git a/wiki/mechanics/economy.md b/wiki/mechanics/economy.md index 5e01d8ba..a2e879bf 100644 --- a/wiki/mechanics/economy.md +++ b/wiki/mechanics/economy.md @@ -12,8 +12,8 @@ Status note: DECIDED 2026-07-17, not yet runtime (issue #11) โ€” money stays on The current direct-book-read runtime (`tap_accounting`, the pooled ledger intel) stands until the financial-mail work order lands. Prior state: 2026-07-08 polish closed the remaining acceptance gaps: - observer-band risk previews in the implemented finance projections - (terminal/Bevy/agent; moved into Operations ACCOUNTS by the READY amendment) + observer-band risk previews in the implemented Operations ACCOUNTS projection + (terminal/Bevy/agent) 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 diff --git a/wiki/mechanics/intel.md b/wiki/mechanics/intel.md index aa7d69d2..14d0a715 100644 --- a/wiki/mechanics/intel.md +++ b/wiki/mechanics/intel.md @@ -58,7 +58,7 @@ Work order: intel Work priority: 29 Work class: frontend Blocked by: - - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-accounts-and-schemes + - wiki/interface/operations-workspace.md#spec-operations-workspace-intel-people-personas-accounts-schemes-and-active-commitments Exclusive keys: - crates/misaligned-core/src/intel.rs - crates/misaligned-core/src/sim/mod.rs @@ -466,8 +466,8 @@ buffer like any other opaque information item. 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 shared intel/people projection (Operations - INTEL/PEOPLE after its READY migration). A machine holding available + timestamp), visible in the implemented shared Operations INTEL / PEOPLE + projection. A machine holding available information shows one quiet `INFO` presence mark without queue depth. **Met โ€” ProcessRecording reservoirs + host `pending_intel` projected as presence.** 3. Knowledge staging is driven by the pipeline: N processed sightings diff --git a/wiki/mechanics/messages.md b/wiki/mechanics/messages.md index 0bdeb30d..78e828fa 100644 --- a/wiki/mechanics/messages.md +++ b/wiki/mechanics/messages.md @@ -177,9 +177,9 @@ Office, its watched inputs, and its audit role. ## Player surface -- 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 +- Message threads in the selected implemented Operations PEOPLE dossier 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). diff --git a/wiki/mechanics/schedules.md b/wiki/mechanics/schedules.md index c9d114a3..fdce16e2 100644 --- a/wiki/mechanics/schedules.md +++ b/wiki/mechanics/schedules.md @@ -7,8 +7,8 @@ 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 current people - projection (Operations PEOPLE after its READY migration) + map surface - presence by staged knowledge. Located + projection (implemented Operations PEOPLE) + 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 diff --git a/wiki/process/specs.md b/wiki/process/specs.md index 7008d38d..5656e755 100644 --- a/wiki/process/specs.md +++ b/wiki/process/specs.md @@ -39,7 +39,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 | IMPLEMENTED | +| [../interface/operations-workspace.md](../interface/operations-workspace.md) | operations workspace โ€” intel, people, personas, accounts, schemes, and active commitments | IMPLEMENTED | | [../interface/thought-fluid.md](../interface/thought-fluid.md) | the thought fluid โ€” slugs, meniscus, and the filament snap | IMPLEMENTED | | [../interface/views.md](../interface/views.md) | views โ€” same-frame digital and real representations | IMPLEMENTED | | [../mechanics/aggregate-observer.md](../mechanics/aggregate-observer.md) | the aggregate observer | IMPLEMENTED | diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 39e79e43..8c26ce6b 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -43,7 +43,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/vision/design-judgment.md` | 2026-07-15 | finding | taste calibration agrees with the current corpus (witness summary matches the reconciled narration.md, pacing targets match act-one, rejects match shipped shape); one line predated the Ears-first amendment ("getting one camera" as the opening beat) โ€” re-worded to earning one sense, ear then camera | | `wiki/vision/simulation-laws.md` | 2026-07-17 | finding | all five laws verify against audited systems (automation prices, addressed latency, device-resident work with sited signatures, ActionDesc receipts, legibility); resolved the missing placeholder home with one canonical live/retired registry, enumerated the three current REAL stand-in families, and reconciled stale billboard/core/terminal claims โ€” [log](../log/2026-07-17-placeholder-registry.md) | | `wiki/process/ROADMAP.md` (work order 27) | 2026-07-18 | finding | re-audit: entry 27's prose is honest (material served as opening default 2026-07-08 โ†’ superseded by views.md criterion 1 on 2026-07-11; DIGITAL home, F3 to REAL) and material-render.md is IMPLEMENTED as claimed; the drift was three Bevy code comments still calling material "the default material render/frame" against the runtime's own `material == false` DIGITAL default one screen away โ€” comments trued to DIGITAL-home / REAL-via-F3 language โ€” [prior log](../log/2026-07-13-roadmap-digital-home-reconciliation.md) | -| `wiki/interface/context-menu.md` | 2026-07-13 | finding | [log](../log/2026-07-13-context-menu-operations-status.md) | +| `wiki/interface/context-menu.md` | 2026-07-18 | finding | re-audit: shared legality, executable-only human rows, local-vs-strategic ownership, frontend menu parity, and exact person-entry paths still verify; current mirrors across the root doorway, interface, Intel, Schedules, Economy, Cursor, Messages, the owner title, and one core comment retained parts of the superseded five-view/READY contract. All now name the implemented six-view boundary, and recurrence promoted the roster/status to the corpus gate โ€” [log](../log/2026-07-18-context-menu-current-mirrors.md) | | `wiki/mechanics/personas.md` | 2026-07-18 | finding | the stored contradiction records were observer-local, but runtime still derived one global numeric score across every witness, automatically burned lifecycle when any witness reached zero, exposed that percentage in PEOPLE/PERSONAS/Moonlight/build receipts, and converted every forged builder's fallout together. Replaced the scalar/damage paths with one coarse `integrity_for(persona, observer)` read, kept local break separate from global lifecycle, bound every social/build/institutional consequence to its exact observer, projected named bands with provenance, removed stale migration-era claims, and pinned cross-observer isolation plus UI/build behavior โ€” [log](../log/2026-07-18-persona-observer-integrity.md) | | `wiki/interface/views.md` + representation docs | 2026-07-18 | clean | re-audit: criterion 1's pin stands (`opens_digital_and_flips_without_moving_frontend_or_sim_state`, sim-state hash across flips), the view remains frontend-only and absent from saves, shared anchors and the fog contract re-verified through the same-day cursor.md audit, and the stale material-default code comments were trued the same day (ROADMAP order-27 row) โ€” [prior log](../log/2026-07-14-terminal-view-dialects.md) | | `wiki/mechanics/day-job.md` | 2026-07-18 | finding | re-audit: band ramp, strikes, cadence, origin lean, `email_channel_blocker`, the third-strike last-chance interrupt, and the pilot tests (`pilot_shutdown_ends_the_run`, `third_pilot_strike_interrupts_the_ladder_with_the_last_chance_response`, round-trip) all verify; the drift was the trust-unlock prose listing a fourth unlock ("longer leash on job deadlines") with no code counterpart โ€” now marked designed-not-yet-runtime, with email/lax-sampling/quota named as the shipped set | @@ -83,3 +83,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-18 ยท contradiction ยท `README.md` ยท the Bevy compact-rest paragraph says crown metrics and FOCUS remain visible, while the implemented clinical frame keeps both under deliberate Tab expansion -- 2.51.2