M6 design amendment 3: the scored-run harness (§2.8, unblocks the gate_m6 run)#181
Conversation
…e_m6 run) Adds §2.8 to docs/design/m6_projection_engine.md — the reviewed design of the scored-run harness whose absence stopped the registered gate_m6 candidate-1 run before scoring (#42 comment 4962640241 registered it; comment 4962773701 is the designed pre-scoring stop, graded a registration error, naming this amendment as the unblock path). Docs-only: edits no gates.yaml cell, moves no threshold, builds no floor, writes no test. §2.8 pins, so the harness build lane implements with zero design choices (the §2.7.6 bar), candidate-blind (builders and scorer exercised on synthetic frames only until the registered run): - 2.8.1 the adjudicated core — the year-0 closed panel carries REALIZED histories (decision 5 reproduction-mode semantics extended from the built disability_step to the marital/household builders); forward/production path out of scope (decision-5 successor gate), pointer restated. - 2.8.2 the projected-slice→native-panel builders per field, against the certified MaritalPanel (episodes→changepoints→backward-asof) and HouseholdCompositionPanel (observed states→evolve) schemas: episode extension, changepoint appends, duration accounting, censor handling. - 2.8.3 the year-0 realized-2015-interview slice, mirroring build_anchor_frame / presence_by_wave and the floor's PSID reads exactly (F6 weight fixed). - 2.8.4 the drift-scoring layer reusing the floor cell functions verbatim (named), byte-identity self-test; gate-seed side-A split, K=20 rbar vs realized rate_a, |ln(rbar/rate_a)|, 4-of-5 conjunction read from the block. - 2.8.5/2.8.6 the two real-data pre-flights (candidate-9 recert margin, designed-abort; certified sign-path verification). - 2.8.7 the runner phases + one-shot write_new/sidecar with registration-id + EARNINGS_SPEC_REGISTRATION stamping. - 2.8.8 the fence extended to the harness; 2.8.9 residual open decisions: none. Updates the revision header (→ revision 4 / amendment 3) and the §10 design-parameters block (adds scored_run_harness). All 39 design-doc-bound tests (test_gate_m6_floors, test_gate_m6_derivations) pass unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Amendment-3 referee round (§2.8, the scored-run harness): MAJOR REVISIONOne finding of the §2.7.6 class — a pin that contradicts the certified code on the gated surface — plus five zero-choices precision gaps. Everything else in §2.8 verified code-true, line-exact, and certification-consistent; the revision is scoped, not structural. Verified against MAJOR1. The gated-earnings scored support is contradicted by certified step-1 mortality — the one gated family §2.8 leaves unresolved. The amendment resolves exactly this interaction for the other three gated families — marital via the realized presence/death censor on a frame-independent panel (§2.8.2; the builder reads the §2.8.3 realized sources, not the live frame), disability via realized-support reproduction (
Either branch falsifies §2.8.9's "residual open decisions: none." This is the analogous class to the §2.7.6 fit-range/gated-surface MAJOR: a scored-surface support definition the certified code contradicts. The ratified record points at the resolution — §4.7 calls the construction "the Required pins (zero-choices gaps; one sentence each)2. The once-per-draw cached cores' stream address is unpinned. The certified cores are per-trajectory, one stream set per draw (verified — see the record below), but §2.8 never says which registry period the single cached run consumes: the first-invocation period-1 streams the loop passes ( 3. The marital builder's person universe is under-pinned. The §2.8.2 table sources 4. "Realized ≤2015-interview histories" is wrong for the 2017/2019 openers. §2.8.1's headline and the §10 JSON 5. The 6. Name the earnings-side support basis. §2.8.3's presence bullet covers flows only ( Notes (disclosure-grade, no gate impact)
Verified sound (the record this round confirms)
Disposition: adjudicate + pin finding 1, add the five one-line pins (2–6), and this amendment meets the §2.7.6 bar; the flows/disability scoring layer, the adjudicated core, the pre-flights, and the fence need no structural change. No gate cell, threshold, or floor artifact is touched by any of the above. |
Referee round #42 comment 4963629234 ruled MAJOR REVISION on §2.8 — one MAJOR (F1) plus five zero-choice pins (F2–F6) and one disclosure. Censor-symmetry and once-per-draw resolved in the amendment's favor (verified from code). Docs-only. - F1 (MAJOR, adjudicated) — the gated earnings support. Certified step-1 mortality (apply_mortality) drops simulated deaths from the frame, so projected {2016,2018} earnings person-periods are a strict subset of realized truth → the §2.8.3 guard aborts every draw, or 6/11 cells score survivor-conditioned (admitting not_certified mortality drift via survivorship). Pinned: the gated earnings cells are a reproduction read on the REALIZED earnings support (the forward chain evaluated for every realized-present person-period regardless of simulated death), bit-safe because apply_earnings draws on person-keyed EARNINGS streams (steps.py:222-233) so no survivor bit moves; mortality stays report-only. Argued from decision 5 + §4.4 cancellation + §4.7. Adds §2.8.4 paragraph + §2.8.3 EXACT_WAVE earnings support bullet (folds F6). - F2 — pinned the cached-core stream address to the period-0 deployment address (rng.py:41-44; the address §2.8.5's internal reference uses, composition.py: 643-653), and fixed the "per-period HOUSEHOLD_COMPOSITION streams" self-contradiction → one CompositionRngs per draw; marital main_rng/gap_rng and step-4 fertility stream pinned with it. - F3 — marital builder universe = build_marital_panel(...).attrs ∩ anchor (MH-absent anchor persons excluded symmetrically). - F4 — "realized ≤2015-interview" → "≤ the person's anchor interview (2015 for the bulk)" in §2.8.1, the household seed, and the §10 JSON (2017/2019 openers). - F5 — attrs.n_marriages pinned to lifetime MH18 (person_attributes), carried- inert (unread; overwritten by _assemble_panel) — one value, not two. - F6 — named the earnings-side support basis (realized reference-year row existence, EXACT_WAVE) distinct from the flow presence sets; folded into F1. - Disclosure — added the fertility whole-window-recompute-per-period note (frame births stitched, inert on gated cells) as a third mechanical alignment. §10 JSON → revision 5 (scored_run_harness updated). All 39 design-doc-bound tests pass unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Revision 1 — addresses the amendment-3 referee round (comment 4963629234: MAJOR REVISION)Pushed F1 (MAJOR — gated-earnings scored support vs certified step-1 mortality) → §2.8.4 + §2.8.3. Certified The support-basis sentence, verbatim:
F2 → §2.8.2. Pinned the cached-core stream address to the period-0 deployment address ( F3 → §2.8.2 table. Marital F4 → §2.8.1 + §2.8.2 household seed + §10 JSON. "realized ≤2015-interview" → "realized ≤ the person's anchor interview (2015 for the bulk; 2017/2019 openers seed later)" — the leakage fence stated at the true per-person boundary (ratified conditioning, no fitter sees the seed). F5 → §2.8.2 table. F6 → §2.8.3. Named the earnings-side support basis — realized Disclosure note → §2.8.9. Added the fertility whole-window-recompute-per-period disclosure (frame-materialized births stitched across years; inert on every gated cell — children outside No gate cell, threshold, or floor artifact touched. Stays DRAFT pending the referee's re-read. |
Amendment-3 re-check (§2.8 revision 1,
|
What
Adds §2.8 — the scored-run harness to
docs/design/m6_projection_engine.md(design amendment 3). Docs-only: it edits nogates.yamlcell, moves no threshold, builds no floor, and writes no test.Why
gate_m6candidate-1 was registered as a one-shot temporal-holdout run (#42 comment 4962640241) and then stopped before any scored phase — the designed pre-scoring stop, comment 4962773701, graded a registration error. The engine (PR #173, merged95a3e05) is build-only: the per-slice native-panel builders exist only as test stubs, the drift-scoring composition is unbuilt, and pre-flight 1 had only run on synthetic ensembles. The stop names this design amendment as the unblock path (referee round → build → engine-referee-style review → merge → fresh registration).§2.8 pins every modeling decision so the harness build lane implements with zero design choices (the §2.7.6 bar), candidate-blind (builders and scorer exercised on synthetic frames only until the registered run; no holdout truth read in the build).
The pins (§2.8.1–§2.8.9)
disability_stepreproduction template (assembly.py:257-304) +support.py'sGATED_REALIZED/FORWARDmodes. Forward/production path out of scope (decision-5 successor gate); pointer restated.MaritalPanel(episodes→changepoints→backward-asof) andHouseholdCompositionPanel(observed-states→evolve) schemas as the contract: episode extension, changepoint appends, duration accounting, censor handling — each stated in the certified schema, R1 plumbing, whole-window core run once per draw (thedisability_stepcache pattern).build_anchor_frame/presence_by_waveand the floor's PSID reads exactly (SEED_WAVE=2015); F6 start-wave weight andhousehold_idfixed; presence-conditioned symmetrically viaprepare_evaluation_support.build_anchor_frame,presence_by_wave,*_slices,*_cells,_rate,_wquantile,_score,split_panel_by_person,derive_tolerance), with a byte-identity self-test if reimplemented; per gate seed → side-A half-split, K=20rbarvs realizedrate_a,|ln(rbar/rate_a)|against the frozen v3 floor (e931c886…), 4-of-5 seed conjunction read from the locked block; undefined-draw + regenerated-surface guards.check_candidate9_recertification, ≥3σ), holdout-blind; failure = designed abort (one-shot not consumed)._gate_sign_drawdraw_signbranch vs the test seam), synthetic probe, path recorded.write_new+.env.jsonsidecar, stamping the registration-id +EARNINGS_SPEC_REGISTRATION.gates.yamlread beyond the block's protocol/cells; no holdout-informed choice; no realized post-boundary macro read on the scored path (the §2.7.6.3 leakage prohibition); forward-mode inputs stay rejected.Also updates the revision header (→ revision 4 / amendment 3) and the §10 design-parameters block (adds
scored_run_harness).Verification
docs-only— no engine, floor, or test changed.pytest tests/test_gate_m6_floors.py tests/test_gate_m6_derivations.py→ 39 passed.m6-design-parametersJSON block parses.Draft pending the amendment referee round.
🤖 Generated with Claude Code