Skip to content

Update the parity ledger for B0.2's protocol and counts, S0.1, SSI0, G part 2 and D4's first part - #597

Draft
MaxGhenis wants to merge 3 commits into
masterfrom
ledger-delta-20261103
Draft

MaxGhenis wants to merge 3 commits into
masterfrom
ledger-delta-20261103

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

This updates docs/parity-ledger.md for what merged after its last check (#590): B0.2's plan, protocol and counts (#584), S0.1 (#588), SSI0 (#573), G part 2 with R2 part (b) (#563) and the first part of D4 (#574), along with OP1's random-stream change (#591). At 97003ac2, master after #574, it re-verifies six rows, the critical path's opening and its steps 1 and 3, the section on the 24-month plan and ruling d1338's row. It changes no other file.

Rows at 97003ac2

  • Mortality differences (S0.1: source, exposure, access and power audit for SM2–SM4 and ED1–ED2 #588, Serve OP1's adapter draws from DirectRNGStreams by default #591). S0.1 merged as a frozen audit record that admits no gate (docs/design/s0_1_source_audit.md:1-4, 43-50). The tracking cell now says it merged, and the next step starts at SM2; SM3 still follows a ruling (docs/design/mortality_groups_financing.md:397-398). OP1's random-stream test, merged in Serve OP1's adapter draws from DirectRNGStreams by default #591, imports SM1's step and runs it on an invented roster with an invented model (tests/open_population/test_stream_injection.py:91, 5200, 5273-5287, 5344-5350). The sentence on who names SM1 now lists that test. A scoped rg over src/, scripts/ and tests/ finds no projection, runner or gate that calls SM1.
  • Education (S0.1: source, exposure, access and power audit for SM2–SM4 and ED1–ED2 #588). The tracking cell says S0.1 merged, and the next step starts at ED1; ED2 still waits on the Microcosm start (docs/design/mortality_groups_financing.md:397, 399).
  • Family maximum (Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563). G part 2 applies the 1972 savings clause under SSA's operational reading by default and keeps the literal reading's refusal behind SavingsClauseReading.LITERAL_REFUSAL (src/populace_dynamics/track_b/gross_benefits.py:242-252, 5660-5664, 5820, 5861). It refuses by name an unknown history, a payment procedure its captured sources leave unsettled and a change among the worker and beneficiaries subject to the family maximum (:475-477, 5667-5677; tests/test_track_b_gross_benefits_saving_absence.py:134). It still refuses beneficiaries entitled as auxiliaries or survivors on more than one record (gross_benefits.py:473, 5371-5394). family_benefits_after_deductions deducts first, then redistributes the maximum (:4591, 4602). The worked-example registry grows from 29 to 37 entries, all eight new ones from POMS (tests/data/track_b/gross_benefit_examples.yaml). The row drops its draft wording, and the next step goes straight to I.
  • Earnings test (Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563). src/populace_dynamics/track_b/ret_ledger.py no longer defines DEDUCTION_BEFORE_REDUCTION. R2 passes an auxiliary's own earnings-test deduction to G, which readjusts the family's rates under a binding maximum (:1611-1633). R2 refuses with FAMILY_CONTEXT_REQUIRED when the record lacks that month's family facts (:121, 1611). The row says R2 part (b) merged, and the next step names only H and I.
  • SSI (Federal SSI interface and source-to-input contract (SSI0) #573, Aggregate-table captures and readers, part 1 (D4) #574). SSI0 calls only policyengine.py's public API (src/populace_dynamics/income_resources/ssi/_child.py:1) and pins policyengine 6.10.2 with PolicyEngine-US 2.2.1 (ssi/pin.json:58-60). It computes potential federal SSI under a frozen annual state, giving each month a twelfth of annual income and holding resources constant for the year (docs/analysis/ssi0/source_contract.md:75-77; ssi/runner.py:99-104). It keeps every attempted case in its denominator (ssi/runner.py:1-11). It refuses any household with a member under 65 (:296-301), couples where either member lacks citizenship or the take-up flag (:249-260), retirement accounts with a balance or periodic-payment eligibility (:331-336) and joint claims by tax dependents (:261-271), among other cases. Its input contract gives each inventoried SSI-chain input, for the PSID, SIPP and Microcosm, a source, an assumption or a refusal, and a source names a route that awaits a later milestone (docs/analysis/ssi0/source_contract.md:5-7; ssi/input_contract.json). Only its own tests call the SSI runner; they use invented households (tests/income_resources/ssi_invented.py:1). The wheel-pinning script loads the child worker only to call its digest helper (scripts/income_resources/pin_ssi.py:22-28, 99-101). D4's part 1 pins POMS SI 01415's supplement payment tables (src/populace_dynamics/income_resources/aggregate_poms.py:1), and its SSA registry holds only Tables 4.B1, 4.B2, 4.B10 and 4.B11, so SSA's SSI tables wait for part 2 (data/external/snapshots/income_resources_d4_v1/ssa_registry.json; aggregate_tables.py:1-16). The next step starts at SSI1 and SSI2 (docs/design/income_and_resources.md:208-210).
  • Wealth, pensions and other income (Aggregate-table captures and readers, part 1 (D4) #574). D4's pension reader pins report-only WP8 inputs (src/populace_dynamics/income_resources/aggregate_pensions.py:1). Every entry in its registry carries the role report_only_wp8. The entries come from the Federal Reserve's Financial Accounts, the Labor Department's Private Pension Plan Bulletin and IRS Statistics of Income tables on individual retirement arrangements (data/external/snapshots/income_resources_d4_v1/pensions_registry.json). The tracking cell now lists D4 with the merged work instead of the drafts. Outside D4's own tests, only the birth-evidence exclusion list names its readers, so the status stands.
  • Critical path (Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563, Track B B0.2: source, exposure, access and power records for B3 through J #584). The opening lists G part 2 with R2 part (b) among the built rules. Step 1 says B0.2's plan, frozen protocol and counts merged in Track B B0.2: source, exposure, access and power records for B3 through J #584, which replaced the closed, unmerged Track B B0.2: source, exposure, access and power records for B3 through J #554 (docs/design/track_b_b0_2_plan.md:3-8; docs/design/track_b_b0_2_protocol.md:3). It also says the per-gate records and their reviews come next (plan §3, :119-145). Step 3 says G part 2 merged.
  • The 24-month plan (Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563). R2 part (b) leaves the list of missing pieces, since Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 built it.
  • Ruling d1338 (Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563). The row drops "not yet built" and "(draft)".
  • Header. It now records the 3 November verification. Between 29 October and 3 November 2026, B0.2's plan, protocol and counts merged, and so did S0.1, SSI0, G part 2 and the first part of D4.

Links

One definition joins the list, [pr591]. Definitions go from 89 to 90 and uses from 249 to 246, with none unresolved, none unused, no duplicate definitions and the 4 inline links unchanged. Four next-step cells drop a merged PR (#588 twice, #563 twice), the SSI row's #573 moves from the next step to the status, and the mortality status gains #591.

Merges that change no claim

Wording that stands

Checks

Every changed claim cites code, tests or docs at 97003ac2, never a PR body. Merge status comes from master's merge commits, and open status from the 10:50Z list. I made no network or gh calls and ran no test suite, since the change touches one Markdown file.

🤖 Generated with Claude Code

Record that S0.1 (#588), B0.2's plan, protocol and counts (#584), SSI0
(#573), G part 2 with R2 part (b) (#563) and the first part of D4
(#574) merged, and name OP1's random-stream test (#591) among the tests
that run SM1's step. Update the rows on mortality differences,
education, the family maximum, the earnings test, SSI, and wealth,
pensions and other income; the critical path's opening and its steps 1
and 3; the section on the 24-month plan; and ruling d1338's row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
social-security-model Ready Ready Preview Nov 9, 2026 12:35pm UTC

Request Review

G refuses a saving-clause membership change only among the worker and
beneficiaries subject to the family maximum. Its refusal of entitlement
across records covers auxiliaries and survivors, not a worker's own
benefit. The SSI row states SSI0's frozen annual state and limits the
input contract to its inventoried SSI-chain inputs. Its list of SSI0's
refusals now reads as partial, since SSI0 also refuses joint claims by
tax dependents. It says nothing outside SSI0's tests computes SSI with
it, since the wheel-pinning script calls SSI0's digest helper.

Step 1 calls #554 closed and unmerged. The G row states G part 2's
POMS worked examples as current coverage. The header drops the merge
interval, which moves to the pull request, gives the 3 November check
its year, and names the plan section and the saving-clause ruling
without a duration or a ruling number.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Ledger: B0.2's protocol and counts, S0.1, SSI0, G part 2 and D4's first part merged Update the parity ledger for B0.2's protocol and counts, S0.1, SSI0, G part 2 and D4's first part Nov 7, 2026
Put SSI0's first two sentences and its input-contract sentence in the
active voice, and name SSI0 as the actor in its refusals. Attach each
path in step 1's B0.2 sentence to its own file, so the plan and the
protocol no longer read as the closed PR's. Call the clause the
family-payment saving clause in the G row, as the header and d1338's
row do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 7d361a93 Deployed Nov 9, 2026 by vercel[bot]
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