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