Repository navigation
Conversation
POMS GN 02603.045, .050, .060 (dual-entitlement deduction before reduction and its worked examples), RS 00615.003, .010, .310, .315, .590, .712, .758, .770-.778, RS 00202.005, .100, RS 00209.001, .015, GN 02608.100 and RS 00605.360 (as revised in 2025 for the Social Security Fairness Act). The manifest records each URL, UTC retrieval time, byte count, SHA-256, transmittal and page date. Captured by the orchestrating session on 2026-10-11; manifest and README by a GPT-6.1 Sol Subfleet lane (20261011-074803-trackb-g-build). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fuse Issue #495: record refusals are deferred until the family's inputs are checked, 402(q) reduction months are bounded by cohort (FRA - 744), delayed credits for births 1914-1916 are bounded by the RS 00615.692E chart, and cross-field checks are added. A household helper evaluates one month against per-record 403(a)(5) guards; the guard's over-refusal scope is stated plainly. Newly computed: dual entitlement where the own RIB is reduced for age (the PTAP formula, GN 02603.050C, reproducing GN 02603.060 A.5, A.8, A.9, B.2); disabled widow(er)s at 50-59 from January 1984 (RS 00615.310); government pension offset ignored from January 2024 (Social Security Fairness Act, per GN 02608.100); independently entitled divorced spouses (402(b)(4)(A), RS 00202.005, .100); one or two parents (402(h), RS 00209.015). Still refused, with reasons: combined family maximums, multiple auxiliary records, 403(a)(5) (pending ruling d1338), and the historical cases listed in the design note. Statutory conformance only; no population claim. Built by a GPT-6.1 Sol Subfleet lane (20261011-074803-trackb-g-build). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One registry holds 27 statutory worked examples (205 figures checked verbatim against their captures) with configuration tags; a coverage test requires every supported class to have a registered example or a stated reason for having invented reference cases only. A script enumerates an invented configuration lattice (110,880 cells) and writes counts supported, refused by reason and invalid; a test regenerates the report byte for byte. These are invented-configuration denominators and make no population claim. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The lane's delivery report is not committed; the PR body carries the mutation list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e, the depletion-cut provenance gate Widow(er) reduction periods: with SSA's January 2 to January 1 cohort convention a birth year fixes the RS 00615.301B.2 period, so exactly that period is required and reduction months are bounded by it, raised as InvalidFamilyInput before any refusal in both construction styles. RS 00615.712: families with a beneficiary protected by the widow(er) DRC saving clause are refused by name and kept in denominators; direct RecordState snapshots must attest whether such pre-June-1978 history is possible, else refuse. Known prior DIB entitlement can no longer be hidden by a modern eligibility year (RS 00615.736B.2b). Depletion-cut artifact: its provenance gate pinned G's source file. A unit-tier compatibility proof now rebuilds every recorded G input of the committed illustrative couple and requires all seven recorded output fields to match exactly in every month; the gate runs that proof and then excludes exactly gross_benefits.py from the source pin. The artifact, its recorded commit and its 'track-b-g-v1' text are unchanged. Lows: the ssb-table-a1 registry tag (binding) and conformance JSON; the WEP comment (RS 00202.100); the RIB-LIM Parisi refusal narrowed to a limit that binds (RS 00615.320A.3); pre-July-1980 DIB refused for direct snapshots. Fixes from the independent GPT-6.1 Sol review at a0ad004; built by a Subfleet lane (20261012-050610-trackb-g-fix1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eriods, unknown history stays unknown RS 00615.340: a reduced widow(er) or surviving divorced spouse with an entitled child in care in a month gets at least the mother's/father's amount for that month (from 1/73); a higher widow(er) amount is unchanged. Beneficiaries carry an explicit child_in_care input naming the entitled child; unknown care status with an entitled child on the record is refused by name. Reproduces RS 00615.340's two examples and pays $750 rather than $715 in the reviewer's case. The floor months are R3 ARF crediting months. Reduction periods: RS 00615.301B.2 permits only 60, 62, ..., 84 months; any other period is InvalidFamilyInput in every entry style, with or without a birth year. RS 00615.712: a modern eligibility year with no first-DIB date no longer implies there was no earlier DIB (RS 00615.736B.2b). Where the saving clause could apply, the caller must attest widow_drc_savings_clause=False or supply complete history, else the month is refused and counted. Fixes from the independent GPT-6.1 Sol review at 383a59d; built by a Subfleet lane (20261012-075311-trackb-fix-g-2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…terfactual; record rulings d1418 and d1338 _agrees compared with abs(observed - expected) > tolerance, which is false for NaN; non-finite bundle values now raise the same input error before any coverage refusal. Each reading listed in Axiom's register of source disagreements is marked at the line that decides it (# Source conflict us:oasdi-...). A test-only helper executes both two-parent readings ($825 against $750); the public behaviour stays a refusal (ruling d1418). The design note records d1418 and d1338 (403(a)(5): SSA's operational reading, implemented in G part 2). Built by a Subfleet lane (20261012-105518-trackb-fix-g-3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tiers Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e months Surviving divorced caregiver: the hypothetical 202(g) mother/father the care floor compares against is subject to the family maximum (RS 00615.682, .340, .010); only the actual 202(e)/(f) surviving divorced spouse stays outside it under 403(a)(3)(C). The reviewer's case now pays $715 (not $750), total $2,215, and RS 00615.682's figures reproduce through this path. Divorced spouse with the worker's entitled child in care: 402(q)(5)(B) and RS 00615.010/.201A.2 exempt the month from age reduction; with own RIB the amount is the unreduced spouse benefit less the reduced own RIB ($340, total $1,840 in the reviewer's case), with outside-maximum status kept. A divorced spouse with an entitled child must attest current care, and without current care an unknown or protected first-entitlement care history refuses by name when it could change the aged amount (RS 00615.010: care in the first month keeps a divorced spouse unreduced after the child's benefit ends). Conformance report regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A person's cohort now resolves from either birth-year field (Beneficiary.birth_year or OwnBenefit.birth_year); conflicting values raise InvalidFamilyInput, and the resolved cohort bounds both own-RIB and auxiliary reduction months before any coverage refusal, in every entry point (direct RecordState, built record_state, household, evaluate_family). The reviewer's 1935 widow with a 37-month own-RIB reduction now raises instead of entering the GPO refusal denominator. The divorced-spouse care-history refusal now compares settled auxiliary payables, so a case paying $0 under every history (own RIB at or above the unreduced spouse benefit, 402(k)(3)(A)) is supported; the refusal still fires wherever the payable can differ. Round-3 $715 and $340 controls unchanged; conformance report regenerated byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A person who is the worker on one record and a beneficiary on another now has one cohort across the household: birth years are compared wherever two sources supply one, a conflict raises InvalidFamilyInput, and the known cohort is carried into that person's beneficiary rows before family validation, so an impossible auxiliary RF37 for a 1935 worker raises before any coverage refusal or guard advancement (it was paying $298.30, or counting as a GPO refusal weighted 7/3). RF36 pays $300; valid GPO and multiple-record refusals keep their denominators. The settled-by-payable care-history note now appends to an earlier diagnostic instead of replacing it. Conformance report regenerated byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…re-1978 RIB A worker who is not entitled now keeps its cohort through household validation, so the same person's spouse row on another record with an impossible 37-month reduction (1935 cohort, at most 36) raises InvalidFamilyInput before computation, refusal or guard advancement, with and without GPO (it paid $372.90). Own-RIB reductions whose entitlement could precede January 1978 and whose amount the inputs cannot settle (RS 00615.005C.2's historical reduction and PIA) now refuse as own_rib_history_before_1978, kept in denominators. The design note states that the 1929 support boundary is a conservative implementation boundary narrower than the source's January 2, 1928 cohort. Conformance report regenerated (cells unchanged, one new refusal witness). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…history for every reduced benefit Retirement eligibility is validated against the resolved worker cohort independently of worker entitlement and before any refusal or guard advancement, so a direct RecordState for an unclaimed worker raises the same InvalidFamilyInput as the built record_state instead of counting a GPO refusal. A Hypothesis differential now checks that the direct and built record states, the household entry point and household_month_outcome give the same amounts, refusal reason or input error for generated families (unclaimed and deceased workers, omitted and conflicting birth years, dual entitlement, GPO, multiple records). reduced_benefit_history_before_1978 extends the pre-1978 refusal from own RIB to every reduced auxiliary and survivor role whose entitlement could precede January 1978 and whose amount the inputs cannot settle (RS 00615.005C.2), kept in denominators; settled exceptions and input-error priority are preserved. The reviewer's 1912 spouse and widow now refuse. Two readings the sources leave open (pre-1978 disabled widow(er) awards under RS 00615.301B.3 versus .005C.2, and some dual-entitlement sequences) stay refused, with both alternatives tested. Conformance report regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…usal precedence One validation pass now runs first in every entry point (direct RecordState, built record_state, household, household_month_outcome, evaluate_family). It checks every public input field for exact types (no bool where an int is required, enum members of the right class), ranges and cross-field consistency, so a wrong-class condition or a boolean birth year raises InvalidFamilyInput, with no outcome, nothing added to a refusal denominator, and no guard advanced. A Hypothesis property corrupts one field of generated valid families and checks exactly that in every entry point. All entry points share one refusal precedence, and the cross-entry-point differential now covers pre-1983 combinations, so refusal reasons must match too. The disabled-widow .715 instruction is cited as RS 00615.301B.1.e, where the capture places it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er the whole public API Every public G dataclass (inputs and results) and FamilyConfigurationUnsupported now validate their own fields at construction: exact types, enum members of the right class (a refusal's reason must be an UnsupportedReason), ranges and non-negative money. So a malformed refusal or result cannot be built, and count_family_outcomes and other consumers cannot count one. Every exported function, including retirement_survivor_family_maximum and applicable_cola_percents, validates its arguments before any coverage decision. SavingsClauseGuard.evaluate validates its whole input before changing state. A Hypothesis property corrupts one argument or field of every public name and checks InvalidFamilyInput, no outcome, no denominator entry and no guard mutation; a test fails if a public name is added without coverage. Existing tests that built invalid objects outside pytest.raises now build them inside it. The RS 00615.768 registry entries cite F.1/F.2, and each entry's cited section must exist in its capture and contain its figures. No supported dollar amount changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 10 found two medium classes. A caller could replace a child's age-adjusted rate with zero while keeping its payable amount, which lowered the 403(a)(5) protected total and admitted a month that must refuse. And original_benefit accepted a widow on a retirement record and ignored a basis given for a child on a survivor record. Results, refusals and outcomes are now built only by G's own computation. Public construction, dataclasses.replace and copy are input errors, every consumer (the guard, aggregates, report witnesses) rejects unsealed or altered values, and sealing reconciles payable, offsets, maximum shares and caps, binding flags and subject totals. The guard keeps detached sealed snapshots. One immutable role/record table governs declarations, family validation, seal-time checks and the exported helper, with a property over all 27 role/kind pairs and a zero-tolerance helper-versus-family differential. No supported amount changes; the conformance report regenerates byte for byte. Existing tests now take results from G computations and compare every public field instead of building replaced copies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tiers Brings in #494's statutory delayed-credit sibling, R2 (#528), R3 (#529) and the d1408 diagnostic. Conflicts: the design note keeps G's scope line and the corrected $802.80 sentence and takes #494's sealed-oracle paragraph; the property file takes #494's whole-window differential with G's deadline setting; the support helper imports Fraction as F for both sides. Tiers are recounted by collection. Known break, fixed in the next commit: G's round-9 and round-11 refusal and outcome contracts reject the R2 and R3 refusals and outcomes that master builds on G's types (76 failures in the R2 and R3 test files). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…denominator Merging master showed that G's round-9 and round-11 contracts rejected the refusals and outcomes that R2 (#528) and R3 (#529) build on G's types: RETConfigurationUnsupported subclassed G's refusal, arf.py wrapped ARF results in G's FamilyOutcome, and recompute and arf raised G's refusal with their own reason enums. 76 R2/R3 tests failed. The seal machinery moves to a package-private module, track_b/_provenance.py, shared by every layer. Each refusal class is bound to exactly one reason enum (G, RET, ARF, recomputation) under FamilyConfigurationUnsupported. count_family_outcomes counts sealed outcomes from every layer, and the layer counters agree with it. evaluate_arf, evaluate_recomputation and evaluate_ret admit only their own layer's unaltered results, and results taken back as money inputs (apply_arf on an ARFResult, R2 allocations, grace decisions) are checked. G's money consumers reject other layers' results. The birth-evidence exclusion lists add the new module. No amount changes in G, R2 or R3; G's conformance report regenerates byte for byte. The R2 widow/CDB test now declares child-in-care (False and the named child), which G v2 requires; every assertion is kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… inputs, detached state Round 11 found five gaps in the cross-layer contract, each also present on master. Each is closed as a class across G, R2, R3 and _provenance: - One shared helper admits only built-in numbers (and rejects numeric, text and collection subclasses), so a mutable Fraction subclass can no longer change a sealed weight, a protected 403(a)(5) total or an aggregate after admission. - Sealed results, refusals, outcomes and denominators refuse pickle (every protocol) and copyreg reduction; the restore helpers are gone. A tampered pickle can no longer restore an impossible ARF birth-date/FRA pair. Persisting work means storing declared inputs and recomputing. - Every public entry point rebuilds its declared input tree through the validating constructors before any coverage decision, so an input made invalid after construction is an input error, never a refusal or a denominator row. - Guard state and accessor results are detached; mutating a returned next_month can no longer skip a qualifying month. - The formula-maximum COLA property claimed a COLA alone never trips the guard. Dime-rounded shares can sum lower, so the property now states the guard contract (refuse a lower total after a qualifying increase, keep the row), the generator includes parents, both counterexamples are pinned, and the design note is corrected. No amount, refusal or example changes; G's conformance report regenerates byte for byte and a 2,000-case R2/R3 differential matches master. Tests that round-tripped pickles now assert that serialization raises; tests of seal-time validation call the private capability and say so. The added validation makes the conformance lattice slower (178s, from 41s). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ated once Round 12 found that the input boundary trusted isinstance and passed unknown objects through, so forged enum members and objects faking __class__ became counted refusals. Dicts and sets were rebuilt before their raw keys were checked, so an invalid element could vanish first. A callable-dataclass compute callback was rejected, and inputs were reconstructed repeatedly. Every public argument and declaration field now declares a schema. The boundary admits only built-in scalars by exact type, canonical enum members by identity, declared declaration classes by exact type (rebuilt field by field) and exact built-in containers whose raw contents are checked before anything is built or hashed. Anything else, iterators included, is an input error with no denominator row. Callbacks are checked as callables, not rebuilt as data. Each public call is validated once; computation runs on the owned snapshot through private helpers. The three design notes state the threat model. R3 used to accept iterators for credit-month and condition fields; they are now input errors, and R3's iterator tests use lists, with separate tests that iterators are rejected unconsumed. No amount, refusal or example changes; G's conformance report regenerates byte for byte, and its regeneration costs about 1.26x CPU against 5e68159, back to back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completes the conformance review of Track B G (the gross-benefit layer, #492), closes #495, and computes five configurations G used to refuse. Statutory conformance only: invented families and SSA's published worked examples. No population claim. Version
track-b-g-v2.What changes
gross_benefits.pyfrom its source pin. The artifact, its recorded commit and itstrack-b-g-v1provenance text are unchanged.Invariants (each a Hypothesis property; full mapping in
docs/design/track_b_g_gross_benefits.md)Family total within the maximum (divorced spouses and worker DRCs outside it, as the law says); proportional shares within a dime; maximum monotone in PIA and AIME; adding a non-dually-entitled auxiliary never raises another (adding a dually entitled one can, and that minimized case is pinned as intended); dual entitlement never below the own benefit; refusals always raise and stay in denominators; input errors before refusals; households of unrelated records equal their records; determinism and order independence; dime amounts and whole-dollar floors; the 403(a)(5) guard contract; the PTAP formula against an independent reference; DWB, SSFA, parent and IEDS bounds and differentials; registry completeness; lattice conservation. Differentials against the float oracle
ss/benefits.pykeep their documented tolerances.Still refused (named, kept in denominators)
Pre-1983 eligibility or payment months, pre-July-1980 DIB, combined family maximums and multiple auxiliary records (G part 2), deemed spouses, more than two parents or the circular two-parent own-RIB interval, DIB guarantee PIAs, DIB after a reduced RIB, workers' compensation, GPO before 2024, administrative finality, some dual-entitlement sequences, unresolved Parisi interactions (own delayed credits, a binding RIB-LIM, zero only after auxiliary age reduction), Parisi before October 1999, IEDS before 1985 or with WEP before 2024, non-AIME formula PIAs, 403(a)(5) (pending d1338), pre-1917 delayed credits.
Readings that need Max's judgment (each refused; both sides pinned)
These will go to Max as one decision card with the other Track B readings.
Review
Independent GPT-6.1 Sol review round 1 (a0ad004) requested changes: widow boundary-cohort periods, the RS 00615.712 saving clause, and the depletion-cut provenance gate (all medium), plus four lows; all fixed in 7b9408e. Round 2 is running.
Checks
712 targeted tests pass locally (G suites, conformance report, registry, depletion-cut artifact and compatibility, birth evidence); black and ruff clean; tier policy passes; protected files untouched. 57 sources pinned in
tests/data/track_b/gross_benefit_sources/manifest.json.axiom: n/a: not a country-model change. G is a Python statutory reference per d515; rulespec-us had no 42 U.S.C. 403 encoding when G was first built (#492).
🤖 Generated with Claude Code