# /client/docs

Client-specific documentation. Scoped to the Godot project.

Put here:

- Scene tree / autoload structure
- Input model — menu vs free-text boundary, which must be visible (§15)
- Combat wiring — deterministic damage, per-encounter seeding (§10)
- Canon log data structure and fact-harvesting (§11)
- HTTP client + fallback-degradation handling (§13)

Cross-cutting design (anything touching both client and api) goes in the root [`/docs`](../../docs), not here.

## Narrate live smoke (M2 client HTTP loop)

The `narrate_harness` scene is a throwaway proof of the client → `/dm/narrate`
loop. It is not the game UI.

**Prereqs:** the proxy running and Ollama reachable.

1. Start the proxy: from `api/`, `uvicorn app.main:app --port 8000` (with the
   `.env` from `.env.example`; Ollama up at `OLLAMA_BASE_URL`).
2. In the Godot editor, open `res://scenes/narrate_harness.tscn` and run it (F6).
3. Click **Narrate this scene**. Expect grounded prose in the Narrator's voice
   (referencing Greywater / Brannoc / the washed-out bridge), tags stripped, and
   `facts harvested: N` with N ≥ 0.
4. **Degraded path:** stop the proxy and click again. Expect the authored
   fallback line and `(degraded)` in the status — never an error.

Override the proxy URL with the `coc_rpg/proxy_base_url` project setting.
