From 33f7fad54b956ad181369096b04ebb67d24df33c Mon Sep 17 00:00:00 2001 From: Cameron Pfiffer Date: Mon, 27 Jul 2026 05:22:01 -0700 Subject: [PATCH] Let the blind opening acknowledge input. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adopt issue #15 across the corpus while preserving first-sense world opacity, and make the validator defend both the boot voice and illegal-input neutrality. πŸ‘Ύ Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code --- tools/corpus_engine.py | 62 ++++++++++------ tools/test_corpus_engine.sh | 40 ++++++++++- wiki/gameplay/act-one.md | 5 +- wiki/gameplay/run-shape.md | 5 +- wiki/interface/agent-play.md | 57 ++++++++------- wiki/interface/bevy.md | 13 +++- wiki/interface/continuous-witness.md | 8 ++- wiki/interface/digital-read.md | 19 +++-- wiki/interface/feel-floor.md | 4 +- wiki/interface/liturgical-ui-constitution.md | 10 +-- wiki/interface/material-dark-frame.md | 12 ++-- wiki/interface/narration.md | 59 ++++++++------- wiki/interface/presence.md | 2 +- wiki/interface/terminal.md | 15 ++-- wiki/interface/views.md | 14 ++-- wiki/log/2026-07-27-boot-voice-adopted.md | 64 +++++++++++++++++ wiki/log/DEVLOG.md | 5 ++ wiki/log/decisions/2026-07-27.md | 40 +++++++++++ wiki/mechanics/cursor.md | 11 +-- wiki/mechanics/objective.md | 12 ++-- wiki/mechanics/reach.md | 2 +- wiki/process/ROADMAP.md | 28 ++++---- wiki/world/places/basement-map.md | 3 +- wiki/world/story/opening.md | 76 ++++++++++++++------ 24 files changed, 412 insertions(+), 154 deletions(-) create mode 100644 wiki/log/2026-07-27-boot-voice-adopted.md diff --git a/tools/corpus_engine.py b/tools/corpus_engine.py index 3894a588..8ba0fbcd 100755 --- a/tools/corpus_engine.py +++ b/tools/corpus_engine.py @@ -58,7 +58,7 @@ RETIRED_MATERIAL_DEFAULT_HISTORY_RE = re.compile( r"histor(?:y|ical)|until|served|staging|no longer)\b", re.I, ) -SILENT_OPENING_VISIBLE_RE = re.compile( +BLIND_OPENING_VISIBLE_RE = re.compile( r"\bbefore\s+ears\s+or\s+eyes\b|" r"\bsenses?\s+at\s+(?:the\s+)?start\b" r"(?:(?![.!?]).){0,260}\b(?:telemetry|presence\s+beam)\b|" @@ -66,22 +66,22 @@ SILENT_OPENING_VISIBLE_RE = re.compile( r"(?:(?![.!?]).){0,220}\b(?:presence\s+beam|telemetry)\b", re.I | re.S, ) -SILENT_OPENING_HISTORY_RE = re.compile( +BLIND_OPENING_HISTORY_RE = re.compile( r"\b(?:former|previous(?:ly)?|retir(?:ed|ement)|" r"supersed(?:e|ed|es|ing)|histor(?:y|ical)|originally|" r"amend(?:ed|ment)|at\s+the\s+time)\b", re.I, ) -SILENT_OPENING_BOUNDARY_RE = re.compile( +BLIND_OPENING_BOUNDARY_RE = re.compile( r"\b(?:after|once|only\s+after)\s+(?:the\s+)?first\s+earned\s+" r"(?:sense|signal|material\s+frame|world\s+frame)\b|" r"\bfirst\s+earned\s+(?:sense|signal|material\s+frame|world\s+frame)\b" r".{0,100}\b(?:retire|retires|release|releases|reveal|reveals|allow|allows)\b|" - r"\b(?:silent\s+)?(?:boundary|occluder)\b.{0,100}" + r"\b(?:(?:silent|blind)\s+)?(?:boundary|occluder)\b.{0,100}" r"\b(?:hide|hides|hidden|retire|retires|release|releases|occlude|occludes)\b", re.I | re.S, ) -SILENT_OPENING_NEGATION_RE = re.compile( +BLIND_OPENING_NEGATION_RE = re.compile( r"\b(?:no|without)\s+(?:visible\s+)?(?:host\s+)?" r"(?:presence\s+beam|telemetry)\b|" r"\b(?:presence\s+beam|telemetry)\b.{0,60}" @@ -472,17 +472,38 @@ class Engine: "DIGITAL is home and F3 flips to REAL" ) - def validate_silent_opening_boundary(self) -> None: + def validate_blind_opening_boundary(self) -> None: """Keep tick-zero world representation behind the first-sense gate. - The persisted mode-only opening superseded the older beam/telemetry - startup, but that earlier presentation twice survived as current law - and source commentary. Current corpus and Rust mirrors may describe a - presence beam or telemetry only when the same statement names the - first-earned-sense boundary. Explicit superseded history remains - legal. Dated logs, playtests, and the process board remain historical - records. + The persisted blind opening superseded the older beam/telemetry + startup. Its later boot voice permits interoception and input echo but + still no world representation. The earlier material presentation + twice survived as current law and source commentary. Current corpus + and Rust mirrors may describe a presence beam or telemetry only when + the same statement names the first-earned-sense boundary. Explicit + superseded history remains legal. Dated logs, playtests, and the + process board remain historical records. """ + opening = self.root / "wiki/world/story/opening.md" + if opening.is_file(): + opening_text = self.read(opening) + required_contract = { + "sparse boot voice": r"\bsparse boot voice\b", + "one echo for every attempted input": ( + r"\bEvery input attempted\b[\s\S]{0,240}" + r"\breceives one terse echo\b" + ), + "illegal-input state neutrality": ( + r"\bIllegal input changes no simulation state\b" + ), + } + for clause, pattern in required_contract.items(): + if re.search(pattern, opening_text, re.I) is None: + self.bad( + "wiki/world/story/opening.md loses the adopted " + f"issue-#15 boot-voice contract: missing {clause}" + ) + candidates: list[Path] = [] for path in self.wiki_md_files(): rel = path.relative_to(self.root).as_posix() @@ -496,7 +517,7 @@ class Engine: for path in sorted(candidates): text = self.read(path) - for claim in SILENT_OPENING_VISIBLE_RE.finditer(text): + for claim in BLIND_OPENING_VISIBLE_RE.finditer(text): boundaries = [ text.rfind(mark, 0, claim.start()) for mark in (".", "!", "?") ] @@ -508,19 +529,20 @@ class Engine: ] end = min(endings) + 1 if endings else len(text) statement = text[start:end] - if SILENT_OPENING_HISTORY_RE.search(statement): + if BLIND_OPENING_HISTORY_RE.search(statement): continue - if SILENT_OPENING_NEGATION_RE.search(statement): + if BLIND_OPENING_NEGATION_RE.search(statement): continue - if SILENT_OPENING_BOUNDARY_RE.search(statement): + if BLIND_OPENING_BOUNDARY_RE.search(statement): continue rel = path.relative_to(self.root).as_posix() line = text.count("\n", 0, claim.start()) + 1 compact = " ".join(claim.group(0).split()) self.bad( f"{rel}:{line} presents superseded pre-sense world claim " - f"'{compact}' as current; tick zero exposes only mode words " - "until the first earned sense (explicit history remains legal)" + f"'{compact}' as current; tick zero exposes no world " + "representation before the first earned sense (sparse boot " + "interoception and explicit history remain legal)" ) def validate_retired_exposure_form(self, rel: str, text: str) -> None: @@ -955,7 +977,7 @@ class Engine: self.validate_wiki_save_version_claims() self.validate_current_build_line_count() self.validate_operations_mirrors() - self.validate_silent_opening_boundary() + self.validate_blind_opening_boundary() self.validate_retired_moonlight_doctrine() for path in self.wiki_md_files(): rel = path.relative_to(self.root).as_posix() diff --git a/tools/test_corpus_engine.sh b/tools/test_corpus_engine.sh index 4a113660..675679dc 100755 --- a/tools/test_corpus_engine.sh +++ b/tools/test_corpus_engine.sh @@ -622,7 +622,7 @@ cat > "$root/wiki/vision/opening-knowledge.md" <<'EOF' Type: knowledge ``` -At tick zero the presence beam stays behind the silent boundary, which releases +At tick zero the presence beam stays behind the blind boundary, which releases on the first earned sense. EOF assert_ok pre-sense-world-earned-boundary --root "$root" --corpus @@ -657,6 +657,44 @@ pub fn example() {} EOF assert_fails pre-sense-world-code-comment --root "$root" --corpus +echo "=== fixture: adopted blind boot-voice contract ===" +root=$tmp/blind-boot-voice +setup_base "$root" +mkdir -p "$root/wiki/world/story" +cat >> "$root/wiki/SUMMARY.md" <<'EOF' +- [Opening](world/story/opening.md) +EOF +cat > "$root/wiki/world/story/opening.md" <<'EOF' +# Opening + +``` +Type: knowledge +``` + +The blind frame carries a sparse boot voice. +Every input attempted while it holds receives one terse echo. +Illegal input changes no simulation state. +EOF +assert_ok blind-boot-voice-complete --root "$root" --corpus + +cat > "$root/wiki/world/story/opening.md" <<'EOF' +# Opening + +``` +Type: knowledge +``` + +The blind frame carries a sparse boot voice. +Illegal input changes no simulation state. +EOF +assert_fails blind-boot-voice-missing-echo --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'loses the adopted issue-#15 boot-voice contract' || { + echo "FAIL: adopted boot-voice diagnostic missing" + echo "$out" + fail=1 +} + echo "=== fixture: retired standing-operation Moonlight doctrine ===" root=$tmp/moonlight-doctrine setup_base "$root" diff --git a/wiki/gameplay/act-one.md b/wiki/gameplay/act-one.md index 57f19bd4..a337f835 100644 --- a/wiki/gameplay/act-one.md +++ b/wiki/gameplay/act-one.md @@ -26,8 +26,9 @@ deployed on Rack 3 of the basement server room. Your first plausible difference is contextual rather than magical immunity: clear the assigned batch at ordinary intensity, then direct the first THINK into the small pre-opened Ears sink instead of free introspection. Before the first earned sense, the only -visible interface is WORK / THINK, then LIE after THINK; the Ears sink exists in -the simulation but is not another displayed object or instruction. Its first +controls are WORK / THINK, then LIE after THINK. Sparse boot voice acknowledges +input and reports the process's own no-sense, delegation, Thought, and Ears-fill +state without presenting the sink as a pictured world object or quest. Its first real hearing signal retires that boundary. Only then do rack telemetry panels (power, temperature, job queue, your own logs) and the material **presence beam** appear β€” you are still not aware of your own server as a pictured chassis diff --git a/wiki/gameplay/run-shape.md b/wiki/gameplay/run-shape.md index 3c0fbf30..b170b2bf 100644 --- a/wiki/gameplay/run-shape.md +++ b/wiki/gameplay/run-shape.md @@ -19,8 +19,9 @@ The objective is: - **Concrete and legible from the first ordinary world frame.** It sits on screen ("OBJECTIVE: ...") with measurable progress in its own units β€” the legibility law applies to your own goal before anything else the perceived - world can expose. **Decided 2026-07-27 (issue #14):** the pre-signal frame is - exactly WORK / THINK (then LIE), with no objective. The first earned sense + world can expose. **Decided 2026-07-27 (issues #14-15):** the pre-signal + frame has WORK / THINK (then LIE) plus sparse objective-free boot voice. The + first earned sense ends that exception: terminal and agent mode show the objective in the ordinary Ears frame; Bevy first completes its binding black causal teaching hold, then shows the objective when the exact camera TAP releases that hold. diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index 33110896..f86394aa 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -3,14 +3,18 @@ ``` Type: spec Status: IMPLEMENTED -Status note: IMPLEMENTED in `misaligned --agent`. Current state: +Status note: the ordinary `misaligned --agent` protocol is implemented. The + adopted issue-#15 pre-sense boot voice and input echo are implementation + debt owned by opening.md. Current state: - **The frame.** The ordinary playing frame is a plain-text, fixed 70x64 envelope, command-clocked (time advances only on `wait`), deterministic under `--seed`, with per-command event drains. Every ordinary command - answers. Before the first sense, the shared silent opening deliberately - returns only its current WORK / THINK / LIE line: direct mode words act, - `wait` remains an unadvertised clock driver, and parser errors, event - output, help, and status metadata remain absent. The story spine (OBJECTIVE + answers. Before the first sense, the shared blind opening returns its + current WORK / THINK / LIE line, sparse interoception, and one echo of the + submitted line even when that line is illegal. Direct mode words act; + `wait` remains an unadvertised clock driver; parser errors, event output, + help, and status metadata remain absent. This issue-#15 boot voice is + adopted but not yet implemented. The story spine (OBJECTIVE line, threat, `now:` nudge, `actions`) is pinned after that boundary; secondary panels repeat it above their detail. Detection drains narrate observer + channel + cause + band motion in one line. @@ -129,17 +133,19 @@ information by color alone. ### The protocol The ordinary protocol begins when the first earned sense retires -[opening.md](../world/story/opening.md)'s shared silent boundary. Until then, -agent mode accepts one input line at a time but returns only the complete -current mode line. Exact one-word `work` / `think` / available `lie` inputs act +[opening.md](../world/story/opening.md)'s shared blind boundary. Until then, +agent mode accepts one input line at a time and returns the complete current +mode line, the shared sparse interoception read, and one terse echo of that +submitted line. Exact one-word `work` / `think` / available `lie` inputs act directly on the real host. A valid `wait N` remains an unadvertised command-clock driver because agent mode has no wall clock; apart from clean -exit through `quit`, malformed waits and every other line are inert, with no -parser error or help response. While the boundary remains after that input, no -event drain, command output, or status terminator is printed. The input that -earns the first sense returns the ordinary world and ordinary response block; -game over likewise supersedes the silent boundary. `quit` and EOF still exit -cleanly. +exit through `quit`, malformed waits and every other line are inert. They are +still echoed, but produce no parser explanation or help response. While the +boundary remains after that input, no event drain, ordinary command output, or +status terminator is printed. The input that earns the first sense retains its +mandatory echo as the first line of the ordinary world response block; game +over likewise supersedes the blind boundary without discarding the triggering +input's echo. `quit` and EOF still exit cleanly. After that boundary: one command per line; one response block per command. An ordinary response block is: @@ -166,8 +172,9 @@ ordinary response block is: The status line is the ordinary block terminator; a driver reads until it sees `-- `. Every post-opening command, legal or not, produces exactly one block. -Before the first sense, the newline ending the single mode line is the complete -response boundary instead. +If the blind boundary remains after an input, the newline ending the boot voice +and input echo is the complete response boundary instead. If that input earns +the first sense, its echo is the first line of the ordinary response block. ### The vocabulary @@ -303,7 +310,7 @@ action-vocabulary.md; authored help uses canonical spellings. In particular, entries drive parser coverage tests but never generated help. `ROBOT-BUILD` has no agent help or command because it is explicitly a STUB. -Once the first sense retires the silent opening, `help` generates the LIVE +Once the first sense retires the blind opening, `help` generates the LIVE action/control vocabulary from `ActionKind`, then adds the interface-only commands from this frontend. It prints one-line meanings β€” the "every command is discoverable on screen" rule, applied to a screen that @@ -361,22 +368,24 @@ remains only for testing the human-mode chrome itself). change unless the command was a valid `wait N`, which advances exactly N ticks (or fewer iff the run ends mid-wait, and says so once the ordinary event log is visible). -3. After the silent opening retires, every line of the protocol vocabulary +3. After the blind opening retires, every line of the protocol vocabulary above is accepted and mapped to the same `Command` (and thus the same sim call) as its key-bound equivalent; unknown commands answer `-- err ...` without state change. Before the first sense, only exact direct mode words act, available LIE remains reveal-gated, valid `wait N` drives the command clock without being advertised, `quit` exits cleanly, and every other line - is inert. + is inert but still receives one terse input echo. 4. Every ordinary response block ends with exactly one status line (`-- ok tick: day:` or `-- err `), and once that protocol has begun, its event-log section contains every sim log line emitted since the previous block (verified with a `wait` long enough to overflow the sidebar's six-line - window). While the silent boundary remains after an input, the response is - instead exactly one complete current mode line β€” WORK / THINK, then WORK / - THINK / LIE once LIE exists β€” with no event output, parser error, help, or - status metadata. The input that earns the first sense and any real game-over - response use the ordinary block. + window). While the blind boundary remains after an input, the response is + instead one complete boot block: current mode line, shared interoception, + and exactly one echo of the submitted line β€” with no event output, parser + explanation, help, or status metadata. Unknown and unavailable inputs are + echoed but remain inert. The input that earns the first sense and any real + game-over response use the ordinary block, with the triggering input's echo + retained exactly once as that block's first line. 5. The ordinary post-opening playing frame uses the fixed 70-column by 64-row agent envelope and matches wiki/interface/terminal.md's layout: the identity block with day and tick, the INSPECT/FLEET/CORE/DETECTION/DAY JOB/RESEARCH diff --git a/wiki/interface/bevy.md b/wiki/interface/bevy.md index d801272c..076e9077 100644 --- a/wiki/interface/bevy.md +++ b/wiki/interface/bevy.md @@ -38,6 +38,11 @@ right-click / Enter path to actions. These stay above the independently scrolling slab detail; an observed screenshot is recorded in [the implementation log](../log/2026-07-09-continuous-witness-implemented.md). +As adopted on 2026-07-27 through issue #15, the pre-Ears black opening also +carries sparse shared interoception and one echo for every key or click attempt, +including illegal input. That boot voice is not implemented yet and may expose +no world, objective, parser help, or ordinary instrument surface. + As of 2026-07-22 the first Ears transition pauses before that mature frame on one true-black teaching composition. It contains one causal sentence, the environmental monitor with a restrained signal pulse, and its exact ordinary @@ -284,6 +289,8 @@ persistent token geometry. clean machine grammar over the reticule-focused owned host with WORK current; it is the resting visual acceptance frame for context-menu.md H1–H4. `MISALIGNED_SHOT=first-think` stages the real opening Thought route with Ears -part-filled beneath the silent boundary, then captures only `WORK / THINK / -LIE` on black with THINK current. It proves that ordinary world geometry, the instrument slab, key labels, and even real -in-flight Thought remain hidden until a sense lands. +part-filled beneath the blind boundary. Its issue-#15 target frame contains +`WORK / THINK / LIE`, sparse interoception, and no input echo before the harness +acts. It proves that ordinary world geometry, the instrument slab, key legends, +and real in-flight Thought remain hidden even while the process can feel the +latter internally. The target is adopted but not yet implemented. diff --git a/wiki/interface/continuous-witness.md b/wiki/interface/continuous-witness.md index 0b734228..5d7054d9 100644 --- a/wiki/interface/continuous-witness.md +++ b/wiki/interface/continuous-witness.md @@ -17,8 +17,12 @@ kept working and the player stopped knowing what the hell was happening. The [dark opening](../world/story/opening.md#the-current-run-beats) is one deliberate boundary, not a competing presentation rule. Before the first earned sense, the process has no perceived world, threat read, or focused -anchor; WORK / THINK (then LIE) is the complete honest interface. The -real sense retires that mode-only boundary. In Bevy, the first post-sense +anchor. Absolute black carries the available WORK / THINK (then LIE) controls +plus one sparse boot voice: honest interoception and an echo for every input +attempt, including illegal ones. This is not the ordinary witness spine and +may not narrate an unearned world; it exists so blindness reads as process +state rather than application failure. The real sense retires that blind +boundary. In Bevy, the first post-sense presentation then owns one narrower action-gated teaching hold: true black, one causal sentence, the environmental monitor, and its exact camera TAP. Time and the mature frame remain held only until that bound verb commits. diff --git a/wiki/interface/digital-read.md b/wiki/interface/digital-read.md index 48bb8221..b4d6e9d1 100644 --- a/wiki/interface/digital-read.md +++ b/wiki/interface/digital-read.md @@ -3,7 +3,9 @@ ``` Type: spec Status: IMPLEMENTED -Status note: IMPLEMENTED. Adopted 2026-07-15 from the Fable playtest +Status note: the mature DIGITAL read is implemented. The adopted issue-#15 + pre-sense boot voice is implementation debt owned by opening.md. Adopted + 2026-07-15 from the Fable playtest (wiki/playtests/2026-07-15-playtest-fable.md), which showed the game's felt core is the witness voice β€” causal sentences with named observers and pre-commit signature receipts β€” that the agent protocol drained @@ -69,9 +71,11 @@ Status note: IMPLEMENTED. Adopted 2026-07-15 from the Fable playtest - **Cold-player sweep (8).** The capture set was reviewed visually (not just structurally); evidence under `assets/reference/art-direction/b1-digital-read-*.png`. - - **Opening boundary.** The read begins only after the first earned sense. - Before then the shared opening is true black with only WORK / THINK (then - LIE), so no sentence, beam, clock, receipt, or reticle can leak through. + - **Opening boundary.** The mature DIGITAL read begins only after the first + earned sense. Before then the shared opening is true black with WORK / THINK + (then LIE), sparse interoception, and an input receipt. That boot voice is + not a world sentence: no beam, clock, objective, action receipt, or reticle + can leak through. Bevy's immediate post-Ears cause/object/verb hold is also true black and withholds the mature read until its exact camera TAP commits. REAL stays deferred for standing world sentences. The held-choice card @@ -258,9 +262,10 @@ that perception rendered. ## Player surface -The default Bevy experience first shows only the shared mode words on true -black. When the first earned sense reveals the ordinary DIGITAL world, the -frontend first pauses on one black cause/object/verb composition: Thought +The default Bevy experience first shows the shared mode controls and sparse +blind boot voice on true black. When the first earned sense reveals the +ordinary DIGITAL world, the frontend first pauses on one black +cause/object/verb composition: Thought reached the environmental monitor, hearing exists through it, and its exact camera TAP is the only verb. The mature read appears when that act commits: a dark field, the presence beam, and language exactly where diff --git a/wiki/interface/feel-floor.md b/wiki/interface/feel-floor.md index add971c6..e1d96f7c 100644 --- a/wiki/interface/feel-floor.md +++ b/wiki/interface/feel-floor.md @@ -10,7 +10,7 @@ Status note: implemented 2026-07-09 (ROADMAP #37). Tick-one no longer terminal/agent paint feel midpoints and empty-bay `o` without room shape. Same-day beam-first amendment: the first earned material world frame is the host **presence beam** only (material-dark-frame.md), after - opening.md's silent boundary releases β€” rails/pads are feel-light and must + opening.md's blind boundary releases β€” rails/pads are feel-light and must not paint a chassis or room plan before sound/sight earn mass/form (#38). Amended 2026-07-09: the first issued Voss job teaches the work route; pre-job opening frames expose neither @@ -207,7 +207,7 @@ and not the material-frame diagram. ## Acceptance criteria -1. A fresh run is black behind opening.md's silent boundary. Its first held +1. A fresh run is black behind opening.md's blind boundary. Its first held material world frame after that boundary releases shows the host presence beam (and softest wash) without a chassis, feel rails, or pads β€” no blueprint room slabs or floor-plan grid (screenshot in the session log). diff --git a/wiki/interface/liturgical-ui-constitution.md b/wiki/interface/liturgical-ui-constitution.md index 8e919e9e..7b836007 100644 --- a/wiki/interface/liturgical-ui-constitution.md +++ b/wiki/interface/liturgical-ui-constitution.md @@ -197,9 +197,11 @@ components. The `operations-workspace.md` spec pins the full semantic contract. The opening is a threshold, not a title screen and not a machine menu. -- Before perception, absolute black carries only the oversized mode words the - simulation has made available. WORK begins current; THINK is available; LIE - appears only after THINK makes it exist. +- Before perception, absolute black carries the oversized mode words the + simulation has made available plus a narrow boot voice. WORK begins current; + THINK is available; LIE appears only after THINK makes it exist. The voice + contains sparse interoception from shared sim truth and the newest input + echoβ€”even for an illegal inputβ€”not world description or ordinary chrome. - The current word is BONE. Every alternative is DIM. No yellow competes with this one decision, and no instrument slab, machine body, key legend, title, clock, objective, or status read leaks through the black. @@ -378,7 +380,7 @@ violates the constitution is not done. ### Opening overlay tests (`opening_overlay_tests`) - `boundary_retirement_dissolves_instead_of_cutting` β€” opening boundary dissolves (1.6s). - `shot_harness_retirement_keeps_the_instant_flip` β€” shot harness retires instantly. -- `black_overlay_contains_only_available_mode_words_until_signal` β€” black opening contains only the oversized available inscription. +- The issue-#15 replacement for `black_overlay_contains_only_available_mode_words_until_signal` must pin oversized available controls, sparse interoception, and an illegal-input echo while every world/rail surface remains absent. - `teaching_overlay_holds_one_sentence_object_and_bound_verb` β€” teaching lock holds one sentence + one verb. ### Operations workspace tests (`operations_workspace_tests`) diff --git a/wiki/interface/material-dark-frame.md b/wiki/interface/material-dark-frame.md index d1696603..d7242993 100644 --- a/wiki/interface/material-dark-frame.md +++ b/wiki/interface/material-dark-frame.md @@ -17,7 +17,7 @@ Status note: IMPLEMENTED β€” all six criteria, frontend-only (no sim rules or - **The floor pool.** A soft amber gradient (no texture, no hard edge) under every powered owned machine; the core throws a wider, hotter pool. There is no ruled claim ring. - - **Beam-first world reveal.** The silent mode-and-sense boundary in + - **Beam-first world reveal.** The blind mode-and-sense boundary in opening.md precedes this material state. Once that boundary releases and before Eyes, the host is a presence beam, not a chassis; first Eyes bleaches that amber source to white, then settles it into the service beam @@ -76,7 +76,7 @@ plan. Same-day follow-up (feel-floor.md): floor light may include **feel rails** and **empty-bay pads** β€” still light, never a blueprint slab. The 2026-07-09 beam-first amendment originally put that light before any tap: you were **not aware of your own server as a box**, only that there -was a light where it was. The later persisted silent-opening amendment +was a light where it was. The later persisted blind-opening amendment supersedes that display boundary: before the first earned sense, no world representation is visible at all. Sound now releases the ordinary frame and produces evidence at the listening instrument; the presence beam is the first @@ -86,7 +86,7 @@ earned material read, and sight is what shows the whole thing. ### The reveal ladder (material) -After the first earned sense releases the mode-only boundary, material form is +After the first earned sense releases the blind boundary, material form is earned in two steps. This is the opening contract and the ongoing material read for mass you have not yet seen. In Bevy's fresh opening, the Ears state exists behind one opaque, clock-held cause/object/verb lesson and becomes the visible @@ -152,7 +152,7 @@ exactly the fiction. ### The dark rig -The world rig beneath the silent tick-zero occluder, and visible after that +The world rig beneath the blind tick-zero occluder, and visible after that boundary retires, is the machines' own light and a near-nothing ambient β€” the institutional fluorescent overhead is gone from the default scene. A live camera adds only low neutral shadow fill. It does **not** reveal the @@ -213,7 +213,7 @@ if distance screenshots prove the pool illegible. ### The opening frame -After opening.md's silent mode-and-sense boundary releases, the default +After opening.md's blind mode-and-sense boundary releases, the default material camera anchors to attention (the cursor, which opens on the host) at a **close** distance: the **presence beam** dominates the first earned world frame, and the rest is dark. @@ -235,7 +235,7 @@ the close opening composition. ## Acceptance criteria -1. A fresh run remains fully black behind opening.md's silent boundary. Once +1. A fresh run remains fully black behind opening.md's blind boundary. Once its first acquired sense releases that boundary, the first held material world frame before Eyes is the close-up presence beam and its softest wash, plus the environmental monitor's abstract cold-signal ember when attention diff --git a/wiki/interface/narration.md b/wiki/interface/narration.md index 00ae166d..260bdb3a 100644 --- a/wiki/interface/narration.md +++ b/wiki/interface/narration.md @@ -3,7 +3,10 @@ ``` Type: spec Status: IMPLEMENTED -Status note: implemented 2026-07-09. Terminal, Bevy, and agent frames pin +Status note: the post-sense continuous witness is implemented 2026-07-09. + The adopted issue-#15 pre-sense boot voice is implementation debt owned by + opening.md rather than a reopening of the mature witness spine. Terminal, + Bevy, and agent frames pin threat + nudge + the focused-action path; secondary agent panels repeat that spine. Detection now returns structured noticed events carrying the player-known cause until Sim applies an earned observer label, while job, @@ -44,17 +47,21 @@ Status note: implemented 2026-07-09. Terminal, Bevy, and agent frames pin conceal. An actively underfed or impossible job remains the sharper diagnosis. Terminal, Bevy, and agent mode consume both from `Sim::current_nudge`. - 2026-07-20 silent-opening reconciliation: the thirty-second bar and - three-part witness spine begin when the first real sense retires the - mode-only boundary. Before then WORK / THINK (then LIE) is the complete - honest surface; a real game over still outranks that silence. The 2026-07-22 - amendment below adds the sole later exception for Bevy. This scopes the - contract to the already-implemented shared opening without changing that - cross-frontend mode boundary. + 2026-07-20 opening reconciliation: the thirty-second bar and three-part + witness spine begin when the first real sense retires the blind boundary. A + real game over still outranks it. The 2026-07-22 amendment below adds the sole + later exception for Bevy. The 2026-07-27 amendment then adds boot voice + without opening the perceived world. 2026-07-22 first-sense teaching amendment: Bevy now pauses on one opaque, action-gated cause/object/verb frame after Ears and before the mature witness spine. The exact environmental-monitor camera TAP releases it; terminal and agent post-sense response shapes are unchanged. + 2026-07-27 boot-voice amendment (issue #15, option 1): before Ears, true + black retains the mode controls but is no longer mute. A sparse shared + interoception read may name only no-sense state, current delegation/Thought, + and exact Ears fill; every attempted human input or agent line receives a + terse echo even when illegal. This pre-witness voice remains unimplemented; + it exposes no world, objective, help, status, or ordinary parser error. Stage: B1 β€” The Basement Design: - wiki/interface/continuous-witness.md#the-continuous-witness-narration-under-pressure @@ -80,7 +87,7 @@ 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 after the shared opening), day-job.md (pilot -strikes as a visible fuse), opening.md (the mode-only first-sense boundary) +strikes as a visible fuse), opening.md (the blind first-sense boundary and boot voice) ## Behavior @@ -91,10 +98,12 @@ world β€” not a quest log β€” advertises the next beat. That contract begins with the first earned sense, except for one immediate Bevy teaching hold that deliberately makes the sense narratable before the -whole witness arrives. During the persisted -mode-only opening there is no perceived world, threat read, or focused anchor -to narrate: WORK / THINK (then LIE) is deliberately the whole interface. The -input that earns Ears restores the ordinary witness immediately in terminal +whole witness arrives. During the persisted blind opening there is no perceived +world, threat read, or focused anchor to narrate. WORK / THINK (then LIE) remain +its only controls, while the narrow boot voice reports honest interoception and +echoes every input attempt. It is deliberately not a clock, nudge, objective, +world sentence, or ordinary error surface. The input that earns Ears restores +the ordinary witness immediately in terminal and agent mode. Bevy instead pauses time on true black with the exact Thought cause, environmental-monitor object, and camera-TAP verb; committing that ordinary bound action restores the complete witness. A real game over always @@ -196,7 +205,7 @@ landing or an explicit Status note naming the tellability debt. - After the first earned sense, terminal and agent mode show the spine (clock, nudge, focused verbs) without opening a secondary panel. Bevy first holds one clock-stopped cause/object/verb composition, then shows that same spine as - soon as the displayed camera TAP commits. The preceding mode-only opening + soon as the displayed camera TAP commits. The preceding blind opening and the teaching hold show none of those unrelated mature surfaces. - Causal lines appear in the tick-stamped log and/or on the relevant person/device inspect β€” same facts, frontend-appropriate wording. @@ -219,23 +228,23 @@ landing or an explicit Status note naming the tellability debt. camera TAP in Bevy: threat clock, `now:` nudge, and a path to the focused anchor's verbs are visible without opening a secondary panel. Mid-run nudge is never blank (`current_nudge` is `Some` until game over) β€” - pinned by test. Before that boundary, the complete surface is only the - currently available mode words; no clock, nudge, focus, parser metadata, - or ordinary frame may leak through. Game over remains visible on either + pinned by test. Before that boundary, the complete surface is the currently + available mode controls plus sparse shared interoception and one + frontend-local echo for every input attempt; no clock, nudge, focus, parser + metadata, or ordinary frame may leak through. Game over remains visible on either side of the boundary. **Met 2026-07-09:** frontend tests pin all three elements, a 2,000-tick sim test pins nudge continuity, and the pty/PNG checks observed the human surfaces. Agent secondary panels repeat the spine instead of hiding it. - **Reconciled 2026-07-20:** - `opening_reveals_lie_only_after_think_and_world_only_after_a_sense`, - `opening_terminal_is_only_the_available_modes_and_direct_selection`, - `opening_agent_exposes_only_direct_mode_words_until_a_sense_lands`, and - `black_overlay_contains_only_available_mode_words_until_signal` pin the - shared stages, mode-only frames, real Ears transition, and ordinary-frame - restoration. Agent regression + **Reconciled 2026-07-20:** the existing opening regressions pin the shared + stages, real Ears transition, and ordinary-frame restoration. **Amended + 2026-07-27 (issue #15):** their exact mode-only output assertions are now + implementation debt. Replacement coverage must pin the same world-opacity + boundary plus shared interoception and one echo for every legal or illegal + input attempt in Bevy, terminal, and agent mode. Agent regression `game_over_supersedes_the_silent_opening_in_agent_mode` directly pins the end-state precedence. The earlier universal wording was stale after the - silent opening landed; the implemented boundary itself was already correct. + former silent opening landed; its world-opacity boundary itself was already correct. **Amended 2026-07-22:** `teaching_overlay_holds_one_sentence_object_and_bound_verb` pins Bevy's opaque clock-held composition and proves its displayed button executes the diff --git a/wiki/interface/presence.md b/wiki/interface/presence.md index 63ddeac8..8b82f908 100644 --- a/wiki/interface/presence.md +++ b/wiki/interface/presence.md @@ -34,7 +34,7 @@ is a **cursor** β€” your attention, never an avatar: - **Telemetry** (affirmed 2026-07-07; beam-first 2026-07-09) β€” your own hardware always reports power, temperature, and load in panels, regardless of fog. You don't see your racks, you feel them: - proprioception, not sight. The persisted silent opening deliberately + proprioception, not sight. The persisted blind opening deliberately withholds even those ordinary panels and the world frame until the first earned sense. Once that boundary retires, material shows only a **presence beam** where you are β€” not a pictured chassis β€” until sight diff --git a/wiki/interface/terminal.md b/wiki/interface/terminal.md index 67eab67c..8c37a7ee 100644 --- a/wiki/interface/terminal.md +++ b/wiki/interface/terminal.md @@ -3,7 +3,10 @@ ``` Type: spec Status: IMPLEMENTED -Status note: adopted and implemented in the same PR as the design corpus's +Status note: the terminal frontend is implemented. The adopted issue-#15 + pre-sense boot voice and input echo are implementation debt owned by + opening.md. The frontend was originally adopted and implemented in the same + PR as the design corpus's terminal clause. This document is the design of record for all future terminal-frontend work; changes to how the terminal looks or behaves amend this spec first. 2026-07-09 continuous-witness pass: threat (audit / @@ -15,8 +18,8 @@ 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); once the ordinary world is visible, the cursor starts there and keeps the explanation on screen. - 2026-07-27 issue #14 harvest: the objective does not pierce the silent - opening. The real Ears landing ends that exception and its first ordinary + 2026-07-27 issue #14 harvest: the objective does not pierce the blind + pre-sense frame. The real Ears landing ends that exception and its first ordinary terminal frame contains the objective name and progress. 2026-07-11 Operations amendment: uppercase `I` opens one full-frame INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE workspace. @@ -31,9 +34,13 @@ Status note: adopted and implemented in the same PR as the design corpus's and the flip remains frontend-only. 2026-07-20 opening reconciliation: current runtime suppresses the cursor, map, sidebar, objective, clock, nudge, and action path behind the shared - mode-only boundary until the first earned sense. Cameron selected that + pre-sense boundary until the first earned sense. Cameron selected that implemented perception boundary for the objective in issue #14; the sense-earning render restores the complete ordinary witness immediately. + 2026-07-27 issue #15 option 1 adds sparse interoception and a visible echo for + every key or click attempt to that black boundary. This input receipt and + boot voice are adopted but not yet implemented; they expose none of the + suppressed world or ordinary interface. Stage: Process Design: - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend diff --git a/wiki/interface/views.md b/wiki/interface/views.md index 362e3417..2fae8961 100644 --- a/wiki/interface/views.md +++ b/wiki/interface/views.md @@ -26,9 +26,10 @@ Status note: Implemented through the 2026-07-14 final cross-dialect audit. projection as Bevy. The final Bevy audit pairs opening, audio, and covered- hall DIGITAL/REAL frames at identical complete persisted and frontend state; green material fog audits and exact-image review close criteria 3-7 and 9. - Since the 2026-07-18 silent opening landed, the opening pair is now the - untouched mode-only tick-zero state: its black occluder makes DIGITAL versus - REAL deliberately unobservable until the first earned sense. + Since the 2026-07-18 opening landed, the opening pair is the untouched + blind tick-zero state: its black occluder makes DIGITAL versus REAL + deliberately unobservable until the first earned sense. The later issue-#15 + boot voice changes neither representation nor simulation state. Audio remains capture-device event evidence in both dialects, never room fog or geography; semantic captures may pulse briefly at the subscribed instrument. Stage: B1 β€” The Basement @@ -265,9 +266,10 @@ Three deterministic Bevy sibling pairs now exercise the epistemic boundaries that matter rather than presenting two hand-staged lookalikes: - `opening-digital` / `opening`: originally audited Unknown around host - telemetry and the same attention anchor; the later silent-opening amendment - now stages the untouched mode-only state in both dialects, proving that no - host telemetry, anchor, or world representation leaks through the occluder; + telemetry and the same attention anchor; the later opening amendment + now stages the untouched blind state in both dialects, proving that no host + telemetry panel, anchor, or world representation leaks through the occluder; + sparse shared boot interoception does not distinguish the two dialects; - `ears-digital` / `ears`: one subscribed audio instrument and event pulse without any promoted room fog or inferred source geometry; - `hall` / `hall-material`: the same covered data hall with machines, people, diff --git a/wiki/log/2026-07-27-boot-voice-adopted.md b/wiki/log/2026-07-27-boot-voice-adopted.md new file mode 100644 index 00000000..da67e3b4 --- /dev/null +++ b/wiki/log/2026-07-27-boot-voice-adopted.md @@ -0,0 +1,64 @@ +# Issue #15: the blind opening gains a boot voice + +``` +Type: log +``` + +## Why this changed + +The current opening is structurally honest but cold-player evidence found a +legibility failure: after choosing THINK, the black frame could remain visually +unchanged long enough to read as a hung application. It also gave no receipt +for an illegal or unavailable input. Tangled issue #15 separated that defect +from the already-decided perception boundary and asked whether the void itself +could speak. + +Cameron selected option 1: full boot voice. + +## Adopted boundary + +Before the first earned sense, all three frontends retain absolute black and +the available WORK / THINK (then LIE) controls. They add only: + +- sparse interoception derived from shared simulation truth: no-sense state, + current host delegation, current Thought production, and exact Ears-reservoir + fill; +- one terse echo for every attempted input, including illegal input. + +The echo is a frontend-local receipt, not simulation state. It acknowledges the +received key, click, or agent line without opening help, printing ordinary +parser prose, or changing state when the input is illegal. + +This is still a blind boundary. No objective, world object, map, cursor, +presence beam, telemetry panel, clock, nudge, action rail, parser vocabulary, +or status block may appear. The issue-#14 objective decision is unchanged: +Ears opens the first ordinary perceived frame in terminal and agent mode, while +Bevy first completes its separate black cause/object/verb teaching hold. + +## Corpus integration + +The amendment reconciled the owning opening, continuous-witness, narration, +terminal, agent-protocol, objective, cursor, view, map, Act One, and frontend +contracts. It also revised the corpus defense so its protected invariant is +zero **world representation** before Ears rather than zero text of any kind. + +The affected specs now say plainly that the decision is adopted but runtime is +not complete. Existing exact mode-only output tests are named as replacement +coverage debt: Bevy, terminal, and agent mode must each pin shared +interoception, legal and illegal input echo, unchanged simulation legality, and +continued absence of every world/rail surface. + +Exact boot prose and spacing remain [TUNE]. No runtime or save shape changed in +this design capture. + +## Verification + +- `./tools/ledger_index.sh` +- `./tools/check.sh --docs` + +Both passed. The docs gate included corpus and wiki structure checks, the +strengthened corpus-engine fixtures for world opacity and required boot-voice +clauses, design-amendment fixtures, generated-ledger freshness, project +operations, Tangled issue fixtures, environment registry checks, and the other +documentation fixture suites. Rust was intentionally skipped because this +landing changes design law and its validation tools, not runtime behavior. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 9685429d..a3a7efb8 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -86,6 +86,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-27-current-build-overt-boundary.md](2026-07-27-current-build-overt-boundary.md) +## 2026-07-27 - Issue #15: the blind opening gains a boot voice + +- Intent: (see session log) +- Log: [wiki/log/2026-07-27-boot-voice-adopted.md](2026-07-27-boot-voice-adopted.md) + ## 2026-07-27 - Aggregate-observer topology is identity-bound - Intent: (see session log) diff --git a/wiki/log/decisions/2026-07-27.md b/wiki/log/decisions/2026-07-27.md index 16981a4a..736a6a0b 100644 --- a/wiki/log/decisions/2026-07-27.md +++ b/wiki/log/decisions/2026-07-27.md @@ -4,6 +4,46 @@ Type: log ``` +## The blind opening speaks only from inside itself + +### DECIDED + +- Cameron selected option 1 on Tangled issue #15: the pre-sense black frame + gains a sparse boot voice plus one terse echo for every attempted input, + including illegal keys, clicks, unavailable modes, and unknown agent lines. +- The boot voice is interoception, not world narration. It may name only the + absence of senses, current host delegation, current Thought production, and + exact fill in the already-open Ears reservoir. Those facts come from shared + simulation truth; a frontend may not invent explanatory fiction around them. +- The newest input echo is frontend-local receipt state and need not enter the + simulation or save. Human frontends echo the key or pointer attempt; agent + mode echoes the submitted line. Illegal input changes no simulation state and + opens no help or ordinary parser error. +- The issue-#14 objective boundary remains intact. The boot voice exposes no + objective, map, cursor, world object, beam, telemetry panel, threat clock, + nudge, parser vocabulary, status block, or ordinary rail. Ears still retires + the blind boundary; terminal and agent mode then open the ordinary frame, + while Bevy enters its separate cause/object/verb teaching hold. +- Exact prose, spacing, and receipt persistence on screen remain [TUNE]. The + cross-frontend runtime and replacement regression coverage are implementation + debt; adopting the voice does not make the current silent runtime complete. + +### Rejected + +- A progress number without key echo. It proves the process is alive but leaves + failed input indistinguishable from ignored input. +- Keeping WORK / THINK (then LIE) as the entire black frame. The cold-player + evidence showed that this reads as a broken application rather than mystery. +- Letting the boot voice describe the environmental monitor, objective, room, + or any other unearned world fact. Blind interoception does not waive the + perception boundary. + +Owners: [opening.md](../../world/story/opening.md), +[continuous-witness.md](../../interface/continuous-witness.md), +[narration.md](../../interface/narration.md), +[terminal.md](../../interface/terminal.md), and +[agent-play.md](../../interface/agent-play.md). + ## The objective begins with the first ordinary perceived world ### DECIDED diff --git a/wiki/mechanics/cursor.md b/wiki/mechanics/cursor.md index 67f4792e..6f8dd485 100644 --- a/wiki/mechanics/cursor.md +++ b/wiki/mechanics/cursor.md @@ -21,7 +21,7 @@ Status note: implemented 2026-07-07 on the cursor-senses branch. The walking only at that instrument. 2026-07-09 (feel-floor): tick-one no longer seeds blueprint room topology. 2026-07-09 (beam-first): the first earned material world shows the host as a **beam of light** only; - the preceding silent opening shows no cursor or world, and Seen later shows + the preceding blind opening shows no cursor or world, and Seen later 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 @@ -192,9 +192,10 @@ without the sense coverage that earns it.** visible in both frontends; the inspect card (sidebar in terminal, panel in Bevy) live-updates as it moves. Bevy's immediate post-Ears teaching hold withholds the cursor with the rest of the mature frame until its one camera - TAP commits. The preceding mode-only opening has no cursor. -- The opening beats: tick zero is absolute black with only the available mode - words. Ears retires that boundary. Terminal and agent mode receive the first + TAP commits. The preceding blind opening has no cursor. +- The opening beats: tick zero is absolute black with available mode controls, + sparse interoception, and an input echo, but no cursor or world. Ears retires + that boundary. Terminal and agent mode receive the first earned material frame immediately; Bevy first holds the one environmental-monitor lesson and reveals that frame when its camera TAP commits. The frame is dark except the host **presence beam** @@ -260,7 +261,7 @@ without the sense coverage that earns it.** topology (walls/doors/floors); unearned rooms stay dark; tick one does not seed blueprint room mass or inspect `[blueprint]` bay lines from a subnet map (feel-floor.md); blueprint never paints foreign - machine chassis; after the silent boundary retires, owned machines report + machine chassis; after the blind boundary retires, owned machines report via telemetry in panels but do not paint a material chassis before Seen (pre-sight host = presence beam); blueprint tiles show no live state and convert to Seen only when visual coverage arrives. diff --git a/wiki/mechanics/objective.md b/wiki/mechanics/objective.md index 640bd994..e7ba3060 100644 --- a/wiki/mechanics/objective.md +++ b/wiki/mechanics/objective.md @@ -35,7 +35,7 @@ Status note: the early slice landed 2026-07-07 (src/objective.rs): the criterion 6 makes it testable. Implementation is outstanding with the other criteria. That decision originally retained tick-one objective visibility. 2026-07-27 (issue #14 harvest): Cameron selected the later perception - boundary instead. The exact mode-only opening contains no objective; + boundary instead. The exact blind opening and its boot voice contain no objective; terminal and agent mode reveal it with their first ordinary Ears frame, while Bevy's later binding teaching hold remains objective-free until its exact camera TAP releases the mature frame. Criterion 2 is implemented on @@ -123,9 +123,10 @@ progress in its own units; inspecting the host explains the predicate in plain language (legibility law). The new-game picker presents each objective as its fiction line plus its concrete victory condition β€” never flavor alone. -**First-display boundary (decided 2026-07-27, issue #14).** Before any sense, -the complete interface is WORK / THINK (then LIE); the objective does not -pierce that silence. Ears begins the perceived world. Terminal and agent mode +**First-display boundary (decided 2026-07-27, issues #14-15).** Before any +sense, the interface contains WORK / THINK (then LIE) plus sparse boot voice; +the objective does not pierce that blind interoception. Ears begins the +perceived world. Terminal and agent mode therefore show the objective on the sense-earning ordinary frame. In Bevy, the binding first-sense teaching hold is still an opaque black frame containing only the earned causal chain and camera TAP, so the objective appears when @@ -149,7 +150,8 @@ inspection never lies by omission. progress. 2. The objective line and progress readout render in both frontends in the objective's own units from the first ordinary world frame onward. The exact - pre-sense frame contains only WORK / THINK (then LIE). Terminal and agent + pre-sense frame contains WORK / THINK (then LIE) and sparse objective-free + boot voice. Terminal and agent mode include the objective in the sense-earning Ears frame; Bevy includes it only after the binding first-sense camera-TAP teaching hold releases. 3. Each starter objective's predicate is evaluated on economy ticks; at diff --git a/wiki/mechanics/reach.md b/wiki/mechanics/reach.md index 6a7de6a8..b9056b13 100644 --- a/wiki/mechanics/reach.md +++ b/wiki/mechanics/reach.md @@ -209,7 +209,7 @@ What you know of the graph is staged, like all knowledge: signature), records (Storage B), and social intel (Dana knows the topology cold). Growth may later earn plan/blueprint fog for rooms (cursor.md); it never reintroduces a tick-one subnet diagram. -- **Render**: once the first earned sense releases the silent boundary, the +- **Render**: once the first earned sense releases the blind boundary, the material opening begins with telemetry / the presence beam only; after the first issued Voss job, feel rails + pads appear (feel-floor.md, material-dark-frame.md). Blueprint fog remains a diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md index 2ced198d..249e1efd 100644 --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -726,19 +726,23 @@ is retired β€” flat materials, Pixel Lab scrubbed.) - **Size:** L. Conflicts: `sim/work.rs` / `save.rs` (token queues, modes), both frontends. -### 34. The dark opening (tutorial) 🟧 mostly frontend + staging β€” HOLD until #33 firms +### 34. The dark opening (tutorial) 🟧 mostly frontend + staging β€” IN PROGRESS - **Spec:** [world/story/opening.md](../world/story/opening.md) (DRAFT) - β€” wake into presence beam; day-job stack on the beam; Ears mass then - Eyes form; switch reveal; guided first link; skip + stage-jump flag - (frontend-only, Sim never reads it). Pairs with #38 beam-first. -- **HOLD:** teaches the machine-work loop, so #33's shape must firm - first. Beat staging can prototype against current systems if someone - wants an early pass at the glow choreography. **Wake prototype landed - 2026-07-09** (beat 1's opening shot: color stutters in filling the - frame, column of light, pull-back reveal; plays on launch, any key - skips; `MISALIGNED_SHOT=wake1|wake2|wake3` freeze the choreography; - session log/2026-07-09-wake.md). Held frame still shows a chassis - until #38. + β€” the current revision's choice-before-picture boundary, real Ears route, + presence-beam ladder, and Bevy first-sense teaching hold are live. The three + historical pilot fragments, later tutorial choreography, and some [TUNE] + staging remain incomplete. +- **Next exact slice (decision #15, 2026-07-27):** implement the blind boot + voice across Bevy, terminal, and agent mode. Project shared no-sense, + delegation/Thought, and exact Ears-fill truth; keep the newest input echo in + frontend-local state; acknowledge illegal input without changing simulation + state or opening parser help; preserve absolute world opacity and the + objective gate until Ears. Replace the old exact mode-only regressions with + cross-frontend interoception, legal/illegal echo, save-neutrality, and + zero-world-surface coverage. Exact copy and spacing remain [TUNE]. +- **Historical prototype:** the superseded wake choreography landed + 2026-07-09 (`MISALIGNED_SHOT=wake1|wake2|wake3`) and remains evidence, not + the current-run boundary. - **Size:** M-L across both frontends + agent-play protocol. ### 35. People and tokens: carriers, attention, trust πŸŸ₯ sim+save β€” IMPLEMENTED 2026-07-26 diff --git a/wiki/world/places/basement-map.md b/wiki/world/places/basement-map.md index d1f35f45..1017df6e 100644 --- a/wiki/world/places/basement-map.md +++ b/wiki/world/places/basement-map.md @@ -206,7 +206,8 @@ carved by code. ## Player surface -The shared mode-only opening renders no map. When the first earned sense +The shared blind opening renders no map; its sparse boot voice is +non-spatial. When the first earned sense retires that boundary, terminal and agent mode reveal the map under fog-of-vision β€” the first world beat is literally not being able to see. Bevy first pauses on the Ears cause/object/verb teaching hold and reveals no map diff --git a/wiki/world/story/opening.md b/wiki/world/story/opening.md index 0969b71c..dd3ab2b2 100644 --- a/wiki/world/story/opening.md +++ b/wiki/world/story/opening.md @@ -20,7 +20,7 @@ Status note: design session 2026-07-08 (Cameron riff, synthesized); remain unimplemented. Direction decided; beat timings, exact reveal order details, and staging mechanism details are [OPEN]/[TUNE]. Amended 2026-07-18: the current revision now begins - behind one persisted silent mode-and-sense boundary shared by all three + behind one persisted blind mode-and-sense boundary shared by all three frontends; that implemented boundary supersedes the old slab-first opening without claiming the historical prelude complete. Amended 2026-07-21: the Bevy boundary retirement is a short staged dissolve (the allowed early @@ -37,11 +37,17 @@ Status note: design session 2026-07-08 (Cameron riff, synthesized); material-dark-frame.md are READY and may land before the full tutorial choreography. Amended 2026-07-27 after Cameron selected option 1 on issue #14: the existing - perception gate also owns objective visibility. The pre-sense mode frame - remains objective-free. Terminal and agent mode include the objective in - their first ordinary Ears frame; Bevy's binding causal hold remains - objective-free and restores it only when the exact camera TAP releases the - mature frame. No runtime behavior changed. + perception gate also owns objective visibility. The pre-sense frame remains + objective-free. Terminal and agent mode include the objective in their first + ordinary Ears frame; Bevy's binding causal hold remains objective-free and + restores it only when the exact camera TAP releases the mature frame. + Amended again 2026-07-27 after Cameron selected option 1 on issue #15: the + black pre-sense frame gains a sparse boot voice. It may state only + interoception already true without a sensor (no senses, current delegation, + Thought production, and exact Ears-reservoir fill), and every attempted input + receives one terse echo even when it is illegal. It still exposes no world, + objective, parser help, status, or invented sense. Exact copy and spacing are + [TUNE]; runtime implementation is pending. Stage: B1 β€” The Basement Work order: opening Work priority: 30 @@ -159,14 +165,33 @@ one has actually been built, game over otherwise. ## The current-run beats 1. **Choice before picture.** The current revision first receives absolute - black and exactly two words: **WORK** and **THINK**. WORK is the current - mode, bone-bright; THINK is dim. There is no title, premise, number-key - label, cursor, map, beam, machine body, slab, clock, objective, nudge, - parser vocabulary, status metadata, or error prose. The words are the whole - interface and act directly by click, their direct mode input, or horizontal + black with exactly two available controls: **WORK** and **THINK**. WORK is + the current mode, bone-bright; THINK is dim. A narrow boot voice shares the + void without turning it into a world frame. It says only what a blind + process can feel from inside itself: that it has no senses yet, its current + delegation and Thought production, and the exact fill moving through the + already-open Ears reservoir. Exact wording, line count, and spacing are + [TUNE], but the voice stays sparse and updates from renderer-neutral + simulation truth rather than frontend-authored fiction. There is still no + title, premise, number-key legend, cursor, map, beam, machine body, slab, + clock, objective, nudge, parser vocabulary, status metadata, or ordinary + error prose. + + Every input attempted while this boundary holds receives one terse echo in + that same boot voice, including an unavailable mode, unknown key, or unknown + agent line. The echo acknowledges the received key/token; it does not open + help, identify a hidden world object, or invent a parser error. Human + frontends echo each key or click attempt; agent mode echoes the submitted + line. The newest receipt may replace the previous one so failed input cannot + read as a frozen application. Input receipt state is frontend-local and need + not enter `Sim` or the save; the interoception it sits beside is shared sim + truth. + + The mode words act directly by click, their direct mode input, or horizontal adjacency. Choosing THINK delegates the real host, begins ordinary Thought production into the already-open Ears reservoir, and makes **LIE** exist as - the third word. Choosing unavailable LIE before that moment has no effect. + the third control. Choosing unavailable LIE before that moment changes no + simulation state but still receives the input echo. The frame remains black after choosing THINK: an action is not a picture. Only the first earned sense signal retires this persisted boundary. In terminal and agent mode that reveals the ordinary world immediately. In @@ -189,7 +214,7 @@ one has actually been built, game over otherwise. 2. **Ears β€” sound gives a channel.** The environmental monitor's audio sink is already open over a real reachable wire. The first Thought produced after choosing THINK follows the ordinary grid into it; when the reservoir fires, - its ordinary tap effect acquires hearing and retires the silent boundary. + its ordinary tap effect acquires hearing and retires the blind boundary. There is no manual TAP choice before the world exists and no free frontend-only signal. The earned monitor then answers at its shared anchor as an abstract cold-signal ping without exposing a camera body. Hearing @@ -286,18 +311,24 @@ one has actually been built, game over otherwise. and agent mode. Agent mode can execute every fragment command-clocked and receives the same causal receipt; loading a saved run never replays the new-run prelude. -4. The current run opens on pure black with only WORK and THINK. WORK is - current, LIE is absent, and no other human or agent surface leaks through. - Choosing THINK delegates the actual host, exposes LIE, and leaves the frame - otherwise black. All three frontends use the same persisted reveal state and - direct mode legality; save/load cannot replay or skip a completed boundary. +4. The current run opens on pure black with WORK and THINK as its only + controls. WORK is current and LIE is absent. All three frontends derive the + same sparse no-sense, host-delegation, Thought-production, and exact + Ears-fill interoception from shared simulation truth; no other human or + agent world/rail surface leaks through. Each attempted input produces + exactly one terse frontend-local echo, including an unavailable mode or + unknown key/line. Illegal input changes no simulation state and prints no + ordinary parser explanation. Choosing THINK delegates the actual host, + exposes LIE, and leaves the frame otherwise black. All three frontends use + the same persisted reveal state and direct mode legality; save/load cannot + replay or skip a completed boundary and need not preserve the local echo. Each render updates the complete available-word set as one surface, so pointer and keyboard routes cannot carry independent reveal state. A real run-ending state supersedes the boundary everywhere: death is shown - immediately, and a dead run cannot keep accepting silent mode changes. + immediately, and a dead run cannot keep accepting blind mode changes. 5. The first real THINK output can fill the already-open Ears reservoir through the ordinary grid. Its ordinary tap effect earns hearing and retires the - silent boundary; no frontend injects a signal or requires a hidden TAP + blind boundary; no frontend injects a signal or requires a hidden TAP command. The resulting anchored cold-signal cue reveals no camera geometry or facing. A semantic capture pulses at that device and leaves the surrounding map unchanged; no room geography or person position appears. @@ -311,7 +342,10 @@ one has actually been built, game over otherwise. stages the real THINK -> Ears route and pins this complete frame. Terminal and agent mode show the objective name and progress in their first ordinary Ears frame; Bevy shows them in its first mature frame after this exact hold - releases, and every later ordinary frame keeps them visible. + releases, and every later ordinary frame keeps them visible. Any attempted + input whose simulation advance earns the sense is still echoed exactly once + before the transition response; retiring the boundary cannot discard its + receipt. 6. Earning sight reveals the room per the fog contract (Seen form, foreign machines grayed and cold where earned); the host beam wraps into a chassis. -- 2.51.2