M4 disability gate: floors and anchor evidence base#153
Conversation
Ceremony step 1 for the DI gate (roadmap #113, M4): the floors + anchor basis its thresholds will derive from. Reads no gate, changes no gate; gates.yaml is UNTOUCHED (the proposed gate_m4 stub-flip lives in the artifact note + PR body for the referee rounds and eventual ratification). ANCHOR-BASED (gate-1 external-check style), not holdout-only (gate-2): the PSID EMPLOYMENT STATUS self-report is not the SSA DI program (seven named concept deltas), so no SSA DI level is gated. Gated cells live only on concept-bridgeable surfaces, scored against the sha-pinned in-repo DI ASR 2023 tables: - (a) conversion-exit vs Table 50: retirement is the majority non-death disability exit near FRA (dominance, per sex). - (b) prevalence age-shape vs Table 19: co-monotone rise + 50-59 peak (ordinal, per sex; bounded stats gated as invariants, not |ln ratio|). - (d) internal incidence/recovery: the 100-seed person-disjoint half-split |ln(r_A/r_B)| floor, round(mean+3*sd,3) capped at ln(1.5). Report-only with the delta named (never calibrated): the Table 49 termination-rate trend (period-pooling), the 6.B5.1 conversion level and sex-ordering, all prevalence levels + the 60-FRA band, and the noisy transition cells above the cap. Deliverables: scripts/build_m4_gate_floors.py (deterministic; no populace-fit, no pe-us), runs/m4_gate_floors_v1.json via write_new, binding tests (no dead zones, label-swap catches, sha pins) + a PSID reproduction, tier refresh, honest warts (k=4 empties the internal surface; the gate leans on the anchor cells). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Round-1 adversarial referee: M4 disability gate floorsVerdict: AMEND BEFORE LOCKEverything numerical in this artifact reproduces independently and exactly — panel (41,345 persons / 284,932 person-years / 227,579 pairs), all 32 reference moments to 1e-12, the full 100-seed floor to 1e-9, every tolerance, the partition and its machine reasons, the OC 0.9717, the training-copy 0.9161, the anchor margins (6.099/5.298/4.797/12.806 sigma), holds-on-all-100-halves, the T19/T50/T49 extractions re-derived from the committed table with an independent parser, and a full rebuild is substantively byte-identical with The gate cannot lock as designed, though. The internal surface quietly contradicts the frozen module artifact's own pre-registration under an invalid machine reason, and that unregistered restriction is what produces the headline "k=4 empties the internal surface" wart and the committed k-sensitivity table. Two further protocol objects (the K=20 draw stream and the anchor-cell candidate rule) drift from or under-specify the ratified conventions. Findings and required fixes follow. Finding 1 (BLOCKER): the internal surface drops pre-registered families under an invalid reason, and the k=4 narrative is an artifact of that restrictionThe frozen
Recomputed on the committed 100-seed floor, with the pre-registered families restored and the inherited power rules applied unchanged:
Corrected k-sensitivity over the pre-registered surface: k=2 → 21, k=3 → 12, k=4 → 2 — not the committed 12/6/0, which is k-sensitivity over the unregistered transition-only restriction. So:
Required fix A. Either (i) restore the pre-registered families to the internal partition and let the inherited power rules produce the honest partition — at k=3 that is 12 gated internal cells (six transitions + six prevalence), faithful OC 0.9008; or a computed variant that preserves the precedent OC: transitions at k=3 plus prevalence.50-59|{f,m} at the 2c-inherited k=4, OC 0.9689 (at the precedent level: 2a 0.9685, 2b 0.9678, 2c 0.9641) — any such mixed rule must itself be stated and pre-registered; or (ii) keep the exclusion but pre-register a valid stated reason (e.g., a module-boundary/initialization argument about whose module owns the simulated stock), disclosed as an explicit deviation from the frozen note — not the concept deltas. Required fix B. Commit the k-sensitivity over the pre-registered surface alongside the transition-only table, rewrite wart 1 ("k=4 empties the transition families; prevalence.50-59 still gates at k=4"), and correct the conversion cells' machine reason to their true power demotion. Finding 2 (MAJOR): K=20 estimator drift — the draw stream and the fresh-run audit contractThe ratified tranche-2a amendment-1 estimator pins The ratified estimator also comes with Required fix C. Adopt Finding 3 (MAJOR): the anchor cells' candidate-side scoring rule is under-specifiedThe internal statistic is pinned precisely (mean-over-K rate, scored once, per gate seed, 4-of-5). The anchor statistic is: "the ordinal invariant … holds on the candidate's simulated holdout, as it does on the real full sample and all 100 halves." Unpinned: (i) is the candidate's simulated panel itself split into 100 halves, or scored once per gate seed? (ii) does the ≥ 3-sigma margin apply to the candidate, and if so with whose sigma? (iii) how do the K=20 draws enter (per draw / mean panel / any-draw-fails)? (iv) 4-of-5 conjunction or a single full-sample check? The readings differ qualitatively: an epsilon-tilt candidate (shares rising by 0.001 per band) passes the bare ordinal reading and fails a 3-sigma-margin reading (3 x half-split sd is approximately 0.033 on the min-gap). Since 4 of the 10 gated cells are anchor cells, a locked gate cannot leave this open. Required fix D. Pin the candidate-side anchor statistic exactly (recommend: computed per gate seed on the same mean-rate basis as the internal cells, with the margin requirement stated one way or the other), and add the binding test. Finding 4 (MINOR): wart 2 has the teeth backwards, and the anchor-side conditions are frozen-table constantsDegenerate-candidate results (all scored against the committed tolerances and the five gate seeds' side-A rates; prevalence shapes via a 2-yr Markov cohort proxy on the PSID person-year age structure):
So the anchor cells are not vacuous: they uniquely catch exit-mix inversion (nothing internal sees composition) and reject flat/hump shapes. But every level catch in this table is internal. Wart 2's "the binding power is mostly the concept-bridged ordinal anchors" is backwards for level defects — and it is the level surface finding 1 shows is under-gated. Note also that Required fix E. Correct wart 2; name the T50 age-universe mismatch and the mechanical component of its dominance in the concept_bridge; describe the anchor-side booleans as corroboration, not candidate constraints. Finding 5 (MINOR): redundant anchor conditions presented as independent corroborationWithin the four bridged bands, "peaks at 50-59" is implied by "strictly rises" (the argmax of a rising 4-vector is its last element), and "rank agreement 1.0 over the bridged bands" is implied by "PSID strictly rises" + "T19 strictly rises". Both add zero bite; the prose ("rank agreement 1.0", "the 50-59 peak") reads as extra co-movement evidence. The true Table 19 peak is 60-FRA (0.451/0.457 vs 0.350/0.333 at 50-59) — the "50-59 peak" exists only inside the bridged-band window whose boundary was set by the delta that excludes 60-66. Gating the rise is fine; the redundant conditions should be labeled as implied (or dropped from the gate rule), and the "peak" language qualified. Finding 6 (MINOR): delta numbering and censoring disclosure nits
The k=3 adjudication (no finding beyond the required disclosures)The pre-registration is real: the frozen note proposes "round(mean + k*sd)" with "a PROPOSED k in [2, 3] for the ceremony to fix", ≥ 20 events, and the |ln ratio| statistic, byte-for-byte. Two recomputed facts make top-of-range principled rather than convenient:
Required fix F. Commit that selection rule and the k=2 OC in the artifact (they are currently absent), so the k choice is machine-checkable rather than asserted — and note that fix A's surface decision changes the OC arithmetic (12-cell k=3: 0.9008; hybrid: 0.9689). Half-overlap honesty (wart 3): quantified, and better than claimedPerson block-bootstrap (multinomial over the 41,345 persons, B=1000), fresh-sampling sd vs the across-100-overlapping-halves sd:
The finite-population correction at 50% sampling offsets the half-scale factor, so the across-halves sd approximates full-sample fresh-sampling noise (ratios 0.91–1.11) — the sd does not materially understate here. At holdout (~50%) candidate scale, multiply noise by sqrt(2): the worst margin is still ~3.4 sigma. Wart 3 can be strengthened from "sd understates independent noise" to these measurements (recommend committing the bootstrap check). Mutation table (all caught; no dead zones)
The T_max and min-events mutations flow through the partition reconstruction, not just the constant pins — genuine dead-zone closure. (The label-swap tests are arithmetic restatements of the gated assertions — they catch a rebuilt-with-swapped-labels artifact only because the Verified clean (no action)
Summary of required fixes
Every number above was recomputed from the raw committed inputs (PSID individual file, |
A/B (finding 1, BLOCKER): restore the pre-registered internal families (incidence/recovery/prevalence/conversion) -- the concept deltas are PSID-vs-SSA and never touch a candidate-vs-PSID reproduction cell. Adopt the referee's computed mixed-k remedy: flow hazards @k=3 + prevalence.50-59 STOCK @k=4 (8 gated internal cells, faithful OC 0.9689). Commit the honest uniform-k sensitivity over the pre-registered surface (k=2->21, k=3->12, k=4->2); correct the conversion cells' machine reason to the power demotion. C (finding 2, MAJOR): adopt the ratified 5200+k draw stream VERBATIM (was 4100+k) and carry the fresh_run_artifact_schema (per-draw rate cube [20,8,5], undefined-draw invalidation, dispersion disclosure) into protocol + stub. D (finding 3, MAJOR): pin the candidate-side anchor statistic -- per gate seed, mean-over-K=20 rate basis, MARGIN >= MARGIN_K sigma (not the bare ordinal). Add the degenerate table with the builder-computed epsilon-tilt row that FAILS the pinned margin (margin_sigma ~0.09 << 3). E/F (findings 4-6 + k rule): correct wart 2 (internal = level teeth incl. the occupancy stock; anchors = exit-composition/shape teeth); name the T50 age-universe mismatch + mechanical dominance; label redundant anchor conditions implied and frozen booleans corroboration; fix delta numbering (1-3 self-report, 4 transience, 5 conversion, 7 period pooling); name attrition censoring. Commit the k-selection rule + the k=2 flow OC (0.2901) and the option-(i) uniform-k3 OC (0.9008). Full rebuild via the regenerator; updated always-runnable binding tests; black/ruff clean; tier counts re-refreshed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Master moved (#155 + w2-seam-caregiver + gate2c-candidate1). Only tests/tier_counts.json and tests/README-tiers.md conflicted; resolved by a live full-suite recount of the merged tree: 178/647/782/520/148 = 2,275 (master 2,241 + the m4 gate's 34 tests: 32 artifact derivations + 2 integration_psid reproduction). All other files auto-merged; the m4 gate artifact, builder and tests are untouched by the merge. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fixes round — referee findings 1-6 (round-1 verdict AMEND BEFORE LOCK)All six required fixes applied on A + B (Finding 1, BLOCKER) — restore the pre-registered internal surfaceHunks ( The concept deltas are PSID-vs-SSA and never enter a candidate-vs-PSID reproduction cell, so the round-1
C (Finding 2, MAJOR) — K=20 estimator stream + fresh-run audit contractHunks:
D (Finding 3, MAJOR) — pin the candidate-side anchor statisticHunks: Pinned rule: score the candidate's simulated holdout per gate seed on the mean-over-K=20-draws rate basis, require the invariant to hold with margin ≥ MARGIN_K=3 × the real half-split sd (not the bare ordinal); 4-of-5 conjunction. The
E (Finding 4) — wart 2 teeth + corroboration framingHunks: Wart 2 corrected to the right direction: internal cells = the level teeth (incl. the occupancy stock now); anchor cells uniquely catch exit-composition inversion + flat/hump shape. Named the T50 age-universe mismatch (cessations pooled over all ages vs the PSID 60-67 window) and the mechanical component of its dominance. Finding 5 — redundant anchor conditionsThe "50-59 peak" and rank-agreement are labeled implied by the strict rise ( F (k rule) + Finding 6 — k-selection, delta numbering, attritionHunks: new
Verification
|
Round-2 verification referee: fixes round (05d8292 + merge 45bbabe)Verdict: AMEND BEFORE LOCK — one amendment, metadata-only: the PR body. Every committed object verifies exactly.The committed evidence is lock-clean. Every number in Per-fix verification (everything recomputed with independent implementations)
The deliberate omission (wart 3): adjudicated correctNo bootstrap was committed; wart 3 is strengthened textually — primary evidence stays the non-parametric "holds on all 100 halves", plus "at the 50% finite-population correction the across-halves sd tracks full-sample fresh-sampling noise within ~10%". That is the right call: committing my round-1 B=1000 numbers without a builder recompute would break this ceremony's every-committed-number-recomputes invariant, and the ~10% summary is doubly supported (round-1 measured ratios 0.91–1.11; the f=1/2 FPC identity gives ratio 1 exactly for linear statistics). If the maintainer wants the bootstrap committed, it must enter through the builder — optional, at flip time. Finding-3 adversarial attempt: constructing a two-readings candidateTried three constructions against the pinned rule. (a) Share-denominator ambiguity: a candidate scored on four-band-renormalized shares could pass where five-band shares fail — but the statistic is pinned by reference to the committed Mutation table (hermetic: bytecode disabled, pycache purged between steps; each run 32 bindings)
No dead zones found. One honest caveat: the Suite, hygiene, CI
Flip-time notes (beyond the one amendment)
Summary: artifact, builder, and tests are LOCK-clean — every recomputation exact, every mutation caught, rebuild zero-diff. The single blocking item is the PR body (a designated stub-flip source) still describing the round-1 gate: rewrite it to the committed state, then this gate is ready for the flip step. Verified with independent implementations of the partition, tolerances, OC, k-sensitivity, k-selection sweeps, anchor margins, ε-tilt, schema diff, and the full-suite/tier recounts; no repo state modified. |
|
Verification amendment executed: the PR body now reflects the fixed gate (sourced from the committed artifact's draft_thresholds — mixed-k surface, 5200+k streams, pinned ≥3σ anchor rule, corrected teeth/warts/delta numbering) and the tier conflict from #157 is resolved by live recount (2,321). Per the verification verdict (comment 4950648191: every committed object verified exactly; amendment was metadata-only), ratifying by merge under the standing delegation; the flip PR follows with the artifact-derived gate_m4 block, the in-repo anchor pins, and the legacy-manifest --transition mode. |
…side) (#159) * M4 gate lock flip: ratified thresholds live Add gate_m4 (the M4 DI disability gate) as a NEW LOCKED top-level gate (unlike gate_2b/2c, it had no pre-existing unlocked stub). The full lock ceremony ran on PR #153 (floor runs/m4_gate_floors_v1.json): round-1 AMEND BEFORE LOCK (comment 4950447491, findings 1-6 / fixes A-F) -> fixes (comment 4950571161, 05d8292 + merge 45bbabe) -> verification AMEND metadata-only, the PR body (comment 4950648191) -> body amendment executed (comment 4950660426) -> ratifying squash merge 0fa4a29, under the standing campaign directive of 2026-07-07. gates.yaml gate_m4 (kind anchor_based): the 12-cell surface (8 internal mixed-k -- flow incidence/recovery @k=3 + prevalence.50-59 STOCK @k=4 -- + 4 concept-bridged anchor cells at the pinned >=3 sigma margin), tolerances machine-derived as round(floor mean + k*sd, 3) from the FROZEN floor and capped at ln(1.5), the 24 report-only cells (all tolerance_above_t_max), the K=20 mean-over-draws protocol (5200+k) + fresh_run schema [20,8,5], the k_selection rule (k=2 flow OC 0.2901 / k=3 flow OC 0.9717 / stock k=4), the in-repo sha-pinned di_asr_2023 anchor (reported, never gated), the ceremony_record (four comment ids + ratified-by-merge 0fa4a29 + delegated authority) and the 2026-07-12-m4-gate-lock history entry. ZERO threshold movement vs the ratified floor: the frozen artifact is READ, never rewritten. The five verification flip-time notes are implemented. Locked-hot bindings extend tests/test_gates_derivations.py (21 tests: tolerance derivations, 12/24 partition set-equality, OC 0.9408/0.9689 recompute, mixed-k + k_selection, anchor margins + epsilon-tilt failure, protocol equality, D1 SUBSET master-compare, history). The floor's own gates.yaml guard (test_m4_gate_derivations.py) flips to assert gate_m4 locked. The legacy manifest's contract_revision + gates.yaml entry track the flip via --transition (41 frozen entries byte-identical). Tier manifest artifact 744 -> 765 (CI-equivalent collection, openpyxl present), total 2,422. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Fix gate_m4 weight_definition to the ratified start-wave weight (flip referee finding 1); annotate precedent_oc_band Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
M4 disability gate — floors + anchor evidence base (ceremony step 1)
Status: fixes round complete (referee findings 1–6 dissolved — round-1 comment 4950447491, fixes comment 4950571161, verification comment 4950648191). This body reflects the FIXED gate; the round-1 description it replaced is superseded.
DRAFT — the ceremony controls this PR; gates.yaml UNTOUCHED. The gate_m4 stub below is the flip source.
Gate surface (12 gate-eligible / 24 report-only)
Internal (8, candidate↔PSID reproduction): 6 flow cells @k=3 (incidence.40-49|f, incidence.50-59|{f,m}, recovery.50-59|f, recovery.60-66|{f,m}) + 2 stock cells @k=4 (prevalence.50-59|{f,m}, σ-units 3.225/3.123). Mixed-k rule committed as a pre-registered deviation with the k-selection block (k=2 flow OC 0.2901; option-(i) 0.9008; adopted OC 0.9689). Honest uniform-k sensitivity: k=2→21, k=3→12, k=4→2.
Anchor (4, PSID↔SSA concept bridges): T19 prevalence age-shape comonotone + 50-59 peak |{f,m}; T50 retirement-dominant conversion exit |{f,m} (death-censoring bridge; age-universe mismatch named). Candidate-side statistic PINNED: per gate seed, mean-over-K=20 rates, margin ≥ 3σ (bare ordinal insufficient — the ε-tilt degenerate fails at 0.0917/0.0912 ≪ 3; committed in the degenerate table).
Protocol
Ratified mean-over-K=20-draws estimator, streams
5200+kVERBATIM (tranche-2a amendment 1); fresh_run_artifact_schema [20,8,5] with per-draw rates, undefined-draw invalidation, and dispersion disclosure — in protocol and stub.Report-only (24)
Machine reasons throughout: tolerance_above_t_max (incl. both conversion levels), no_pooled_year_series (T49 trend), denominator delta (6.B5.1 conversion level), half_split_fragile (conversion sex-ordering). Concept deltas 1-3/4/5/7 numbering per the frozen m4 module artifact; attrition censoring named beside death censoring.
Teeth (corrected wart 2)
Internal cells carry ALL level teeth (including the stock via prevalence.50-59@k=4); anchor cells carry exit-composition/shape teeth (the RTW-dominant degenerate is caught ONLY by them). Anchor booleans on the frozen tables are corroboration, not gate content.
OC
Faithful-candidate p_seed 0.9408 / p_gate(≥4/5) 0.9689 (marginally above the 2a/2b/2c band top 0.9685 — the band constraint is a floor; round-1's own computed remedy endorsed this OC).
gate_m4 stub (flip source)
Full machine-derivable thresholds:
draft_thresholdsin the committed artifact (the flip reads the artifact, not this prose).Evidence: floors 100-seed person-disjoint; anchors re-derived from in-repo tables; rebuild deterministic; 34 binding tests incl. mutation coverage (9/9 caught) and label-swap catches.