OPEN_DECISIONS_DOSSIER.md

decisions/OPEN_DECISIONS_DOSSIER.md

Open Decisions Dossier — 2026-07-12

Every genuinely-open decision and flag across the repo, each worked with a deep-dive, an alternatives analysis, an adversarial review that tries to break the recommendation, and a reversibility note. Produced by a 10-agent ultracode deep-dive workflow (wf_a6d0f9e2-ed2, one high-effort analyst per decision, each grounded in the actual source docs), then synthesized. This is distinct from the older docs/DECISION_DOSSIER.md (the Batch-1 dossier — audited here as item 10, now fully closed).

Cardinality legend. CARDINAL_JOSH = Josh's exclusive call (chapter/Component/numerical/naming/hard-line/§17 canon). DERIVABLE = grounded/within-vision — Claude applies the recommendation, Josh override-able at any RR. PROCESS = a workflow/sequencing choice.

Summary table

#DecisionCardinalityRecommendationDisposition
1Ratify Spine Schema v3.1 as the 79-node rewrite targetCARDINAL_JOSHB — ratify as the target FORM + 4 named conditionsAWAIT JOSH (gates the Fable handoff)
2L3 Drifting collapse tie-break at integrity score exactly 0CARDINAL_JOSHA — score ≥ 0 → GOOD_ENOUGH, else EVILAWAIT JOSH (numerical)
3Two-axis integrity vocabulary (5 levels / 3 paths)DERIVABLEA refined — ratify + ALL is authoring-onlyAPPLY (grounded bug-fix)
4Win-shape fork Ch 59/60/62 (modern-arc 59-63 restructure)DERIVABLEA — the full COMPANION 5-way mappingAPPLY (into task #57)
5Relationship-tier bands + opportunity thresholdsDERIVABLEA — 5 bands on ±20/±60 (CVD §9.2), conservation-pairedAPPLY (as proposal; Josh tunes numbers)
6D-20 Atacama arc geography (ratify vs redirect)DERIVABLERatify (c) as-built + a small additive geo-glossAPPLY + note for Josh
7D-21 chakra→vril-seat reframe (Stage-2b, applied)DERIVABLERATIFY as-appliedRATIFY (already applied)
8FK canon-graph — range_id + the thread dual-encodingDERIVABLEC — fk_spec-only, no baselined cell churnAPPLY
9Minor/process cluster (enum · 12-tier · bake-off · Ilse→Astrid)MIXEDsee per-itemAPPLY 3 / CONFIRM 1 cardinal
10Batch-1 dossier audit — still-open itemsPROCESSFULLY CLOSED — zero still openno action

---

1 · Ratify Spine Schema v3.1 as the 79-node rewrite target — CARDINAL_JOSH — AWAIT JOSH

Issue. Should v3.1 be frozen as the structure Fable rewrites all 79 nodes to? It re-shapes v2.5's Blocks 8/9/10/11/13/18 into a typed beat→fork→state graph (keeping the other 14 blocks verbatim) so Quest-Writing / 3D-PCG / Cinematic get the stable beat_ids, branching_logic, path_bucket, and per-beat spatial/state deltas they can bind to. The gate is built, wired, and green on 3 exemplars; the integrity-vocab correction it forces is verified canon. Blast radius: it grounds the entire ~90-110M-word game.

Options. (A) ratify as-is; (B) ratify as the target FORM + 4 named conditions; (C) stay v2.5 (reject v3); (D) hybrid.

Recommendation: B. Ratify v3.1 as the target form, with four execution guardrails attached (not schema rewrites): (1) the L3 tie-break stays Josh's numerical call (item 2); (2) the contract Decision-2B enum reconciliation lands in the same commit as node 1 of the rewrite; (3) fold v3-typing INTO each AAA re-cascade rebuild / type the stable spans first, so no node is typed twice; (4) correct the "authors nothing new" framing to "join-and-type + a bounded authoring delta" and require the per-node reveal/care/fidelity re-verify (not just the gate).

Reasoning. Every load-bearing claim verified against source. The gate is real (gates_config.json:287, spine_graph PASS exit 0). The integrity correction is verified canon, not invention (T1_Integrity_Paths §3.2 enumerates exactly L1-L5). v3 genuinely unblocks the load-bearing consumer where v2.5 cannot (T1_Build_Pipeline_Contracts §6: Quest-Writing reads quest_beat_structure + branching_logic + path_bucket, and spatial_requirements_array is a beat_id FK — v2.5's ~5 prose bullets with the fork named once bind nothing). Migration cost is real but bounded and front-loadable — beat_id PERMANENCE is exactly why ratification must precede mass-typing.

Adversarial (survives). The sharpest attack — "v3 really authors nothing / this is just A with ceremony" — is FALSE in the load-bearing direction: B2 forces authoring the L5 terminal option + honorable_open axis values not in the v2.5 source, and the exemplar pass empirically caught a reveal-relevant regression (the CH_39 B01 "deep-time chapter" mislabel) + gate-blind thread-number errors. That cuts *for* condition 4, not against ratification. C loses outright (strands the whole downstream + preserves the integrity bug). D collapses into B.

Reversibility. Doc-level ratification is trivially reversible before mass-typing (the whole ratify-then-type sequence exists to keep it free). Reversing after Fable types N nodes and downstream binds to permanent beat_ids orphans everything — so the decision is cheap now, expensive later. This asymmetry is the argument for ruling it soon.

---

2 · L3 Drifting collapse tie-break at integrity score exactly 0 — CARDINAL_JOSH — AWAIT JOSH

Issue. At the Ch-65 lock a score in the L3 Drifting band (−19..+19) collapses to the NEAREST ending path. At exactly 0 the distance to GOOD_ENOUGH and EVIL is equal — undefined (§3.5 says only "nearest").

Options. (A) score ≥ 0 → GOOD_ENOUGH, else EVIL (benefit-of-the-doubt, one clean comparison); (B) tie → EVIL (harder read); (C) a secondary non-score tie-break (last direction / generative-vs-corrosive Foundational count); (D) design 0 unreachable.

Recommendation: A — implement as the half-open boundary path = GOOD_ENOUGH if score ≥ 0 else EVIL.

Reasoning. Grounded in the §10.5 hard line: EVIL is defined by ACCUMULATED negative/self-loss, and 0 has none; the signed axis makes 0 the non-negative floor, and it's symmetric with the already-decided +1..+19 → GE closure. No player observes the number, so it can't "cheapen" anything the band structure doesn't already do. C adds a mechanic for a measure-zero event (over-engineering); D distorts the delta model.

Adversarial (survives). "≤0 → EVIL because 0 is not positive" fails on §10.5 (EVIL requires accumulated negativity, absent at 0). The tie moves exactly one measure-zero point.

Reversibility. One-line boundary in the path derivation; near-nil blast radius (exactly-0 is a measure-zero runtime event under fractional deltas + a nonzero Ch-1 start).

---

3 · Two-axis integrity vocabulary (5 levels / 3 paths) — DERIVABLE — APPLY

Issue. The spine's 4-label truly_good/good_enough/neutral/evil is a bug vs canon: T1_Integrity_Paths §3.2 defines FIVE texture levels (L1 Truly Good / L2 Good Enough / L3 Drifting / L4 Evil / L5 Pure Evil) mapping to THREE ending paths (TG/GE/EVIL); "Neutral" is only the WS3 world-state name; §10.6 forbids a Neutral/Drifting ending outright.

Recommendation: A (refined) — ratify v3's two-axis vocabulary with ONE guardrail: ALL is an authoring/content-tag value only — never written to the runtime WS_004 save variable, and never applied to the three ending-sequence rows (they stay 3-distinct per the contract's anti-convergence hard line). Every sub-item ratifies as a grounded spine-vs-registry reconciliation: restore L5 (→EVIL path, level-axis only), keep 3 paths, retire neutral-as-ending, name L3 "Drifting", unify path_bucket {TG,GE,EVIL,UNLOCKED,ALL} (reconciling Decision-2B convergence_neutral→ALL, pre_branch→UNLOCKED), grep-fix the contract's stale S19 band names ("L4 Bad"/"L5 Truly Bad"/"L3 Neutral" → canonical). The L3 score-0 tie-break is correctly carved out as the separate item 2.

Adversarial (survives). "Restoring L5 implies a 5th ending" — no, L5→EVIL path; the two-axis split exists precisely so L5 differs from L4 in *texture* while sharing the Evil bucket. "ALL violates the anti-convergence line" — the sharpest attack; it forces the guardrail (ALL tags the shared Ch 76-77 reveal frame, never the distinct ending sequences), not a rejection.

Reversibility. Reversal would RE-INTRODUCE the bug (the registry — WS_002's 5 levels, WS_004's runtime paths — is already aligned to the target). Low, mechanical.

---

4 · Win-shape fork Ch 59/60/62 (modern-arc 59-63 restructure) — DERIVABLE — APPLY (into task #57)

Issue. The 59-63 restructure gives each chapter a DISTINCT win-shape, but the docs collide on 59/60/62. The AAA synthesis had Ch 60 = "front that does not break" (Factor) + Ch 62 = delegated; the WS3 companion had Ch 60 = delegated + Ch 62 = siege — and Ch 59 (Verderer) is already "a front that does not FULLY break." Two chapters reading as "a front that does not break."

Recommendation: A — the full COMPANION 5-way mapping: Ch 59 Verderer = front-that-does-not-fully-break (canon-forced — T4 §2.4 has him persist to Ch 65, so he escapes) · Ch 60 Factor = delegated-victory (the chapter already carries the swordsmith/scholar defector who stands the record + frees the bound retainer) · Ch 61 Blind-Spot = personal-cost (the watch closes on Ana) · Ch 62 Ledger-Hand = siege (the debt-wraith cordon is a literal encirclement broken from inside) · Ch 63 Corr = magic-duel (the arc's first peer vril-duel). Every label now matches its chapter's canon-fixed or built mechanic, and the 59/60 duplication dissolves at the root.

Adversarial (survives). "Delegated undercuts the Factor's un-exposable recurring identity" — no, delegated governs HOW the win lands (an ally stands the record), not whether he's humiliated; he still loses the ground and withdraws intact to Ch 65 (the persona's author folded the defector as a counter-route precisely so both readings coexist). "Ch 60 delegated dilutes Ch 56 Torvald's uniqueness" — no, Ch 56 is the ANTAGONIST defecting; Ch 60 is a third-party community ally — mechanically distinct.

Reversibility. Docs-stage only (labels in modern_scope_59_65 + the AAA synthesis line + which Ch 60 combat draft is promoted); no built spine prose rewritten by the ruling. Minimal.

---

5 · Relationship-tier bands + opportunity thresholds — DERIVABLE — APPLY as proposal (Josh tunes numbers)

Issue. v3 leaves relationship-tier bands + opportunity thresholds as [POPULATE→] Josh-authored numbers. A concrete grounded default lets Josh accept/adjust rather than face a blank.

Recommendation: Afive relationship bands on the canonical −100..+100 axis, cut at CVD §9.2's own ±20/±60 points: Hostile (−100..−60) / Cold (−59..−20) / Neutral (−19..+19) / Warm (+20..+59) / Bonded (+60..+100). Opportunities key to band-crossings, symmetric, and are the complement of progression_critical, conservation-paired (a closed opportunity always names an equivalent-class alternative). Load-bearing guardrail: reward classes gated by standing must be per-path equivalent-class sets (e.g. §4B's per-path legendary sets), never one reward behind one high band — so §8.7's real "faction standing gates certain questline entries" never blocks 100% progression (the non-gating invariant, §3.4).

Adversarial (survives, conditionally). The genuine hazard is §8.7's canonical faction-gating vs the non-gating invariant: A holds IF AND ONLY IF the framework asserts the per-path equivalent-class constraint (above) — which it does. Uses the same ±20/±60 ruler the rest of the game uses (invents no new number).

Reversibility. Threshold-config, not authored prose; near-zero consumption today, so cheap now.

---

6 · D-20 — Ch 53-55 "Atacama" arc geography — DERIVABLE — RATIFY (c) + additive gloss

Issue. The "Atacama" label fuses places ~1,100-2,000 km apart (Salar 23.5°S / the Giant at Tarapacá 19.95°S / the 33.33°S Central-Andes installation). Applied resolution (c) kept the substrate + resolved in-prose (geographic precision; the Giant read astrally as a Vimana-network node; 33.33°S as the family's IMPOSED fixation, corrective authorial-only).

Recommendation: ratify (c) as-built, and additionally authorize a small ADDITIVE WGM/RCM annotation that keeps the "Atacama" naming-canon token but glosses it to the true geography. (a) relocating Ch 54 and (b) swapping the F7 aerial read each cost more than they fix — and (b) opens a §17.1 hazard (re-siting a sacred capacocha reading).

Adversarial (survives). The strongest attack — "authorial-only correction tacitly ENDORSES 33rd-parallel mysticism (the number pays off as a real in-world locus, the player never hears the debunk)" — is defused by the built prose: vril is separated from number, and the payoff is deliberately 33 SOUTH (the mirror of the conspiracy's 33 NORTH), so the game never dramatizes the actual claim. The 2,000 km astral read stays in-system (memory + geometry + resonance, the Ch 51 Nazca precedent), conditional on the prose not staging a live overflight (it doesn't).

Reversibility. (c) moved no canon; ratifying is a no-op + RR note. The gloss is one revertible living-source edit.

---

7 · D-21 — chakra → vril-seat / the Vril Ascent reframe — DERIVABLE — RATIFY as-applied

Issue. Josh ruled the direction (2026-07-10): keep the 7+6+1 count, coin the game's own universal vril-centre term, reserve "chakra" for the honored Indian tradition (immersed at CH_07). Applied Stage-2b: universal term = "vril-seat"/"the Vril Ascent"; the 7 English centre-names stay; count-locks preserved; named exclusions (Chakram weapon, Sudarshana Chakra, the scholars, the deferred "Chakra Thunderbolt" ability).

Recommendation: RATIFY as-applied. Verified on disk: the rename is faithful, count-locked, and §17.1-correct.

Adversarial (survives). Grepped the whole spine + tier docs: every residual "chakra" is Indian-tradition immersion (CH_07/CH_72), a record doc, or a named exclusion — no leak. The sweep even left Kalachakra (a real Vajrayana term not on the exclusion list) untouched — tighter word-boundary discipline than required. The "reading an Aymara monument against the seven-fold order is subtle hyperdiffusion" attack is defused by the CH_52 prose (alignment-as-imposed-belief, not asserted-real). Keeping "chakra" as the universal term would be the exact "culture X had chakras" flattening §17.1 + §19.7 exist to prevent.

Reversibility. Single atomic Stage-2b commit; ~580 occurrences across 40 files if reverted.

---

8 · FK canon-graph pass — range_id + thread dual-encoding — DERIVABLE — APPLY

Issue. Two real data-model facts: (1) range_id (R_NN_NN) has no target table — a grouping label, not an FK; (2) thread IDs use two encodings — Chapter_Index packs T01..T22, Thread_Grid keys THREAD_01..THREAD_22.

Recommendation: Option C — both resolved with fk_spec.json-only edits (no baselined cell churn): range_id stays a documented label but gains an enumerated allowed-values check (R_02_15 / R_16_25 / R_26_38 / R_39_50 / R_51_65 / R_66_77 + R_PROLOGUE / R_FAIRY_CH_01 / R_EPILOGUE); the thread is canonicalized to TNN by declaration (the roster + anchors already use it) and the Chapter_Index.thread_anchors_complete FK is retargeted from Thread_Grid.thread_id to Thread_Registry.thread_id (removes the dual-encoding bridge, hits a unique PK, resolves 644 tokens → the 22-roster), plus a numeric-part set-equality guard keeps grid↔anchor consistency.

Adversarial (survives). "Retargeting loses the anchor↔grid pair-check" — a plain FK never gave pair-consistency (only existence, against a non-unique column); the set-equality guard is the actual stronger check. "Thread_Registry is DRAFT" — fk_spec already registers it with a unique thread_id PK + a 22-floor; an FK only needs a populated unique key, which exists.

Reversibility. fk_spec.json-only; no registry cells change, no baseline re-emit; a one-file revert. (Option B — rewriting 644 baselined Thread_Grid cells — is the churn C avoids.)

---

9 · Minor/process cluster — DERIVABLE / MIXED — APPLY 3, CONFIRM 1 cardinal

---

10 · Batch-1 Decision Dossier audit — PROCESS — FULLY CLOSED

The prior docs/DECISION_DOSSIER.md (Batch-1, ~20 AWAIT-JOSH items: 75-boss roster, 13-school roster, deepest-layer hooks, difficulty spec, topography re-pacing, etc.) is fully closed — zero items still genuinely open. Each is either cross-settled by a later ruling, ruled-since, verified-applied in the live CVD, or DERIVABLE housekeeping the autonomy mandate resolves without pausing. The AAA re-architecture is a forward design layer built ON the ratified foundation (it "redesigns nothing" of the reveal), not a reopening. Real forks now live in DECISIONS_PENDING_JOSH.md + this dossier. No Josh action needed on Batch-1.

---

Disposition + next actions

Generated by harness/site/structure_site.py — the URL path is the repo path. review root