The throwaway harness hand-built a minimal canon log and left luck_descriptor as the default "", which fails the canon-log schema (minLength 1) → /npc/speak 422s and the harness silently degrades to fallback. Build the player through LogPlayer with a non-empty §7 fortune line. Verified: request now 200s and Fenn answers in-voice. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
/client — Godot 4.7 game client
GDScript. Holds ALL game state and ALL game rules (charter §2, §4). The AI never mutates state; the client validates and applies everything.
Open: Godot 4.7, import this folder as the project (project.godot).
Responsibilities
- All state: stats, HP/MP, inventory, quest flags, Luck, disposition/approval (§8, §9)
- All rules: deterministic combat, Luck branch-selection, move validation (§6, §7, §10)
- The canon log — compact structured fact list, code-maintained, injected into every call (§11)
- Talks to
/apiover HTTP. No API key, ever. Knows one base URL + role endpoints (§4) - Degrades to authored fallback text (from
/content/fallback) when the API is down (§13)
Key rule — never do this (charter §2)
If an AI response directly sets a variable that persists, stop. Parse → validate → apply or discard.
See docs/ for scene structure, input model, and combat wiring.