Skip to content

W1 transport gate: design #151

Description

@MaxGhenis

W1 transport gate: design

The certification design for milestone M5 (#113) — the representative-frame transport gate, workstream W1 of #100. This issue is the design half of the M5 gate ceremony; the floors evidence base is the companion draft PR (the #79/#118/#124 role, one milestone up). gates.yaml is untouched by both; the gate_w1 stub below is a proposal for the eventual ratifying flip, not a change made here.

What W1 certifies — the transport, not the dynamics

The program's signature architectural bet (#113): dynamics are estimated on PSID panels and deployed on a CPS-anchored representative frame. DYNASIM sidesteps this by basing itself on SIPP; we deliberately don't, so M5 carries a burden Urban never took on (#113 named hard part 1). It is also the entire unlock — the transport is what lets one person-period panel serve the cross-sectional microsim, the local-area cuts, and the 75-year projection.

W1 certifies that generators ESTIMATED on PSID (gate-1 earnings histories; gate-2a/2b/2c demographic, household, and marriage×earnings dynamics; M4 disability), when DEPLOYED on populace CPS person records, produce distributions matching targets OBSERVABLE without panel data. It does not re-certify the generators' dynamics — those remain 2a/2b/2c/M4-certified on their PSID holdouts. W1 certifies the deployment map — the CPS↔PSID covariate transport and the SSA-target calibration of #100 W1 — is faithful.

Three target families, each with its own holdout-pricing discipline.

Estimand (honest)

The deployment frame is the certified populace US file, pinned through the policyengine.py release bundle (pe.us.model.release_bundle):

field value
bundle us-4.18.8
dataset populace_us_2024
dataset URI hf://policyengine/populace-us/populace_us_2024.h5@populace-us-2024-sparse-l0-refit-57k-71a0887-national-only-20260701
artifact sha256 c2065b642ab00da74746afdfd9f06890e5f32f9b10bd6610ff236452d40f39c5
model policyengine-us 1.752.2 · data-package populace-data 0.1.0
scale 166,302 sample persons · 57,240 households · 340.0M weighted · reference period 2024

The population claimed is US resident persons, 2024, on the CPS-ASEC-derived, L0-sparse-refit, admin-calibrated certified file — NOT an uncalibrated CPS extract and NOT the PSID estimation sample. Per governance.amendment_rules.description_claims_exactly_the_scored_surface, family A gates exactly the CPS-observable cross-sectional cells the certified file itself carries with verified non-zero support (this is the sparse-57k default, which zeroes untargeted inputs — the floor builds moments only on columns verified populated: age, is_female, employment_income_before_lsr, social_security_retirement/_disability, A_MARITL, household/marital membership; earnings $9.71T, OASI $1.11T, DI $147B all land on plausible national totals).

Target family A — CPS-observable cross-sectional joints (FLOOR-priced)

The deployed generators' terminal/current cross-section must reproduce the joints the CPS already pins, within the deployment frame's own sampling noise. A transport that distorts the observed cross-section while adding history is broken; this is the internal-consistency leg.

  • earnings × age × sex distributional moments — participation share, within-cell dispersion (p90/p50, p50/p10 earnings ratios), and the age-earnings profile (cell median / prime-age median) by age band × sex — vs the certified file's own weighted values.
  • marital composition × demographics — share in each marital status (married / widowed / divorced / separated / never-married) by age band × sex — vs the file's own A_MARITL.
  • household composition — person-level household-size shares and coresident-with-spouse share by age × sex — vs the certified populace columns.

Pricing. 100-seed household-disjoint half-split floor on the file's OWN weighted moments (the sampling-noise floor of the deployment frame). Household-disjoint, not merely person-disjoint: CPS is a household-cluster sample and composition moments are household-level, so the honest null must keep every household intact on one side (the 2c "couple/person-disjoint where units correlate" lesson, applied to the CPS cluster). Statistic is the symmetric scale-free |ln(rate_candidate / rate_ref)|, identical in shape to 2a/2b/2c. Tolerance = round(mean + 4·sd, 3), capped at T_max = ln(1.5); gate-eligible iff ≥20 raw sample units on the weaker half of every seed AND stabilised tolerance ≤ T_max. Gated vs report-only is the floor's own machine partition — never hand-picked.

Target family B — SSA administrative anchors (ANCHOR-priced, point values)

The deployed and simulated benefits — the statutory formula (§415 chain, 402-aux) run on the transported AIME and calibrated claiming — must land on administrative margins PSID never sees and the CPS only crudely proxies. These are the external-validity leg.

anchor source (staged) 2022/2023 headline
claim-age distribution Supplement 6.B5.1 (dynasim-refs/ssa_supplement_2023_6b.txt) men age-62 share 23.8%, avg age 65.1; women 25.6%, 65.0 — 8 collapsed categories (the claiming module's COLLAPSED_CATEGORIES)
benefit-level distribution 6.B4 (PIA) / 6.B3 (MOB) avg PIA $1,984.09; avg monthly benefit $1,908.86 (men $2,131.04, women $1,683.57)
DI prevalence data/external/di_asr_2023 Table 19 2023 disabled-worker age distribution (60–FRA 45.4%, avg age 55.9), 7.366M workers

Pricing. Anchors are point values, so there is no half-split sampling floor. Instead each carries a named, machine-derivable measurement/vintage tolerance: the tolerance is the recent-window dispersion of the anchor's OWN published series (both 6.B5.1 and Table 19 publish annual vintages), tol = k · sd(anchor over the last L published vintages), L and k pinned knobs, plus a measurement floor of half the published rounding unit. This is honest about the real uncertainty — "which vintage should a 2024-frame steady state match" — and is reconstructible from the committed anchor series alone. Non-stationary anchors (the FRA-transition-driven claim-age drift) get genuinely wide vintage tolerances, disclosed as such, not hidden. Report-only where the certified file cannot carry the margin (e.g. benefit LEVELS depend on the not-yet-deployed transported AIME).

Target family C — the two ordinal compression fingerprints (BINARY, no floor)

The sharpest transport test, pre-committed in #113: two reform orderings came out wrong on the PSID observed-career frame (compressed careers), and a certified representative frame must REVERSE both to the anchor orderings, and nothing else.

fingerprint PSID-frame order (committed "before") representative-frame order (required "after") adjacent pair that must swap
C1 PPI↔NRA (#115 T2 / #117 F4) PI > NRA > PPI > COLA (τ=0.667 vs Mermin) PI > PPI > NRA > COLA (τ=1.0) PPI must outrank NRA
C2 elimination↔+2pp (#117 F2) +2pp > elim > +1pp > cap-$150k (τ=0.667 vs Smith) elim > +2pp > +1pp > cap-$150k (τ=1.0) elimination must outrank +2pp

Both are τ=0.667 single-adjacent-swap fingerprints of the same mechanism — observed-career compression at the PIA bends (C1) and at the taxable maximum (C2). C1 reverses because a representative frame carries more AIME above the second bend where progressive price indexing bites; C2 reverses because a representative frame carries >16.1% of payroll above the wage base, above the break-even where elimination's revenue gain exceeds +2pp's. Ordinal → no floor: family C is a binary check against the committed anchor orderings. If transport is real both reverse; if it is cosmetic they don't. This is the falsifiable heart of the gate.

Holdout / pricing discipline (summary)

family priced by gated report-only
A (CPS-observable joints) 100-seed household-disjoint half-split floor cells clearing ≥20 events + T_max cells demoted by the power cap (machine reason)
B (SSA anchors) named vintage/measurement tolerance on the anchor's own series margins the deployed+simulated benefits can hit margins needing the not-yet-deployed AIME
C (fingerprints) binary vs committed anchor orderings both reversals

What W1 does NOT certify

  • The dynamics. Earnings, marital, household, marriage×earnings, and disability dynamics remain 2a/2b/2c/M4-certified on their PSID holdouts. W1 certifies transport, not re-estimation.
  • The projection (M6), revenue/trust-fund accounting (M7), integrated scoring (M8) — later milestones.
  • Behavioral response — v1 transport is mechanical (claiming from the calibrated distribution; no labor-supply feedback), stated as a domain-of-validity.
  • Levels not carried by the frame — anything the sparse-57k certified file zeroes is out of family-A scope by construction, not silently gated.

Proposed gate_w1 stub (for the eventual flip — NOT changed here)

gate_w1:
  id: w1_representative_frame_transport
  status: unlocked          # flips to locked only after the full ceremony
  locked: false
  covers: >-
    the TRANSPORT of the PSID-estimated generators onto the certified populace
    CPS representative frame: CPS-observable cross-sectional joints (family A),
    SSA administrative margins of the deployed+simulated benefits (family B),
    and the two committed ordinal compression fingerprints that must reverse to
    the anchor orderings (family C). Does NOT re-certify the dynamics (2a/2b/2c/
    M4) nor certify the projection (M6+).
  deployment_frame:
    bundle: us-4.18.8
    dataset: populace_us_2024
    dataset_uri: hf://policyengine/populace-us/populace_us_2024.h5@populace-us-2024-sparse-l0-refit-57k-71a0887-national-only-20260701
    artifact_sha256: c2065b642ab00da74746afdfd9f06890e5f32f9b10bd6610ff236452d40f39c5
    pe_us_version: 1.752.2
  holdout_basis: [populace_us_2024_certified, ssa_supplement_6b, di_asr_2023, mermin_smith_committed_orderings]
  lock_ceremony:
    exists: true
    required_before_any_w1_pass: >-
      the SAME ceremony 2a/2b/2c followed — a pre-registered gate on a 100-seed
      household-disjoint split noise floor over the CPS-observable joints
      (family A), named vintage/measurement tolerances on the SSA anchors
      (family B), and the binary committed fingerprint orderings (family C);
      an adversarial referee round, a verification round, and a ratifying merge.
  thresholds:
    locked: false
    status: draft_pending_referee_round
    floor_run: runs/gate_w1_floors_v1.json
    # family-A tolerances machine-bound to the floor exactly as 2c:
    #   tol == round(mean + 4*sd, 3), capped at T_max = ln(1.5)
    # family-B tolerances machine-derived from each anchor's own vintage series
    # family-C: binary vs the committed before/after orderings (no tolerance)

Ceremony

Step 1 (this round): the floors evidence base as a draft PR — family-A floor + partition, family-B anchor values + vintage-tolerance rules, family-C committed orderings, K=20 estimator protocol from the start, machine-recorded gated/report-only reasons, a WARTS section pre-empting the 2b/2c referee classes. It reads no gate and changes no gate; gates.yaml stays untouched. The ceremony — adversarial referee → fixes → verification → ratifying flip — controls the lock; the draft is never marked ready or merged by its author.

Refs: #113 (M5), #100 (W1), #115 (C1 fingerprint), #117 (C2 fingerprint), #79/#118/#124 (the floors-PR precedent), #42 (registry).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions