491f2d64549c9521aecdea84a77e4a7a26386dc6

Author
TheEdgeOfRage <git@theedgeofrage.com>
Committer
TheEdgeOfRage <git@theedgeofrage.com>
Date

Message

docs: mark all plan tickets complete

Diff

 1diff --git a/PLAN.md b/PLAN.md
 2index d03c04534970f6b218536cc5fd82b0af1e8ce4b6..c9285a74073ab313ec36fda1c54f58e0897652c5 100644
 3--- a/PLAN.md
 4+++ b/PLAN.md
 5@@ -155,29 +155,29 @@ Do not create `internal/servers` or a `models/` directory. Model files and servi
 6 
 7 ## Implementation tickets
 8 ### Phase 1 — foundation
 9-- [ ] 1. Create the Go module, layout, `.gitignore`, and endpoint/recorder configuration. Provide `run` and `persona gen` command parsing; include no model paths or server-management options.
10-- [ ] 2. Implement read-only service availability reporting and clear per-service errors. Never launch, supervise, kill, or reconfigure a service.
11-- [ ] 3. Add developer documentation for the three externally managed service endpoints, the Unsloth LLM model, the existing large-v3-turbo Whisper server, and the audio.cpp Qwen3-TTS configuration.
12+- [x] 1. Create the Go module, layout, `.gitignore`, and endpoint/recorder configuration. Provide `run` and `persona gen` command parsing; include no model paths or server-management options.
13+- [x] 2. Implement read-only service availability reporting and clear per-service errors. Never launch, supervise, kill, or reconfigure a service.
14+- [x] 3. Add developer documentation for the three externally managed service endpoints, the Unsloth LLM model, the existing large-v3-turbo Whisper server, and the audio.cpp Qwen3-TTS configuration.
15 
16 ### Phase 2 — model and audio adapters
17-- [ ] 4. Implement `internal/llm`: chat-completions HTTP/SSE client, Qwen3 no-thinking request options, bounded history, NPC and judge prompt builders, and parsers for both strict contracts. Test against `httptest` servers.
18-- [ ] 5. Implement `internal/stt`: push-to-talk recorder command wrapper, temporary WAV lifecycle, and the Whisper multipart client that returns the raw transcript. Test recording-process errors and response parsing without a real server.
19-- [ ] 6. Implement `internal/tts`: audio.cpp speech client, WAV validation, and non-blocking `oto/v3` playback. Test against an `httptest` server.
20+- [x] 4. Implement `internal/llm`: chat-completions HTTP/SSE client, Qwen3 no-thinking request options, bounded history, NPC and judge prompt builders, and parsers for both strict contracts. Test against `httptest` servers.
21+- [x] 5. Implement `internal/stt`: push-to-talk recorder command wrapper, temporary WAV lifecycle, and the Whisper multipart client that returns the raw transcript. Test recording-process errors and response parsing without a real server.
22+- [x] 6. Implement `internal/tts`: audio.cpp speech client, WAV validation, and non-blocking `oto/v3` playback. Test against an `httptest` server.
23 
24 ### Phase 3 — game data and behavior
25-- [ ] 7. Define and validate JSON data for maps, locations, scenarios, personas, and personality-based ambiguity handling. Add three reviewed default personas and their ramen, station, and tourist-information situations.
26-- [ ] 8. Implement `jp persona gen --role <role>` as an explicit authoring helper. Its prompt must contain no game context; parse its structured result, require review before use, and never start an LLM service.
27-- [ ] 9. Implement the pure free-roam game state: map movement, location entry/exit, in-memory per-location history, hidden/revealed NPC text, and no XP, save, or progression gate.
28-- [ ] 10. Implement turn orchestration over adapter interfaces. Keep judge output separate from NPC input; handle malformed model output and unavailable adapters as recoverable states.
29+- [x] 7. Define and validate JSON data for maps, locations, scenarios, personas, and personality-based ambiguity handling. Add three reviewed default personas and their ramen, station, and tourist-information situations.
30+- [x] 8. Implement `jp persona gen --role <role>` as an explicit authoring helper. Its prompt must contain no game context; parse its structured result, require review before use, and never start an LLM service.
31+- [x] 9. Implement the pure free-roam game state: map movement, location entry/exit, in-memory per-location history, hidden/revealed NPC text, and no XP, save, or progression gate.
32+- [x] 10. Implement turn orchestration over adapter interfaces. Keep judge output separate from NPC input; handle malformed model output and unavailable adapters as recoverable states.
33 
34 ### Phase 4 — Bubble Tea UI
35-- [ ] 11. Build the non-blocking Bubble Tea application shell and map view with movement and location-entry controls.
36-- [ ] 12. Build the dialogue view: push-to-talk state, recognized romaji, score/feedback panel, playback status, and service-error display.
37-- [ ] 13. Add hidden NPC text behavior: `R` reveals romaji, then `T` reveals the stored English field. Verify kana/kanji never render in the UI.
38+- [x] 11. Build the non-blocking Bubble Tea application shell and map view with movement and location-entry controls.
39+- [x] 12. Build the dialogue view: push-to-talk state, recognized romaji, score/feedback panel, playback status, and service-error display.
40+- [x] 13. Add hidden NPC text behavior: `R` reveals romaji, then `T` reveals the stored English field. Verify kana/kanji never render in the UI.
41 
42 ### Phase 5 — finish
43-- [ ] 14. Add unit coverage for state transitions, data validation, output contracts, prompt rules, and adapter error paths. Run only fake HTTP services in automated tests.
44-- [ ] 15. Write the README: prerequisites, external-service configuration, controls, test commands, and manual end-to-end checks. State prominently that users, not the game, operate model services.
45+- [x] 14. Add unit coverage for state transitions, data validation, output contracts, prompt rules, and adapter error paths. Run only fake HTTP services in automated tests.
46+- [x] 15. Write the README: prerequisites, external-service configuration, controls, test commands, and manual end-to-end checks. State prominently that users, not the game, operate model services.
47 
48 ## Verification
49 - `go test ./...` passes without a local model, mic, or running model service.