For agents, on top of README.md, which they read first.
- The invariants for these files are one folder up, in
crates/postjevsql-core/CLAUDE.md, which loads with this one. - A node's score is
Σ ln max(p, 1e-9), never the cookbook's geometric mean. The mean rises with depth, which breaks the bound pruning relies on, and the search stops being exact. - K is Choices asked per round, not a beam width that drops nodes. A
node is dropped only when its bound cannot change the top two leaves (or,
under τ, the deepest node at or above τ).
exact_against_exhaustiveholds the search to that; keep it passing for every new option. - Never reorder options or finalists. Order is part of the question and of the cache key; a shortlist finalist keeps its place in the caller's list, not its rank in round 1.
- The unmeasured defaults (K = 3, lookahead m = 2 and a 60,000-token
round, twin at 1.5×,
Describe20 and 5,keep3) belong to the release gates. Changing one changes every request a search sends, and so every recorded fixture: re-record (tools/record-gates), do not edit fixtures.