Source: assist/r7/FREEZE.md
# Round 7 proposer template: closed route menu + `_other`
`PROMPT.txt` is `assist/r5/PROMPT.txt` with one sentence removed ("Do not invent variant labels.") and the ROUTES
section added; r5 itself is untouched. `response.schema.json` is the r5 schema plus `route`, `pattern`,
`route_reason`, `proposed_route`. Nothing here has been run: this is a template, not a result.
## What the model is given
1. `PROMPT.txt`.
2. The r5-style element checklist of the target law.
3. The target law's route menu: `python3 neov2/variants/vtool.py menu <law>` — generic routes, then per element
its routes with definition / include / exclude. Definitions only: no case text, no example quotes, no labels.
4. The whole opinion.
## How to freeze (before the first real-case model call)
```
python3 neov2/variants/vtool.py check # taxonomy well-formed, every case route valid
python3 neov2/variants/vtool.py freeze-r7 # writes menus/<law>.txt, freeze.json, freeze.sha256
git add neov2/assist/r7 && git commit # the commit is the freeze; record its hash in the round's PROTOCOL.md
```
`freeze.json` pins by sha256: the prompt, the schema, every rendered menu and every `taxonomy/*.vtax` file, plus
the taxonomy version and git head. `freeze-r7` refuses to overwrite an existing freeze; a changed prompt or
taxonomy after a model call is a new round (r8), not an edit. Add the runner, sample and reviewer assignment to
the same commit, as r5 and r6 did.
## Mechanical checks the runner must apply to each candidate
* `route` is on the supplied menu **for that candidate's element**, or is a generic route, or is `_other`.
* `_other` ⇔ `proposed_route` is non-null with id, definition, include, exclude; the id is not already a route of
that element.
* Quote checks exactly as in r5 (unique verbatim substring; no repair).
A candidate that fails is rejected, not repaired. `_other` proposals are appended to
`neov2/variants/queue/*.tsv` with `proposed_by = <round>:<model>`; they are never written into the taxonomy by
the runner (see `neov2/variants/PROCESS.md`).
## What to measure, and the leakage limit
* Route reuse: share of accepted candidates on an existing element route / generic route / `_other`
(round 6 baseline with raw-label lists: 0 of 64 on an existing label).
* Reviewer route precision: `review.variant_accept` per source (query `route-precision-by-review`).
* Leakage: route definitions were written with every annotated case in view, and a definition cannot be
"un-seen" case by case the way r6 removed catalogue examples. A test case must therefore be one that was not in
`neov2/cases` at the frozen taxonomy version; previously annotated controls measure consistency, not recall.