Repository navigation
Conversation
Money-changing readings (each pinned with its rejected alternatives, Hypothesis properties and killed mutants): - us:oasdi-dual-entitlement-zero-after-age-reduction: count GN 02603.045's before-age amount (GN .050A ties exceptions 2-3 to .045); children $115.30 each instead of a refusal. - us:oasdi-parent-entitlement-count-interval: the entitled set must satisfy 402(h)(1)(D) for every parent; one in-band parent yields to the other at 82.5 percent ($825); two in-band parents stay refused. - us:oasdi-dwb-1984-pre-1978-history: RS 00615.301B.1.e pays .715 of the unreduced WIB in every pre-60 month from January 1984, whatever the entitlement date; from 60 the money history still refuses. - us:oasdi-ret-grace-simultaneous-rib-dib: Act 202(k)(4) makes an elected RIB month entitlement to RIB alone, so the default now counts its NSMs. - us:oasdi-ret-deemed-entitlement-basis: an unmarried deemed declaration is an input error (Act 203(b)(1), 20 CFR 404.420); the residual adult-child case stays refused. Kept, with stated reasons and new markers: saving-clause procedure gaps, historical dual entitlement, NH charges with age reductions (sources silent); exact fractions, disability-maximum rounding, NESE floor, own-work age exemptions, other-deductee scope (no conflict once the Act is read whole). Notes re-framed; 402(d), (e), (h), (k), (s) excerpts added from the pinned LII body; new tests/test_track_b_readings_20261023.py checks markers against logged ids in both directions. Stacked on #563; retarget to master after it merges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Four blind Opus adjudications (run on a clean master clone, without this pass's conclusions) agreed on the parent count, the 1984 DWB rule, the simultaneous RIB/DIB grace months, the deemed-entitlement marriage basis and every kept refusal. Changes from their disagreements and findings: - us:oasdi-dual-entitlement-zero-after-age-reduction: children $114.50, not $115.30. In 402(k)(3)(A)'s order the offset withholds $62.40 and age $20.90; 20 CFR 404.403(a)(5) excludes only the former (see 404.407(a)) and GN 02603.060 B.2 keeps the age slice in PTAP. A.2's disregard stays for zeros that dual entitlement alone makes. - us:oasdi-parent-entitlement-count-interval: test own RIBs against the unrounded 82.5 and 75 percent of the PIA that 402(h)(1)(D) names. - us:oasdi-ret-own-work-age-exemptions: a non-empty own_work_exempt_months is now an input error; the Act exempts only CDB and DWB months. - Historical dual entitlement: the method-B alternative ($96.50) is pinned beside method C's $99.30. - Disability-maximum rounding and NESE floor are kept; the contrary blind views and their dime/dollar stakes are recorded in the notes. Thirteen mutants (three per G2, four per parents, two per DWB, one each for the grace default, the override and the marriage check) fail the new tests in isolated copies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…/DIB elections GPT-6.1 Sol r1 requested changes on 479c321 (no supported-dollar regression found): - tier counts: +19 unit tests (18 from the readings pass, one new invalid GraceMonth case below); unit 18,648, total 25,179, verified by collection; - the G parent overview now states 402(h)(1)(D)'s unrounded thresholds; - the R2 marriage passage and the RETBeneficiary docstring quote 402(d)(1)(D)'s "month preceding" and 402(s)(2)'s third-prior-month clause; - the disability-maximum note gives a real multi-COLA gap ($0.20), not a $0.10 bound; the NESE rationale states both meanings of "drop the cents"; the grace differential's labels name the new default; - GraceMonth rejects RIB and DIB both received in one month (402(k)(4)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol r2 confirmed six of seven round-1 fixes; the remaining medium was the R2 note's summaries of 402(s)(2). The table and the follow-on sentence now say disability in the marriage month or in the third month before it, with recovery before or after the marriage, matching the quoted statute; the RETBeneficiary docstring says the same. Docs only; no code path changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolves the conflicts with #563's new row helper and relocated NH charge refusal. _original_entitlement_rows now takes the payment month and the resolved (count, excluded) parent set, and a _parent_threshold helper gives each parent its 402(h)(1)(D) rate in G and in R2's context check (which #563 added with the old parent_ob argument). The NH-age marker moves to the relocated reserve check, and the G note adopts #563's framing of it as deferred coverage, not a conflict. The marker test now requires every marker to be documented in a Track B design note rather than matching this pass's fixed set, since #563 logs its own readings. Tier counts: unit 22,089, total 28,659. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review This is an independent round-4 review (merge delta only) by a Claude Opus 5.5 cloud session, done for the Track B readings session. Verdict: APPROVE at head The merges carry the approved effect onto #563's new code. Every money and refusal decision I tested matches. I found four low or nit items, none of medium severity. Two are stale or weak documentation-integrity checks introduced by the merge. Two are pre-existing #563 behaviors that the brief's claims describe inaccurately. The merge carried both of those faithfully. Findings1. Low: the G note still says the readings test checks both directions
2. Low: the reverse marker test uses a substring match, so a truncated or stale id passes
3. Low (pre-existing in #563, not introduced by this merge): R2's parent branch can't be reached, and no repo test pins its new threshold
4. Nit: the NH-reservation × age-reduction refusal doesn't fire on the same inputs as at
|
| # | Mutation | Repo tests | Property | Outcome |
|---|---|---|---|---|
| m1 | _parent_threshold: drop or beneficiary_id in excluded |
1 failed | 1 failed | killed |
| m2 | DRC caller passes None instead of parents |
1393 passed | 2 passed | survived, equivalent (see below) |
| m3 | drop dwb_under_60= in _original_entitlement_rows |
1 failed | passed | killed |
| m4 (mine) | R2: always the one-parent 82.5% rate | 1393 passed | 1 failed | killed only by the property (finding 3) |
| m5 (mine) | R2: pass (parents[0], frozenset()), dropping exclusions |
1393 passed | 1 failed | killed only by the property (finding 3) |
| m6 (mine) | _original_entitlement_rows: parent OB count fixed at 1 |
1 failed | passed | killed |
| m7 (mine) | disable the NH × age-reduction refusal | 1 failed | passed | killed |
m2 is an equivalent mutant for _declared_widow_drc_protection_possible's boolean, although it does change the row (see adaptation 1). A parent is excluded only when another potential parent is entitled at the one-parent rate (gross_benefits.py:3913-3945). That other parent is subject (parents are not in _OUTSIDE_MAXIMUM, :1630), so it is counted either way. possible_widow comes only from widow roles, so the excluded parent's row can't change possible_count > 1 and possible_widow. The roster-level _entitled_parent_count call runs before the row in both versions, so refusals are identical. The fix is correct but unobservable here.
Style. black -l 79 --check on the two modules and the test file: "3 files would be left unchanged". ruff check on the same: "All checks passed!".
Protected files. git diff --name-only 03530e8b 1fa56856 | grep -E 'gates.yaml|engine/loop.py|engine/steps.py|^runs/' returns nothing.
CI at the head:
pytest (3.14) success; pytest-shard 1/4-4/4 (3.14) success; graph-integration (3.13), (3.14) success;
lint success; build success; Vercel Preview Comments success; deploy skipped
What I couldn't check
- I didn't run the full suite locally. CI's green run is the evidence for everything outside the 15 files above, and for
test_tier_policy.py, which needs the whole session collected. Run alone it sees one test and fails by design. I checked its manifest with--collect-onlyper tier instead. - I didn't re-review the readings themselves, per the brief. Nor did I review Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563's own changes (rounds 2-10 and the master merges) except where they meet this PR's lines.
- Finding 4's B and C dollar results are Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563's behavior. I didn't check them against sources.
- No PSID, EPUF or PolicyEngine-US data was available, and none was needed.
- The differential property bypasses
RecordYear.__post_init__, because no public input reaches the parent branch (finding 3). It therefore checks the branch's logic, not a supported public path.
Generated by Claude Code
The cloud round-4 review (APPROVE at 1fa5686) found two low items in this PR's bookkeeping: - The reverse marker test matched substrings, so a truncated or misspelled id passed when it was a prefix of a documented id. It now extracts whole ids from the Track B notes. - The G note still said the test checks markers against the logged ids in both directions. The test now does so again: the markers in the G, R2, R3 and grace modules must equal this pass's readings plus the ids other rounds register (#563's two), and the note says what it checks. The insured-status modules keep their own register, as in the round-3 test, so #562's markers don't enter these checks once it lands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review This is an independent round-5 review (fix delta) by a Claude Opus 5.5 cloud session, written for the Track B readings session. Verdict: REQUEST_CHANGES at Findings 1 and 2 from round 4 are mostly resolved. A prefix truncation now fails both tests. The note no longer claims the old two-way check. Two medium gaps remain, and both follow from the same thing: the note and docstring say "every marker", but the test sees only markers in the exact one-line Findings1. Medium: a
|
| # | Mutation | Expected | Result |
|---|---|---|---|
| 1 | Append # Source conflict us:oasdi-parent-entitlement to ret_grace.py |
Both fail | 2 failed |
| 2 | Mutation 1, plus the truncated id in OTHER_ROUNDS |
Only the whole-id test fails | 1 failed (documented), 1 passed |
| 3 | Delete the grace module's only marker (ret_grace.py:461) |
Fail | Equality test failed, 1 passed |
| 4 | Drop us:oasdi-sole-full-deduction-zero-dual-composition from OTHER_ROUNDS |
Fail | Equality test failed, 1 passed |
| 5 | Undocumented marker in a new insured_status.py |
Both pass | 2 passed |
| 6 (mine) | The same undocumented id in both insured_status.py and ret_grace.py |
Both fail | 2 failed |
| 7 (mine) | Undocumented marker in a new track_b/extra.py |
Both fail | 2 failed |
| 8 (mine) | Truncate the grace marker by one segment (...-simultaneous-rib) |
Both fail | 2 failed |
| 9-12 (mine) | Wrapped id, conflict: colon form, ...intervalX, ...interval_v2 |
Should fail | All passed: findings 1 and 3 |
CI. At review time lint, build, both graph-integration jobs and pytest-shard 3/4 had passed, and deploy was skipped. Shards 1/4, 2/4 and 4/4 were still in progress.
What I couldn't check
- I didn't see the final result of pytest shards 1/4, 2/4 and 4/4.
- I ran only the readings test and
test_track_b_insured_status_fix_round_15.py, not the full suite, on the Track B insured status: quarters of coverage; fully, currently and disability insured #562 merge. - I didn't check whether Track B insured status: quarters of coverage; fully, currently and disability insured #562's author intends to document the six insured ids in a Track B note. Finding 2 depends only on the test and the note as they stand.
- I didn't test a merge with a future Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 head beyond
03530e8b, which is the base already in this branch.
Generated by Claude Code
… stated The cloud round-5 review requested changes on e75328f: - A marker the regex couldn't parse (an id wrapped onto the next line, "conflict:" with a colon, lowercase) was invisible to both marker tests. Outside the exempt modules, every mention of a source conflict must now parse as a one-line marker. - An id extended past a non-id character ("...intervalX", "..._v2") read as the documented id. A marker's id must now end at a colon, whitespace or the end of the file, and a note's id must not run on into another id character or hyphen. - The note and docstring said "every marker" without the insured-status exemption. Both now state it and why: the source-conflict rulings log #562's insured-status readings, but no Track B note documents all of them yet. The note also says each note must name its own readings. Sixteen mutations, including all twelve of the review's, behave as expected; the file still collects 15 tests, so the tier counts don't change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review This is an independent round-6 review (fix delta) by a Claude Opus 5.5 cloud session, written for the Track B readings session. Verdict: REQUEST_CHANGES at All four round-5 findings are resolved for the cases round 5 named, and all twelve round-5 mutations now behave as the note says. One medium gap remains. The new note says the test covers "every Track B module" and "every mention of a source conflict", but the parse rule misses two shapes: a hyphenated Findings1. Medium: the parse rule misses
|
| # | Mutation | Expected from the note | Result |
|---|---|---|---|
| 1 | Append truncated us:oasdi-parent-entitlement marker to ret_grace.py |
Both fail | 2 failed |
| 2 | Mutation 1, plus the truncated id in OTHER_ROUNDS |
Only the whole-id test fails | 1 failed (documented), 1 passed |
| 3 | Delete the grace marker (ret_grace.py:461) |
Exact-set test fails | 1 failed (both_directions), 1 passed |
| 4 | Drop us:oasdi-sole-full-deduction-zero-dual-composition from OTHER_ROUNDS |
Exact-set test fails | 1 failed (both_directions), 1 passed |
| 5 | Undocumented marker in a new insured_status.py |
Exempt: pass | 2 passed |
| 6 | Same undocumented id in insured_status.py and ret_grace.py |
Both fail | 2 failed |
| 7 | Undocumented marker in a new track_b/extra.py |
Both fail | 2 failed |
| 8 | Truncate the grace marker to ...-simultaneous-rib |
Both fail | 2 failed |
| 9 | Wrapped id (# Source conflict / # us:oasdi-...) in ret_grace.py |
Fail | 2 failed |
| 10 | # Source conflict: us:oasdi-... |
Fail | 2 failed |
| 11 | ...-count-intervalX |
Fail | 2 failed |
| 12 | ...-count-interval_v2 |
Fail | 2 failed |
| 13 (mine) | Prose "source conflict" in b2.py's module docstring |
Fail ("every mention") | 2 failed |
| 14 (mine) | Trailing . on the grace marker |
Fail (comment :66) |
2 failed |
| 15 (mine) | ) after the grace marker id |
Fail | 2 failed |
| 16 (mine) | Undocumented id in _insured_status_qc.py and in gross_benefits.py |
Not exempt: both fail | 2 failed |
| 17 (mine) | # Source-conflict us:oasdi-brand-new-undocumented in ret_grace.py |
Fail | 2 passed (finding 1) |
| 18 (mine) | Lowercase # source conflict us:oasdi-... |
Fail | 2 failed |
| 19 (mine) | Undocumented marker in track_b/parameters/__init__.py |
Fail | 2 passed (finding 1) |
| 20 (mine) | Wrapped marker in a new insured_status.py |
Exempt: pass | 2 passed |
| 21 (mine) | Wrap the grace id at a hyphen in every note | Whole-id test fails | 1 failed (documented), 1 passed |
| 22 (mine) | Note typo ...-rib-dibX in every note |
Whole-id test fails | 1 failed (documented), 1 passed |
| 23 (mine) | , after the grace marker id |
Fail | 2 failed |
| 24 (mine) | Source conflict (two spaces) |
Fail | 2 failed |
| 25 (mine) | # See the source conflicts above. in ret_grace.py |
Fail ("every mention") | 2 failed |
| 26 (mine) | The marker text inside a string literal in ret_grace.py |
Parsed as a marker: fail | 2 failed |
| 27 (mine, full file) | G note misspells us:oasdi-ret-temporary-partial-deduction with a trailing X |
— | 15 passed (finding 2) |
What I couldn't check
- CI: at review time lint, build, both graph-integration jobs, Vercel and pytest-shard 3/4 had passed, and deploy was skipped. Shards 1/4, 2/4 and 4/4 were still in progress, and I didn't see their results.
- I ran only the readings test, not the full suite, on the head and on both merges.
- I didn't check whether a future Track B insured status: quarters of coverage; fully, currently and disability insured #562 or Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 head adds a hyphenated or subpackage mention. The widened check passes on the heads named above.
Generated by Claude Code
The cloud round-6 review requested changes on 0d186c7: - The parse rule missed a hyphenated "Source-conflict" (the spelling the notes use) and never read the parameters subpackage, so an undocumented marker passed there. Mentions now match any spelling (source[\W_]*conflict, any case), and the scan covers every Python and YAML file in the Track B package, subpackages included. Files are named by their path inside the package, so only the top-level insured-status modules are exempt. - The check that each note names its readings matched substrings, so a note could name a reading only through a typo. It now uses whole ids. - The note now states where a marker's id ends. Thirty mutations behave as the note says, including all of rounds 5 and 6 plus YAML, subpackage, README and split-line cases. The file still collects 15 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A plural "# Sources conflict us:oasdi-..." still slipped past the parse rule. The mention pattern is now sources?[\W_]*conflict (any case). On this head, #562's 168bb3a and #563's dbdceac, every mention in a non-exempt Python or YAML file still parses as a marker; the only mismatch is #562's two wrapped markers in the exempt insured_status.py. All 32 mutations behave as the note says. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review This is an independent round-7 review (fix delta plus a full pass of the marker test) by a Claude Opus 5.5 cloud session, written for the Track B readings session. Verdict: REQUEST_CHANGES at All three round-6 findings are resolved, and all 27 round-5 and round-6 mutations behave as the note says. The full pass found one medium gap and five smaller ones. The medium gap: the parse rule finds markers by the phrase "source conflict", not by the reading id. A marker worded any other way, such as Findings1. Medium: a reworded marker or a bare id passes with an undocumented reading
Counterexamples, executed at the head. Each one appended a line to No list of spellings can cover every rewording. The id is the part that matters, and it has a fixed form. Fix: in each non-exempt file, also require the number of case-insensitive ANY_ID = re.compile(r"us:oasdi", re.IGNORECASE)
...
if name not in OWN_REGISTERS:
assert len(MENTION.findall(text)) == len(ids), name
assert len(ANY_ID.findall(text)) == len(ids), nameToday every 2. Low:
|
| Appended heading | Result |
|---|---|
## Needs Max’s judgment (curly apostrophe) |
15 passed |
## Needs Max's Judgment |
15 passed |
Setext Needs Max's judgment over ---- |
15 passed |
## Needs Max's judgment (two-space indent) |
15 passed |
## Needs Max's judgment (control) |
1 failed, 14 passed |
Fix (in the patch below): case-insensitive, either apostrophe, up to three leading spaces, and the setext form. It doesn't match the plain-prose lines that already start with "Needs Max's judgment items" (G note :1706, :1775). With it, all five rows fail, and the head and both merges pass.
4. Nit: MENTION has no left boundary, so it rejects "resource conflict"
:72. sources? matches inside "resource". Its [\W_]* also crosses sentence punctuation. Both cases make the test reject prose that isn't about a source conflict. Neither occurs in any of the three trees (git grep -i -E 'resources?[^a-z0-9]*conflict' printed nothing).
$ echo '# Lock to avoid a resource conflict.' >> src/populace_dynamics/track_b/runner.py -> 2 failed
$ echo '# Read the source. Conflicts are logged in the G note.' >> .../runner.py -> 2 failed
A reading id that contains source-conflict would count twice and fail, even when it is logged and documented. I renamed the grace reading to us:oasdi-ret-grace-source-conflict-rib-dib in the module, the test and the notes, and got 2 failed, 13 passed. A control rename to ...-other-rib-dib gave 15 passed. Fix: (?<[a-z]) before sources? closes the "resource" case. With finding 1 in place, the sentence-boundary case is just over-strict, and you can keep it. If you keep it, say so in the comment at :71.
5. Nit: DOCUMENTED has a right boundary but no left one
:70. An id counts as documented when it appears only as the tail of a longer token. I added the undocumented id to OTHER_ROUNDS and a marker to ret_grace.py. Writing See xus:oasdi-brand-new-undocumented. in the R2 note then gave 15 passed. The control without the note line gave 1 failed, 14 passed. Fix: (?<[A-Za-z0-9_-]) in front of {ID}. That gives 1 failed, 14 passed.
6. Nit: "verbatim" means verbatim after whitespace is collapsed
:161 joins the capture's whitespace runs into single spaces before it checks the quote. The note (:3290) says each passage "must appear verbatim in the capture". The collapse is needed, because the capture wraps lines. "verbatim up to whitespace" would match what the code does. No code change is needed.
Combined patch (applied and checked)
-DOCUMENTED = re.compile(rf"{ID}(?[A-Za-z0-9_-])")
+DOCUMENTED = re.compile(rf"(?<[A-Za-z0-9_-]){ID}(?[A-Za-z0-9_-])")
#: Any spelling: "source conflict", "Source-conflict", "Sources conflict".
-MENTION = re.compile(r"sources?[\W_]*conflict", re.IGNORECASE)
+MENTION = re.compile(r"(?<[a-z])sources?[\W_]*conflict", re.IGNORECASE)
+#: Any reading id, in any case: each must sit in a marker.
+ANY_ID = re.compile(r"us:oasdi", re.IGNORECASE)
#: Files that can carry a marker, subpackages included.
-SOURCES = {".py", ".yaml", ".yml"}
+SOURCES = {".py", ".pyi", ".yaml", ".yml"}
@@ def _module_markers():
- if path.suffix not in SOURCES or not path.is_file():
+ if path.suffix.lower() not in SOURCES or not path.is_file():
@@
assert len(MENTION.findall(text)) == len(ids), name
+ assert len(ANY_ID.findall(text)) == len(ids), name
@@ def test_each_note_names_its_readings_and_has_no_open_judgment_heading(note):
- assert not re.search(r"^#+ Needs Max's judgment", text, re.MULTILINE)
+ assert not re.search(
+ r"^ {0,3}(#+ *needs\s+max['’]s\s+judge?ment"
+ r"|needs\s+max['’]s\s+judge?ment.*\n {0,3}(-+|=+) *$)",
+ text,
+ re.MULTILINE | re.IGNORECASE,
+ )With this patch: the head gives 15 passed, and both scratch merges give 15 passed. black -l 79 --check reports "1 file would be left unchanged", and ruff check reports "All checks passed!". Every round-5 and round-6 mutation I reran keeps its outcome (R5-1 to 5 and 9, R6-17, 19, 20, 25 and 27). Every counterexample in findings 1-3 and 5 now fails, and so does the "resource conflict" line from finding 4. The note and docstring need the sentences named in findings 1, 2 and 6.
Round-6 findings
Source-conflictand theparameters/subpackage (medium): resolved.MENTIONissources?[\W_]*conflict, any case (:72). The scan isrglob("*")filtered to.py/.yaml/.ymlfiles (:84-86). Files are named by their path inside the package (:87), so only the top-levelinsured_status.pyand_insured_status_qc.pyare exempt. Mutations R6-17 and R6-19 now give2 failed. A marker in a newparameters/insured_status.pygives2 failed, so it is not exempt. A logged id duplicated intoparameters/ret_v1.yamlgives1 failed, 1 passed(the location check). The remaining gaps are findings 1 and 2.- Note-names check used substrings (low): resolved.
:127-129checks membership inDOCUMENTED.findall(text). R6-27 (G note...deductionX) now gives1 failed, 14 passed. The left-boundary nit is finding 5. - Note didn't state the right boundary (nit): resolved. The note (
:3284-3285) says the id "ends at a colon, whitespace, a line break or the end of the file", which matches(?=:|\s|$)at:68.
Checked and sound
-
Head.
git rev-parse HEADgives079c33dae15c2a6693b3132e451567ecdcfd00fc, andgh api repos/.../pulls/565 --jq .head.shagives the same. The commit's parent isdb268f97, and that commit's parent is0d186c71.git diff --stat 0d186c71 079c33datouches only the G note (+13/−11) and the test file (+22/−14). -
Test run. Python 3.13.18, fresh
.venv,pip install -e ".[dev]", the brief's env vars. The readings test gives15 passed, and--collect-onlygives15 tests collected. -
Style.
black -l 79 --check tests/test_track_b_readings_20261023.pyreports "1 file would be left unchanged", andruff checkreports "All checks passed!". -
Mention counting. Each marker contains exactly one
MENTIONmatch, and noMENTIONmatch can extend into a marker's "Source", because only[\W_]and an optionalsmay sit between "source" and "conflict". So equal counts mean no stray mention, apart from the id-containing case in finding 4. -
Prose against code (apart from the findings). I read the note paragraph (
:3278-3292) and the module docstring (:5-11) against the code. The per-id exemption (:94-98), the exact set (:104), the four allowed files by package path (:105-111), the whole-id documentation check overdocs/design/track_b_*.md(:116-120), the per-note readings check (:127-129) and the quote check (:161) all do what the prose says. The location check allows any of the four modules for any reading. A G reading's marker moved fromgross_benefits.py:3933intoarf.pygives15 passed. The prose says "each in the G, R2, R3 or grace module", so this matches it. -
Over-strictness. I scanned each
.py/.yaml/.ymlfile in the Track B package on both merged trees. The widerMENTIONand the oldsource\s+conflictgive the same count in every file. In every non-exempt file, mentions = markers =us:oasdioccurrences (counts under finding 1). The only mismatch is Track B insured status: quarters of coverage; fully, currently and disability insured #562'sinsured_status.py(13 mentions, 11 markers, the two wrapped markers), which is exempt.git ls-treeshows that the only non-Python, non-YAML file in the package on all three trees isREADME.md. Neither the widerMENTIONnor therglobscan breaks on any of the three trees. -
Scratch merges. For each PR I checked out a detached
079c33daand rangit merge --no-ff --no-commit <sha>. For Track B insured status: quarters of coverage; fully, currently and disability insured #562 (168bb3a8), onlytests/README-tiers.mdandtests/tier_counts.jsonconflicted, and I took ours for both. Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 (dbdceac5) merged without conflicts. The readings test gives15 passedon each merge, and so does the patched test above. I rangit merge --abortafter each, andgit status --shortwas empty. -
Mutations. Each one ran
-k "both_directions or documented_in"at the head unless marked "full". After each I restored withgit checkout 079c33da -- src tests docsandgit clean -fq -- src tests docs, andgit status --shortprinted 0 lines.# Mutation Expected from the prose Result R5-1 Truncated us:oasdi-parent-entitlementmarker inret_grace.pyBoth fail 2 failed R5-2 R5-1, plus the truncated id in OTHER_ROUNDSWhole-id test fails 1 failed, 1 passed R5-3 Delete the grace marker ( ret_grace.py:461)Exact-set test fails 1 failed, 1 passed R5-4 Drop ...-sole-full-deduction-zero-dual-compositionfromOTHER_ROUNDSExact-set test fails 1 failed, 1 passed R5-5 Undocumented marker in a new insured_status.pyExempt: pass 2 passed R5-6 Same undocumented id in insured_status.pyandret_grace.pyBoth fail 2 failed R5-7 Undocumented marker in a new extra.pyBoth fail 2 failed R5-8 Grace marker truncated to ...-ribBoth fail 2 failed R5-9 Wrapped id in ret_grace.pyFail 2 failed R5-10 # Source conflict: us:oasdi-...Fail 2 failed R5-11 ...-count-intervalXFail 2 failed R5-12 ...-count-interval_v2Fail 2 failed R6-13 Prose "source conflict" in b2.py's module docstringFail 2 failed R6-14 Trailing .on the grace markerFail 2 failed R6-15 )after the grace markerFail 2 failed R6-16 Undocumented id in _insured_status_qc.pyandgross_benefits.pyBoth fail 2 failed R6-17 # Source-conflict us:oasdi-...Fail 2 failed R6-18 Lowercase # source conflict us:oasdi-...Fail 2 failed R6-19 Undocumented marker in parameters/__init__.pyFail 2 failed R6-20 Wrapped marker in a new insured_status.pyExempt: pass 2 passed R6-21 Grace id wrapped at a hyphen in every note Whole-id test fails 1 failed, 1 passed R6-22 Grace id ...-rib-dibXin every noteWhole-id test fails 1 failed, 1 passed R6-23 ,after the grace markerFail 2 failed R6-24 Source conflict(two spaces)Fail 2 failed R6-25 # See the source conflicts above.Fail 2 failed R6-26 The marker text in a string literal Parsed as a marker: fail 2 failed R6-27 (full) G note misspells ...-temporary-partial-deductionas...deductionXFail 1 failed, 14 passed 28 Split mention # Source/# conflict us:oasdi-...Fail 2 failed 29 Uppercase US:OASDI-brand-newmarkerFail 2 failed 30 Undocumented marker in a new parameters/insured_status.pyNot exempt: fail 2 failed 31 Logged id duplicated into parameters/ret_v1.yamlLocation check fails 1 failed, 1 passed 32 Grace marker followed by (see R2)Allowed (ends at whitespace) 2 passed 33 (full) G reading's marker moved from gross_benefits.pytoarf.pyAllowed by the prose 15 passed 34-38 Reworded marker or bare id (finding 1) Fail 2 passed 39-40 .YAMLand.pyifiles (finding 2)Fail 2 passed 41-44 (full) Heading variants (finding 3) Fail 15 passed 45-46 "resource conflict" and "the source. Conflicts" prose (finding 4) Not a source conflict 2 failed (over-strict) 47 (full) xus:oasdi-...as the only note mention (finding 5)Fail 15 passed
What I couldn't check
- CI at
079c33da: lint, build, both graph-integration jobs, Vercel and pytest-shard 3/4 had passed, and deploy was skipped. Shards 1/4, 2/4 and 4/4 were still in progress at review time, and I didn't see their results. - I ran only the readings test, not the full suite, on the head, on both merges and with the patch.
- I didn't check future Track B insured status: quarters of coverage; fully, currently and disability insured #562 or Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 heads past
168bb3a8anddbdceac5. If one of them adds aus:oasdiid outside a marker in a non-exempt file, the check in finding 1 would fail on it, and it should. - I didn't check Python 3.10-3.12 or a non-UTF-8 locale.
read_text()uses the locale encoding, so a non-ASCII byte in a scanned file could raise on such a machine.
Generated by Claude Code
- STRAYS replaces the mention count. Once its markers are removed, a scanned file may hold no "source(s)" joined to "conflict" by whitespace, #, - or _, no "us" joined to "oasdi" in any case or separator, and no id without its "us:". - The scan reads .py, .pyi, .yaml and .yml files with the suffix in any case, as UTF-8. - The insured-status modules keep their own register and test (#562), so the scan skips them outright. - DOCUMENTED gets a left boundary. - Heading lines, code blocks included, after removing leading whitespace, > and list markers: - ATX lines; - lines that open with ** or __; - HTML h1 to h6, closed or not; - setext runs. The test compares their text after decoding entities and removing markup. - The G note states each rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review This is an independent round-8 review (fix delta plus a full pass of the marker test) by a Claude Opus 5.5 cloud session, for the Track B readings session. Verdict: APPROVE at All six round-7 findings are resolved. I ran 127 mutations. Rounds 5 to 7's cases, the brief's listed forms and my own cases all behave as the note and docstring say, with four exceptions, all low or nit. The readings test passes on all three scratch merges, and so does #562's register test. The full pass found no input that lets a stale, missing, truncated, unparseable or undocumented marker pass where the prose says it can't. It also found no rule that breaks a legitimate marker or a file at the head, at #562's Findings1. Low: an
|
| # | Mutation | Expected from the prose | Result |
|---|---|---|---|
| 1 | R5-1 truncated parent-entitlement marker in ret_grace |
fail | 2 failed, 13 passed |
| 2 | R5-2 R5-1 + truncated id in OTHER_ROUNDS |
fail | 1 failed, 14 passed |
| 3 | R5-3 delete grace marker |
fail | 1 failed, 14 passed |
| 4 | R5-4 drop sole-full from OTHER_ROUNDS |
fail | 1 failed, 14 passed |
| 5 | R5-5 undocumented marker in new insured_status.py |
pass | 15 passed |
| 6 | R5-6 same U in insured_status.py and ret_grace.py |
fail | 2 failed, 13 passed |
| 7 | R5-7 U marker in new extra.py |
fail | 2 failed, 13 passed |
| 8 | R5-8 grace marker truncated to -rib |
fail | 2 failed, 13 passed |
| 9 | R5-9 wrapped grace id |
fail | 2 failed, 13 passed |
| 10 | R5-10 'Source conflict:' colon form |
fail | 2 failed, 13 passed |
| 11 | R5-11 ...-count-intervalX |
fail | 2 failed, 13 passed |
| 12 | R5-12 ...-count-interval_v2 |
fail | 2 failed, 13 passed |
| 13 | R6-13 prose 'source conflict' in b2.py docstring |
fail | 2 failed, 13 passed |
| 14 | R6-14 trailing period |
fail | 2 failed, 13 passed |
| 15 | R6-15 trailing paren |
fail | 2 failed, 13 passed |
| 16 | R6-16 U in _insured_status_qc.py and gross_benefits.py |
fail | 2 failed, 13 passed |
| 17 | R6-17 Source-conflict hyphen |
fail | 2 failed, 13 passed |
| 18 | R6-18 lowercase source conflict |
fail | 2 failed, 13 passed |
| 19 | R6-19 U marker in parameters/__init__.py |
fail | 2 failed, 13 passed |
| 20 | R6-20 wrapped marker in new insured_status.py |
pass | 15 passed |
| 21 | R6-21 grace id wrapped at hyphen in every note |
fail | 2 failed, 13 passed |
| 22 | R6-22 grace id ...-rib-dibX in every note |
fail | 2 failed, 13 passed |
| 23 | R6-23 trailing comma |
fail | 2 failed, 13 passed |
| 24 | R6-24 two spaces |
fail | 2 failed, 13 passed |
| 25 | R6-25 '# See the source conflicts above.' |
fail | 2 failed, 13 passed |
| 26 | R6-26 marker text in a string literal |
fail | 2 failed, 13 passed |
| 27 | R6-27 G note ...deductionX |
fail | 1 failed, 14 passed |
| 28 | R6-28 split mention |
fail | 2 failed, 13 passed |
| 29 | R6-29 uppercase US:OASDI marker |
fail | 2 failed, 13 passed |
| 30 | R6-30 U in new parameters/insured_status.py |
fail | 2 failed, 13 passed |
| 31 | R6-31 logged id dup into parameters/ret_v1.yaml |
fail | 1 failed, 14 passed |
| 32 | R6-32 grace marker + ' (see R2)' |
pass | 15 passed |
| 33 | R6-33 G marker moved to arf.py |
pass | 15 passed |
| 34 | R7-1.0 reworded/bare: # Conflicting sources us:oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 35 | R7-1.1 reworded/bare: # Conflict of sources: us:oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 36 | R7-1.2 reworded/bare: # Sources in conflict us:oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 37 | R7-1.3 reworded/bare: # Source dispute us:oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 38 | R7-1.4 reworded/bare: # Reading us:oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 39 | R7-2 marker in file with suffix .YAML |
fail | 2 failed, 13 passed |
| 40 | R7-2 marker in file with suffix .Yml |
fail | 2 failed, 13 passed |
| 41 | R7-2 marker in file with suffix .pyi |
fail | 2 failed, 13 passed |
| 42 | R7-2 marker in file with suffix .PY |
fail | 2 failed, 13 passed |
| 43 | R7-2c .json not scanned |
pass | 15 passed |
| 44 | R7-3 heading '## Needs Max’s judgment' |
fail | 1 failed, 14 passed |
| 45 | R7-3 heading "## Needs Max's Judgment" |
fail | 1 failed, 14 passed |
| 46 | R7-3 heading "Needs Max's judgment\n----" |
fail | 1 failed, 14 passed |
| 47 | R7-3 heading " ## Needs Max's judgment" |
fail | 1 failed, 14 passed |
| 48 | R7-3 heading "## Needs Max's judgment" |
fail | 1 failed, 14 passed |
| 49 | R7-4a 'resource conflict' prose |
pass | 15 passed |
| 50 | R7-4b 'the source. Conflicts' prose |
pass | 15 passed |
| 51 | R7-4c rename grace id to ...-source-conflict-rib-dib everywhere |
pass | 15 passed |
| 52 | R7-4d control rename ...-other-rib-dib |
pass | 15 passed |
| 53 | R7-5 U marker, OTHER_ROUNDS, doc only as xU |
fail | 1 failed, 14 passed |
| 54 | R7-5c control: doc as U |
pass | 15 passed |
| 55 | brief bare/prose: # US:OASDI-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 56 | brief bare/prose: # us-oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 57 | brief bare/prose: # us_oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 58 | brief bare/prose: # us : oasdi-brand-new-undocumented |
fail | 2 failed, 13 passed |
| 59 | brief bare/prose: # oasdi-x-y |
fail | 2 failed, 13 passed |
| 60 | brief bare/prose: # Benefits under US OASDI rules. |
fail | 2 failed, 13 passed |
| 61 | brief allowed prose: # Insured status OASDI rules. |
pass | 15 passed |
| 62 | brief allowed prose: # OASDI-covered work. |
pass | 15 passed |
| 63 | brief allowed prose: # The resource conflict is handled. |
pass | 15 passed |
| 64 | marker ends at colon |
pass | 15 passed |
| 65 | marker ends at tab |
pass | 15 passed |
| 66 | marker at EOF, no newline |
pass | 15 passed |
| 67 | '## Source conflict <id>' |
pass | 15 passed |
| 68 | '#Source conflict <id>' |
fail | 2 failed, 13 passed |
| 69 | non-UTF-8 byte in scanned file |
fail | 2 failed, 13 passed |
| 70 | N1 reworded, id words without oasdi: '# Conflicting sources: brand-new-undocumented' |
pass(note) | 15 passed |
| 71 | N2 four colons, one word: us::::oasdi-x |
pass(note) | 15 passed |
| 72 | N2b four colons, two words: us::::oasdi-x-y |
fail | 2 failed, 13 passed |
| 73 | N3 dot separator one word: us.oasdi-x |
pass(note) | 15 passed |
| 74 | N4 underscores: oasdi_brand_new_undocumented |
pass(note) | 15 passed |
| 75 | N5 U+2011 hyphens without us:: oasdi‑brand‑new |
pass(note) | 15 passed |
| 76 | N5b U+2011 hyphens with us: |
fail | 2 failed, 13 passed |
| 77 | N6 xus:oasdi-x (one word, letter before) |
pass(note) | 15 passed |
| 78 | N7 accented letter before source: '# résource conflict' in runner.py |
pass(note: letter before) | 2 failed, 13 passed |
| 79 | N7b Cyrillic homoglyph 'Sоurce conflict' + no id |
pass(note) | 15 passed |
| 80 | N8 underscore in id, logged+documented |
?(note silent on id grammar) | 2 failed, 13 passed |
| 81 | N9 marker id = logged id with '.' in it, logged+documented |
?(note silent) | 2 failed, 13 passed |
| 82 | N10 CRLF line endings on ret_grace.py |
pass | 15 passed |
| 83 | N11 G marker moved into exempt insured_status.py |
fail | 1 failed, 14 passed |
| 84 | N12 marker in hidden subdir .scratch/x.py |
fail | 2 failed, 13 passed |
| 85 | N13 marker in file named INSURED_STATUS.py |
fail | 2 failed, 13 passed |
| 86 | N14 U marker, logged, documented only as U + 'é' suffix |
fail(note: letter after) | 15 passed |
| 87 | N15 U marker, logged, documented only in another track_b_*.md note |
pass | 15 passed |
| 88 | N16 marker inside a docstring after other text 'x# Source conflict U' |
fail | 2 failed, 13 passed |
| 89 | N17 READINGS G id documented only in R2 note |
fail | 1 failed, 14 passed |
| 90 | H1 strikethrough inside: '## Needs ~~Max's~~ judgment' |
pass(note) | 15 passed |
| 91 | H1b strikethrough whole: '## ~~Needs Max's judgment~~' |
fail | 1 failed, 14 passed |
| 92 | H2 acute accent U+00B4 apostrophe |
pass(note) | 15 passed |
| 93 | H3 prime U+2032 |
pass(note) | 15 passed |
| 94 | H3b fullwidth U+FF07 |
pass(note) | 15 passed |
| 95 | H4 LRM U+200E before space |
pass(note) | 15 passed |
| 96 | H4b word joiner U+2060 inside |
fail | 1 failed, 14 passed |
| 97 | H5 <Needs Max's judgment> |
pass(note order) | 15 passed |
| 98 | H6 raw <Needs Max's judgment> (CM shows literal) |
pass(note) | 15 passed |
| 99 | H7 Cyrillic e homoglyph |
pass(not claimed) | 15 passed |
| 100 | H8 <h2 title='a>b'> |
fail | 15 passed |
| 101 | H9 <h2> attribute with > single-quoted |
fail | 1 failed, 14 passed |
| 102 | H10 <b> line |
pass(note) | 15 passed |
| 103 | H11 italic-only line *...* |
pass(note) | 15 passed |
| 104 | H12 HTML comment between words |
fail | 1 failed, 14 passed |
| 105 | H13 numbered '## 3. Needs Max's judgment' |
fail | 1 failed, 14 passed |
| 106 | H14 'Open: Needs Max's judgment' |
pass(note: starts with) | 15 passed |
| 107 | H15 NBSP entity between words |
fail | 1 failed, 14 passed |
| 108 | H16 double-encoded &#39; |
pass | 15 passed |
| 109 | H17 7 #s |
pass | 15 passed |
| 110 | H18 #Needs no space |
pass | 15 passed |
| 111 | H19 tab after # |
fail | 1 failed, 14 passed |
| 112 | H20 > - ## nested |
fail | 1 failed, 14 passed |
| 113 | H21 setext under list item |
fail | 1 failed, 14 passed |
| 114 | H22 '= = =' underline |
pass | 15 passed |
| 115 | H23 'judgement' |
fail | 1 failed, 14 passed |
| 116 | H24 inline code in heading |
fail | 1 failed, 14 passed |
| 117 | H25 link text |
fail | 1 failed, 14 passed |
| 118 | H26 'Needs Max's' / judgment over 2 lines setext |
fail | 1 failed, 14 passed |
| 119 | H27 html h2 unclosed multiline |
fail | 1 failed, 14 passed |
| 120 | H28 escaped '\## Needs' |
pass | 15 passed |
| 121 | H29 bold lead-in |
fail | 1 failed, 14 passed |
| 122 | H30 ’ entity |
fail | 1 failed, 14 passed |
| 123 | H31 closing ## |
fail | 1 failed, 14 passed |
| 124 | H32 underscore bold |
fail | 1 failed, 14 passed |
| 125 | H33 fenced code |
fail | 1 failed, 14 passed |
| 126 | H34 indented code |
fail | 1 failed, 14 passed |
| 127 | Q1 quote with double space |
fail | 1 failed, 14 passed |
What I couldn't check
- CI at
5853c77e, read with the brief's command. Lint, build, both graph-integration jobs, Vercel and pytest-shard 3/4 had passed, and deploy was skipped. Shards 1/4, 2/4 and 4/4 were still in progress when I posted, and I don't know their results. - I ran only the readings test and Track B insured status: quarters of coverage; fully, currently and disability insured #562's insured-status test, not the full suite.
- I didn't check Track B insured status: quarters of coverage; fully, currently and disability insured #562 or Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 heads later than
f9287518anddbdceac5, or Python 3.10-3.12. - The mutation list covers the forms I could think of. It is not a proof that no other spelling slips past. In particular, the stated gaps in finding 7 have no fixed end: there are more invisible characters and look-alike letters than any list covers.
Generated by Claude Code
The notes check now reads every opening, not only headings: a non-blank line continues the line above it only when both start with a letter A to Z after the same leading whitespace and neither holds ">" or "|"; every other line opens, through the end of its non-blank run. The text after each h1 to h6 tag counts too, with the tag read as ending at its first ">" and again at its first ">" outside quotes (round 8, finding 1). An opening fails when its letters A to Z, after entity decoding, NFKD and lower-casing, start with "needsmaxsjudgment" or "needsmaxsjudgement", in either of two readings: with HTML tags and Markdown link targets removed, and as written. Punctuation, apostrophes, digits, whitespace, markup and invisible characters no longer hide the phrase (finding 7). The note states what still can: a letter a reading keeps, or a look-alike letter from another script. The stray rules count only A to Z and 0 to 9 as letters and digits, even under IGNORECASE. The note gives the id grammar, says files and notes are read as UTF-8, and says whose whitespace the quote check collapses (findings 2 to 6). 170 mutations behave as the note says. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draft against master. #563 merged as edba88f, so this PR now targets master.
This PR finishes the work that #564 started for R3. It re-decides every remaining "Needs Max's judgment" item in the G and R2 design notes, plus #563's new refusals, under Max's 2026-10-20 delegation. Single readings are the session's call under P1–P4, logged in the source-conflict rulings with the ids below. Patterns and collisions between principles go to Max; one is queued as d1920, for 20 CFR versus POMS.
Readings that change money
Each reading keeps its rejected alternatives pinned as diagnostics and is checked by a Hypothesis property. Each has killed mutants (see below).
us:oasdi-dual-entitlement-zero-after-age-reductionparisi_redistribution_ambiguous)us:oasdi-parent-entitlement-count-intervalus:oasdi-dwb-1984-pre-1978-historyus:oasdi-ret-grace-simultaneous-rib-dibus:oasdi-ret-deemed-entitlement-basis(a)InvalidFamilyInput: the recipient is not on this NH's ledger and keeps $200 on their own recordus:oasdi-ret-own-work-age-exemptionsown_work_exempt_monthsassertion was an optional broader readingInvalidFamilyInput. The Act exempts only CDB and DWB months, which the ledger already exempts by typeRefusals or defaults kept, with a stated basis
us:oasdi-saving-clause-procedure-gaps(new markers): RS 00630.400 (d1338) doesn't cover these configurations, so they stay refused. The sources are silent.us:oasdi-dual-entitlement-pre-1978-history: stays refused. RS 00615.250 cites a.005Fthat doesn't exist.us:oasdi-nh-charge-age-reduction-interaction: stays refused. No rule or example settles it.us:oasdi-reduction-exact-fractions: not a conflict. The Act states fractions, and RS 00615.005B says "only fractions can be used".us:oasdi-disability-family-maximum-rounding: floor to the dime. Under P1, the agency's published reading fills the statute's silence. A blind adjudication preferred leaving it unrounded; that view is recorded, and the stakes are at most $0.10 per auxiliary.us:oasdi-ret-negative-nese-proration: floor, a close call. 203(f)(3) delegates the rounding to SSA, and RS 02501.080 uses "round down" to mean "to the next lower dollar". A blind adjudication preferred dropping the cents; that view is recorded.us:oasdi-ret-deemed-entitlement-basis(b): a married ordinary adult child is entitled only through 402(d)(5) for a marriage made while disabled (402(s)(2)). That residual case stays refused.us:oasdi-ret-other-deductee-scope: not a conflict. 20 CFR 404.441 governs.Sources and tests
New statutory text. 42 U.S.C. 402(d)(1)(D), (d)(5), (e)(1), (h)(1)(D), (h)(2), (k)(3)(A), (k)(4) and (s) were added to
lii_usc_402_415_excerpts.txt. They come from a re-fetch whose body matched the pinned 402 SHA-256 byte for byte; the manifest's bytes, SHA-256 and note are updated.tests/test_track_b_readings_20261023.py. It checks:The G note states the exact rules.
Conformance report. It is regenerated: the 356,400-cell lattice is unchanged, and only the
parent_benefitwitness moves to two parents in the band.Hypothesis properties:
test_method_b_counted_amount_is_the_before_age_amount: continuity, the A.2 boundary, and children never falling as the own benefit rises.test_parent_entitlement_satisfies_402h1d_for_every_parent: an exact differential against a brute-force enumeration of the consistent sets.test_historical_dwb_is_settled_exactly_before_the_cohort_can_attain_60: equals a post-1977 cohort exactly.Blind adjudications (round 2)
Four Opus adjudications ran on a clean master clone without this PR's conclusions; they are in the evidence folder. They agreed on the parent count, the 1984 DWB rule, the RIB/DIB grace months, deemed entitlement, the kept refusals and R3. Their disagreements:
They also surfaced three findings, all applied: the unrounded parent thresholds, the unlawful own-work override, and the method-B figure for historical dual entitlement. Their 20 CFR-versus-Act instances are noted on Max's pattern decision d1920.
Mutation checks
Each check ran in an isolated copy of
src/, with its import path verified. Each mutant failed at least one targeted test:Verification so far
At head 479c321, the full Track B suite plus
tests/sspasses: 12,581 passed, 6 skipped (pytest -n 4, with the staged-data roots unset). Black and ruff are clean on the changed files. The conformance report regenerates with only the parent witness changed.Since then:
_original_entitlement_rowsnow takes the payment month and the resolved parent set, and a_parent_thresholdhelper gives each parent its unrounded 402(h)(1)(D) rate. Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563's new R2 context check uses the same helper.-n 1(a host hold is in force; CI runs the full suite).OTHER_ROUNDS. The insured-status modules stay exempt, as in round 3; without that, Track B insured status: quarters of coverage; fully, currently and disability insured #562's undocumented insured-status ids fail 1fa5686's test on a scratch merge of Track B insured status: quarters of coverage; fully, currently and disability insured #562's 168bb3a, while the new test passes there. The G note now states what the test checks. Findings 3 and 4 concern Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563's code (an unreachable R2 parent branch, and the NH refusal's new scope), so they went to Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563's owner.conflict:colon form) went unseen, and the note didn't state the insured-status exemption. One low finding: an id run on past a non-id character (...intervalX) read as the documented id. One nit: the note omitted the check that each note names its readings.parameters/subpackage. One low: the check that each note names its readings matched substrings. One nit: the note didn't state where a marker's id ends.sources?[\W_]*conflict, any case).# Conflicting sources us:oasdi-...or# Reading us:oasdi-.....YAML,.Ymland.pyifiles went unscanned, and heading variants (a curly apostrophe, "Judgment", setext, an indent) slipped past.Ids now fail by their own text. With its markers removed, a scanned file may hold none of these, in any case:
us:;#,-or_, with a left boundary.The scan reads
.py,.pyi,.yamland.ymlfiles, with the suffix in any case, as UTF-8. It skips the insured-status modules outright, since Track B insured status: quarters of coverage; fully, currently and disability insured #562 gives them their own register and test.Note ids need a boundary on both sides.
The headings check reads every line, code blocks included. On each line it first removes leading whitespace,
>and list markers, then counts:**or__;It compares the text after decoding entities and removing markup.
The G note states each rule, including "verbatim up to whitespace".
All 105 mutations behave as the note says.
Scratch merges pass with Track B insured status: quarters of coverage; fully, currently and disability insured #562 at f928751 (19 passed, with its own register test), with Track B G part 2 and R2 part (b): deductions before reduction; SSA's operational saving clause #563 at dbdceac (15 passed), and with both (19 passed).
The test count is still 15.
>inside a quoted attribute ended an h1 to h6 opening tag early;<b>or*...*lines, and a raw<Needs ...>.>or|. Every other non-blank line opens a block: a heading, paragraph, list item, table row or other block. The text after each h1 to h6 tag counts too, with the tag read as ending at its first>and again at its first>outside quotes.re.IGNORECASE. The note gives the id grammar, says the test reads files as UTF-8, and says whose whitespace the quote check collapses.test_each_note_names_its_readings_and_opens_no_judgment_item.git merge-tree --write-treeof its two parents (6dfc4b7a).test_track_b_readings_20261023.py(15),test_track_b_ret_ledger_fix_round_2.py(20),test_track_b_b0_2_counts.py(248) andtest_track_b_b0_2_exclusions.py(4). CI runs the full suite.Still open: the round-9 review, CI at d636d76, then a tier slot. The coordinator's #563 comment names #574 next, so this PR may need one more master merge and recount.
axiom: n/a: microcosm-dynamics statutory reference, not a PolicyEngine country model.
🤖 Generated with Claude Code