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>
3.2 KiB
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 (authorednarrator.mdbody +narrateservice + 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 todev(ddc00d4). - ▶ Client HTTP loop — client posts its canon log to
/dm/narrate, displays the prose, harvests[FACT]via itsTagExtractorinto 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/speakwith 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.