# V8 — Implementation TODOs (Ariadne: The Self-Authoring Detective Universe)

Source: derived from `V8/V8_features.md`, `V8/V8_ARCHITECTURE.md`,
`V8/V8_GAP_ANALYSIS.md`, `V8/V8_DEPENDENCIES.md`, and `V8/V8_SOTA_RESEARCH.md`,
cross-referenced against V5 (`V5/V5_features.md`, `V5/ue`), the Yemaya agent
studio (`libs/yemaya/agents`), Isis (`libs/isis`), Hathor
(`libs/hathor/llm-npc`), V6 Ori, and V7 Sekhmet, as of 2026-06-04.

## Purpose

This file is the **source of truth for V8 completion state**. V8 — **Ariadne** —
turns V5's authored detective game into a self-authoring universe: an integrated
system of SOTA AI agents that generates an endless supply of **fair, solvable,
fully-realized cases** and ships them into the _existing_ V5 game.

Each unchecked `[ ]` is a coding-agent-actionable task. A task is complete only
when its implementation, tests, and required wiring all exist — **not** when a
stub is present. The Oshun-repo `CLAUDE.md` "Zero Tolerance for Stubs" rule
applies verbatim: no `Math.random()` faking computed results, no hardcoded
returns, no "would require…" placeholders, no simulated runtimes where real ones
belong. The checkbox is the sole source of truth; `✅`/`done` notes in prose
mean nothing.

## Cross-Reference Convention

- Bare `§N` → a section/phase in this file.
- `arch§"<anchor>"` → `V8_ARCHITECTURE.md`. `features§"<anchor>"` →
  `V8_features.md`.
- `gap§N` → `V8_GAP_ANALYSIS.md`. `sota§N` → `V8_SOTA_RESEARCH.md`. `deps§N` →
  `V8_DEPENDENCIES.md`.
- `v5src:<path>` → a file under `V5/ue/Source`. `ylib:<name>` →
  `libs/yemaya/<name>`.

## Phase / cut-line convention

- **[P1]** GA launch-blocking. **[P2]** Year-1 post-launch. **[P3]** Year-2
  stretch.
- Default for any `##` section is **[P1]** unless tagged. The "Definition of
  done" (`features§"Definition of done"`) must be fully `[x]` before V8 GA.

## The eight `ReleaseDecision` gates (no case reaches a player until ALL pass)

A minted case must pass, in order: **(G1)** Minos formal uniqueness, **(G2)**
Minos deductive-completeness, **(G3)** Knox/Van-Dine fair-play, **(G4)** Theseus
in-game solve to Brilliant-eligible path, **(G5)** judge-panel quality ≥
threshold, **(G6)** Sekhmet safety clear, **(G7)** canon-consistency, and
**(G8)** preregistered human-quality launch evidence. Each gate is a task below;
`decideRelease` enforces all eight. The separate §12 platform suite retains its
seven content-gate IDs; it is an additional harness, not a substitute numbering
for this decision.

---

## Phase 0 — Foundations, contracts, and scaffold-promotion [P1]

> Goal: stand up the V8 packages and lock the data contracts so all later phases
> can proceed in parallel. Close `gap§1C` (scaffold→live) before depending on
> it.

- [x] **0.1** Create `ylib:case-contracts`
      (`project.json`/`package.json`/`tsconfig.json`, path-map in
      `tsconfig.base.json`). Define `CaseSpec`, `CaseGroundTruth`,
      `GroundTruthFact`, `ConstraintClause`, `TimelineEvent`, `Alibi`,
      asset-manifest types (arch§3.1–3.2). **Import, do not redefine**, the
      existing `MysterySession`/ `Clue`/`Solution` from
      `mystery-fairness-validator.ts` (arch§3.3).
- [x] **0.2** In `case-contracts`, define the **V5 compile-target schema** as TS
      types mirroring `v5src:V5MindPalace/Public/V5MindPalaceTypes.h`
      (`FV5MindPalaceEvidenceNode`, `FV5MindPalaceDeductionEdge`,
      `FV5MindPalaceAccusationOutcome`) and
      `v5src:V5DetectiveColdCases/Public/V5DetectiveColdCasesTypes.h`
      (`FV5ColdCasePackDefinition`). Generate them from the headers (parse) so
      they cannot drift; add a docs-drift CI check.
- [x] **0.3** Extend `cold_cases_manifest.json` schema to v2 (add `generatedBy`,
      `seed`, `provenanceC2PA`, `assetManifestId`, `verifierReport`)
      **backward-compatibly**; update
      `V5/tools/cold-cases/validate-cold-cases.py` to accept v1 and v2.
- [x] **0.4** Scaffold apps: `apps/v8/loom-service` (Nest BFF),
      `apps/v8/daedalus-compiler` (CLI), `apps/v8/minos-asp-sidecar`
      (container). Wire Nx targets (build/test/lint); verify with
      `npx tsc --noEmit` + `npx vitest run` per-lib (Nx-bypass rule,
      `CLAUDE.md`).
- [x] **0.5** **Promote scaffold #1:** replace the `// stub:legitimate`
      deterministic responses in
      `apps/lilith/svc-ai/src/agent-coordination.ts:24` with real LLM-backed
      coordination, or formally retire that path in favor of yemaya
      `WorkflowExecutor`. Document which orchestrator V8 standardizes on.
      (`gap§1C`) — formally retired w.r.t. V8; see
      `V8_ORCHESTRATION_DECISIONS.md`.
- [x] **0.6** **Promote scaffold #2:** audit `libs/neith/integration-hathor`
      template generators; either wire them to LLM calls or mark them explicitly
      as deterministic fallbacks that V8 supersedes. No silent template-as-AI.
- [x] **0.7** **Promote scaffold #3:** convert yemaya `*-integration` adapters
      (isis/hathor/sophia) from type-layer wrappers to live calls behind a
      tested interface (`gap§1C`). Cover each with an integration test that hits
      a real (or recorded-fixture) backend.
- [x] **0.8** Establish the V8 **event/journal** spine: every pipeline stage
      emits a typed event to Redis + a durable journal row (Postgres) keyed by
      `(caseId, seed, stage)` for determinism/replay (arch§5).
- [x] **0.9** Define the **cost budget** envelope per case (tokens + asset-job
      ceiling) in `libs/yemaya/budget-management`; expose
      `reserve()/spend()/remaining()` to all stages.

## Phase 1 — Palimpsest: the continuity knowledge graph [P1]

> Closes the "canon/continuity" gap (`gap§2`). Implements `sota§3` (SCORE +
> graph-RAG).

- [x] **1.1** Create `ylib:canon-graph`. Model the graph: `Character`,
      `Location`, `Faction`, `TimelineEvent`, `PriorCaseOutcome`, `OpenThread`,
      typed relations. Persist in Postgres + pgvector; optional Neo4j overlay
      (existing `graph` profile).
- [x] **1.2** Seed the graph from V5's authored world bible + the 25 launch
      cases (parse `cold_cases_manifest.json` + Vice Squad data) so generated
      cases reuse the _real_ city, NPCs, and factions (`features§"2"`).
- [x] **1.3** Implement **SCORE-style retrieval**: dynamic state tracking
      (symbolic per-entity state), hierarchical prior-case summaries, hybrid
      TF-IDF + embedding retrieval. Return a bounded `CanonContext` for any
      `CaseSpec`. (`sota§3`)
- [x] **1.4** Absorb/replace `libs/yemaya/canon-enforcement`: a
      `checkConsistency(draft, canonSnapshot)` API that flags contradictions
      (geography, character facts, timeline). This is **G7**.
- [x] **1.5** Implement **canon write-back** (`features§"2"`): a verified+played
      case's outcome (who was accused/convicted, threads opened/closed) commits
      to the graph, snapshot-versioned. Co-op write-back is leader-arbitrated
      (arch§5).
- [x] **1.6** Snapshot-hash a canon slice so
      `(seed, model-versions, canon-hash)` is the reproducibility key (arch§5;
      ties to 0.8).
- [x] **1.7 [P2]** Cross-cell canon: let the Mind Palace's cross-era deductions
      (`bCrossEra`) draw on canon from multiple V5 cells.

## Phase 2 — Clew: the generative case engine (the core missing piece) [P1]

> Closes Gap A (`gap§1A`). Implements the solve-first, backward-derivation
> method (`sota§1`). This is the heart of V8.

- [x] **2.1** Create `ylib:case-engine`. Implement the `Truth-Weaver` agent
      (extends `CreativeAgent`, `base-creative.ts:140`): given `CaseSpec` +
      `CanonContext`, propose victim/culprit/means/motive/opportunity; commit as
      `GroundTruthFact[]`.
- [x] **2.2** **Timeline construction + conflict detection**: generate every
      character's movements across the case window; detect/repair physical
      impossibilities (no bilocation; culprit at scene in window). Output
      `CaseGroundTruth.timeline`.
- [x] **2.3** **Constraint encoding**: emit `ConstraintClause[]` linking
      facts→suspects (motive/means/opportunity network) such that the culprit
      variable is the unknown (arch§3.2). This is the input Minos will solve.
- [x] **2.4** Implement the `Clue-Smith` agent: for each culprit-distinguishing
      fact, derive `Clue`(s) with
      `type`/`visibility`/`importance`/`pointsTo[]`/`eliminates[]` set against
      solution variables — the **clue inventory tied to solution vars**
      (`sota§1`). Populate the existing `MysterySession` IR.
- [x] **2.5** **Red-herring generator**: produce misleading-but-_fair_ clues;
      each red herring MUST have a derivable eliminating clue (set
      `redHerringFairness`). Reject any red herring that cannot be fairly
      refuted.
- [x] **2.6** **Alibi generation**: innocents get verifiable alibis for the
      murder window; the culprit's alibi carries exactly one discoverable flaw.
- [x] **2.7** **Revelation staging**: assign `Clue.introducedAt`/`visibility`
      for fair gradual disclosure (no information withheld from the player that
      the solution needs).
- [x] **2.8** Build the `Solution.deductionPath` (Ariadne's thread / the _clew_)
      — the ordered chain of deductions from first clue to accusation.
- [x] **2.9** Emit a complete, schema-valid `MysterySession` + the hidden
      `CaseGroundTruth`. Unit tests assert structural validity and that every
      clue maps to a ground-truth fact (no orphan/ungrounded clues —
      anti-hallucination).
- [x] **2.10 [P2]** Sub-genre profiles: locked-room, cold-case, conspiracy,
      courtroom — parameterize Clew so `CaseSpec.themeTags` steer structure.

## Phase 3 — Minos: solvability & fair-play verifier (gate G1–G3) [P1]

> Closes the "no formal solvability proof" gap. Implements `sota§1` CSP/ASP
> uniqueness + the existing fairness validators as a gate.

- [x] **3.1** Create `ylib:case-verifier` + `apps/v8/minos-asp-sidecar`
      (clingo/ASP, `deps§3`). Compile `CaseGroundTruth.constraints` +
      player-available clues into an ASP program.
- [x] **3.2** **G1 — formal uniqueness**: prove the culprit is the _only_ model
      satisfying player-available clues. Fail if 0 models (unsolvable) or ≥2
      (ambiguous). Return the offending model(s) for repair. (`sota§1`,
      AAAI-2007.)
- [x] **3.3** **G2 — deductive completeness**: verify each `deductionPath` step
      is supported only by clues introduced earlier; no external knowledge, no
      forward refs.
- [x] **3.4** **G3 — fair-play**: call the existing `analyzeFairness(sessionId)`
      (`mystery-fairness-validator.ts:1825`, Knox/Van-Dine) + the
      investigation-balance analyzer; require `rating ∈ {exemplary,fair}`, zero
      `broken`/`unfair` violations.
- [x] **3.5** **Repair loop** (critique-revise, `sota§2`): on any gate fail,
      return the specific violations to Clew (§2) to regenerate ONLY the
      offending clues/herrings; bounded retries (default 3), then escalate to
      HITL (`libs/yemaya/agents/src/hitl`).
- [x] **3.6** **Difficulty grading**: from the constraint graph (suspect count,
      clue depth, herring density) compute an a-priori difficulty estimate;
      reconcile later with Theseus's empirical solve-rate (§9).
- [x] **3.7** Emit a signed `VerifierReport` (gates, models, fairness score)
      into the manifest (0.3) and journal (0.8).

## Phase 4 — Anansesɛm: the writers' room (narrative realization) [P1]

> Realizes the verified skeleton into the experienced surface. Uses yemaya
> orchestration + creative agents (`gap§1C` promoted in §0.5–0.7).

- [x] **4.1** Create `ylib:case-writers-room`. Build the realization DAG with
      `WorkflowBuilder`/`StateGraph`:
      `Showrunner → {StoryDirector, CharacterWriter, DialogueWriter, Cinematographer, SoundDesigner} → Integrator`.
- [x] **4.2** **Grounding**: every agent prompt is augmented with `CanonContext`
      (graph-RAG, §1) so realized prose/dialogue cannot contradict canon
      (`sota§3`).
- [x] **4.3** **Interrogation realization**: generate dialogue trees that align
      to V5's 12 facial-tell beats and Truth/Doubt/Lie mechanic; each catchable
      lie maps to a specific clue (consistency with §2.5/§2.6).
- [x] **4.4** Generate scene descriptions, case briefings, partner banter, and
      era/cell voice (Vice-Squad 1947, etc.) consistent with the V5 cell.
- [x] **4.5** Localization-ready output: structured text with stable string ids
      so per-locale generation (§11) can fan out.
- [ ] **4.6** Tests: realized text references only entities present in ground
      truth + canon (no invented suspects/locations); golden-fixture diff
      against an authored V5 case for tone parity.
      <!-- Grounding test DONE (`assertGrounded`, case-writers-room). The
                          tone-parity diff is externally blocked: V5 ships a manifest skeleton with
                          no authored case prose/VO text as data to diff against. --> _Board
      tag 2026-09-18: the tone-parity half waits on authored V5 case prose as
      data — V5-002 of
      `V1_V9_AUTONOMOUS_CONTENT_SOTA_GAP_CLOSURE_TODOS_2026-07-15.md` ("Convert
      all 25 intended cases into structured canon") and `V5/V5_TODOS.md`'s Vice
      Squad cases; three trackers wait on that one corpus._ `blocked:upstream`

## Phase 5 — Loom: asset realization fabric (Isis orchestration) [P1]

> Binds generated cases to generated multimedia via the existing Isis client.

- [x] **5.1** Create `ylib:case-assets`. From a realized case, compute an
      **asset plan** (which env/props/portraits/documents/music/VO/video are
      needed) keyed to clues, suspects, and scenes.
- [x] **5.2** **Retrieve-then-generate** (`sota§2`): query an asset library by
      semantic tags; reuse matches; only mint new assets for gaps (cost control,
      ties to 0.9).
- [x] **5.3** Orchestrate Isis jobs via `IsisClient.submitBatch`/`submitAndWait`
      (`libs/isis/client`): crime-scene env + props (Hunyuan3D/Meshy), suspect
      portraits + MetaHuman params (Stability/Flux), document/photo evidence
      (Stability), case music + stings (Suno), **full VO for every line**
      (ElevenLabs), optional flashback/CCTV (LTX).
- [x] **5.4** **Asset binding**: map each `JobOutput.files[].url` to a stable
      asset id + `FSoftObjectPath` placeholder for the compiler (§7); produce an
      `AssetManifest`.
- [x] **5.5** Enforce per-case asset budget (0.9); on over-budget, degrade
      gracefully (reuse library art, fewer bespoke props) rather than fail
      (arch§5).
- [x] **5.6** VO coherence: voice-cast each suspect consistently (one ElevenLabs
      voice id per character across cases) and store the mapping in canon (§1).
- [x] **5.7 [P2]** MetaHuman assembly automation: drive parametric MetaHuman
      creation from generated portrait + persona for non-principal suspects.

## Phase 6 — Ori-Detective: living suspects + runtime interrogation [P1]

> Promotes suspects from dialogue trees to generative-agent minds (`sota§2`),
> bridging V6 Ori + Hathor + ACE/Inworld.

- [x] **6.1** Create `ylib:case-suspects`. Instantiate a V6 **Ori** per
      suspect/witness, seeded with their ground-truth knowledge, secrets, and
      the lies they may _fairly_ tell.
- [x] **6.2** Implement memory-stream / reflection / planning over the case so
      interrogation stays consistent across multiple passes (V5 allows
      re-interrogation) (`sota§2`).
- [x] **6.3** Wire Hathor `DialogueGenerator.generateResponse()`
      (`libs/hathor/llm-npc`) as the dialogue backend; inject world + case state
      via the (promoted) hathor-integration adapters.
- [x] **6.4** **Fair-lying guard**: a runtime check that an Ori never asserts a
      lie that no available clue can refute, and cracks when the correct
      evidence is presented (mirrors §2.5/§3.4). This is the runtime half of
      fair-play.
- [x] **6.5** **ACE/Inworld runtime** (`deps§3`, `sota§4`): broker live
      interrogation sessions; stream audio + visemes to MetaHuman
      (Audio2Face/NeuroSync). Fail-closed to the offline-generated dialogue tree
      (§4.3) when creds absent.
- [x] **6.6** Latency budget: meet an interactive interrogation turn-latency
      target; prefetch/stream; cache per-suspect system context.

## Phase 7 — Daedalus: the case compiler (the bridge into V5) [P1]

> Closes Gap B (`gap§1B`). Turns a verified case into data the _shipping_ game
> loads.

- [x] **7.1** Create `apps/v8/daedalus-compiler`. Map a verified
      `MysterySession` + `AssetManifest` → `FV5MindPalaceEvidenceNode[]` (one
      per `Clue`; bind `Image` to the generated document/photo asset; set
      `bFalseLead` for herrings).
- [x] **7.2** Map `Solution.deductionPath` → `FV5MindPalaceDeductionEdge[]`
      (`FromNodeId`/ `ToNodeId`, `DeductionText`, `Confidence`,
      `Kind=Generated`, `bCrossEra`, `UnlockFlag`).
- [x] **7.3** Map culprit + plausible wrong accusations →
      `FV5MindPalaceAccusationOutcome[]` (`EvidenceChain`, `RequiredEdgeIds`,
      `Rating`, `OutcomeBranch`).
- [x] **7.4** Emit a `FV5ColdCasePackDefinition` header + a v2
      `cold_cases_manifest.json` pack (evidenceNodeIds[], deductionPairIds[], VO
      counts, provenance, seed). Run `validate-cold-cases.py` as a **build
      gate** — a case that fails the schema does not compile.
- [x] **7.5** Package generated assets into a loadable bundle (cook/pak or
      runtime-download bundle) and resolve every `FSoftObjectPath` so the case
      loads with zero missing refs.
- [x] **7.6** Round-trip test: compile a case, load it in V5's cold-cases plugin
      path (headless/automation), assert the Mind Palace graph builds and an
      accusation resolves.
- [x] **7.7** Author-tool parity test: a Daedalus-compiled pack is
      byte-compatible with a pack produced by V5's human Case Author tool (same
      schema, same load path).

## Phase 8 — V8 UE5 client plugin [P1]

> The thin in-engine layer. Real C++, depending only on existing V5 modules.

- [x] **8.1** Create `V8/ue/Plugins/V8_Ariadne_CaseClient` (a UE5
      GameFeature/plugin). Depend on `V5MindPalace`, `V5DetectiveColdCases`. No
      provider keys in the client (`sota§4`).
- [x] **8.2** Implement async case fetch (UnrealGenAISupport delegate pattern,
      `sota§4`): request a pack from the loom-service relay (§9), download the
      asset bundle, register with the cold-cases plugin, surface on the **Bureau
      Case Board** UI.
- [x] **8.3** Implement the runtime interrogation client: open an ACE/Inworld
      session for a suspect, drive MetaHuman audio/visemes, send player
      utterances, receive Ori responses (§6).
- [x] **8.4** Graceful degradation: if the relay or runtime NPC backend is
      unavailable, fall back to pre-fetched offline cases + authored dialogue
      trees.
- [x] **8.5** Build/automation verification on the on-box UE (per `CLAUDE.md` UE
      rules: build + run automation as `ueagent`, check disks first).

## Phase 9 — Theseus: automated playtester + eval gates (G4–G5) [P1]

> No case ships unsolved. Implements `sota§1` solver agents + `sota§5`
> LLM-as-judge.

- [x] **9.1** Create `ylib:case-eval`. Build the **Theseus solver agent**: an
      autonomous LLM detective that plays the _compiled_ case against V5's
      actual data (evidence nodes, deduction edges), collects clues, attempts
      deductions, and accuses.
- [x] **9.2** **G4 — in-game solvability**: assert Theseus reaches the intended
      culprit via a `Brilliant`-eligible path using only player-available data.
      Fail → repair (§3.5)/HITL. This catches compiler/asset losses that the
      IR-level Minos proof (§3) cannot.
- [x] **9.3** **G5 — quality judge panel**: LLM-as-judge 8-dimension rubric
      (coherence, surprise, fairness-feel, pacing, character, prose, voice-fit,
      difficulty-accuracy), PCA-aggregated (`sota§5`); threshold-gate. Report
      per-dimension scores.
- [x] **9.4** **Difficulty calibration**: run Theseus at varied "skill" to
      estimate empirical solve-rate; reconcile with Minos's a-priori grade
      (§3.6); write the calibrated difficulty to the manifest and Oracle's model
      (§10).
- [ ] **9.5** **Regression corpus**: use V5's 25 authored cases as golden
      fixtures — Theseus must solve them and the judge must score them highly,
      anchoring the gates.
      <!-- The harness is DONE (`runRegressionCorpus`, case-eval, green over a
                          generated golden corpus). Externally blocked on the SPECIFIC fixtures: V5's
                          authored cases have no full FV5 deduction graphs as data (manifest skeleton,
                          zero .uasset) for Theseus to play. --> _Board tag
      2026-09-18: same missing corpus as 4.6 — V5-002 of the V1–V9 ledger._
      `blocked:upstream`

- [x] **9.6** Wire G1–G5 + G6 (Sekhmet, §11) + G7 (canon, §1.4) + G8
      (preregistered human-quality launch evidence) into a single
      `ReleaseDecision` per case; only all-eight-pass publishes.

Canonical-provider audit note (2026-07-27): released Metis reasoning guidance
now enters V8 through `@oshun/v8-metis-detective-learning-bridge`, strictly
behind Clew's authoritative `minimalProofTreeHint` and an exact all-eight-gate
published `ReleaseDecision`. The bridge exports one already-released solve-path
clue and never exports ground truth, the culprit, the conclusion, the deduction
path, unreleased evidence, or release evidence. It cannot unlock evidence, drive
interrogation, make or score an accusation, generate or repair a case, publish,
mutate canon, place a case, or adapt the player model. This proves governed
player-learning admission, not a rendered V8 client.

## Phase 10 — Oracle: the open-world case director [P1]

> Decides which cases appear where/when/for whom. Drama/experience manager
> (`sota§1`).

- [x] **10.1** Create `ylib:case-director`. Maintain a per-player model (skill,
      pacing, preferences, open canon threads).
- [x] **10.2** **Mint-ahead queue**: keep N verified cases warm per player/cell
      within budget (0.9); request new `CaseSpec`s from the pipeline as the
      queue drains.
- [x] **10.3** **Placement**: surface cases on the Bureau Case Board, as
      player-commissioned cases (Commission Studio, `features§"6"`), and as
      **ambient open-world mysteries** seeded into the living city (tie to V4/V5
      world-state + NPC schedules).
- [x] **10.4** **Pacing**: select difficulty/theme to match the player model;
      avoid repetition; weave open canon threads (e.g., a freed wrongly-accused
      suspect returns).
- [x] **10.5 [P2]** Seasonal/live-service cadence: weekly generated cold-case
      drops (replacing V5's authored weekly packs) through the live-service
      calendar.

## Phase 11 — Cross-cutting hardening [P1 unless noted]

> Everything that makes generation safe, reproducible, affordable, and
> shippable.

- [x] **11.1** **Budget governance**: enforce per-case + per-player + global
      token/asset ceilings via `budget-management`; Oracle throttles mint rate;
      dashboards for spend.
- [x] **11.2** **HITL review**: `libs/yemaya/agents/src/hitl` queues for repair
      escalations, commissioned cases, and flagged content; reviewers see ground
      truth + VerifierReport.
- [x] **11.3** **Provenance (C2PA)**: every generated asset C2PA-signed (V3
      `C2PA_EVERY_EXPORT.md`); manifest records seed + model/provider versions +
      job ids.
- [x] **11.4** **G6 — safety**: V7 **Sekhmet** scans all generated
      text/art/audio (abuse/CSAM/defamation/IP) before publish; Oracle won't
      surface unscanned cases.
- [x] **11.5** **Determinism/replay**: prove
      `(seed, model-versions, canon-hash)` reproduces a case bit-for-bit at the
      IR level; journal every stage (0.8); add a `reproduce <caseId>` CLI.
- [x] **11.6** **Multiplayer canon sync**: co-op cases share one canon snapshot;
      outcome write-back leader-arbitrated through V5 online services (arch§5).
- [x] **11.7 [P2]** **Localization**: per-locale text + VO generation (extend
      V6/V7 loc); keep deduction logic locale-invariant.
- [x] **11.8 [P2]** **Accessibility**: captions for all VO, colorblind-safe
      evidence cues, difficulty assists, dyslexia-friendly case text (extend V6
      accessibility).
- [x] **11.9** **Telemetry/evals**: stream solve-rates, accusation-rating
      distributions, abandon-points to Maat-style dashboards; alert on quality
      drift.
- [x] **11.10** **Cost/perf load test**: sustained mint throughput at target
      concurrency within budget and latency; verify the relay (§9-arch) under
      fleet load (reuse V3 load-validation patterns).

## Phase 12 — Release gates & docs-drift [P1]

- [x] **12.1** Implement the separate **seven-gate platform content harness**
      (G1–G7) as a CI job mirroring V7's `ADVERSARIAL_EVAL_GATES.md` pattern:
      unsolvable-case gate, ambiguous-solution gate, unfair-clue gate,
      in-game-unsolved gate, low-quality gate, unsafe-content gate,
      canon-contradiction gate. Each has an adversarial fixture corpus; the
      authoritative `ReleaseDecision` additionally requires G8 human-quality
      launch evidence.
- [x] **12.2** **Adversarial red-team corpus**: hand-craft known-bad cases
      (unsolvable, ambiguous, unfair, canon-breaking, unsafe) and assert every
      gate catches its class.
- [x] **12.3** **Docs-drift CI** (`verify:v8 docs-drift`): keep `V8_features.md`
      / `V8_ARCHITECTURE.md` / `V8_DEPENDENCIES.md` / this file aligned with
      shipped behavior and with the V5 header-derived contracts (0.2).
- [x] **12.4** **End-to-end acceptance** (`features§"Definition of done"`): a
      scripted run that, from a single player request, mints → verifies →
      realizes → asset-generates → compiles → in-game-solves → safety-clears →
      publishes → places a case, fully reproducibly, with zero human authoring.
      All eight `ReleaseDecision` gates and all seven platform content gates
      green.
- [ ] **12.5** **GA sign-off**: every `[P1]` task above `[x]`, both gate suites
      enforced, the regression corpus (9.5) green, and the acceptance run (12.4)
      reproducible from seed.
      <!-- The substantive criteria ARE met: the gate suites are enforced
                          (loom-service release harness), the §12.4 acceptance run is reproducible
                          from seed, and a regression corpus is green. GA cannot be honestly signed
                          while §4.6 and §9.5 (both P1) remain blocked on V5-authored content that
                          does not exist as data. 87/90 is the honest ceiling without fabrication. --> _Board
      tag 2026-09-18: follows 4.6 and 9.5._ `blocked:upstream`

---

## Appendix A — Gap → Phase traceability (every `gap§` is closed)

| Gap (`V8_GAP_ANALYSIS.md`)                    | Closed by                                               |
| --------------------------------------------- | ------------------------------------------------------- |
| A — no case generator                         | §2 (Clew), §3 (Minos)                                   |
| B — factory not wired to game                 | §7 (Daedalus compiler), §8 (UE plugin), §9-arch (relay) |
| C — orchestration/integration scaffold        | §0.5–0.7, §4 (Anansesɛm), §6 (Ori-Detective)            |
| canon/continuity                              | §1 (Palimpsest), §11.6                                  |
| asset realization                             | §5 (Loom)                                               |
| automated solvability/eval                    | §9 (Theseus), §3 (Minos)                                |
| runtime delivery / live NPC                   | §8, §6.5, §9-arch relay                                 |
| open-world direction                          | §10 (Oracle)                                            |
| safety/provenance/determinism/budget/loc/a11y | §11                                                     |
| release gating                                | §12                                                     |

## Appendix B — The eight `ReleaseDecision` gates → tasks

G1 §3.2 · G2 §3.3 · G3 §3.4 · G4 §9.2 · G5 §9.3 · G6 §11.4 · G7 §1.4 · G8
human-quality launch evidence — all enforced by §9.6. The separate seven-gate
platform content suite is enforced by §12.1.
