From 4dcc0992c66b44143d8d38ac5002ab7ec7f63fcc Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 25 Oct 2026 02:32:21 -0400 Subject: [PATCH 1/3] Parity ledger: CE0, OP0.1, the registry, U2's evidence record and F0/F1 status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Re-verifies five rows and step 1 of the critical path at 9967dfd6, after #560, #568, #576, #577 and #578 merged and F0 and F1 opened as #585 and #586: - covered earnings: CE v2's design note merged in #568; CE1 is in review (#583); - births: OP0.1's audit merged (#567); OP1 is in review (#566); - alignment: OP6 aligns births and emigration, and deaths come from the mortality lane's SM (open-population design §6.4, revision 14, #576); - poverty: #577 committed U2's pre-registration evidence record, and a fresh forecast was frozen and independently checked (step 7); posting the #42 registration is next; - national costs: F0 is in review as #585 and F1 as #586, after #578's design erratum; - critical path step 1: the holdout registry merged in #560, and B0.2's plan moved to #584. Co-Authored-By: Claude Opus 5.5 --- docs/parity-ledger.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/docs/parity-ledger.md b/docs/parity-ledger.md index 7e140108..05204d41 100644 --- a/docs/parity-ledger.md +++ b/docs/parity-ledger.md @@ -15,7 +15,9 @@ on forward earnings, the family maximum, the earnings test and insured status, the critical path and the rulings were re-verified at `2195258c` on 24 October 2026; the rows the three approved designs cover, the poverty row's U2 entry and the known gaps at `f8ffc7d9` the -same day.* +same day. The rows on covered earnings, births, alignment, poverty, +and national costs and financing, and step 1 of the critical path, +were re-verified at `9967dfd6` on 25 October 2026.* ## Bottom line @@ -92,7 +94,7 @@ them. Paths are relative to the repository root. | Capability | What DYNASIM does | Our status | Test that would show parity | Tracking | Next step | |-----------|----------------|------------------------|---------------|--------|-----------| | Earnings histories | Builds each person's lifetime earnings history from survey and administrative records ([overview][ov]; [DYNASIM4 fact sheet][d4]). | *Gate passed* for the generated earnings process: gate 1 passes (`runs/gate1_rank_knn_v5.json`), scoring 1998–2022 at ages 25–59, not whole careers. *Used in a blind test* for the recorded PSID careers that exercises 1, 3 and 4 read; the paper reports that about half of the career years through 2010 for the 7,486 cohort members who reach 62 between 1979 and 2030 hold imputed or zero values. Those careers' fill rules fail `gate_epuf_fill`, which scored them as its reference arm on 878,481 held-out people in SSA's Earnings Public-Use File: the odd-year neighbour mean fails 100 of 183 gating cells, and the zero pre-career rule fails 131 of 136 (`runs/epuf_fill_gate_test_v1.json`). The gate locked on 13 October ([#515][pr515]) and scored once ([#537][pr537]). *Gate passed, not used in a blind test*, for the learned pre-career fill, which fails 0 of 136 cells. The learned odd-year fill fails 8 of 183, so the gate adopts it as an improvement without certifying it. Both fills are opt-in, and no blind test uses them. | Whole careers set against SSA's Earnings Public-Use File by birth cohort and sex: years without covered earnings, low-earnings years, persistence and the 35-year AIME, including low earners and broken careers. | [#515][pr515], [#516][pr516], [#537][pr537]; d927, d929 (parked); [result][resepuf] | d929 decides whether exercises 1, 3 and 4 rerun with the learned fills. | -| Covered earnings and agreement with SSA records | Separates employment that Social Security covers from noncovered employment ([DYNASIM3 primer][d3]). | *None* for a covered/noncovered split: the projections and the Axiom bridge treat all PSID labor income as covered, and the correction design is a draft (`docs/design/covered_earnings_correction.md`). *Report-only* for the comparison of the PSID's own 1998–2004 earnings with SSA's public-use file: `gate_epuf` closed without locking and has scored no model output (`docs/amendments/gate_epuf_registration_proposal.md`). | A covered/noncovered split of PSID earnings, checked against SSA's totals of covered workers and taxable earnings, and a fresh gate on the public-use file with power beyond gate 1. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923), which retires the correction campaign in favour of a lean successor, CE v2; CE0, its design note, is in review as [#568][pr568]. The campaign's [#403][i403] and closed [#405][pr405] are history | Review CE0, then build CE1–CE5: coverage rules, the crosswalk, the classifier on invented data and the registered gate against the public-use file (income design §4). | +| Covered earnings and agreement with SSA records | Separates employment that Social Security covers from noncovered employment ([DYNASIM3 primer][d3]). | *None* for a covered/noncovered split: the projections and the Axiom bridge treat all PSID labor income as covered. CE v2's design note is merged (`docs/design/covered_earnings_v2.md`), and nothing in it has run. *Report-only* for the comparison of the PSID's own 1998–2004 earnings with SSA's public-use file: `gate_epuf` closed without locking and has scored no model output (`docs/amendments/gate_epuf_registration_proposal.md`). | A covered/noncovered split of PSID earnings, checked against SSA's totals of covered workers and taxable earnings, and a fresh gate on the public-use file with power beyond gate 1. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923), which retires the correction campaign in favour of a lean successor, CE v2; CE0, its design note, merged in [#568][pr568]. The campaign's [#403][i403] and closed [#405][pr405] are history | Build CE1–CE5: coverage rules, the crosswalk, the classifier on invented data and the registered gate against the public-use file (income design §4). CE1's coverage-rule registry is in review ([#583][pr583]). | | Forward earnings | Projects employment, hours, wages and pension coverage each year ([DYNASIM4 fact sheet][d4]). | *Gate passed* for gate m6; *Gate failed* for B2; not used in a blind test. The forward law, fitted on PSID earnings through 2014 at ages 25–64, passes gate m6 in 4 of 5 seeds (`runs/gate_m6_candidate3_v1.json`). In every seed, its two-year earnings growth at ages 25 to 44 runs below the PSID's. B2 carried the same law from the 2010 cohort to the earnings years 2012 and 2014, which the PSID collected in its 2013 and 2015 interviews, and failed on 18 October ([result][resb2]). Its projected zero-earnings rate for people aged 25 to 44 at those interviews is about 35 percent above the PSID's: the gap is 0.30 on a log scale against a tolerance of 0.20, and it exceeds the tolerance in all 5 of the test's household splits. Three of its four gated bounds also exceed their tolerances; only the 90th percentile of positive earnings at ages 25 to 44 passes every check (`runs/track_b_b2_score.json`). The law has no fitted distribution above 64, and both projection tests draw no earnings after 2010 (`src/populace_dynamics/cola_track_a/adapters.py`). | Track B's sequence: B1 v2 reproduces gate m6's histories; B2 tests the bridge from the 2010 cohort to the law's 2014 boundary on PSID earnings for 2012 and 2014. Under d1606 it gates four level cells, the 90th percentile and the zero-earnings rate by cohort, and reports twelve more, the medians among them. B3 refits ages 25–69 with gates at 62–64, 65–66 and 67–69; B3L backtests 2006 to 2022; an independent joint holdout comes before any 2030 claim. Because B2 gates levels only, growth and persistence need their own test. | [#505][pr505], [#526][pr526], [#545][pr545], [#547][pr547], [#548][pr548], [#555][pr555], [#561][pr561] (draft); d515, d622, d693, d765, d781, d782, d1342, d1606, d1659, d1803; [B1 v2 registration][regb1], [B2 registration][regb2] | B1 v2 passed on 11 October ([result][resb1]). B2's failure is attempt 1 on Track B's cumulative attempt ledger (`docs/design/track_b_attempt_ledger.md`); two failed successors would pause the mechanism. Under d1659 a successor must rest on evidence independent of B2's 2012 and 2014 result. Under d1803 it is S1, whose participation gate reads earnings relative to the national average wage index, with P2, a history-based participation gate, in reserve. S1 is specified and tested on invented data only ([#555][pr555], `docs/design/track_b_s1_spec.md`); P2 is a draft in review ([#561][pr561]). Neither has read PSID data or registered; registering S1 as attempt 2 comes to the maintainer separately. | ### Disability, mortality and claiming @@ -111,10 +113,10 @@ them. Paths are relative to the repository root. |-----------|----------------|------------------------|---------------|--------|-----------| | Marriage, divorce and widowhood | Projects marriage, divorce, remarriage and widowhood ([DYNASIM4 fact sheet][d4]; [overview][ov]). | *Gate passed, not used in a blind test.* Gates 2, 2b and 2c pass in 4 of 5 seeds each, and gate m6 scores first-marriage, divorce and remarriage flows over 2015–2019. The blind projections draw no marriage or divorce: a person is widowed only when a spouse in the cohort dies (`src/populace_dynamics/cola_track_a/adapters.py`), so 552 married members of the 2011-wave cohort whose spouses are outside it, and 80 with no linked spouse, are never widowed (`runs/replication_urban2010_cola_v1.json`). | The gated marriage and divorce models inside the projection, with redrawn starting states and spouses outside the cohort simulated; flows, durations, spouse links and the resulting spouse and survivor benefits, scored by a registered projection gate (B4). | d515 | Register B4 once B3, B3L and the history recorder H exist. All three wait on a successor to B2 (d1659). | | Education | Projects educational attainment from cross-tabulations by age, race, sex and parents' education, estimated on the NLSY and CPS ([DYNASIM3 primer][d3]). | *None* for transitions: the engine's eight modules (mortality, aging, marital core, fertility, disability, earnings, claiming and household composition; `src/populace_dynamics/engine/loop.py`) include no education step. Completed education is read from the PSID as a fixed attribute for group breakdowns (`src/populace_dynamics/data/group_attributes_psid.py`, from [#513][pr513]). | Projected attainment by birth cohort and sex against Census and ACS attainment tables, and its effect on later earnings and mortality where those depend on it. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922) | Build ED1 now; ED2, the gate, waits on the Microcosm start and the open population's entrants (mortality design §3.4). | -| Births | Adds people through births and aligns fertility to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *Gate passed* for fertility rates (gate 2). *Report-only* for newborns entering a projection: gate m6's engine adds them (316 in its reference draw) and scores none. The blind projections add no newborns. A newborn gets a link to the mother, her household and her weight, and no father link. An opt-in, report-only birth step can draw births from the 2026 Trustees' or CBO's fertility schedule (`src/populace_dynamics/baselines/fertility.py`); no registered test uses it, and nothing aligns the gated fertility model to those targets. | Projected births against vital statistics; newborns' links to both parents, households and starting states; their entry into later earnings, disability and benefit processes. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#412][i412] | Build the demographic phase: OP0.1's audit and OP1's harness are in review ([#567][pr567], [#566][pr566]); OP2 links newborns to both parents and scores `gate_birth` (open-population design §3). | +| Births | Adds people through births and aligns fertility to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *Gate passed* for fertility rates (gate 2). *Report-only* for newborns entering a projection: gate m6's engine adds them (316 in its reference draw) and scores none. The blind projections add no newborns. A newborn gets a link to the mother, her household and her weight, and no father link. An opt-in, report-only birth step can draw births from the 2026 Trustees' or CBO's fertility schedule (`src/populace_dynamics/baselines/fertility.py`); no registered test uses it, and nothing aligns the gated fertility model to those targets. | Projected births against vital statistics; newborns' links to both parents, households and starting states; their entry into later earnings, disability and benefit processes. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#412][i412] | Build the demographic phase: OP0.1's source, exposure, access and power audit merged ([#567][pr567]), and OP1's harness is in review ([#566][pr566]); OP2 links newborns to both parents and scores `gate_birth` (open-population design §3). | | Immigration and emigration | Adds immigrants and models emigration ([DYNASIM4 fact sheet][d4]). | *Built, ungated*, and never run on real data. A scheduled-entrant module labels itself report-only (`src/populace_dynamics/engine/entrant_schedule.py`), but its readers for arrival totals and donor records were not carried over, no committed run has added an immigrant, and entrants get no earnings, disability, claiming or entitlement processes (`src/populace_dynamics/engine/entrant_domains.py`). The US engine has no emigration. | Arrivals and departures sized to OACT's assumptions; entrants' covered-work histories and insured status; their benefit receipt against SSA statistics. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#412][i412]; design PR [#218][pr218] closed unmerged | Build OP3's arrivals and OP4's emigration law in the demographic phase; entrants' histories (OP8) wait for the economic phase (open-population design §3). | | Starting population | Starts from a representative sample built mainly from the Survey of Income and Program Participation, with histories drawn from survey and administrative records ([DYNASIM4 fact sheet][d4]; [overview][ov]). | *Used in a blind test* for closed PSID cohorts: all four comparisons start from PSID members with the PSID's own weights. *None* for a projection started from Microcosm's population: a plan and a draft registration exist (`docs/plans/microcosm-start.md`, `docs/plans/microcosm-start-registration-draft.md`), with no code. Registration 19 ran a static, report-only SSI analysis on Microcosm's frame and disclosed a frame defect; its code merged in [#511][pr511] (`runs/pe_us_depletion_cut_population_v1.json`). Microcosm fixed that defect in its build code ([microcosm#1186][mc1186]), and four more frame defects are open: [microcosm#1212][mc1212], [#1213][mc1213], [#1214][mc1214] and [#1215][mc1215]. | Starting earnings histories (H1), the starting population against SSA counts, gate 3's first-year cells, then an end-to-end projection and reform comparison started from Microcosm. | d947 (parked); [#511][pr511]; [microcosm#1178][mc1178], [microcosm#1186][mc1186] | Post the Microcosm-start registration (d947), then build the frame reader. | -| Alignment and a representative population | Aligns fertility, mortality, disability, immigration and labor force participation to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *None* for alignment: the engine has no alignment step, and gate m6 records its alignment report as not computed. *Gate passed, not used in a blind test*, for transport: gate w1 places the PSID-fitted processes on Microcosm's CPS-based frame and matches 43 cross-sectional cells and one ordering check (`runs/gate_w1_candidate4_v1.json`, `runs/NOTES-gate_w1_candidate4.md`). It certifies no transition, and its SSA benefit cells are report-only. | An alignment step to the actuaries' demographic and labor targets that keeps households consistent, with its displacement from the unaligned path published; gated SSA benefit and payment totals. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#151][i151]; design PR [#217][pr217] closed unmerged; [#531][i531], which reports that w1's family-A marital and household targets come from a frame that [microcosm#1212][mc1212] finds skewed toward couples, and d1406 (open) on how to amend them. w1's committed run is unchanged | Build OP6's alignment layer and OP7's `gate_pop` in the demographic phase; OP12's gated benefit totals wait for the economic phase (open-population design §3). | +| Alignment and a representative population | Aligns fertility, mortality, disability, immigration and labor force participation to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *None* for alignment: the engine has no alignment step, and gate m6 records its alignment report as not computed. *Gate passed, not used in a blind test*, for transport: gate w1 places the PSID-fitted processes on Microcosm's CPS-based frame and matches 43 cross-sectional cells and one ordering check (`runs/gate_w1_candidate4_v1.json`, `runs/NOTES-gate_w1_candidate4.md`). It certifies no transition, and its SSA benefit cells are report-only. | An alignment step to the actuaries' demographic and labor targets that keeps households consistent, with its displacement from the unaligned path published; gated SSA benefit and payment totals. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#151][i151]; design PR [#217][pr217] closed unmerged; [#531][i531], which reports that w1's family-A marital and household targets come from a frame that [microcosm#1212][mc1212] finds skewed toward couples, and d1406 (open) on how to amend them. w1's committed run is unchanged | Build OP6's alignment layer and OP7's `gate_pop` in the demographic phase. OP6 aligns births and emigration; deaths come from the mortality lane's SM, which holds OACT's total deaths in expectation (open-population design §6.4, revision 14 in [#576][pr576]); OP12's gated benefit totals wait for the economic phase (open-population design §3). | ### Benefit rules and payments @@ -133,7 +135,7 @@ them. Paths are relative to the repository root. |-----------|----------------|------------------------|---------------|--------|-----------| | Supplemental Security Income (SSI) | Applies SSI's income and resource rules and models eligibility, participation and benefits ([DYNASIM3 primer][d3]). | *Used in a blind test*, static. Exercise 2 offsets the cut for people who already report SSI and enrolls no one new (`src/populace_dynamics/estimates/adjusted_poverty.py`); in its committed run, the registered alternative SSI rules leave the headline unchanged. Registration 19 computed SSI's asset test on Microcosm's frame through PolicyEngine-US, static and report-only, with a disclosed frame defect; its code merged in [#511][pr511]. Microcosm fixed that defect in its build code ([microcosm#1186][mc1186]); Registration 19 has not been rerun. [microcosm#1215][mc1215], open, concerns resources on the same frame. Nothing projects SSI. | Eligibility, resource, deeming and state-supplement worked examples; participation against SSA caseloads by age and type; then projected caseloads, payments and the poverty effect of a Social Security cut. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923); [#511][pr511]; d905, d1414 (open); [microcosm#1178][mc1178], [microcosm#1186][mc1186], [microcosm#1215][mc1215] | Register and run the rerun once a rebuilt, certified frame exists, and settle d1414 on a Registration 19 addendum. For projected SSI, build SSI0–SSI5R under Tier 1, starting with the input contract and the statutory worked examples (income design §4). | | Wealth, pensions and other income | Projects pension coverage and benefits, retirement-account balances and withdrawals, asset income and wealth ([DYNASIM4 fact sheet][d4]; [overview][ov]). | *Used in a blind test* for reported wealth only: exercise 2 turns PSID-reported wealth into an annuity income (`src/populace_dynamics/estimates/adjusted_poverty.py`). *None* for projection: the model projects no wealth, pensions or asset income. | Projected pension coverage and benefits, account balances and drawdowns, asset income and wealth by cohort and lifetime-earnings group, first against later PSID waves the model did not see, then against DYNASIM's published tables. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923); [#45][i45] reserves balance-sheet state for capital gains | Build WP1–WP6 under Tier 1: starting states, plan rules and a transition model that WP-G scores on later PSID waves it did not see (income design §4). | -| Poverty and income distribution | Reports poverty, adequacy and distributional effects of reforms from projected family income ([Five Democratic Approaches][fd]). | *Used in a blind test*, static. Exercise 2 computes adjusted poverty at 67 on incomes the PSID recorded: a 13 percent cut raises it 0.46 percentage points in the model and 2 points in DYNASIM3, a registered comparison with no pass or fail rule. Nothing projects family income. The follow-on test for the 1946–55 cohort (U2) is ratified but not registered. Its source loader reports no blockers ([#524][pr524], [#540][pr540]). Its structural pass on real PSID records, which computes structural and reconciliation counts and the named F17 component summaries but no poverty, stopped once in the birth law (d1649) and, under d1724 and after [#552][pr552], ran once more and completed with no mapping or reconciliation failure. [#556][pr556] fixed its final parameter block, and its merge ratified the specification (steps 4 to 6 of its execution record). | The comparator's income definition, unit, thresholds and ages, with uncertainty; for full parity, poverty and adequacy on projected family income by cohort and group. | [#524][pr524], [#525][pr525], [#539][pr539], [#540][pr540], [#542][pr542], [#544][pr544], [#546][pr546], [#552][pr552], [#556][pr556]; d637, d745, d1090, d1242, d1597, d1649, d1724 | Commit the pre-registration evidence file the specification pins, obtain and independently check a fresh forecast, then post the #42 registration (steps 7 and 8); the registration is Max's. | +| Poverty and income distribution | Reports poverty, adequacy and distributional effects of reforms from projected family income ([Five Democratic Approaches][fd]). | *Used in a blind test*, static. Exercise 2 computes adjusted poverty at 67 on incomes the PSID recorded: a 13 percent cut raises it 0.46 percentage points in the model and 2 points in DYNASIM3, a registered comparison with no pass or fail rule. Nothing projects family income. The follow-on test for the 1946–55 cohort (U2) is ratified but not registered. Its source loader reports no blockers ([#524][pr524], [#540][pr540]). Its structural pass on real PSID records, which computes structural and reconciliation counts and the named F17 component summaries but no poverty, stopped once in the birth law (d1649) and, under d1724 and after [#552][pr552], ran once more and completed with no mapping or reconciliation failure. [#556][pr556] fixed its final parameter block, and its merge ratified the specification (steps 4 to 6 of its execution record). [#577][pr577] committed the pre-registration evidence record the specification pins, and a fresh forecast, to be published with the registration, was frozen and independently checked (step 7). | The comparator's income definition, unit, thresholds and ages, with uncertainty; for full parity, poverty and adequacy on projected family income by cohort and group. | [#524][pr524], [#525][pr525], [#539][pr539], [#540][pr540], [#542][pr542], [#544][pr544], [#546][pr546], [#552][pr552], [#556][pr556], [#577][pr577]; d637, d745, d1090, d1242, d1597, d1649, d1724 | Post the #42 registration (step 8), which is Max's, then run the one-shot, which publishes its result whatever the outcome. | | Results by group | Urban's published DYNASIM output reports income for people 62 and older by age, sex, race and ethnicity, education and lifetime earnings ([Urban's DYNASIM output][out]); SSA's MINT adds rows by beneficiary type. | *Used in a blind test*, in part. Exercise 2 computes 15 of its source report's 36 rows and names the 21 it omits: race and ethnicity, education, labor-force experience, and own and shared lifetime earnings (`src/populace_dynamics/estimates/uniform_cut_tabulation.py`). Exercises 1 and 3 report by age and exercise 4 by sex. MINT's beneficiary-type classification is built (`src/populace_dynamics/group_breakdowns/common.py`); rows that need projected household income or poverty status are not computed (`docs/design/nasi_projection_groups_posthoc.md`). [#513][pr513], merged on 11 October, adds MINT's group categories as code only; no real-data group run is registered. | For each comparison, every cell DYNASIM or MINT publishes for that table, with the same definitions and denominators. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922); [#513][pr513]; [#367][i367] | Build GR1's group-definition registry and GR2a's constructors now; GR3's group runs of the four tests follow Max's rulings on their #42 registrations (mortality design §3.4). | | Behavioral responses to reform | Published DYNASIM4 analyses include assumed responses of wages, compensation and investment income to tax changes ([Five Democratic Approaches][fd]). | *None* for estimated responses. Exercise 3's registered claiming alternatives delay projected claims by the rise in the retirement age, capped at age 70; one of them moves only claims at 65 or later (`src/populace_dynamics/fra68_track/benefits.py`). Both are stylized assumptions with no quasi-experimental basis. | Claiming responses estimated from real policy changes and backtested against observed shifts after past increases in the retirement age; earnings and investment-income responses with their own registered estimates. | d515, which defers any claiming-response build until data identify one | Name, in a registration, the policy variation a claiming-response estimate would use. | @@ -141,7 +143,7 @@ them. Paths are relative to the repository root. | Capability | What DYNASIM does | Our status | Test that would show parity | Tracking | Next step | |-----------|----------------|------------------------|---------------|--------|-----------| -| National costs and financing | Reports trust-fund measures and the revenue and cost effects of reform plans ([Five Democratic Approaches][fd]). | *Report-only.* The first-estimates ledgers sum benefits and payroll taxes over the projected PSID sample, label them relative to that sample and estimate no national dollars (`src/populace_dynamics/estimates/publication.py`, `runs/first_estimates_v1.json`). Registration 18 compares the 2030 cost of a one-point COLA cut from December 2027 with the effects OACT and the Penn Wharton Budget Model publish, with a MINT5 row on benefits by age; it was posted on 30 September 2026, before any build code for it existed, and has not run. Nothing in the projections computes the income tax on benefits, part of which funds OASDI. | Per-provision changes in national OASDI cost and income by year against OACT and PWBM, with CBO second and DYNASIM one of several (d660), on a representative population with covered payroll. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922); [Registration 18][reg18]; d658, d660; [#113][i113] (M7) | Finish F0, Registration 18's build; its one run (F0R) follows Max's second Registration 18 comment. Build F1, the income tax on benefits, and F2a, covered-payroll arithmetic on invented inputs, now (mortality design §3.4). | +| National costs and financing | Reports trust-fund measures and the revenue and cost effects of reform plans ([Five Democratic Approaches][fd]). | *Report-only.* The first-estimates ledgers sum benefits and payroll taxes over the projected PSID sample, label them relative to that sample and estimate no national dollars (`src/populace_dynamics/estimates/publication.py`, `runs/first_estimates_v1.json`). Registration 18 compares the 2030 cost of a one-point COLA cut from December 2027 with the effects OACT and the Penn Wharton Budget Model publish, with a MINT5 row on benefits by age; it was posted on 30 September 2026, before any build code for it existed, and has not run. Nothing in the projections computes the income tax on benefits, part of which funds OASDI. | Per-provision changes in national OASDI cost and income by year against OACT and PWBM, with CBO second and DYNASIM one of several (d660), on a representative population with covered payroll. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922); [Registration 18][reg18]; d658, d660; [#113][i113] (M7) | Finish F0, Registration 18's build, in review as [#585][pr585]; its one run (F0R) follows Max's second Registration 18 comment. F1, the income tax on benefits, is in review ([#586][pr586]), after [#578][pr578] corrected its signed-split invariants in the design (§6). Build F2a, covered-payroll arithmetic on invented inputs, now (mortality design §3.4). | | Trust funds and the 75-year balance | Reports long-run financing effects and trust-fund depletion dates ([Five Democratic Approaches][fd]; [Can Social Security Be Solvent?][solv]). | *None* for national measures. A report-only analogue on a closed PSID frame (`runs/m2_pseudo_projection_v1.json`) sets its starting reserve so that its baseline runs out in the year Urban's 2015 analysis reports, then reports how provisions shift that year; it is not a trust-fund projection. Annual OASI and DI trust-fund ratios cannot be computed (`benchmarks/wall.md`). | Annual OASI, DI and OASDI income, cost and reserves, the 75-year actuarial balance and the depletion year, at baseline and per provision, against OACT and PWBM first. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922); [#113][i113] (M7); d660 | Build F4's trust-fund accounting on invented inputs now; F5, M7's gate, waits on Track B through B7, the Microcosm start and an admitted horizon (mortality design §3.4). | | Projections beyond 2030 | Projects 75 years ahead ([DYNASIM4 fact sheet][d4]; [overview][ov]); Urban's published output tables run to 2065 ([Urban's DYNASIM output][out]). | *Built, ungated.* The engine accepts any end year (`src/populace_dynamics/engine/loop.py`), but no population projection runs past 2030, and gate 3's cells are drafted in a registration not yet posted (`docs/plans/microcosm-start-registration-draft.md`). The report-only M2 analogue computes benefits on a closed frame through 2057 and keeps its ledger to 2075 (`runs/m2_pseudo_projection_v1.json`). Gate m6 scores 2015–2019 (its earnings cells, 2016 and 2018), reports 2020–2022 as a diagnostic, and says it does not certify extrapolation to 2100. Assumption paths to 2100 exist for the 2026 Trustees and CBO baselines, and the code refuses to run them on real data. | Near-term gates first (gate 3); then matched 2050, 2065 and 2070 comparisons and 75-year sensitivity surfaces on named assumption paths, each registered before it runs. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#113][i113] | Gate 3's draft cells, tolerance formula and pass rule are in `docs/plans/microcosm-start-registration-draft.md`; posting waits on Max's go (d947), and locking waits on the engine adapter and its bite check. The open-population lane builds OP10a's sensitivity surfaces and OP11a's matched population comparisons in its demographic phase (open-population design §3). | @@ -185,10 +187,10 @@ kept outside this repository; `docs/design/track_b_b0_1_audit.md`, [#1215][mc1215]); a projection started there needs a rebuilt, certified frame. B0.2, the source, exposure and power audit for every later empirical Track B gate, must freeze each gate's record - before that gate registers. Its plan is a draft ([#554][pr554]), and - a registry of held-out data for every Track B and open-population - gate is in review ([#560][pr560]); no B0.2 record is in the - repository yet. B2's medians are an open item for B0.2. + before that gate registers. Its plan is a draft ([#584][pr584], which replaced + [#554][pr554]), and a registry of held-out data for every Track B + and open-population gate merged in [#560][pr560]; no B0.2 record is + in the repository yet. B2's medians are an open item for B0.2. 2. **Bridge forward earnings to the projections.** B1 v2 reproduces gate m6's earnings histories by reconstruction, which d622 lets unlock B2 with a weaker label. It passed on 11 October @@ -428,3 +430,10 @@ cite repository paths, pull requests, issues and public URLs only. [pr567]: https://github.com/PolicyEngine/microcosm-dynamics/pull/567 [pr568]: https://github.com/PolicyEngine/microcosm-dynamics/pull/568 [pr570]: https://github.com/PolicyEngine/microcosm-dynamics/pull/570 +[pr576]: https://github.com/PolicyEngine/microcosm-dynamics/pull/576 +[pr577]: https://github.com/PolicyEngine/microcosm-dynamics/pull/577 +[pr578]: https://github.com/PolicyEngine/microcosm-dynamics/pull/578 +[pr583]: https://github.com/PolicyEngine/microcosm-dynamics/pull/583 +[pr584]: https://github.com/PolicyEngine/microcosm-dynamics/pull/584 +[pr585]: https://github.com/PolicyEngine/microcosm-dynamics/pull/585 +[pr586]: https://github.com/PolicyEngine/microcosm-dynamics/pull/586 From a7564e4a26e62bdb3395cd35496c2ce4742d09fd Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 25 Oct 2026 04:17:13 -0400 Subject: [PATCH 2/3] Ledger delta r1 fixes: step 7's forecast is outside the repo; death adapter; P2 merged Review r1 (20261025-023327-ledger-587-review-r1) asked for two medium fixes: - Poverty: say that step 7's forecast was frozen and checked in the lane's evidence folder outside the repository, which the registration cites by SHA-256 with its headline and interval, rather than imply a repository record. - Alignment: OP6 leaves death draws to the adapter the mortality lane chooses (the baseline's, or SM once admitted); SM is designed to preserve expected deaths within each age, sex and year cell up to a logged clipping residual (open-population design 6.4; mortality design 6). Also merges master 9a344a1a and records that P2 merged in #561 (critical path, step 2), re-verified at 9a344a1a. Co-Authored-By: Claude Opus 5.5 --- docs/parity-ledger.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/parity-ledger.md b/docs/parity-ledger.md index 05204d41..bb099b45 100644 --- a/docs/parity-ledger.md +++ b/docs/parity-ledger.md @@ -17,7 +17,8 @@ status, the critical path and the rulings were re-verified at cover, the poverty row's U2 entry and the known gaps at `f8ffc7d9` the same day. The rows on covered earnings, births, alignment, poverty, and national costs and financing, and step 1 of the critical path, -were re-verified at `9967dfd6` on 25 October 2026.* +were re-verified at `9967dfd6` on 25 October 2026, and step 2's +successor entry at `9a344a1a`, after P2 merged.* ## Bottom line @@ -116,7 +117,7 @@ them. Paths are relative to the repository root. | Births | Adds people through births and aligns fertility to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *Gate passed* for fertility rates (gate 2). *Report-only* for newborns entering a projection: gate m6's engine adds them (316 in its reference draw) and scores none. The blind projections add no newborns. A newborn gets a link to the mother, her household and her weight, and no father link. An opt-in, report-only birth step can draw births from the 2026 Trustees' or CBO's fertility schedule (`src/populace_dynamics/baselines/fertility.py`); no registered test uses it, and nothing aligns the gated fertility model to those targets. | Projected births against vital statistics; newborns' links to both parents, households and starting states; their entry into later earnings, disability and benefit processes. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#412][i412] | Build the demographic phase: OP0.1's source, exposure, access and power audit merged ([#567][pr567]), and OP1's harness is in review ([#566][pr566]); OP2 links newborns to both parents and scores `gate_birth` (open-population design §3). | | Immigration and emigration | Adds immigrants and models emigration ([DYNASIM4 fact sheet][d4]). | *Built, ungated*, and never run on real data. A scheduled-entrant module labels itself report-only (`src/populace_dynamics/engine/entrant_schedule.py`), but its readers for arrival totals and donor records were not carried over, no committed run has added an immigrant, and entrants get no earnings, disability, claiming or entitlement processes (`src/populace_dynamics/engine/entrant_domains.py`). The US engine has no emigration. | Arrivals and departures sized to OACT's assumptions; entrants' covered-work histories and insured status; their benefit receipt against SSA statistics. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#412][i412]; design PR [#218][pr218] closed unmerged | Build OP3's arrivals and OP4's emigration law in the demographic phase; entrants' histories (OP8) wait for the economic phase (open-population design §3). | | Starting population | Starts from a representative sample built mainly from the Survey of Income and Program Participation, with histories drawn from survey and administrative records ([DYNASIM4 fact sheet][d4]; [overview][ov]). | *Used in a blind test* for closed PSID cohorts: all four comparisons start from PSID members with the PSID's own weights. *None* for a projection started from Microcosm's population: a plan and a draft registration exist (`docs/plans/microcosm-start.md`, `docs/plans/microcosm-start-registration-draft.md`), with no code. Registration 19 ran a static, report-only SSI analysis on Microcosm's frame and disclosed a frame defect; its code merged in [#511][pr511] (`runs/pe_us_depletion_cut_population_v1.json`). Microcosm fixed that defect in its build code ([microcosm#1186][mc1186]), and four more frame defects are open: [microcosm#1212][mc1212], [#1213][mc1213], [#1214][mc1214] and [#1215][mc1215]. | Starting earnings histories (H1), the starting population against SSA counts, gate 3's first-year cells, then an end-to-end projection and reform comparison started from Microcosm. | d947 (parked); [#511][pr511]; [microcosm#1178][mc1178], [microcosm#1186][mc1186] | Post the Microcosm-start registration (d947), then build the frame reader. | -| Alignment and a representative population | Aligns fertility, mortality, disability, immigration and labor force participation to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *None* for alignment: the engine has no alignment step, and gate m6 records its alignment report as not computed. *Gate passed, not used in a blind test*, for transport: gate w1 places the PSID-fitted processes on Microcosm's CPS-based frame and matches 43 cross-sectional cells and one ordering check (`runs/gate_w1_candidate4_v1.json`, `runs/NOTES-gate_w1_candidate4.md`). It certifies no transition, and its SSA benefit cells are report-only. | An alignment step to the actuaries' demographic and labor targets that keeps households consistent, with its displacement from the unaligned path published; gated SSA benefit and payment totals. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#151][i151]; design PR [#217][pr217] closed unmerged; [#531][i531], which reports that w1's family-A marital and household targets come from a frame that [microcosm#1212][mc1212] finds skewed toward couples, and d1406 (open) on how to amend them. w1's committed run is unchanged | Build OP6's alignment layer and OP7's `gate_pop` in the demographic phase. OP6 aligns births and emigration; deaths come from the mortality lane's SM, which holds OACT's total deaths in expectation (open-population design §6.4, revision 14 in [#576][pr576]); OP12's gated benefit totals wait for the economic phase (open-population design §3). | +| Alignment and a representative population | Aligns fertility, mortality, disability, immigration and labor force participation to targets from SSA's actuaries ([DYNASIM4 fact sheet][d4]). | *None* for alignment: the engine has no alignment step, and gate m6 records its alignment report as not computed. *Gate passed, not used in a blind test*, for transport: gate w1 places the PSID-fitted processes on Microcosm's CPS-based frame and matches 43 cross-sectional cells and one ordering check (`runs/gate_w1_candidate4_v1.json`, `runs/NOTES-gate_w1_candidate4.md`). It certifies no transition, and its SSA benefit cells are report-only. | An alignment step to the actuaries' demographic and labor targets that keeps households consistent, with its displacement from the unaligned path published; gated SSA benefit and payment totals. | `docs/design/open_population.md` ([#557][pr557], approved under d1925); [#151][i151]; design PR [#217][pr217] closed unmerged; [#531][i531], which reports that w1's family-A marital and household targets come from a frame that [microcosm#1212][mc1212] finds skewed toward couples, and d1406 (open) on how to amend them. w1's committed run is unchanged | Build OP6's alignment layer and OP7's `gate_pop` in the demographic phase. Under revision 14's design, OP6 will align births and emigration and leave death draws to the mortality adapter the mortality lane chooses: the baseline's, or SM once admitted. SM is designed to preserve the baseline's expected deaths within each age, sex and year cell, up to a logged clipping residual (open-population design §6.4, revision 14 in [#576][pr576]; mortality design §6). OP12's gated benefit totals wait for the economic phase (open-population design §3). | ### Benefit rules and payments @@ -135,7 +136,7 @@ them. Paths are relative to the repository root. |-----------|----------------|------------------------|---------------|--------|-----------| | Supplemental Security Income (SSI) | Applies SSI's income and resource rules and models eligibility, participation and benefits ([DYNASIM3 primer][d3]). | *Used in a blind test*, static. Exercise 2 offsets the cut for people who already report SSI and enrolls no one new (`src/populace_dynamics/estimates/adjusted_poverty.py`); in its committed run, the registered alternative SSI rules leave the headline unchanged. Registration 19 computed SSI's asset test on Microcosm's frame through PolicyEngine-US, static and report-only, with a disclosed frame defect; its code merged in [#511][pr511]. Microcosm fixed that defect in its build code ([microcosm#1186][mc1186]); Registration 19 has not been rerun. [microcosm#1215][mc1215], open, concerns resources on the same frame. Nothing projects SSI. | Eligibility, resource, deeming and state-supplement worked examples; participation against SSA caseloads by age and type; then projected caseloads, payments and the poverty effect of a Social Security cut. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923); [#511][pr511]; d905, d1414 (open); [microcosm#1178][mc1178], [microcosm#1186][mc1186], [microcosm#1215][mc1215] | Register and run the rerun once a rebuilt, certified frame exists, and settle d1414 on a Registration 19 addendum. For projected SSI, build SSI0–SSI5R under Tier 1, starting with the input contract and the statutory worked examples (income design §4). | | Wealth, pensions and other income | Projects pension coverage and benefits, retirement-account balances and withdrawals, asset income and wealth ([DYNASIM4 fact sheet][d4]; [overview][ov]). | *Used in a blind test* for reported wealth only: exercise 2 turns PSID-reported wealth into an annuity income (`src/populace_dynamics/estimates/adjusted_poverty.py`). *None* for projection: the model projects no wealth, pensions or asset income. | Projected pension coverage and benefits, account balances and drawdowns, asset income and wealth by cohort and lifetime-earnings group, first against later PSID waves the model did not see, then against DYNASIM's published tables. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923); [#45][i45] reserves balance-sheet state for capital gains | Build WP1–WP6 under Tier 1: starting states, plan rules and a transition model that WP-G scores on later PSID waves it did not see (income design §4). | -| Poverty and income distribution | Reports poverty, adequacy and distributional effects of reforms from projected family income ([Five Democratic Approaches][fd]). | *Used in a blind test*, static. Exercise 2 computes adjusted poverty at 67 on incomes the PSID recorded: a 13 percent cut raises it 0.46 percentage points in the model and 2 points in DYNASIM3, a registered comparison with no pass or fail rule. Nothing projects family income. The follow-on test for the 1946–55 cohort (U2) is ratified but not registered. Its source loader reports no blockers ([#524][pr524], [#540][pr540]). Its structural pass on real PSID records, which computes structural and reconciliation counts and the named F17 component summaries but no poverty, stopped once in the birth law (d1649) and, under d1724 and after [#552][pr552], ran once more and completed with no mapping or reconciliation failure. [#556][pr556] fixed its final parameter block, and its merge ratified the specification (steps 4 to 6 of its execution record). [#577][pr577] committed the pre-registration evidence record the specification pins, and a fresh forecast, to be published with the registration, was frozen and independently checked (step 7). | The comparator's income definition, unit, thresholds and ages, with uncertainty; for full parity, poverty and adequacy on projected family income by cohort and group. | [#524][pr524], [#525][pr525], [#539][pr539], [#540][pr540], [#542][pr542], [#544][pr544], [#546][pr546], [#552][pr552], [#556][pr556], [#577][pr577]; d637, d745, d1090, d1242, d1597, d1649, d1724 | Post the #42 registration (step 8), which is Max's, then run the one-shot, which publishes its result whatever the outcome. | +| Poverty and income distribution | Reports poverty, adequacy and distributional effects of reforms from projected family income ([Five Democratic Approaches][fd]). | *Used in a blind test*, static. Exercise 2 computes adjusted poverty at 67 on incomes the PSID recorded: a 13 percent cut raises it 0.46 percentage points in the model and 2 points in DYNASIM3, a registered comparison with no pass or fail rule. Nothing projects family income. The follow-on test for the 1946–55 cohort (U2) is ratified but not registered. Its source loader reports no blockers ([#524][pr524], [#540][pr540]). Its structural pass on real PSID records, which computes structural and reconciliation counts and the named F17 component summaries but no poverty, stopped once in the birth law (d1649) and, under d1724 and after [#552][pr552], ran once more and completed with no mapping or reconciliation failure. [#556][pr556] fixed its final parameter block, and its merge ratified the specification (steps 4 to 6 of its execution record). [#577][pr577] committed the pre-registration evidence record the specification pins. Step 7's fresh forecast was frozen and independently checked in the lane's evidence folder, outside the repository, so a reader can't check it here yet; the registration cites the forecast's SHA-256 and states its headline and interval. | The comparator's income definition, unit, thresholds and ages, with uncertainty; for full parity, poverty and adequacy on projected family income by cohort and group. | [#524][pr524], [#525][pr525], [#539][pr539], [#540][pr540], [#542][pr542], [#544][pr544], [#546][pr546], [#552][pr552], [#556][pr556], [#577][pr577]; d637, d745, d1090, d1242, d1597, d1649, d1724 | Post the #42 registration (step 8), which is Max's, then run the one-shot, which publishes its result whatever the outcome. | | Results by group | Urban's published DYNASIM output reports income for people 62 and older by age, sex, race and ethnicity, education and lifetime earnings ([Urban's DYNASIM output][out]); SSA's MINT adds rows by beneficiary type. | *Used in a blind test*, in part. Exercise 2 computes 15 of its source report's 36 rows and names the 21 it omits: race and ethnicity, education, labor-force experience, and own and shared lifetime earnings (`src/populace_dynamics/estimates/uniform_cut_tabulation.py`). Exercises 1 and 3 report by age and exercise 4 by sex. MINT's beneficiary-type classification is built (`src/populace_dynamics/group_breakdowns/common.py`); rows that need projected household income or poverty status are not computed (`docs/design/nasi_projection_groups_posthoc.md`). [#513][pr513], merged on 11 October, adds MINT's group categories as code only; no real-data group run is registered. | For each comparison, every cell DYNASIM or MINT publishes for that table, with the same definitions and denominators. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922); [#513][pr513]; [#367][i367] | Build GR1's group-definition registry and GR2a's constructors now; GR3's group runs of the four tests follow Max's rulings on their #42 registrations (mortality design §3.4). | | Behavioral responses to reform | Published DYNASIM4 analyses include assumed responses of wages, compensation and investment income to tax changes ([Five Democratic Approaches][fd]). | *None* for estimated responses. Exercise 3's registered claiming alternatives delay projected claims by the rise in the retirement age, capped at age 70; one of them moves only claims at 65 or later (`src/populace_dynamics/fra68_track/benefits.py`). Both are stylized assumptions with no quasi-experimental basis. | Claiming responses estimated from real policy changes and backtested against observed shifts after past increases in the retirement age; earnings and investment-income responses with their own registered estimates. | d515, which defers any claiming-response build until data identify one | Name, in a registration, the policy variation a claiming-response estimate would use. | @@ -201,8 +202,8 @@ kept outside this repository; `docs/design/track_b_b0_1_audit.md`, high for people aged 25 to 44. Under d1659 a successor law rests on evidence independent of that result. Under d1803 it is S1, specified and tested on invented data ([#555][pr555]), with P2 in - reserve ([#561][pr561], draft); its registration comes to the - maintainer separately. It would be attempt 2 on Track B's attempt + reserve, also built on invented data and merged in [#561][pr561]; + registering either comes to the maintainer separately. It would be attempt 2 on Track B's attempt ledger (`docs/design/track_b_attempt_ledger.md`), and two failed successors pause the mechanism. H, the history recorder, follows a passing B2 and keeps labor, covered and earnings-test earnings apart From 6f8946630d0f4685dfbe9e532f5ada19be3c8cd3 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 25 Oct 2026 04:37:38 -0400 Subject: [PATCH 3/3] Ledger delta r2 fixes: drop the unposted registration's content; P2 merged in forward earnings Review r2 (20261025-041855-ledger-587-review-r2) asked for two medium fixes: - Poverty: drop the clause on what the registration will cite; the repository can't support a claim about a comment not yet posted. - Forward earnings: P2 (#561) is merged, not a draft in review; registering either S1 or P2 as attempt 2 comes to the maintainer separately. The header now names both P2 entries re-verified at 9a344a1a. Co-Authored-By: Claude Opus 5.5 --- docs/parity-ledger.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/parity-ledger.md b/docs/parity-ledger.md index bb099b45..30086984 100644 --- a/docs/parity-ledger.md +++ b/docs/parity-ledger.md @@ -17,8 +17,8 @@ status, the critical path and the rulings were re-verified at cover, the poverty row's U2 entry and the known gaps at `f8ffc7d9` the same day. The rows on covered earnings, births, alignment, poverty, and national costs and financing, and step 1 of the critical path, -were re-verified at `9967dfd6` on 25 October 2026, and step 2's -successor entry at `9a344a1a`, after P2 merged.* +were re-verified at `9967dfd6` on 25 October 2026, and P2's entries +in the forward-earnings row and step 2 at `9a344a1a`, after P2 merged.* ## Bottom line @@ -96,7 +96,7 @@ them. Paths are relative to the repository root. |-----------|----------------|------------------------|---------------|--------|-----------| | Earnings histories | Builds each person's lifetime earnings history from survey and administrative records ([overview][ov]; [DYNASIM4 fact sheet][d4]). | *Gate passed* for the generated earnings process: gate 1 passes (`runs/gate1_rank_knn_v5.json`), scoring 1998–2022 at ages 25–59, not whole careers. *Used in a blind test* for the recorded PSID careers that exercises 1, 3 and 4 read; the paper reports that about half of the career years through 2010 for the 7,486 cohort members who reach 62 between 1979 and 2030 hold imputed or zero values. Those careers' fill rules fail `gate_epuf_fill`, which scored them as its reference arm on 878,481 held-out people in SSA's Earnings Public-Use File: the odd-year neighbour mean fails 100 of 183 gating cells, and the zero pre-career rule fails 131 of 136 (`runs/epuf_fill_gate_test_v1.json`). The gate locked on 13 October ([#515][pr515]) and scored once ([#537][pr537]). *Gate passed, not used in a blind test*, for the learned pre-career fill, which fails 0 of 136 cells. The learned odd-year fill fails 8 of 183, so the gate adopts it as an improvement without certifying it. Both fills are opt-in, and no blind test uses them. | Whole careers set against SSA's Earnings Public-Use File by birth cohort and sex: years without covered earnings, low-earnings years, persistence and the 35-year AIME, including low earners and broken careers. | [#515][pr515], [#516][pr516], [#537][pr537]; d927, d929 (parked); [result][resepuf] | d929 decides whether exercises 1, 3 and 4 rerun with the learned fills. | | Covered earnings and agreement with SSA records | Separates employment that Social Security covers from noncovered employment ([DYNASIM3 primer][d3]). | *None* for a covered/noncovered split: the projections and the Axiom bridge treat all PSID labor income as covered. CE v2's design note is merged (`docs/design/covered_earnings_v2.md`), and nothing in it has run. *Report-only* for the comparison of the PSID's own 1998–2004 earnings with SSA's public-use file: `gate_epuf` closed without locking and has scored no model output (`docs/amendments/gate_epuf_registration_proposal.md`). | A covered/noncovered split of PSID earnings, checked against SSA's totals of covered workers and taxable earnings, and a fresh gate on the public-use file with power beyond gate 1. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923), which retires the correction campaign in favour of a lean successor, CE v2; CE0, its design note, merged in [#568][pr568]. The campaign's [#403][i403] and closed [#405][pr405] are history | Build CE1–CE5: coverage rules, the crosswalk, the classifier on invented data and the registered gate against the public-use file (income design §4). CE1's coverage-rule registry is in review ([#583][pr583]). | -| Forward earnings | Projects employment, hours, wages and pension coverage each year ([DYNASIM4 fact sheet][d4]). | *Gate passed* for gate m6; *Gate failed* for B2; not used in a blind test. The forward law, fitted on PSID earnings through 2014 at ages 25–64, passes gate m6 in 4 of 5 seeds (`runs/gate_m6_candidate3_v1.json`). In every seed, its two-year earnings growth at ages 25 to 44 runs below the PSID's. B2 carried the same law from the 2010 cohort to the earnings years 2012 and 2014, which the PSID collected in its 2013 and 2015 interviews, and failed on 18 October ([result][resb2]). Its projected zero-earnings rate for people aged 25 to 44 at those interviews is about 35 percent above the PSID's: the gap is 0.30 on a log scale against a tolerance of 0.20, and it exceeds the tolerance in all 5 of the test's household splits. Three of its four gated bounds also exceed their tolerances; only the 90th percentile of positive earnings at ages 25 to 44 passes every check (`runs/track_b_b2_score.json`). The law has no fitted distribution above 64, and both projection tests draw no earnings after 2010 (`src/populace_dynamics/cola_track_a/adapters.py`). | Track B's sequence: B1 v2 reproduces gate m6's histories; B2 tests the bridge from the 2010 cohort to the law's 2014 boundary on PSID earnings for 2012 and 2014. Under d1606 it gates four level cells, the 90th percentile and the zero-earnings rate by cohort, and reports twelve more, the medians among them. B3 refits ages 25–69 with gates at 62–64, 65–66 and 67–69; B3L backtests 2006 to 2022; an independent joint holdout comes before any 2030 claim. Because B2 gates levels only, growth and persistence need their own test. | [#505][pr505], [#526][pr526], [#545][pr545], [#547][pr547], [#548][pr548], [#555][pr555], [#561][pr561] (draft); d515, d622, d693, d765, d781, d782, d1342, d1606, d1659, d1803; [B1 v2 registration][regb1], [B2 registration][regb2] | B1 v2 passed on 11 October ([result][resb1]). B2's failure is attempt 1 on Track B's cumulative attempt ledger (`docs/design/track_b_attempt_ledger.md`); two failed successors would pause the mechanism. Under d1659 a successor must rest on evidence independent of B2's 2012 and 2014 result. Under d1803 it is S1, whose participation gate reads earnings relative to the national average wage index, with P2, a history-based participation gate, in reserve. S1 is specified and tested on invented data only ([#555][pr555], `docs/design/track_b_s1_spec.md`); P2 is a draft in review ([#561][pr561]). Neither has read PSID data or registered; registering S1 as attempt 2 comes to the maintainer separately. | +| Forward earnings | Projects employment, hours, wages and pension coverage each year ([DYNASIM4 fact sheet][d4]). | *Gate passed* for gate m6; *Gate failed* for B2; not used in a blind test. The forward law, fitted on PSID earnings through 2014 at ages 25–64, passes gate m6 in 4 of 5 seeds (`runs/gate_m6_candidate3_v1.json`). In every seed, its two-year earnings growth at ages 25 to 44 runs below the PSID's. B2 carried the same law from the 2010 cohort to the earnings years 2012 and 2014, which the PSID collected in its 2013 and 2015 interviews, and failed on 18 October ([result][resb2]). Its projected zero-earnings rate for people aged 25 to 44 at those interviews is about 35 percent above the PSID's: the gap is 0.30 on a log scale against a tolerance of 0.20, and it exceeds the tolerance in all 5 of the test's household splits. Three of its four gated bounds also exceed their tolerances; only the 90th percentile of positive earnings at ages 25 to 44 passes every check (`runs/track_b_b2_score.json`). The law has no fitted distribution above 64, and both projection tests draw no earnings after 2010 (`src/populace_dynamics/cola_track_a/adapters.py`). | Track B's sequence: B1 v2 reproduces gate m6's histories; B2 tests the bridge from the 2010 cohort to the law's 2014 boundary on PSID earnings for 2012 and 2014. Under d1606 it gates four level cells, the 90th percentile and the zero-earnings rate by cohort, and reports twelve more, the medians among them. B3 refits ages 25–69 with gates at 62–64, 65–66 and 67–69; B3L backtests 2006 to 2022; an independent joint holdout comes before any 2030 claim. Because B2 gates levels only, growth and persistence need their own test. | [#505][pr505], [#526][pr526], [#545][pr545], [#547][pr547], [#548][pr548], [#555][pr555], [#561][pr561] (merged); d515, d622, d693, d765, d781, d782, d1342, d1606, d1659, d1803; [B1 v2 registration][regb1], [B2 registration][regb2] | B1 v2 passed on 11 October ([result][resb1]). B2's failure is attempt 1 on Track B's cumulative attempt ledger (`docs/design/track_b_attempt_ledger.md`); two failed successors would pause the mechanism. Under d1659 a successor must rest on evidence independent of B2's 2012 and 2014 result. Under d1803 it is S1, whose participation gate reads earnings relative to the national average wage index, with P2, a history-based participation gate, in reserve. S1 is specified and tested on invented data only ([#555][pr555], `docs/design/track_b_s1_spec.md`); P2 is also built on invented data and merged in [#561][pr561] (`docs/design/track_b_p2_spec.md`). Neither has read PSID data or registered; registering either as attempt 2 comes to the maintainer separately. | ### Disability, mortality and claiming @@ -136,7 +136,7 @@ them. Paths are relative to the repository root. |-----------|----------------|------------------------|---------------|--------|-----------| | Supplemental Security Income (SSI) | Applies SSI's income and resource rules and models eligibility, participation and benefits ([DYNASIM3 primer][d3]). | *Used in a blind test*, static. Exercise 2 offsets the cut for people who already report SSI and enrolls no one new (`src/populace_dynamics/estimates/adjusted_poverty.py`); in its committed run, the registered alternative SSI rules leave the headline unchanged. Registration 19 computed SSI's asset test on Microcosm's frame through PolicyEngine-US, static and report-only, with a disclosed frame defect; its code merged in [#511][pr511]. Microcosm fixed that defect in its build code ([microcosm#1186][mc1186]); Registration 19 has not been rerun. [microcosm#1215][mc1215], open, concerns resources on the same frame. Nothing projects SSI. | Eligibility, resource, deeming and state-supplement worked examples; participation against SSA caseloads by age and type; then projected caseloads, payments and the poverty effect of a Social Security cut. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923); [#511][pr511]; d905, d1414 (open); [microcosm#1178][mc1178], [microcosm#1186][mc1186], [microcosm#1215][mc1215] | Register and run the rerun once a rebuilt, certified frame exists, and settle d1414 on a Registration 19 addendum. For projected SSI, build SSI0–SSI5R under Tier 1, starting with the input contract and the statutory worked examples (income design §4). | | Wealth, pensions and other income | Projects pension coverage and benefits, retirement-account balances and withdrawals, asset income and wealth ([DYNASIM4 fact sheet][d4]; [overview][ov]). | *Used in a blind test* for reported wealth only: exercise 2 turns PSID-reported wealth into an annuity income (`src/populace_dynamics/estimates/adjusted_poverty.py`). *None* for projection: the model projects no wealth, pensions or asset income. | Projected pension coverage and benefits, account balances and drawdowns, asset income and wealth by cohort and lifetime-earnings group, first against later PSID waves the model did not see, then against DYNASIM's published tables. | `docs/design/income_and_resources.md` ([#559][pr559], Tier 1 approved under d1923); [#45][i45] reserves balance-sheet state for capital gains | Build WP1–WP6 under Tier 1: starting states, plan rules and a transition model that WP-G scores on later PSID waves it did not see (income design §4). | -| Poverty and income distribution | Reports poverty, adequacy and distributional effects of reforms from projected family income ([Five Democratic Approaches][fd]). | *Used in a blind test*, static. Exercise 2 computes adjusted poverty at 67 on incomes the PSID recorded: a 13 percent cut raises it 0.46 percentage points in the model and 2 points in DYNASIM3, a registered comparison with no pass or fail rule. Nothing projects family income. The follow-on test for the 1946–55 cohort (U2) is ratified but not registered. Its source loader reports no blockers ([#524][pr524], [#540][pr540]). Its structural pass on real PSID records, which computes structural and reconciliation counts and the named F17 component summaries but no poverty, stopped once in the birth law (d1649) and, under d1724 and after [#552][pr552], ran once more and completed with no mapping or reconciliation failure. [#556][pr556] fixed its final parameter block, and its merge ratified the specification (steps 4 to 6 of its execution record). [#577][pr577] committed the pre-registration evidence record the specification pins. Step 7's fresh forecast was frozen and independently checked in the lane's evidence folder, outside the repository, so a reader can't check it here yet; the registration cites the forecast's SHA-256 and states its headline and interval. | The comparator's income definition, unit, thresholds and ages, with uncertainty; for full parity, poverty and adequacy on projected family income by cohort and group. | [#524][pr524], [#525][pr525], [#539][pr539], [#540][pr540], [#542][pr542], [#544][pr544], [#546][pr546], [#552][pr552], [#556][pr556], [#577][pr577]; d637, d745, d1090, d1242, d1597, d1649, d1724 | Post the #42 registration (step 8), which is Max's, then run the one-shot, which publishes its result whatever the outcome. | +| Poverty and income distribution | Reports poverty, adequacy and distributional effects of reforms from projected family income ([Five Democratic Approaches][fd]). | *Used in a blind test*, static. Exercise 2 computes adjusted poverty at 67 on incomes the PSID recorded: a 13 percent cut raises it 0.46 percentage points in the model and 2 points in DYNASIM3, a registered comparison with no pass or fail rule. Nothing projects family income. The follow-on test for the 1946–55 cohort (U2) is ratified but not registered. Its source loader reports no blockers ([#524][pr524], [#540][pr540]). Its structural pass on real PSID records, which computes structural and reconciliation counts and the named F17 component summaries but no poverty, stopped once in the birth law (d1649) and, under d1724 and after [#552][pr552], ran once more and completed with no mapping or reconciliation failure. [#556][pr556] fixed its final parameter block, and its merge ratified the specification (steps 4 to 6 of its execution record). [#577][pr577] committed the pre-registration evidence record the specification pins. Step 7's fresh forecast was frozen and independently checked in the lane's evidence folder, outside the repository, so a reader can't check it here yet. | The comparator's income definition, unit, thresholds and ages, with uncertainty; for full parity, poverty and adequacy on projected family income by cohort and group. | [#524][pr524], [#525][pr525], [#539][pr539], [#540][pr540], [#542][pr542], [#544][pr544], [#546][pr546], [#552][pr552], [#556][pr556], [#577][pr577]; d637, d745, d1090, d1242, d1597, d1649, d1724 | Post the #42 registration (step 8), which is Max's, then run the one-shot, which publishes its result whatever the outcome. | | Results by group | Urban's published DYNASIM output reports income for people 62 and older by age, sex, race and ethnicity, education and lifetime earnings ([Urban's DYNASIM output][out]); SSA's MINT adds rows by beneficiary type. | *Used in a blind test*, in part. Exercise 2 computes 15 of its source report's 36 rows and names the 21 it omits: race and ethnicity, education, labor-force experience, and own and shared lifetime earnings (`src/populace_dynamics/estimates/uniform_cut_tabulation.py`). Exercises 1 and 3 report by age and exercise 4 by sex. MINT's beneficiary-type classification is built (`src/populace_dynamics/group_breakdowns/common.py`); rows that need projected household income or poverty status are not computed (`docs/design/nasi_projection_groups_posthoc.md`). [#513][pr513], merged on 11 October, adds MINT's group categories as code only; no real-data group run is registered. | For each comparison, every cell DYNASIM or MINT publishes for that table, with the same definitions and denominators. | `docs/design/mortality_groups_financing.md` ([#558][pr558], approved under d1922); [#513][pr513]; [#367][i367] | Build GR1's group-definition registry and GR2a's constructors now; GR3's group runs of the four tests follow Max's rulings on their #42 registrations (mortality design §3.4). | | Behavioral responses to reform | Published DYNASIM4 analyses include assumed responses of wages, compensation and investment income to tax changes ([Five Democratic Approaches][fd]). | *None* for estimated responses. Exercise 3's registered claiming alternatives delay projected claims by the rise in the retirement age, capped at age 70; one of them moves only claims at 65 or later (`src/populace_dynamics/fra68_track/benefits.py`). Both are stylized assumptions with no quasi-experimental basis. | Claiming responses estimated from real policy changes and backtested against observed shifts after past increases in the retirement age; earnings and investment-income responses with their own registered estimates. | d515, which defers any claiming-response build until data identify one | Name, in a registration, the policy variation a claiming-response estimate would use. |