diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index 7cf461bc..20f193b4 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -5,36 +5,37 @@ Type: spec Status: IMPLEMENTED Status note: implemented in the terminal binary by `misaligned --agent`, including command-clocked time, plain-text frames, per-command event - drains, deterministic `--seed`, name-targeted social verbs, the `attend` - verb, the finance/economy vocabulary, and the research vocabulary - (`research [track]`, `mask band|true|off` — research.md). 2026-07-07 - objective pass: the identity block gained the always-on objective line - (`OBJECTIVE: PERSIST` + progress readout, wiki/mechanics/objective.md) — - frame content, no size change and no new verb (the line is in the frame, - per the frames-not-dumps law). 2026-07-07 - research pass: the frame grew 70x54 -> 70x60 for the sidebar's RESEARCH - block. Earlier day-job pass: - attendance is derived from the cursor (attended iff it sits on the host - rack) and re-asserted each tick of a `wait`; the frame grew from 70x22 to - 70x54 because at 22 rows the sidebar truncated before CORE/DETECTION/DAY - JOB rendered (criterion 5 was silently unmet; the spec sets 70x22 as the - minimum). 2026-07-08 playtest-fixes pass: the frame grew 70x60 -> 70x64 - for the DETECTION section's pending-signature indicator and audit/pilot - countdown lines (detection.md criterion 3); the identity block's `now:` - nudge is the shared Sim::current_nudge chain worded in protocol verbs; - and `siphon`/`redirect` with a non-flow argument answer `-- err` naming - where flow ids live — or `clear-debt` when the argument named Marcus - (the "every command answers" rule; the alias was rejected in favor of - an error that teaches the grammar, so `redirect` keeps one meaning). - 2026-07-08 event-anchor pass (context-menu.md addendum): drained event - lines carry the stable `@anchor` suffix, the frame's log window marks - anchored events with `*`, and `focus last` jumps the cursor to the - newest anchored event and prints its `actions:` lines. - 2026-07-08 epistemic-honesty tick: person targets resolve against - earned labels / opaque ids only (`Sim::person_label`); the people - panel and detection sidebar print role silhouettes until Schedule - knowledge; authored names never appear in the frame before they are - earned. + drains, deterministic `--seed`, earned-label / opaque-id social + targeting (`Sim::person_label`; never unearned authored names), the + `attend` verb, the finance/economy vocabulary, and the research + vocabulary (`research [track]`, `mask band|true|off` — research.md). + 2026-07-07 objective pass: the identity block gained the always-on + objective line (`OBJECTIVE: PERSIST` + progress readout, + wiki/mechanics/objective.md) — frame content, no size change and no + new verb (the line is in the frame, per the frames-not-dumps law). + 2026-07-07 research pass: the frame grew 70x54 -> 70x60 for the + sidebar's RESEARCH block. Earlier day-job pass: attendance is derived + from the cursor (attended iff it sits on the host rack) and + re-asserted each tick of a `wait`; the frame grew from 70x22 to 70x54 + because at 22 rows the sidebar truncated before CORE/DETECTION/DAY JOB + rendered (criterion 5 was silently unmet; the spec sets 70x22 as the + minimum). 2026-07-08 playtest-fixes pass: the frame grew 70x60 -> + 70x64 for the DETECTION section's pending-signature indicator and + audit/pilot countdown lines (detection.md criterion 3); the identity + block's `now:` nudge is the shared Sim::current_nudge chain worded in + protocol verbs; and `siphon`/`redirect` with a non-flow argument + answer `-- err` naming where flow ids live — or `clear-debt` when the + argument named a person (the "every command answers" rule; the alias + was rejected in favor of an error that teaches the grammar, so + `redirect` keeps one meaning). 2026-07-08 event-anchor pass + (context-menu.md addendum): drained event lines carry the stable + `@anchor` suffix, the frame's log window marks anchored events with + `*`, and `focus last` jumps the cursor to the newest anchored event + and prints its `actions:` lines. 2026-07-08 epistemic-honesty tick: + person targets resolve against earned labels / opaque ids only; the + people panel and detection sidebar print role silhouettes until + Schedule knowledge; authored names never appear in the frame before + they are earned. Stage: Process Constitution: "The terminal is a first-class frontend" (agent-play clause), pillar 5 (sim core decoupled from renderer), "Presence: the cursor and diff --git a/wiki/interface/context-menu.md b/wiki/interface/context-menu.md index 1d173523..261d2b3d 100644 --- a/wiki/interface/context-menu.md +++ b/wiki/interface/context-menu.md @@ -20,6 +20,10 @@ Status note: implemented 2026-07-07 on the context-menu worktree (all worktree: `LogEvent.anchor`, `Sim::anchor_position`, `Sim::menu_empty_feedback`; terminal `;` + `»` markers, Bevy clickable trace rows, agent `@anchor` suffixes + `focus last`. + 2026-07-08 epistemic-honesty follow-up: person verbs and + signature-band observer strings in `ActionDesc` go through + `Sim::person_label` / `Sim::observer_label` (cursor.md criterion 5) — + role silhouettes until Schedule, authored names after. Stage: B1 — The Basement Constitution: "Actions live on the thing" (this spec's law), "Work is somewhere" (the anchors actions attach to), @@ -52,9 +56,11 @@ is status and telemetry only. duplicates legality logic. - **Epistemic honesty:** the query never returns a verb the player has not earned — unearned anchors expose nothing, and provenance rules - (cursor.md) govern what the menu may name. Showing a disabled verb - with its reason is for *known* possibilities; unknown ones are absent, - not grayed. + (cursor.md) govern what the menu may name. Verb text that mentions a + person, and the observer string on an expected-signature band, use + `Sim::person_label` / `Sim::observer_label` — never an unearned + authored name. Showing a disabled verb with its reason is for *known* + possibilities; unknown ones are absent, not grayed. - **Automation in place:** any verb with a standing-policy form (attend -> standing dial, watch, scheme policies) shows its automate affordance as a submenu entry of the same verb, at its compute price. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 220867dc..b9c2c47b 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -5,6 +5,20 @@ Type: log ``` Reverse chronological implementation notes. Keep this factual: what changed, why, checks, and spec impact. +## 2026-07-08 - Spec sync: epistemic identity gate + +- Intent: after the epistemic-names tick (`c15dcf3`), sibling specs still + read as if cast names were always visible. Align player-surface and + criterion text with `Sim::person_label` / `observer_label` / + `person_glyph`. +- Changed (docs only): detection.md player surface + criterion 4; + social.md people-panel identity staging; schedules.md glyph/`?` rule + in criterion 4; agent-play.md status note (earned-label / opaque-id); + context-menu.md status note + epistemic honesty clause for verb / + signature observer strings. +- Spec impact: no code; Status stays IMPLEMENTED on each page. +- Checks: wiki gate + mdbook via ./tools/check.sh. + ## 2026-07-08 - Playtest (Grok): naive seed 1 + informed seed 7 - Docs only: agent-mode playtest report. Naive (seed 1) followed frame diff --git a/wiki/mechanics/detection.md b/wiki/mechanics/detection.md index 1d1ea963..b0da29f6 100644 --- a/wiki/mechanics/detection.md +++ b/wiki/mechanics/detection.md @@ -21,7 +21,10 @@ Status note: criteria audited 2026-07-08 on the playtest-fixes worktree gone; observer state round-trips (save tests). Player surface: bands + watched channels + last-noticed event in the people panels, and a pending-signature indicator beside the audit/pilot clocks in the - DETECTION area of all three surfaces. + DETECTION area of all three surfaces. 2026-07-08 epistemic-honesty + follow-up: criterion 4 extended — field-observer labels on that + surface go through `Sim::observer_label` (role silhouette until + Schedule; Assurance always named). Stage: B1 — The Basement Constitution: "The shape of Misaligned" (per-observer suspicion), "Act One" (detection surfaces; the Assurance Office; act exits) @@ -87,9 +90,13 @@ SignatureKind: Network | Power | Thermal | Physical | Paper | JobAnomaly ## Player surface An observers panel: each human's coarse suspicion band, watched channels, -and last-noticed event ("Dana flagged unusual switch traffic, 2 days -ago"). Pending-signature indicator so concealment allocation is an -informed choice. +and last-noticed event. Field-observer labels go through +`Sim::observer_label` (cursor.md criterion 5): until +`Knowledge::Schedule` the row is a role silhouette (`the IT`, `the +Janitor`, …); after it, the authored name. The Assurance Office is an +institution and is always named. Example once Dana is identified: +"Dana flagged unusual switch traffic, 2 days ago". Pending-signature +indicator so concealment allocation is an informed choice. ## Acceptance criteria @@ -105,5 +112,8 @@ informed choice. starts containment as a terminal event hook (overt-phase spec subscribes 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 + named. 5. Global heat is fully replaced in the concealment phase; save/load round-trips all observer state. diff --git a/wiki/mechanics/schedules.md b/wiki/mechanics/schedules.md index 28dff7ed..b1bf83c7 100644 --- a/wiki/mechanics/schedules.md +++ b/wiki/mechanics/schedules.md @@ -13,7 +13,9 @@ Status note: all five criteria met (2026-07-06; updated 2026-07-07 for signal — an event nobody was present for leaves no trace, which is the stealth fantasy. Surfaced and fixed a pre-existing bug: observer ids did not match person ids (recruit/set_floor/LookAway hit the wrong observer); - observers are now id-aligned to People. + 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). Stage: B1 — The Basement Constitution: "Act One" (the cast's schedules; detection surfaces), "The shape of Misaligned" (people before robots), "Self-similar scale" @@ -55,8 +57,11 @@ second clock). Between blocks a person is **off-site** (not on the plane). People panel: current location line per person ("in the server room" / "off-site" / "unknown — no eyes on them"); after schedule knowledge, the -schedule itself. Map: person glyphs render only inside controlled-sensor -coverage (they are what fog is *for*). +schedule itself. Identity on that card is staged the same way +(social.md / cursor.md): role silhouette until `Knowledge::Schedule`. +Map: person glyphs render only inside controlled-sensor coverage (they +are what fog is *for*), and the glyph itself is `Sim::person_glyph` — +`?` while Unknown, the person's initial once identified. ## Acceptance criteria @@ -70,6 +75,8 @@ coverage (they are what fog is *for*). 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 - knowledge rules; no person renders outside sensor coverage. + knowledge rules; no person renders outside sensor coverage. Map glyphs + are `?` until `Knowledge::Schedule` (`Sim::person_glyph`); initials + appear only after identity is earned. 5. All schedule data is per-instance `Person` data (no hardcoded five-person switch) — the same fields must serve Act Two hires. diff --git a/wiki/mechanics/social.md b/wiki/mechanics/social.md index 98df043d..44f77fbb 100644 --- a/wiki/mechanics/social.md +++ b/wiki/mechanics/social.md @@ -18,7 +18,9 @@ Status note: 2026-07-08: all criteria pinned. Criteria 1,2,4,5 per the CloneBadge (the "badge a door" physical-access task — "The key"), pinned by marcus_clone_badge_route_opens_the_stairwell and badge_ tiers_gate_asset_work_in_tiered_rooms; asset tasks now check the - actor's badge tier (basement-map.md c3). + actor's badge tier (basement-map.md c3). 2026-07-08 epistemic-honesty + follow-up: people-panel identity is staged via `Sim::person_label` + (role silhouette until Schedule; authored names after). Stage: B1 — The Basement Constitution: "The shape of Misaligned" (people before robots; scale-native social systems), "Act One" (the cast; the ladder), "Presence: the @@ -69,8 +71,12 @@ of a `Person` template; Act Two+ adds more instances and, later, ## Player surface -A people panel: card per known human (schedule, suspicion band, leverage -once discovered, thread history, asset status). Message composition is +A people panel: card 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. ## Acceptance criteria