Skip to content

Flip ratified gate-2 amendment 1 live: mean-over-draws estimator (prospective only) - #97

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

Flip ratified gate-2 amendment 1 live: mean-over-draws estimator (prospective only)#97
MaxGhenis merged 1 commit into
masterfrom
gate2-amendment-flip

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Flip ratified gate-2 amendment 1 live: mean-over-draws estimator

Authorized follow-up flip for gate-2 amendment 1, ratified by merge of #96
(merge commit fec27eb51) after the full ceremony: adversarial round AMEND
BEFORE RATIFYING
(comment 4915412987)
-> fixes 5b70840 (comment 4916048161)
-> verification RATIFY AS-IS (comment 4916419901).
Mirrors the gate-1 amendment-2 flip (#69) and the gate-2 lock flip (#81).

The estimator moves per-cell scoring from one frozen simulation draw to
the mean over K=20 pre-registered draws (numpy default_rng(5200 + k),
k=0..19) of the cell rate, scored |ln(rbar_candidate,s / rate_a,s)|.
Tolerances, the power cap, the 46-cell membership, and the 4-of-5-seed
conjunction are byte-identical to origin/master
— only the candidate
statistic changes. A structured diff of the thresholds subtree confirms the
only changes are the five prose fields below; all 46 tolerances are unchanged.

The five locked-text edits (flip_on_ratification.flip_edits, applied exactly)

edit locked path old -> new
candidate protocol.candidate "one replicate, simulation seed s" -> K=20 draws at default_rng(5200 + k), 20-draw mean cell rate; records the committed 4200 + s registration history and the new 5200 + k convention explicitly (registration_divergence resolved)
statistic statistic r_candidate,s -> rbar_candidate,s (mean over K=20 draws of the cell rate)
pass_rule protocol.pass_rule r_candidate,s -> rbar_candidate,s; mean of the cell RATE across draws, then |ln(rbar / rate_a)|
faithful_candidate_oc protocol.faithful_candidate_oc basis note added: the draw-noise-free half-normal basis now MATCHES the estimator; p_seed_pass 0.9404 / p_gate_pass_4_of_5 0.9685 stand unchanged (unachievable under the single-draw estimator, finding 1)
draft_label protocol.pass_rule stray "DRAFT seed-level conjunction" -> "Seed-level conjunction"

Also carries the ratified fresh_run_artifact_schema (candidate-10 run
contract: per_draw_per_cell_rates shape [20, 46, 5]; undefined-draw
INVALIDATES the run; report-only per-draw dispersion) into the live
protocol, and removes amendment_proposed (preserved in git history at the
ratification merge fec27eb51).

amendment_history entry

gate_2 gets its first entry: id: 2026-07-08-mean-over-draws-estimator,
flipped_live: this pull request, with all four ceremony pointers
(review 4915412987 / fixes 5b70840 + comment 4916048161 / verification
4916419901 / ratifying merge PR 96 fec27eb51). PROSPECTIVE ONLY
(no_self_rescue): no committed run's verdict changes; candidates 1-9 stand
FAIL. The single-draw estimator contradicted the ratified OC basis; K=20
restores ~0.939 / 0.967 ~= the ratified 0.9404 / 0.9685. Evidence chain: #94
(chronic-cell forensics) and the candidate 1-9 ladder (issue #42).

Locked-hot test rewiring (tests/test_gates_derivations.py)

The gate-1 amendment-2 lesson: ratified bindings must stay hot, not go
dormant with the proposal object. The gate-2 amendment block keyed off
amendment_proposed and would go silently dormant on removal. This PR:

  • Adds a "Gate-2 amendment 1 RATIFIED bindings" section binding the
    load-bearing guarantees to their LIVE post-flip locations: the K=20 / 5200+k
    convention, the artifact schema, the OC basis, the history entry with all
    four ceremony pointers, and prospective-no-verdict-change vs the nine
    committed artifacts (runs/gate2_hazard_v1..v9.json, all gate_2_pass
    false).
  • Keeps the proposal-object tests dormant-safe for future proposals:
    _gate2_amendment() now guards on proposal_number == 1 (the gate-1
    _amendment_2 pattern), so a future gate-2 proposal (number != 1) never
    reactivates these proposal-1-specific bindings.
  • Updates the two tests that asserted the old locked text
    (flip_edits' locked_text_now presence, "one replicate, simulation
    seed s") — the live-text verification now asserts the new amended text
    in the ratified section.

Verification

  • black -l 79 clean; ruff clean.
  • Full suite green (serial, repo .venv).

🤖 Generated with Claude Code

…spective only)

Moves gate-2's ratified amendment 1 from the amendment_proposed object into
the locked protocol. Per-cell scoring goes from ONE frozen simulation draw to
the MEAN over K=20 pre-registered draws (numpy default_rng(5200 + k),
k=0..19) of the cell RATE, scored |ln(rbar_candidate,s / rate_a,s)| at
BYTE-IDENTICAL tolerances and the same 46-cell, 4-of-5-seed conjunction. Only
the candidate statistic changes; the error budget does not (all 46
tolerances, the power cap, governance, scope, and external anchors are
byte-identical to origin/master).

Ceremony (mirrors the gate-1 amendment-2 flip #69 and the gate-2 lock flip
#81): adversarial round AMEND (PR 96 comment 4915412987) -> fixes 5b70840
(comment 4916048161) -> verification RATIFY AS-IS (comment 4916419901) ->
ratified by merge of PR 96 (merge commit fec27eb) under the maintainer's
standing campaign directive of 2026-07-07, full ceremony.

The five locked-text edits (flip_on_ratification.flip_edits, applied exactly):
- protocol.candidate: one frozen replicate -> K=20 draws at
  default_rng(5200 + k); records the committed 4200+s registration history
  and the new 5200+k convention explicitly (registration_divergence resolved).
- statistic: r_candidate,s -> rbar_candidate,s (the mean over K=20 draws of
  the cell rate).
- protocol.pass_rule: r_candidate,s -> rbar_candidate,s (mean of the cell
  RATE across draws, then |ln(rbar / rate_a)|).
- protocol.faithful_candidate_oc: basis note added -- the draw-noise-free
  half-normal basis now MATCHES the estimator; p_seed_pass 0.9404 /
  p_gate_pass_4_of_5 0.9685 stand unchanged (unachievable under the
  single-draw estimator, finding 1).
- protocol.pass_rule: the stray "DRAFT" label removed.

Also carries the ratified fresh_run_artifact_schema (the candidate-10 run
contract: per_draw_per_cell_rates [20,46,5]; undefined-draw INVALIDATES the
run; report-only per-draw dispersion) into the live protocol, adds gate_2's
first amendment_history entry (id 2026-07-08-mean-over-draws-estimator,
flipped_live: this pull request), and removes amendment_proposed (preserved
in git history at the ratification merge fec27eb).

PROSPECTIVE ONLY (no_self_rescue): no committed run's verdict changes;
candidates 1-9 stand FAIL. The single-draw estimator contradicted the locked
block's own ratified OC basis; K=20 mean-over-draws restores ~0.939 / 0.967
~= the ratified 0.9404 / 0.9685.

Tests rewired locked-hot (the gate-1 amendment-2 lesson): the load-bearing
guarantees -- the K=20 / 5200+k convention, the artifact schema, the OC
basis, the history entry with all four ceremony pointers, and
prospective-no-verdict-change vs the nine committed artifacts -- rebind to
their LIVE post-flip locations in a new "Gate-2 amendment 1 RATIFIED
bindings" section. Proposal-object tests stay dormant-safe (guarded on
proposal_number == 1, so a future proposal != 1 never reactivates them); the
two tests that asserted the OLD locked text are updated to the new live text.

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 4:34pm

Request Review

@MaxGhenis
MaxGhenis merged commit f6b571a into master Jul 8, 2026
7 checks passed
MaxGhenis added a commit that referenced this pull request Jul 8, 2026
…r the amended mean-over-20-draws estimator; observed-residual count + age-band remarriage deltas; designed count-cell cancellation asymmetric (male net +0.025 ln 4/5, female net +0.044 ln 3/5), share_widowed.75+|female holds the gate 4/5 (#42 comment 4917059482) (#98)

The first fresh gate-2 registration scored under the amended
mean-over-K=20-draws estimator (gates.yaml gate_2 amendment 1, ratified
2026-07-08, flipped live #97). Frozen spec: issue #42 comment 4917059482.
One-shot; published REGARDLESS of verdict.

VERDICT: gate_2_pass=False, 1/5 seeds pass (only seed 1). Runtime 168s
(K=20 draws x 5 seeds); no undefined draw.

Spec = candidate 8 + two deltas, under the amended estimator:
* Delta 1 (candidate 9's, unchanged): observed undatable-marriage
  lifetime-count initial state R = n_marriages - datable in-exposure
  marriage events (the forensics Q1 residual), RNG-neutral;
  observed_residual_counts / _delta1_reconciliation imported from
  candidate 9. Reconciled to remainder 0.0 train-side before the one-shot
  (per-person identity max 0.0; aggregate max remainder 2.9e-16).
* Delta 2 (new): age-band-conditioned remarriage by ego age band
  (18-34/35-49/50+) x years-since-dissolution x origin x sex, same add-one
  smoothing (wbar_diss), candidate 8's order-bit stratum and
  aggregate-preservation rescale REMOVED. Fertility = candidate 8's kernel,
  unchanged.
* Precheck bit-exact (ref-moment dev 0.0, rate_a dev 0.0, holdout sha256
  all match).

Amended estimator + fresh_run_artifact_schema: rbar_candidate,s = mean over
K=20 draws (default_rng(5200+k), k=0..19) of the cell rate; score
|ln(rbar/rate_a,s)| scored once. The artifact commits the [20,46,5]
per-draw per-cell rate cube (rbar recomputable cell-by-cell), the
undefined-draw check (run_invalidated=False, 0 undefined), and report-only
per-draw dispersion (per-cell sd + worst-draw |ln|).

Failing gated cells (rbar-score/tol):
* share_widowed.75+|female seeds 0,2,3,4 (0.231/0.196/0.245/0.192, tol
  0.185) -- an elderly-widow-stock LEVEL cell neither delta addresses; it
  independently holds the gate on 4/5 seeds (decider: broader than the
  registered modal + delta-targeted cells).
* mean_lifetime_marriages|female seeds 2,4 (0.064/0.067, tol 0.051).
* mean_lifetime_marriages|male seed 2 (0.052, tol 0.047).
* completed_fertility.c1970s seed 2 (0.182, tol 0.171).
All 4 gated remarriage cells pass 5/5 (the flagged thin-50+ risk did not
bite; only one <20-py cell, age18-34|ysd2|widowed|male, no gated failure).

Count-cell tilt vs design (residual +0.046, over-production -0.046, net ~0)
was ASYMMETRIC (designed_cancellation_succeeded=False): male net +0.025 ln
(4/5, delta 2 removed ~half the over-production) but female net +0.044 ln
(3/5, delta 2 removed almost none). The over-production age conditioning
targets is male-heavier; delta 1's residual is present for both sexes, so
on the low-rate_a seeds (2,4) where c8 was near-perfect the female residual
pushes the cell out -- the registration's flagged modal failure.

Per-draw dispersion (report-only): 33 cell-seed instances where the worst
single draw would clip the tolerance but the 20-draw mean passes -- the
draw noise the amended estimator averages out, vindicating amendment 1 on
this evidence.

Adds scripts/run_gate2_candidate10.py, runs/gate2_hazard_v10.json,
tests/test_gate2_candidate10.py (consistency + schema conformance + rbar
recompute from per-draw rates + live seed-0 single-draw pin + faithful-copy
attestation). Updates test_gates_derivations.py's prospective-amendment
no_self_rescue check to include candidate 10 (10 committed gate-2 runs, all
still gate_2_pass false). Pre-registered forecast was P(pass) 0.65-0.75.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Jul 10, 2026
…ro threshold movement) (#112)

Moves gate-2's ratified amendment 2 (the tranche split) from the
amendment_proposed object into the locked block. STRUCTURAL, zero threshold
movement: the locked gate_2.thresholds scored surface is byte-identical to
origin/master -- all 46 gated cells, every tolerance and derivation, the
option-(a) protocol, the ln(1.5) power cap, and the 4-of-5 seed conjunction
unchanged (verified at full-subtree granularity). Only naming, scope prose,
the certification map, the unlocked sibling stubs, one governance rule, and
the history changed.

Ceremony (mirrors flips #69, #81, #97): adversarial round AMEND BEFORE
RATIFYING (PR 111 comment 4930448912) -> fixes 81ea41e (comment 4930615774)
-> verification RATIFY AS-IS (comment 4930753295) -> ratified by merge of PR
111 (merge commit 8a4a240) under the maintainer's standing campaign
directive of 2026-07-07, full ceremony.

The six locked-text edits (flip_on_ratification.flip_edits, applied exactly):
- description: first clause re-scoped so tranche 2a claims only mh85_23 +
  cah85_23 (+ ind2023er deaths); household-composition/MX23REL -> gate_2b.
- description_formula_clause: the "computes exactly" statutory-formula oracle
  clause (#78/#80) RETAINED verbatim (fix C1).
- holdout_basis: [mh85_23, cah85_23, MX23REL] -> [mh85_23, cah85_23]; MX23REL
  -> gate_2b.holdout_basis.
- scope_note: provision_class_coverage prose gains explicit tranche ids
  (2a/2b/2c); the certification_scope map is promoted into the locked scope.
- scope_note_draft_label: "This DRAFT tranche covers..." relabeled to
  "tranche 2a_marital_fertility covers...".
- scope_note_holdout_xref: the caregiver "named in holdout_basis but not
  scored in this draft" cross-reference re-pointed to the unlocked gate_2b.

The five flip_additions: tranche_id 2a_marital_fertility inside thresholds;
gate_2b (relationship_household) and gate_2c (marriage_earnings_joint)
UNLOCKED sibling tranches (locked: false, no floor, no scored run, each with
its own future lock ceremony naming the verification round); the
certification_scope map promoted into the locked scope; and the standing
governance rule description_claims_exactly_the_scored_surface promoted into
gate_2.governance.amendment_rules (attributed to review #106 finding 4 / PR
#111 finding 8), binding 2b/2c/gate_3. gate_2.name ("family and benefit
outputs") retained per its C3 disposition (the tranche container).

Also applies the two verification-round flip-time nits (comment 4930753295):
the 2b bullet-3 legend quote spacing normalized to "poverty/household" to
match the derivation_basis quote; and COLA qualified in the A2 own-record
example list (its levels ride the Phase-B claiming/mortality components -- #74
marks CA, M, DI; #78 covers CA, M/DI uncertified -- so it is not a pure
gate-1 + oracle surface, though still outside the 2a/2b/2c tranches).

Adds gate_2's second amendment_history entry (id 2026-07-09-tranche-split;
all four ceremony pointers; content: ZERO THRESHOLD MOVEMENT, verdicts v1-v15
FAIL and v16 PASS stand as tranche-2a verdicts, citing #106 finding 4 and the
candidate-16 pass #109), and removes amendment_proposed (preserved in git
history at the ratification merge 8a4a240).

PROSPECTIVE / STRUCTURAL ONLY (no_self_rescue): a naming + certification-scope
amendment has no verdict to rescue and re-scores nothing; candidate 16 stays
PASS (4/5), candidates 1-15 stay FAIL, as tranche-2a verdicts.

Tests rewired locked-hot: the re-scoped description/holdout_basis, tranche_id,
the promoted certification_scope map (per-class requires_tranche + coverage
tokens bound EXACTLY, both nits asserted), the gate_2b/gate_2c stubs, the
promoted standing rule, and the second history entry with all four pointers
rebind at their LIVE post-flip locations in a new "Gate-2 amendment 2
RATIFIED bindings" section. The proposal-object tests stay dormant-safe
(guarded on proposal_number == 2, so they skip once amendment_proposed is
gone), and the D1 merge-safe guard naturally skips post-flip. Full suite:
1319 passed, 68 skipped, 0 failed (-n 8); black -l 79 + ruff clean.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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