Skip to content

U2 §20 steps 4–6: record the step-4 pass, materialize the final parameter block and rulings record, ratify by merge - #556

Merged
MaxGhenis merged 13 commits into
masterfrom
u2-step5-parameter-block
Oct 24, 2026
Merged

MaxGhenis merged 13 commits into
masterfrom
u2-step5-parameter-block

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

U2 specification §20 steps 4–6 for the 1946–55 blind test (docs/design/boomers2004_1946_55_comparison.md), assigned by the dynamics coordinator session. Merging this PR is §20 step 6: it ratifies the specification (u2-ratified-1) under d514.

What it does

§20 step 4: the step-4 record. Value-free facts only:

  • The d1649 pass stopped on 2026-10-19 at 640adccf.
  • The d1724 pass completed on 2026-10-21 at 1e739d32, after master Tests run 39502262845.
  • d1597's U1 pin check passed before each pass.
  • No refusal, failure or mapping failure.
  • Identities reconcile in all six support waves.
  • §16d's disclosure keys are present in U0 and U1.
  • Outputs are cited only by MANIFEST.md SHA-256 acf5d8a4…e6d.

§20 step 5: the final parameter block (version u2-ratified-1, status ratified_frozen).

  • Every TO_VERIFY key is resolved:
    • the SSI capture is pinned (a58d55c1…);
    • employer_dc.reader = uniform_cut_track_u2/sources.py;
    • later_wave_mapping_status records the RESOLVED pension registry.
  • Amendment 5: its ratified previous_routes fragment is applied. Registry-cited lines 1173 and 1185 keep their draft-3 number and text.
  • blocked_by is empty, with each blocker's resolution stated.
  • The step-4 evidence record is pinned (7bc5c3c2…b845, from its MANIFEST). The loader refuses any other bytes before parsing; the restricted file itself is untouched.
  • U2's rulings record (decisions) covers d514 (every §16 ruling), d637 (1a–1c with d745's confirmation; 2, 3, 4, 5a, 5b, 6; the PSID questions), d1090 (B1, B2, 5c), d1242, d1597 (both uses), d1649 and d1724.
  • A new appendix maps each prose TO VERIFY line in §§2–14 (kept, because registries cite those lines) to its resolution.

Code:

  • rows.expected_specification_block() states the whole block from code, registry and loader constants.
  • rows.check_block_against_code and rows.check_rulings_against_code refuse any difference.
  • The registered run's preflight and the dry run apply both checks.

No registry byte changes, so the step-4 evidence's registries_sha256 still equals sources.REGISTRY_SHA256.

Invariants (tested)

  • The committed §15 block equals expected_specification_block() under == and as canonical JSON.

  • check_block_against_code passes a block iff it is canonically equal to the code's. It names the path of every:

    • changed leaf (exhaustive over about 520 leaves);
    • added or dropped key at every level;
    • JSON type change (true/1, 1/1.0, -0.0);
    • repeated key.

    A Hypothesis property covers arbitrary scalars.

  • The rulings record names exactly the eight U2 decisions. Every registry entry it names is RESOLVED and records that decision (and option). The d637 entries equal the registry module's ratified scopes, and the d1090 exclusions equal the role entries that carry them.

  • Every prose TO VERIFY line before §15 has an appendix row, and every cited test, registry entry and block path exists.

  • Lines before §15 equal draft 3 except the version and status lines. §15 through line 1185 changes only at the materialized lines. §16 equals draft 3 at its new position.

Mutation checks: across rounds, every reviewer-surviving mutant is now killed. Two of my own mutants survive, and both are equivalent: a redundant type check, and one of two independent clauses.

Verification

  • Tests (empty POPULACE_DYNAMICS_PSID_DIR; no PSID record read). At a9ff290e, tests/track_u2 and tests/track_u give 1,607 passed and 254 skipped. Earlier, at fb7d92b9, the Boomers spec and replication tests and the birth-evidence artifact test also passed: 1,721 passed and 254 skipped in all. The later commits change tests and records only.

  • Tier counts, recounted at the tier slot after Track B G v2: close #495, compute five refused configurations, one contract across G, R2 and R3 #530: unit 18,125, artifact 4,261, integration_psid 1,450, reproduction_legacy 520 and oracle_policyengine 308, for 24,664 in total. The full-suite tier check passes at 7fc7ab21 and a9ff290e, and also on a local merge of 7fc7ab21 with master 4fc2b9f4. CI's run at a9ff290e tested its merge with master 2195258c.

  • U1 differential (§17 item 7) at 14d9576a, the last code change, against 9cee2423: equal in every check. Report: docs/design/u2_m2_u1_differential_14d9576.json.

  • Independent reviews (records in EV/rulings-records-20261021-u2-step5/):

    Round Lane Verdict Findings
    r1b Opus 5.5 REQUEST CHANGES 10, fixed
    r2 GPT-6.1 Sol REQUEST CHANGES 8, fixed
    r3b GPT-6.1 Sol APPROVE 1 nit, fixed
    r4 GPT-6.1 Sol APPROVE at ac808d4a 1 nit, fixed
    r5 GPT-6.1 Sol REQUEST CHANGES at 7fc7ab21, with no defects found; it withheld approval only for two checks its read boundaries blocked —
    r5b Opus 5.5, in session APPROVE at 7fc7ab21, after running those two checks —
    r6 Opus 5.5 (Subfleet) APPROVE at a9ff290e, a delta review of the record wording 4 nits, non-blocking; noted in the merge audit

Reading and exposure

Recorded in docs/design/u2_m2_exposure.md (§20 steps 4–6 section). No file on the restricted list was opened, no PSID record was read and no statistic was computed. The lane may later forecast U2, so everything it read is listed there.

🤖 Generated with Claude Code

§20 step 4 now records both step-4 passes in value-free terms: the
d1649 pass stopped on 2026-10-19 at 640adcc without output (§16d), and
the d1724 pass ran once on 2026-10-21 at 1e739d3 after master's Tests
run 39502262845 passed there. The d1597 U1 pin check passed, both
scripts completed with no refusal, failure or mapping failure, every
income and WEALTH1 identity reconciles in all six support waves, and
rows U0 and U1 carry §16d's disclosure keys. The record cites the
outputs' MANIFEST.md by SHA-256 (acf5d8a4...e6d) and states no count,
value or other statistic from either pass.

§19 gains the matching changelog entry, the exposure record gains this
lane's reading, and u1_identity.json repins the specification's hash.
No line before §16a, no registry and no code changes.

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

vercel Bot commented Oct 21, 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 24, 2026 12:03pm UTC

Request Review

MaxGhenis and others added 2 commits October 21, 2026 10:42
§15 now holds the final block, u2-ratified-1 (status ratified_frozen):
- the three TO_VERIFY keys are resolved: the SSI capture's SHA-256 is
  pinned (a58d55c1...3762, as parameters.SSI_SHA256), the employer-DC
  reader names the U2 adapter (uniform_cut_track_u2/sources.py), and
  later_wave_mapping_status records the RESOLVED pension registry;
- previous_routes is amendment 5's ratified fragment, laid out so the
  registry-cited lines 1173 and 1185 keep their draft-3 number and text;
- blocked_by is empty, with each blocker's resolution in §20 step 5;
- decisions holds U2's rulings record: d514's eleven entries unchanged,
  plus d637 (1a-1c confirmed by d745; 2, 3, 4, 5a, 5b, 6; the PSID
  questions), d1090 (B1, B2, 5c), d1242, d1597, d1649 and d1724.

Code: rows.U2_RULINGS builds its registry-applied entries from the
registry module's ratified scopes; rows.expected_specification_block()
states the whole block from the code; check_block_against_code and
check_rulings_against_code refuse any difference, and the registered
run's preflight and the dry run apply both.

Tests: test_u2_specification_block.py holds the committed block equal
to the code and refuses a change to every leaf, every added or dropped
key and every JSON type change; a Hypothesis property checks that the
check passes exactly the canonical block; the rulings record is held to
every decision and the registries; the new TO VERIFY appendix is held
complete and its cited tests to existence. Eleven mutants of the checks
and the appendix are each killed. The employer-DC, identity,
registered-script and specification-revision tests now expect the
materialized block; §16 is checked byte-equal to draft 3 at its new
position.

No registry changes, so the step-4 evidence's registries_sha256 still
equals sources.REGISTRY_SHA256. No PSID file was read; tests ran with an
empty POPULACE_DYNAMICS_PSID_DIR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At the coordinating session's request, the pre-registration evidence
record the d1724 step-4 pass wrote is pinned by the SHA-256 its
MANIFEST.md records, 7bc5c3c2...b845:
- loader.PREREGISTRATION_EVIDENCE_SHA256 holds it, and
  read_preregistration_evidence, which the registered preflight and
  every frozen load call, refuses any file whose bytes differ before
  parsing it (a well-formed invented record included);
- §15 gains preregistration_evidence (file, sha256, schema, writer,
  authorizing decision and where the pin comes from), which
  rows.expected_specification_block states from the loader's
  constants, so check_block_against_code holds the two equal.

The record itself is restricted and is neither opened nor committed
here; a separate lane copies it to docs/design/ before §20 step 8.
Also: export rows.RULING_DECISIONS and rename two comprehension
variables that shadowed `entry`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of 690a127 (Opus 5.5, Subfleet 20261021-105010-u2-step5-
review-r1b, REQUEST CHANGES):

1 (blocking): the d1597 rulings entry recorded one use of the structure-
  only U1 load; it ran before each step-4 pass (2026-10-19 at 640adcc
  and 2026-10-21 at 1e739d3), each matching the pin, as d1724's
  decision record states. The entry records both, every authorization's
  uses are now a list, and §20 steps 4 and 5 say so.
2: specification_block refuses a JSON key repeated at any level.
3: employer-DC persons and previous plans come from the reader
  (sources.DC_PERSONS/DC_PLANS, made public), the overlap_2012 values
  from the parameter loaders, and named scripts must exist.
4: the reader's path resolves through a symlinked checkout.
5, 7: tests for the preflight's rulings check, the dry run's
  specification checks (now one helper, specification_checks), d1242's
  person count, unresolved registry entries and -0.0.
8: the appendix names the 2013/2015 code-92 entries; its test checks
  every registry entry and income_concept path it cites.
9: the exposure record names the coordinating session's messages and
  the review lane's disclosures.
10: §15 says what decisions.ruled_on dates; §20's status line names
  the steps done and pending (the d1090 checks pin it as STATUS_20).

Mutation recheck: 14 mutants; 12 killed, 2 equivalent (the type check
the canonical-JSON leaf check covers, and one of d1242's two
independent clauses; removing the whole d1242 check is killed).
Tests: 1,718 passed, 254 skipped (empty PSID root).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/u2_u1_differential.py ran at 1742efb (this revision's last code
change) against 9cee242, on invented data with the PSID root pointed
at an empty directory: equal in every check, the dry run included, with
no loader file access. The report is
docs/design/u2_m2_u1_differential_1742efb.json; §17 item 7, §20 step 6
and §19 cite it. This commit changes no code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of 9f79818 (GPT-6.1 Sol, Subfleet 20261021-214735-u2-step5-
review-r2, REQUEST CHANGES; every round-1 finding resolved):

1 (blocking): §20 step 6 no longer dates the merge; the merge commit
  and the step-8 registration record it.
2: the exposure record names this lane's session, scratchpad and every
  U1 differential run with both checkouts, records the venv's move after
  the scratchpad was wiped (pandas pinned to the evidence's 3.0.6), and
  reads d1649's ruling correctly.
3, 5: tests make each half of the d1242 guard fire alone and cover
  amendment 6's option.
4: a missing d1090 exclusion entry refuses with a message
  (next(..., None) instead of a bare StopIteration).
7: §15 and §20 step 5 say exactly what the preflight checks of the
  registration (an issue #42 comment URL and an equal binding).
8: a test holds u1_identity.json's version equal to the code's.
6 is left for later: its test would read U1's committed artifact, which
  waits for the coordinating session's PSID hold of 2026-10-23.

Mutants N, N2, O and the missing-exclusion refusal are each killed.
Tests (empty PSID root; no committed runs/*.json read under the hold):
775 U2 unit-tier and 161 specification tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/u2_u1_differential.py ran at 14d9576, now this revision's
last code change, against 9cee242, on invented data with an empty PSID
root: equal in every check, the dry run included, with no loader file
access. Report: docs/design/u2_m2_u1_differential_14d9576.json, cited
by §17 item 7, §19 and §20 step 6; the earlier rerun at 1742efb stays
recorded. This commit changes no code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Now that the coordinating session's protective PSID hold of 2026-10-23
is lifted (d1899), test_u2_identity.py holds rows._U1_INPUT_FRAMES_SHA256
equal to the input_frames_sha256 U1's committed artifact records,
comparing only that hash. §19 and the exposure record say so. Test-only;
no code changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of a2e2d68 (GPT-6.1 Sol, Subfleet 20261023-063829-u2-step5-
review-r3b): APPROVE, every round-2 finding resolved, one nit. The
exposure record said the round-2 findings were "all answered in the next
commit"; finding 6's test came in a later one, so it now reads "the
following commits". The exposure record and §19 also record both
round-3 jobs (the first cancelled before launch). No code or test
changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 23, 2026 11:39
MaxGhenis and others added 3 commits October 23, 2026 12:07
Review of ac808d4 (GPT-6.1 Sol, Subfleet 20261023-073938-u2-step5-
review-r4): APPROVE, one nit. The §19 entry for round 3 had been
inserted inside round 2's list (before findings 7, 8 and the code-change
note); it now follows that list, and §19 and the exposure record record
round 4. The exposure record's extra blank line at EOF is removed. Docs
only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Spec §19, round 2's finding 6 now says it landed in a later commit, on
2026-10-23. In docs/design/u2_m2_exposure.md the block, rulings and
appendix line and round 3b's runs line are reworded. The exposure record
also adds review r5, the cancelled r5b job, the in-session r5b review,
the 2026-10-24 post-merge checks and the coordinating session's later
messages, and §19 records r5 and r5b. u1_identity.json repins the
specification's SHA-256.

Docs and one pin only; no code or test changes. Tests (empty PSID root):
tests/track_u2 and tests/track_u, 1,607 passed and 254 skipped; the tier
check collects 24,664, unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit 0e462ef into master Oct 24, 2026
12 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merge audit (§20 step 6: this merge ratifies the U2 specification).

Merge commit: 0e462efab5fba04defd3121ec3a5c5625fc77676. It was made with gh pr merge 556 --merge --match-head-commit a9ff290e48e85a3a8309fdac2a241476de3ef0d5. Its parents are master 2195258c and head a9ff290e.

Gates at the head

  • gh pr checks 556 exited 0. In Tests run 40092317470, which tested a9ff290e merged with master 2195258c, all four pytest shards, both graph-integration jobs and pytest (3.14) passed. Lint, build and Vercel passed too.

  • The PR was MERGEABLE and CLEAN. It was not a draft, and it had no CHANGES_REQUESTED review.

  • Independent reviews (Subfleet job IDs where there is one):

    Round Job Reviewer Reviewed Verdict
    r1b 20261021-105010 Opus 690a1276 REQUEST CHANGES, all fixed
    r2 20261021-214735 GPT-6.1 Sol 9f79818a REQUEST CHANGES, all fixed
    r3b 20261023-063829 GPT-6.1 Sol a2e2d688 APPROVE, one nit (fixed)
    r4 20261023-073938 GPT-6.1 Sol ac808d4a APPROVE, one nit (fixed)
    r5 20261023-121425 GPT-6.1 Sol delta to 7fc7ab21 REQUEST CHANGES with no defects found; it withheld approval only because its read boundaries blocked two checks
    r5b in session Opus 5.5 7fc7ab21 APPROVE
    r6 20261024-104129 Opus 5.5 delta 7fc7ab21 → a9ff290e APPROVE, four non-blocking nits (below)
    • r5b's runs. It ran the two blocked checks under the coordinator's read exception for automated pytest reads, at 7fc7ab21 and on a local merge of 7fc7ab21 with master 4fc2b9f4:
      • the full-suite tier check: 24,664 collected, passed;
      • test_adjudication_applied.py and test_u2_specification_block.py, with no test deselected: 161 passed.
    • r6's runs. At a9ff290e: the tier check (24,664 collected, passed) and test_adjudication_applied.py, test_u2_specification_block.py and test_u2_identity.py (184 passed).
    • Reviewer models. Every Codex lane was closed, so r5b and r6 ran on Opus 5.5.
  • The U1 differential at 14d9576a, the last code change, was all_equal: true. Later commits and master merges touched no U1 or U2 code and no registries.

r6's nits, recorded here so the frozen records need no edit

  1. The exposure record's reading list for this lane leaves out two items it read: round 5b's report, which became review-r5b-out.md, and the raw review-r5b-outputs/ files. The report summarizes test runs; neither holds data values.
  2. r5's verdict line is REQUEST CHANGES. §19 and the exposure record describe it as "withheld approval", with no defects found.
  3. "With nothing deselected" in r5b's entry applies to its module runs; the tier run deselects all but one test by design. On the git archive extraction of the local merge, five tests failed because they read draft 3 from git history and the extraction has no .git. All 161 passed on a git checkout of the same merge.
  4. The PR body's "the head" wording was ambiguous; it is fixed.

At merge

  • Spec SHA-256 (docs/design/boomers2004_1946_55_comparison.md at 0e462efa): a6cbbd61acfab8e1f0bff0fa42e8534cb08b4ebb3641f3547ff16048daccb9dd. It equals data/external/track_u2/u1_identity.json's u2_specification.sha256. Version u2-ratified-1, status ratified and frozen.

  • Tier counts at 0e462efa:

    Tier Count
    unit 18,125
    artifact 4,261
    integration_psid 1,450
    reproduction_legacy 520
    oracle_policyengine 308
    Total 24,664

No PSID counts appear in this PR or in this comment.

MaxGhenis added a commit that referenced this pull request Oct 24, 2026
…known gaps

- Tracking and next-step cells for the twelve rows the mortality,
  groups and financing (#558), income-and-resources (#559) and
  open-population (#557) designs cover, citing their merged files.
- The poverty row records U2's completed second structural pass and
  its ratification by #556's merge; next are the evidence file, a
  fresh forecast and the #42 registration.
- Known gaps keeps only what no issue, PR or approved design plans.
- Rulings d1922, d1923 and d1925; link refs for #556, #566–#568, #570.
- Scorecard: the wealth row names the approved design; progress page
  regenerated.

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

This branch was successfully deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant