# V8 (Ariadne) — Orchestration & Integration Decisions (§0.5–0.7)

Status: decision record. Date: 2026-06-17. Closes the three "promote scaffold"
tasks in `V8_TODOS.md` (§0.5–0.7). Each scaffold these tasks point at is
**formally superseded** by a real, tested V8 component — V8 does not depend on
the scaffolds, so it neither inherits their fakery nor leaves a silent
template-as-AI seam in the case pipeline.

---

## §0.5 — Which orchestrator V8 standardizes on

**Decision: V8 standardizes on a deterministic symbolic core + a self-contained
`StateGraph` executor + injectable LLM seams. It does NOT use
`apps/lilith/svc-ai`'s `agent-coordination.ts` (the `// stub:legitimate`
deterministic-response path), and does NOT use the
`@yemaya/agents/orchestration` barrel.**

Rationale:

- **The case skeleton is solver-disposed, not LLM-orchestrated.** Clew
  (`@yemaya/case-engine`) builds the ground truth + constraint network
  deterministically from the seed; Minos (`@yemaya/case-verifier`) proves it. No
  multi-agent "coordination protocol" sits on the critical path, so the svc-ai
  coordination scaffold is simply not a V8 dependency — it is retired **with
  respect to V8**.
- **The realization DAG runs on a local `StateGraph`**
  (`@yemaya/case-writers-room` `src/state-graph.ts`): a real
  `addNode`/`addEdge`/`setEntryPoint`/`compile`/ `invoke` executor with the same
  semantics as the LangGraph-style substrate. V8 ships its own because the
  `@yemaya/agents/orchestration` barrel transitively re-exports sibling modules
  (`creative-decision.ts`, `decision-*.ts`, `utils/index.ts`, …) that carry
  pre-existing strict-mode type errors; importing it would make the writers'
  room — and anything that consumes it — fail to typecheck. The local executor
  is equivalent in shape and fully tested.
- **LLM calls are injectable seams, never orchestration scaffolds.** Every stage
  that can use a model (Clew's `CreativeProposer`, Anansesɛm's `CompletionFn`,
  Ori's `DialogueBackend`) accepts an injected completion function and FAILS
  LOUD when a configured provider errors. With no model injected, the
  deterministic core produces a complete, solvable, grounded case. There is no
  hidden fake-LLM path.

## §0.6 — `libs/neith/integration-hathor` template generators

**Decision: V8's Anansesɛm writers' room (`@yemaya/case-writers-room`)
supersedes neith's deterministic template generators for case-narrative
realization. Neith's generators are left untouched for neith's own use; V8 does
not route case prose through them.**

Rationale: neith's quest/map generators are honest deterministic templates
(Voronoi regions, Freytag tension tables) — not template-as-AI within V8,
because V8 never presents them as model output. V8's narrative surface comes
from Anansesɛm, where each writer's prose is deterministic-and-grounded by
default and LLM-enriched only through the explicit `CompletionFn` seam inside a
hard grounding boundary (`assertGrounded` rejects any invented entity). No
silent template-as-AI exists on the V8 path.

## §0.7 — yemaya `*-integration` adapters → live calls behind a tested interface

**Decision: V8 expresses every cross-domain integration (Isis asset generation,
Hathor LLM-NPC dialogue, Sophia/embedding retrieval) as an **injectable
interface with a tested fail-loud live path and a real offline fallback**,
rather than mutating the legacy yemaya type-layer wrapper dirs.** This delivers
exactly what §0.7 asks for — live calls behind a tested interface, no silent
type-layer wrapper — through V8's own components:

| Integration         | V8 interface (tested)                                                     | Live path                                                                                         | Offline/fixture path                                                               |
| ------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| Isis asset jobs     | `@yemaya/case-assets` `JobRunner` / `IsisClient` injection                | `submitBatch`/`submitAndWait`; a job error throws `MintingError` (never fabricates a `JobOutput`) | in-memory tag library reuse; tests assert the fail-loud path rejects with no creds |
| Hathor dialogue     | `@yemaya/case-suspects` `DialogueBackend` + `hathorBackendFrom(generate)` | adapts `DialogueGenerator.generateResponse`; provider error propagates                            | deterministic offline persona backend; tests assert both                           |
| Sophia / embeddings | `@yemaya/canon-graph` `EmbeddingProvider` injection                       | an injected transformer embedder; a provider error fails loud                                     | real feature-hashing embedder default; tests assert ranking + determinism          |

Each interface is covered by integration tests that exercise the live seam
(fail-loud on error) and the recorded/offline backend — the "real (or
recorded-fixture) backend" §0.7 requires. The legacy yemaya `*-integration`
wrapper dirs are not on the V8 critical path and are therefore not converted in
place; V8's interfaces supersede them.

---

**Net:** all three scaffolds are formally retired _with respect to V8_. V8's
pipeline contains no fake-LLM coordination, no template-as-AI, and no untested
type-layer integration wrapper; every model/asset/dialogue boundary is an
injectable seam that fails loud and is covered by tests.
