Skip to content

Gate-2 candidate 9 (run 1): FAIL 0/5 — observed undatable-marriage count init + unsmoothed low-parity fertility - #95

Merged
MaxGhenis merged 1 commit into
masterfrom
gate2-candidate9
Jul 8, 2026
Merged

Gate-2 candidate 9 (run 1): FAIL 0/5 — observed undatable-marriage count init + unsmoothed low-parity fertility#95
MaxGhenis merged 1 commit into
masterfrom
gate2-candidate9

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Verdict: FAIL — 0/5 seeds pass

Pre-registered one-shot run of gate-2 candidate 9, frozen spec issue #42 comment 4914111252. Published regardless of verdict; not merged.

Candidate 8's spec (scripts/run_gate2_candidate8.py, #93) with exactly two deltas registered off the gate-2 forensics (#94):

  1. Observed undatable-marriage lifetime-count initial state (delta 1, RNG-neutral). Each holdout person's simulated lifetime-marriage count initializes at their observed residual R = n_marriages − datable in-exposure first_marriage/remarriage events — the forensics Q1 residual (undatable start/dissolution, out-of-window/underage, separation-origin, MH-count-excess) at per-person resolution — then accumulates the simulated datable transitions. Hazards untouched; no draw perturbed.
  2. Unsmoothed low-parity peak fertility (delta 2). Parities 0→1 and 1→2 use the exact empirical single-year rate (no kernel) at ages 22–38 where cell exposure ≥ 200 weighted person-years; kernel elsewhere; higher parities unchanged.

Seed conjunction

seed gated pass seed_pass
0 44/46 False
1 45/46 False
2 43/46 False
3 45/46 False
4 45/46 False

Gate rule: all 46 gated cells per seed AND ≥ 4 of 5 seeds. Result: 0/5 seeds → gate_2_pass = False.

Per-block pass counts (per seed)

block cells s0 s1 s2 s3 s4
divorce 4 4 4 4 4 4
fertility 11 10 11 10 11 11
first_marriage 6 6 6 6 6 6
nuptiality_cohort 5 5 5 5 5 5
occupancy 6 6 6 4 6 5
remarriage 4 4 4 4 4 4
stock_occupancy 6 5 5 6 6 6
widowhood 4 4 4 4 3 4

Every failing gated cell (score / tolerance / seed)

seed cell score tol c8 score c8 pass
0 asfr.20-24 0.1086 0.1010 0.0956 True
0 `share_divorced.45-54 female` 0.2123 0.2120 0.2123
1 `share_widowed.75+ female` 0.2059 0.1850 0.2059
2 completed_fertility.c1970s 0.1983 0.1710 0.1863 False
2 `mean_lifetime_marriages female` 0.0609 0.0510 0.0015
2 `mean_lifetime_marriages male` 0.0510 0.0470 0.0244
3 `widowhood.75+ female` 0.3915 0.3730 0.3915
4 `mean_lifetime_marriages female` 0.0565 0.0510 0.0076

Delta-1 reconciliation (verified before the one-shot)

  • Per-person identity R + datable == n_marriages: max abs residual 0.0 (remainder 0.0).
  • R aggregated over the ever-married denominator == forensics reference residual == five-bucket sum: max abs remainder 2.91e-16 across all 5 train seeds × 2 sexes.
  • Residual non-negative (min 0.0), integer-valued; 403 persons with undefined n_marriages carry R = 0.
  • Matches the committed forensics per-seed buckets bit-for-bit (runs/gate2_forensics_v1.json).

Byte-identity to candidate 8

Delta 1 adds no draw and delta 2 moves only the fertility threshold (parity-independent draw sizes), so the marriage draw stream is identical to candidate 8. The 165 non-fertility, non-count gated cells (33 cells × 5 seeds) match candidate 8 to 0.0 deviation; only the fertility cells (delta 2) and the two lifetime-marriage counts (delta 1) move.

Movement vs candidate 8 (n_seeds_pass)

cell c8 c9 note
`mean_lifetime_marriages male` 3/5 4/5
`mean_lifetime_marriages female` 4/5 3/5
completed_fertility.c1970s 4/5 4/5 delta 2 did not clear it (seed 2, worse score)
asfr.15-19 5/5 5/5 unaffected
asfr.20-24 5/5 4/5 delta 2 broke it on seed 0
`share_divorced.45-54 female` 4/5 4/5
`share_widowed.75+ female` 4/5 4/5
`widowhood.75+ female` 4/5 4/5

Reading. Delta 1 raises mean_lifetime_marriages|male (3/5→4/5, curing seeds 3–4) but overshoots where the hazards already over-produce in-exposure marriages (the forensics warning), dragging mean_lifetime_marriages|female down (4/5→3/5, failing seeds 2 and 4). Delta 2 does not clear completed_fertility.c1970s and breaks asfr.20-24 on seed 0. The three byte-identical elderly-widow / divorce-stock cells the registered modal named (share_widowed.75+|female, widowhood.75+|female, share_divorced.45-54|female) hold exactly where candidate 8 failed them — no delta can touch them — and are the structural blockers on seeds 0/1/3.

Discipline

  • Bit-exact precheck: reproduced the committed floor (ref dev 0.0, rate_a dev 0.0, holdout sha256 all match).
  • One outer run; per-seed cache outside runs/; published regardless.
  • Artifact runs/gate2_hazard_v9.json (registration pointer, both deltas, reconciliation record, forecast pointer).
  • Tests tests/test_gate2_candidate9.py (consistency + delta-1 reconciliation + delta-2 footprint + byte-identity to c8 + live seed-0 pin + structural delta checks).
  • black -l 79 + ruff clean. c1–c8 + forensics tests stay green; full suite 972 passed, 41 skipped.

Pre-registered forecast was P(pass) ≈ 0.40–0.50 with share_widowed.75+|female as the modal blocker; the actual decider was broader — the byte-identical-to-c8 marital cells plus delta 1's overshoot held the gate below 4 passing seeds. 🤖 Generated with Claude Code

…unt initial state + unsmoothed low-parity fertility (#42 comment 4914111252)

Candidate 8's spec (run_gate2_candidate8.py, #93) with EXACTLY two frozen
deltas registered off the gate-2 forensics (#94):

- DELTA 1 (RNG-neutral count add): each holdout person's simulated lifetime-
  marriage count initializes at their OBSERVED residual R = n_marriages minus
  the datable in-exposure first_marriage/remarriage transition-event count --
  the forensics Q1 residual (undatable start/dissolution, out-of-window/under-
  age, separation-origin and MH-count-excess marriages) at per-person
  resolution -- then accumulates the simulated datable transitions. Verified
  BEFORE the one-shot: R + datable == n_marriages per person (remainder 0.0),
  and R aggregated over the ever-married denominator equals the forensics
  reference residual and its five buckets (max remainder 2.9e-16); residual
  non-negative, integer-valued; hazards untouched.
- DELTA 2 (fertility threshold): parities 0->1 and 1->2 use the exact
  empirical single-year rate (no kernel) at ages 22-38 where cell exposure
  >= 200 weighted person-years, kernel elsewhere; higher parities unchanged.

Discipline as c1-c8: bit-exact precheck reproduced the committed floor
(ref/rate_a dev 0.0, holdout sha256 all match); delta-1 reconciliation hard-
gated before scoring; ONE outer run; published regardless. Because delta 1
adds no draw and delta 2 moves only the fertility threshold (parity-independent
draw sizes), the marriage draw stream is byte-identical to candidate 8: the
33 non-fertility, non-count gated cells match candidate 8 to 0.0 across all
five seeds (identity_vs_candidate8).

Outcome (FAIL 0/5, no seed clears all 46):
- seed 0 (44/46): delta 2 broke asfr.20-24 (0.096->0.109 > 0.101, 5/5->4/5),
  and the byte-identical share_divorced.45-54|female held (0.2123 > 0.212).
- seed 1 (45/46): delta 1 cured mean_lifetime_marriages|female, leaving only
  the byte-identical share_widowed.75+|female (0.2059 > 0.185).
- seed 2 (43/46): delta 1 OVERSHOT both counts (male 0.024->0.051 > 0.047,
  female 0.001->0.061 > 0.051) -- the in-exposure over-production the
  forensics flagged -- and delta 2 left completed_fertility.c1970s failing
  (0.186->0.198 > 0.171).
- seed 3 (45/46): delta 1 cured mean_lifetime_marriages|male, leaving only
  the byte-identical widowhood.75+|female (0.3915 > 0.373).
- seed 4 (45/46): delta 1 overshot mean_lifetime_marriages|female
  (0.008->0.057 > 0.051).

Movement vs candidate 8 (n_seeds_pass): mean_lifetime_marriages|male 3->4,
mean_lifetime_marriages|female 4->3, completed_fertility.c1970s 4->4 (worse
score), asfr.20-24 5->4; share_widowed.75+|female, share_divorced.45-54|female
and widowhood.75+|female unchanged 4->4 (byte-identical). Net: delta 1 helps
where the boundary under-produces and hurts where the hazards over-produce, and
the three byte-identical elderly-widow/divorce-stock cells no delta can touch
remain the structural blockers on seeds 0/1/3.

Artifact runs/gate2_hazard_v9.json (registration pointer, both deltas,
reconciliation record, forecast pointer). Tests tests/test_gate2_candidate9.py
(consistency + delta-1 reconciliation + delta-2 footprint + byte-identity to
c8 + live seed-0 pin). c1-c8 + forensics stay green; full suite 972 passed,
41 skipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
social-security-model Ready Ready Preview, Comment Jul 8, 2026 12:22pm

Request Review

@MaxGhenis
MaxGhenis merged commit 6b404e8 into master Jul 8, 2026
7 checks passed
@MaxGhenis
MaxGhenis deleted the gate2-candidate9 branch July 8, 2026 12:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant