Files
code_of_conquest_dnd/docs/roadmap.md
Phillip Tarrant 1189d2e24d docs: mark Narrator/Ollama pipeline complete (plan steps + roadmap)
Plan status → COMPLETE, all 8 tasks/44 steps checked. Roadmap: Narrator pipeline
, Client HTTP loop promoted to ▶ next.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 09:00:34 -05:00

3.2 KiB

Roadmap

Source of truth for scope is CLAUDE.md. This tracks sequencing.

POC — the one question (charter §17)

Does bounded AI dialogue feel alive, or does it feel like a chatbot in a costume?

Test that before building anything else. ~30 minutes of play.

POC scope

  • One town, two NPCs with authored knowledge lists
  • One dungeon: three fights, one boss
  • Two companions: Cadwyn, Brannoc
  • Three playable classes: Sellsword, Assassin, Priest
  • Luck fully wired: generation, drift, one shrine, one cursed item
  • Full proxy, full role split, full canon log
  • Authored fallback text for every AI surface

Out of scope (charter §17)

AI-generated story skeletons · multiplayer (never) · mobile · credits/payments/auth · companions leaving · positional combat · more than three classes.

Sequencing

Status: done · ▶ next · ○ planned. Each item is its own spec → plan → implementation cycle.

Foundations — contract + engines

  • Canon log + origin JSON-Schema contract, api validation, unified 422 envelope (Plan A).
  • Client canon log engine — typed GDScript model (invariants in the model), new-game construction (origin + world + creation → canon log), turn-to-turn maintenance mutators, pure [FACT]/[MOVE]/[ADJUST_DISPOSITION] tag extractor (Plan B).

Proving the loop — the POC's one question

  • Narrator / Ollama pipeline (server) — the shared server-side model-call pipeline (Ollama httpx client, role→model routing config, prompt loader + canon-log digest renderer, §10 call logging, single-retry → typed 502) wired through /dm/narrate. Non-streaming. Both phases landed: (1) pipeline foundation (config/routing/prompts/ollama_client/call_log), (2) Narrator online (authored narrator.md body + narrate service + gated live smoke). Server returns raw prose; the client extracts tags. The other four roles become thin drop-ins on this pipeline. Live wire proven against qwen3.5; 49 tests. Merged to dev (ddc00d4).
  • Client HTTP loop — client posts its canon log to /dm/narrate, displays the prose, harvests [FACT] via its TagExtractor into its own log, and shows the degraded-DM authored fallback (§13) on any non-200. Closes the first end-to-end Narrator scene.
  • Bounded NPC conversation/npc/speak with persona + knowledge[] + available_moves[]; client validates and applies moves, silently drops the invalid, keeps the prose (§6). The core experiment.

Fills out the POC (charter §17)

  • Streaming (§14) — server streams Ollama → client, landed with/after the client HTTP loop.
  • Adjudicator (free text → legal action, strict JSON), Improviser (§7 sandbox, whitelisted changes), Banter (§9 humiliation log).
  • Luck fully wired — drift events, one shrine, one cursed item.
  • Combat — deterministic, seeded; the dungeon (three fights, one boss).
  • Authored fallback text for every AI surface (§13).

Deferred beyond POC

Replicate provider (prod) · auth · metering · credits/payments (§4) — retrofit onto the pipeline later, the game doesn't notice.