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-roomsrc/state-graph.ts): a realaddNode/addEdge/setEntryPoint/compile/invokeexecutor with the same semantics as the LangGraph-style substrate. V8 ships its own because the@yemaya/agents/orchestrationbarrel 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'sCompletionFn, Ori'sDialogueBackend) 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.