Files
chat/docs/plans/2026-04-26-v1-phase1-implementation.md.tasks.json
T
Joseph Doherty f0594c24d2 docs: add Phase 1 implementation plan with 36 TDD tasks
Bite-sized, TDD-driven plan covering all v1 deliverables from the
requirements doc §13. Each task has: file paths, failing test,
verify-fail step, minimal implementation, verify-pass step, and a
single commit.

Phases:
- 1A Foundation: project skeleton, config, migrations, LLM client, classifier
- 1B State machine: event log, projector, entities, edges, memory, world
- 1C Authoring: kickoff parser, bot form, settings, kickoff confirm
- 1D Chat (single bot): nav, chat shell, SSE, turn parse, prompt assembly,
  narrative streaming
- 1E Per-turn updates: state-update, memory writes, significance, retrieval
- 1F Drawer & scenes: read-only drawer, drawer edits, scene close, per-POV
  summary
- 1G Rollback: rewind w/ impact preview, regenerate, reset
- 1H Ops & polish: snapshots, backups, display, streaming UX, errors,
  first-run

Companion tasks.json captures dependency DAG for resumable execution.
2026-04-26 11:19:33 -04:00

43 lines
4.4 KiB
JSON

{
"planPath": "docs/plans/2026-04-26-v1-phase1-implementation.md",
"tasks": [
{"id": 0, "subject": "T0: Project skeleton with health endpoint", "status": "pending"},
{"id": 1, "subject": "T1: Config loading (toml + env override)", "status": "pending", "blockedBy": [0]},
{"id": 2, "subject": "T2: SQLite migration runner with meta version", "status": "pending", "blockedBy": [0]},
{"id": 3, "subject": "T3: LLMClient protocol + Featherless + Mock", "status": "pending", "blockedBy": [1]},
{"id": 4, "subject": "T4: Classifier wrapper with retry/timeout/fallback", "status": "pending", "blockedBy": [2, 3]},
{"id": 5, "subject": "T5: Append-only event log with projector skeleton", "status": "pending", "blockedBy": [2]},
{"id": 6, "subject": "T6: Bot + You entity schemas and events", "status": "pending", "blockedBy": [5]},
{"id": 7, "subject": "T7: Edges schema with per-turn delta projector", "status": "pending", "blockedBy": [5, 6]},
{"id": 8, "subject": "T8: Memory schema with witness flags + FTS5 index", "status": "pending", "blockedBy": [5, 6]},
{"id": 9, "subject": "T9: Chats, chat_state, containers, scenes, activity tables", "status": "pending", "blockedBy": [5, 6]},
{"id": 10, "subject": "T10: Kickoff prose parser via classifier", "status": "pending", "blockedBy": [4, 9]},
{"id": 11, "subject": "T11: Bot authoring page with bot_authored event", "status": "pending", "blockedBy": [6]},
{"id": 12, "subject": "T12: Settings page with you-entity authoring", "status": "pending", "blockedBy": [6]},
{"id": 13, "subject": "T13: Kickoff parse-and-confirm flow", "status": "pending", "blockedBy": [10, 11, 9]},
{"id": 14, "subject": "T14: Top-level nav and chat list view", "status": "pending", "blockedBy": [9, 11]},
{"id": 15, "subject": "T15: Chat shell page rendering", "status": "pending", "blockedBy": [14]},
{"id": 16, "subject": "T16: Per-chat SSE channel and pub/sub", "status": "pending", "blockedBy": [15]},
{"id": 17, "subject": "T17: Turn input parser (dialogue/action/ooc)", "status": "pending", "blockedBy": [4]},
{"id": 18, "subject": "T18: Prompt assembly with must/should/nice trim tiers", "status": "pending", "blockedBy": [8, 7, 9]},
{"id": 19, "subject": "T19: Narrative streaming via SSE with assistant_turn event", "status": "pending", "blockedBy": [3, 16, 17, 18, 5]},
{"id": 20, "subject": "T20: Post-turn state-update pass per present entity", "status": "pending", "blockedBy": [4, 7, 19]},
{"id": 21, "subject": "T21: Per-turn memory writes with witness flags", "status": "pending", "blockedBy": [8, 19]},
{"id": 22, "subject": "T22: Async significance pass with auto-pin on score 3", "status": "pending", "blockedBy": [4, 8, 21]},
{"id": 23, "subject": "T23: FTS5 memory retrieval with witness filter and ranking", "status": "pending", "blockedBy": [8, 18]},
{"id": 24, "subject": "T24: Read-only drawer with scene, activity, edges, memories", "status": "pending", "blockedBy": [15, 9, 7, 8]},
{"id": 25, "subject": "T25: Drawer edits with manual_edit event capture", "status": "pending", "blockedBy": [24, 5]},
{"id": 26, "subject": "T26: Scene close on hard signals with manual override", "status": "pending", "blockedBy": [9, 17, 24]},
{"id": 27, "subject": "T27: Per-POV summary and edge summary update on scene close", "status": "pending", "blockedBy": [4, 8, 7, 26]},
{"id": 28, "subject": "T28: Rewind with impact preview, snapshot, undo toast", "status": "pending", "blockedBy": [5, 9, 8]},
{"id": 29, "subject": "T29: Regenerate with edit-then-regenerate inline UX", "status": "pending", "blockedBy": [19]},
{"id": 30, "subject": "T30: Bot reset with hard confirm and event-driven purge", "status": "pending", "blockedBy": [6, 8, 7, 9]},
{"id": 31, "subject": "T31: Periodic snapshots with retention and cold-load fast-path", "status": "pending", "blockedBy": [28]},
{"id": 32, "subject": "T32: Nightly DB backups with 14-day retention", "status": "pending", "blockedBy": [2]},
{"id": 33, "subject": "T33: Transcript display formatting (markdown, italic, OOC)", "status": "pending", "blockedBy": [19]},
{"id": 34, "subject": "T34: Streaming UX with Stop, disconnect handling, send-lock", "status": "pending", "blockedBy": [19, 16]},
{"id": 35, "subject": "T35: Error banners and first-run navigation flow", "status": "pending", "blockedBy": [19, 12, 11, 13]}
],
"lastUpdated": "2026-04-26T00:00:00Z"
}