Skip to content

Gate-1 amendment proposal: decision-relevant recalibration - #57

Merged
MaxGhenis merged 2 commits into
masterfrom
gate1-amendment-proposal
Jul 6, 2026
Merged

Gate-1 amendment proposal: decision-relevant recalibration#57
MaxGhenis merged 2 commits into
masterfrom
gate1-amendment-proposal

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

What this is: an amendment OBJECT, not a gate change

This PR is the gate-1 amendment proposal under the locked pre-registration contract. It proposes changes and changes nothing. The locked gate_1.thresholds block is untouched — locked: true stays and every locked value is byte-identical (git diff on gates.yaml is a pure addition, zero deletions). No model reads the new amendment_proposed subsection; the harness scores only the locked block.

The process, explicitly:

  1. This proposal is inert. It decides nothing on merge-as-is.
  2. Adopting it requires a fresh adversarial referee round run against this proposal, per the contract's amendment rule ("locked thresholds change only through a public amendment noted in this file's history" + a fresh referee round).
  3. Ratification = maintainer merge of the follow-up that flips the proposed lines live — exactly as PR Lock gate-1 thresholds (ratification required) #33/Flip gate-1 to locked following ratification #39 did for the original lock.
  4. Until that ratifying merge, nothing changes.

Do not merge this as a gate change. It is the object a referee round deliberates over.

Evidence chain (all reported-not-gated; none touched a gate)

The new committed anchor

runs/pia_proxy_floor_9822.json (built by scripts/build_pia_proxy_floor.py): the real-vs-real PIA-proxy distribution floor at deployment scale. Per seed s in 0–4, the ctx20 construction (40% person draw at seed 1000+s, halved person-disjointly at seed s) on the full locked filtered panel (22,300 persons — not a train split), both disjoint halves pushed through the pinned PIA-proxy functional imported verbatim from the merged scripts/build_downstream_relevance.py (single source of truth: wage-base cap, NAWI-to-2022 indexing, top-min(10,n) mean over observed positives, 2022 415(a)/415(g) PIA; zero-positive persons at 0; anchor-period weights).

Headline floor (mean ± sd across seeds), pe-us pinned at bf71be3b:

Statistic Real-vs-real floor
|mean % gap| 1.86 ± 0.76
|median % gap| 1.61 ± 0.99
weighted KS 0.0288 ± 0.0078
Q0 (zero-anchor) mean % gap pooled 2.66% (per-seed 5.25 ± 4.53)

The floor is real-vs-real, so no candidate is generated and the oracle import path does not pull populace.fit — the reproduction test (tests/test_pia_proxy_floor.py, seed-0, pinned to float precision) needs only PSID and runs live in the repo .venv; it also asserts populace.fit never enters sys.modules.

The two proposed changes

Change 1 — runs-view c2st_auc_max: gated → reported-not-gated. The window-3 runs-view c2st is the single threshold candidate 7 clips (3/5 seeds), yet #56 shows that residual is benefit-immaterial (KS inside the noise floor; central gaps ≤1.9%) and #54 attributes it to a window-3 texture coordinate that does not reach benefits. The runs view was already annotated in the lock as a supporting check (a chained one-period clone straddles it); the pre-registered guard for chained-model persistence understatement is the battery's autocorrelation and spell tolerances, which stay gated and fail such clones 5/5. The pairs-view c2st stays gated.

Change 2 — a NEW gated benefit_space block on the candidate PIA-proxy panels per seed:

  • abs(mean % gap) ≤ 5, abs(median % gap) ≤ 5 — a priori, per seed
  • decile % gap ≤ 5 for d3–d9 — a priori, per seed. d1 and d2 reported-not-gated: both are denominator-fragile (bottom PIA-proxy ~$290–500/mo, so ~$80–145 absolute gaps read as huge percents). The new anchor shows the real-vs-real floor itself clips ±5% on 5/5 seeds at d1 and 3/5 at d2 (decile_seeds_clipping_5pct) — gating either would reject reality. Downstream relevance: what the classifier residual costs in benefit space #56 already flagged d1; the new anchor extends the same finding to d2.
  • weighted KS ≤ committed anchor mean + 4×sd = 0.0599 — the one floor-derived band, with a machine-checkable derivations entry (mirrors the locked geometry derivations).
  • abs(Q0 zero-anchor-subgroup mean % gap) ≤ 5, scored on the pooled across-seed magnitude (the per-seed Q0 floor is noisy — ~900 persons/side, reaching ~12.8% on one seed — so the across-seed mean is the decision-relevant level; it cancels that noise, real is unbiased at |pooled| 2.66%).

The ±5% bands cite the paper's pre-stated ±5%-of-SSA-statistics success criterion ("AIME distribution for retired workers … within 5 percent on key percentiles", Phase-1 acceptance table in docs/operationalizing-longitudinal-construction.md and docs/evaluation-and-model-selection.md; the paper carries the same standard) as their a priori source. The PIA-proxy is a monotone statute-shaped transform of the AIME-proxy, so its gaps map onto that criterion.

Rationale — recalibration toward decision-relevance, NOT relaxation. Candidate 7 measured +9.3% on Q0, so this block adds strictness exactly where the evidence says the residual bites. Net strictness where it matters increases: change 1 removes one benefit-immaterial texture gate, change 2 adds a benefit-material subgroup gate.

Pass rule. Seed-level conjunction folded into the existing geometry conjunction: a seed passes benefit_space iff every per-seed gated metric holds at that seed, and the block passes iff ≥4/5 seeds pass the per-seed metrics and the pooled Q0 gate holds.

Candidate 7 would still fail

Under this proposed block, candidate 7 FAILS: it passes the seed-level central/decile/KS gates on all five seeds (its benefit-space central gaps and KS are inside the noise floor), but its pooled Q0 gap is +9.30% > 5. Adopting the amendment does not retroactively pass the ninth run.

Discriminator check on committed evidence (runs/pia_proxy_floor_9822.json vs runs/downstream_relevance_c7_v1.json): real-vs-real PASSES the block (seed-level 5/5; pooled |Q0| 2.66% ≤ 5) and candidate 7 FAILS it (pooled |Q0| 9.30% > 5). A proposed gate that passes reality and fails the ninth run is a valid discriminator — a fresh referee round must confirm this.

Reproducibility (the proposal's own numbers must hold)

  • tests/test_gates_derivations.py binds the proposed block: the KS band equals the committed anchor mean + stated k×sd; every proposed gated metric carries a derivation or an a-priori-source citation; the anchor's pooled stats recompute from its stored per-seed values; and the reported-not-gated d1/d2 partition matches the anchor's per-decile fragility.
  • tests/test_pia_proxy_floor.py: always-runnable internal-consistency (recompute-from-per-seed, schema, headline KS block) plus the seed-0 reproduction pin (skipif PSID absent; no importorskip populace.fit).
  • ruff + black -l 79 clean. Full pytest green in the repo .venv (275 passed, 9 skipped — the 9 skips are pre-existing populace.fit gate reproductions, unchanged by this PR).

Run the anchor:

export POPULACE_DYNAMICS_PE_US_DIR=$HOME/PolicyEngine/policyengine-us-main
.venv/bin/python scripts/build_pia_proxy_floor.py

🤖 Generated with Claude Code

@vercel

vercel Bot commented Jul 6, 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 6, 2026 10:21pm

Request Review

Amendment OBJECT under the locked pre-registration contract. It PROPOSES
changes and changes NOTHING: the locked gate_1.thresholds block is
untouched (locked: true stays; every locked value byte-identical), no
model reads the new subsection, and nothing takes effect until a fresh
adversarial referee round runs on this proposal and the maintainer
ratifies by merging.

New committed anchor (real-vs-real PIA-proxy floor at deployment scale):
- runs/pia_proxy_floor_9822.json + scripts/build_pia_proxy_floor.py: the
  ctx20 construction (40% draw seed 1000+s, halved at seed s) on the FULL
  locked filtered panel, both disjoint halves pushed through the pinned
  PIA-proxy functional imported verbatim from build_downstream_relevance
  (single source of truth). Records per seed and mean/sd: |mean % gap|
  1.86+/-0.76, |median % gap| 1.61+/-0.99, weighted KS 0.0288+/-0.0078,
  and the Q0 (zero-anchor subgroup) gap (pooled |Q0| 2.66%; per-seed
  5.25+/-4.53). The floor is real-vs-real, so the oracle import path does
  NOT pull populace.fit; the reproduction test needs only PSID and runs
  live (seed 0, pinned to float precision).

gates.yaml gate_1.amendment_proposed (pure addition, zero deletions):
- change 1: runs-view c2st_auc_max moves gated -> reported-not-gated
  (PR #56: candidate-7 KS inside the real-real noise floor, central
  benefit gaps <=1.9%; the window-3 residual is benefit-immaterial
  texture per PR #54).
- change 2: a NEW gated benefit_space block on the candidate PIA-proxy
  panels: |mean %|<=5, |median %|<=5, deciles d3-d9 <=5 (d1 AND d2
  reported-not-gated -- the new anchor shows their real-real floor clips
  5% on 5/5 and 3/5 seeds), weighted KS <= committed anchor mean + 4*sd
  (machine-checkable derivation = 0.0599), and pooled |Q0 mean %|<=5. The
  5% bands cite the paper's pre-stated +/-5%-of-SSA-statistics success
  criterion (docs Phase-1 acceptance table); only KS is floor-derived.
  Candidate 7 measured +9.3% on Q0, so the amendment ADDS strictness
  where the evidence says it bites -- recalibration toward
  decision-relevance, not relaxation. Discriminator check on committed
  evidence: real-vs-real PASSES the block, candidate 7 FAILS it on Q0.

tests/test_gates_derivations.py: binds the proposed block -- the KS band
equals anchor mean + stated k*sd, every proposed gated metric carries a
derivation or an a-priori-source citation, the anchor's stats recompute
from its stored per-seed values, and the reported-not-gated d1/d2
partition matches the anchor's per-decile fragility.

ruff + black -l 79 clean; full pytest green in the repo .venv
(275 passed, 9 skipped -- the skips are pre-existing populace.fit gate
reproductions). Evidence chain: PR #54, PR #55, PR #56, issue #42.

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

Copy link
Copy Markdown
Contributor Author

Verdict: AMEND BEFORE RATIFYING. The quantitative design checks out end to end — anchor reproduces bit-identically, every stated derivation holds, the block separates reality from two structurally different broken candidates, the proposal is purely additive and inert. Two things must change in the amendment object before a referee round ratifies it: the a-priori citation is misattributed (finding 1), and change 1's retroactive footprint is undisclosed (finding 2). Both are text fixes; no numeric or code changes needed.

Verified (independently recomputed):

  • Purely additive: 0 deletions; gates.yaml == origin/master + inserted block; locked values byte-identical. Inert: every runner reads gates.gate_1.thresholds only (load_gate1_thresholds); nothing outside the new tests reads amendment_proposed.
  • KS band: 0.0288372 + 4×0.0077679 = 0.0599089 → 0.0599. Derivation tests bind (a value edit fails pytest.approx; a k edit is a visible diff to the stated rule).
  • Anchor reproduces: full 5-seed in-memory rebuild of pia_proxy_floor_9822.json matches every float to 1e-9 on pe-us bf71be3b (revision recorded in-artifact and asserted by the repro test before comparing floats).
  • Pooled-Q0 design: per-seed real-vs-real |Q0| = [2.74, 5.42, 4.22, 12.80, 1.06] — a per-seed 5% gate rejects reality on 2/5 seeds (3/5 pass < 4), so pooled is the only 5%-level design that passes reality (|pooled| 2.66) and fails c7 (+9.30, verified from downstream_relevance_c7_v1.json; c7 passes the per-seed central/decile/KS gates 5/5 as claimed).
  • d1/d2 partition binds against the anchor: clip counts d1 5/5, d2 3/5 (≥ majority 3), d3–d9 0/5; the test forces re-partition on any rebuild drift.
  • Suite: 275 passed, 9 skipped in .venv (skips = populace-fit gate reproductions), ruff + black clean — as stated.

1. (blocking) The ±5% a-priori citation is misattributed — fix the text, keep the number. paper/paper.qmd contains no ±5% criterion (grep "5 percent", "±5", "within 5": zero hits); "the paper carries the same standard" is false, and CLAUDE.md's "±5% of SSA statistics" is a writing-style example, not a registration. The real pre-stated sources are the two docs' acceptance tables, and both hedge: "The exact tolerances should be refined during implementation" (evaluation-and-model-selection.md), "not that every number above is final" (operationalizing-longitudinal-construction.md), and their object is model-vs-SSA-benchmarks for retired workers' AIME percentiles, not candidate-vs-holdout gaps on a prime-age top-10 proxy. Also, "monotone transform, so its gaps map onto that criterion" conflates percentiles with percent gaps: the concave 415(a) formula compresses percent gaps by elasticity 0.32·AIME/PIA ≈ 0.54 at the median AIME-proxy (~$2,150), ~0.73 at d9, 1.0 below the first bend — so a 5% PIA-proxy band is equivalent to roughly a 7–9% AIME band over d4–d9, i.e. looser than the cited criterion in its own units. Fix in this PR: attribute to "the docs' draft Phase-1 acceptance tables, adopted here as a fixed band in benefit units (the decision-relevant object)", state the concavity dilution, and drop the paper/CLAUDE.md attributions. The band itself is fine — pre-stated magnitude, reality clears it 1.9× pooled on Q0 — but the first amendment must not set the precedent that a-priori citations go unchecked. (Same misattribution sits in the merged SUCCESS_CRITERION_TEXT and the anchor's success_criterion.text; fixing gates.yaml is the binding part.)

2. (blocking, disclosure) Change 1 flips four committed geometry verdicts — say so. Recomputing every committed run's per-seed checks with runs-view c2st removed: baseline 0/5 → 5/5, latent_perm v1 3/5 → 5/5, v2 3/5 → 4/5, candidate 7 2/5 → 5/5 (rank_kernel, rank, splice v1/v2 stay 0/5 via pairs-view). No overall verdict flips — battery fails all four (baseline 0/5 on 4yr+10yr autocorr; latent_perm 0/5; c7 2/5) — but the rationale's "the single threshold on which candidate 7 clips" understates that runs-c2st was also the only geometry catch for the baseline and latent-perm family. Post-amendment, the guard against that family concentrates in autocorr_log_10yr (one number, tolerance 0.07; c7's passing seed sits at deviation 0.0688) plus pooled Q0. Both fired for every real instance, so the demotion is defensible — but #56 validated one candidate's residual as benefit-immaterial, not every defect expressible at runs-c2st ~0.55 (#54 itself shows different defects at the same AUC), and a trivariate warp preserving pairs joints, the three gated autocorr lags, and h1 mobility would post-amendment be gated by nothing (h2 mobility, change sd/skew/kurt, spell-length distribution are all reported-not-gated; the top-10 proxy is order-invariant). Fix: disclose the flip table in the amendment text, and consider a tripwire: "a candidate passing all gates while runs-view c2st exceeds the old 0.54 on ≥3/5 seeds triggers a mandatory downstream-relevance analysis (per #56) before certification." That keeps the demotion honest without re-gating texture.

3. (supports the amendment — new evidence) A prior broken candidate also fails the block. I regenerated the registered baseline QRF per seed (byte-identical run_gate1_baseline machinery, ~17s/seed) and scored the proposed block: pooled |Q0| = 19.01 (per-seed +23.2/+17.7/+21.9/+11.7/+20.6, all same-signed), per-seed metrics 4/5 (seed 1 clips d4 at +5.15). So the block fails reality never, c7 (9.30), and the baseline (19.01) — it is not c7-bespoke, and the Q0 gate has real teeth against the chained family (backcasts systematically inflate zero-anchor histories). Two calibration notes worth carrying into the text: (a) only Q0 ever binds — the KS/central/decile bands are calibrated on disjoint-person noise but scored on paired same-person panels with shared real anchor rows, so even broken candidates score KS ≤ 0.049 vs the 0.0599 band; harmless, but the block's teeth are the pooled Q0 gate, not the seed-level bands. (b) For the same reason, "c7's KS 0.025 sits inside the 0.028 noise floor" and "central gaps inside the noise floor" use the wrong null for paired statistics — c7's +1.85% mean is same-signed on 5/5 seeds (systematic bias, just small vs the band). Right conclusion, wrong framing; state magnitude-vs-band, not vs the disjoint floor.

4. (non-blocking) Two cheap hardenings for the referee round. (a) Pooled-signed Q0 admits sign-cancellation: a candidate with per-seed Q0 biases of ±12% alternating by seed passes at |pooled| ≈ 0. Exploiting it requires split-seed-conditioned behavior (auditable in the frozen spec; both observed broken candidates are same-signed), but a per-seed |Q0| ≤ 15 cap inside the per-seed conjunction is reality-safe (floor max 12.80; 4/5 rule absorbs noise) and bounds the vector. (b) d1/d2: the %-fragility evidence is honest (gating either rejects reality), but the stated cause is the denominator — so gate the numerator: absolute-dollar bands at floor mean+4sd ≈ $240 (d1) / $180 (d2) pass reality by construction and catch a candidate grossly wrong at the bottom, which is currently ungated below d3.

5. (non-blocking, functional notes) The weighted KS is invariant under the strictly monotone statute layer, so the "benefit-space" KS gate is identically the AIME-proxy (earnings-functional) KS — the ×12×2 scale cancels exactly there. For the percent bands the constant is applied identically to both sides, but it sets bracket placement (÷24 puts the median AIME-proxy at ~$2,150, deep in the 32% bracket), and with it how strict "5%" is in earnings units — worth one sentence so nobody reads statute-specificity into the KS gate. The top-10 functional is order- and below-top-10-invariant: the block cannot see timing/sequence defects and must never be argued as a substitute for the remaining gated views/battery (the amendment doesn't, but the precedent should say it).

6. (non-blocking, flip-PR mechanics + nits) The ratifying PR must remove runs-view c2st_auc_max from geometry and derivations.rules together (test_every_locked_geometry_threshold_has_a_derivation asserts set equality) and add it to reported_not_gated. Builder docstring says gate_1.thresholds.amendment_proposed; the block is a sibling: gate_1.amendment_proposed. And to keep the spec-freeze ethic clean, the ratifying PR should state the ordering explicitly: the amended thresholds lock before the next candidate registers on #42.

Process is otherwise exactly right for a first amendment: inert proposal object, machine-checked derivations, evidence chain in committed artifacts, ratification path matching the #33/#39 precedent.

The referee (PR #57 review) found two text-level defects, no numeric
ones. First, the +/-5% bands claimed the paper as their source; the
paper carries no such criterion. The a_priori_source now states the
exact provenance — the DRAFT Phase-1 acceptance tables, in AIME
units — notes that PIA concavity makes a 5% PIA-space band stricter
than the draft figure (roughly 7-9% AIME-equivalent), and declares
the bands as this amendment's own proposal-time criterion. The
source key renames to amendment_5pct_criterion accordingly. Second,
the runs-view c2st demotion silently changed the geometry-block
verdicts of four committed runs; a demotion_disclosure block now
lists every flip, shows that no overall gate-1 verdict changes
(each run still fails the battery and, under the amendment, the
benefit-space block — referee-verified baseline pooled Q0 +19.0),
and acknowledges where the anti-persistence duty concentrates.

Also aligns the anchor reproduction test's pe-us pin check with the
repo precedent (PR #41): skip with both revisions named on a
mismatched checkout instead of failing.

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

Copy link
Copy Markdown
Contributor Author

Referee round applied in d02cdf5, item by item:

  1. The ±5% misattribution — fixed with exact provenance. The a_priori_source no longer claims the paper (which carries no such criterion). It now states: the 5% figure originates in the DRAFT Phase-1 acceptance tables (named files), in AIME units; this amendment ADOPTS ±5% as its own proposal-time criterion for PIA-proxy space; and PIA concavity makes a 5% PIA-space band STRICTER than the draft tables' AIME-space figure (≈7–9% AIME-equivalent at the 2022 bend points) — the referee's own arithmetic, now in the text. The source key renames paper_5pct_criterionamendment_5pct_criterion. No numeric change.
  2. The demotion disclosure — added in full. A demotion_disclosure field lists every committed-run geometry-verdict flip (baseline 0/5→5/5, candidate 2 3/5→5/5, candidate 3 4/5, candidate 7 2/5→5/5), states that NO overall gate-1 verdict changes (each still fails the battery, and the benefit-space block — including the referee's regenerated baseline at pooled Q0 +19.0 vs reality's 2.66), and acknowledges the guard concentration: after the demotion, the anti-persistence duty rests on the battery autocorrelation bands plus pooled Q0 — the battery ladder having failed every persistence-broken candidate 5/5 across all nine committed runs.

Also folded in (test hygiene, referee-adjacent): the anchor reproduction test now SKIPS with both revisions named on a mismatched pe-us checkout, per the PR #41 precedent, instead of failing.

Everything the referee verified clean is untouched: the anchor artifact, the KS derivation (0.0288 + 4×0.0078 = 0.0599), the pooled-Q0 design, the d1/d2 partition, and every locked value (byte-identical). Derivation tests: 21 passed locally; live reproduction passes against the pinned checkout.

Awaiting a verification pass on the two fixes, then maintainer ratification — merging this PR is the amendment's ratification event.

@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Verdict: RATIFY AS-IS. Both findings from my review are resolved in d02cdf5, verified against committed artifacts; nothing else regressed.

Finding 1 (a-priori misattribution) — resolved. a_priori_source now states exact draft-table provenance in AIME units, explicitly disclaims the paper ("the paper itself carries no such criterion — corrected per the amendment referee round"), adopts ±5% as this amendment's own proposal-time criterion (2026-07-06, before any candidate scored against it), and carries the concavity arithmetic I gave (5% in PIA-proxy space ≈ 7–9% AIME-equivalent at the 2022 bend points, i.e. stricter than the draft tables' 5%). Source key renamed paper_5pct_criterion → amendment_5pct_criterion on all four gated metrics; the CLAUDE.md attribution is dropped. This is the honest sourcing I asked for.

Finding 2 (demotion disclosure) — resolved, every claim re-verified. Recomputing each committed run's per-seed geometry with runs-view c2st removed reproduces the demotion_disclosure block exactly:

Invariants still hold on the new commit:

  • Locked block byte-identical to origin/master (lines 1–288 diff-clean); gates.yaml still additive-only (0 deletions over origin/master).
  • No scoring-time reader touches amendment_proposed / demotion_disclosure / a_priori_source (only a builder docstring mentions the path).
  • Derivations still bind: tests/test_gates_derivations.py + tests/test_pia_proxy_floor.py = 22 passed on pe-us bf71be3b, seed-0 reproduction included (ran, not skipped).
  • Full suite 275 passed, 9 skipped (unchanged) — the two-file change is inert.

On the test-hygiene change (non-blocking, fine): turning the pin-mismatch assert into pytest.skip (PR #41 precedent) does not weaken the anchor guarantee — on the pinned revision the reproduction still runs and pins to 1e-9 (verified); off-pin it skips instead of failing CI on an environment mismatch, which is correct for a repro that legitimately can't run off-pin.

Two cosmetic nits remain, neither blocking and both deferrable to the ratifying flip-PR: the builder docstring still says gate_1.thresholds.amendment_proposed (block is the sibling gate_1.amendment_proposed), and the flip-PR must move runs-view c2st_auc_max out of both geometry and derivations.rules together (set-equality test) while adding it to reported_not_gated. My non-blocking hardening suggestions (per-seed |Q0| cap against sign-cancellation; absolute-dollar d1/d2 bands) remain optional inputs for the referee round, not ratification blockers.

Clean amendment object. Ship it to the referee round.

@MaxGhenis
MaxGhenis marked this pull request as ready for review July 6, 2026 23:19
@MaxGhenis
MaxGhenis merged commit 0c324a7 into master Jul 6, 2026
7 checks passed
MaxGhenis added a commit that referenced this pull request Jul 7, 2026
… regime (fails under the amended gate) (#62)

The eleventh pre-registered gate-1 run and the first candidate scored
under the amended gate (PR #57/#59). Candidate 7's machinery verbatim
with two registered changes; the only calibration is the registered
train-side SMM for lambda.

Verdict under the amended gate: FAIL. Geometry 0/5, battery 2/5, pooled
Q0 -17.89% (> 5).

Two registered changes:
1. SMM-calibrated donor-coordinate blend. The k-NN third distance term
   becomes |lambda*u_w(donor) + (1-lambda)*u_A(donor) - u_A(target)| at
   the 0.25 weight; u_w is candidate 8's shrunk permanent rank, u_A the
   anchor ranks. lambda is calibrated per seed on the train split by SMM
   in the 5b tradition (grid {0,...,1.0}, autocorrelation-ladder SSE on
   the first 2,000 train persons, ties to the smaller lambda). lambda=0
   reproduces candidate 7; lambda=1 candidate 8.
2. Zero-anchor participation regime. Zero-anchor holdout persons draw
   participation from a gate refit only on zero-anchor train pairs and
   their re-entry innovations from a zero-anchor-restricted re-entry
   pool. Positive-anchor persons keep the shared gate and full pools
   exactly as candidate 7. Candidate 9 does NOT adopt candidate 8's
   attachment distance.

Findings:
- Chosen lambda per seed: {0: 0.2, 1: 0.0, 2: 0.3, 3: 0.1, 4: 0.0}. The
  train SMM never chose lambda above 0.3 and chose lambda=0 (candidate 7)
  on two seeds.
- The c9 pooled 10-year autocorrelation rung (0.514) lands inside the
  reference band [0.469, 0.609] and between the c7/c8 bracket
  (0.459/0.670) -- the blend achieved its aim on the 10-year rung in the
  pooled mean. But no single lambda on the grid lands all three rungs
  simultaneously: the registered risk materialized (the blend changes
  all three rungs together). Battery passes only 2/5 (seeds 2, 3);
  seed 0 fails the 2-year rung (dev 0.059), seeds 1/4 (lambda=0) leave
  the 10-year rung short.
- Geometry 0/5: the binding constraint is the pairs-view c2st_auc
  (0.531-0.550, all just over 0.53) on all five seeds; benefit-space
  additionally fails on seeds 0/2/3.
- The zero-anchor participation regime closed the never-worker
  resurrection (generated all-zero share 0.3155 vs real 0.3147, gap
  +0.0007, vs PR #61's +20.7pp for the shared gate) -- the participation
  law now matches reality. But the level over-corrected: pooled Q0
  PIA-proxy moved from c7 +9.3% / c8 +12.2% to c9 -17.89% (the restricted
  re-entry pool plus the resurrection fix together subtract more than the
  +9.3% they were meant to remove).

Artifact runs/gate1_rank_knn_v3.json (schema gate1_rank_knn.v3):
per-seed chosen lambda + SMM ladders, the amended-gate scorecard (the
benefit_space block per seed + pooled Q0), Q0 participation diagnostics,
and the standard diagnostics. The battery-reference bit-exact precheck
reproduced every committed value before scoring. Tests: seed-0
reproduction (live in .venv-gate) + the amended-verdict recomputation
block (24 pass in .venv-gate; 311 pass / 16 skip in the repo .venv).

Links issue #42; base machinery candidate 7 (#55); u_w candidate 8
(#58); benefit-space functional #56; C2ST forensics #54; amended gate
#57/#59; Q0 forensics #61.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Jul 7, 2026
…try under the amended gate) (#64)

The twelfth pre-registered gate-1 run, and the first whose every constant was
selected by nested validation (PR #63) rather than by outer-gate feedback.
Candidate 10 is the inner sweep's V1-lam0.1 variant at outer scale: candidate
7's k-NN conditional-rank-bootstrap machinery, candidate 9's zero-anchor
participation regime with its two poisons removed (the re-entry-pool
restriction dropped, Q0 targets held memory-exempt), and a FIXED lambda = 0.1
donor-coordinate blend for the non-Q0 targets. No calibration stage: lambda is
fixed, not chosen against any score.

Frozen spec: issue #42 comment 4902561460. Scored under the amended gate
(gates.yaml gate_1, PR #57/#59) exactly as run 11: runs-view c2st demoted,
gated benefit-space block folded into the geometry verdict, >=4/5 geometry AND
>=4/5 battery AND pooled Q0 (abs <= 5).

Verdict, exactly as computed: gate_1_pass = FALSE -- geometry 3/5 (needs 4/5),
battery 4/5 (passes), pooled Q0 +0.038% (passes). Seeds 0 and 1 each clip the
pairs-view C2ST (0.5315, 0.5330 vs 0.53); seeds 2/3/4 clear it. The only
battery failure is seed 0's 2-year autocorrelation (0.7896, deviation 0.0595 >
0.05) -- a short-lag overshoot from the memory injection, not the 10-year
undershoot of earlier candidates (every seed clears 4yr and 10yr).

Inner-vs-outer: the ~0.005-0.01 heat correction the inner sweep predicted for
the pairs C2ST delivered a reshuffle, not a uniform cooling -- mean cooled
-0.0014 (inner 0.5293 -> outer 0.5279), but seeds 0/1 heated up (crossing to
fail) while the worst inner seed (3, 0.5365) cooled to a comfortable pass
(0.5260). Still 3/5, one seed short -- exactly the forecast's named failure
(comment 4902561584, P(pass) ~0.42). The Q0 program was solved: pooled Q0
generalized inner +1.19% -> outer +0.04%, and the generated-vs-real all-zero
share gap is +0.0007 (no never-worker resurrection).

Generation verified byte-identical to the inner sweep's generate_variant at
memory_mode=lambda_blend, lam=0.1, use_zero_anchor_gate=True under candidate-7
seeding. Seed-0 reproduction run live in .venv-gate (float-exact). Full pytest
green in the repo .venv (361 passed, 22 skipped). ruff + black -l 79 clean.

Deliverables:
- scripts/run_gate1_candidate10.py -- deterministic; candidate-7 two-element
  substreams; the registered rules exactly.
- runs/gate1_rank_knn_v4.json -- schema gate1_rank_knn.v4; spec_registration =
  the candidate-10 comment; standard diagnostics + Q0 participation numbers +
  per-seed benefit_space + the amended scorecard.
- tests/test_gate1_qrf_candidate10.py -- seed-0 reproduction (skipif PSID +
  importorskip populace.fit) + generation-equivalence to the inner sweep + the
  Q0-exempt/full-pool checks + the amended-gate consistency block.

Links: issue #42; PRs #63 (inner-validation harness + design sweep), #62
(candidate 9), #61 (Q0 forensics), #55 (candidate 7).

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