neochart v2 research

assist/r7/FREEZE.md

Source: assist/r7/FREEZE.md

Exact source text

# 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.