diff --git a/CLAUDE.md b/CLAUDE.md index 85ad78625..de4e61a1d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,6 +61,13 @@ The ticketing database (`settledreach.db`) lives in the **parent directory** sha | Doc search | `tooling/db/qdrant-search "query"` | `/docs-search` skill | | Doc index | `tooling/db/qdrant-index path/to/file.md` | `/docs-search` skill | +### Testing preferences + +- **Prefer live Gauntlet testing over mocks.** For visual tests and rendering verification, use the full client/server pipeline (`--test-mode` + `SR_LIVE=1`) instead of TestHarness mocks. The Gauntlet test world produces production-identical data. Mocks can mask rendering bugs by taking different code paths. +- **Gauntlet rooms are immutable.** Never modify existing rooms — new systems get new rooms. This ensures StableId determinism and fixture stability. +- Three test tiers: (1) Live server — highest fidelity, (2) MessagePack replay via `Protocol.decode_snapshot()` — for unreachable rooms, (3) TestHarness mock — for UI-only tests where fog data doesn't matter. +- `make fixtures-gauntlet` regenerates real server snapshot fixtures from the Gauntlet world. + ### File conventions - Decisions: domain files in `decisions/` (see `decisions/README.md` for index) - Decision IDs: `D-NNN` (confirmed), `Q-NNN` (open questions), `R-NNN` (rejected)