pipelines/LENS_knowledge-progression-decipherment_DRAFT.md
Lens id: knowledge-progression-decipherment (WAVE P1-C, contract-critical)
Title sets: Outer Wilds + Return of the Obra Dinn (knowledge-as-progression; reveal ordering; journal
information architecture; markerless discovery; deduction-as-gate; link graph; + the REALM WIDEN aspect:
per-planet ruleset / Quantum Moon as a shipped anthology of distinct-ruleset worlds) · **Heaven's Vault +
Chants of Sennaar + Tunic** (translation-as-play; inscription/language lane; never-unsolvable clues;
L2/L3 decode completionism; teaching without markers).
Read-only audit of C:\dev\humanity-forgotten (canon) and C:\dev\Humanity\Humanity (game repo).
Method law held: cited current-state per finding; positive-controlled zeros; DESIGNED-UNBUILT never
reported MISSING; reuse-first recommendations; pre-registered divergences checked against
docs/DESIGN_GAP_REGISTER.md before minting.
STATUS: DRAFT IN PROGRESS (write-early rule). Findings appended as verified.
---
| Surface | Where | Live state |
|---|---|---|
| Inscription spine | registries/T0_Inscription_Spine [ACTIVE v0.1]/Sheet1.csv | 98 data rows, 16 cols (spine_type, fragment_index, script_ids_referenced, trade_9_tier_gate, layer_classification, fragment_assembly_role, companion_modality, payoff_chapter) |
| Language/script registry | registries/T0_Language_Script_Registry [ACTIVE v0.1]/Sheet1.csv | 84 data rows, 19 cols (system_type, parent_script, descendant_scripts, inscription_application_class, decipherment_status, mastery_tier_threshold, layer_1_mechanic/layer_2_substrate/layer_3_anchor) |
| Cross-cultural link graph | registries/T0_Cross_Cultural_Link_Graph [DRAFT v0.1]/Sheet1.csv | 184 data rows, 22 cols (link_type, link_strength, evidence_basis, integrity_visibility, reward_class, lore_pointer, evidence_tier) |
| Clue lane (engine) | C:\dev\Humanity\Humanity\Source\Humanity\Public\Discovery\HumanityClueSubsystem.h | BUILT: 16-slot ring buffer ("field-sense"), overlay reads last 5, OnSenseUpdated pulse, FireClue, greybox seed. Explicitly NOT a journal |
| Clue rows (canon) | build/spine_rows/*/clues.csv (79 files) | 10 rows total, ALL in CH_02; 78 files header-only |
| DT_Clue import | Source/Humanity/Public/Data/ClueRow.h L6 | "The clues lane has no SPINE_TABLES row yet -- DT_Clue is still unimported (TODO_CANON)" |
| Journal worldstate | registries/T0_Worldstate_Variables [ACTIVE v0.1]/Sheet1.csv L11 | WS_010 journal_entries_unlocked array, default [], consumers journal_renderer, save_state_system |
| Journal open point | ClueRow.h L12 + HumanityClueSubsystem.h L3-4 | journal "does not open until Ch 13" (HL_0070/HL_0096) |
---
Class: DESIGNED-UNBUILT (the spec half is genuinely absent — see the boundary note) · Priority: HIGH ·
Owner: spec-doc (T1_UI_UX_Spec) → P1/W10 UI wave · Wave: slice-critical
What the titles prove. Obra Dinn's journal *is* the game. It is not a log of what happened; it is the
deduction workspace — a fixed roster of 60 unknowns, a portrait grid, a fill-in-the-blank sentence per
person, cross-referenced back to the scene that produced the evidence, and a validation rule (three correct
at once) that converts private suspicion into public progress. Outer Wilds' Ship Log does the same job in a
different grammar: a node graph where "there is more to explore here" is a first-class state, and *rumor
edges* (what you heard about a place you have not been) are drawn distinctly from *fact edges*. Both prove
the same lesson: **when knowledge is the progression currency, the journal's information architecture IS the
progression UI, and it must be designed as a system, not authored as prose.**
Current state (cited).
"Journal voice not the healer's child = pillar violation. Path-variable texture absent = pillar violation.
Canonical beats Ch 13/38/57 missing = pillar violation" [_source/01_Tier_1_Foundation/T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md L203-208].
begins … Ch 38 Azores — journal transferred … Ch 56 … Ch 57 … Ch 77 Epilogue"
[T1_Integrity_Paths_Worldstates_Master [ACTIVE v2.1].md §8.4 L380-390], plus §8.5 path-variable voice
(L392-400).
[T1_Build_Pipeline_Contracts [ACTIVE v1.0].md §1.9 L222].
T1_UI_UX_Spec [DRAFT v0.1].md is a 2-line file containing only its own title. Verified by wc -l = 2 and by cat (output: the H1 line and one blank). T1_Audio_Spec [DRAFT v0.1].md is likewise 2 lines. The
repo already knows: "Empty-stub state notes (labels honest, no action): T5_Grimoire_Link, … T1_Audio_Spec,
T1_UI_UX_Spec, T1_Personal_Dimension_Spec" [docs/CORPUS_SWEEP.md L278].
journal_entry_id strings,[],"journal_renderer, save_state_system"`
[registries/T0_Worldstate_Variables [ACTIVE v0.1]/Sheet1.csv L11]. The named consumer journal_renderer
has no spec and no code.
row-level journal template access, T0\_Journal\_Entry\_Template\_Registry promotes to registry. Pipeline-driven
schema principle holds — registry creation deferred until consumer demand demonstrates need"
[Pipeline Contracts §1.9 L224].
Source/Humanity/Public/UI/ contains exactly four headers — HumanityDebugHUD.h, HumanityHudReveal.h, HumanityPauseMenuWidget.h, HumanityPlayerHUDWidget.h.
The shipped discovery surface is deliberately NOT the journal: "The field-sense is a lightweight re-read of
the last N in-place SENSATIONS -- NOT a journal (HL_0070/HL_0096: the journal does not open until Ch 13)"
[C:\dev\Humanity\Humanity\Source\Humanity\Public\Discovery\HumanityClueSubsystem.h L3-4].
Positive control on the zeros. grep -rn "journal" Source/Humanity/Public/UI/*.h Source/Humanity/Public/WorldState/*.h
returns 0; the SAME command shape for FieldSense over the same files returns 10 hits (HumanityDebugHUD.h L32-33,
HumanityPlayerHUDWidget.h L42-44/69/114-117) — the search can match. Registry zero: `ls registries/ | grep -i
"journal\|grimoire" returns nothing while ls registries/ | grep -i inscription` returns
T0_Inscription_Spine [ACTIVE v0.1] — the search can match. Escaped-markdown trap avoided: the repo-wide grep
for the literal T0_Journal_Entry_Template_Registry returns zero because the CVD writes it
T0\_Journal\_Entry\_Template\_Registry; the tolerant pattern Journal.{0,3}_.{0,3}Entry finds both real
references (CVD L208, Pipeline Contracts L224). This is exactly the "a search that CANNOT match reports zero"
failure mode — logged here so the critic does not re-derive it.
Why this is slice-critical, not post-slice. THE JOSH GATE slice is PROLOGUE→CH 13 and **Ch 13 is the
journal's activation beat** (§8.4 L384; Languages §2.2 "Ch 13 South Africa … Healer's child joins, journal
initiates"). The slice therefore cannot close on its designed note without a journal surface. The
field-sense ring buffer is explicitly scoped as the pre-Ch-13 stand-in and caps at 16 entries
(RingCap = 16, HumanityClueSubsystem.h L78) — it is not a journal and was never meant to become one.
Self-refutation attempted. (a) *"DESIGNED-UNBUILT — the beats and the voice rules are specced, so this is
just build work."* Half true, and that is why the class is DESIGNED-UNBUILT rather than MISSING. But the
designed half is content (which entries exist, in whose voice, at which integrity band). The structure
half — how entries are indexed, what a player does IN the journal, whether entries carry back-links to their
evidence, whether an entry can be in a partial/unknown state — has one designated home and that home is an
empty file. Building from §8.4 alone yields a scrolling text log, which is the default the two comparator
titles specifically beat. (b) *"The registry deferral is a deliberate pipeline rule, so nothing is wrong."*
The rule's own trigger condition has now fired: journal_renderer is a declared consumer in a live ACTIVE
registry and Ch 13 is in the slice. The deferral was correct in Phase 6; it is stale now. (c) *"UI is a
post-5090 wave."* The information architecture is a DESIGN artifact, not an art artifact — it costs a spec
section, not GPU hours, and it constrains what the Ch 13 spine entry can even ask for.
Reuse-first recommendation. Do not mint a journal system. Three moves on existing homes:
1. Author T1_UI_UX_Spec §1 Journal Information Architecture into the existing empty ACTIVE-routed stub
(Pipeline Contracts §1.9 already points display there — no new authority is created). It needs exactly
four things the comparator titles isolate: an entry index axis (chapter × thread — both already exist
as T0_Chapter_Index and the 22-thread roster), an entry state enum (heard-of / witnessed / connected
— the Outer Wilds rumor-vs-fact distinction, which our evidence_tier column already gestures at), a
back-link from every entry to the clue/link row that produced it (ClueRow.clue_id and
Cross_Cultural_Link_Graph.link_id are both stable keys today), and a "more here" flag per node.
2. Trip the Pipeline-Contracts §1.9 promotion clause and stand T0_Journal_Entry_Template_Registry up from
the columns §8.4/§8.5 already imply (beat_id, chapter, trigger_type, path_variant, voice_register,
source_row_ref). This is a schema-data commit, not a canon ruling.
3. In the engine, extend the existing UHumanityClueSubsystem rather than writing a second lane: it
already owns FireClue / fired-set / the OnSenseUpdated pulse. A journal is that map without the ring
cap plus the state enum. HumanityPlayerHUDWidget already hosts a held-key overlay pattern to copy.
Boundary stated explicitly: the ENTRY CONTENT is DESIGNED-UNBUILT; the ENTRY ARCHITECTURE is genuinely
absent (empty file), and that is what this finding asks for.
---
Class: WEAKER (the ratified mechanic is under-specified at its load-bearing joint) · Priority: HIGH ·
Owner: spec-doc (CVD Pillar 5 is locked; this lands in the Q3.8 build spec) · Wave: pre-Q3.8-build
What the titles prove. Obra Dinn lets the player be wrong — that is the entire design. You may assign any
name to any corpse at any time, and the game says nothing. Progress is granted only when THREE fates are
simultaneously correct, and then all three lock at once. That single rule does three jobs: it permits
hypothesis (the player can hold a guess without penalty), it forbids brute force (a 60×60 space where only
triples pay cannot be enumerated), and it produces the game's signature feeling — the triple-chime that
converts private suspicion into certainty. Outer Wilds solves the same problem the opposite way: the player
can never be wrong because the Ship Log records only observed facts, and the *deduction* happens in the
player's head, gated by physical access. **Both prove that a knowledge mechanic is defined by what happens on
a WRONG attempt, not by what it pays on a right one.**
Current state (cited). Pillar 5 is locked and explicit about the verb: "Encountering related material in
another culture enables a *link* action. Linking earns lore reward + mechanical reward (cross-cultural weapon
abilities, school technique hybrids, intuition tier gains). Scholarly basis required per link"
[T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md L196, Pillar 5]. The build spec is queued and named:
"Q3.8 | Grimoire / cross-cultural link graph + 22-thread system | BUILD-NOW | `GrimoireGraph {nodes on
discovery, link-action requiring a scholarly-basis ref, reward on valid link} over Cross_Cultural_Link_Graph`
(184 edges) + Thread_Grid(664)/Thread_Registry(22). Pillar 5, the 'highest-leverage innovation.'"
[docs/PRE_5090_BUILD_PLAN.md L1795]; the slice stub is scoped at
docs/PRE_5090_BUILD_PLAN_VOL2.md L727 (U11.19).
The gap, precisely. Every clause in that spec describes the *success* path — "reward on valid link." No
artifact in either repo says what happens when the player proposes a link that is not an edge in the graph.
Positive-controlled: a case-insensitive Grep over docs/ for `invalid link|wrong link|failed link|link
attempt|incorrect link|link fail returns No matches found; the same tool, same corpus, for link.action`
returns 6 hits (PRE_5090 L1795, VOL2 L727, DECISION_DOSSIER L171/173/190/769) — the search can match. So the
zero is real.
Why it is decision-grade rather than an implementation detail. With a free, penalty-free, unbounded link
action over a graph of 184 canonical edges, the dominant player strategy is enumeration: select every node
pair in the Grimoire until something pays. That strategy is *available today* on the spec as written, and it
would silently delete Pillar 5's stated purpose ("the thesis becomes gameplay loop") — the player would be
farming a UI, not recognising a pattern. This is the exact failure Obra Dinn's confirm-in-threes rule exists
to prevent.
Interaction with ruled doctrine (checked, not assumed). A punishment-on-wrong-guess design would collide
with the natural-voice ruling — "puzzles too difficult or time-consuming must NEVER gate progression"
[docs/NATURAL_VOICE_DOCTRINE.md L8, §4 L41-46] — and with the no-dead-end canon. So the fix must bound
brute force WITHOUT punishing. Obra Dinn's rule does exactly that: no penalty, but no partial payout either.
This finding is therefore compatible with the ruling, not a re-litigation of it.
Reuse-first recommendation. Adopt a confirmation-quorum rule on the existing registry columns; add no
new system and no new penalty.
link_strength (171 canonical / 11 minor / 2 candidate) and link_type (36weaving-progression, 29 parallel-independent, 22 sets-up, 14 continuity, 13 catalog-convergence, 12
reception-transmission, 12 knowledge-transmission, 9 catalog-membership …). Group edges into **convergence
sets** by link_type + thread, and pay the mechanical reward when the player has proposed the set's
minimum quorum correctly (LINK_0001's own note already imagines this: "the fifteen-parallel
catalog-convergence at Ch 38 Azores (LINK_0014) where independent vril-parallel terms are recognized as one
phenomenon — an intuition-tier gate the player is being set up to trip"
[registries/T0_Cross_Cultural_Link_Graph [DRAFT v0.1]/Sheet1.csv LINK_0001 lore_pointer]).
heard-of statefrom KPD-1 rather than being rejected with a buzzer. That is the no-punishment / no-brute-force pair.
evidence_basis column (0/184 blank) — the link action candemand the player has ACQUIRED the citing source-node before the proposal is even offerable, which bounds
the pair space by knowledge rather than by penalty.
---
Class: WEAKER (live registry data below the pillar's own stated bar) · Priority: HIGH ·
Owner: schema-data (registry apply) + QA loop (a gate) · Wave: pre-Q3.8-build
What the titles prove. Obra Dinn ships 60 fates and every single one is solvable from evidence placed in
the world — the completeness of the evidence set is the product. A knowledge game with a 66%-empty reward
table is not a knowledge game with some TODOs; it is a loop that pays out one time in three.
Current state (cited, computed from the live CSV). registries/T0_Cross_Cultural_Link_Graph [DRAFT v0.1]/Sheet1.csv,
184 data rows:
reward_class: blank on 122 rows (66%). Assigned: DISCOVERY_UNLOCK 23, INTUITION_TIER 18, PUZZLE_UNLOCK8, LORE 7, SCHOOL_TECHNIQUE 5, WEAPON_ABILITY 1. The blanks are scattered across the id range
(LINK_0003, 0004, 0005, 0007, 0008 … 0144, 0145, 0152, 0155, 0165), so this is a partial apply, not an
un-processed tail append.
primary_source: blank on 98 rows (53%). evidence_tier: needs_research on 88, primary on 86,blank on 10.
evidence_basis is blank on 0 rows — every edge cites a TIER DOC. That is the scholarly-basis half.primary_source AND evidence_tier != primary** (LINK_0001, 0002, 0006, 0009, 0010, 0011, 0012, 0013, 0030, 0039, …), and
all 16 carry a MECHANICAL reward class, not LORE.
Why the 16 matter. Pillar 5's executable test is written as a violation condition, not a warning:
"Link-action without scholarly basis = pillar violation. **Cross-cultural reward without primary-source
documentation = pillar violation.**" [CVD L197]. Those 16 rows are cross-cultural mechanical rewards with no
primary-source documentation. On the pillar's own wording they are violations *today*.
Positive control / no-gate claim. harness/gates_config.json declares 30 gates (stress, fidelity,
scan, topography, layer_register, lint, anchors, graph, no_dead_end, boss_axes, spine_graph, lifecycle,
reveal_discipline, registry_extensions, index_freshness, store_integrity, region_pages, ws_value_form,
slice_coherence, seed_housing, build_readiness, entity_taxonomy, care_scope, grand_sage_silence,
weave_lifecycle, build_space, rarity_firewall, counter_class_coverage, ally_build, factory_contract). None
targets the link graph's reward/primary-source coverage: check_source_anchors.py proves [SRC: …] anchors
*resolve* (its docstring: "proves each anchor resolves, deterministically"), not that a reward row has a
primary source; check_weave_lifecycle.py is scoped to story_seed_tags on T0_Source_Material_Registry
and is WARN-tier by design. The gate list is enumerated from the config itself (30 names read
programmatically), so this is not a grep that could have missed a gate.
Reuse-first recommendation. One new gate file, zero new systems, modelled on the two that already exist
in this exact shape:
harness/check_link_rewards.py to gates_config.json implementing Pillar 5's two clauses literally: FAIL on any row where reward_class is a mechanical class and primary_source is blank and `evidence_tier
!= primary (today: 16); WARN-tier count on reward_class` blanks (today: 122) so the coverage trend is on
the scorecard the way weave_lifecycle surfaces its blind-tag population. Copy check_weave_lifecycle.py's
self-testing-classifier pattern so the ruler itself has teeth.
docs/DECISION_DOSSIER.mdL534-547 ratified Option A — "Every link earns LORE … a deterministic rule maps the link_type/thread domain
to the mechanical class." The rule exists and the apply is only 34% landed. This is a deterministic-transform
commit (the proven O-1 method), not an authoring wave.
needs_research rows route to the existing book/deep-research pipeline, not to a new lane.Contested note for the director. I did not verify WHY the Option-A apply stopped at 62 rows; it may have
been deliberately scoped to the rows whose mechanical class was unambiguous, with the ambiguous remainder
intentionally left for Josh per that dossier's own flag-the-ambiguous clause. If so the correct verdict on
the 122 softens to DESIGNED-UNBUILT and only the 16-row exposure stands as WEAKER. Flagging rather than
guessing.
---
Class: DESIGNED-UNBUILT (the lane, the schema, the validator and the runtime all exist; the content is
1/79 authored) · Priority: HIGH · Owner: P5-factory (per-chapter authoring) · Wave: slice
What the titles prove. Outer Wilds' whole map is clue density — every location holds text that changes
what another location means, and the game is unplayable at low density because the player has nothing to
connect. Chants of Sennaar likewise cannot function below a threshold of glyph occurrences per chapter: you
need repeated, varied encounters with the same sign before a hypothesis is even formable. **Clue density is
not polish; it is the minimum viable substrate of a knowledge loop.**
Current state (cited). The lane is real and validated:
docs/spine/clues/<node>.csv. Directory listing shows exactly **two entries: CH_02.csv and README.md.**
harness/extract_spine_rows.py L53-79 — "Clue lane (docs/spine/clues/<node>.csv — FUN_REBUILDR3.1): authored discovery data emitted as a pass-through table. A clue with no legal in-world source is
REJECTED at emit time ('how would they have gotten a clue?' is enforced here)" with hard sys.exit on
illegal source_kind, illegal status, or a missing clue_id/player_text/src.
build/spine_rows/*/clues.csv — 79 files, 10 data rows total, all chapter_id=CH_02. Verified by iterating all 79 with csv.DictReader (not by grep). CH_03, CH_09, CH_13 are header-only; sample of a
live row: `CLUE_CH02_GA,guardian_withdraw,observed_behavior,CH02_B03,…,"The two guardians move to one
rhythm. Their strikes fall only when it breaks."`
UHumanityClueSubsystem consumes them (LoadCluesFromContent, FireClue, RingCap = 16), andthe import is still pending: "The clues lane has no SPINE_TABLES row yet -- DT_Clue is still unimported
(TODO_CANON)" [Source/Humanity/Public/Data/ClueRow.h L6].
Why DESIGNED-UNBUILT and not MISSING. Everything except the rows exists — schema, reject-gate, emitter,
subsystem, HUD overlay, greybox seed. This is an authoring backlog on a working lane, and the wave rule
forbids calling that MISSING.
The lens's actual contribution. Not "author more clues" (the factory knows). It is that **the clue schema
has no chain-completeness concept**, and a knowledge loop needs one. CLUE_FIELDS are `chapter_id, clue_id,
chain, source_kind, beat_scope, trigger_context, player_text, status, src — chain` groups clues
(guardian_withdraw), but nothing declares *how many members a chain needs before it is solvable*, and
nothing declares *which puzzle/gate the chain answers*. The natural-voice ruling requires exactly that
property to be testable: "The QA loop tests solvability: a puzzle station that cannot be completed from its
own clues within a sane attempt budget is a defect" [docs/NATURAL_VOICE_DOCTRINE.md L38-39] and "the clue
chains OR together" (L36). With no answers_gate / chain_min columns, that test cannot be mechanised — a
QA agent can only judge it by playing, and the JOSH GATE makes the QA loop the only player.
Reuse-first recommendation. Two columns on the existing CLUE_FIELDS list (a one-line change in
extract_spine_rows.py plus the same two in FClueRow), not a new registry:
answers — the gate/puzzle/objective id this chain resolves (empty for ambient colour clues).chain_min — how many distinct clues in the chain suffice (the OR-together sufficiency the doctrine alreadystates in prose).
Then the solvability check becomes deterministic and joins the 30-gate suite: for every gate with a
puzzle/clue-routed resolution, at least one chain with `count(chain members reachable in-chapter) >=
chain_min must exist. That is the same shape as the existing check_no_dead_end.py` gate, which is why no new
machinery is needed.
AMENDMENT after reading the lane's own README (self-correction, kept visible for the critic). The
sufficiency rule IS already declared: "Clues in one chain OR together: any one earns the read, none gates —
clue = LEGIBILITY, NEVER a gate" [docs/spine/clues/README.md], so chain_min is doctrinally always 1 and my
first draft of this recommendation was wrong. The chain value also already names the read it makes legible.
What survives is narrower and still real: there is no coverage assertion that every chapter's
puzzle-routed / clue-routed reads HAVE a chain. The obligation is on the books but deliberately unarmed —
`FR-037 | canon-author | all | PARTIAL | Author this chapter's discovery clue rows per encounter from the
legal-source enum — a clue is legibility, never a gate. | path:build/spine_rows/CH_*/clues.csv | NONE(the
clue surface has no registry home until rank 29 re-homes it into DT_Clue) [docs/FACTORY_CONTRACT.md` L151].
So the honest verdict is DESIGNED-UNBUILT with a declared-not-armed tooth, and the reuse-first ask is
just: when rank 29 re-homes DT_Clue, arm FR-037 with a per-chapter presence count rather than leaving it
NONE. Drop the chain_min column; keep only the answers pointer if the objective-id join is wanted.
---
Class: WEAKER (a BUILT design decision that cannot carry the authored content) · Priority: HIGH ·
Owner: W10 display + WS-C runtime clue-state · Wave: slice
What the titles prove. Obra Dinn's memories are permanently re-enterable; Outer Wilds' Ship Log never
forgets and never scrolls off. Both are knowledge games and both refuse to let evidence expire, because the
Ch-N-recontextualises-Ch-3 move is the whole payoff and it requires the Ch-3 evidence to still be in the
player's hands. A knowledge game's evidence store must be append-only for the life of the arc.
Current state (cited). The mystery is fully authored and it spans the whole slice:
protagonist sleeps. The protagonist does not know who wrote them. **The game's first extended mystery about
a human character.** … The arc is the chapter-level backdrop for every Ch 04-12 quest where the protagonist
finds something they did not place. The Ch 13 revelation retroactively contextualizes every note."
[_source/03_Tier_3_Characters/T3_Core_Characters [ACTIVE v1.0].md §3.3, L188-193].
[journal:healers_child_unsigned_marks] … out: {… ws.journal_status:
+healers_child_unsigned_record_begun …} [docs/spine/CH_03.md` L160-161]; the watcher is re-asserted at
CH_11 L201/L283 and CH_12 L217/L286.
static constexpr int32 RingCap = 16; with the overlay reading five — "the held-key HUD overlay lists the last 5" [HumanityClueSubsystem.h L3-4, L78].
grep -n "Save|Serialize|Persist" over Source/Humanity/Private/Discovery/HumanityClueSubsystem.cpp returns only CluePlayerTextById.Reset() (L22)
and Out.Reset() (L92); grep -rn "clue" Source/Humanity/Public/WorldState/*.h returns nothing (control:
the same grep for FieldSense over the UI headers returns 10 hits). The owner is named and queued —
"WS-C runtime clue-state + W10 (display)" [docs/PRE_5090_BUILD_PLAN_VOL2.md L1553] — so the
persistence half is DESIGNED-UNBUILT, not missing.
The design-level defect (this is the part that is not just build backlog). A 16-slot ring with a 5-line
window is the correct shape for a *recent-sensations* affordance and the wrong shape for the *only* evidence
store the player has for Ch 3-12. Ten chapters of unsigned notes cannot be held in 16 slots alongside every
other chapter sensation, and even if they could, a five-line newest-first window cannot present a
chronological mystery. The consequence is exact: at Ch 13 the game says "this recontextualises every note"
to a player who can see the last five things that happened. The reveal lands on nothing.
Reuse-first recommendation. Do not build a second lane; do the two moves already implied by the plan, in
the slice rather than after it.
1. Give the ring an exempt class. FireClue already keeps a FiredClues TSet that is uncapped — the
fired set, not the ring, is the natural evidence store. Add a pinned bit (or reuse chain) so
chain-bearing clues render from the fired set rather than the ring; the ring stays exactly as-is for
ambient sensations. That is a small change inside the existing subsystem and it costs no new UI until the
journal lands.
2. Pull the WS-C clue-state persistence forward to slice scope, since the slice's own closing beat depends on
it. It is already the declared owner (VOL2 L1553).
3. When KPD-1's journal architecture lands, the healers_child_unsigned_marks chain is its **first and best
fixture** — a ten-entry chronological chain whose entries flip from unattributed to attributed at
Ch 13. That single chain exercises the entry-state enum, the back-link and the retroactive-update path in
one authored artifact, which is why it should drive the spec rather than follow it.
---
Class: MISSING (as a mechanic; the canon promises are ratified, the delivery vehicle is absent from
every plan I could find) · Priority: MEDIUM-HIGH · Owner: spec-doc (T1_UI_UX_Spec §journal) + Q3.7 ·
Wave: post-slice design, pre-Q3.7 build
What the titles prove. Heaven's Vault's dictionary improves, and the game's central pleasure is going
back to a sentence you mistranslated in hour two and reading it correctly in hour twenty — so the game keeps
every inscription you have ever seen in a re-openable list. Outer Wilds marks a node "there is more to
explore here" precisely so knowledge gained elsewhere sends you back with a target. **In a mastery-gated
reading system, the mechanic that matters is the one that tells you what just became readable.**
Current state (cited). We have promised retroactive legibility at least four times, at increasing scale:
T0_Inscription_Spine carries both a gate and a payoff — trade_9_tier_gate(ADEPTUS_MINOR 22, PHILOSOPHUS 16, ADEPTUS_EXEMPTUS 16, PRACTICUS 13, ADEPTUS_MAJOR 12, THEORICUS 7) and
payoff_chapter, with spine_type = HIDDEN_INSCRIPTION_77 ×77 [live CSV]. Row 2 is the pattern:
INSC_77H_CH01_FRAGMENT, chapter 1.0, payoff_chapter 76.0.
reading**" and "Ch 65 … inscriptions encountered on apparatus and Vimana facility surfaces at this revisit
have grown clearer since Ch 58" [T1_Languages_and_Script_Master [ACTIVE v2.1].md §2.2 L79, L89].
readable**, unlocking hidden historical layers in every site" [ibid. §7.3 Tier 9 Magister Templi, L261; also
§5.1 L199].
68 chapters of human-world inscriptional context" [§6.2/§6.4/§6.5].
The zero, positive-controlled. A case-insensitive Grep over the whole repo for `now readable|becomes
readable|re-read|reread|retroactive|grown clearer|revisit.{0,30}inscription` returns 25 hits — and every one
is either (a) a canon STATEMENT of the promise (the four above), (b) the T99 spine-authoring process's own
"retroactive alignment at Final Consolidation" (an authoring workflow, not a player mechanic), or (c) the
reveal-discipline rule forbidding framing that "would retroactively make sense only after the reveal"
[T3_Core_Characters L855]. Zero hits describe a player-facing surfacing of newly-readable content. The
search demonstrably matches the canon text, so the zero is on the mechanic, not on the search. I also
checked the queued build spec: `Q3.7 | Language-decode / inscription system | BUILD-NOW | InscriptionDecoder:
puzzle per script, auto-decode speed scaling with Trade-9 tier, unlock payload on solve …`
[docs/PRE_5090_BUILD_PLAN.md L1794] — it covers decode-on-encounter, not decode-what-you-already-passed.
Why MISSING rather than DESIGNED-UNBUILT. DESIGNED-UNBUILT requires a spec/ruling/registry row for the
thing itself. There are rows for *which fragment* and *at what tier*, and there is a build item for *the
decoder*. There is nothing anywhere — canon, plan, registry or code — that specifies how the player learns a
previously-illegible thing has become legible, or how they read it without physically returning. The
Magister Templi promise ("every palimpsest in every visited location") is unsatisfiable by return-travel
across 79 nodes and therefore *requires* a remote surface that no document names.
Reuse-first recommendation. This is one field and one screen, both on homes that KPD-1 is already
standing up.
journal entry in state seen-illegible; when player_trade9_tier >= trade_9_tier_gate the entry flips to
readable and raises the existing OnSenseUpdated-style pulse. That is exactly the Outer Wilds "more here"
flag, built from columns that already exist (trade_9_tier_gate is populated on all 98 rows — 0 blanks in
the tier histogram above).
revisit_site_ref to the inscription-spine schema only where the canon already asserts a physicalre-read (Ch 41 /Xam, Ch 65 Antarctica) so the world-side return has a target row; everything else reads
remotely.
threshold set to Tier 9, applied across the accumulated entry set. Cap it honestly in the spec — "every
visited location" means every location with an inscription-spine row, which is a bounded 98.
---
Class: WEAKER (a ratified system missing the axis its own comparator genre is built on) ·
Priority: MEDIUM · Owner: spec-doc (Q3.7 InscriptionDecoder design) · Wave: pre-Q3.7 build
What the titles prove. Chants of Sennaar's notebook holds the PLAYER's guess for each glyph, and the game
never marks a single guess right or wrong — it validates a whole page at once, so a wrong hypothesis is a
legal, persistent, revisable state you live inside for hours. Heaven's Vault offers four candidate readings,
lets you commit to one, and lets later evidence contradict you; you can go back and change your past
translations, and the game tracks your accuracy silently. Tunic goes further: the manual is written in a
script you never learn, and the *player* — not the character — assembles the mechanics from diagrams.
In all three, the object the game simulates is the player's model, not the world's truth.
Current state (cited). Our model is world-truth plus character tier, both excellently populated:
decipherment_status on all 84 script rows is objective epistemic fact: FULLY_DECIPHERED 56,ORAL_NOT_SCRIPT 13, PHONETIC_ONLY_NO_SEMANTICS 9, FULLY_UNDECIPHERED 3, FAIRY_REALM_NATIVE 1,
FULLY_UNDECIPHERED_GENEALOGICALLY 1, SONGLINE_NOT_SCRIPT 1 [live
T0_Language_Script_Registry [ACTIVE v0.1]/Sheet1.csv].
mastery_tier_threshold is the character gate: PRACTICUS 27, THEORICUS 12, ADEPTUS_MAJOR 12,ADEPTUS_MINOR 11, ZELATOR 6, PHILOSOPHUS 6, ADEPTUS_EXEMPTUS 5 [ibid.].
(protagonist) and scholarship (healer's child) [T1_Languages_and_Script_Master §2.1 L19-27].
approximates meaning via bilingual inscription cross-reference, material-culture context, and parallel-text
comparison without a decoder-ring" and "Intelligence + Intuition + Humility determine productive
engagement at Inscription Limit encounters" [§3.1, §3.4 L129-131]. This is the right idea and it is a stat
check, not a workspace — there is no artifact where the player's approximation is recorded.
What this costs. CVD Pillar 7's own gameplay product is "Player target: finish arc knowing real fragments
of ~15 documented languages through gameplay" [CVD L213]. A player learns a fragment by forming and testing a
hypothesis; if the character auto-decodes at tier and the player only reads the result, the pillar's stated
player-outcome is not produced by the mechanic that is supposed to produce it. The gap is not decorative — it
is the difference between Pillar 7 shipping and Pillar 7 being a lore delivery pipe.
Divergence check (done, not skipped). Auto-decode is deliberate: "Inscription trade tier gates automatic
decoding depth (higher tier = faster auto-decode; puzzle engagement always available)" [CVD L213]. So the
CVD already reserves the player-engagement half — the clause "puzzle engagement always available" is a
ratified promise with, positive-controlled, exactly ONE downstream implementation reference in the entire
repo: Q3.7's "puzzle per script" [PRE_5090 L1794]. (Grep for `auto-decode|auto_decode|automatic decoding|
puzzle engagement` across both repos returns 2 hits: CVD L213 and PRE_5090 L1794.) This finding is therefore
*inside* the ruling, filling its unimplemented half — not a proposal to make decoding mandatory.
Reuse-first recommendation. Give the optional puzzle a hypothesis state rather than a pass/fail, on
existing columns:
player_gloss to the journal entry (KPD-1) for inscription-class entries: the player's own workingtranslation, free text or a pick-from-candidates, editable at any time, never validated on entry. This is
Chants of Sennaar's notebook and Heaven's Vault's revisable commit in one field.
fragment_index + fragment_assembly_role + the 77-fragment spine whose "complete text, assembled from
all 77 fragments, is the House of Velheim's most ancient document" [§5 L191]. Assembly IS Obra Dinn's
confirm-in-threes: a page of the document resolves when its fragments are consistent, and a wrong gloss
simply leaves the page unresolved.
and Harappan (Ch 16) the canon *guarantees* the player's model can never be confirmed, and §3.4's Humility
stat is already the designed response. A recorded, never-validated player_gloss at exactly those rows is
the cognitive-dissonance-productive experience §3.1 asks for, delivered as a mechanic instead of a stat
roll. inscription_limit_zone = True on 10 of 84 rows is the ready-made target list.
---
Class: DESIGNED-UNBUILT (declared-not-armed, honestly recorded) · Priority: MEDIUM-HIGH ·
Owner: QA loop + schema-data · Wave: slice (the QA loop is the only player)
What the titles prove. Obra Dinn is verifiable by construction: every fate is derivable from placed
evidence, and the designer can enumerate the derivation. Outer Wilds' Ship Log doubles as the designers'
own completeness audit. **A knowledge game needs a machine-readable derivation claim or it cannot be QA'd at
all — and under THE JOSH GATE, the QA loop is the only player.**
Current state (cited). Josh ruled the test into existence: "The QA loop tests solvability: a puzzle
station that cannot be completed from its own clues within a sane attempt budget is a defect"
[docs/NATURAL_VOICE_DOCTRINE.md §3 L38-39]. It is on the factory contract as FR-026 — obligation "Make
every progression-path puzzle in this chapter solvable by an attentive player in reasonable time from
in-world information — mysterious is allowed, unfun is not", lane canon-author, scope all, **status
SEED**, ruling_src docs/NATURAL_VOICE_DOCTRINE.md#3-clues-mysterious-is-allowed-unfun-is-not
[docs/factory_contract.json]. And SEED means advisory: "34 SEED riders are ADVISORY by design: they surface
in every checklist and never fail this gate" [harness/factory_contract_scorecard.md, gate 30 PASS with
0 FAIL / 7 WARN].
Its two sibling natural-voice lenses are already WARNing for the analogous reason: "(R2) FR-024: critic lens
'does a person say this' appears on NO declared critic surface — a lens that lives only in a doctrine file is
run by whichever agent happens to know it" [ibid.]. FR-026 does not even get that WARN, because it has no
declared critic surface to be absent from.
Why the lens raises it. The other 29 gates protect against LEAKS — check_reveal_discipline.py is
excellent at it, codifying three leak classes with a hard/advisory split and an explicit note that
\bCorr\b does not match Vellmark-CROFT [gate docstring L1-30], and check_grand_sage_silence.py ships
alongside. We have a rigorous negative theory of knowledge (nothing arrives early) and no positive theory
(everything intended is reachable). Those are different properties and only one is armed.
Reuse-first recommendation. Arm FR-026 from data the lane already emits, not from a new authoring pass.
clues.csv.chain → the read it earns. When rank 29 re-homes DT_Clue (the reason FR-037's tooth is NONE today), the same commit can promote FR-026 from SEED to a real check: for every
beat whose resolution is puzzle- or clue-routed, assert ≥1 active clue row in the chapter whose chain
matches. That is a presence assertion, not a solvability proof, and it is exactly what catches the actual
failure mode (a puzzle authored with no clue at all).
the same critic surface FR-024/025 are being wired to (.claude/skills/normalize-doc/SKILL.md), so the
gate's existing R3 rule ("the consumption point exists but does not pick this rider up") starts watching it.
transfer to game #2; the chains are CANON.
---
Class: DESIGNED-UNBUILT (schema is proposal-tier and strong; this is one field to add before it mints) ·
Priority: MEDIUM (HIGH on timing — it must land before the Wave-2 schema mint) · Owner: realm program
(Wave 2 schema mint) · Wave: realm doctrine wave, pre-mint
What Outer Wilds proves. The Quantum Moon is the purest knowledge-gate ever shipped: the rule (quantum
objects move only when unobserved) is discoverable in three separate places, and once the player *understands*
it, six previously-impossible traversals become trivial — with no item, no unlock flag, no stat. The
per-planet rulesets exist so that each world teaches one law, and the anthology structure means the player
carries laws between worlds. The unit of progression is a law the player has internalised.
Current state (cited). The realm program has already designed most of this, and better than I expected:
grounds: "Extending T0_Environment_Grammar_Registry was considered and rejected — that registry is
PER-FEATURE (a lava vent, a waterfall) and this is PER-WORLD" [docs/proposals/REALM_DESIGN_PROGRAM.md §2.3].
— this is the "a search that cannot match reports zero" discipline applied to a design schema, and it is
the strongest thing I read in either repo this wave [§2.3].
taught_at as a site reference in the same chapter and**`EXPLOIT, how a clever player turns the law into a tool rather than only suffering it, which is what keeps
the realms from reading as corridors of rules`** [§2.3]. That IS the Quantum Moon insight, already ratified.
violation_consequence, never a progression stop and the D-RR.5 bound (a signature law never grants amastery gate) [§2.3] — both correct and both consistent with the natural-voice non-gating ruling.
T0_Realm_Ruleset_Registry does not appear in registries/ (control: T0_Inscription_Spine does). Proposal-tier by the doc's own words: "Proposal-tier concept, not a mint."
The one gap. taught_at records where the game teaches the law. EXPLOIT records what a clever player
can do with it. Nothing records whether the player has learned it — there is no player-knowledge state, so
the exploit can only be authored as an always-available affordance. That is the difference between "the realm
has a clever trick in it" and "the realm rewards understanding," and only the second is what the comparator
title is famous for. It also interacts with the *anthology escalation* aspect: without a learned-laws set, a
later realm cannot build on a law taught by an earlier one, and the Realm Road cannot compound.
Divergence guard checked. A knowledge-gate on the critical path would collide with the natural-voice
ruling (hard puzzles never gate progression) — so this must NOT be proposed for progression. But that ruling
also names exactly where such content belongs: "Genuinely hard / time-consuming / obscure puzzles and
challenges route to: the completionist tier …, Layer-3 connection content, the strictly-no-kill path's special
rewards, and easter-egg achievements. They are PRIZES for the players who want them — never walls"
[docs/NATURAL_VOICE_DOCTRINE.md §4 L41-46]. A Quantum-Moon-class knowledge lock is precisely a prize. The
recommendation is therefore doctrine-compliant and does not re-litigate anything.
Reuse-first recommendation (must land before the Wave-2 mint, per the charter's own freeze rule).
law_state to the metaphysical-laws sub-row group: untaught | taught | exploited. The first two are already implied by taught_at; the third is the new one and it is the anthology hinge.
exploit_tier ∈ L1 | L2_completionist | L3_connection | easter_egg, defaulting to L1, so theEXPLOIT column can carry a prize-tier lock without any risk of a gating law. This mirrors the taboo
sub-row's existing layer (L1 action, L2 completionist, L3 connection) field — same vocabulary, no new
enum to ratify.
reprise_of's knowledge twin: the schema already has reprise_of for compounding a law across realms; declare that a reprise may assume law_state = exploited on its antecedent. That is the anthology
escalation aspect (R-A13) landing on a field that exists.
T-RLM-COMPOUND already cover the rest.---
Class: WEAKER (a strong, fully-populated ladder missing the axis a knowledge game needs) ·
Priority: MEDIUM · Owner: schema-data + QA loop · Wave: post-slice, pairs with KPD-8
What the titles prove. Obra Dinn's designers can state, for any point in the game, exactly which fates are
already derivable — that is how they order the ship's memories so difficulty ramps. Outer Wilds' Ship Log
graph *is* that statement, made visible. Reveal ordering in a knowledge game is a claim about the PLAYER's
reachable conclusions, and it has to be written down to be checked.
Current state (cited). Our ladder is real, populated, and good:
registries/T0_Thread_Grid [DRAFT v1.1]/T0_Thread_Grid DRAFT v1.1.csv — 666 rows across all 22 threads,columns `thread_id, chapter_id, progression_stage, content_summary, authoritative_paragraph_anchor,
extensions, with progression_stage` distributed ANCHOR 443 / ESCALATION 106 / NOT_PRESENT 49 /
CONFRONTATION 45 / RESOLUTION_FINAL 15 / RESOLUTION_PARTIAL 4 / CONVERGENCE 2 / CONFRONTATION_DIRECT 1 /
CAPSTONE 1.
T0_Thread_Registry [DRAFT v0.1] — 22 rows carrying `first_anchor_chapter, final_anchor_chapter,resolution_chapter, anchor_count, weaving_count, chapter_anchor_set, primary_source_array`.
check_reveal_discipline.py codifies three leak classes(name-before-reveal, the unattributed-Corr rule, the who-frame single-agent leak) with a hard/advisory split
and an explicit false-positive guard, and check_grand_sage_silence.py runs alongside — both in the 30-gate
config.
The gap. progression_stage is authored from the STORY's point of view: what this chapter does to this
thread. Nothing states what the player is expected to be able to CONCLUDE by that point. So the two halves of
reveal ordering are asymmetric: we can prove nothing arrives early (leak gates), and we cannot prove anything
arrives at all. A thread sitting at CONFRONTATION at Ch N with its ANCHOR rows unclued in Ch N-20 is invisible
to every gate we run — and given KPD-4's finding (10 authored clues, all in Ch 2), that state is the current
default across 78 nodes.
Reuse-first recommendation. Do not add a new ladder. progression_stage already implies the derivability
claim; make it explicit and cheap:
CONFRONTATION or RESOLUTION_* in chapter N asserts that its ANCHOR chapters < N each carry at least one clue chain or
link-graph edge naming that thread. That is checkable today from three tables that all exist
(Thread_Grid × clues.csv × Cross_Cultural_Link_Graph) with no schema change at all, and it is the
positive twin of the reveal gate.
player_conclusion on the ~68 non-ANCHOR rows(CONFRONTATION/RESOLUTION/CONVERGENCE/CAPSTONE = 68 rows total) — a one-line statement of what the attentive
player should now be able to say. That is a small authoring job, not a 666-row pass, because ANCHOR rows do
not need one.
check_reveal_discipline.py is the naturalhome since it already owns the reveal axis and already distinguishes hard from advisory findings.
---
T0_Language_Script_Registry carries 84 rows × 19 columns with every taxonomy column fully populated and
no blanks in the histograms I ran (system_type, inscription_application_class, decipherment_status,
mastery_tier_threshold, inscription_limit_zone), plus per-row layer_1_mechanic / layer_2_substrate /
layer_3_anchor prose keyed to the layer model. T0_Inscription_Spine carries 98 rows with
trade_9_tier_gate populated across all six tier values and payoff_chapter set. Compared to what Heaven's
Vault or Chants of Sennaar ship, our *content* substrate is larger and better sourced. The gaps in this
audit are all about surfacing, never about substance.
game models knowledge that is *canonically and permanently gone*. Ours does, deliberately, with an escalating
ladder (phonetic-without-semantic at Meroitic Ch 14 → fully undeciphered at Harappan Ch 16 → oral-not-script
at Sámi Ch 29 → songline-not-script at Australia Ch 57), an explicit anti-decoder-ring rule ("No
invented-semantic-content … Cultural-sensitivity violation. Faction penalty"), an anti-skill-failure framing
("The limit is the knowledge's absence"), and a stat — Humility — whose whole function is measuring the
player's willingness to accept it [T1_Languages_and_Script_Master §3.1-§3.4]. Chants of Sennaar always
yields; Heaven's Vault always converges. This does not, and that is a genuine design achievement worth
protecting in any later simplification pass.
culture that does not write, framed as paradox-completion — "the joik holds the substrate the runic mark
would otherwise hold" [§2.3] — is a stronger statement about what writing IS than any of the five comparator
titles makes.
check_reveal_discipline.py + check_grand_sage_silence.py, both in the30-gate config, with documented false-positive guards. Nothing in the comparator set has an equivalent.
REALM_DESIGN_PROGRAM.md §2.3]: designing theprobe that tests whether the vocabulary is wide enough, *before* ratifying the vocabulary, is the correct
and rare answer to the repo's own recurring failure class. Called out here as exemplary.
('how would they have gotten a clue?' is enforced here)" [harness/extract_spine_rows.py L53-55, with hard
sys.exit on enum violations]. This is the single most important invariant in a knowledge game and it is
already machine-enforced.
Ch 13, carried in the spine with worldstate hooks. As a *reveal-ordering structure* it is exactly what the
lens looks for; KPD-5 is about its surface, not its design.
finish in twenty minutes if they already knew everything — physical access is never gated, only
understanding. Humanity is a locked 79-node ordered spine (77 chapters + Prologue + Epilogue, cardinal
canon). Chapter order is not a gap; it is the vision. The lens's transferable half is *within-chapter* and
*within-realm* knowledge locks at the prize tier (KPD-9), never arc topology.
NEVER gate progression" and "clue = LEGIBILITY, NEVER a gate"
[docs/NATURAL_VOICE_DOCTRINE.md L8/§4; docs/spine/clues/README.md]. Obra Dinn's deduction-as-gate is
therefore explicitly NOT adopted for the critical path. Every recommendation above routes knowledge locks to
the completionist / L3 / no-kill / easter-egg tier the same ruling names as their home.
does not have to decipher. KPD-7 fills the ruling's own reserved "puzzle engagement always available"
half; it does not propose making decipherment mandatory.
docs/DESIGN_GAP_REGISTER.md L207] and isnot re-litigated here; the comparator titles agree with our existing position.
T0_Journal_Entry_Template_Registry is missing."* — DROPPED as MISSING. It is a deliberate deferral under a stated rule [T1_Build_Pipeline_Contracts §1.9 L224]. Re-cast inside KPD-1 as "the deferral's own trigger
condition has now fired," which is a much narrower and defensible claim.
seed all exist; only rows are absent. DESIGNED-UNBUILT per the wave rule.
chain_min sufficiency rule, so solvability is unspecifiable."* — DROPPED by my own reading of docs/spine/clues/README.md: the OR-together rule IS the sufficiency rule and chain_min is doctrinally 1.
The amendment is recorded in-place under KPD-4 rather than hidden, because the first draft was wrong.
[PRE_5090_BUILD_PLAN.md L1795, VOL2 L727]. The surviving finding (KPD-2) is narrower: the spec has no
wrong-attempt design.
EXPLOIT and taught_at already encode the Quantum Moon insight [REALM_DESIGN_PROGRAM.md §2.3]. KPD-9 survives only as the missing
player-side law_state.
KPD-10 survives as the asymmetry between the leak direction and the derivability direction.
real (2 lines) but it is already claimed by presentation-craft-anim-audio per
REALM_DESIGN_PROGRAM.md §4.3 (R-A16). Not re-reported here.
T0_Journal_Entry_Template_Registry returns ZERO because the CVD writes T0\_Journal\_Entry\_Template\_Registry. The tolerant pattern
Journal.{0,3}_.{0,3}Entry finds both real references. Any lens searching for a T-doc or registry name in
the _source tier docs must assume backslash-escaped underscores.
csv, not grep. build/spine_rows/*/clues.csv is 79 files of which 78 areheader-only; a naive line count reports 79 "rows."
harness/gates_config.json programmatically, not grepped, because run_gates.py names no gate literally (it iterates the config).
MISSING ×1 (KPD-6) · WEAKER ×5 (KPD-2, KPD-3, KPD-5, KPD-7, KPD-10) · DESIGNED-UNBUILT ×3 (KPD-1, KPD-4,
KPD-8) · DESIGNED-UNBUILT/timing ×1 (KPD-9) · COVERED ×7 (listed above) · DIVERGENT-BY-DESIGN ×4
(pre-registered above) · REFUTED-AND-DROPPED ×7.
Matrix cells claimed by this run: cell 1 (Pillars 5/6/7 knowledge-as-progression) and cell 2
(translation/decipherment-as-play), plus the realm widen (per-planet ruleset / Quantum Moon → KPD-9).