Skip to content

Track B G v2: close #495, compute five refused configurations, one contract across G, R2 and R3 - #530

Merged
MaxGhenis merged 37 commits into
masterfrom
trackb-g-20261011
Oct 23, 2026
Merged

MaxGhenis merged 37 commits into
masterfrom
trackb-g-20261011

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

This PR completes the conformance review of Track B G (the gross-benefit layer, #492), closes #495 and computes five configurations G used to refuse. It also puts G, R2 (#528) and R3 (#529) under one shared contract for inputs, results and refusal denominators. It is statutory conformance only, on invented families and SSA's published worked examples, and makes no population claim. Version track-b-g-v2.

What changes in G

  • Track B G follow-ups: input-validation ordering, 402(q) cohort bound, 403(a)(5) scope for I #495.
    • Record refusals are deferred until the family's inputs are checked, in both entry styles.
    • 402(q) reduction months are bounded by cohort (FRA − 744).
    • Widow(er) reduction periods are fixed by cohort year, under SSA's January 2 to January 1 convention (RS 00615.301B.2).
    • Births 1914–1916 are bounded by the RS 00615.692E chart.
    • Cross-field checks are added.
    • A household helper evaluates one month against per-record 403(a)(5) guards.
  • Newly computed:
    • dual entitlement with an age-reduced own RIB, by GN 02603.050C's PTAP formula (GN 02603.060 A.5, A.8, A.9 and B.2 reproduced);
    • disabled widow(er)s at 50–59 from January 1984: 28.5 percent, with the reduction rounded up to a dime (RS 00615.310);
    • the government pension offset ignored from January 2024 (Social Security Fairness Act; GN 02608.100);
    • independently entitled divorced spouses (402(b)(4)(A); RS 00202.005, .100);
    • one or two parents (402(h); RS 00209.001, .015).
  • Newly refused, by name:
    • families protected by the widow(er) DRC saving clause (RS 00615.712);
    • a RIB-LIM that actually limits a dually entitled widow(er)'s rate.
  • Registry and denominators.
    • 29 statutory worked examples in one registry, with 216 figures checked verbatim against their captures.
    • A coverage test that fails when a supported configuration class has neither an example nor a stated reason.
    • A committed invented-configuration lattice: 356,400 configurations, of which 8,831 are supported, 60,775 refused by reason and 286,794 invalid. A test regenerates it byte for byte. These are invented-configuration denominators and say nothing about populations.
    • 58 pinned source captures.
  • The depletion-cut artifact (PolicyEngine-US bridge: depletion-cut offsets for illustrative households #506). A unit-tier test rebuilds the committed couple's G inputs. Its gate runs that proof and then excludes gross_benefits.py from its source pin. The artifact itself is unchanged.

One contract across G, R2 and R3

Merging master showed that R2 and R3, merged meanwhile, build on G's types. G, R2, R3 and the package-private track_b/_provenance.py now follow one contract. Each part is stated in the three design notes, with the tests that execute it:

  • One schema boundary, checked once per public call.
    • Built-in scalars are matched by exact type(), and enum members by identity.
    • Declarations are rebuilt field by field. Raw container contents are checked before anything is built or hashed.
    • Collections are declared either ordered or membership. Ordered collections (COLA events, monthly arrays, histories) keep every element in order; membership collections (months, flags) collapse by value.
    • Receivers and arguments are checked before any attribute read or hook.
    • Anything else is an input error, which never becomes a refusal or a denominator row.
  • Sealed values.
    • Results, refusals, outcomes and denominators can be built only by their layer's computation.
    • Copying, replacing and pickling are refused. Work that must persist stores declared inputs and recomputes.
    • Each refusal class is bound to exactly one reason enum: G, RET, ARF or recomputation.
  • One denominator.
    • count_family_outcomes counts sealed outcomes from every layer, and the layer counters agree with it.
    • Evaluators check provenance (computed by their own layer and unaltered), not freshness or attribution.
  • Threat model. Nothing is claimed against code that reaches private names, monkeypatches modules or mutates inputs from another thread during a call.
  • Narrowings, both documented:
    • iterators are input errors (R3 used to accept them);
    • sets are input errors for ordered fields.
  • No amount changes in R2 or R3. Lane cross-head differentials against master matched on every case (4,428 at the final round).

Invariants

Each invariant is a Hypothesis property; the full mapping is in docs/design/track_b_g_gross_benefits.md.

  • Family totals and shares:
    • The family total stays within the maximum.
    • Proportional shares are within a dime.
    • The maximum is monotone in PIA and AIME.
    • Adding a non-dually-entitled auxiliary never raises another's benefit.
    • Dual entitlement never pays below the own benefit.
    • Households of unrelated records equal their records.
  • Refusals and inputs:
    • Refusals always raise and stay in denominators.
    • Input errors never count.
  • Rounding and arithmetic:
    • Amounts are dime multiples, with whole-dollar floors.
    • Ordered COLAs equal their element-by-element dime fold.
    • The PTAP formula matches an independent reference.
  • The 403(a)(5) guard contract: after a qualifying PIA increase, a lower total is refused and its row is kept. A COLA alone can lower the dime-rounded total.
  • Contract properties:
    • Seal integrity, receiver-first checks and layer-counter agreement hold.
    • Results are deterministic and order independent.
  • Differentials:

Still refused (named, kept in denominators)

  • Dates: pre-1983 eligibility or payment months; pre-July-1980 DIB; Parisi before October 1999; IEDS before 1985 or with WEP before 2024; pre-1917 delayed credits.
  • Family structures: combined family maximums and multiple auxiliary records; deemed spouses; more than two parents, or the circular two-parent own-RIB interval.
  • Benefit forms and offsets: DIB guarantee PIAs; DIB after a reduced RIB; workers' compensation; GPO before 2024; non-AIME formula PIAs.
  • Unsettled interactions: administrative finality; some dual-entitlement sequences; unresolved Parisi interactions.
  • 403(a)(5): still the literal refusal here. Max ruled d1338 (adopt SSA's operational reading of RS 00630.400 and keep the literal one behind a switch). That lands in G part 2, which d1802 queues next with R2 part (b).

Readings left open (each refused; both sides pinned)

  • Zero only after auxiliary age reduction. A dually entitled spouse whose rate reaches zero only after the auxiliary's age reduction: GN 02603.045A against GN 02603.050A.2/C.1.
  • The circular parent interval. The parent entitlement count when one parent's own RIB is between 75 and 82.5 percent of the PIA (RS 00209.001 against .015).
  • Pre-1978 historical reductions: RS 00615.301B.1.e against .005C.2, and some dual sequences.

No reading is chosen in this PR.

Review

GPT-6.1 Sol reviewed this PR over 14 rounds; round 14 approved at 4246b578. The earlier rounds found, among other things:

  • widow cohort periods, the RS 00615.712 saving clause and the depletion-cut gate (round 1);
  • contradictory result fields and role/record compatibility (round 10);
  • mutable numerics, unsafe pickle restoration, a false COLA property, input errors counted as refusals, and mutable guard state (round 11);
  • forged identities and containers rebuilt before validation (round 12);
  • a set of COLAs that lost an event ($1.10 instead of $1.20) and getters reading receivers before checking them (round 13).

Each was fixed as a class across the layers. Round 14 left one low finding: deleting a refusal's exception notes raises IndexError. It changes no amount or denominator, and is fixed in G part 2. The reviews are in the Track B evidence folder (out/review-g-r*.json).

Checks

  • At 2907297c, run locally:

    Suite Result
    G 8,169 passed
    R2/R3 2,352 passed
    Delayed-credit, d1408 and birth-evidence 671 passed
    Bridge, live PolicyEngine-US oracle 615 passed
  • After merging master (1e739d32) at 4246b578: tier policy, birth-evidence and B2 (244 passed), and G with R2/R3 (10,521 passed). Black and ruff are clean, and protected files are untouched.

  • Tiers:

    Tier Tests
    unit 18,088
    artifact 4,253
    integration_psid 1,450
    reproduction_legacy 520
    oracle_policyengine 308
    Total 24,619
  • Cost: G's conformance regeneration takes about 1.43× the CPU of 5e68159b, measured back to back with identical output.

axiom: n/a: not a country-model change. G, R2 and R3 are Python statutory references per d515; rulespec-us has no 42 U.S.C. 403 encoding.

🤖 Generated with Claude Code

MaxGhenis and others added 4 commits October 11, 2026 20:11
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>
@vercel

vercel Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
social-security-model Ready Ready Preview Oct 21, 2026 2:12pm UTC

Request Review

MaxGhenis and others added 2 commits October 11, 2026 20:21
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>
MaxGhenis and others added 2 commits October 12, 2026 06:48
…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>
MaxGhenis and others added 3 commits October 12, 2026 10:54
…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>
MaxGhenis and others added 2 commits October 14, 2026 02:19
…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>
MaxGhenis and others added 4 commits October 14, 2026 05:05
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>
MaxGhenis and others added 2 commits October 15, 2026 08:34
…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>
MaxGhenis and others added 2 commits October 15, 2026 16:33
…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>
… 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>
MaxGhenis and others added 2 commits October 16, 2026 04:42
…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>
MaxGhenis and others added 2 commits October 16, 2026 11:52
… 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>
MaxGhenis and others added 2 commits October 16, 2026 19:10
…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>
MaxGhenis and others added 2 commits October 21, 2026 09:51
…k receivers first

Round 13 found two mediums. increase_by_colas(1, {10, "10"}) paid $1.10
instead of $1.20: both raw elements were valid, normalized to equal
values, and the set rebuild dropped one. And _check_seal read a
receiver's attributes before checking its type, so a foreign receiver
calling a public getter could re-raise a genuine earlier refusal and
have it counted.

Every collection field and argument in G, R2 and R3 is now declared
either ordered or a membership:

- Ordered fields are COLA events, monthly arrays, beneficiary and outcome
  rows, histories and schedules. They admit tuples and lists only and
  keep every element in order, since 215(i)(2)(A)(ii) floors to the dime
  after each increase. Sets are rejected for them, a documented
  narrowing like the iterator one.
- Memberships hold only calendar months or canonical enums and collapse
  by value. Numeric aliases are rejected rather than collapsed.

Every public function, method, property getter and reachable dunder
checks the exact registered type of its receiver and arguments before
any attribute read or hook. The design notes state the evaluator scope:
provenance (computed by the right layer, unaltered), not freshness or
which family the caller attributes a value to.

No amount, refusal or example changes on inputs master or round 12
accepted. G's conformance report regenerates byte for byte. Back to
back, its regeneration costs about 1.43x CPU against 5e68159.

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

Master's 67 commits touch Track B only in b2.py and its tests, which do
not use G. The tier files are recounted by collection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
The insured-status rule has an owner: under d1802, Track B's rules
lane builds it as a separate PR once #530 merges. OP8(d) now consumes
it through an interface in section 6.1 that states how the pre-entry
covered-work convention enters the quarters-of-coverage count (zero-
and four-filled calls, with an undetermined status where they differ).
Drops revision 2's decision 7 and its scale estimate for the rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Track B G v2: close #495, compute five refused configurations, register examples and refusal denominators Track B G v2: close #495, compute five refused configurations, one contract across G, R2 and R3 Oct 23, 2026
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 23, 2026 10:17
@MaxGhenis
MaxGhenis merged commit 6967142 into master Oct 23, 2026
19 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merge audit: merged as 6967142 at head 4246b578, with a merge commit pinned by --match-head-commit.

  • Independent review. GPT-6.1 Sol reviewed 14 rounds. Round 14 approved at 4246b578, the merged head, with no medium or high findings. Its one low finding (deleting a refusal's exception notes raises IndexError) changes no amount or denominator. It is assigned to G part 2, which goes next. Rounds 1–13 requested changes, and each was fixed as a class across G, R2 and R3; the PR body lists them.

  • CI. Every check passed on the slot-time rerun (Tests run 39614670109, attempt 2, against master 1e739d32): four pytest shards, graph-integration on 3.13 and 3.14, pytest, build, lint and Vercel. GitHub Pages deploy was skipped. gh pr checks exited 0, and the PR was MERGEABLE, not a draft, with no changes requested.

  • Local gates at 2907297c. G 8,169; R2/R3 2,352; delayed-credit, d1408 and birth-evidence 671; live PolicyEngine-US bridge 615 (all passed). After the master merge (4246b578): tier policy, birth-evidence and B2 244, and G with R2/R3 10,521 (all passed).

  • Tiers at merge, recounted by collection at the slot:

    Tier Tests
    unit 18,088
    artifact 4,253
    integration_psid 1,450
    reproduction_legacy 520
    oracle_policyengine 308
    Total 24,619
  • Protected files (gates.yaml, engine/loop.py, engine/steps.py, runs/*.json) are untouched.

  • Next (Max's d1802): G part 2 with R2 part (b), then insured status.

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis deleted the trackb-g-20261011 branch October 23, 2026 13:09
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
tests/tier_counts.json and tests/README-tiers.md conflicted. Recounted on
the merged tree with pytest --collect-only -m <tier>: unit 18,189
(master's 18,088 + this PR's 101), artifact 4,263 (4,253 + 10),
integration_psid 1,450, reproduction_legacy 520, oracle_policyengine
308; total 24,730. README-tiers.md had kept round-2 numbers on this
branch; it now matches the manifest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Tiers by collection at the merge of origin/master 6967142: unit 18,125
(+37), artifact 4,261 (+8); integration_psid 1,450, reproduction_legacy
520 and oracle_policyengine 308 unchanged; total 24,664. The tier
policy test passes against the full collection.

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

This branch was successfully deployed

1 active deployment
Preview — 4246b578 Deployed Oct 21, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Track B G follow-ups: input-validation ordering, 402(q) cohort bound, 403(a)(5) scope for I

1 participant