Repository navigation
Conversation
…fore first use #530's round-14 review found that the shared attribute writer treated deleting __notes__ as an assignment and read args[0], so removing a refusal's exception notes raised IndexError in G, R2, ARF and recomputation. Assignment keeps its list-of-strings check; deletion goes through the original __delattr__. A four-layer test adds and deletes notes and checks provenance and the denominator. Stateful constructors now register their declared enums before the first explicit call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…al saving clause Max ruled d1802: the rules lane builds G part 2 (the operational saving clause, per d1338) and R2 part (b), which removes R2's deduction_before_reduction_part_b refusal. Deduction before reduction (Act 203(a)(4); GN 02603.020, .040, .050): - family_benefits_after_deductions and its household form take declared monthly deductions and apply the reduction for the maximum after them. Non-deductees share PTAP / (TOTOB - deductees' OBs), capped at OB and dime-floored. Temporary deductions leave separate households unchanged until permanent (GN 02603.050D, .090). - Supported reasons are an auxiliary's or survivor's own earnings-test deduction (full or partial, permanent or estimated), no child in care, and Parisi, which is unchanged through the new path. Workers' compensation, prisoner and drug-addiction suspensions, foreign work, penalty, maritime and election-certificate events are refused by name. - Reproduced: GN 02603.060 A.1, A.2, B.1, C.1, C.2 (and A.5, A.8, A.9, B.2 through the new path), RS 02501.130B and RS 02501.160 examples 1 and 2. 403(a)(5): SavingsClauseReading on the guard, with SSA_OPERATIONAL the default (RS 00630.400, RS 00615.801B.2) and LITERAL_REFUSAL the named alternative. Existing tests that pin the literal guard now select it. A fall not caused by a PIA increase starts no protection, and a COLA alone starts one only with an age-reduced beneficiary. Membership changes while a protection is active, and unsettled concurrent changes, are refused. R2 part (b): monthly RETFamilyMonth context lets an auxiliary's own deduction release maximum room to the others through the new G entry point. Final deductions flow to R3, and a delayed household increase creates no own-work credit. Missing family facts refuse as deduction_readjustment_requires_family_context. Two source readings are taken under the 2026-10-20 delegation and logged: partial temporary deductions follow RS 02501.160's worked example (us:oasdi-ret-temporary-partial-deduction), and protected equal rates round up to the least sufficient dime, as Act 203(a)(5) requires (us:oasdi-saving-clause-operational-rate-rounding). The brief asked for an absolute invariant that adding a deduction never lowers another beneficiary's rate. GN 02603.050A.1's "no other deduction" condition and .050C's age reserve make that false: a minimized PIA $48 case is pinned, and the invariant is stated as the rules allow. A cross-head harness shows 240 R2 and 240 downstream R3 results unchanged from master, and six rows that R2 refused now compute. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ecord mutations and verification; recount tiers The 356,400-row lattice is unchanged. A separate 16-row invented deduction denominator is added, and every one of the 37 G refusal reasons has an executed witness. The mutation and verification records pin the 13 one-line mutations and the lane's commands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Oct 23, 2026
Merged
Master added the holdout registry and an ARF change. Only the tier files conflicted; they take master's version and are recounted (unit 18,880; total 25,429). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol's round-1 review of #563 found seven issues. This part derives two-record entitlement from G's facts, adds the savings-clause membership refusal, checks own benefits in both months and looks up the R1 year before releasing held refusals. Part 2 finishes and verifies the round. Subfleet job 20261025-031318-trackb-fix-g2-2 (a1) wrote this part. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This part adds the no-child-in-care age checks under Act 203(c)(2) and 20 CFR 404.421(a), rejects zero-amount events in every layer, rewrites the R2 statutory-order step, rewords the reservation case as deferred coverage, and records fifteen new mutations and the verification ledger. Subfleet job 20261025-105211-trackb-fix-g2-2b (gpt-6.1-sol) wrote this work and left it uncommitted; salvage ref 0d96d2e1 preserved its tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 2 added two under_full_retirement_age lines to the example registry after the fix lane's conformance check, so the report's registry hash went stale and CI's byte-for-byte test failed at bbcdf7f. Regeneration changes that one line; all 356,400 configurations match. The verification ledger records the before and after hashes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The previous commit's message says the ledger records the before and after hashes, but that edit did not apply. This commit adds them. The ledger's earlier sha256 values stay as measurements from before the refresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol's second review found three more defects. R2 accepted an FRA declaration that the family's G birth cohort contradicted, which let an own-earnings deduction run after FRA. RecordYear now checks the NH and every auxiliary against the twelve months each cohort allows, and own delayed credits against the snapshot month, before any coverage refusal. Act 203(f)(9) and RS 02501.021B.3 apply the old-age FRA to every role, so this needed no ruling. An OWN_EARNINGS_TEST event whose payable plus NH reservation equals the original benefit withholds nothing, so it's now an input error, even on a held record. An age-reduced divorced spouse outside the maximum could start operational protection. Act 203(a)(3)(C) determines the other benefits as if that spouse were absent, so operational membership, the age basis, the age trigger and the person count now skip anyone outside the maximum. That person's own rate stays ordinary, and the literal reading doesn't move. The tier files add this round's 176 unit tests to the previous sum; the coordinator's slot recount replaces them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s first (#563 round 4) Sol's third review kept the round-3 fixes and found three mediums, plus an open question on two POMS exceptions. An outside divorced spouse's deduction counted as an "other deduction" under GN 02603.050A.1, so a governed child got $175, not $200. Act 203(a)(3)(C) and GN 02603.020B keep outside people out of the governed decision, so deduction decisions and the reservation total now read subject rows only. Outside events still apply to their own cash. The same audit showed an outside event was what activated a subject's NH reservation, so a reservation now reduces cash with or without an event. A held coverage refusal hid a contradiction in declared NH entitlement. apply_ret_year now compares every month's declared facts before any G computation, through a helper shared with G. The lane's audit of the loop adds raw own-PIA spouse eligibility, NH original rates and DIB gross rates. Checks that need G's money stay after it. RecordYear now rejects two known cohorts for one person across months and fields. A missing cohort adds no constraint. GN 02603.050A.1 and A.2 don't settle how a sole full permanent deduction composes with a zero-rate dual row. The rule adopts neither reading: a new named refusal fires only where their exact payments differ. The conformance report gains that reason and nothing else moves, and 240 R2 and 240 R3 cross-head results stay unchanged. Adds 637 unit tests and eleven caught mutations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol's fourth review found that a held G refusal still masked contradictions in RIB gross, auxiliary original rates and widow eligibility. Reproducing it showed round 4's preflight had already gone too far the other way: RS 00615.754A.3's first example under administrative finality raised InvalidFamilyInput, though the capture says "the rate to the NH is protected by administrative finality and cannot be changed". A protected rate rests on another PIA, so that mismatch isn't a contradiction. A preflight now compares a fact before a held refusal only when nothing declared on the record or that beneficiary can lawfully change it. One table classifies every RecordCondition, BeneficiaryCondition and UnsupportedReason against six facts: NH original, DIB gross, RIB gross, auxiliary original, spouse raw own-PIA eligibility and other own-benefit entitlement. _check_settled_family_facts compares settled facts only, through G's own validated helpers, and catches only FamilyConfigurationUnsupported. Unsettled facts keep their refusal, one row and the weight. Settled contradictions raise with no row. The ordinary OB deduction bound follows the same table. Strict withholding of actual gross still runs after G, and no money moves. Two historical bounds carry new reasons: a declared legacy widow can exceed ordinary OB under RS 00615.010's sole-survivor alternative, so that row keeps its refusal, and an unresolved parent keeps the one-parent 82.5% bound. Nine tests under round 4's reading split into a protected case with its exact refusal, row and weight, and a settled case that keeps the input error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol's fifth review of a135519 found three mediums, and all three reproduced. Each fact table treated a fact as wholly open or wholly settled, where the sources settle one direction of it. - RS 00615.712 protects a widow's adjusted cash and leaves a child's original rate alone, so a child's original above its OB now raises under a declared clause and under unknown history. - 20 CFR 404.411(c)(2) keeps a prior reduced WIB's carryover before cohort 1928 and reaches someone with no current WIB, so an NH's own RIB below its ordinary rate keeps dual_entitlement_sequence and its weight. Cohort 1928 stays settled. - A hold that can only lower an NH rate keeps that rate as a cap, so a DIB above its PIA raises. Only administrative finality lifts a cap. The same class reaches a DIB after a reduced WIB, which Sol's probe showed outside its verdict. A DIB below the PIA now keeps its row under dual_entitlement_sequence in every cohort, because the schema omits the onset that scopes 404.411(b)(2). The pre-1978 reasons open it before cohort 1928 only. Protected cash stays a named refusal, because the capture states no cap. No money moves. The conformance report regenerates byte-identically, and the cross-head comparison keeps 240 R2 and 240 R3 results. Invariants: under a reduction-only hold, an NH rate above its ordinary rate raises and one at or below it keeps its row. Every rate the carryover can reach stays a counted refusal, with or without the preflight. A nonwidow's OB stays settled under widow DRC protection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol's sixth review of 3212f82 found three mediums, and all three reproduced. Two lost a lawful row by comparing a rate with an amount the declaration had already put in doubt. One kept a row no filling can make lawful. - A declared pre-1978 history reaches past an omitted cohort, because RS 00615.005C.2's money reduction can exceed today's fraction. PIA $333.30 at RF 8 pays $318.50 on all sixteen rounding paths from the captured COLAs, against $318.40 today. That rate now keeps its row, and only for an old-age benefit with a PIA and a remaining reduction, in a cohort before 1916 or none. - Every test of an actual own RIB shares the 404.411(c)(2) carryover, so a mother's $359.10 against an ordinary $373.30 keeps its row beside a $360 threshold. - No reduced benefit starts before age 50, so a cohort below that age has one lawful DIB rate. A DIB below the PIA now raises under every hold that works through a prior reduced benefit. Workers' compensation and finality need no such benefit and keep young rows. The same classes reach F6 under a declared history, and REDUCED_BENEFIT_HISTORY_BEFORE_1978 now opens F6 in the carryover scope. The age floor uses 50 for DIB_AFTER_REDUCED_RIB too, because the schema has no separate declaration for a DIB after a reduced WIB. That row stays a named refusal from 50 through 61. No money moves. The conformance report regenerates byte-identically, and the cross-head comparison keeps 240 R2 and 240 R3 results. Invariants: under a declared history, every rate in its scope keeps its row, and past that scope a reduction-only hold keeps the cap. F6 opens under a carryover hold for exactly the roles that read an actual own RIB. Before January of cohort + 50, a DIB equals its PIA or raises. 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.
This PR covers Max's d1802 for the rules lane: G part 2 and R2 part (b). It applies Act 203(a)(4)'s deductions before the family-maximum reduction, which removes R2's
deduction_before_reduction_part_brefusal. It also adopts SSA's operational reading of the 1972 saving clause, per Max's d1338, with the literal reading behind a switch. It also fixes #530's round-14 low finding. The work is statutory conformance on invented cases and SSA's published examples only, with no population claim.Status: draft, waiting on Sol's seventh review of
fbe491d4. GPT-6 Astra reviewed the first round, and GPT-6.1 Sol reviewed rounds 2 and 3. Each round below lists what that review found. #562 (insured status) and this PR touch_provenance.py, the shared schema and audit fixtures, and the tier files. Whichever merges second will merge master and recount. The coordinator's slot order after #574 is #562, #563, #565.What changes
Deductions before reduction (G)
Act 203(a)(4); GN 02603.020, .040, .050, .090.
family_benefits_after_deductions, and its household form, take declared monthly deductions and apply the reduction for the maximum after them.403(a)(5): the saving clause (G)
SavingsClauseReadingonSavingsClauseGuard:SSA_OPERATIONALis the default (RS 00630.400, RS 00615.801B.2), andLITERAL_REFUSALkeeps the earlier behaviour. Existing tests that pin the literal guard select it explicitly.R2 part (b)
RETFamilyMonthcontext lets an auxiliary's own deduction release maximum room to the others through the new G entry point (RS 02501.155–.160).deduction_readjustment_requires_family_context.Fixes from #530's review
Invariants
Each is a Hypothesis property:
One invariant is qualified, not absolute. Adding a deduction does not always keep the others' rates from falling: GN 02603.050A.1 disregards age reduction for a single full permanent deduction only when "no other deduction is involved", and GN 02603.050C reserves the age reduction otherwise. A minimized case is pinned (PIA $48, maximum $78): the children's rates fall from $10 to $9.90 when a second, $0.10, deduction appears. The property therefore covers adding the first deduction.
Examples and differentials
Reproduced exactly:
These are eight new registry examples. A.6 and A.7 need combined maximums and stay refused, as do the workers' compensation examples.
Source discrepancies, both sides pinned. GN 02603.060 A.2's narrative omits the OB cap. RS 02501.160 and .130 quote OBs a dime above G's post-1982 floor.
Cross-head differential (
scripts/track_b_r2_cross_head.py). 240 previously supported R2 results, and their 240 downstream R3 results, are byte-identical to master. The six invented rows R2 used to refuse asdeduction_before_reduction_part_bnow compute, with no other refusal in their place.Conformance report. The 356,400-row G lattice is unchanged. A separate 16-row deduction denominator is added, and every one of G's 37 refusal reasons has an executed witness.
Mutation checks. Thirteen one-line mutations were caught and reverted (
docs/design/track_b_g2_r2b_mutations.json).Source readings taken (session, under Max's 2026-10-20 delegation)
Both are logged in
~/reviews/us-hub/source-conflicts/RULINGS.mdand marked at their decision lines:us:oasdi-ret-temporary-partial-deduction. GN 02603.050D.2 says temporary deductions are never partial, while RS 02501.160's worked example pays a partial one. G follows the example (specific over general). R2 keeps its full-month provisional suspension and refuses a provisional partial path by name.us:oasdi-saving-clause-operational-rate-rounding. RS 00630.400 says "rounded" without a direction, and Act 203(a)(5) requires the smallest amount that keeps the total from falling. So protected equal rates round up to the least sufficient dime (P1).LITERAL_REFUSALremains the alternative.The rest of the build report's judgment items are refusals by name, not readings, so none needs Max.
Round 7 (after the sixth review)
Sol's review of
3212f823found three mediums, and all three reproduced. The session read each one against its capture before changing the rule. Two lost a lawful row by comparing a rate with an amount the declaration had already put in doubt. One kept a row no filling can make lawful.OWN_RIB_HISTORY_BEFORE_1978orREDUCED_BENEFIT_HISTORY_BEFORE_1978says RS 00615.005C.2's money reduction set the amount, and that reduction can exceed today's fraction. PIA $123.40 at RF 8 in December 1977, every captured COLA through 1999 and an upward recomputation to PIA $333.30 give $318.50 on all sixteen rounding paths, against $318.40 today. That declaration raised and lost its row. It now keeps its reason and weight 7, in both directions, for an old-age benefit with a positive PIA and a remaining reduction, in a cohort before 1916 or none. Cohort 1916 keeps the cap, and a DIB keeps its PIA as its cap. Round 6's claim that only finality lifts a cap was wrong, and the note says so.dual_entitlement_sequence, in a pre-FRA year too. A spouse's raw own-PIA test and a child's lack of one stay settled.evaluate_retand leaves no row. A rate at the PIA keeps its named refusal. Workers' compensation and finality need no prior benefit, so each keeps a young row, even beside a dual declaration.The session extended the same classes past the findings. F6 reads the same own RIB as F3, so a declared history now opens it too.
REDUCED_BENEFIT_HISTORY_BEFORE_1978opens F6 in the carryover scope, because it carries through the rule that already opened F3. The age floor covers all five holds that work through a prior reduced benefit.One choice for the reviewer to check: the floor takes the earliest age on any route, 50, even for
DIB_AFTER_REDUCED_RIB, which names a RIB that starts at 62. The schema has no separate declaration for a DIB after a reduced WIB under 404.411(b)(2), so that row stays a named refusal from 50 through 61. The direction rule decides this, and no money moves either way.What stayed:
Sol's
needs_maxitems each keep a standing ruling or resolve inside these fixes, so none reaches Max.New invariants:
Local checks at the tree that became
fbe491d4: all 14,032 Track B tests pass and 7 skip in a session process. Black and ruff pass, the conformance report regenerates byte-identically, the cross-head comparison matches master, and 42 fresh mutations each failed a named test. Against3212f823, 44 of the new module's 158 tests fail. A first mutation pass killed 39 of 43: one survivor showed a redundant month comparison, so the rule now compares years, and three exposed test gaps that each gained a test.Round 6 (after the fifth review)
Sol's review of
a135519ffound three mediums, and all three reproduced. Each came from a fact table that treated a fact as wholly open or wholly settled, where the sources settle one direction of it.dual_entitlement_sequence, weight kept. Cohort 1928 stays settled: "There is no further reduction."The session extended the same class past the findings. Sol's exploratory probe of a DIB after a reduced WIB didn't enter its verdict, but it reproduces: $398.10 on PIA $400 raised under
dual_entitlement_sequence. 404.411(b) reduces that DIB, and the schema omits the onset that scopes it, so the row now stays in every cohort. The two pre-1978 history reasons open the same comparison before cohort 1928 only, because a later cohort reached age 50 after 1977.Protected cash stays a refusal. A child paid $300.10 on OB $300, and a deduction above that OB, keep the named refusal, because the capture states no cap on protected cash. A stricter proof could drop those rows, and no amount moves either way.
Sol's three new
needs_maxitems are these fixes, and Sol called each source-settled, so none reaches Max.New invariants:
UnsupportedReasonclassifies a lower DIB, a lower RIB and a rate above the cap against an expectation written out in the test, not read from G's table.Two existing assertions moved, and each now states both sides.
test_protected_widow_cannot_be_excluded_from_unknown_drc_historyasserts the input error and the finality refusal on the matching child. The round 4 property keeps an input error for a DIB above the PIA under workers' compensation.Local checks at the tree that became
3212f823: all 13,874 Track B tests pass and 7 skip in a session process. Black and ruff pass, the conformance report regenerates byte-identically, the cross-head comparison matches master, and 38 fresh mutations each failed a named test. Againsta135519f, 50 of the new module's 224 tests fail.Round 5 (after the fourth review)
Sol's review of
e3315bafconfirmed round 3's three counterexamples, the $175 and $192.10 corrections and the composition refusal. It found one medium: a held refusal still masked contradictions in RIB gross, auxiliary original rates and widow eligibility. Reproducing that showed round 4 had already gone too far the other way, so the fix reverses part of the finding.InvalidFamilyInputate3315baf, and at1ce508e5it refused by name. The capture says "the rate to the NH is protected by administrative finality and cannot be changed", so a protected rate rests on a PIA other than the declared one._PREFLIGHT_FACT_UNSETTLERSclassifies everyRecordCondition,BeneficiaryConditionandUnsupportedReasonagainst six facts: NH original, DIB gross, RIB gross, auxiliary original, spouse raw own-PIA eligibility and other own-benefit entitlement. A new enum member fails a test until someone classifies it. Each deferred reason applies only within its own person, role, record kind and payment period._check_settled_family_factscompares settled facts through G's validated helpers and catches onlyFamilyConfigurationUnsupported. The path with the preflight removed gives the same valid outcomes and refusals.Readings this round:
us:oasdi-finality-protected-rates-before-coverage: under finality, a rate that differs from the declared PIA staysadministrative_finality, one row, weight kept. This is the session's single reading under Max's 10/20 delegation, logged inRULINGS.md.Invented examples:
DIB_AFTER_REDUCED_RIB:dib_after_reduced_rib, one row, weight kept. The same gross under a maximum-only hold:InvalidFamilyInput, no row.eligibility_before_1983in January 1972, because RS 00615.005A.2 set 82 1/2%.InvalidFamilyInputin January 1973, because A.5 set 100%.Nine tests under round 4's reading split into a protected case with its exact refusal, row and weight, and a settled case that keeps the input error. No money moves: the cross-head comparison keeps all 240 R2 and 240 R3 rows, and G's conformance artifact stays byte-identical.
New invariants:
Local checks at
a135519f: all 13,650 Track B tests pass and 7 skip in a session process. Black and ruff pass, the cross-head comparison matches master, and the lane's 30 mutations each failed a named test.Round 4 (after the third review)
Sol's review of
1ce508e5confirmed all three round-3 fixes and found three new mediums, plus a question on how two POMS exceptions compose.e3315baffixes all four.apply_ret_yearcompares declared NH entitlement with RET before it computes any G money, in both directions, so a held refusal can no longer mask a contradiction. One helper now serves G and RET. The lane's audit of the whole loop added the same preflight for spouse eligibility under the raw own-PIA test, NH original rates and DIB gross rates. The checks that need G's money stay after it.RecordYearnow rejects two known cohorts for one person, across months and across record and own-benefit fields. A missing cohort adds no constraint.sole_full_deduction_zero_dual_compositionrefuses only where the two readings pay differently, and the rule computes where they agree. RULINGS logs this asus:oasdi-sole-full-deduction-zero-dual-composition.Invented examples:
New invariants:
Local checks at
e3315baf: all 13,341 tests across the 104 Track B modules pass (7 skip), and black and ruff pass on the round's Python files. The lane's 11 new mutations were all caught. The conformance report changes only for the new reason, and 240 R2 and 240 R3 cross-head results stay unchanged. One existing test moved its reason count from 37 to 38. The tier files add this round's 637 unit tests; the coordinator's slot recount replaces them.Round 3 (after the second review)
Sol's review of
bbcdf7f4kept every round-1 fix and reading, and found four mediums.7fa124e3and872cebc7had already fixed the stale conformance hash.1ce508e5fixes the other three.RecordYearnow checks the NH and every auxiliary against the twelve months each cohort allows, and an input error comes before any coverage refusal. Applied own delayed credits prove FRA by the snapshot month. A deceased worker's credits and old age reductions prove nothing about a survivor's age. Act 203(f)(9) and RS 02501.021B.3 apply the old-age FRA to every role, so this needed no ruling.New invariants:
Local checks at
1ce508e5: all 12,704 tests across the 102 Track B modules pass (7 skip), and black and ruff pass on the round's Python files. The lane's 11 new mutations were all caught. All 480 literal rows and 240 R2 and 240 R3 cross-head results stay unchanged, and the conformance report regenerates byte for byte. The tier files add this round's 176 unit tests; the coordinator's slot recount replaces them.Round 2 (after the first review)
RETFamilyMonthcontext, R2 derives it from G's admitted own-benefit facts, for actual and estimated excess.two_record_entitlementis now optional: a value that contradicts G's facts isInvalidFamilyInput, and a consistent one refuses by name.NO_CHILD_IN_CAREon such a spouse isInvalidFamilyInput. The rule derives age status from supplied birth facts and delayed credits.BenefitDeduction.under_full_retirement_ageis required only when those leave age unknown.RETFamilyMonth. The G note, the docstring and the refusal notes now call the reservation case deferred coverage.docs/design/track_b_g2_r2b_verification.json. All 356,400 G conformance rows are byte-identical, and the cross-head harness shows 240 R2 and 240 R3 results unchanged with the six former refusals computed. Both ran against master1ec57a5d; the round-2 review reruns them at this head.docs/design/track_b_g2_r2b_mutations.jsonkeep its results and its 15 new mutations.bbcdf7f4. 87 tests pass across the four round-2 modules, and black and ruff pass on the 42 changed Python files. A one-off audit hook over a sample of those modules counted no opens of the barred names. CI and the round-2 review cover the rest.872cebc7. CI failed atbbcdf7f4on the byte test fordocs/design/track_b_g_conformance_report.json: round 2 edited the registry YAML after the lane's last conformance run, so the report kept an old registry hash.7fa124e3regenerates the report. One line differs and all 356,400 rows match.872cebc7records the new hashes indocs/design/track_b_g2_r2b_verification.json. Neither commit changes Python.Checks (local, at
f3b9a719)readingpropertyBlack and ruff are clean, and the conformance report regenerates byte for byte.
Cost, measured back to back by the lane under load. G regeneration: 152 → 173 CPU seconds. R2 tests: 87 → 114 CPU seconds, for 786 → 818 tests.
Tiers:
Protected files are untouched.
axiom: n/a: not a country-model change. G and R2 are Python statutory references per d515, and rulespec-us has no 42 U.S.C. 403 encoding.
🤖 Generated with Claude Code