diff --git a/tools/corpus_engine.py b/tools/corpus_engine.py index 28fedbf1..f26ccf9f 100755 --- a/tools/corpus_engine.py +++ b/tools/corpus_engine.py @@ -40,6 +40,17 @@ RETIRED_RUNTIME_HISTORY_RE = re.compile( r"histor(?:y|ical)|migrat(?:e|ed|es|ing|ion)|no longer|removed)\b", re.I, ) +RETIRED_MATERIAL_DEFAULT_RE = re.compile( + r"\bmaterial(?:\s+(?:render|dialect|view))?\s+is\s+(?:the\s+)?" + r"(?:Bevy(?:'s)?\s+)?(?:opening\s+)?default(?![- ]quality)\b|" + r"\bF3\s+flips?\s+(?:back\s+)?to\s+(?:the\s+)?(?:flat\s+)?sensorium\b", + re.I, +) +RETIRED_MATERIAL_DEFAULT_HISTORY_RE = re.compile( + r"\b(?:former|previous(?:ly)?|retir(?:ed|ement)|supersed(?:e|ed|es|ing)|" + r"histor(?:y|ical)|until|served|staging|no longer)\b", + re.I, +) BINDING_DOORWAY_RE = re.compile( r"^Type: (law|spec)$|^Status:|^## Decisions log|^## Acceptance criteria", re.M, @@ -289,6 +300,22 @@ class Engine: f"'{symbol.group(0)}'" ) + def validate_retired_material_default(self, rel: str, text: str) -> None: + paragraphs = re.finditer( + r"(?:^|\n[ \t]*\n)(.*?)(?=\n[ \t]*\n|\Z)", text, re.S + ) + for paragraph in paragraphs: + body = paragraph.group(1) + claim = RETIRED_MATERIAL_DEFAULT_RE.search(body) + if claim is None or RETIRED_MATERIAL_DEFAULT_HISTORY_RE.search(body): + continue + line = text.count("\n", 0, paragraph.start(1) + claim.start()) + 1 + self.bad( + f"{rel}:{line} contains superseded material-first startup claim " + f"'{claim.group(0)}' without explicit historical context; " + "DIGITAL is home and F3 flips to REAL" + ) + def run_corpus(self) -> int: for path in self.wiki_md_files(): rel = path.relative_to(self.root).as_posix() @@ -390,11 +417,12 @@ class Engine: text = self.read(p) except OSError: continue + try: + rel = p.relative_to(self.root).as_posix() + except ValueError: + rel = str(p) + self.validate_retired_material_default(rel, text) if RETIRED_RE.search(text): - try: - rel = p.relative_to(self.root).as_posix() - except ValueError: - rel = str(p) self.bad( f"{rel} contains retired single-file-authority language" ) diff --git a/tools/test_corpus_engine.sh b/tools/test_corpus_engine.sh index 24b96543..b46ce697 100755 --- a/tools/test_corpus_engine.sh +++ b/tools/test_corpus_engine.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash # Fixture tests for tools/corpus_engine.py (agent-scale slice E). # Covers page reachability, link/anchor integrity, exact metadata, doorway -# bounds, retired authority wording, dependencies, and generated-page owners. +# bounds, retired authority/startup wording, dependencies, and generated-page +# owners. set -euo pipefail cd "$(dirname "$0")/.." || exit 1 @@ -346,6 +347,41 @@ echo "$out" | grep -q 'retired single-file-authority language' || { fail=1 } +echo "=== fixture: superseded material-first startup claim ===" +root=$tmp/material-first-startup +setup_base "$root" +cat >> "$root/wiki/SUMMARY.md" <<'EOF' +- [View knowledge](process/view-knowledge.md) +EOF +cat > "$root/wiki/process/view-knowledge.md" <<'EOF' +# View knowledge + +``` +Type: knowledge +``` + +The material render is the opening default; F3 flips to the sensorium. +EOF +assert_fails material-first-startup --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q 'superseded material-first startup claim' || { + echo "FAIL: material-first startup diagnostic missing" + echo "$out" + fail=1 +} + +cat > "$root/wiki/process/view-knowledge.md" <<'EOF' +# View knowledge + +``` +Type: knowledge +``` + +The superseded staging said the material render is the opening default and F3 +flips to the sensorium. This is historical context only; DIGITAL is home now. +EOF +assert_ok material-first-history --root "$root" --corpus + echo "=== fixture: retired live-runtime Rust symbol ===" root=$tmp/retired-runtime-rust setup_base "$root" diff --git a/wiki/log/2026-07-13-roadmap-digital-home-reconciliation.md b/wiki/log/2026-07-13-roadmap-digital-home-reconciliation.md new file mode 100644 index 00000000..f3896221 --- /dev/null +++ b/wiki/log/2026-07-13-roadmap-digital-home-reconciliation.md @@ -0,0 +1,47 @@ +# 2026-07-13 - ROADMAP digital-home reconciliation + +``` +Type: log +``` + +## Intent + +Consume the tick ledger's queued contradiction in historical work order 27 +without rewriting the implementation history it records. The ROADMAP is +current-state knowledge: its completed-work prose must distinguish the REAL +dialect's production quality from the frontend's current opening mode. + +## Finding + +- Work order 27 still said the material dialect was Bevy's default physical + view and that F3 flipped to the sensorium. +- The binding [views spec](../interface/views.md) instead makes DIGITAL home in + both fresh frontends. The [material-render spec](../interface/material-render.md) + records the exact transition: REAL was the opening default from 2026-07-08 + until views criterion 1 superseded that staging on 2026-07-11. +- Runtime agrees with the current contract: terminal `ViewMode::default` and + Bevy `RenderMode::default` are DIGITAL, and F3 flips to REAL and back without + entering simulation or save state. + +## Changed + +- Renamed the completed work-order heading to "default-quality REAL dialect" + so "default" qualifies production quality rather than startup state. +- Preserved the historical landing date and added the supersession timeline: + REAL served as the opening default only until DIGITAL-home criterion 1 + landed. +- Promoted this recurring, mechanically recognizable stale-claim class into + `corpus_engine.py`. Active corpus and repository doorway pages now reject + material-first startup assertions unless the paragraph explicitly marks + them as superseded history; dated logs remain untouched. +- Consumed the queued finding and recorded this focused ROADMAP coverage row. + +No runtime, save, gameplay spec, or historical log changed. The process law +now owns the recurrence defense. + +## Verification + +- Re-read `views.md`, `bevy-digital-real-canvas.md`, and + `material-render.md` against both frontend defaults and F3 routing. +- `tools/test_corpus_engine.sh` +- `./tools/check.sh --docs` diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 938199c8..902c66a1 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -11,6 +11,11 @@ add or amend a session log, then re-run the generator. +## 2026-07-13 - ROADMAP digital-home reconciliation + +- Intent: Consume the tick ledger's queued contradiction in historical work order 27 without rewriting the implementation history it records. The ROADMAP is current-state knowledge: its completed-work prose must distinguish the REAL dialect's production quality from the frontend's curre... +- Log: [wiki/log/2026-07-13-roadmap-digital-home-reconciliation.md](2026-07-13-roadmap-digital-home-reconciliation.md) + ## 2026-07-13 - Persona creation returns to PERSONAS - Intent: (see session log) diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md index 045dcdfc..9c936bb5 100644 --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -170,10 +170,12 @@ is retired — flat materials, Pixel Lab scrubbed.) the agent-mode actions verb, rail cleanup. Run ./tools/check.sh, land on main, set the spec Status." -### 27. Material render to default 🟩 isolated (src/bin/bevy.rs + assets) — DONE 2026-07-08 +### 27. Material render to default-quality REAL dialect 🟩 isolated (src/bin/bevy.rs + assets) — DONE 2026-07-08 - **Spec:** [material-render.md](../interface/material-render.md) - (IMPLEMENTED) — material is the default Bevy physical view; F3 flips - to the sensorium. + (IMPLEMENTED) — material is Bevy's default-quality REAL physical dialect. + It served as the opening default from 2026-07-08 until views.md criterion 1 + superseded that staging on 2026-07-11; fresh frontends now open DIGITAL and + F3 flips to REAL and back. - Debts paid (wiki/log/2026-07-08-material-render-default.md): fog-gated south-face cutaways (picked over steeper pitch by screenshot comparison), dedicated top caps, b1 palette sweep diff --git a/wiki/process/meta.md b/wiki/process/meta.md index d0413e42..a37cd9a5 100644 --- a/wiki/process/meta.md +++ b/wiki/process/meta.md @@ -276,3 +276,8 @@ structure. 11. Every non-IMPLEMENTED spec carries valid work-order metadata; current ROADMAP dispatch status is generated from those owning fields and checked for freshness. +12. Mechanically recurring superseded current-state claims are promoted into + the corpus gate. In particular, active wiki and repository doorway pages + cannot restore material-first startup wording: DIGITAL is home and F3 + flips to REAL. Explicitly marked historical context and dated logs remain + legal. diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 2cfd4600..0b6100ba 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/process/ROADMAP.md` (work order 27) | 2026-07-13 | finding | [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/mechanics/personas.md` | 2026-07-13 | clean | code matches: archetypes (Research, Operations, Security) load through one schema, named instances persist instance id through execution and save/load, identity-local states are stored per `(counterparty Agent, persona instance)` pair separate from process-level relationship, contradictions/correlations and grants/expectations are fully implemented, retire/burn lifecycle handles resource revocation/reviving, and pre-v28 saves migrate social/Moonlight into distinct instances. | | `wiki/interface/views.md` + representation docs | 2026-07-12 | finding | [log](../log/2026-07-12-digital-default-corpus-reconciliation.md) | @@ -58,5 +59,3 @@ Format: `- YYYY-MM-DD · type · slice · one-line statement of the finding`. Types are the five from [tick.md](tick.md): violation, contradiction, question, bug, insecurity — plus `gate` for a checker owed to the recurrence-promotes-to-the-gate rule. - -- 2026-07-13 · contradiction · `wiki/process/ROADMAP.md` · Historical work-order 27 still calls the REAL material dialect Bevy's opening default and says F3 flips to DIGITAL, contradicting the implemented DIGITAL-home contract.