Story-2513 Walkthrough

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.

Mental model. Code sweeps every page and proposes permissively. Three models inspect small skim windows. The judge resolves disagreement. Deterministic code emits only grounded results. A model can recommend a cut; it cannot make an unanchored cut or a false auto-twin become truth.

Locked model contract

SeatLocked modelJob
Proposer 1Sonnet 5Confirm, correct, reject, or escalate exhaustive code candidates; name children from matched anchored index and cover text.
Proposer 2Grok 4.5
Proposer 3Gemini 3.5 Flash
JudgeGPT-5.6-SolRe-read source data, rule every boundary/twin once, and escalate ambiguity.
AssemblerDeterministic codeEnforce 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.

Prompt contract

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.

ER-39 and ER-41 receipts

ScenarioExecutable receipt
ER-39: reconcile against the indexINDEX-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 boundarySOC-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.

Four fixture truths

FixtureGround truth
SOC-GOLD-1000Five 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-90R-1 is byte-identical to SOC P-1 and is the positive auto-twin control.
COUNTER-GOLD-166Noisy scan asks counsel; changed-date lease is a related version; partial lease is a related extract. None auto-merge.
INDEX-MISMATCH-60The 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.

Verification

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.

Wave obligations and cutover boundary

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.