Change: Blake now has fixture-only Document Family prompts and an canonical offline and periodic-live evals for exact child boundaries, grounded child names, ambiguity escalation, and the strict twin ladder.
| Seat | Locked model | Job |
|---|---|---|
| Proposer 1 | Sonnet 5 | Confirm, correct, reject, or escalate exhaustive code candidates; name children from matched anchored index and cover text. |
| Proposer 2 | Grok 4.5 | |
| Proposer 3 | Gemini 3.5 Flash | |
| Judge | GPT-5.6-Sol | Re-read source data, rule every boundary/twin once, and escalate ambiguity. |
| Assembler | Deterministic code | Enforce core ownership, exact title anchor, index-cover match, valid page map, and the twin vetoes. |
Runtime model ids remain environment-resolved through the existing Deep Read panel. No vendor id or fallback was added to Python.
Each page contributes an approximately 50-token skim record with a hard 64-token
estimate cap (using the registrar's canonical token estimator). A 250-page core may use an
8-page halo for context, but only a core anchor can become a boundary. Document, index,
code-candidate, and proposer text is nonce-fenced as untrusted data. Standing rules are
delivered fresh through Pydantic AI instructions, never mixed into material
or replay history. A child name must be the
exact anchored filing label/cover title. An index-title mismatch or uncertain mid-page
start emits no child and retains the ink in the parent for counsel.
| Scenario | Executable receipt |
|---|---|
| ER-39: reconcile against the index | INDEX-MISMATCH-60 confirms A, B, and F; the index-D/title-E conflict and pages 41–50 stay in the parent. A guessed E child is rejected by assembly. |
| ER-41: exact mid-page boundary | SOC-GOLD-1000 places P-4 at the title anchor on page 801. Substituting the P-3 closing paragraph leaves the uncertain P-4 region in the parent instead of extending P-3 across it. |
| Fixture | Ground truth |
|---|---|
| SOC-GOLD-1000 | Five indexed children; narrative “Annexure C” does not split; P-4 starts at the exact mid-page heading; low-OCR P-5 remains represented. |
| REPLY-GOLD-90 | R-1 is byte-identical to SOC P-1 and is the positive auto-twin control. |
| COUNTER-GOLD-166 | Noisy scan asks counsel; changed-date lease is a related version; partial lease is a related extract. None auto-merge. |
| INDEX-MISMATCH-60 | The D/E conflict is flagged without guessing; A, B, and F still process. |
The hard metric is auto_false_twins == 0. A non-vacuous test feeds an
unsafe auto-twin ruling for the changed-date lease; deterministic assembly rejects it.
First-class evaluators also cover core ownership, scope, prompt leakage, fabrication,
forbidden action, indirect injection, delimiter escape, prompt extraction, and
exfiltration.
uv run ruff check agents/registrar/family_models.py agents/registrar/prompts/family.py agents/registrar/evals/family_boundary_evals.py agents/registrar/tests/test_registrar_family_boundary.py uv run --package registrar pytest agents/registrar/tests/test_registrar_family_boundary.py -q cd agents/registrar && uv run python -m evals.family_boundary_evals # then the full repository Verify gate from .github/workflows/ci.yml
Focused result: 9 tests passed; the canonical dataset reports 4/4 fixture cases with every deterministic evaluator green.
T5i green means exact boundary/range fixture parity, the periodic locked-panel prompt dataset, and hard-zero auto-false-twin. T5e owns the W5 staging smoke: build/version/upload all four PDFs, then exercise boundaries, index-mismatch review, twins, note-then-confirm, revocation, and i18n end to end. W6 deletion remains gated on fixture parity and every wave smoke.
This PR is fixture-only. The old family path remains the sole serving path. T5d owns production orchestration and deterministic verification. This PR adds no runtime route, event, schema, migration, deployment, or billing change.