decisions/OPEN_DECISIONS_BRIEF_2026-07-22.md
Status: AWAITING RULING, 2026-07-22. Produced by an 18-agent Opus pass (9 deep-dive briefs +
9 fresh adversarial critics). Every brief came back SOUND-WITH-FIXES and EVERY critic amended
its recommendation — so the OPERATIVE recommendation below is the critic-amended one, per the
standing rule that the adversarial pass outranks the author.
NOTHING HERE IS APPLIED. Two things are open at once and they interact:
1. The three-rail reframe (Josh 2026-07-22: "do not invent pillars, do not invent vision").
If approved, the five rail-1/2 items below become resolve-and-show (I apply, you veto) and
only the four rail-3 items need your signature. UNAPPROVED AS OF THIS WRITING.
2. The nine decisions themselves.
They are grouped by rail so one answer sorts the other.
**✅ RULED — Josh, 2026-07-29 twenty-second sitting: "d sure but I'm okay with B too if
that's better."** OPTION D (SPLIT) stands, critic-amended (the OPERATIVE RECOMMENDATION
block below is the apply spec: all six amendments ride, incl. the stub_superseded gate-hole
closure, the three-assertion read-back, the column_aliases namespace fix, and option E
deleted as ANSWERED — no native-USTRUCT alias mechanism exists, verified in UE 5.8 engine
source). B recorded as the acceptable fallback if D's split ever proves untenable; Josh
explicitly deferred that judgement to the director. The NAMING LAW is standing: new canon
columns are always qualified, never bare keywords. Apply queued as its own task. Verbatim +
consequences: docs/spine/DECISIONS_PENDING_JOSH.md twenty-second sitting.
Blast radius: This is a CLASS, and Josh should be told he is being asked for a standing rule, not two column names.
The immediate footprint is small and exactly bounded: 2 of 36 registries, 2 columns, 0 canon values. I re-derived it rather than trusting the generator's report — a scan of all 36 live registry headers against gen_row_struct.py's own RESERVED set returns exactly T0_Questline_Index.class and T0_Worldstate_Variables.default, nothing else. T0_Familiar_Registry is also missing a struct but for an unrelated reason (unschemad stub, single title cell), so it is not part of this decision.
The class is live and will recur. docs/fidelity_baseline.json shows ten registries carrying declared added_columns, several in packs of six to nineteen at a time (T0_Creature_Roster +19, T0_Chapter_Index +18, T0_Region_Index +13), and BUILD_PLAN_END_TO_END.md:31 schedules another coordinated column pack across the Zone Catalog and six pending extensions. Every one of those packs is a fresh chance to mint a keyword. The near-miss risk is not hypothetical for this vocabulary: register is a C++ keyword and this project says "register" constantly (layer_register, Reputation_Ladder, T0_*_Registry, existence-registration marker in WS_026's own notes). operator, union, template, case, default, and class are all plausible canon column names here. Without a rule, each one re-raises this exact block and costs another decision cycle.
Downstream consumers of the ruling, all of which change behaviour once: Tools/gen_row_struct.py (the NeedsDecision path), Tools/import_registry_datatable.py (build_csv_string plus the read-back assertion), docs/REGISTRY_ROW_STRUCT_SPEC.md §4 and its new §2 naming law, the new docs/row_struct_overrides.json, docs/DOC_MAP.md, docs/fidelity_baseline.json (one --emit-baseline refresh), and the planned Tools/import_all_registries.py bulk driver — which does not exist yet, so ruling BEFORE it is written costs nothing and ruling after means retrofitting it.
Canon blast radius is nil under every option: all values, all row counts, all FKs and all variable_name keys are preserved byte-for-byte. No ws.* write in the 79-node spine is affected (the gates read variable_id/variable_name/type/domain — I confirmed via check_ws_value_form.py:159 and check_spine_graph.py:154 that NOTHING reads the default column, and nothing reads T0_Questline_Index at all). No CVD §17 or §17.1 surface is touched.
Timing argument for ruling now rather than later: the row-struct codegen is named as the critical path by five of seven build lanes and gen_row_struct.py --all --apply is a standing repeatable step. Every regeneration between now and the ruling re-prints the same two [DECISION ] lines — harmless, but it means the bulk-import driver gets written around a permanent 2-registry hole and inherits it.
Context (verified on disk):
VERIFIED ON DISK.
The generator and its refusal. C:/dev/Humanity/Humanity/Tools/gen_row_struct.py lines 41-49 hold a RESERVED set (C++ keywords + UE macros). Line 144-146 raises NeedsDecision when a CSV column name is in it, and main() catches that, prints [DECISION ], and SKIPS the registry rather than emitting. The docstring on NeedsDecision (lines 56-63) names exactly these two registries and explicitly declines to invent an alias specifier — that is correct behaviour, not a bug. The contract it implements is C:/dev/humanity-forgotten/docs/REGISTRY_ROW_STRUCT_SPEC.md §4, which lists "a column name that is a C++ or UE reserved word" as one of four hard failures.
The exact scope, re-derived rather than taken on trust. I scanned all 36 registry CSV headers under C:/dev/humanity-forgotten/registries/ against the generator's own RESERVED set: exactly two hits, T0_Questline_Index/Sheet1.csv column class and T0_Worldstate_Variables/Sheet1.csv column default. C:/dev/Humanity/Humanity/Source/Humanity/Public/Data/ contains 33 generated .h files. The remaining registry is T0_Familiar_Registry — verified an unschemad stub (its CSV is a single title cell, so it is the StubRegistry case, a different problem). So: 33 emitted, 1 unschemad, 2 blocked by this decision.
The two columns are NOT the same case — this is the load-bearing finding.
(1) T0_Questline_Index.class is FREE to rename. docs/fidelity_baseline.json carries this tab under stub_superseded, with the live header declared verbatim: ["questline_id","name","class","source_anchor","chapter_span","notes"], 23 rows. I confirmed why: the frozen reference _source/00_Tier_0_Master_Indices/T0_Questline_Index [DRAFT v0.1].xlsx has a single title-only cell T0_Questline_Index [DRAFT v0.1] and no header row at all. harness/registry_fidelity.py lines 171-176 detect that shape and record the whole live header as a declared divergence. The header was therefore authored by this project during the cascade, not migrated from Drive canon. Renaming class costs one --emit-baseline refresh of that declared candidate_header. Nothing else. I also grepped harness/ and the game repo: NO tool reads this column, and no tool reads this registry at all — harness/enrich.py:451 still describes it as "a stub", which docs/BUILD_PLAN_END_TO_END.md:395 already flags as STALE (it is populated, 23 rows, CG-06 closed). Consumer breakage from a rename today: zero.
(2) T0_Worldstate_Variables.default is NOT free to rename. I read the frozen xlsx header directly: ('variable_id','variable_name','type','domain','default','consumers','canonical_authority','schema_version_introduced','notes','extensions'). default is a FROZEN reference column at index 4. registry_fidelity.py:179 does if cand_hdr[:ref_w] != ref_hdr: and emits a column_extension finding — and there is no declaration slot for a RENAME anywhere in the baseline schema (added_columns appends only; expected_cell_diffs covers data rows). So renaming it goes red with no legal declaration, and the only two ways out are (i) a code change to registry_fidelity.py adding a renamed_columns mechanism, or (ii) editing the frozen _source/00 T0 xlsx — which CLAUDE.md explicitly forbids ("do NOT edit the T0 xlsx here").
Option (b), the UE import-alias mechanism: I CANNOT VERIFY ONE, and I will not assert it. The installed engines at C:/Program Files/Epic Games/UE_5.7 and UE_5.8 are binary-only — there is no Engine/Source tree on disk, so DataTableUtils / the CSV importer's name-matching code is not readable here, and I did not use the web. The only claim in the repo is a docstring line, Tools/import_registry_datatable.py:18: "Remaining headers must match the USTRUCT property names (or their ExportName metadata)." That parenthetical is an unverified assertion inside our own tool's comment, and the smoke test it documents (DT_ImportSmoke, 3 Chapter_Index rows via GameplayTagTableRow) used verbatim names and did not exercise any alias path. Treat option (b) as UNVERIFIED, not disproven.
Option (c) has a verified control point, and this is the second load-bearing finding. Tools/import_registry_datatable.py::build_csv_string (lines 52-67) already REWRITES the header before import: w.writerow(["Name"] + header). The CSV string handed to FillDataTableFromCSVString is constructed in our Python, from our dict-reader, on our side of the seam. A reserved-word header cell can be rewritten there deterministically, with no engine mechanism needed and no canon byte touched. That path is verified end-to-end at 79 and 281 real rows per the game repo CLAUDE.md DataTable-seam block (lines 113-119) and docs/BUILD_PLAN_END_TO_END.md:31.
Precedent — the project's own naming convention already answers the rename question. docs/fidelity_baseline.json added_columns shows this project has minted, under its own hand: node_class, ontology_class, dex_completion_class, reward_class, env_density_band_default, terrain_permanence_default, plus minigame_class in harness/rag/exr_conform.py:33. Every project-authored column of this shape is QUALIFIED. The bare class and bare default are the two outliers against a convention already applied ten times.
The sidecar the spec names does not exist. REGISTRY_ROW_STRUCT_SPEC.md §2 rule 1 points at docs/row_struct_overrides.json as the do-not-invent escape hatch; I checked — the file is absent. Any alias map has an obvious, already-specified home to be created in.
What actually breaks while these two stay out. Questline_Index: 23 rows (SQ1-SQ12, TRADE_01-10, LEG_WPN_036) that the quest lane needs so questline_id resolves in-engine (BUILD_PLAN_END_TO_END.md:383). Worldstate_Variables is the cross-lane trunk (42 rows, the whole ws.* key space; ws_writes on all 281 Scene_Spec rows has no consumer; BUILD_PLAN_END_TO_END.md:532 H12) — BUT its ruled engine path is NOT primarily a DataTable: BUILD_PLAN_END_TO_END.md:85 and :740 specify Tools/gen_gameplay_tags.py / generate_ws_tags.py reading the 42 CSV rows in Python and emitting a GameplayTag ini, feeding UWorldStateSubsystem : UGameInstanceSubsystem holding TMap<FGameplayTag,FWorldStateValue>. That path never needs a row struct. What the missing struct actually costs is the boot-time DEFAULTS/DOMAIN table — i.e. the default column itself is precisely the payload with no other delivery vehicle. Real, but narrower than "Worldstate cannot enter the engine".
No canon VALUES are at stake in any option. class holds side|trade|legendary (count-canon 12/10/72 per CVD §14.3 + T1_Build_Pipeline_Contracts); default holds per-variable default values. Every option preserves all values byte-for-byte; only column NAMES and generator behaviour move.
Why this needs a ruling: Three reasons, each independently above the autonomy line.
1. It changes a T0 registry header. CLAUDE.md puts T0 registries at authority tier 3 — structured row-level canon — and the standing protocol says registry/canon edits are NEVER "trivial mechanical" for review purposes. T0_Worldstate_Variables is ACTIVE and is the single most cross-consumed registry in the repo (4+ build lanes, 42 rows, the entire ws.* key space).
2. One branch requires shifting the declared fidelity baseline, and the harder branch requires CHANGING THE GATE ITSELF. registry_fidelity.py has no legal way to declare a renamed frozen column; taking that path means either writing a new declaration mechanism into the gate or editing the frozen _source/00 T0 xlsx that CLAUDE.md forbids. Loosening a gate to fit a build convenience is a ruling, not an implementation detail.
3. It is a CLASS, not a one-off, and the right output is a standing rule (a column-naming law plus a declared alias mechanism) that binds every future registry extension. Standing rules are Josh's to set.
What is NOT being asked: no canon value changes, no chapter/numerical/naming/hard-line/§17 content is touched, and no §17.1 care question arises — this is a pure schema-and-toolchain decision.
Options considered:
gen_row_struct.py keeps printing [DECISION ] and skipping; 33 of 36 structs exist; T0_Questline_Index and T0_Worldstate_Variables carry no canon across the DataTable seam. The ws.* GameplayTag path (gen_gameplay_tags.py) still works independently, so ws.* keys can still reach the engine — what stays stranded is the per-variable defaults/domain table and the whole questline table.questline_id never resolves in-engine, so the quest lane's 23 questline rows stay unbound. UWorldStateSubsystem has no canonical source for boot defaults, which invites someone to hard-code them in C++ — that is a canon fork waiting to happen, and hard-coded defaults drifting from the registry is exactly the silent-divergence class this project keeps getting bitten by. Also non-terminating: the next registry extension that mints a register or operator column re-raises the same block with no rule to apply.NeedsDecision docstring, the stale-override hard failure at spec §4, the --emit-baseline discipline). But it is the ONLY option that leaves canon stranded, and 'we built it then never wired it' is a named recurring failure in this repo (memory: anti-orphan-wire-everything-doc-map).class → questline_class, default → default_value) — One mechanism, applied uniformly: make the canon headers legal C++ identifiers and let the generator's verbatim-mirror law (spec §2) stand untouched. questline_class refreshes trivially via --emit-baseline (stub_superseded). default_value does NOT — it is a frozen reference column, so this branch also requires adding a renamed_columns declaration block to harness/registry_fidelity.py (the alternative, editing the frozen _source/00 xlsx, is forbidden by CLAUDE.md and should not be considered).<qualifier>_class / <qualifier>_default convention (10 prior instances). Any import vector — our script, the editor's own CSV drag-drop, a future tool — works identically. Resolves the class permanently with one rule: canon columns are always qualified.default also appears in prose across T1_Integrity_Paths_Worldstates_Master and the WS7 wiring notes (harness/workflows/ws7_wiring_design.js:12 literally spells the schema as variable_id/name/type/domain/default/consumers), so a rename needs a documentation sweep or it leaves stale references — and stale names in source docs are a named hallucination cause in CLAUDE.md.<qualifier>_class / <qualifier>_default convention is already the project's de-facto law (node_class, ontology_class, reward_class, dex_completion_class, env_density_band_default, terrain_permanence_default). Registry schema changes with --emit-baseline in the same commit are routine and ruled (CLAUDE.md Phase 0). Changing the GATE to permit a new divergence class has no precedent I found.class_ / default_, with an import shim — Create the spec's already-named-but-absent docs/row_struct_overrides.json with a column_aliases block; teach gen_row_struct.py to emit the aliased member (and record the mapping in the generated header comment) instead of raising NeedsDecision; teach build_csv_string in import_registry_datatable.py to rewrite those header cells before FillDataTableFromCSVString — the same function that already prepends the Name column.build_csv_string rewrites headers today). Needs no engine mechanism and no unverifiable claim. One mechanism covers the whole class forever, including any future register / operator / union column. Cheapest to implement — roughly three small edits plus one new JSON file.build_csv_string (the editor's own CSV import, a hand-run FillDataTableFromCSVString, a future bulk tool) binds every other column fine and silently drops the aliased one. The importer's existing read-back checks ROW COUNT only — it would report success. That is precisely this project's signature defect class (the chunk_id collapse that reported success while collapsing 65 books; the silent no-op director scripts; the stale-override no-op the spec §4 already guards against). It also makes the canon CSV no longer directly importable by a human, and leaves the two ugliest column names in canon permanently, so the convention question is deferred rather than answered.NeedsDecision docstring).T0_Questline_Index.class → questline_class (zero consumers, stub_superseded, one --emit-baseline), so it needs no shim ever. Leave T0_Worldstate_Variables.default byte-exact and cover only it with a declared alias in a new docs/row_struct_overrides.json column_aliases block, consumed by BOTH gen_row_struct.py (emit member default_value, alias recorded in the generated header comment) and build_csv_string. Amend spec §4 to 'reserved word = hard failure UNLESS a declared alias exists', and add a naming law: new canon columns are always qualified (<qualifier>_class, <qualifier>_default), never bare keywords. Gate the shim with a COLUMN-LEVEL read-back (assert the aliased field is non-empty on a known row after fill), not the existing row-count check.renamed_columns mechanism, no frozen-xlsx edit. The silent-drop surface shrinks from two columns to exactly ONE, declared in one file, with a column-level assertion covering it. The naming law prevents any recurrence, so the alias map should stay a one-entry file forever — and if it ever grows, that growth is itself the signal that the law is being ignored. Both registries enter the engine, closing 35 of 36.default to a member declared UPROPERTY(meta=(DisplayName="default")) FString default_value; — via a source read (needs an engine-source install; the local UE_5.7/5.8 are binary-only) or an empirical smoke test: one throwaway USTRUCT with one aliased member, one two-column CSV, FillDataTableFromCSVString, then read the member back.import_registry_datatable.py:18, '(or their ExportName metadata)') into either a fact or a corrected comment — that line will otherwise mislead a future agent. The smoke test is small and the seam it runs on is already proven.DisplayName metadata is WITH_EDITORONLY_DATA, so a mechanism that works in-editor could behave differently in a packaged build — a green smoke test would NOT by itself license shipping it without a packaged-build check.Author recommendation: Take D — SPLIT, and treat the output as a standing rule, not a one-off patch.
Concretely, four things land together in one commit:
1. Rename T0_Questline_Index/Sheet1.csv header cell class → questline_class; refresh docs/fidelity_baseline.json via registry_fidelity.py --emit-baseline in the same commit (this only rewrites the declared candidate_header under stub_superseded, because the frozen xlsx is a title-only stub). Zero consumers read that column today — I checked the whole harness and the game repo — so nothing else moves. harness/enrich.py:451's stale "T0_Questline_Index is a stub" note should be corrected in the same pass since it is already known-wrong.
2. Create docs/row_struct_overrides.json — the file the spec has named since v1.0 and which does not exist — containing exactly one alias entry: T0_Worldstate_Variables → {"default": "default_value"}. T0_Worldstate_Variables.default stays byte-exact; the frozen xlsx is not touched and the fidelity gate is not widened.
3. Teach both ends of the seam to read that one file: gen_row_struct.py emits FString default_value; with the alias stated in the per-column comment instead of raising NeedsDecision; build_csv_string in import_registry_datatable.py rewrites that header cell before FillDataTableFromCSVString, in the same function that already prepends the Name column.
4. Amend docs/REGISTRY_ROW_STRUCT_SPEC.md: §4's reserved-word hard failure becomes "hard failure UNLESS a declared alias exists in row_struct_overrides.json", and a new naming law is added — new canon columns are always qualified (<qualifier>_class, <qualifier>_default), never a bare keyword — with the ten existing instances cited as the convention this codifies rather than invents. Update docs/DOC_MAP.md for the new overrides file.
One hard condition on the recommendation, and I would not take D without it: the importer's read-back must be upgraded from ROW COUNT to a COLUMN-LEVEL assertion for aliased columns — after fill, read one known row and assert the aliased field is non-empty, exiting non-zero otherwise. Without that, this option's failure mode is a silently-dropped column reported as success, which is this project's single most-repeated defect (the chunk_id collapse, the silent no-op director scripts, the stale-override no-op that spec §4 already exists to catch). The whole reason D beats C is that it shrinks that surface to one declared column — the assertion is what actually closes it.
Run E as a cheap, non-blocking side-quest the next time the editor is live with NeoStack up. If a genuine UE-side alias mechanism verifies (including in a packaged build, not just in-editor — DisplayName metadata is WITH_EDITORONLY_DATA), swap the import shim for it and delete the header rewrite; the alias map file stays as the declaration either way, so nothing has to be redesigned. Either way, correct the unverified "(or their ExportName metadata)" parenthetical at Tools/import_registry_datatable.py:18 — as written it will mislead the next agent into assuming a mechanism nobody has tested.
Reject A: it strands 2 of 36 registries on the trunk five of seven lanes named as critical path, and — worse — leaves UWorldStateSubsystem with no canonical source for boot defaults, which invites hard-coded C++ defaults drifting silently from the registry.
Reject B specifically because of what it does to the gate. Renaming default has no legal declaration slot in registry_fidelity.py, so B means either editing the frozen _source/00 T0 xlsx (forbidden outright by CLAUDE.md) or adding a renamed_columns mechanism to the fidelity gate. That gate is one of the few things in this repo whose exit code is genuinely trustworthy, hardened twice adversarially; widening it to accommodate a build convenience trades a durable safety property for a cosmetic one.
Reject C because it takes the silent-drop risk on class for no benefit whatsoever — that column is free to rename, has zero consumers, and its bare name violates a convention the project has already applied ten times.
Reasoning: The whole decision turns on one asymmetry I verified rather than assumed: the two columns look identical as a problem statement and are structurally opposite as a fix.
T0_Questline_Index has no header in the frozen _source xlsx at all — it is a single title cell. harness/registry_fidelity.py:171-176 therefore routes it through stub_superseded, recording the entire live header as a declared divergence. That header is a project artifact authored during the cascade, not migrated Drive canon, and I confirmed no tool anywhere reads its class column (enrich.py still believes the registry is empty). Renaming it is as close to free as a registry edit gets, and it moves the column onto a convention the project has already applied ten times in added_columns — node_class, ontology_class, reward_class, dex_completion_class, env_density_band_default, terrain_permanence_default. Precedent is the strongest argument available, and here it points one way without ambiguity.
T0_Worldstate_Variables.default is a frozen reference column at index 4 of the migrated xlsx — I read the header directly rather than inferring it. registry_fidelity.py:179 compares the candidate header prefix byte-for-byte against the reference and has slots for APPENDED columns and for CELL diffs, but none for a rename. So the honest framing is not "should we rename it" but "are we willing to change the fidelity gate, or edit a file CLAUDE.md forbids editing, in order to rename it". Framed that way the answer is clearly no: the gate's trustworthiness was won twice over (docs/PHASE0_LESSONS.md), and this repo's own memory holds a case where 15 gates stayed green while 558 books went unsearchable. Loosening the one mechanism that catches undeclared canon drift, to avoid a three-line header rewrite in a Python function that already rewrites headers, is a bad trade at any exchange rate.
That leaves the alias, and the question of where it lives. I chose the seam we own and I VERIFIED we own it: build_csv_string at import_registry_datatable.py:52-67 constructs the CSV string in our Python and already mutates the header (w.writerow(["Name"] + header)). No engine mechanism is asserted, which matters because I could not verify one — the local UE 5.7/5.8 installs are binary-only with no Engine/Source, so the CSV importer's name-matching code is unreadable here, and the only alias claim in the repo is an untested parenthetical in our own docstring. Recommending a mechanism I cannot ground would be the exact failure the generator's NeedsDecision docstring was written to avoid.
The last piece is why the recommendation carries a hard condition rather than a suggestion. C and D both accept a silent-drop hazard; the difference is surface area and detection. This project's recurring, signature defect is not "something broke" — it is "something reported success while dropping data": the chunk_id collapse that flattened 65 books while the drain reported success and 16 gates stayed green; the two director-script silent no-ops caught by critics in the flores audit; the stale-override no-op that spec §4 already hard-fails on. The importer's current read-back counts ROWS, which is structurally blind to a dropped COLUMN. So the alias without a column-level assertion reproduces the exact failure shape this repo has been burned by three times. With the assertion, the residual risk is one declared column on one sanctioned path, checked on every import. That is an acceptable trade; without it, C and D are both worse than A.
Sizing, finally: this is a small decision wearing a large coat. No canon values move under any option, no §17 or §17.1 question arises, and the implementation is under an hour. What makes it worth Josh's attention is not the two columns — it is that the ruling sets a naming law binding every future registry extension, on a repo where extensions land in batches of six to nineteen columns at a time.
Strongest objection (author's own): The strongest objection is that D is architecturally incoherent: it answers one instance of a problem class by renaming and the other by aliasing, which means the repo carries two mechanisms for one defect. A future agent reading row_struct_overrides.json will find a single mysterious entry and no visible reason why class was not handled the same way — and the honest answer, "the fidelity gate happened to have a declaration slot for one and not the other", is a TOOLING accident driving a CANON schema decision. That is backwards on its face. A purist would say: pick one mechanism, use it for both, keep canon headers untouched (option C) or make every column legal (option B), and accept the cost. Inconsistent-by-accident conventions are exactly what rots in a repo this size, and this repo has a named memory entry about building things and then never wiring or explaining them.
This objection has real force and I would not dismiss it. Three things blunt it without refuting it. First, the asymmetry is not arbitrary once stated: one column is project-authored and consumer-free, the other is migrated frozen canon that the gate pins — that IS a genuine difference in the objects, not just in the tooling, and it survives writing down. Second, the naming law in item 4 is what makes the split coherent rather than accidental: the rule is "qualified names always, alias only where a frozen reference forbids the rename", which is a stateable principle, not a coin flip — and it predicts correctly for every future case. Third, the alias map should remain a one-entry file forever; if it ever gains a second entry, that is the signal the law is being ignored, which makes the smell self-diagnosing.
But if Josh weighs uniformity above gate-integrity, B is the defensible alternative and I would not argue hard against it — it produces the cleanest end state, eliminates the silent-drop mode entirely, and the renamed_columns gate mechanism could be written narrowly enough (explicit old→new pairs, verified against the reference header, failing on any undeclared prefix mismatch exactly as today) that the gate loses very little. The deciding question is simply: is a rename-declaration slot in registry_fidelity.py an acceptable widening? I say no, because that gate is load-bearing for canon integrity across 36 registries and its value comes from having no soft edges. Josh may reasonably say yes.
A secondary objection worth naming: I recommend against B partly on a documentation-sweep cost (default appears in prose across T1_Integrity_Paths_Worldstates_Master and ws7_wiring_design.js:12), but that sweep is small and the project does living-source sweeps routinely. That argument is the weakest leg of my case and should not be the one carrying weight.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (3):
Option the critic says was MISSING: Materialize the alias as a GENERATED ENGINE-FACING CSV artifact rather than an in-memory header rewrite: a deterministic script emits build/dt_csv/<registry>.csv with the aliased header, canon CSVs stay byte-exact, and every import vector (the scripted importer, the editor's own drag-drop, the unwritten Tools/import_all_registries.py) consumes the aliased artifact — closing D's residual bypass hazard by construction instead of by a per-tool assertion. Trade: introduces a generated-artifact staleness class. It competes directly on the axis the brief calls decisive and may be the correct implementation of D's step 3.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
KEEP D (SPLIT). The load-bearing asymmetry is real and I verified it independently: T0_Questline_Index's frozen reference is a single title cell (so its header is project-authored, consumer-free, and routed through stub_superseded), while T0_Worldstate_Variables.default sits at index 4 of a genuine frozen 10-column header that registry_fidelity.py:179 pins with no rename slot. Rename the free one, alias the frozen one, set the naming law. Reject A, B and C for the reasons given. But land D with these amendments:
1. DELETE OPTION E — it is answered, not open. UE_5.8's Engine/Source IS on disk. DataTable.cpp:811-816 matches CSV columns via FindFProperty(name) then GetPropertyImportNames, which is exactly {Prop->GetName(), Prop->GetAuthoredName()}, and GetAuthoredName differs from the field name only for UserDefinedStructs. There is NO alias mechanism for a native USTRUCT. Drop the 'run E as a side quest' item and the 'if a UE mechanism verifies, swap the shim' contingency; correct Tools/import_registry_datatable.py:18 by deleting '(or their ExportName metadata)' as false-for-native-structs, and record the engine-source citation in the spec so nobody re-opens it. This makes the header rewrite provably the only vector — D gets stronger, not weaker.
2. ADD A SECOND HARD CONDITION: close the stub_superseded hole in harness/registry_fidelity.py before or with the Questline rename. Today stub_superseded is recorded and emitted but never compared and never stale-checked, and fk_spec.json does not cover the registry — so the rename is gate-invisible and the declared candidate_header would silently rot. Give it the same observed-vs-declared comparison plus stale-FAIL that added_registries / added_tabs / extension_hashes / expected_cell_diffs already have. Without this, D's central claim ('the gate keeps its teeth') is false for the half of the decision it applies to, and the commit would be a T0 header change no gate would ever notice.
3. FIX THE OVERRIDES FILE SHAPE. docs/row_struct_overrides.json already has a written contract — spec §2 rule 1, keyed "<registry>": {"<column>": "<UEType>"} — which gen_row_struct.py already reads (lines 30, 213-215, 231, 181). The prescribed entry T0_Worldstate_Variables -> {"default": "default_value"} parses as a TYPE override under that contract, and a column_aliases block nested under the registry key trips the §4 stale-override GenError, which returns 2 and kills the entire --all run. Put aliases in a distinct top-level section (e.g. {"column_types": {...}, "column_aliases": {...}}), extend generate()'s signature, and move the RESERVED check at line 144 to run after alias resolution. State both in the §4 amendment.
4. WIDEN THE READ-BACK CONDITION FROM ONE ASSERTION TO THREE. FillDataTableFromCSVString returns Result != nullptr && !bWasCancelled; the 'Cannot find Property for column' problem never reaches that return value. And import_registry_datatable.py:154-157 currently prints a row-count mismatch as a WARNING and exits 0, and never asserts the fill_ok it already captures. So require: (a) column-level non-empty assertion on the aliased field for a known row, (b) non-zero exit on row-count mismatch, (c) assert fill_ok. All three are the same three-line change and the same defect class.
5. PRESENT THE GENERATED-CSV VARIANT (see missing_option) as the implementation choice for step 3, with its staleness trade named, rather than defaulting silently to the in-memory rewrite.
6. CORRECT THE CITATIONS BEFORE JOSH READS IT: ws_writes is on T0_Boss_Encounter_Registry (281 rows), not Scene_Spec (16 rows, no such column); the 79/281 evidence lives in BUILD_PLAN_END_TO_END.md and Content/Data/Registries/*.uasset, not in the game CLAUDE.md block cited (which documents a 3-row smoke); the qualified-column convention has SIX verified instances, not ten (minigame_class is an enum value); and build_canon_graph.py does read T0_Questline_Index (23 nodes) even though nothing reads its class column.
The care assessment needs no change — this is correctly identified as a pure schema-and-toolchain decision with no §17.1 surface, and the brief did not inflate one.
SUPERSEDED (2026-07-22, D-FAMILIAR-STUB APPLIED as EXECUTION). This brief's framing premise — that the registry is a headerless 35-byte / maxcols=1 stub awaiting a schema-vs-fold ruling — was overtaken by commit8306835(the registry gained its schema) and closed out this session:T0_Familiar_Registry [DRAFT v0.1]/Sheet1.csvis now 31 columns × 22 rows (FAM_01–FAM_22), COPY-ONLY fromT3_Familiars_Named [ACTIVE v1.0]§2/§3/§4/§5. The two-condition FOLD test the brief argued for RESOLVED to SCHEMA-IT for familiars (the target is not in the frozen_source/00set and no host carries the class as live rows), so options B (fold into Creature_Roster), C, and E are foreclosed by the artifact; option A (schema-via-stub_superseded) shipped. Wired:docs/fk_spec.json(creature_ref → Creature_Roster.creature_id; legendary_species_ref → Hard_Lines.rule_id, 22/22),docs/fidelity_baseline.json(31-col stub header re-emitted, gate green),docs/registry_extensions.json(_deferred: familiar-bond-ladderaddress),docs/DOC_MAP.md(moved to Populated & wired). Still deferred WITH an address: the 110-row bond-ability ladder and the 17 spine deferral strings (stay verbatim until the ladder table lands). No open Josh fork here except the one escalation below (the 12 elven fairy-realm species NAMES — unminted, non-blocking).
Blast radius: A CLASS RULING WITH A ONE-OFF TRIGGER — and Josh should know which half he is being asked for.
The one-off: T0_Familiar_Registry is the LAST headerless registry in the tree (census this session: 36 registries, exactly one with maxcols=1). Ruling it closes that category permanently. The three remaining empty registries — Quest_Seed (0 rows/21 cols), RNG_Drop_Table (0/18), Hollow_Codex (1/14) — all have real headers and are a different, cheaper problem: they can already receive rows and need population, not schema.
The class: the ruling settles the general question "when does a stubbed T0 registry get its own schema versus get folded into a neighbour under a discriminator?" The answer this brief argues for, and the one worth writing down as a rule, is a two-condition test taken from the folklore ruling's own reasoning — FOLD only when (i) the target registry does not exist in the frozen _source/00 T0 xlsx set AND (ii) the host table is already carrying live production rows for the class being folded. Otherwise SCHEMA IT, narrow, via stub_superseded. That rule would have produced the correct answer for folklore (fold) and for familiars (schema), and it gives the next stub a deterministic path instead of a fresh argument.
Immediate downstream touched by the ruling either way: 40 declared expected_cell_diffs in docs/fidelity_baseline.json (Chapter_Index col 22); 39 more Chapter_Index cells carrying unnormalized token soup that a controlled vocabulary would normalize; 17 spine entries with live deferral strings; 5 UE5 subsystems in T1_Build_Pipeline_Contracts declaring reads; 2 harness modules (deep_read.py:52, exr_conform.py:86); 1 feed doc with 2 pending proposals; enrich.py:448's per-chapter familiar pull; docs/fk_spec.json; docs/registry_extensions.json; docs/DOC_MAP.md.
TWO ITEMS THAT RIDE ALONG BUT ARE SEPARATE RULINGS, NOT PART OF THIS ONE:
1. ROW SCOPE (cardinal numerical canon — needs Josh explicitly). 22 player slots? 33 legendary species (21 mortal + 12 elven, HL_0057)? Or 45, adding the 12 Father-bonded variants named in T1_Build_Pipeline_Contracts §341 and given their own father_variant_mesh_id_ref in §417? The recommendation above assumes 22 with a species_tier column able to carry the 12 elven later; if Josh wants 33 at first landing, say so and the header is unchanged, only the row count moves.
2. A GENUINE CANON CONFLICT between two ACTIVE tier docs, surfaced by this reading and NOT resolvable by schema: T3_Familiars_Named §5.8 states L3 Drifting leaves the 22nd slot UNOCCUPIED with no binding stone; T3_Creatures_Tameable §2.4 states L3 Drifting resolves "to the closest Finale mechanic," which grants one. One of the two is wrong. This is path-variable resolution canon and needs its own ruling before path_variable_resolution can be populated for the L3 band.
THREE GROUNDED IN-PLACE FIXES that need no ruling (living-source discipline, evidence cited above) and should land with whatever is chosen: the retired familiar names "Bodhi" and "Murugan" surviving at T3_Creatures_Tameable line 239 and T3_Familiars_Named lines 1014/1075/1083; the §6.3 reappearance table still homing four familiars at "Ch 60 Asia Revisit" against its own §2 prose recording the D-22 move to Ch 63; and T3_Creatures_Tameable §3's "222 entries" against §1.1/§3.1's "420-plus".
Context (verified on disk):
VERIFIED BY READING. The stub: registries/T0_Familiar_Registry [DRAFT v0.1]/Sheet1.csv is 35 bytes, one line, containing only its own title. A census of all 36 live registries (script run this session) shows it is the ONLY registry in the tree with no header at all — maxcols=1. Three others are empty-but-schemad (Quest_Seed 0 rows/21 cols, RNG_Drop_Table 0/18, Hollow_Codex 1/14); those can already receive rows. This one cannot.
THE CANON IT WOULD MIRROR IS ALREADY DONE. _source/03_Tier_3_Characters/T3_Familiars_Named [ACTIVE v1.0].md is 1,095 lines and fully specifies all 22 familiars — §1.1 the 21+1 architecture, §1.3 sustained-vs-rotational (Shell W1 is the sole SUSTAINED), §1.4 five-band integrity combat rules, §1.5 the five-element bond quest, §1.6 the five-rung bond ladder mapped to the 12-tier Hermetic framework, §1.7 the Familiar Garden + the breeding firewall, §5 the path-variable 22nd slot with per-band resolution, §6.3 a full cross-chapter reappearance table, §7.1 exactly three evolution arcs (Koi→Dragon, Kasa→Cosmic Turtle, Raven→Huginn-Muninn). This is not a registry that needs canon invented; it needs canon TRANSCRIBED.
IT IS A REAL T0 REGISTRY, NOT A PHANTOM. _source/00_Tier_0_Master_Indices/T0_Familiar_Registry [DRAFT v0.1].xlsx exists in the frozen fidelity reference set. This categorically separates it from T0_Folklore_Entity_Registry, which per docs/proposals/PHANTOM_REGISTRY_ROUTING_FINDING.md existed in NEITHER tree and was retired precisely because it was never real.
THE COST, MEASURED. (a) registries/T0_Chapter_Index [ACTIVE v1.2]/…csv column 22 familiars_encounterable: 39 rows (CH_02–CH_41) carry unnormalized token soup in three incompatible encodings (SHELL_W1_BOND, KOI_W3_BONDS_HERE_DRAGON_GATE_koi_to_dragon_evolution, no new bond; … free prose, none this chapter (no new bond)); the other 40 rows — Prologue, CH_01, and CH_42 through CH_77 plus Epilogue — still carry the literal string [POPULATE→T0_Familiar_Registry chapter_first_appearance + pre_bond_encounters], declared as 40 expected_cell_diffs in docs/fidelity_baseline.json. That placeholder NAMES two columns the consumer expects. (b) 17 spine entries (docs/spine/CH_04.md … CH_19.md and others) say verbatim "exact bond mechanics deferred to the T0_Familiar_Registry" — 17 dangling deferrals at an empty file. (c) _source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md has FIVE UE5 subsystems declaring they read it (Blueprints §71, PCG §73, Niagara §77, Combat §89, Meshy §359) and names required columns — §359 familiar_id, name, category, species_base, morphology_tags, integrity_reactions; §158 ue5_familiar_class_ref, mesh_id_ref, behavior_tree_class_ref; §417 adds elven_realm_variant_mesh_id_ref + father_variant_mesh_id_ref. (d) harness/rag/deep_read.py:52 and exr_conform.py:86 route familiar_candidate here; docs/proposals/cross_pipeline_feeds/FAMILIAR_FEED.md holds 2 live proposals (Blagdaross, Pegasus of the Cloud-Fields). (e) harness/enrich.py:448 pulls familiar_slot_eligible from Creature_Roster into EVERY chapter build pack — and that column is empty on 132/132 rows, so the cascade's familiar pull returns blank by construction. (f) docs/BUILD_PLAN_END_TO_END.md names it three times independently — line 81 ("a ONE-LINE file with no header at all"), line 147 (listed under the recurring PRODUCERS-WITHOUT-CONSUMERS lesson), line 497 (a build row scored nothing_buildable_now).
WHAT OPTION (b) ACTUALLY LOOKS LIKE IN THE DATA. T0_Creature_Roster has 132 rows / 44 columns and does carry familiar_slot_eligible and familiar_cross_ref. But: familiar_slot_eligible is EMPTY on 132/132 rows — it has never held a value. familiar_cross_ref is populated on exactly 7 rows, and every one reads as an OUTWARD pointer away from the roster — "Khan G1 — non-Khan wild cohort", "Paravani F2 — wild peafowl cohort", "Ora G5 (Ch 60 revisit) — pre-bond observable cohort". And ZERO of the 22 named familiars have a Creature_Roster row (checked all 15 canonical names). That matches T3_Creatures_Tameable [ACTIVE v1.0] §1.1 verbatim: "the named familiar carries one entry; the regional population around the named familiar carries T3_Creatures_Tameable entries." The live column semantics are a cross-reference to a separate table, not a fold.
PRECEDENT, BOTH DIRECTIONS. FOR authoring: docs/fidelity_baseline.json carries a stub_superseded block with FOUR registries that were one-cell stubs and were superseded with a candidate_header + candidate_rows — Boss_Encounter (26 cols, 281 rows), School_Registry (15 cols, 13 rows), Weapon_Registry (10 cols, 72 rows), Questline_Index (6 cols, 23 rows). All four are live today. docs/fk_spec.json's note records the completion of that lifecycle: those registries were "previously cell-fidelity-DECLARED as stub_superseded but not FK-checked" and were then registered for FK validation. The path is proven four times. AGAINST (i.e. for folding): the folklore fold Josh ruled 2026-07-22 — but read its own reasoning: it folded because the target registry never existed AND Creature_Roster was already "purpose-built for it … with species_class=folklore already carrying live rows" (12 of them). Neither condition holds here.
CARE SURFACE (thin but real, and inflation would be the defect). Of the 22, a MINORITY carry elevated care: Boto W6 (Ch 50, Pan-Amazonian, CVD §6 witness-only night-form), Reindeer G6 (Ch 29 Sámi noaidi), Bowhead W7 (Ch 56 Inuit ceremonialism), Jaguar G7 (Ch 48 Maya). Plus one already-applied §17.1 fix: docs/spine/CH_07.md:334 records the F2 peacock renamed to PARAVANI (the vahana) because a deity-name on a controllable familiar is the /Kaggen violation. Plus one hard line: §9 records "no familiar bond quest at Ch 57 per CVD §17.1 plus Ch 57 hard line." The other ~17 are ordinary animals with ordinary care load. A schema that carries cultural_care_register with an honest minority-elevated distribution makes those four enforceable; a schema that flags all 22 elevated would be care-tier inflation and would defang the roster.
DEFECTS THE STUB IS ALREADY CAUSING (found while reading, evidence not assertion). (1) Stale familiar names surviving in ACTIVE tier docs — T3_Creatures_Tameable line 239 lists "Bodhi Ch 06, Murugan Ch 07" (retired names; the canon is Muthu G2 and Paravani F2), and T3_Familiars_Named ITSELF still says "Murugan's tail eyespots" (§7.2 line 1014) and "Murugan Crown-seat prerequisite" (lines 1075, 1083). Four occurrences of retired familiar names across two ACTIVE docs — exactly the deprecated-name-causes-hallucination class CLAUDE.md warns about, and exactly what a keyed table makes impossible. (2) T3_Familiars_Named §6.3 still homes Khan/Muthu/Kira/Paravani at "Ch 60 Asia Revisit" while its own §2 prose records the D-22 ruling moving them to a Ch-63 default — the table and the prose disagree inside one doc. (3) A GENUINE CANON CONFLICT between two ACTIVE docs: T3_Familiars_Named §5.8 says L3 Drifting leaves the 22nd slot UNOCCUPIED with no binding stone; T3_Creatures_Tameable §2.4 says L3 Drifting "resolve[s] to the closest Finale mechanic," i.e. gets one. That one is a ruling, not a schema — flagged separately. (4) T3_Creatures_Tameable §3 says "222 entries" where §1.1 and §3.1 say "420-plus" — internally inconsistent in one doc.
Why this needs a ruling: Three reasons the loop cannot close this alone. First, it touches cardinal numerical canon: the row scope decision is literally "what is a row here" against CVD §17.12 / HL_0057 / HL_0058 — 22 player slots, 33 legendary species (21 mortal + 12 elven), and per T1_Build_Pipeline_Contracts §341 a further "12 individual Father-bonded familiar variants." 22, 33, or 45 rows are three different canon assertions and picking one is not a grounded call. Second, retiring a registry that exists in the frozen _source/00 T0 xlsx set is a structural T0 change — the same class Josh personally ruled on 2026-07-22 for the phantom, and the fidelity gate's reference shifts either way. Third, the FAMILIAR_FEED queue routes third-party proposals (Blagdaross, Pegasus) at this target, so the ruling decides whether an entire ratification lane has a landing or stays a dead letter. The COLUMN SET, by contrast, is grounded transcription and does not need Josh — it is included below so the ruling is legible, not so it is approved.
Options considered:
bond_abilities keyed (familiar_id, bond_level) carrying the 5-rung ladder for all 22 (110 rows) with its Hermetic-tier mapping and gates. Declare in fidelity_baseline stub_superseded, register in fk_spec, add to DOC_MAP. One landing, everything closed.familiars owner key to registry_extensions.json. Then the 5-rung ability ladder lands as a bond_abilities tab and the 8 engine columns land on the extension rail, each when its own consumer is real.Author recommendation: D — author the narrow 22-row T0_Familiar_Registry now via the proven stub_superseded path, with the ability ladder and engine columns explicitly scheduled on the declared extension rail. Reject B outright; treat C as the fallback only if the batched extension pass is landing within days.
Reasoning: B fails on its own precedent's terms. The folklore fold was correct because (i) the target registry did not exist and (ii) the host table was already in production for that class. I checked both here and both are false: the xlsx is in the frozen T0 reference set, and familiar_slot_eligible is empty on 132/132 rows. Beyond that, folding does active damage in two places the data shows plainly. It inverts familiar_cross_ref, whose seven live values all mean "the cohort around the familiar, which is not the familiar." And it demotes the breeding firewall — §1.7's "the firewall is load-bearing and absolute," that bred offspring are "never a 22-slot familiar occupant" — from a table invariant (this table's rows are all non-breedable) to a query condition (filter by discriminator, then check). Given that Creature_Roster's entire husbandry vertical exists to breed ordinary fauna, putting the un-breedable legendaries in the same table is placing the exception inside the mechanism it exists to bound. That is the wrong direction on the one rule the familiar system marks absolute.
A versus D is the real choice, and D wins on how this repo actually succeeds. Every registry that got out of stub state here landed narrow and grew under declared ownership — Weapon at 10 columns, School at 15, Creature_Roster's 44 accumulated across five owner systems. A tries to land the whole thing at once, and about a third of the deep surface cannot be landed honestly: §1.7 says "numerical husbandry parameters are pending authorial assignment" in its own text, and the eight engine columns from Pipeline Contracts §158/§404/§417 have no populator, which would reproduce the mesh_id_ref-at-0/72-with-no-populator defect BUILD_PLAN line 147 already lists as recurring. D lands only what ACTIVE canon can fill today, which is also exactly the do-not-invent-safe subset.
C is the one I take most seriously against my own recommendation, because BUILD_PLAN line 81's batching argument is correct and this project has been burned by stale baselines. What breaks the tie is sequencing: the spine is 79/79 complete. The 17 chapters that wrote "deferred to the T0_Familiar_Registry" are finished prose. Every additional month of deferral converts authoring into retrofit, and retrofit into already-built spine prose is precisely the operation MEMORY records as introducing new reveal and §17.1 leaks that gates cannot catch. Deferring is cheap in tokens and expensive in defect surface.
On care: the correct move is a cultural_care_register with an honest minority-elevated distribution — Boto (Pan-Amazonian, CVD §6 witness-only), Reindeer (Sámi noaidi), Bowhead (Inuit ceremonialism), Jaguar (Maya) — plus hard_line_anchors carrying the Ch 57 no-bond line and HL_0057/0058. The other seventeen are animals and should be registered as animals. Flagging all 22 elevated would be the inflation defect, and it would be the schema quietly re-defanging a system that already had to be un-defanged once (the CH_07 Paravani fix was a real §17.1 correction; the surrounding roster needs no such treatment).
One thing D does that neither A nor B does cleanly: it makes gaps fail loudly. Registering bond_quest_npc_id -> Character_Index immediately surfaces that Nehemet-Awai, the Ch 15 Sobek priestess named in §2 W2 as the bond gatekeeper, has NO Character_Index row (Mama Klara CHAR_0006 and Mahout Bandula CHAR_0044 both resolve; she does not). That is the harness working as designed.
Strongest objection (author's own): The spine is the easy half, and landing it may buy permission to never finish. What the 17 spine entries actually deferred is "bond MECHANICS" — the five-rung ability ladder, the integrity-band combat rules, the Animal Communication Mastery gate. D lands none of that. So the plausible outcome is: the registry gets 22 rows, the fidelity and FK gates go green, T0_Familiar_Registry disappears from BUILD_PLAN's nothing_buildable_now list, the Chapter_Index placeholders resolve — and every one of the 17 deferrals stays open, now invisible, because the registry no longer looks like a problem. That is the anti-orphan failure wearing a green gate, which this project has already hit at least six times per BUILD_PLAN line 147, and a half-fix that removes the alarm is worse than a stub that keeps ringing.
The mitigation, if D is chosen, has to be structural rather than a promise: the bond_abilities tab should be declared in docs/registry_extensions.json under a familiar-bond-ladder owner key AT THE SAME COMMIT as the parent table, with harness/check_registry_extensions.py enforcing that a declared-but-unpopulated owner is visible rather than silent — and the 17 spine deferral strings left in place verbatim until the ladder actually lands. If that enforcement cannot be made to bite, the objection carries and the honest answer flips to A: land it all in one pass and accept the placeholder cells.
A secondary objection worth naming: I have verified the CANON and the DATA, but I have NOT verified that the harness converter or Tools/gen_row_struct.py (game repo, C:/dev/Humanity/Humanity — not read this session) handles a two-tab registry. All 36 live registries are single-tab. If multi-tab breaks the converter, the ability ladder has to flatten into five parent columns instead, which weakens D's shape.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (5):
roster_tier discriminator (canonical_22 | legendary_species | mount_candidate | proposal), or rule the feed's real target is Creature_Roster and say so.cultural_care_register. But the CH_07 Paravani fix is a §17.1 case (deity-name on a controllable familiar = the /Kaggen violation), not a §6 case, and NO proposed column carries it: hard_line_anchors is scoped to HL_0057/0058/0022/0072 and reveal_lock to §17.9. Same for Muthu's Sri Maha Bodhi bonding site (line 438) — a living Buddhist sacred site. The proof this matters is the brief's own defect list: "Murugan" survives as a familiar name at T3_Familiars_Named 756/1014/1075/1083 precisely because that correction has no keyed home to persist in. Add a per-row depiction_constraint field. This is weight, not omission — the peacock still bonds, still fights, still carries its Thread-2 serpent-inversion.Option the critic says was MISSING: E — EMIT THE HEADER ONLY (zero rows), declare it, defer all row-scope canon. The brief knows this option: it is buried in if_deferred as "the cheap protective move," never presented as an option. It is arguably strictly dominant over C and is the cleanest possible expression of what why_josh says the brief is FOR — it separates the loop's grounded half (the schema is pure transcription from ACTIVE canon) from Josh's half (row scope = cardinal numerical canon) with a clean cut, instead of D's fuzzy one. It removes the unique-headerless status, gives exr_conform.py:86 / deep_read.py:52 a real shape to address, matches the Quest_Seed (21/0) / RNG_Drop_Table (18/0) precedent exactly, and costs ONE automatic re-baseline — harness/registry_fidelity.py:161-176 fires the stub_superseded branch on a title-only reference with no hand-declaration at all, and is self-correcting. It forecloses nothing: rows land whenever Josh rules 22 vs 33. Presenting C (pure status quo) as the only deferral, when a strictly better one exists and is described three paragraphs later, makes C a partial strawman.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
KEEP D — cold verification strengthens it, and the two things that could have flipped it (the multi-tab risk, the folklore precedent) both broke in D's favour. But land it with five corrections, or the brief misleads on facts Josh will act on.
1. FIX THE BASELINE ARITHMETIC BEFORE IT REACHES HIM. It is 39 placeholders / 40 populated, not 40/39, and the 40 declared expected_cell_diffs on Chapter_Index col 22 are the POPULATED cells, not the placeholders. The 39 placeholders are declared NOWHERE — they match the frozen reference byte-for-byte, which is the actual reason a headerless registry has sat green. That is a better argument than the one the brief makes, and it is the opposite of what the brief says.
2. ADD THE MISSING PRECEDENT — it is decisive against B and the brief does not have it. T1_Build_Pipeline_Contracts [ACTIVE v1.0] records the folklore retirement in ACTIVE tier canon ("the registry absorbed Folklore_Entity_Registry function in Phase 5M-prep triage"; "the folklore_attribution column ... absorbing the retired Folklore_Entity_Registry") while in the SAME triage keeping "T0_Familiar_Registry Phase 6 target" with its own named column adds. The triage that retired one deliberately KEPT the other. That closes B on ACTIVE canon rather than on inference from the host table's row counts.
3. RESOLVE THE FAMILIAR_FEED ROUTING QUESTION OR DROP THE CLAIM. Both live proposals are MOUNTS outside the locked roster. D as scoped cannot receive either without violating HL_0057/HL_0058. Either add a non-slot roster_tier (canonical_22 | legendary_species | mount_candidate | proposal) column, or route the feed at Creature_Roster and say so. Do not tell Josh the ruling gives a ratification lane a landing when it does not.
4. CARRY THE §17.1 CORRECTION IN A COLUMN. Keep the four-elevated cultural_care_register exactly as proposed — it is transcribed verbatim from T3_Familiars_Named line 1081's own CVD §6 list, so it is neither inflation nor defanging. But add a per-row depiction-constraint field so the CH_07 Paravani fix (vahana, not the deity Murugan) and Muthu's Sri Maha Bodhi living sacred bonding site (line 438) have a keyed home. The brief's own defect list is the proof this is needed: "Murugan" survives as a familiar name at four places in the owner doc precisely because the correction has nowhere durable to live. Weight, not omission — every one of these still bonds, still fights, still evolves.
5. DE-ESCALATE ONE FLAG, DROP ANOTHER. The L3 binding-stone conflict is REAL but is not Josh's — T3_Creatures_Tameable §2.4 names T3_Familiars_Named as the owner of the binding-stone mechanic in the same section, and its "intermediate-band" sentence contradicts its own bullet list which already assigns L5. Authority hierarchy resolves it; fix in place. The §6.3 "Ch 60 Asia Revisit" flag is a FALSE POSITIVE — the doc already carries the D-22 correction and merely quotes the retired label inside its own supersession note.
Also state the row-scope question in its true form: 22 slots and 33 species are not parallel units (HL_0058 makes the 21 base slots CORRESPOND to the 21 mortal species), so the real question is "is a row a SPECIES or a SLOT?" — and note that docs/BUILD_PLAN_END_TO_END.md:497 already scopes this build item at 33-species, which the brief defaults away from without acknowledging.
Blast radius: This is a CLASS ruling, not a one-off — and you should be told it is being asked for as one.
Scope of the rule itself: every entity candidate produced by every deep read of the 558-book corpus, forever. The pilot's ~37 records already carry 49 folkloric_being, 19 creature, and 29 deity candidates; at full rollout across 69 regions this is the routing field for thousands of rows.
Surfaces that change if B is adopted: (1) DEEP_BOOK_PROCESSING_CONTRACT.md §2.4 gains the discriminator text (a contract edit, no world canon); (2) three already-flagged EXR rows get retyped (EXR_SRC_00457.json EC_04, EXR_SRC_00157.json EC_01/EC_02) plus the unapplied bali deity re-routes (EC_10/EC_11/EC_13), then re-merge; (3) the 19 existing creature candidates get a one-pass sanity sweep — most are genuine zoology (the Komodo ecology cluster SRC_00169/175/176/177) and will not move; (4) the deep-read reader prompt/runbook gains one line so future readers type it right the first time.
Surfaces that do NOT change: no registry is minted, no registry schema changes, T0_Creature_Roster's 132 live rows are untouched (CR_0010 is already species_class=folklore), docs/fidelity_baseline.json is unaffected, and no chapter/numerical/naming/hard-line canon is touched. Rule B is deliberately a routing-and-attribution rule with zero canon footprint — which is why it is cheap to adopt and cheap to reverse if a later region produces a case it handles badly.
Separately in scope, and mine: the deep_read.py merge-anchor repair. That one touches the detection surface for ALL merge conflicts — entity kind, target registry, owner lane, and the weave-link conflicts too — so its blast radius is wider than this ruling's, and it should land whichever option you choose.
Context (verified on disk):
WHAT IS ACTUALLY IN THE QUEUE. docs/proposals/merge_conflicts_queue.md currently holds 2 anchors, and both are the SAME shape: Ebu Gogo (nage) and Pangulubalang (sumatra batak), each flagged only on entity_kind differs across contributors: ['creature', 'folkloric_being']. In both cases every contributor already agrees on target_registry: T0_Creature_Roster. So after your 2026-07-22 phantom-registry ruling, the registry-routing consequence of these two conflicts is ZERO. What still turns on the kind field is three things, all verified in code and schema:
1. harness/rag/exr_conform.py:75 — KIND_SPECIES_CLASS = {"folkloric_being": "folklore", "deity": "deity"}. entity_kind MECHANICALLY determines the species_class discriminator. The two fields are not independent; you cannot set one from the source's framing and the other from ours without a code change.
2. docs/proposals/EXR_RECORD_SCHEMA_v0.2.md §11.2 (your ruling of 2026-07-21) — culture is REQUIRED to advance for folkloric_being, and NOT required for creature. A being mis-typed creature silently claims the culture exemption and can advance with no cultural attribution — a §17.1 attribution loss. §11.2 names this exact risk and says the mitigation is "the merge routes a contested entity_kind to merge_conflicts_queue.md (the pilot's Ebu Gogo and Pangulubalang disputes are exactly this)."
3. Care register. Nothing else — fightability is NOT gated by kind. _source/02_Tier_2_Region_Pages/flores_island.md:1663 already stages Ebu Gogo in-world as "the region's own folklore-combat encounter (CR_0010, Section 3)", and line 1154 lists it in the Folklore Combat set. Pangulubalang's own portrayal_note calls it "legitimately a boss-adjacent combat construct." Neither of these rows is asking to be defanged and this decision must not defang them.
THE TWO CASES ARE NOT ACTUALLY OPEN — they are at different pipeline stages.
deep_read_audited (EXR_SRC_00193.json:20, EXR_SRC_00457.json:21) and the flores audit ALREADY RULED IT. EXR_SRC_00457.json:612-616: "entity_kind is 'creature' while EC_01/02/03 are 'folkloric_being'. For the ebu gogo specifically, typing the row as a creature is the exact framing its own care_flag exists to prevent — it nudges a folklore being of ambiguous status toward the surviving-hominin/cryptozoology reading the record correctly refuses… Retype to folkloric_being; target_registry T0_Creature_Roster is unchanged." The field at EXR_SRC_00457.json:432 still reads "creature". The ruling was recorded and never applied, so the merge keeps regenerating a conflict that is already decided.deep_read_extracted, not audited (EXR_SRC_00226.json:20, EXR_SRC_00446.json:18). Its conflict is "the audit has not reached it," not "the audit cannot settle it."THE DISCRIMINATOR ALREADY EXISTS IN THE LIVE DATA. registries/T0_Creature_Roster [DRAFT v0.1]/Sheet1.csv carries 132 rows. species_class=folklore holds 12 (CR_0010 Ebu Gogo, CR_0011 Orang Pendek, CR_0035 Nittaewo, CR_0082/0083, CR_0126-0132); every other row is a zoological class (mammal/reptile/bird/insect…) and carries a scientific_name. CR_0010 Ebu Gogo is ALREADY species_class=folklore in production. Critically, the cryptid firewall is NOT carried by species_class: CR_0131 Taniwha (authentic living Maori tradition) and CR_0132 Ropen (modern Western creationist-cryptozoology construct) are BOTH species_class=folklore, and the distinction between them lives in folklore_behavior_substrate + cultural_care_register ("authentic_living_maori_water_guardian_tradition…" vs "modern_western_creationist_cryptozoology_construct… NOT authentic indigenous png melanesian tradition"). That precedent is decisive for how the cryptid line is carried: not by the kind field, by the care fields.
TWO INDEPENDENT AUDITS ALREADY CONVERGED ON THE SAME RULE. The flores audit (above) and the bali audit reached it by different routes. EXR_SRC_00157.json:1464-1466: "Bedawang Nala and the two cosmic nagas are typed entity_kind creature, the T0_Creature_Roster's REAL-ANIMAL KIND, though they are cosmological beings… Recommend folkloric_being at merge. Schema 11.2 interaction worth recording: as creature they would be culture-exempt, so a mis-kind here silently exempts a culturally-owned being from the culture gate."
THE DEFECT YOU HAVE NOT BEEN TOLD ABOUT — Indra did not get resolved, it got HIDDEN. At commit 55a586c the queue had 3 anchors, the third being Indra (bali) with target_registry differs: ['T0_Boss_Encounter_Registry', 'T0_Character_Index']. Both source rows are UNCHANGED today (EXR_SRC_00157.json:1043 still T0_Boss_Encounter_Registry; EXR_SRC_00251.json:475 still T0_Character_Index) — neither is the ruled deity home (T0_Creature_Roster, species_class=deity). The conflict vanished from the queue because the bali audit FILLED culture on both rows with two different prose strings, and the merge anchor is (norm_entity_name(name), norm(culture) or norm(region_ref)) — harness/rag/deep_read.py:68-77, 121-122, where norm is whole-string word normalization. Different prose culture → different anchor → the rows no longer merge → no conflict is computed. Indra now sits as two separate status: proposed anchors in two different owner feeds: docs/proposals/cross_pipeline_feeds/BOSS_FEED.md:22 and docs/proposals/cross_pipeline_feeds/PERSONA_FEED.md:63 — a revered living-tradition deity proposed simultaneously as a boss row and a persona row, with no flag. EXR_RECORD_SCHEMA_v0.2.md §10 predicted exactly this ("under-merge across shelves and over-merge on a multi-culture shelf are both live risks to re-check the moment the audit fills culture"); the prediction has now come true and nobody re-checked. Note the bali audit itself flagged the boss-routing as a MAJOR (EXR_SRC_00157.json:1434-1436: "Three revered deities of a LIVING religion are routed to target_registry T0_Boss_Encounter_Registry while their own portrayal notes describe a quest-giver or rescuer… Re-route to T0_Creature_Roster with target_species_class deity before merge"), and that MAJOR is also unapplied.
SCALE: across the ~37 EXR records read so far (of a 558-book corpus) there are 49 folkloric_being, 19 creature, and 29 deity entity candidates. The creature population is genuinely real-animal-heavy (the Komodo ecology sources SRC_00169/175/176/177), so the discriminator is live and load-bearing in the data, not theoretical.
Why this needs a ruling: Three reasons this is not mine to apply. (1) It is a STANDING classification rule for the whole 558-book corpus, and its immediate sibling — where deity lands — you ruled personally yesterday (docs/proposals/PHANTOM_REGISTRY_ROUTING_FINDING.md, recommendation A approved 2026-07-22); ruling one arm of the same enum by session fiat right after you ruled the other would be inconsistent. (2) It has §17.1 teeth: via your own §11.2 ruling, the kind field decides whether a culturally-owned being may advance with NO cultural attribution, so this is a rule about when we are obliged to name the Nage, the Toba Batak, the Manggarai. (3) The rule I recommend takes an explicit position ON a living people's own taxonomy — the Nage insist the ebu gogo were real creatures and specifically not spirits, and my recommendation types them folkloric_being anyway (with their taxonomy preserved verbatim in the row's substrate fields). That is a judgment about how we classify an Indigenous empirical claim, and it should be yours. The mechanical merge-anchor repair below is mine and I will apply it either way.
Options considered:
creature = a being attested by the zoological/biological record (has or could have a scientific_name; the source is natural history). folkloric_being = a being attested by a tradition's own testimony (the source is ethnography, myth, oral account, or a modern cryptid literature). deity = a being a living or historical religion holds as divine. Ontology does NOT discriminate, because in this world the folkloric IS real (vril is real, deities are real and portrayable) — so 'is it real' cannot be the test; only the evidentiary channel can. The source's own ontological framing is PRESERVED VERBATIM, but in the row's substrate/care fields (folklore_behavior_substrate, folklore_attribution_source, cultural_care_register), never in the kind. Two bundled sub-rules: (i) boss_candidate describes a staged ENCOUNTER, not a being's nature — a folkloric being staged as a boss carries BOTH a roster row and a boss row, and a being that is never staged as an encounter (Indra) gets NO boss row; (ii) the authentic-tradition vs Western-cryptozoology firewall rides in the care fields, exactly as CR_0131 Taniwha / CR_0132 Ropen already do, and is NEVER expressed by the kind field.creature candidates. It puts three already-flagged rows (bali EC_01/EC_02, flores EC_04) into a retype-and-re-merge cycle. And it leans on a sub-rule (dual roster+boss listing) for which I found NO explicit contract text — DEEP_BOOK_PROCESSING_CONTRACT.md §2.4 says nothing about an entity carrying two candidate rows; I am inferring it from live practice (flores BE_0002/BE_0003 stage the polo and naga tana as boss encounters while the same beings are Creature_Roster folklore rows), and that inference should be confirmed, not assumed.creature (SRC_00457 reports the Nage's own verdict: real creatures, not nitu); for Pangulubalang it splits by source (a spirit bound to a datu vs a captive human spirit and a rendered substance).harness/rag/exr_conform.py:75 DERIVES species_class from entity_kind — species_class cannot carry a distinction that entity_kind does not already encode, so the two fields cannot be split without new code and a new authored field. Applied literally it also inverts two live decisions: CR_0010 is already species_class=folklore in production, and typing it creature would flip that. And it triggers the §11.2 exemption on a being whose culture is the whole point — Ebu Gogo would advance with NO Nage attribution required, which is a §17.1 loss committed in §17.1's name. Worst, it does not converge: two sources framing the same being differently (which is precisely what Pangulubalang IS) produce a permanent conflict by construction, so this option guarantees the queue it is meant to drain. The tradition's voice can be preserved without this cost — B keeps it verbatim in the substrate fields, which is where flores_island.md already carries it (lines 385-389).culture with free-text prose, cross-record anchors SPLIT, so conflicts stop being detected at all — Indra is the live case, already fanned out into BOSS_FEED and PERSONA_FEED as two unflagged 'proposed' rows. Choosing D without the anchor fix means choosing a detector that degrades as the work proceeds. Finally it guarantees inter-region drift across 558 books: 69 region audits deriving the same discriminator independently will not all land in the same place, and there is no reconciliation step that would catch it.Author recommendation: Rule B — adopt the provenance discriminator as a standing rule in DEEP_BOOK_PROCESSING_CONTRACT.md §2.4, with both sub-rules (boss_candidate = encounter, not nature; the authenticity firewall rides in the care fields). Then apply it to the three already-flagged rows (flores EC_04 Ebu Gogo → folkloric_being per its own audit; bali EC_01/EC_02 → folkloric_being per its own audit), let Pangulubalang resolve to folkloric_being on both contributors when the sumatra-batak audit runs, and re-merge. Neither Ebu Gogo nor Pangulubalang loses an ounce of combat weight: Ebu Gogo stays the folklore-combat encounter flores_island.md:1663 already stages, and Pangulubalang stays a boss-adjacent construct wielded by the corrupt Datu Siahaan — this ruling touches attribution and routing, not stakes.
Bundled with it, and mine to apply regardless of which option you pick: fix the merge anchor in harness/rag/deep_read.py so it stops keying on free-text culture prose. The anchor should normalize culture to a comparable key (or fall back to region when the culture strings are prose variants of the same culture) so that two readings of the same being in the same region still MERGE and still surface their disagreement. Until that lands, the queue's low row count is not evidence of health — Indra proves the opposite.
Reasoning: Three things decided this.
First, the class-resolving rule is not something I am inventing — it is something two fresh-context audits, on different regions and different books, wrote down independently in the same week (EXR_SRC_00457.json:612-616 and EXR_SRC_00157.json:1464-1466), and both named creature as "the real-animal kind." When independent verification converges before a rule exists, the rule is already latent in the practice; writing it down costs almost nothing and stops 69 regions from re-deriving it.
Second, the ontological framing of the question is a trap in this project specifically. Normally "is it a creature or a folkloric being?" is a question about what is real. Here it cannot be: vril is real, deities are real and portrayable, a myth's own monster is a boss. Every folkloric being in this game IS real in-world. So an ontological discriminator has no work to do, and the only non-arbitrary axis left is evidentiary provenance — how did we come to know about this being. That axis is objective, reader-testable, and it happens to align perfectly with the two things the field actually drives: species_class (folklore rows have no scientific_name because no zoologist attested them) and the §11.2 culture gate (a being known through a people's testimony obviously owes that people an attribution; a Varanus komodoensis does not).
Third, B is the only option that closes the §17.1 exposure structurally instead of case-by-case. Your §11.2 ruling deliberately exempted creature from the culture gate for a good reason — attaching a Nage attribution to a monitor lizard would be a misattribution, inventing a cultural claim to fill a form. That ruling is right, and it created exactly one soft spot, which §11.2 itself names: a mis-kind claims the exemption. B removes the soft spot by making the kind test turn on provenance, which is the same thing the culture gate turns on. After B, "typed creature" and "owes no culture" mean the same thing by construction, and the two cannot come apart.
On the tradition-deference concern that makes option C attractive: it is real and it is answerable without paying C's costs. The Nage taxonomy survives in full — it is already carried verbatim on the region page (flores_island.md:385-389, "the Nage classify the ebu gogo as real creatures and specifically not as spirits (nitu)… an indigenous natural-history distinction that treats a category of beings as an empirical population rather than a supernatural one") and it belongs in the row's folklore_behavior_substrate. What the kind field would say under C is not "the Nage believe X" but "our design database asserts X as zoology," and that is the exact assertion the anti-fringe frame refuses. The flores audit put it precisely: typing this row creature "is the exact framing its own care_flag exists to prevent."
Finally, why not D even though the audits are doing well: the queue's own evidence refutes it. Flores is FULLY audited and its conflict is still open, because a per-record audit cannot close a cross-record disagreement. D asks a per-record mechanism to do a cross-record job.
Strongest objection (author's own): The rule commits an outsider re-classification of an Indigenous empirical claim — in §17.1's own name. The Nage do not say the ebu gogo were folklore. They say, specifically and as a taxonomic distinction they draw themselves, that the ebu gogo were real creatures and NOT nitu (spirits) — SRC_00193, carried at flores_island.md:385-389, where the region page credits it as "an indigenous natural-history distinction." My rule takes that people's own empirical claim, routes it to folkloric_being / species_class=folklore, and files their natural history under our folklore bucket. That is structurally the same move as the colonial-era demotion of Indigenous knowledge to legend, executed by a rule whose stated purpose is cultural care. Saying "their taxonomy is preserved in the substrate field" is exactly the defense every such demotion offers — the claim survives as a quoted belief while the schema's own voice says otherwise.
The counter-argument I would make is that the alternative is worse in the same direction: typing it creature makes our database assert the zoological reality that the closest scholarship (Forth's "probably imaginary") denies, and would credit the surviving-hominin/cryptozoology reading the whole care apparatus exists to refuse. Both options misrepresent someone; B misrepresents in the direction that costs an epistemic label and keeps the attribution obligation, while C misrepresents in the direction that lends real Indigenous weight to a fringe claim AND drops the attribution obligation. But I want to be honest that this is a choice between two imperfect framings, not a clean win — and if you think the tradition's own voice should govern the schema field and not just the prose field, that is a coherent position and it points at C (or at a fourth kind, e.g. contested_being, which would be a genuine mint and which I did not include because minting structure is the move your deity ruling explicitly declined).
Second, smaller objection: my boss_candidate sub-rule rests on an inference. I found no contract text authorizing one being to carry both a roster candidate and a boss candidate; I inferred it from live practice on the flores page. If dual-listing is not actually supported, that sub-rule needs its own design pass before it ships.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (5):
contested_being value as 'a genuine mint and... minting structure is the move your deity ruling explicitly declined.' But docs/proposals/SUB_PERSON_CLASSIFICATION.md is exactly this project's precedent for the shape: a deterministic classifier over 201 rows with an explicit AMBIGUOUS residue class routed to a judgment sweep ('AMBIGUOUS (both or neither) rows await the judgment sweep — classify them there, never here'), gate-flip withheld until the residue is judged. That is a WORKFLOW state, not a minted registry, and the deity ruling's 'mint nothing' was about registries, not about a residue class. Ebu Gogo is the textbook AMBIGUOUS row — the source record itself says the Nage 'hold their humanity doubtful, are ambivalent about calling them animals, and deny they were spirits — a genuinely liminal being in the tradition's own frame.' The brief foreclosed the option the project has already used for exactly this situation, on a precedent reading that does not hold.Option the critic says was MISSING: DECOUPLE THE ATTRIBUTION OBLIGATION FROM THE CLASSIFICATION (call it option E / "B-prime"). Adopt B's provenance discriminator for species_class routing ONLY, and move the §11.2 culture REQUIREMENT off entity_kind and onto a row-level condition — culture is required wherever the row names a people or carries a cultural care_flag, regardless of kind. Under E, Ebu Gogo owes the Nage an attribution whether we type it creature or folkloric_being; the kind field stops being load-bearing for §17.1; and the brief's own strongest objection loses its teeth, because the schema no longer has to demote an Indigenous empirical claim to zoology-adjacent "folklore" in order to secure the attribution it wants. The brief never lists this, though it is the move Josh's OWN §11.1 ruling made one day earlier on the sibling question (take the contested field off the gate, defer typing to the step that needs it, mint nothing) — see finding on missed precedent. E also closes the boss_candidate hole that B's sub-rule (i) opens, because the obligation would follow the care_flag onto the boss row too. E costs one schema-amendment paragraph and no new enum value.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
Rule B-PRIME, not B as written. Keep the provenance discriminator (it is correct, it is what two independent audits already reached, and I confirmed both audit texts verbatim). Change three things before it ships:
1. AMEND §11.2 RATHER THAN LEANING ON IT. Make the culture requirement condition on the ROW (names a people / carries a cultural care_flag), not on entity_kind. This is the missing option above and it follows Josh's own §11.1 precedent. It also removes the single fact that makes this a Josh-level ruling in the first place — once attribution no longer rides on the kind field, the kind field is a routing label and the "outsider re-classification" objection is largely defused.
2. DROP OR RE-SCOPE SUB-RULE (i) (dual roster+boss listing) UNTIL THE BOSS LANE IS GATED. As bundled it is a §17.1 REGRESSION, not a closure: boss_candidate is culture-exempt under §11.2 AND its registry routes to a cross-pipeline feed that has no §8 Phase-3 stream and therefore never receives the §8.8 cultural-authenticity audit (contract §3 table; deep_read.py:440-452). EXR_SRC_00157/EC_09 Mayadenawa is the live proof — it sits in BOSS_FEED.md today with an explicit "do not cast a living reform-sect's revered origin-figure as pure villain" care flag, culture=None, and no cultural audit. The brief's claim that B "closes the §11.2 exposure structurally" is false while (i) is bundled.
3. MAKE SUB-RULE (ii) AN ENFORCEMENT, NOT A CITATION. The firewall does not currently "ride in the care fields" — folklore_behavior_substrate is populated on 0 of 132 roster rows, folklore_attribution_source on 2, and 9 of the 12 folklore rows (including CR_0010 Ebu Gogo itself and CR_0082 Mokele-mbembe) have an EMPTY cultural_care_register. Ship (ii) as a REQUIRED-non-empty condition on any folklore-class row, with a gate check, or it preserves nothing.
Additionally: adopt a fourth bucket or an explicit residue for the fairy-literary shelf, which B's three buckets do not cover; and state the real retype count (8-9 of 19 creature candidates move, 5 of them currently unflagged), not three.
The merge-anchor repair should land exactly as proposed, immediately, independent of the ruling — and it is worse than the brief reports (a second live casualty, below).
CARE CALIBRATION: no change. The brief does NOT defang, and I verified that: Ebu Gogo stays the staged folklore-combat encounter (flores_island.md:1663, :1210) and Pangulubalang stays a boss-adjacent construct wielded by the corrupt individual datu. It also correctly avoids care-tier inflation, consistent with the flores audit's own anti-inflation MINOR. Do not let the fixes above be read as a reason to soften either encounter.
Blast radius: A CLASS, and a large one — you are being asked for a rule, not a one-off.
WHAT IT RESOLVES IMMEDIATELY: all 265 seeds currently queued in docs/proposals/quest_seed_queue/ across 11 shelves, and the ~58 region shelves not yet harvested (69 canonical regions, 11 done). Every future deep-read region pass hits this exact field; today every one of them would re-raise the identical flag. The prior brief called it "the single highest-leverage unblock in the Phase-3B pipeline" and that reading holds — it just turned out that a quarter of the blockage was a documentation error rather than missing canon.
DOCS THAT CHANGE (all repo-tracked, none of them canon-numerical):
_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md §6.5 line 1424 — the enum grows 18 → 21; plus the typing-scope sentence. LIVING-SOURCE edit, gate-safe (the fidelity gate's reference is the frozen _source/00 T0 xlsx, and this is a T1 .md).docs/proposals/EXR_RECORD_SCHEMA_v0.2.md §11.1 — the reconcile (v0.2.3), plus the count correction (five → six attested).docs/proposals/DEEP_BOOK_PROCESSING_CONTRACT.md §2.2 line 104-107 — its proposed_quest_type description should name the scope rule.docs/proposals/QUEST_TYPE_AND_CULTURE_GATE_BRIEF.md — a correction note on lines 26-27 (the reasoning record carries a factual error about §6.5) and line 40 (T0_Minigame_Registry is no longer 0 rows)._source/02_Tier_2_Region_Pages/flores_island.md §13 lines 1130-1138 — becomes typeable; the four flagged classes resolve. Same for bali when its page builds.docs/DOC_MAP.md — per the standing rule, nothing is done until it is listed.DOWNSTREAM CONSUMERS THAT INHERIT IT: the §7.5 Section-13 seed-stub typing step (every region page, all 69); the quest-writing lane that will eventually populate T0_Quest_Definition_Registry beyond its current 16 rows; T0_Quest_Seed_Registry (0 rows — its first population would use this vocabulary); harness/rag/exr_conform.py and exr_audit_apply.py if the WARN-to-ERROR scope check gets built.
WHAT IT DOES NOT TOUCH: no chapter assignment, no numerical canon, no naming canon, no CVD §17 hard line, no care-tier ruling. It does not ratify T0_Minigame_Registry (still your separate D-SYS call), does not create a Vehicle/Mount registry (vehicle_or_mount has only 3 seeds queued — genuinely not yet attested, correctly left alone), and does not touch the CG-21 encounter_facet ruling, which it depends on and preserves.
REVERSIBILITY: high. No harness gate enforces quest_type, T0_Quest_Seed_Registry is empty, and only 16 quest rows exist (all using the three original spine values). If a minted type proves wrong in the writing, retiring it costs a §7.5 re-typing pass over the queue, not a re-cascade. This is a cheap decision to get wrong and an expensive one to keep deferring.
Context (verified on disk):
VERIFIED BY READING, with one finding that changes the shape of the question.
1. The §6.5 enum is ALREADY ACTIVE T1 CANON — the "unminted" framing is wrong.
_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md line 1424 enumerates quest_type with EIGHTEEN values: canonical_hard_line, architect_appearance, main_story_per_chapter, trade_questline_tier_progression, trade_questline_home_base, side_questline_stage, weapon_bond, familiar_bond, familiar_father_reunion, school_curriculum, folklore_combat, grimoire_link, seed_defense, regional_npc_dialogue, convergence_node, prologue_baseline, epilogue_resolution, arc_bridging. git log -S on that exact string returns ONE commit: 5b08d09 (2026-06-28), the migration baseline — the enum has been in an ACTIVE T1 contract, unmodified, since day one. It is UNPOPULATED, not UNMINTED.
So docs/proposals/EXR_RECORD_SCHEMA_v0.2.md §11.1 lines 274-277 ("The contract §2.2 names folklore_combat, school_curriculum, grimoire_link, seed_defense, regional_npc_dialogue... none of these are canon yet") is factually inconsistent with the tier-1 doc it is subordinate to. It inherited that error from docs/proposals/QUEST_TYPE_AND_CULTURE_GATE_BRIEF.md line 26-27 ("attested ONLY in proposal docs, never in a ratified registry or the §6.5 schema"). Under CLAUDE.md's trust-content-not-labels and authority-hierarchy rules, §6.5 wins. Roughly 25 of the flores mint flags (14 folklore_combat + 5 regional_npc_dialogue + 6 school_curriculum/grimoire_link/seed_defense, per the prior brief's tally) were blocked on a vocabulary that already existed.
2. HALF THE FOLKLORE DEMAND WAS ALREADY RULED. CG-21 closed in the 2026-07-21 director pass (§6.5 lines 1424-1425): quest_type is RULED BY SPINE ROLE — a main-graph core or climax beat is main_story_per_chapter regardless of the encounter's flavour, and the folklore / materialized-argument nature rides a SECOND orthogonal field, encounter_facet (folklore | materialized_argument | none). folklore_combat/grimoire_link/seed_defense are explicitly reserved "for genuinely side-only beats that are not on the main graph." The seed schema already carries encounter_facet (harness/rag/exr_conform.py line 183).
3. THE STANDING INSTRUCTION'S TRIGGER HAS FIRED, IN WRITING. §11.1 said the first region-page pass-2 to consume these seeds proposes the enum from what it needed. That pass ran: _source/02_Tier_2_Region_Pages/flores_island.md §13, lines 1130-1138 — "the honest result of running it here is that none of these region-dressing seeds fits one of the five attested values... so every one stays untyped and carries the §7.5 category-mint flag rather than a force-fit. The classes this harvest actually wanted — a minigame-or-contest type, a festival-or-daily-immersion type, a trade-expression type, and the contract's folklore_combat." Four classes, named by the consumer, not by a reader.
4. THE DEMAND IS 11 SHELVES, NOT 2. docs/proposals/quest_seed_queue/ holds 265 seeds across 11 files (flores 71, fairy-literary 44, sumatra-batak 42, bali 38, esoteric 16, rome-italy 12, vietnam 11, malay-world 9, cross-cutting 8, sumatra_java 8, angkor-khmer 6). Verified seed_kind distribution across all 265: encounter 85, mini_arc_situation 43, minigame_class 36, festival_or_daily_immersion 32, side_questline_candidate 26, trade_expression 22, region_page_section 18, vehicle_or_mount 3. The three unhoused game-surfaces account for 90 of 265 seeds (34%), and every shelf carries them — this is not a flores artifact.
5. TWO OF THE THREE TOKENS ARE ALREADY RATIFIED VOCABULARY. festival_or_daily_immersion and trade_expression are LITERAL members of the ratified seed_kind enum (DEEP_BOOK_PROCESSING_CONTRACT §2.2, lines 98-101, "the AAA-brief opportunity categories made into an enum"). Only the minigame token is a genuinely new word.
6. CHARTER BACKING FOR ALL THREE. docs/proposals/AAA_REARCHITECTURE_BRIEF.md line 89-99 opportunity matrix: category 1 Games & contests, category 4 Daily-life immersion (L1.5), category 5 Crafts & trade expressions. Line 101 names "a new Minigame/Contest registry and a Vehicle/Mount registry to ratify"; line 105 reserves "the built-in minigame framework" to Josh as system canon.
7. REGISTRY STATE (verified). registries/T0_Quest_Definition_Registry [ACTIVE v1.0]/ — 16 rows, 3 quest_type values live (canonical_hard_line 12, epilogue_resolution 3, prologue_baseline 1). registries/T0_Minigame_Registry [DRAFT v0.1]/Sheet1.csv — 2 rows, MG_0001 Caci (Manggarai, flores_island, CH_03) and MG_0002 Senet; the prior brief's "0 rows" is now stale, and MG_0001 is literally one of the flores seeds' targets. registries/T0_Quest_Seed_Registry [DRAFT v0.1]/Sheet1.csv — header only, 0 rows. registries/T0_Questline_Index [DRAFT v0.1]/Sheet1.csv — 23 rows (SQ1-12, TRADE_01-10, LEG_WPN_036).
8. THE SPIKE ATTESTED A SIXTH VALUE. docs/proposals/quest_spike/CH_03_quests.md lines 190 and 202 author quest_type — regional_npc_dialogue, alongside main_story_per_chapter (6 quests) and side_questline_stage (3). §11.1's "five attested values" undercounts its own evidence.
9. NO GATE TEETH EITHER WAY. harness/rag/exr_conform.py nulls proposed_quest_type and prefills; no harness file validates a quest_type vocabulary. Nothing goes red if you mint, and nothing goes red if you defer — the cost of deferral is unroutable content, not a broken gate.
CARE READ (calibrated, both directions): this is a taxonomy call with essentially no §17.1 exposure. The one real note: a festival_or_daily_immersion type must not become a licence to gamify a consecrated rite — patika at Kelimutu, penti, and the Nage buffalo sacrifice carry live care_flags on their own seed rows (flores S06/EXR_SRC_00483, S06/EXR_SRC_00203, S03/EXR_SRC_00457). But that obligation lives on the care_flag and the §8.8 audit, not on the type token. The opposite defect is the live risk here: refusing to type festivals and daily-life beats at all means the L1.5 immersion mandate (layer-model-v2, AAA category 4) never gets built, which is care-as-omission — exactly the failure the Care Doctrine (CVD §17.1) names.
Why this needs a ruling: Minting a game-surface CATEGORY is system canon under the cardinal do-not-invent rule. Two independent places route it to you by name: DEEP_BOOK_PROCESSING_CONTRACT §4.1 line 325 ("any row that asserts new canon — a new slug, a chapter-assignment implication, a numerical, a name, a hard line, a new system, a new quest_type — routes to the flag, never coined by the loop"), and your own 2026-07-21 ruling on the predecessor brief, where you took C-with-the-B-floor and the brief's closing line reserved exactly this: "I would want the minigame/festival/trade three named by you, since they are new game-surface categories, not restatements." AAA_REARCHITECTURE_BRIEF line 105 also holds the minigame framework as requiring your sign-off.
Two halves of this brief are NOT yours, and I have separated them so you rule only the part that is: correcting the §11.1/§6.5 inconsistency (finding 1) is a documentation reconcile against an ACTIVE tier-1 doc, and the scope rule in finding 10 below is contract mechanics. Only the three new tokens need your name on them.
Options considered:
Author recommendation: OPTION C — reconcile, mint three, and pin the scope rule.
Concretely, what you would be approving:
MINT (new canon, your call, 3 tokens added to the §6.5 quest_type enum, 18 → 21):
minigame_or_contest — a playable game, sport, duel-form, or judged contest wrapped as a quest. Named to match AAA opportunity category 1 ("Games & contests") and deliberately NOT minigame_class, so it cannot be confused with the seed_kind token of that name. 36 seed_kind matches across 11 shelves; MG_0001 Caci already exists as its registry twin.festival_or_daily_immersion — a recurring calendar event or daily-life practice the player takes a role in. Token reused verbatim from the ratified seed_kind enum. 32 seed_kind matches. Covers AAA category 4 and the layer-model-v2 L1.5 mandate.trade_expression — a culture-specific craft or trade practice expressed as a quest rather than as a mastery-tier step (which stays trade_questline_tier_progression). Token reused verbatim from seed_kind. 22 seed_kind matches. Covers AAA category 5.RECONCILE (not new canon — a correction against an ACTIVE tier-1 doc):
PIN (contract mechanics — the safety rail that makes the mint honest):
I would NOT touch T0_Minigame_Registry's ratification in this decision. Its existence and any count/caps are a separate D-SYS call of yours (minigame-galaxy.md line 178); minting the quest_type does not presuppose it, because the scope rule points at it rather than depending on it.
Reasoning: Three things drove this.
FIRST — the question as posed rests on a factual error, and correcting it changes the answer. The prompt's option (b), "mint the full contract §2.2 set plus the 3," is largely a no-op: those values are not proposal-tier, they are in an ACTIVE T1 contract and have been since the migration baseline. That means the real decision is much smaller than it looked — three tokens, not thirteen — and simultaneously more urgent, because the mis-record is actively blocking ~25 flags per region shelf that were never really blocked. A brief that recommended minting thirteen values would have been asking you to ratify what you already have.
SECOND — the deferral's own exit condition has been met and written down. §11.1 did not defer indefinitely; it named a trigger: the first region-page pass-2 to consume these seeds proposes the enum from what it needed. flores_island.md §13 is that pass. It ran the typing, refused to force-fit, and named four classes. Deferring again would mean the trigger can never fire, which converts a principled deferral into a permanent one. The observed-enum-pin discipline that §6.5 repeats four times says extend on attested critic-verified demand — 265 seeds, 11 shelves, 34% unhoused, one consumer pass on record. That is the attestation the discipline asks for.
THIRD — the strongest counter-argument (Option E: these mostly aren't quests) is CORRECT about roughly half the seeds, and the right response is to install it as a rule rather than let it veto the mint. The Odd-Number Rule is a crafting constraint; the Goat-Meat Bait is a real questline with a fed-guardian investigation, a cull-versus-end-the-feeding fork, and an ecological consequence. A vocabulary that cannot tell those apart is broken in one direction; a vocabulary that refuses to exist because some members would be misused is broken in the other. The scope rule tells them apart by a checkable test (does it have a giver/trigger and a completion condition), and it reuses machinery §6.5 already has.
Two smaller reasons. The token choice matters: reusing festival_or_daily_immersion and trade_expression verbatim from the ratified seed_kind enum means the new-canon surface is ONE new word, not three, and it makes the seed→quest mapping auditable by string equality. And the CG-21 precedent is the closest structural analogue in the repo — when a beat fit no single type, the ruled answer was an orthogonal second field, not a stretched primary. The scope rule is that same move at the seed-to-quest boundary.
On care: I checked this in both directions per the calibration and found no §17.1 exposure in the taxonomy itself. The only live care risk is the omission direction — leaving festival and daily-life beats untypeable strands the L1.5 immersion mandate, which is care-as-absence, the defect the Care Doctrine explicitly rejects. The protective obligation on the sacred-rite seeds (patika, penti, the buffalo sacrifice) already lives on their care_flags and the §8.8 audit and is untouched by this decision.
Strongest objection (author's own): Option E is right and I have papered over it with a rule.
The sharp version: of the 90 seeds the three new types would serve, a large fraction are not quests and never will be. The Odd-Number Rule, the Dream-Taught Recipe unlock, the Pawukon auspicious-day layer, Tumpek Landep, the Cockatoo Watch, Sit to One Side — these are crafting constraints, calendar systems, and ambient world-texture. If the pipeline gets three new quest_types, the path of least resistance for every downstream pass is to type them and manufacture ~90 quest rows for things that should be MG_ rows, Trade-N system rules, and Section-N prose. My scope rule is supposed to prevent that, but it is a sentence in a contract, not a gate — and I verified there is NO harness enforcement of quest_type anywhere (harness/rag/exr_conform.py nulls and prefills; no vocabulary or scope validation exists). An unenforced rule against the path of least resistance loses.
The second edge of the same objection: recommending identical tokens across seed_kind and quest_type is convenient for auditing and dangerous for exactly this reason. It makes seed_kind == quest_type look like a defensible mechanical transform, and this repo has a documented history of mechanical transforms producing silent, gate-invisible damage (the chunk_id collapse; the canon-rebuild vector wipe — both green-gated while wrong). A future pass that "just copies the field" would be committing the force-fit the §7.5 veto surface exists to prevent, and nothing would catch it.
What would make me wrong: if you look at the 36 minigame_class and 32 festival seeds and judge that fewer than a third of them genuinely produce quest rows, then E is the better ruling — mint nothing, ratify T0_Minigame_Registry instead, and let the handful of real quests type as side_questline_stage. That is a coherent position and it costs less canon than mine.
The mitigation I would attach if you take C: make the scope rule checkable before the first bulk typing pass — a harness check that a row carrying any quest_type also carries a non-null quest_giver/trigger_type and completion_condition, WARN first, ERROR after the first region types clean. That is the same WARN-to-ERROR pattern §6.5 already specifies for the CG-25 write-value validator, so it is an existing pattern rather than a new one. Without that check, my recommendation is one unenforced sentence away from being Option E's nightmare.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (2):
registries/T0_Quest_Definition_Registry [ACTIVE v1.0]/T0_Quest_Definition_Registry.csv has 27 columns and contains NONE of them — no quest_giver, no trigger_type, no completion_condition, no objectives_array, no fail_state, no progression_guarantee, no encounter_facet. Those fields were added to the §6.5 schema text in the ff1082a/2309198 contract passes; the contract itself says so ('Registry population is a separate leg: ... the T0_Quest_Definition_Registry landing surface'). Consequence: the scope rule is not checkable today, the WARN-to-ERROR check cannot be built as described, and all 16 existing rows would be non-compliant on day one. The brief presents the mitigation as a cheap reuse of the CG-25 pattern; it is in fact gated on an unnamed registry-widening leg. This does not defeat Option C, but the brief's reversibility and blast-radius sections understate the work by exactly that leg.harness/rag/exr_audit_apply.py line 12 states as an enforced rule 'proposed_quest_type is NEVER written — no ratified quest_type vocabulary exists', and lines 219-221 emit that same claim into EVERY conformed record as a literal note field: 'proposed_quest_type is deliberately UNASSIGNED — no ratified quest_type vocabulary exists'. The brief's docs-that-change list names exr_conform.py and exr_audit_apply.py only conditionally ('if the WARN-to-ERROR scope check gets built'). Reconciling §11.1 while leaving that string live means a running script keeps stamping the corrected-away falsehood onto data, and contract §8.7 regeneration triggers re-apply it to existing records. This is precisely the stale-reference-makes-later-agents-hallucinate failure CLAUDE.md warns about, in code rather than prose. It must be in the required change set, not conditional on the harness leg.Option the critic says was MISSING: OPTION F — "C with teeth": Option C plus enforcement landing in the SAME decision, not as an optional rider. The brief's own strongest_objection identifies the fatal gap ("my recommendation is one unenforced sentence away from being Option E's nightmare") and then files the fix under "the mitigation I would attach if you take C." That is the wrong place for it, for two reasons the repo itself supplies. First, the path of least resistance for every downstream pass is to type the 90 unhoused seeds, and a convention with no gate behind it loses to the path of least resistance — the brief concedes this. Second, this project has a documented history of exactly that failure mode: the chunk_id collapse (65 sources silently reduced to ~1 chunk each while the drain reported success and 16 gates stayed green) and the canon-rebuild vector wipe (558 books unsearchable, 15 gates green). Both are in the project's own memory index. An unenforced rule here is not a hypothetical risk; it is the known one. Option F = mint the three + reconcile §11.1 + pin the scope rule + widen T0_Quest_Definition_Registry with the §6.5 fields it is already schema-committed to (quest_giver, trigger_type, completion_condition — see MAJOR finding 1) + ship the WARN-tier check on the CG-25 pattern, all in one pass. It costs one additional harness leg over C and converts the recommendation's single weakest point into its strongest.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
TAKE OPTION C, AMENDED TO C-PRIME (= Option F above). The direction is right and the evidence holds — I verified the reshaping claim cold and it survives: the enum is ACTIVE T1 canon at baseline, the deferral's own written trigger has fired on record in flores_island.md §13, and the genuine new-canon surface is three tokens (one genuinely new word) with independent charter backing at AAA brief categories 1/4/5. Four amendments:
1. ADD THE REGISTRY-WIDENING LEG TO THE DECISION, EXPLICITLY. The scope rule's checkable test names quest_giver / trigger_type / completion_condition; those columns do not exist on the live 27-column T0_Quest_Definition_Registry. Either widen the registry to the §6.5 schema in this pass, or restate the scope rule as a §7.5 authoring judgment and drop the claim that it is checkable. Do not ship a rule whose test cannot be run.
2. PROMOTE THE HARNESS CHECK FROM RIDER TO DELIVERABLE. WARN tier, CG-25 pattern, in the same commit as the mint. Expect all 16 existing rows to WARN until the widening lands; that is the correct signal, not noise.
3. ADD harness/rag/exr_audit_apply.py TO THE REQUIRED CHANGE SET (lines 12-14 and 219-221), unconditionally. It emits "no ratified quest_type vocabulary exists" into every conformed record's note field, and contract §8.7 regeneration re-stamps it onto existing records. Reconciling the docs while leaving that string live means the pipeline actively re-propagates the error the reconcile exists to kill.
4. FIX THE EXEMPLARS. Replace The Goat-Meat Bait (seed_kind side_questline_candidate — already typeable, proves nothing about the mint) with The Measurer-Judge (EXR_SRC_00230 S06, minigame_class). Replace patika at Kelimutu as the festival exemplar with EXR_SRC_00230 S07 "The Pig's-Head Portion" or EXR_SRC_00203 S04 "Sit to One Side" — both care_flag none, both squarely in scope. Keep patika in the care paragraph where it belongs; do not use the one consecrated-rite seed on the shelf as the poster child for "make this a quest."
Optionally strengthen with the D-EVADE-TOKEN precedent (commit 063797b B2) alongside its counter-precedent WS_025-TERMINAL — the project has ruled enum-minting in both directions, and the discriminator it used is the same one this brief applies.
I would NOT downgrade to Option E. Its argument is correct for roughly the crafting-rule and ambient half of the 90 seeds and wrong for the contest/festival-role half, and C-prime's scope rule is the right shape of answer — it just needs the teeth the brief already knows it needs. I would also NOT defer: the reconcile half is a correction against an ACTIVE tier-1 doc that three separate documents already agree on, and deferring a correction is not a decision.
Blast radius: CLASS, and you should be told which ruling you are giving.
The one-off is seven rows: SRC_00015, 00231, 00487, 00491, 00492, 00493, 00494 — every EXR in docs/book_extractions/ with empty output arrays, all seven from the same misfiled OJS/Scripta journal batch on the flores-indonesia shelf. Six of the seven still carry live story_seed_tags. That much is verified row-by-row and needs no rule at all.
The class is approximately 300 rows: ~297 registry rows (regex-derived, needs script confirmation) carry story_seed_tags while having no real source_title — only a digits-and-hyphens filename artifact. About 341 rows have no real title at all. The broader tagged population is 1,761 rows of 1,914, of which ~1,103 carry both story_seed_tags and a non-empty fun_potential; only 37 have been deep-read. So today roughly 50 unverified mining pointers exist for every verified one.
The mechanism blast radius is the whole book pipeline, permanently. There is currently no code path from an audit's care findings to the source registry row — harness/rag/exr_audit_apply.py writes only the EXR record, and grep confirms harness/rag/index.py is the sole file in harness/ that touches T0_Source_Material_Registry. docs/registry_extensions.json declares weave-tagging and deep-read-lifecycle on the same registry with no rule binding them, and none of the 20 gates in harness/gates_config.json reconciles them. Whatever you rule on the ~300 rows, that gap either gets closed once or reopens on every future book.
Precedent weight, which is the real reason this is worth a rule rather than an edit: the same tag pass has ALREADY had two field families bulk-retracted under your rulings (deity-roster ×63 dropped/×29 fixed; chapter-hints cut to 53 title-anchored, 120 emptied — STATUS line 101). A ruling here makes the third family consistent with the first two and finishes the pass. Leaving it makes the pipeline's treatment of its own tag families arbitrary.
Context (verified on disk):
VERIFIED AGAINST FILES (Bash was unavailable this session, so all counts are Grep/regex-derived over the CSV and are marked approximate where noted).
THE INSTANCE. registries/T0_Source_Material_Registry/T0_Source_Material_Registry.csv line 477 (SRC_00491) reads: region_tags=flores_indonesia, chunk_count=42, source_title="admin,+Journal+manager,+959 1 6805 1 10 20160328", source_author/source_year blank, story_seed_tags=divination_astrology;underworld_otherworld, fun_potential=messianic-redemption prophecy lore for oracle side content, extraction_status=deep_read_audited.
docs/book_extractions/EXR_SRC_00491.json is the audited deep read of that same source. All six output arrays are []. Its _pilot_provenance.provenance_alert identifies the book as Mia Andersson-Löf, "May He Speedily Come: The Role of the Messiah in Haredi and Hardal Judaism," *Scripta Instituti Donneriani Aboensis* 27 (2016), pp. 243-263 — a Jewish Studies article on Haredi vs Hardal redemption theology, Neturei Karta, True Torah Jews Against Zionism, the Temple Institute, Merkaz Harav, R. Abraham Isaac Kook, R. Tzvi Yehuda Kook, R. Yisrael Ariel. The auditor states it opened the PDF and confirmed page count (21), InDesign metadata, and page-1 title block independently; verdict RATIFY, with a ROUTE_TO_JOSH care finding naming exactly these two registry fields as "a live mining pointer that the empty EXR arrays do NOT retire."
THE TAGS ARE ALSO FACTUALLY WRONG, not merely care-risky. divination_astrology;underworld_otherworld does not describe this article — there is no divination and no underworld in Haredi/Hardal eschatology as the article treats it. The tagger could not have read the content: the row's source_title IS the OJS upload filename. This is hallucinated metadata generated from a title-less filename, and the care problem is downstream of a data-integrity problem.
THE POINTER IS LOAD-BEARING, not decorative. docs/START_HERE.md line 34-35: "Prioritizer = the story_seed_tags already on 1,638 sources, so seed-rich books are pickable WITHOUT the local floor." STATUS.md/START_HERE line 99 names "the region-by-region rollout riding each region's pass-2 (tag index = prioritizer...)" as the ▶NOW next step. So this field is the live selection input for the very next lane.
THE MECHANISM GAP IS REAL AND I VERIFIED IT. harness/rag/exr_audit_apply.py writes extraction_status onto the EXR record only (lines ~197-212) and never touches the registry CSV — grep for T0_Source_Material_Registry across harness/ returns exactly one file, harness/rag/index.py. There is therefore NO code path by which an audit's care findings retire anything on the source row. harness/gates_config.json declares 20 gates; none reconciles an EXR against its registry row. docs/registry_extensions.json lines 34-42 declares TWO extensions on this one registry — weave-tagging (story_seed_tags, fun_potential) and deep-read-lifecycle (extraction_status) — with no consistency rule between them. That is the defect stated structurally.
THE CLASS. 1,914 source rows total. The corpus-wide tag pass tagged 1,761 of them (STATUS/START_HERE line 101). Only 37 EXR records exist (docs/book_extractions/), 17 of them flores. Seven EXRs have "story_seeds": [] — SRC_00015, 00231, 00487, 00491, 00492, 00493, 00494, ALL of them flores-shelf misfiles from the same OJS/Scripta journal batch. Six of the seven still carry live story_seed_tags on their registry row. And the siblings are not milder than SRC_00491 — they are in places worse:
ethnography.mystery_crime.ethnography.philosophy_school.Approximate (regex-derived, ±): ~327 registry rows carry a source_title that is nothing but digits/spaces/hyphens, plus 14 more titled admin,+Journal+manager — i.e. ~341 rows with no real title at all; of those, ~297 carry story_seed_tags. ~1,103 rows carry both story_seed_tags and a non-empty fun_potential. So the verified-blind tagged class is roughly 300 rows, and the ratio of unverified mining pointers to deep-read-verified ones is about 50:1 today.
WHAT §17.1 ACTUALLY SAYS (CVD _source/01_Tier_1_Foundation/T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md §17.1, lines 949-977). "Care means weight and authenticity. Care never means omission, reverence-gloss, or rated-G sanitization." The protected set is "living peoples, living sacred traditions, and real and revered people." §17.16 line 1187 says a living tradition's own monster is a boss and §17.1 "does not protect a mythological monster from being fought"; line 1193 says deities are portrayable with the firewall being no deity-name on a mortal and no revered/real figure as villain. SRC_00491 sits squarely inside the protected set — living sacred tradition, named revered rabbinic authorities, at least one living figure (R. Yisrael Ariel), plus active Temple Mount politics — and squarely OUTSIDE the monster/deity license, because it contains no monster, no deity-as-character, no folklore and no playable content whatsoever. Retiring this pointer costs literally zero fun: there is nothing in the article to defang.
AND THE INVERSE MUST BE SAID PLAINLY. This is NOT a ruling that Jewish or biblical material is un-mineable. docs/proposals/SIGNIFICANCE_LENSES.md line 51 names the biblical facet as load-bearing and cites live surfaces: "Ch 9 Ethiopian Tewahedo Christian-Jewish-Islamic syncretism; Ch 18 Levantine Yahweh-and-Asherah and the Noah and Eden anchors." Jewish scriptural and biblical substrate is canon-live and held to the same care as every other tradition. The narrow thing at issue is contemporary living religious-political movements and named living figures being auto-harvested as "oracle side content" by a tagger that never read the page.
Why this needs a ruling: Two distinct things exceed loop authority, and only the second is the expensive one.
(1) The care disposition of the source itself. It concerns a living sacred tradition, named revered figures (both Kooks), at least one living figure, and active Temple Mount / Zionism politics. Under CVD §17.1 that is an elevated-care call on the protected set, and under the standing decision protocol a cardinal §17.1 call is yours, not the loop's. The audit record itself marked it ROUTE_TO_JOSH rather than deciding. Equally, its re-home target is a routing decision with canon consequences — Ch 18 Levant is a real live surface (SIGNIFICANCE_LENSES §3), so silently re-shelving this book there would be the loop nominating a chapter assignment, which the cardinal do-not-invent rule forbids.
(2) The class rule. Options C and D change what the rollout prioritizer is allowed to see across roughly 300 rows and add enforcement machinery to a 20-gate suite. That is a standing rule over the whole book pipeline, taken immediately before the region-by-region rollout that consumes exactly this field. A standing rule is precisely the thing the loop should brief rather than apply.
What is NOT for you: the individual factual repairs. Promoting the verified true_identity block into source_title/source_author/source_year, and de-shelving the source off flores_indonesia, invent nothing — the values were read off the PDF's own page 1. Those should ride the same deterministic apply regardless of which option you pick.
Options considered:
ethnography on a Holocaust-survivor-testimony article (SRC_00487) and mystery_crime on a Toledot Yeshu article (SRC_00492), which are arguably worse pointers than the one being retired. And it leaves the generating mechanism untouched: nothing stops the next audit's care finding from dying in a JSON file, and nothing stops the next tag increment (the ~145 drain-5/6 ingests explicitly ride the next increment, per STATUS line 101) from re-tagging blind.Author recommendation: Take D. Concretely, and in this order:
1. Immediately, deterministically, no ruling needed: promote the verified identity (title/author/year) onto SRC_00491's registry row and EXR header; de-shelf it from flores_indonesia; re-tag or drop its 42 substrate chunks so no Flores query can reach them; blank its story_seed_tags and fun_potential; do the same for the six siblings. Re-emit the fidelity baseline in the same commit.
2. Park SRC_00491 and SRC_00487 in a Josh-review holding category, NOT on any region shelf. Do not auto-re-home either to Ch 18 Levant or anywhere else — that would be the loop nominating a chapter assignment.
3. Wire exr_audit_apply.py to write the retirement back to the source row as a typed disposition, and add the 21st gate reconciling weave-tagging against deep-read-lifecycle.
4. Run a SCRIPT (not a regex estimate) to size the no-real-title class exactly. Then quarantine — never delete — the mining tags on those rows into a declared extension, and queue them for local title extraction. Per the standing memory rule, the sweep gets an adversarial re-review before it lands, exactly as bulk-reject rounds do.
And record the calibration explicitly in the ruling so it cannot harden into the wrong doctrine: this retires a hallucinated pointer at a title-less row, it does not rule Jewish or biblical material off-limits. Ch 9 and Ch 18 are live surfaces and the biblical facet is a named lens (SIGNIFICANCE_LENSES §51). No monster was softened, no fight avoided, no content thinned — the article has no playable content to thin. If a future pass wants contemporary Haredi/Hardal material, that is a §17.1 call routed to you, not a prohibition.
Reasoning: Three things decide it.
First, the pointer is an instruction and the care finding is not. The care finding lives in prose inside EXR_SRC_00491.json, which no script reads. The tags live in a CSV column that START_HERE line 34-35 names as the prioritizer for the very next lane. Between a passive note and an active instruction, the active one wins by default every time, and it keeps winning through every regeneration. Options A and B both leave that asymmetry standing somewhere.
Second, this is not primarily a care call, and treating it as one gets the remedy wrong. The tags on SRC_00491 are FALSE — divination_astrology;underworld_otherworld is not what a Haredi/Hardal eschatology article contains. They are false because the row's title is an OJS upload filename and the tagger inferred from nothing. Framed as a care call you get option B and fix one row. Framed as a data-integrity call you see the generating mechanism, and the mechanism has ~297 rows downstream of it. The care severity is what makes this row visible; the blindness is what makes it a class.
Third, the care calibration genuinely holds here in both directions, and I tested it against the inflation risk the brief warns about. This is not a defang: there is no monster, no deity-as-character, no boss, no folklore, no fun being routed around. §17.1 line 951 forbids "routing around valuable, grounded, playable cultural material" — this article contains none. What it does contain is a living sacred tradition, named revered authorities (both Kooks), a living figure, and active Temple Mount politics: the exact protected set at line 965-967. So retiring the pointer costs zero content, which is precisely why it is not the timid option — the timid option would be to extend this into a rule about Jewish material generally, and I am recommending against that in the same breath.
D over C because C's gate protects only the 2% of rows that have been deep-read, and the risk lives in the 98% that have not. D over B because six sibling rows on the same shelf carry pointers at least as bad — ethnography on Holocaust survivor testimony, mystery_crime on Toledot Yeshu — and fixing only the row that happened to get audited is fixing the row that got LUCKY, not the row that is worst. D's cost is bounded by the quarantine-not-delete design, which is the same non-destructive shape the 2026-07-19 substrate remediation already used successfully at the same scale.
The timing argument is decisive: the rollout that consumes this index is the ▶NOW next step. This is the last moment the sweep is cheap.
Strongest objection (author's own): The ~297 number is a regex guess and the sweep may be aimed at the wrong population — which would make D an expensive, self-inflicted slowdown on the rollout at exactly the moment it launches.
Every confirmed misfile I found is from ONE journal batch (Scripta Instituti Donneriani Aboensis 27, 2016) on ONE shelf (flores-indonesia), reaching the registry through one upload convention (OJS journal-manager filenames). Seven rows. That is a narrow, specific vector — and there is a much cheaper hypothesis that explains all seven: not "filename titles produce bad tags" but "this one journal batch got shelved wrong." If that is the true generalization, then the correct fix is a targeted re-check of the OJS-artifact filenames (which SRC_00492's own EXR flags recommend by name), and D quarantines roughly 290 innocent rows for nothing, throwing away prioritizer reach precisely when the region rollout needs breadth and paying an identification-pass tax to buy it back.
There is a second edge to this. A numeric filename does not imply a misfile — a well-shelved book on the right region shelf with a filename-shaped title may have been tagged perfectly adequately from its shelf assignment and its chunks, not from its title. My blindness argument assumes the tagger saw only the title. I did not read the tag-pass prompt or its outputs; that assumption is inferred from SRC_00491's tags being wrong, and one wrong instance does not establish the mechanism. I could not verify the tagger's actual inputs — Bash was unavailable and the workflow record wf_5badb793-b78 is not a file I located.
What this objection does NOT touch: steps 1-3 of the recommendation are unaffected by it. The seven rows are confirmed by an auditor who opened the PDF, and the write-back mechanism plus the 21st gate are correct regardless of how wide the blind class turns out to be. If you want to accept the objection, rule C now and make step 4 conditional: run the sizing script first, sample 20 of the no-real-title rows against their actual content, and only sweep if the blindness hypothesis survives that sample. That is the version of D I would defend if the sample comes back mixed — and it costs nothing to sequence it that way.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (4):
admin,+Journal+manager (the same Scripta 27 / 2016 OJS batch, sequential upload ids 6792-6807), not the 7 the brief works from. Eight are new: SRC_00232 (yoruba, seed=law_governance), SRC_00233 (levant_israel, ethnography), SRC_00234 (san_khoisan), SRC_00235 (san_khoisan, proverbs_riddles, fun_potential='family-naming folklore anecdote flavor'), SRC_00488 (cross_cutting, ethnography;songs_ballads), SRC_00489 + SRC_00490 (levant_israel, philosophy_school), and SRC_00495 (cross_cutting, seed=festival_seasonal;songs_ballads, fun_potential='niggunim wordless-melody tradition for a festival minigame'). All eight are not_deep_read — no reader has ever declined them. SRC_00495's pointer is MORE specific and arguably worse than SRC_00491's: it names niggunim, a living Hasidic devotional practice, as a festival minigame. And SRC_00233/00489/00490 sit on levant_israel — a plausible-looking shelf, therefore more dangerous than the obviously-wrong flores shelf, and Ch 18 Levant is a live region-page surface per SIGNIFICANCE_LENSES §2C. None of the brief's four options targets these: B is one row, C fires only on deep-read rows, D reaches them only incidentally inside a ~300-row sweep.admin,+Journal+manager prefix escaped it. The evidence therefore points at a 14-row residue, not a 300-row wall, and it makes the brief's own strongest_objection ('this may be one journal batch, not a filename class') materially stronger than the brief credits it.cross-cutting (it carries a reshelve_note recording the 2026-07-21 fix), its title is 302 1 2340 1 10 20140211 (a 2014 upload of a different convention, not the admin,+Journal+manager batch), and its care_tier is standard, not elevated/high_care. Option C's stated trigger — 'all output arrays empty' — would correctly NOT fire on it, so C and the recommendation contradict each other on this row. Applying the recommendation as written blanks philosophy_school on a row that yielded real L3 output. The one-off set is six rows, not seven.story_seed_tags appears in ZERO .py files (only docs/START_HERE.md and docs/ROADMAP_TO_5090.md), so nothing consumes it automatically today. The true cost of a wrong tag is misordering plus a wasted Opus read — exactly what happened, and the care gates held. This does not rescue option A (the substrate region_tags leak is real, live, and entirely independent of the tags; and a hallucinated field sitting in a canon registry is a defect on its own terms), but the ruling should rest on data integrity plus the substrate leak, not on an auto-harvest that the pipeline does not perform.Option the critic says was MISSING: OPTION B+ — "the batch remedy" (B's row fixes + C's write-back mechanism + a sweep scoped to the CONFIRMED vector instead of the title-shape class). The brief jumps from 7 rows (C) straight to ~300 rows (D) with nothing in between, but the evidence points to a 14-row class. Script check of the registry: exactly 14 rows carry a source_title beginning admin,+Journal+manager — SRC_00231, 00232, 00233, 00234, 00235, 00487, 00488, 00489, 00490, 00491, 00492, 00493, 00494, 00495 — all fourteen from the same Scripta Instituti Donneriani Aboensis 27 (2016) OJS upload batch (sequential upload ids 6792-6807), and all fourteen still carry region_tags. This is precisely what SRC_00492's own EXR flag already recommended by name ("BATCH_MISFILE_PATTERN ... Recommend a full-batch bibliographic audit"); my count shows the batch is 14, not the 7 that flag listed. Scope: page-1 title/author/year extraction on 14 PDFs (deterministic + local model, zero paid tokens), then de-shelf/re-shelf on the extracted identity, blank tags only where the identity refutes them, and park the high-care ones for Josh. It needs NO quarantine column, NO third registry extension, NO 300-row fidelity-baseline churn, and costs ZERO rollout reach. It closes the entire confirmed vector — which D's title-shape sweep also closes, but at ~20x the collateral and on a hypothesis the brief itself admits it could not verify. D's ~300-row sweep then demotes cleanly to CONDITIONAL (sizing script + 20-row sample first), which is the version the brief's own strongest_objection already concedes it would defend.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
Take B+ now; hold D as conditional. Concretely:
1. SIX rows, not seven, in the immediate deterministic apply — SRC_00231, 00487, 00491, 00492, 00493, 00494. EXCLUDE SRC_00015: it has 2 populated l3_connections, was already reshelved to cross_cutting (its EXR carries a reshelve_note), is a 2014 upload of a different convention, and its care_tier is standard. Blanking its philosophy_school tag would delete a correct tag on a row that produced usable output.
2. Extend the identity/de-shelf work to the full 14-row OJS batch (the 6 above plus SRC_00232, 00233, 00234, 00235, 00488, 00489, 00490, 00495). Eight of these have NEVER been deep-read, so no reader has ever declined them, and two carry pointers at least as pointed as SRC_00491's: SRC_00495 fun_potential = "niggunim wordless-melody tradition for a festival minigame" (a real living Hasidic devotional practice), and SRC_00235 = "family-naming folklore anecdote flavor" on the san_khoisan shelf. Three more — SRC_00233, 00489, 00490 — sit on levant_israel, a PLAUSIBLE-looking shelf, which makes them strictly more dangerous than the obviously-wrong flores shelf, and Ch 18 Levant is a live region-page surface (SIGNIFICANCE_LENSES §2C names "Ch 18 Levantine Kabbalistic tradition" and the Yahweh-and-Asherah anchors). A Ch-18 pass-2 region-filtered query would consume these silently.
3. Keep the brief's steps 2 and 3 verbatim: park SRC_00491 and SRC_00487 in a Josh-review holding category on no region shelf, and wire the EXR→registry write-back plus the 21st gate. Note for cheapness: that write-back has ALREADY been done once as an ad-hoc deterministic apply (commit bca0101, "Registry lifecycle sync: the 17 audited flores sources advance extraction_status deep_read_extracted -> deep_read_audited, fidelity baseline re-emitted in the same commit"). The shape is proven; C only has to promote it to a tracked script and widen it from extraction_status to the weave-tagging fields.
4. DEMOTE the ~300-row title-shape quarantine to conditional. Run the sizing script; note that only 104 of the 327 numeric-title rows still carry region_tags at all (223 were already stripped by the 2026-07-19 remediation), so the substrate-leak surface in that class is ~104, not ~300; sample 20 of those 104 against stored chunk text; sweep only if the blindness hypothesis survives the sample. Adversarial re-review before it lands, per the standing bulk-round rule.
5. PRESERVE the brief's calibration paragraph verbatim in the ruling. It is correct and load-bearing: this retires a hallucinated pointer at a title-less row, it does not rule Jewish or biblical material off-limits; Ch 9 and Ch 18 are live surfaces. Worth adding as evidence: SRC_00493's own EXR already records the thematic resonance between Scandinavian-Jewish assimilation historiography and the game's assimilation-integrity mechanic — the material is representable; the refusal here is scope, not protection.
Blast radius: A CLASS, and Josh should be told he is being asked for a class rule rather than a row ruling.
Measured, not estimated: 29 deity rows across 12 extraction files (docs/book_extractions/*.json + docs/proposals/category_extractions/*.json). Four carry the disguised-mortal device and all four are living traditions — EC_09 Mori Kraeng (flores-indonesia, rejected), EC_01 Hera Wula Watu Thana (malay-world/Palu'e, proposed, care_flag "none"), Dewi Danu and Indra (bali, both queued, both care_flag "none"). Zero dead-cult deities carry it.
The generator is docs/proposals/DEEP_BOOK_PROCESSING_CONTRACT.md L183-185, which instructs every extraction agent that "the only limit is a deity-name on a mortal NPC or a revered real figure cast as villain." That clause binds every future deep-read across a library the pipeline has barely started, so the row count grows monotonically until it is changed.
Downstream consumers of a ruling: CVD §17.1 (a new tier alongside the existing L953 class rule) and §17.16 L1193 (a qualifying clause); the contract clause above; T0_Creature_Roster species_class=deity and T0_Character_Index as landing registries; _source/02_Tier_2_Region_Pages/flores_island.md Section 5, which currently names no Supreme Being at all and would gain one; the six deity-patron chains in docs/proposals/whole_arc/through_line_deity_patron.md (Tier 2 ratifies five of them and loosens them); and the region-page and extraction gates, which would need the tier recorded as a typed field if it is to be checkable rather than advisory.
Not touched by any option: combat scope anywhere. The Flores malevolent register (polo, ata janto, wina wa, ineweu, empo-dehong) stays fully fought under A, B, C and D alike, and no boss row moves.
Context (verified on disk):
THE ROW. C:/dev/humanity-forgotten/docs/book_extractions/EXR_SRC_00469.json, EC_09 "The Duumvirate Creator (Mori Kraeng / Du'a Nggae / Ama Lero Wulan Reta / Rera Wulan Tana Ekan)", entity_kind deity, target T0_Character_Index, region_ref flores-indonesia, entity_status: "rejected" with audit_note: "defanged or mis-credited at audit". Its deity_portrayable_note and portrayal_note (identical strings) read: "A REAL, portrayable GOOD creator (deities-are-real ruling): usable as a benevolent power that acts through its naga/darat/nitu messengers, or a disguised quest-giver / rescuer. HARD LIMIT: never put this deity-name on a mortal NPC." The L3-only audit pass (audit_summary.care_findings[0], severity ROUTE_TO_JOSH) is what produced this brief.
WHAT THE SOURCE ACTUALLY SAYS — I read the primary text, not the extraction summary. Retrieved from the ingested chunks of SRC_00469 (Alexander Jebadu SVD, Verbum SVD 60:1-2, 2019) at ~book/SRC_00469#p4, #p5, #p7, #p32:
#p32): the author — an SVD Catholic priest writing from inside the community — sets the Flores "omnipotent Absolute Being" and the Judeo-Christian God in the same structural frame, and refers to the five peoples "who still cherish their traditional religions." The living-syncretism premise is REAL in the source's own voice.WHAT CANON SAYS. CVD _source/01_Tier_1_Foundation/T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md:
BUILT PRECEDENT — the repo has already answered a version of this four times, consistently:
docs/spine/CH_18.md L24/L124-125 stages him BUILT and embodied as a disguised mortal: "The broad stranger who found her on the throttled quay — a fisherman with a storm's patience... is more than the coat he wears: the storm-god Baal-Hadad walking the shore in a human skin," then "sheds the human coat as it goes under, honored and unfought." Ratified as D-DRAGON-18 in docs/proposals/systems/RULINGS.md L13.docs/spine/CH_07.md L252/L329/L333: honored, inviolate, the myth's own asura fought in his stead — he is never given a body or an NPC surface. The chapter is explicitly not defanged (L328 restores the Soorasamharam moveset), it just never puts the living god on screen as a person.docs/proposals/whole_arc/through_line_deity_patron.md L109 builds the Sedna sea-floor descent as a played DEITY_PATRON set-piece; L71 seats Papa Legba at the Haitian crossroads as the gate greeted before Bois Caïman opens; L89 keeps the Andean apu/mallku fighting beside the player as "the ratified template."So the built pattern is already: living-tradition deity appears AS ITSELF in its own idiom; the mortal-disguise device has been ratified exactly once, for a deity with no worshippers.
THE CLASS IS ALREADY LIVE AND HANDLED INCONSISTENTLY. I enumerated every deity row in the extraction corpus (docs/book_extractions/*.json + docs/proposals/category_extractions/*.json): 29 deity rows across 12 files. Four carry the disguised-mortal device — and all four are LIVING traditions: EC_09 Mori Kraeng (flores-indonesia, status rejected); EC_01 "Hera Wula Watu Thana (Sun Moon Stone Earth)" in EXR_SRC_00452.json — the Palu'e Supreme Being, care_flag: "none", status proposed, note "usable as the recipient of the earth-healing rite, or (disguised) as a quest-giver"; and in EXR_SRC_00251.json both Indra and "Dewi Danu (Goddess of the Lake)" (bali, care_flag: "none", status queued) — Dewi Danu described as "a strong disguised-benefactor / quest-giver candidate." Zero dead-cult deities carry the device. One auditor routed the Flores Supreme Being to Josh; the identical Palu'e Supreme Being sailed through with care_flag none. That inconsistency is the actual defect.
THE GENERATOR. docs/proposals/DEEP_BOOK_PROCESSING_CONTRACT.md L183-185 defines the field: "deity_portrayable_note — where entity_kind is deity, the portrayability handling per the deities-are-real ruling: whether the being is a good deity usable as a disguised quest-giver or rescuer, or an evil being staged as a boss; the only limit is a deity-name on a mortal NPC or a revered real figure cast as villain." That clause is what minted all four rows and will mint every future one across the remaining deep-reads.
REGION STATE. _source/02_Tier_2_Region_Pages/flores_island.md (chapter_set CH_02, CH_03; time period pre-colonial ~1000-1500 CE with Portuguese/Dutch strata behind time-fluctuation windows, L20). Section 5 (L502-608) already builds the messenger tier in depth — naga golo / naga beo / naga tana, darat/kakartana, nitu kazu / nitu mbaru sao / nitu mata wae, the empo de tana, mori de tana — and grep confirms the page currently names NO Supreme Being at all. The divine seat above the messengers is simply absent. Also relevant: Catholicism reaches Manggarai only in the late 1920s (L603), so the Catholic stratum is Section-18 window material, not CH_02/CH_03 present.
Why this needs a ruling: Three reasons the loop cannot take this alone. (1) It reads directly on CVD §17.16 L1193, which is constitutional text that names the disguised-human device without qualification — any rule that narrows it is a CVD-level edit, not creative-within-vision. (2) It is a living-sacred-tradition call about the Supreme Being of five currently-practising peoples in a community where the source's own insider author treats that being and the Christian God as continuous; that sits inside the §17.1 protected set (living sacred traditions), which CLAUDE.md reserves to Josh. (3) It is a CLASS, not a row: the governing clause in DEEP_BOOK_PROCESSING_CONTRACT.md L183-185 is already producing the same proposal for Bali, Palu'e and every future deep-read, and two auditors have handled identical rows two different ways. The loop can apply a row; it cannot rewrite the contract clause or add a tier to §17.1.
Options considered:
Tier 1 — NO living worshipping community (Baal-Hadad, Marduk, Cybele, Egeria, Charon): full license, disguised-human quest-giver included. Unchanged; D-DRAGON-18 and the built CH_18 staging stand.
Tier 2 — LIVING tradition, non-supreme deity (Dewi Danu, Indra, Sedna, Legba, Pele, the apu, Quan-Am, the Jade Emperor): fully portrayable AS ITSELF and embodied — quest-giver, rescuer, ally who fights beside the player, negotiated sovereign. The mortal-disguise device is permitted where the tradition's OWN corpus carries the theophany/disguise motif (Indra: yes, it is his own epic device; Dewi Danu: no, she is met at the lake and the Ulun Danu temple through her own cult). Where the tradition supplies no such motif, use the mode of contact the tradition itself specifies. This tier LOOSENS the current built practice, which has never once embodied a living deity in disguise.
Tier 3 — LIVING tradition, SUPREME BEING / high creator, and any figure the community's living usage identifies with God (Mori Kraeng, Du'a Nggae, Hera Wula Watu Thana, the Akan Supreme Being): real, honored, portrayable as presence, sign, voice, refuge and consequence, and freely usable as quest-SOURCE through its own messengers and diviners — but never given a mortal body or a human persona, and never a Character_Index NPC row. Contact takes the form the tradition names.
Apply immediately: EC_09 un-rejected and re-noted to Tier 3 (messenger-channel, presence, refuge); Hera Wula Watu Thana re-noted Tier 3 and its care_flag 'none' corrected; Dewi Danu re-noted Tier 2 without disguise (no motif in her cult); Indra re-noted Tier 2 WITH disguise permitted (his own epic's motif) — while the Ch-72 'echoed, never supplanted' guard at through_line_deity_patron.md L37 still holds.
Author recommendation: Rule Option D — the three-tier distinction rule — and apply EC_09 at Tier 3: un-reject it, seat it as the Flores divine seat, contact through the naga/darat/nitu messengers and diviners the source itself names, presence and refuge and sign on the player-facing surface, no human coat, no NPC persona row. Correct the three sibling rows in the same pass (Palu'e Supreme Being → Tier 3 and its care_flag 'none' fixed; Dewi Danu → Tier 2 embodied, no disguise; Indra → Tier 2, disguise permitted as his own epic's device), and rewrite DEEP_BOOK_PROCESSING_CONTRACT.md L183-185 so the clause stops minting the defect.
Reasoning: Three things decided this.
First, the deciding fact is not a care instinct, it is a source fact. SRC_00469 p.98 states that this God "will not directly help human beings... but through His/Her messengers — good spirits — communicating through various diviners." That is the tradition's own account of how the being contacts the world. A disguised-mortal Mori Kraeng is therefore not a bolder portrayal — it is an inaccurate one, and §17.1 L951's "shown as the cultures themselves understand them" is the clause it fails. This is care-as-authenticity, the kind §17.1 demands, not care-as-omission, the kind it forbids. That distinction is the whole ruling.
Second, I deliberately tested Option D against the care-inflation trap, because that trap is this project's most-repeated failure. The test is: does the rule remove content, defang a fight, or protect something that should be fought? It does none. No combat is touched — a benevolent Supreme Being was never a combat target under any option. No monster is protected — the polo, ata janto, wina wa, ineweu and empo-dehong all stay fully fought (flores_island.md L567-575). And the rule is a net content GAIN twice over: EC_09 moves from rejected to live, and Tier 2 explicitly authorizes embodied living-tradition deities plus the disguise device where the tradition carries the motif — which current built practice has never once done. If anything, D is a loosening dressed as a boundary.
Third, this had to be a class rule because the corpus proves the class exists and is being handled at random. Four disguise rows, all living traditions, zero dead-cult ones; one routed to Josh, one waved through with care_flag "none"; and the clause at DEEP_BOOK_PROCESSING_CONTRACT.md L183-185 that generated all four is still standing with 29 deity rows already banked and most of the library still to deep-read. Ruling only EC_09 fixes one row and leaves the machine producing the same row forever.
I rejected the auditor's own recommendation (B) as the answer to the class, even though I adopt it as the answer to this row. "Messengers only" is right for a Supreme Being whose theology says exactly that, and wrong the moment it is generalized — it would ban Indra from a disguise that is his own epic's device, which is care inflation by any measure. The Tier-2/Tier-3 split is what makes B's correct instinct safe to generalize.
Strongest objection (author's own): The strongest objection is that Option D narrows constitutional text on a distinction the CVD deliberately did not draw. §17.16 L1193 reads "a good deity may appear as a disguised human quest-giver or a rescuer" with no living/non-living qualifier, and that line was written INTO the CVD by the 2026-07-13 R-17 recalibration (RULINGS.md L47, commit b27da74) — that is, it is not legacy text I am refining, it is text Josh added specifically to stop the loop being timid about deities. Against that history, an agent returning three months later with "actually, for most of the world's cultures, not that device" looks exactly like the regression pattern Josh has had to reverse at D-DRAGON-18, at the protagonist-capture rule, and at J10 ("you're being way too conservative"). A second, sharper form of the objection: my Tier-3 rationale leans on the p.98 messenger theology, but a tradition's theology of how a god ordinarily acts is not a prohibition on how a fantasy RPG in which the metaphysical is canonically real (§17.1 L959, §2) may depict that god acting once. Christianity holds that God acts through sacraments and yet the incarnation is its central story; "the tradition says indirectly" may be an argument about the ordinary case, not a fence. If Josh reads it that way, Option A is defensible and my rule is one more unnecessary fence.
My answer, offered but not decisive: the recalibration was about not defanging FIGHTS and not omitting content, and Tier 3 does neither — it changes the costume, not the presence, and hands back a messenger-quest channel in exchange. But if Josh judges that the costume is the content, A is the ruling and I would apply it without argument.
One further honest weakness: the "identified with the Christian God" premise, which is the single most escalating fact in the whole case, is verified only in substance (the source's SVD-priest author treats the two as theologically continuous, p.124) and not at citation grain (no page states that Mori Kraeng is the Manggarai liturgical name for God). If that premise is softer than the audit's phrasing implies, the Flores case sits closer to an ordinary living-tradition high creator, and the gap between Tier 2 and Tier 3 narrows.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (4):
_source/02_Tier_2_Region_Pages/angkor_khmer.md L251 is explicitly Vaishnavite ('Angkor Wat is Vaishnavite (dedicated to Vishnu, unusually west-facing)'), L348 stages the king's apotheosis as Vishnu, and docs/spine/CH_72.md L164/L184 already names Vishnu, Shiva and Brahma in a MAXIMUM-care living-religion node. The brief's own deciding standard is the tradition's own account of how the being contacts the world (SRC_00469 p.98); for Vaishnavism the tradition's own account IS embodiment. So Tier 3 fails the brief's own test at its first hard case, and it fails it in the defang direction the brief spent a whole section auditing against. This is the one finding that changes the answer.docs/book_extractions/EXR_SRC_00228.json EC_02 'Haji Guru' (region_ref sumatra-batak, entity_status proposed, care_flag "none"), portrayal_note: 'A good divine servant (deity-adjacent, real and usable) — viable as a disguised quest-giver (a stranger-hunter who sets the player a hunt) or an aid figure; never a deity-name placed on a mortal antagonist NPC.' Haji Guru is the divine huntsman-servant of 'the Dairi upper-god Debata i datas langit' — a living Batak/Dairi tradition, and the source row even carries its own elevated-care flag elsewhere in the file ('the endangered Dairi language warrants elevated authenticity care'). It was missed because its entity_kind is folkloric_being, not deity. That is not just a count error: Option D is written into deity_portrayable_note and into a contract clause that opens 'where entity_kind is deity' (DEEP_BOOK_PROCESSING_CONTRACT.md L183), so the rule as specified would leave this row and its whole class uncovered while reporting the class closed. The fix is cheap — key the rule on the portrayal of any divine or deity-adjacent being (deity, folkloric_being, ancestor, guardian-spirit), and have the contract clause govern portrayal_note as well as deity_portrayable_note.docs/proposals/whole_arc/phase1_A2_ch66_69.md L49 and L51 hold 'Tiamat/Apsu/Marduk/Nammu audit-only, un-bodied, never slain' and through_line_deity_patron.md L110 keeps Tiamat/Apsu un-bodied — and MARDUK has no living cult. Built practice therefore does not split on living-vs-dead at all: it embodies storm-gods and patrons (Baal-Hadad, Sedna, Legba, apu/mallku) and holds primordial creators un-bodied REGARDLESS of whether anyone still worships them. That cuts two ways the brief missed. It gives Tier 3 more precedent than the brief claimed (creator-rank un-bodiment is already built practice), and it falsifies Tier 1's blanket license (Marduk is a dead-cult deity already handled as un-bodied, so 'full license, disguised-human quest-giver included' for all of Tier 1 would contradict a landed handling). The brief cited Tiamat/Apsu but dropped Marduk from the same sentence of the same source.Option the critic says was MISSING: OPTION E — the rank-free formulation: one rule, keyed on the tradition's own attested mode of contact, no new tier. \"A deity is real and portrayable as itself. The embodiment and mortal-disguise devices are available wherever the tradition's own attested corpus carries the theophany or disguise motif; where the tradition attests a different mode of contact, that mode is the one used. The §17.1 firewall is unchanged: no deity-name on a mortal NPC, no revered or real figure as villain. The motif determination carries a source citation.\" This resolves Flores identically to D (SRC_00469 p.98 attests the messenger mode, so Mori Kraeng is seated as the divine seat contacted through the naga/darat/nitu and diviners, no human coat, no Character_Index persona) while automatically fixing the Tier-3 over-reach — Vishnu's avatars, Shiva's Kirata disguise, and Indra's epic theophany all remain available because their own corpora carry them, and Dewi Danu and Hera Wula Watu Thana lose the device only if no motif is attested for them. It also touches the CVD far more lightly: it does not add a tier to §17.1 and it qualifies §17.16 L1193 with a grounding requirement (\"as the tradition's own corpus carries it\") rather than a cultural exclusion, which is materially easier to defend against the R-17-recalibration objection the brief itself names as strongest — nobody can call \"cite the tradition\" a defanging, and §17.1 L957 (\"Claims trace to record\") already establishes exactly that discipline for living-culture depiction. Its cost relative to D: it drops the crisp rank boundary, so a reviewer cannot tell at a glance whether a row is safe without the citation — which is arguably a feature, since the fuzzy Tier-2/Tier-3 boundary is a con the brief already concedes.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
Rule the CLASS as the brief proposes — the diagnosis, the inconsistency finding, and the Flores outcome are all correct and should stand — but re-key the rule from divine RANK to the tradition's own ATTESTED MODE OF CONTACT, and widen its reach. Concretely: (1) Adopt Option E as the operative rule; keep D's three tiers only as non-binding REGISTERS that describe where each answer usually lands (no-living-cult → usually free; patron/storm-god → usually embodied; primordial creator → usually un-bodied), explicitly yielding to the tradition's own corpus in both directions. Built practice already supports the register framing better than the brief argued — phase1_A2_ch66_69.md L49 holds Marduk, a dead-cult deity, un-bodied — which is also why D's Tier-1 blanket license needs the same yield clause. (2) Apply EC_09 exactly as the brief recommends: un-reject, seat as the Flores divine seat, contact through the naga/darat/nitu messengers and diviners per SRC_00469 p.98, presence and sign and refuge on the player-facing surface, no human coat, no Character_Index persona row. The brief's reasoning here is sound and this outcome is unchanged under E. (3) Correct the sibling rows in the same pass, but require a cited motif determination for each rather than an asserted one — Indra keeps the device (Mahabharata/Puranic theophany, cite it); Hera Wula Watu Thana and Dewi Danu lose it unless a motif is found and cited, and Hera Wula Watu Thana's care_flag \"none\" is corrected either way. (4) Add the FIFTH row the brief missed: EXR_SRC_00228 EC_02 Haji Guru (sumatra-batak, living Dairi tradition, care_flag \"none\", proposed) carries the device on portrayal_note under entity_kind folkloric_being. (5) Rewrite DEEP_BOOK_PROCESSING_CONTRACT.md L183-185 to govern the portrayal of any divine or deity-adjacent being across portrayal_note AND deity_portrayable_note — not \"where entity_kind is deity\" — or the clause will keep minting the defect on non-deity rows while the class is reported closed. (6) Tell Josh the ruling touches TWO CVD passages: a grounding qualifier on §17.16 L1193, and a disambiguation of \"honored non-physically\" at §17.1 L953, which names Pele — the brief presents this as a single-clause cost. (7) Route the audit's second finding (real named 1992-2013 Manggarai killing victims, S04) as its own brief; a deity ruling does not dispose of it.
Blast radius: A CLASS, and Josh should be told he is being asked for a rule, not a seed call.
The immediate scope is small — S04 is one queued row (seed_status "queued") in one of 37 extraction records processed so far, and the region page already holds it pending at lines 1408-1419, so nothing is blocked today. But the class is large and imminent:
Note also the second ROUTE_TO_JOSH finding in this same record (EC_09, the Duumvirate Creator — whether a currently-worshipped Supreme Being may appear as itself) is a separate decision and is NOT resolved by this brief.
Context (verified on disk):
WHAT S04 ACTUALLY IS (read in full at C:/dev/humanity-forgotten/docs/book_extractions/EXR_SRC_00469.json, lines 100-124). seed_kind mini_arc_situation, proposed_layer L2, chapter_ref CH_03, zone wae_rebo_village, seed_status "queued". A death in a village curdles into certainty against a poor, unpopular elder named as the ata janto; the player has a narrow window to find the true cause, stand between the accused and the crowd, and steer the community to its own lawful non-lethal repair. Refusing to intervene or feeding the suspicion lets the killing happen and marks the world-state. Its own care_flag already reads HIGH and already bars reusing the real victims' names and bars making the killing progression-viable.
THE SOURCE. Alexander Jebadu SVD, "Sorcery and Witchcraft in Flores/Indonesia...", Verbum SVD 60:1-2 (2019), fieldwork Dec 2016-Mar 2018 (_pilot_provenance, line 717). The audit verified Figure 2 at print p.100-102: 25 witch-hunt cases across seven Manggarai regions 1992-2016, with real named victims and dates (audit finding at line 738 names Frans Mada 55, publicly killed 1992; Petrus Nggut 67, killed by his own children and relatives 2001; Donatus Halal, Thomas Tahi, Aloysius Talu). p.103 carries the "Mawe case" — handshake-test, oath over a slaughtered black chicken, confession of 38 victims, torture to death in the rumah adat gendang. These are real, recent, identifiable, and the descendants are living.
AUTHORITIES, VERIFIED BY READING.
Why this needs a ruling: Three reasons, any one sufficient. (1) It is §17.1-hard-line-shaped: contemporary intra-community lethal violence in a named living region, where the community itself is the would-be killer — the one configuration where "the story antagonist routes through the complicit broker, state, or institution, never through the community" (§17.1 line 965) has no institution to route through. (2) Every seating that honours the source's own era requires a canon change Josh owns: CH_03's ratified time_fluctuation_range stops at 1900 CE and CH_63's stops at 1951, so a contemporary staging means minting a new modern window on a Chapter_Index row. (3) It is a CLASS rule, not a seed call — the answer binds every future contemporary ethnography, and the modern arc is full of them.
Options considered:
Author recommendation: Option C, with Option B's de-identification rule folded in as a binding term — and ruled as a CLASS RULE, not a seed decision.
Concretely: KEEP the beat. Build the accusation-pressure version at the chapter's era-present at attested stakes (suspicion, the ulu lau reading, ostracism/exile of an accused kinsman, the player able to find the true cause) with no killing. Stage the lethal version inside the already-ratified 1800s-1900s Dutch-colonial fluctuation window on the CH_03 row, wholly invented characters and village, the crowd acting from fear and grief and never monstrous, the killing never a watchable or rewarded beat, inaction costing the world-state offstage, and the community's own lawful non-lethal mechanism carrying the win. Verify the people-attribution before build: the attested accusation substrate is Nage (CH_02 ground), so either the beat seats there or a Manggarai-attested equivalent is sourced first.
The class rule, in three clauses:
1. NAMED-VICTIM CLAUSE. Real named victims of violence within living memory never reach a player-facing surface, and de-identification is at case-signature grain — no reproducible combination of place, date, method, and distinctive ritual detail. Names remain in the citation trail as provenance. (Extends the already-ruled living-informant rule at flores_island.md lines 1064-1067 from informants to victims.)
2. ATTESTED-STRATUM CLAUSE. Intra-community lethal violence is staged only at a stratum where the record attests it. Moving it earlier invents a practice for a living people's ancestors; moving it later asserts a living present. Both are §17.1 line-957 failures, in opposite directions.
3. COMMUNITY-AUTHORSHIP CLAUSE. Where the harm is community-internal and no institution is available to route the indictment through, the community keeps authorship of its own repair: the sanctioned win is prevention plus the community's own documented non-lethal mechanism, and the community's self-repair practice is staged alongside the harm, never only the harm.
Reasoning: The instinct to reach for "cut it" or "make it historical" is wrong in both directions here, and reading the files shows why.
Cutting fails because §17.1 line 961 does not merely permit this material, it demands it: a culture's documented morally-complex history is "a playable integrity test, not passive representation," and the repo has already ruled this exact way once, in this exact region, on this exact subject — EXR_SRC_00457's audit records the 19th-century witch-branding and enslavement as KEPT and routed as a playable integrity test. And the beat itself is the most dignifying use of this record available: the player is the reason a scapegoating does not end in a death, and the community's own cebong beo stands beside it as its own answer. A record of killings is not the same as a record that only kills.
Building it as authored fails for a reason the audit did not reach. The seed's problem is not that it is too dark — it is not dark enough to be a problem; the arc already lets the player join a captive raid at Ch 12 (§5.5 line 247) and kill an armed militiaman in present-day DRC (CH_40). The problem is evidentiary. No pre-colonial lethal witch-killing is attested anywhere in the processed corpus. Staging one at ~1000-1500 CE writes a lynching into the past of a living people on no record at all — which is exactly what §17.1 line 957's citation gate exists to stop, and it is defamatory in a way the modern record is not, because the modern record is at least true.
The contemporary option fails on a term the region page already wrote down: modern-and-colonial weight routes through the colonial and state apparatus, "never through the Manggarai, Ngada, Nage, Lio, or Keo communities themselves" (line 496-500). Every ratified modern chapter honours that — CH_39, CH_40, CH_42 all route present-day combat at apparatus and hold the community "combat-against-no-one." A present-day village lynching is the one thing that cannot be routed that way, and it would run against families who are alive.
That leaves the stratum where the record puts the lethality: the 19th-century window, which the CH_03 row already carries (tfr 1000-1900 CE), which needs no canon change, and which the region page has already used for precisely this kind of move with the Keo pig's-head war.
On the question the brief was asked to answer directly: a folkloric monster and a real named recent murder victim are not the same case, and the difference is not squeamishness. The ineweu in this same record (S05) is a boss and should be — a myth's own monster carries full fantasy license under §17.1 line 957 and the CVD's own line 1187. Frans Mada is not a motif. He was a person, killed in 1992, whose children may be alive; what protects him is not care-tier ceremony but the ordinary fact that his death is his family's, not the game's material. That distinction — license for the bestiary, the citation gate and de-identification for real people — is already the CVD's structure. The rule above just applies it at the grain where it actually bites: case signature, not name.
Strongest objection (author's own): The region page's own binding term arguably kills my recommendation too, not just Option D. Line 496-500 says the modern-and-colonial strata's honest weight routes "through the colonial and state apparatus, never through the Manggarai, Ngada, Nage, Lio, or Keo communities themselves." A protect-the-accused mini-arc in the 1800s window is still community-internal lethal violence with the community as the would-be killer — there is no apparatus to route it through, and the 19th-century seating buys distance in time without changing what the beat depicts. If Josh reads that line strictly, the honest conclusion is Option E (cut), and my recommendation is a distinction that will not survive contact with the page's own rule.
The counter I would make, and it may not be enough: the line governs where the INDICTMENT routes, and in this beat nothing indicts the community — the win is the community's own repair, the crowd is grief and fear rather than malice, and the people are shown healing themselves. But that is my reading of intent, not the line's text, and the line's text does not carve it out. If Josh wants the strict reading, the clean fix is to amend that page term to say what it means (the indictment routes through apparatus; community-internal harm is playable only under the three-clause rule above) rather than to let the seed die on an ambiguity.
Second, weaker objection: I recommend splitting one beat into two strata, and split beats are how good situations get diluted into two mediocre ones. A designer could reasonably say the whole force of "Before the Stones" is the single narrow window, and half of it at exile-stakes is not the same beat.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (6):
Option the critic says was MISSING: F — ROUTE THE INDICTMENT THROUGH THE CORRUPT ACCUSER; FUSE S03 AND S04; KEEP CH_03's PRESENT. Build one mini-arc in which the accusation against the poor elder is being DRIVEN — by an attested predatory ata janto working the forerunner racket (SRC_00469 p.110-111, already seeded as S03 "The Forerunner's Cure," whose ruled care_flag is "keep the community as victims-of-a-racket, not a mob"), or by the diviner who profits from being paid to name witches. The village is frightened and manipulated, not the story's antagonist; the accused elder is innocent; the player's win is exposing the racket, which is simultaneously the elder's acquittal and the community's own vindication. Inaction still marks the world-state and the elder can still be driven out or die offstage — the stakes survive intact. This needs NO era change, NO registry change, NO split of the beat, and it is the one option that satisfies flores_island.md:499 on its own text rather than by a reading of intent — because the indictment routes at a corrupted individual, exactly as T1_Integrity_Paths §5.5.5 provides ("that layer routes through the oppressor or corrupted-individual apparatus"; "a raider, a complicit broker, a corrupted knowledge-holder remain lawful playable adversaries") and exactly as the already-processed SRC_00457 record prescribes for this very strand ("the story antagonist is the accusing apparatus, not the accused outsider"). It is also CH_03's own established grammar: the chapter's ratified boss BE_0003 is "the bought Caci Champion... win exposes the broker... no kill" (flores_island.md:71).
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
Rule Option F, not Option C, and keep clause 1 verbatim.
WHAT TO BUILD: fuse S03 and S04 into one CH_03 mini-arc at the chapter's ratified pre-colonial present. A death curdles into certainty against a poor, unpopular elder; the pressure is being manufactured by a real predatory janto or a paid witch-finder who benefits from the naming; the player can read the tells, find the true cause, expose the driver, and hand the resolution to the community's own lawful non-lethal repair. Crowd acts from fear and grief, never monstrous. The killing is never watchable, rewarded, or progression-viable; inaction costs the world-state offstage. No era re-seating, no registry change, no split.
THE CLASS RULE, revised to three clauses:
1. NAMED-VICTIM CLAUSE — KEEP AS DRAFTED. Real named victims of violence within living memory never reach a player-facing surface, and de-identification is at case-signature grain: no reproducible combination of place, date, method, and distinctive ritual detail (the Mawe handshake-test / black-chicken oath / rumah adat gendang set is barred as a SET, not just by name). Names stay in the citation trail as provenance. Correctly grounded in flores_island.md:1123 and :748 and should be ruled regardless of what happens to the rest.
2. ATTESTED-BELIEF, NOT ATTESTED-INCIDENT — NARROW THE BRIEF'S CLAUSE 2. The citation gate (CVD §17.1 line 957) governs claims ABOUT a living culture's tradition, ritual, language, or sacred practice; the same bullet grants adventure content fantasy license "never bound to a citable source." So: the BELIEF and its idiom must be attested for the stratum; a fictional incident built on that belief does not need its own attested instance. The real bar is presentation — never depict lethal accusation as the era's customary or normal practice, and never assert it as something the culture did. Stratum-matching remains a strong default for depicting a PRACTICE, not a hard gate on a fictional crisis.
3. COMMUNITY-AUTHORSHIP + DRIVEN-ACCUSATION CLAUSE — REPLACES THE BRIEF'S CLAUSE 3 AND SUBSUMES IT. Where harm is community-internal, (a) the indictment routes at a corrupted individual, broker, diviner, or accusing apparatus — this route always exists and the brief's premise that it does not is false; (b) the community keeps authorship of its own repair, with its documented non-lethal mechanism staged alongside the harm and never only the harm; (c) no mechanic ever rewards or requires a crowd killing a suspected person.
ALSO REQUIRED BEFORE THIS REACHES JOSH: disclose EXR_SRC_00452 (Danerek, Construction Sacrifice in Eastern Indonesia, 2016 — care_tier high_care, same Flores/Palu'e Ch 2-4 sphere, unaudited, seeds still "proposed"), whose care_summary.binding_disciplines already dispose of this exact class in the Option-F direction. Whatever Josh rules must be reconciled against that record, and it should be audited in the same pass. Correct why_josh reason (2) — CH_63's ratified era already reads "through modern" — and correct the blast_radius chapter counts to 14 "Present day" / 4 "Composite revisit."
Blast radius: This is a CLASS ruling, and you are being asked for three classes at once — worth knowing before you rule, because a one-off answer here will not hold.
CLASS 1 — CORPUS SCOPE (the question as asked). What non-region, elevated-care, real-atrocity material is admitted, and under what contract? A ruling binds every future region pass and every misfile like this one. ~67 shelves exist; this pass alone surfaced two misfiles on flores-indonesia (SRC_00015, SRC_00231) plus SRC_00207 on tamil-south-india. Ruling only on SRC_00231 guarantees this returns.
CLASS 2 — ENFORCEMENT (the wider and more urgent one). There is no query-stage exclusion anywhere in harness/rag/ — no status column in store.py's chunk schema, no suppression path, and region_filter optional at query.py:130. Therefore EVERY "flagged and set aside" / "authorial-only" / "never a player beat" verdict in this repo is currently unenforceable by construction. That includes the Nazi-base/Base-211 authorial-only holds in modern_scope_53_58.md and CH_61's anti-fringe authorial-only holds. This decision is the natural trigger to close that gap, and the gap is far bigger than one Holocaust article.
CLASS 3 — MISFILE INTEGRITY. Twice-attested on one shelf and now a third instance found on another; the "admin-Journal-manager-NNN" filenames are OJS export artifacts that carry zero content signal. The audit's MAJOR finding stands: the pilot report's "six thin admin pages" diagnosis is wrong for SRC_00231 and the five siblings (SRC_00487/00491/00492/00493/00494) must be re-checked against stored text before any is closed. Nothing validates that a source sitting ON a region shelf is of that region — the inverse of the query-time leak the Flores region page already documents. A shelf-wide provenance audit belongs before the region-by-region rollout, not after.
One-off component: only the SRC_00231 registry row repair (title/author/year promotion, region correction). Everything else is class-level.
Context (verified on disk):
THE RECORD. docs/book_extractions/EXR_SRC_00231.json is a zero-row RATIFY. The source is not Flores: it is Sofie Lene Bak, "Repatriation and restitution of Holocaust victims in post-war Denmark," Scripta Instituti Donneriani Aboensis 27 (2016), pp. 134-152 — post-war Danish state restitution to Jewish survivors. The auditor verified this independently against 35 stored chunks rather than trusting the reader. The reader refused to mine it and scoped care honestly ("ELEVATED (of the actual content) / N/A for Flores"). That is correct calibration, not inflation. The live question is only the reshelve note at _pilot_provenance.MISFILE_FLAG.correct_shelf_suggestion.
FACT 1 — THE MATERIAL IS ALREADY IN THE SUBSTRATE. This is not an admit/exclude question at the door; the door is behind us. The 35 chunks are ingested and retrievable now. registries/T0_Source_Material_Registry/T0_Source_Material_Registry.csv:232 still carries region flores_indonesia and the garbage title token "admin,+Journal+manager,+951...".
FACT 2 — NAZI/ANTISEMITISM SCHOLARSHIP IS ALREADY ADMITTED. T1_Research_Corpus_Master [ACTIVE v1.1.4] lists Goodrick-Clarke's "The Occult Roots of Nazism" and "Black Sun" as Tier-2 NEEDED for Ch 67 Pohjola — explicitly to power the Hyperborea/Thule firewall. SRC_00207 (Occult Roots) is already acquired and ingested — and is itself misfiled, onto the tamil-south-india shelf.
FACT 3 — THE ARC'S OWN ANTAGONIST MAKES THIS LOAD-BEARING. HL_0109 (registries/T0_Hard_Lines [ACTIVE v0.2]/Sheet1.csv:110) rules the House of Velheim a composite fictional banking dynasty grounded in documented history including the Rothschild family at "Tier 1 Accessible," plus Vril/Thule Societies at Tier 3. Its production discipline: present documented history as history, present the negative-consciousness connection as the game's interpretation, never conflate the two in a player-facing artifact. HL_0109 is cited on 9 rows of T0_Antagonist_Network_Registry. CH_61 (T0_Chapter_Index line 63) spends a full care block holding the manufactured-consensus counter-campaign "clear of the antisemitic cabal trope (composite office, bounded scope, named instruments, dogwhistle hygiene, HL_0109)." A shadowy multi-generational financial dynasty steering history IS the classic antisemitic canard; canon already knows this and guards it arc-wide.
FACT 4 — REAL MODERN ATROCITY AGAINST A LIVING PEOPLE IS ALREADY IN SCOPE AND PLAYABLE. CH_41 (Chapter_Index line 43) carries apartheid and the TRC at care tier "elevated": documented removals, 31-Battalion tracker conscription, Krog/Mandela referenced, San agency shown "not only victimhood," the whole thing the ground of a playable land-rights legal-and-standoff climax with antagonism routed through the extractive concession, never the community. CVD §17.1 "Historical honesty, not niceness" mandates exactly this, and §17.1 care tiers "add depth, never subtract content."
FACT 5 — NO DENMARK OR JEWISH-DIASPORA CHAPTER EXISTS. Ch 61 "Europe Revisit" is Balkans/Thrace + Baltic (Romuva) + a re-homed Middle East reflection. Nothing in the 79-node arc lands on Denmark, and the 77-chapter count is locked (§17.12). So admitting this shelf unlocks no chapter.
FACT 6 — "FLAGGED AND SET ASIDE" IS CURRENTLY UNENFORCEABLE. I read the retrieval layer. harness/rag/store.py:54-57 defines chunks(chunk_id, collection, source_type, doc_path, ..., meta_json, embedding) — there is no status, exclusion, or quarantine column, and no query-stage suppression anywhere in harness/rag/. Quarantine exists only at ingest (OCR, drain_inbox.py). harness/rag/query.py:130 makes region_filter optional (str | None = None), and the region-page pilot already demonstrated unfiltered queries ranking Flores textiles into Egypt. So the record's own "not mined, set aside" is a comment, not a control: any unfiltered substrate query can surface this text into an authoring pack today.
Why this needs a ruling: Three reasons this exceeds the loop's authority. (1) It is CVD §17-level: the material sits directly against the §17.1/§17.16 absolute floor ("no real-world targeted hate or atrocity-glorification against a real living people") and against HL_0109, a canonical hard line governing the arc's central antagonist. (2) It is a corpus-SCOPE rule, not a record fix — it decides what class of elevated-care material the substrate admits and under what contract, binding every future region pass. (3) The auditor explicitly routed it: "whether a Holocaust shelf gets minted is not the reader's call or this audit's." Minting a shelf is a standing-canon act. The cardinal do-not-invent rule binds — I can produce and align the structured form and recommend, but the ruling is yours.
Options considered:
Author recommendation: Take Option C — admit as AUTHORIAL / L3 guardrail-grounding only, under an explicit handling contract, and treat the exclusion mechanism as part of the ruling rather than a follow-up.
Concretely: (1) correct SRC_00231's registry row — promote the verified Bak identity into source_title/source_author/source_year, drop region flores_indonesia, kill the garbage title token; (2) classify it authorial-only with its declared consumer named as HL_0109 and the Ch 67 firewall, never a chapter surface; (3) add the status/authorial-only column to the chunk store and honor it at query time, so the class is excluded from authoring packs by construction; (4) do NOT mint a playable Holocaust shelf or rescope any chapter; (5) run the shelf-wide provenance audit — SRC_00207 (Occult Roots of Nazism, sitting on tamil-south-india) proves the misfile is systemic, and the five sibling records the pilot report wrongly called "thin admin pages" must be re-checked against stored text, since this one is a full 19-page peer-reviewed article whose yield was zero for being off-region, not thin.
Reject B firmly: it is omission-as-safety against a corpus that already admits this scholarship, and it would blind the authoring lane to the exact canard its own antagonist architecture flirts with. Reject D: no chapter needs it and the Velheim adjacency is the one place the §17.16 floor is genuinely near. Reject A as written: not because reshelving is wrong, but because it asserts a dormancy the system cannot deliver.
Reasoning: The framing question — "should this enter the substrate" — is already answered by the facts on disk. It entered. 35 chunks are live and retrievable, Goodrick-Clarke is already acquired, and the RCM already needs Nazi-occult scholarship to build Ch 67. So the honest question is not admission but HANDLING, and the care calculus runs opposite to intuition.
The intuitive move is to push this material as far from the game as possible. That is backwards here, because of what this specific game is. The House of Velheim is a multi-generational banking dynasty that has covertly steered civilization for ~5,000 years, and HL_0109 grounds it in the Rothschild family at "Tier 1 Accessible." That is one bad authoring pass away from the oldest antisemitic conspiracy narrative in Europe. Canon already knows: HL_0109 exists, it is cited on 9 antagonist rows, and CH_61's care block is visibly working to hold the counter-campaign "clear of the antisemitic cabal trope... dogwhistle hygiene." That guardrail is doing real work with essentially no grounding underneath it. Antisemitism scholarship and Holocaust historiography are what let a writer recognize a dogwhistle before shipping it. Purging that literacy while keeping the Rothschild-grounded antagonist is the genuinely dangerous configuration — it optimizes the appearance of care against its substance, which is the §17.1 failure mode by name.
At the same time, D overreaches. §17.1 historical honesty and the CH_41 apartheid precedent are real, and if the arc had a Danish or Jewish-diaspora node I would weigh a playable treatment seriously — the October 1943 rescue is a collective-courage story with exactly the agency-not-only-victimhood shape CH_41 models. But no such node exists, the count is locked, and the Velheim adjacency means a playable Holocaust node would sit beside the fictional financial-conspiracy engine. That is where "no atrocity-glorification against a real living people" stops being abstract. Care here means weight in the guardrail, not spectacle in a chapter.
The engineering finding is what makes me insist the mechanism ships with the ruling. I went looking for the suppression path and there is none: no status column in store.py's schema, no query-stage exclusion anywhere in harness/rag/, and region_filter optional at query.py:130 with unfiltered leakage already demonstrated. Every "flagged and set aside" verdict in this repo is currently a comment, not a control. Ruling C without the mechanism produces the worst state available — elevated-care atrocity text live on a harvest shelf, under a record asserting it was set aside, generating false confidence in exactly the authoring band (Ch 59-65, the funded-consensus counter-campaign) where an unfiltered pull would collide with HL_0109.
Strongest objection (author's own): Option C's safety is entirely contingent on engineering that does not exist yet, and this repo has a documented history of building things and never wiring them (the anti-orphan pattern is a standing memory entry: "we build something then never use/reference it"). If the authorial-only flag does not land — or lands and is not honored by every query path — C degrades into A with more paperwork: the material sits live and retrievable, now with a formal ruling that says it is safe. That is strictly worse than B, where deletion is the one exclusion primitive that provably works today and needs no future compliance.
The objection sharpens: I am recommending the option whose failure mode is silent. B fails loudly (someone needs a source and it is gone). C fails invisibly (a build pulls Holocaust restitution text into a pack about a shadowy financial dynasty and nobody notices, because the record says it was set aside). Given that the misfile class is already proven systemic — SRC_00207 is sitting on the tamil-south-india shelf right now — betting on process discipline over a hard mechanism is the bet this project has lost before.
The honest counter is that C's value is defensive and therefore invisible when it works, which makes it chronically under-prioritized. If you do not intend to fund the exclusion mechanism now, take B for THIS source and keep Goodrick-Clarke on the narrow, already-declared Ch 67 firewall exception — a smaller, enforceable version of the same principle. Do not take C on the promise of later wiring.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (5):
collection column, which store.py enforces and query.py hardcodes at lines 64/170/177 — a third collection value is excluded from every read path by construction, no schema change. With either, Option C's stated con ("the only option whose safety DEPENDS on that engineering landing") is false, and the fallback advice "If you do not intend to fund the exclusion mechanism now, take B" would have Josh delete a peer-reviewed source on a premise that does not hold.Option the critic says was MISSING: Option E — "Apply the EXISTING, already-applied region-retag remediation to this cluster; scope authorial-only per-RECORD by content, not per-shelf." Concretely: (1) strip/correct region_tags in BOTH the registry row and the chunk meta_json in .rag/humanity_rag.sqlite, exactly as docs/pipeline_review/SUBSTRATE_REGION_RETAG_2026-07-19.md already did for 7,648 chunks across 240 rows on 2026-07-19 — its own ruled doctrine is "a wrong tag poisons region-filtered builds; an absent tag is honest... invisible to region-filtered queries until re-classified"; (2) promote the verified Bak identity into source_title/author/year; (3) reserve the authorial-only handling contract for the atrocity-specific record (the Bak restitution article) rather than the whole Jewish-studies cluster; (4) re-emit the fidelity baseline as that pass did. This closes the live retrieval path TODAY, uses a mechanism the repo has already built, tested and applied, and requires zero new engineering — which removes the entire basis of the brief's strongest objection and its fallback-to-B. If a hard, durable exclusion is additionally wanted, the collection column is an existing tested exclusion primitive: query.py hardcodes store.query("canon", ...) at line 64 and store.query("book_substrate", ...) at lines 170/177, so chunks moved to a third collection value are excluded from every read path by construction — no status column, no new predicate, no schema migration.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
Rule Option E + a NARROWED Option C, and strike the engineering precondition and the B-fallback entirely.
1. IMMEDIATE (no ruling required, do not wait on scope): strip the false flores_indonesia region_tags from the chunk meta_json for SRC_00231 AND the five siblings SRC_00487/00491/00492/00493/00494 — all six are the same Jewish Studies in the Nordic Countries Today / Scripta Instituti Donneriani Aboensis 27 (2016) issue, 35+59+42+39+39+39 = 253 chunks, every one currently retrievable by the CORRECT region-filtered Flores query. Mirror into the registry rows and re-emit docs/fidelity_baseline.json. This is the applied 2026-07-19 procedure, not new work.
2. AUDIT THE HARVEST ANNOTATION: SRC_00491's registry row already reads "messianic-redemption prophecy lore for oracle side content" — living Jewish messianic tradition annotated as harvest substrate, written against a wrong shelf and never reviewed on its true identity. That annotation, not the Bak article, is the live §17.1 exposure. Re-review it on merits with the correct identity attached.
3. NARROW THE AUTHORIAL-ONLY CONTRACT to the record that earns it: the Bak Holocaust-restitution article, declared consumers HL_0109 dogwhistle hygiene, the Ch 67 Pohjola Thule firewall, and the Ch 54/58 Base-211 anti-fringe firewall (the brief named only Ch 67 and HL_0109; modern_scope_53_58.md:254 is a third standing consumer). Do NOT write the contract at shelf or corpus level.
4. DO NOT blanket-classify Jewish-studies material as authorial-only. Toledot Yeshu polemic, Jewish historiography and Nordic-Jewish ethnography are ordinary living-tradition substrate; a blanket rule would make Judaism the one living tradition this game excludes from playable ground, which is §17.1 care-tier inflation, not protection. Route them to unassigned pending honest re-classification, the same state the 226 stripped sources already sit in.
5. HOLD Option D (no playable Holocaust node) and REJECT Option B (no purge) — the brief's reasoning on both is correct and survives.
6. TREAT the residual-false-KEEP finding as the real Class-2 item: SRC_00231 was ingested 2026-07-15, inside the 307-source class the 2026-07-19 remediation re-scored, and survived with its wrong tag intact. The gap to close is not "no exclusion exists" — it is that the keyword re-scorer's KEEP threshold produces false keeps on comparative-religion prose, which the remediation doc itself predicted. That is a bounded, testable fix on an existing mechanism.
Blast radius: A CLASS, corpus-wide — you are being asked for a standing rule, and it is worth far more than the one-off.
Measured, not estimated: 11 of the 37 deep-read extraction records in C:\dev\humanity-forgotten\docs\book_extractions\ already carry named-living-individual or living-practitioner material (EXR_SRC_00193, 00203, 00230, 00322, 00457, 00469, 00483, 00491, 00493, 00494, 01904). That is ~30% of the pilot harvest, and the pilot covered one region. registries\T0_Source_Material_Registry\T0_Source_Material_Registry.csv carries 1,914 rows. I attempted a title-based count of ethnobotany/healing sources and got 8, but most source_title values in that registry are truncated or blank, so that number is a floor and should not be relied on — the 11-of-37 rate is the honest signal.
What the rule binds, beyond this record:
T1_Region_Page_Template [ACTIVE v2.0] instance; 68 to follow) and every Trade-4 substrate section in them.T0_School_Registry, T0_Character_Index and T0_Creature_Roster minting, plus docs\proposals\cross_pipeline_feeds\PERSONA_FEED.md, which is where a real informant most easily becomes an NPC by accident._source\02_Tier_2_Region_Pages\flores_island.md lines 1339-1345.EXR_SRC_00483.json lines 628-635).Ruling only the flores oil would leave all of that unresolved and guarantee the question returns.
Context (verified on disk):
WHAT THE SOURCE ACTUALLY SAYS (I extracted the PDF and read pp.15-17 rather than trusting the record's summary — C:\dev\humanity-forgotten\.rag\book_src\processed\flores-indonesia\SRC_00483__Traditional-healing-of-Lio-People-in-Flo.pdf; Prasetyo et al. 2024, Ethnobotany Research and Applications 28:8):
docs\book_extractions\EXR_SRC_00483.json line 538): the OIL is named, the PERSON is de-identified in the source but identifiable by role + village + biography. In a village-scale community that is de-facto identification, but it is not a printed name.WHAT §17.1 ACTUALLY SAYS (_source\01_Tier_1_Foundation\T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md, §17.1 at lines 949-979):
APPLIED PRECEDENT ALREADY IN THE REPO (the strongest argument available, and it is on point):
docs\book_extractions\EXR_SRC_00469.json lines 751-753 — a MAJOR finding on five real living private ethnographic informants (incl. Br. Hilarius Embu, with residence and interview date): "17.1's protection of real people is not limited to villain-casting; turning a named living private person into a School_Registry or Character_Index entity is a representation problem regardless of how favourably it is drawn. The role is fully usable ... Strip the personal names from every row that would ratify, keeping them only in the citation trail."_source\02_Tier_2_Region_Pages\flores_island.md lines 1339-1345 carries Br. Hilarius's full real reagent chemistry as a playable puzzle while calling him only "one contemporary practitioner," claiming no civilizational credit, and seating his bench in the modern window. Method carried in full; identity withheld.SYSTEM STAKES: _source\01_Tier_1_Foundation\T1_Trades_Master [ACTIVE v1.0].md §3.4 — "Herbalism operationalizes real biology as its player-facing knowledge substrate — knowing what plants and preparations actually do rewards real learning." The exacting-procedure craft is the rewards-intelligence pillar's fuel; the region page (lines 1443-1463) already builds the Lio dream-transmission as the region-scoped Trade-4 unlock. T1_Integrity_Paths_Worldstates_Master [ACTIVE v2.1].md §5.5.5 confirms care is collective-not-individual and is silent on real-private-person portrayal — no help, and no conflict.
Why this needs a ruling: This is a §17.1 hard-line EXTENSION, not an application of one. §17.1's protected-property clause is a closed list and its real-person rule covers only villain-casting; adding a third protected category (a living private practitioner's identity, and emically-closed knowledge as a test rather than a list) is authoring canon at the CVD hard-line tier — cardinal do-not-invent. The loop can apply the rule everywhere and has already been improvising it (the SRC_00469 name-strip was applied without a ruling), but it cannot author it. It also cannot decide whether the corpus's default posture toward published ethnography is "fair substrate" or "protected" — that choice sets the value of ~1,900 sources.
Options considered:
docs\book_extractions\*.json), against 1,914 rows in registries\T0_Source_Material_Registry\T0_Source_Material_Registry.csv. At that rate this becomes a standing per-record interrupt — the exact bare-question pattern CLAUDE.md's decision protocol forbids. It also guarantees drift: two lanes already handled the same shape two different ways (00469 stripped and shipped; 00483 held and escalated). And the flores page — the first v2.0 region-page instance, the template the other 68 copy — ships carrying an unresolved care hold in its prose.docs\proposals\QUEST_TYPE_AND_CULTURE_GATE_BRIEF.md, where you took the class-level fix over per-record handling precisely because 'the blocker recurs 69 times.'docs\NAMING_METHOD.md. Real names live only in the citation trail. (iii) EMICALLY-CLOSED CONTENT IS REFERENCED, NEVER REPRODUCED — anything the tradition or practitioner itself declares secret or restricted (here: the core prayer told only to descendants, p.15; patika's consecrated core) is evoked as closed, never invented and displayed. That third clause is the existing L971 principle restated as a test, so joiks, songlines and protected ceremony fall out of it rather than needing enumeration. Explicit non-clause: this is NOT an IP rule and asserts no property right. Separately re-affirmed: no real-world curative claim is ever asserted to the player as medical fact — the vril-altered world is where it works.EXR_SRC_00469.json lines 751-753 and its application at flores_island.md 1339-1345. Matches your 2026-07-21 ruling reasoning in QUEST_TYPE_AND_CULTURE_GATE_BRIEF.md: you took 'the version that says something true about the world rather than about the form.'Author recommendation: Adopt OPTION 4, with one strengthening that answers its own strongest objection.
Rule as I would apply it to this record:
EXR_SRC_00483.json lines 632-635), and no practitioner is identified. The region page's HOLD prose (lines 1346-1357) is replaced by the shipped entry.Amend _source\01_Tier_1_Foundation\T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md §17.1 by replacing the L971 bullet with the three-part test (procedure-is-substrate / identifiers-withheld / emically-closed-is-referenced), naming the existing AIATSIS-joik-songline-ceremony set as instances of clause (iii) rather than as the whole rule, and stating the non-clause: this is a representation rule about real living people and about knowledge a tradition holds closed, not an intellectual-property rule; no property right is asserted or assumed. Mirror it into docs\proposals\DEEP_BOOK_PROCESSING_CONTRACT.md §2.6 as an audit checklist line so the lane applies it without re-deriving it, and add the DOC_MAP entry per the anti-orphan rule.
Reasoning: Three things decided this.
First, the harm here is real but it is not the harm the question names. There is no verifiable property right — "Muru Esi" is a waterfall, the practitioner is anonymized in print, and I found no registration of any kind. What is real is that a small-village healer's whole practice would be lifted intact into a shipped commercial product, and that a specific recent suicide, traceable through a published quote to a living family, would be staged as a collectible-bearing encounter. Both harms attach to IDENTIFIERS, not to knowledge. A rule keyed to knowledge (option 2) pays the full cost and buys none of the protection; a rule keyed to identifiers pays almost nothing and buys all of it.
Second, the procedure has to stay, and §17.1 says so in its own voice. The doctrine's citation gate exists to demand that living-culture depiction trace to record (L957); the corpus exists to supply that record; the trade system exists to make real knowledge playable (T1_Trades_Master §3.4). A rule that makes published, cited ethnobotany unusable would invert the doctrine into the thinning-to-the-inoffensive failure §17.1 explicitly names (L955, L977). The odd-number rule already on the region page — carried from the same paper, from a different informant, "without any particular remedy attached" (flores_island.md line 1460) — is a live proof that abstraction costs nothing when the grammar is kept.
Third, the emic test is the part that makes this a durable rule rather than a vibe. Grounding protection in what the tradition itself declares closed — the prayer told only to descendants, the consecrated core of patika — means the rule cannot inflate: it has an external, checkable trigger in the source text, and it says nothing about material the tradition publishes freely. That also retro-explains the existing L971 list. A joik's form belongs to Sámi yoikers because Sámi yoikers say so; AIATSIS artwork is registered because its owners registered it. The list was always instances of a test; writing the test down generalizes it to the 68 remaining regions without needing to enumerate every craft-secret holder on earth.
I also weighed the defang check deliberately, because this project has had to reverse timidity repeatedly. Nothing here softens a monster: this record contains no monster (the region's fightable register — the polo, the naga tana, the ineweu, the Ebu Gogo, the roused Kelimutu guardian — is untouched at flores_island.md 1371-1380). The one thing that could read as timidity, keeping the ancestral guide non-combat, is straight §17.1 sacredness-tier doctrine (L953) for a living people's venerated kin dead, not caution. And the suicide is carried, not cut — only its real owner is protected.
Strongest objection (author's own): De-identification may be theatre, and if it is, the rule is worse than useless because it lets us feel careful while doing the same thing.
Ship a Lio-highland waterfall, a benevolent grieving-woman dead, an oil named for her, and a Pelangi-tree gather node, and anyone holding the paper knows exactly which village, which practitioner, and which death. Renaming a waterfall does not un-identify a village-scale event. So the objection bites both ways: either the beat is fine to carry, in which case the real name adds no harm and clause (ii) is empty ritual, or it is not fine, in which case renaming does not fix it and the beat should never have been queued. A rule that produces a comfortable middle where neither horn is faced is exactly the kind of rule that survives review and fails in the world.
This is why the recommendation requires RE-ORIGINATION of the bereavement rather than renaming. If the in-game spirit's death is authored — a different death, a different cause, a different relation — then the residual resemblance is motif-level, and grief-at-a-waterfall is not one family's property. If we cannot bring ourselves to author a different death because the real one is what makes it good, that is the tell that we are trading on a real family's grief, and the beat should be cut rather than laundered.
A second, smaller objection worth naming: I could not verify the practitioner's current circumstances or whether he or the Lio communities would object at all. It is entirely possible that the atabhisa of Niowula would be pleased to see his oil in a game, and that our protecting him from that is a decision made about him without him. The rule is defensible as a default under uncertainty, but it is a default, not a discovered fact — and if this project ever acquires a consultation channel for a high-value region, clause (ii) should yield to what the people actually say.
Adversarial verdict: SOUND-WITH-FIXES
Critic MAJORs (4):
Option the critic says was MISSING: Option 4 at the CONTRACT tier rather than the CVD tier: adopt the identical three-part test as a §17.1 APPLICATION note written into docs/proposals/DEEP_BOOK_PROCESSING_CONTRACT.md §2.6 and the T1_Region_Page_Template, leaving CVD §17.1's hard-line text untouched. Justified because CVD line 951 already scopes the care standard over 'real and revered people,' so the test clarifies existing scope rather than minting a third protected category; it is cheaper, reversible, carries no risk of regressing the L971 protected-property line, and matches Josh's ruled 2026-07-21 pattern (unblock at class level, defer the canon minting). The brief should present this as option 4-lite so Josh rules on the tier as well as the content.
>> OPERATIVE RECOMMENDATION (critic-amended, outranks the above):
KEEP OPTION 4 — the direction is right and the evidentiary base is stronger than the brief realizes. Adopt it with four fixes and one reframe.
FIX 1 (required, corrects an under-protection hole): make the amendment ADDITIVE, not substitutive. Do not replace the L971 bullet. Keep 'AIATSIS-registered artwork, joiks, songline content, and protected ceremony are referenced, never reproduced' as a non-exhaustive FLOOR, and add the three-part test beneath it as the general rule that extends the floor to unenumerated cases. Rewrite clause (iii)'s trigger to read on the tradition's restriction as known from ANY record — the source, community protocols, registries, contemporary community statements — and add the sentence: 'Silence in a source is not evidence of openness; historical publication without a recorded restriction does not open restricted material.' Without this, the test as written would let a downstream author read published songline content as open and would collide with the Ch 57 hard line at CVD line 979.
FIX 2 (required, corrects a defang): strike the claim that non-combat for the ancestral guide is 'straight §17.1 sacredness-tier doctrine (L953).' Line 953 puts a general folk-category returning dead in the FORCEABLE-THEN-FREED tier and calls the freed-victim frame the stronger care posture. Keep the benevolent guide non-combat as a DESIGN choice — it is the better beat here — and state explicitly that the forced-then-freed lane remains available for this class so the ruling does not export a false prohibition to 68 regions. Correct the same over-read at EXR_SRC_00483.json line 625 at merge.
FIX 3 (required, prevents inflation propagation): add to clause (ii) — 'Real public toponyms are carried by name as the pages already carry Kelimutu, Liang Bua, Wae Rebo and Todo. A toponym is withheld only where it is itself the identifier vector for a private individual (here: the remedy is eponymous with the site, and site plus role plus village locates the practitioner).' Keep the Lio-side site mint on this record; do not let it become a default.
FIX 4 (required, corrects the record Josh rules on): replace '11 of 37' with the verified 5 of 37 (EXR_SRC_00203, 00230, 00469, 00483, 00494) and add the two missed precedents to the precedent section — EXR_SRC_00203.json line 730 (invent the heir, no 1:1 biographical detail, same rule for every named informant) and EXR_SRC_00230.json line 804 (never port real named persons). Recast the argument from DRIFT to CONVERGENCE: three independent audits on three unrelated sources derived the same rule and only one escalated. That is the strongest fact in the brief and it is currently absent — it kills Option 1's only real pro ('mints nothing on one record's evidence') and makes ratification the obvious call.
REFRAME: offer the missing contract-tier variant alongside the CVD amendment so Josh rules on tier as well as content.
APPLICATION TO THIS RECORD — unchanged from the brief, and I endorse it on the merits: S02 ships in full with every constraint intact and three proper nouns minted; S07 ships at full rated-M weight with the bereavement RE-ORIGINATED rather than renamed (the brief's answer to its own strongest objection is correct, and EXR_SRC_00203 independently reached it); EC_01 ships unchanged as clause (iii)'s illustration; the SRC_00469 name-strip is retroactively ratified; the flores HOLD prose at lines 1346-1357 is replaced by the shipped entry. Nothing here softens a monster — the region's fightable register at flores_island.md lines 1371-1380 (polo, naga tana, ineweu, empo-dehong, jing) is untouched, and the suicide is carried as subject matter under §17.16, with only one traceable family's specific bereavement withheld. That is weight and authenticity, not omission.
---
**Everything in the "DIRECTOR VERIFICATION" section that follows is FALSE and is retained only as
provenance for how the error was made.** Do not act on it.
The §6.5 quest_type enum IS ratified ACTIVE T1 canon. All 18 members sit verbatim in
_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md §6.5, line 1424 —
including the five tokens the section below certifies as appearing "ZERO times": school\_curriculum,
folklore\_combat (3 hits), grimoire\_link (3), seed\_defense, regional\_npc\_dialogue.
How the error happened, because this is the reusable part. The contract escapes underscores for
markdown, writing quest\_type and folklore\_combat. The prior session believed it had checked
"both plain AND with the doc's own underscore-escaping" — but its escaped search was itself
malformed, so it returned zero indistinguishably from genuine absence. Re-run with FIXED-STRING
matching (grep -F) the enum appears immediately. This is the third instance of the same class on
this project: a search that CANNOT match, reported as evidence of absence. Verify the search itself
before trusting a zero, and never trust a shell-escaped grep against escaped source.
Consequences, all now applied:
framing was right and the retraction below inverted it.
string "no ratified quest_type vocabulary exists" in harness/rag/exr_audit_apply.py was FALSE
and had to go. It has gone.
audit_summary.note of every record it applied.24 landed records were deterministically repaired and 3 mint_flags raised on the false premise
now carry a TYPED premise_corrected_2026_07_22b field marking them for re-evaluation
(harness/rag/repair_quest_type_note.py — idempotent, verified 0 unqualified claims remaining).
substance is unaffected (the script never writes quest_type) but their mint_flags may be
OVER-GENERATED and ride the same re-evaluation.
What remains genuinely Josh's is not the mint's mechanics but his own EXR §11.1 standing
instruction: that the enum be proposed by the first pass to CONSUME these seeds, "with authored
quests to argue from". There are 265 harvested seeds and 90 unhoused (34%) across all 11 shelves,
and ZERO authored quests. Plus the T0_Minigame_Registry count guard.
Applying the mint was attempted under the delegated authority and stopped on a factual check.
The critic-amended recommendation (C-PRIME) rests on the claim that the §6.5 quest_type enum is
"ACTIVE T1 canon at baseline," mis-read as absent, making the decision a RECONCILE of an existing
18-token enum plus 3 new tokens. That claim is false, and I verified it directly: the tokens
folklore_combat, school_curriculum, grimoire_link, seed_defense, regional_npc_dialogue
appear ZERO times in _source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md —
searched both plain and with the doc's own quest\_type underscore-escaping convention, because a
naive grep cannot match that escaping (the same class of error as the glob-bracket bug caught
earlier this session). They exist only in proposal docs, in reader-authored EXR records, and in one
flores_island.md passage that is itself *describing the gap*.
CONSEQUENCES, both of which matter:
1. This is a genuine MINT of a new controlled vocabulary, not a reconcile of an existing one. The
real baseline is the 5 values Josh blessed at §11.1 (3 live registry + 2 spike-attested), so the
mint's shape is ~5→8, not 18→21. That is a materially different act from the one the brief
analysed.
2. The critic's Amendment 3 INVERTS. It called for stripping the string "no ratified quest_type
vocabulary exists" from harness/rag/exr_audit_apply.py as an error the pipeline was
re-propagating. On the corrected facts that string is TRUE and must STAY. Had the amendment
been applied as written, the pipeline would have started asserting the existence of canon that
does not exist.
HELD, and explicitly NOT on care or conservatism grounds — the de-conservatism ruling is unaffected.
It is held because minting a canonical game-surface vocabulary off an analysis whose central premise
is provably wrong would be the invent-canon failure the reframe still forbids at the vocabulary
level. The correct next step is a re-analysis on the corrected baseline, using the actual seed
evidence now sitting in docs/proposals/quest_seed_queue/ (265 seeds across 11 shelves).
Everything else in D-QUEST-TYPE-MINT stands, including the registry-widening observation and the
sound principle the critic stated and then violated: do not ship a rule whose test cannot be run.