diff --git a/wiki/interface/terminal-first.md b/wiki/interface/terminal-first.md index f5ac5b26..405992a7 100644 --- a/wiki/interface/terminal-first.md +++ b/wiki/interface/terminal-first.md @@ -26,8 +26,11 @@ Three binding rules: - **Visibility best practices bind.** One meaning per color, everywhere. Information is never carried by color alone: suspicion bands print their names beside their meters, selection is reverse-video plus a marker, paused - says PAUSED. Columns align; meters carry their numbers; the day and tick - are always on screen; log lines carry the tick they happened on. + says PAUSED. Columns align; meters carry their numbers. Once the first + earned sense retires the shared blind opening, the day and tick stay on + screen and log lines carry the tick they happened on. Before then, the + opening's available mode words and one terse input echo are the complete + terminal surface; no clock or other world instrument may leak through. - **Parity of legibility.** Every mechanic the sim exposes must be playable, and every number legible, in the terminal — justification-and-legibility applies to terminal rendering with full force. A mechanic observable only @@ -39,3 +42,9 @@ Three binding rules: — wiki/interface/agent-play.md). A pty with wall-clock pacing is never the only way in, and a mechanic playable only by raw-mode keystroke is a violation on par with one observable only in Bevy. + +**Defense:** the temporal-visibility promise begins at the same first-earned- +sense boundary as the dark-opening and continuous-witness laws. This is one +narrow pre-perception exception: the sense-earning input must restore the +ordinary clock immediately, and no post-perception terminal state may borrow +the exception to hide day or tick. diff --git a/wiki/log/2026-07-27-terminal-first-opening-clock-boundary.md b/wiki/log/2026-07-27-terminal-first-opening-clock-boundary.md new file mode 100644 index 00000000..487c6e2b --- /dev/null +++ b/wiki/log/2026-07-27-terminal-first-opening-clock-boundary.md @@ -0,0 +1,47 @@ +# The terminal clock begins with perception + +``` +Type: log +``` + +## Finding + +The first audit of the terminal-first law against the persisted blind opening +found one stale universal claim. The law said day and tick were always on +screen, while the later binding opening, terminal spec, agent protocol, and +production render boundary all deliberately withhold the clock until the +first earned sense. Before that transition the complete truthful terminal +surface is the available WORK / THINK / LIE words plus one terse echo of the +attempted input. + +Runtime already followed the newer contract. Human terminal rendering routes +an opening run directly to `render_opening_modes` instead of the ordinary +frame, and its regression rejects day, tick, objective, status, and the +retired self-diagnostic vocabulary. Agent mode applies the same opening gate, +then returns the ordinary frame and status boundary on the command that earns +perception. + +## Amendment + +The first-class terminal law now starts its day-and-tick guarantee at the +first earned sense. It names the pre-perception mode-word and input-echo +surface as one narrow exception and requires the sense-earning input to +restore the clock immediately. The amendment does not weaken post-perception +legibility and changes no runtime behavior. + +## Defense + +The dark opening and continuous witness already share one exact boundary: +world instrumentation is absent before perception and complete immediately +afterward. Scoping the older terminal promise to that same transition removes +the contradiction without inventing another frontend state or allowing +ordinary play to hide temporal pressure. + +## Verification + +- compared the amended law with `opening.md`, `continuous-witness.md`, + `terminal.md`, and `agent-play.md`; +- traced production human terminal routing through the opening-only renderer; +- traced agent mode's opening gate and sense-earning transition; +- confirmed existing terminal and agent regressions pin clock absence before + perception and ordinary frame restoration afterward. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 36c1e4e6..633a8edb 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -16,6 +16,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-27-territory-guidance-chain.md](2026-07-27-territory-guidance-chain.md) +## 2026-07-27 - The terminal clock begins with perception + +- Intent: (see session log) +- Log: [wiki/log/2026-07-27-terminal-first-opening-clock-boundary.md](2026-07-27-terminal-first-opening-clock-boundary.md) + ## 2026-07-27 - Tangled issue automation now runs through `tg` - Intent: (see session log) diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 6670d53b..541ede1a 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/terminal-first.md` temporal visibility | 2026-07-27 | finding | first audit against the persisted earned-perception opening found the law still required day and tick “always,” while the binding opening, terminal spec, agent protocol, production render boundary, and tests deliberately expose only available mode words plus one terse input echo before the first sense. The law now scopes its clock promise to the perceived world and explicitly restores it on the sense-earning input; runtime was already correct — [log](../log/2026-07-27-terminal-first-opening-clock-boundary.md) | | `wiki/world/story/opening.md` + boot-voice status mirrors | 2026-07-27 | finding | fresh audit after issue #15 option 1 shipped: `Sim::opening_interoception`, opening criterion 4, and all three frontends implement sparse shared interoception plus frontend-local input echo, but `narration.md` still said the pre-witness voice "remains unimplemented" / implementation debt and `digital-read.md` still listed it as debt. Both status notes now state implemented under opening.md without reopening the mature DIGITAL/witness spine — [log](../log/2026-07-27-boot-voice-status-honest.md). Issues #14/#15 remain open only for tracker close once `tg` auth unlocks. | | `wiki/process/tick.md` + issue automation | 2026-07-27 | finding | the queued retired-client violation held across binding procedure, both skill mirrors, four active prompt templates, tick intake, project status, and doctor. `tools/tangled_issues.py` now keeps repository discovery and authenticated issue writes on canonical Go `tg`, reconstructs deterministic display numbers from public issue records, folds public label-op history, and provides fail-closed structured list/view/create/edit/comment/close/label operations. A same-day live harvest exposed one wrong record assumption: comments are cross-account `sh.tangled.feed.comment` records linked through `subject.uri`, not issue-local child records. The repaired helper follows that backlink into the author's PDS and returns the markup text; a fixture pins the exact shape, and live issue #15 now returns Cameron's choice `1` — [migration and repair log](../log/2026-07-27-tangled-issue-client-migration.md) | | `wiki/world/places/basement-map.md` room topology | 2026-07-27 | finding | the queued five non-hall corridor cuts remained, and an executable all-room perimeter audit exposed the same dead-door shape at the loading-dock entry plus fixed objects blocking the interior faces of the roll door, HVAC door, both storage doors, Janitor door, and stairwell. Every non-hall approach now reaches its authored door from outside the prefab, every other perimeter tile remains closed, doorway interiors are clear, and the roll, sealed, tier-2, and tier-3 boundaries retain their exact kinds — [room-approach log](../log/2026-07-27-room-approaches-meet-doors.md). Prior [west-approach](../log/2026-07-26-west-hall-approach.md) and [hall-density](../log/2026-07-26-foundation-hall-density.md) repairs stand. | @@ -99,3 +100,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-27 · contradiction · `wiki/process/tick-ledger.md` opening status · the opening coverage row still claims sparse shared interoception from issue #15 is implemented after Fire #33 removed that projection and restored mode words plus input echo as the complete pre-sense surface