Skip to content

Track B R3: a spouse reentitled before FRA keeps the original reduction months - #564

Merged
MaxGhenis merged 2 commits into
masterfrom
trackb-readings-r3-20261023
Oct 23, 2026
Merged

MaxGhenis merged 2 commits into
masterfrom
trackb-readings-r3-20261023

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Draft: waiting on an independent Sol review and a blind adjudication of the readings.

Part of re-framing Track B's "Needs Max's judgment" items under Max's 2026-10-20 delegation (single readings are the session's call under P1–P4, logged in the source-conflict rulings; patterns go to Max). This PR covers the R3 note and the one R3 reading that changes money. The G and R2 items follow in a separate PR after #563 lands, so as not to collide with it.

What changes

Reading taken: a reduced spouse terminated and reentitled before FRA (us:oasdi-arf-spouse-reentitlement-credits, P1 statute first). RS 00615.201A.1 keeps the original reduction months until an ARF at FRA; RS 00615.491A removes the terminated months at reentitlement. The Act decides it:

  • 402(q)(1)(B)(i) reduces each month before retirement age by "the number of months in the reduction period for such benefit (determined under paragraph (6))";
  • (ii) substitutes the adjusted period (which (q)(7)(C) shortens by terminated months) only "if such benefit is (I) for the month in which such individual attains age 62, or (II) for the month in which such individual attains retirement age";
  • the spouse's reduction period starts with the original certificate ((q)(6)(A)(ii)), which stays effective "for the month in which it is filed and for any month thereafter" ((q)(5)(B)(i)).

So apply_arf now computes pre-FRA months instead of refusing them. On the note's invented case (born 1960-01-02, $650 unreduced, first reduced 2022-01, terminated 2022-02, reentitled 2022-03), it pays $422.50 ($422) for March 2022 through December 2026 and $425.20 ($425) from the January 2027 ARF. The .491A reading would pay $425.20 from March 2022, $2.70 a month more. The reason value arf_spouse_reentitlement_before_fra is withdrawn, together with its duplicate in ARFResult's coverage check.

Refusals kept, re-framed in the note:

  • Widow(er) FRA for births 1911-01-02 to 1912-01-01 (us:oasdi-survivor-fra-1911-births). This conflict can't change any amount the module computes. Every reduced entitlement of this cohort predates 1978 (before FRA, under either 62 or 65), and arf_initial_entitlement_before_1978 refuses those independently. The helper must return one month, so it still refuses. If a pre-1978 path is ever built, Pub. L. 92-603 §102(i) ("for months after December 1972") supports POMS's 1/2/1911 boundary. 20 CFR 404.409(b)'s 1/2/1912 boundary would then be a regulation contradicting its statute, which P2 sends to Max.

  • Nonbinding widow(er) child-in-care ARF months (us:oasdi-arf-widow-child-in-care-credits). The two sources diverge:

    • 402(q)(7)(D) credits only months "in which the reduction in the amount of such benefit was determined under paragraph (5)(D)". (q)(7)(B) gives wives the plainer child-in-care test.
    • POMS RS 00615.482 agrees with the statute.
    • 20 CFR 404.412(a)(4) copies the wife's wording for widows.

    P2 returns a regulation that contradicts its statute to Max, and whether P2 covers SSA's 20 CFR at all is unruled. So this case and that pattern are queued together for Max, recommending the statute. Until he rules, the configuration stays refused and counted.

  • Float-AIME and ties-to-even diagnostics, and the RS 00615.015 date erratum, are labelled as not being source conflicts.

Invariants (executed)

  • Pre-FRA invariance: for any terminated history and any month before FRA, the payment equals the never-terminated claim's payment and G's 60-month spouse reduction, at zero tolerance. Hypothesis: test_reentitled_spouse_keeps_original_months_until_fra.
  • FRA credit: at FRA the ARF credits exactly the terminated months before FRA, so the benefit never falls at FRA (same property).
  • Statutory quotes: the quotes and both amounts are pinned (test_spouse_reentitlement_takes_the_statutory_timing), and the public API too (test_spouse_reentitled_before_fra_keeps_original_months_until_fra). The # Source conflict marker sits at the timing line, and test_source_conflict_markers_are_adjacent_to_runtime_decisions checks it.

Mutation checks

Each check ran in an isolated copy of src/, with its import path verified:

Mutant Result
.491A timing (adjust at reentitlement) 3 of 3 new tests fail
Drop the terminated-month credit at FRA 3 of 3 fail
Re-add a pre-FRA refusal 3 of 3 fail
Restored 3 pass

Verification

  • Full Track B suite: 11,411 passed, 3 skipped (pytest -n 4, staged-data roots set to nonexistent paths).
  • Repo-wide black -l 79 --check and ruff check are clean.
  • Tier counts are unchanged against master 6967142 (one enum-parametrized case removed, one property added), so tests/tier_counts.json is untouched.

The note quotes and ids are logged in ~/reviews/us-hub/source-conflicts/RULINGS.md. The public register (rulespec-us known-source-conflicts.yaml) is updated after merge, per its protocol.

axiom: n/a: microcosm-dynamics statutory reference, not a PolicyEngine country model.

🤖 Generated with Claude Code

…on months

42 U.S.C. 402(q)(1)(B) reduces every month before retirement age by the
reduction period's months and substitutes the adjusted period, which
(q)(7)(C) shortens by terminated months, only for the month of attaining
62 or retirement age. RS 00615.201A.1 states that timing; RS 00615.491A's
removal at reentitlement departs from it. apply_arf now computes the
pre-FRA months (invented $650 spouse: $422.50 from reentitlement, $425.20
from the January 2027 ARF) instead of refusing them, and the reason value
arf_spouse_reentitlement_before_fra is withdrawn.

The R3 note's judgment section becomes "Readings taken and refusals
kept": the 1911-birth widow FRA stays refused (it cannot change a
supported amount, since every reduced entitlement of that cohort predates
1978), and nonbinding widow child-in-care credits stay refused pending
Max's d1920 (20 CFR 404.412(a)(4) reaches past 402(q)(7)(D)).

Source conflict us:oasdi-arf-spouse-reentitlement-credits (P1).

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

vercel Bot commented Oct 23, 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 Oct 23, 2026 5:58pm UTC

Request Review

… qualify the care conflict

Sol review r1 approved 9419001 with three low documentation findings:
- the 1911 cohort attains 62 during 1973 and 65 during 1976 (not only in
  January); the test now checks both boundary birth dates under both ages;
- Pub. L. 92-603 §102(i) and §102(g) are now excerpted, verbatim, from the
  same pinned LII 402 body (byte-identical re-fetch noted in the manifest)
  and the effective-date phrase is asserted;
- the child-in-care section states the arguable broader meaning of
  "determined under paragraph (5)(D)" alongside the narrower one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 23, 2026 19:54
@MaxGhenis
MaxGhenis merged commit 4fc2b9f into master Oct 23, 2026
12 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merged at reviewed head 3e707e5 as 4fc2b9f.

  • Reviews: GPT-6.1 Sol r1 APPROVED 9419001 with three low documentation findings, all fixed in 3e707e5. Sol r2 delta APPROVED 3e707e5.
  • Blind check: a separate blind Opus adjudication of the R3 readings, run on clean master without this PR's conclusions, reached the same three outcomes.
  • CI: all checks green at 3e707e5.
  • Tier counts: tests/tier_counts.json unchanged, so no tier slot was needed.
  • Logged: the reading is in the source-conflict rulings as us:oasdi-arf-spouse-reentitlement-credits (P1). The nonbinding widow child-in-care item waits on Max's decision on whether SSA's 20 CFR counts as 'regulations are law'.
  • Follow-up: the rulespec-us register entry for this id moves from refused to computed once the register session picks it up.

This branch was successfully deployed

1 active deployment
Preview — 3e707e57 Deployed Oct 23, 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