Repository navigation
Conversation
This commit replays 9de858d0eaf14df7affd5d4e810568a6d41584e9, the stage-1 build of Registration 18 (A-COLA, decision d658), with `git cherry-pick 9de858d0` onto origin/master 2195258. Stage 1's parent, 75cd352, is 510 commits behind master. Conflicts and how each was resolved: - tests/tier_counts.json: kept master's version. Stage 1's counts were taken on its old base; the close-out recounts the tiers. - tests/README-tiers.md: kept master's version, for the same reason. - The exclusion tuple (POST_REVIEW_SOURCE_EXCLUSIONS) did not conflict: stage 1 did not edit it. The close-out appends the new src/ files to it. The other 24 files of 9de858d0 are byte-identical to it (checked blob by blob against 9de858d0's tree). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stage 1's December note read "include December2030" and "determination year2029". The note is prose in the committed nulls record, which the second registration comment will cite, so it should read correctly. - src/populace_dynamics/acola_track/nulls.py: the note now reads "December 2030" and "determination year 2029". - docs/design/acola_spec_only_nulls.json: regenerated with scripts/build_acola_spec_only_nulls.py. Only the december_note line changes; every null value, exact rational, rate and input hash is unchanged. tests/acola_track/test_nulls.py passes (17), including the check that the committed file reproduces exactly from its pinned inputs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/compare_acola.py is the standard-library script the validation-only lane runs after the run artifact merges and the seal opens. It fetches nothing. This commit adds the stage-2 builder's file unchanged (SHA-256 checked against the builder's hash list). What it does, as read in the code: - verify_seal hashes every file the seal lists (SHA-256 and byte count), refuses on any mismatch, missing file, path escape or an unlisted comparator record, and returns the seal's own SHA-256; compare_files then checks the artifact's SHA-256 against its .env.json sidecar before it parses the artifact. - OACT: CL = p - d and C = 100 d / (p - d), with p and d each +/- half their last printed unit (from the record's decimal counts) and the interval over the four corners; p - d > 0 is asserted at every corner. The 0.10 precision gate is applied mechanically and its branch recorded. - PWBM: C = 100 (R - B) / B; a point when both stored values carry six or more decimals, otherwise four corners. - MINT5: reading S (shortest decimal of the stored double, shifted two places for a percent format) with half-up and half-even checks against the HTML's decimals; reading L as a sensitivity. The headline statistic follows the record's median_type; "unsettled" compares both. - Gaps P - C, N - C, P - N and P - N_model per row (N_MINT, or M1's null, on the MINT5 rows) by [a,b] - [c,d] = [a-d, b-c], with the model's mean, draw SD and floor beside each. Decimal arithmetic at 50 digits; decimals are written as JSON strings. No pass band, no verdict. tests/acola_track/test_compare.py tests it on invented comparator records in the acola-comparator-v1 schema and on the stage-1 invented dry-run artifact layout. No comparator value is used anywhere. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stage-2 addendum (section 3, item 3) requires showing that mechanism L, the cola_track_a benefit path rows C0, C1 and M0-M4 use, gives identical outputs on invented data at the build and at the registration commit dd222b9. These four files are the stage-2 builder's, unchanged (SHA-256 checked against the builder's hash list): - scripts/acola_mechanism_l_equivalence.py (SHA-256 5d7eef14...7a27) builds one fixed invented population (seed 20261024) and projection state, then runs the legacy reference_benefit_rows for every runnable A-COLA row and writes canonical JSON of each person's base, reform and component amounts. It imports only legacy interfaces that exist at both commits, and no acola_track code, so it runs against a dd222b9 checkout. The population includes every birth cohort 1917-1942 claiming at 70, dually entitled spouses, DI and converted DI workers, a projected widow and each opening-stock component. - tests/acola_track/mechanism_l_dd222b9.json is the golden output (SHA-256 07c59d69...87de): 69 persons on each of 7 rows. - tests/acola_track/test_mechanism_l_equivalence.py reruns the script at HEAD and asserts byte equality, raising REG18_MECHANISM_DRIFT with the differing row/person ids otherwise; it also pins the script and golden hashes in the provenance record and checks that the script's rows equal the A-COLA registry's track_row() values. - tests/acola_track/mechanism_l_dd222b9.provenance.json is the builder's record (SHA-256 b48fc549...9ed8). The builder's sandbox could not create the dd222b9 worktree, so it records a git-archive export instead. The next commit replaces it with the worktree run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stage-2 addendum (section 3, item 4) asks for a test that stage 1's Table V.C1 capture and master's data/tr2026 accessor give the same intermediate COLA increases effective December 2027, 2028 and 2029. tests/acola_track/test_tr2026_crosscheck.py is the stage-2 builder's file, unchanged. It reads the three captured cells through acola_track.nulls.tr2026_inputs(), which verifies the snapshot's pinned hashes, and the same three years through populace_dynamics.data.tr2026.cola_path(2027, 2029). It asserts the determination years, December timing, the V.C1 source class and equal percents as Decimals. It prints no other accessor value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both files are the stage-2 builder's, unchanged; later commits in this branch amend them. tests/acola_track/test_delayed_credit_disclosure.py covers the addendum's section 3, item 5. Mechanism L computes a retirement claimant's factor with claiming.benefit_factor (cola_track_a/benefits.py:345 at master 2195258 and at dd222b9). The test takes the invented late claimants of the equivalence population, one per birth year 1917-1942, claiming at 70, where 70 lies more than 48 months past FRA. For each it shows that worker_record's factor is the 48-month factor, that the same people get a larger factor and larger base and reform benefits when only the invented bundle's max_delayed_months is raised to 60, and that 48 is SSAParameters' default. docs/design/acola_trust_fund_implementation.md maps every Registration 18 element to its code and tests, states the invariants, and holds the section "Disclosures for the second registration comment": the interpretations (cleared brief section 1 item 2 and rulings 4-16), the delayed-credit cap with the erratum and the d1408 diagnostic note, C0-D's deferral, and the TR 2026 capture's URL, file, SHA-256, table, rows and column. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The builder's disclosure test shows the 48-month cap on an invented parameter bundle and as SSAParameters' default. The disclosure is about the registered run, whose parameters come from a policyengine-us checkout, so the test did not yet show that the registered run carries the same cap. A registered run compares its runtime parameters with the committed statutory capture and refuses any mismatch: run_acola raises when cola_track_a.runner._parameter_consistency, which calls statutory.statutory_value_checks, is inconsistent, and that check covers max_delayed_months. The new test, test_registered_parameter_binding_carries_the_48_month_cap, shows: - the committed capture data/external/track_a_statutory_parameters.json and captured_ssa_parameters() both carry 48 months; - the delayed-credit check passes for that bundle and fails for one with 60 months, so a registered run cannot carry another cap; - under the committed FRA schedule, a claim at 70 by anyone born 1917-1942 is more than 48 months past FRA, and benefit_factor at 70 equals the factor at FRA + 48 months. Test only; no source change. The disclosure file now passes 27 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Edits to the stage-2 builder's design note: - Header: cite the stage-2 brief's erratum and this blind replay's brief beside the cleared brief and the stage-2 addendum. - Mechanism preservation: the builder could not create the dd222b9 worktree and ran the registered side on a git-archive export, so its note listed the worktree run as outstanding. That run is now done: the dd222b9 worktree inside the clone, PYTHONPATH on its src, all 117 imported modules resolving there, and output byte-identical to the golden file; the build side at a3806e5 also matches. The paragraph now says so, and keeps the builder's export as history. It also records that the dd222b9..origin/master path check gives the same result at f8ffc7d. - Disclosure 17: "including late-entitled linked worker records" was imprecise. The text now names the two routes read in the code: the claimant's own worker record (benefits.py:345, the same line at dd222b9) and, on the aged widow(er) path, the deceased worker's factor, which widow_benefit_path receives as deceased_claim_age_factor and which passes delayed credits through (ss/benefits.py widow_benefit). It adds that a registered run carries the cap because it refuses parameters that differ from the committed capture (48 months; pinned by the previous commit's test), and gives the statutory window, 840 - FRA months: 60 at FRA 65, falling to 50 for 1942 births, as the erratum states. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iers Housekeeping for the five new src files of Registration 18's build, as the cleared builder brief's ruling 3 and the stage-2 addendum's item 6 require. - scripts/first_estimates_birth_evidence.py: append the five acola_track files (__init__, config, nulls, runner, statistics) to POST_REVIEW_SOURCE_EXCLUSIONS, so the historical reducer's source identity does not change. - tests/estimates/test_birth_evidence_artifact.py: the exact-tuple test lists the same five paths, and the reachability test asserts that the acola_track modules are collected but unreachable from the birth-evidence reducer. These two files are the stage-2 builder's versions, byte for byte. - tests/tier_counts.json and tests/README-tiers.md: recounted with EV/merge-watchers/recount-tiers.py on this tree (empty PSID root). Base 2195258: unit 18,088, artifact 4,253, integration_psid 1,450, reproduction_legacy 520, oracle_policyengine 308, total 24,619. Now: unit 18,352, artifact 4,278, others unchanged, total 24,908. That is one unit item more than the builder's recount (24,907), from the delayed-credit parameter-path test added on this branch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stage-2 builder's sandbox could not create a git worktree, so its provenance record described a git-archive export of dd222b9's imported sources and left the worktree run and the build-commit pin open. This commit records those runs, made in this replay. - Registered side: `git worktree add --detach .equiv-dd222b9 dd222b9` inside the clone; scripts/acola_mechanism_l_equivalence.py run with the clone's venv and PYTHONPATH on the worktree's src. An in-process rerun listed the 117 imported populace_dynamics files, all under the worktree's src, equal to dd222b9's blobs and to the builder's list. - Build side: the same script at 7cd45ee with PYTHONPATH on the clone's src; the same 117 files, byte-identical. - Both outputs, and both in-process reruns, are byte-identical to tests/acola_track/mechanism_l_dd222b9.json (SHA-256 07c59d69..., 7 rows x 69 invented persons). Script SHA-256 5d7eef14... No REG18_MECHANISM_DRIFT; the golden file was not regenerated. - The record keeps the builder's export record verbatim (file SHA-256 b48fc549...) and notes the replay's first attempt, which made the same runs with the build side at a3806e5 before it stopped. - The worktree is removed. The design note's mechanism-preservation paragraph now names the build commit 7cd45ee beside a3806e5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Do not merge. The coordinator lands this after independent review and the tier-count slot.
What this PR is
This is a blind replay of the stage-2 builder's tree for Registration 18 (A-COLA), milestone F0 of the mortality, groups and financing design. The builder's sandbox could not write
.git, so it left an uncommitted tree. That tree is preserved aspreserve/acola-f0-builder-tree-20261024(05567445). This branch commits it from a lane that has opened nothing on the restricted list and none of the exposed session's text. The lane also ran the dd222b9 worktree equivalence itself and wrote the provenance record, the commit messages and this body itself.It would supersede #571, which an exposed session committed. The coordinator chooses which one lands.
2c19f5b6(decision d1922), milestone F0.EV=/Users/maxghenis/microcosm-launch-evidence/dynasim-parity-20260909):EV/acola-builder-brief-cleared-20260930.md;EV/acola-build-20260930/stage2-brief-20261024.md, and its erratum,EV/acola-build-20260930/stage2-brief-20261024.erratum.md;EV/acola-build-20260930/f0-blind-replay-brief-20261024.md.PSID use follows the project's data-access record. Every test uses invented data. Nothing here runs the registered population;
scripts/run_acola_registered.pyran only through its own tests on invented fixtures.axiom: n/a: microsim-only registered test build
What was built
The base is master
2195258c.4bbed4fd9de858d0) withgit cherry-pick. It keeps master'stests/tier_counts.json,tests/README-tiers.mdand exclusion tuple, and its other 24 files are byte-identical to9de858d0. Stage 1 holds the separate config and row registry (C0, C1, M0–M4 runnable; C0-D registered and deferred), the runner, the statistics, the nulls with the TR 2026 Table V.C1 capture, the entry script and its guards, and the verbatim specification file (SHA-25602287d54…).10c026534ff1fec0scripts/compare_acola.py, the comparison lane's standard-library script, with its tests on invented comparator records.a3806e56dd222b9, and its test.5ffb0eeedata.tr2026accessor for the COLAs effective December 2027–2029.b0e01614docs/design/acola_trust_fund_implementation.md.f02181e9statutory_value_checkscomparesmax_delayed_months.dae719637cd45ee7src/files go intoPOST_REVIEW_SOURCE_EXCLUSIONS, its exact-tuple test and the reachability test, and the tier manifest is recounted.6abb6726Compared with the builder's tree, four files differ: the two nulls files, the disclosure test and the design note, each from a commit above. The provenance record and the tier files changed as the brief requires. No shared benefit module changes. This branch edits none of
cola_track_a/,scenario_benefits.py,estimates/cola_age_profile.py,track_a_v2/,fra68_track/,ss/,claiming.py,engine/,gates.yaml,track_b/orruns/*.json.Invariants and the tests that check them
Property tests use Hypothesis; every input is invented. Test files are under
tests/acola_track/.test_statistics.py::test_accounting_identity_and_cut_bound_on_invented_components(property),::test_component_accounting_and_spouse_three_classestest_statistics.py::test_accounting_identity_and_cut_bound_on_invented_components(property; every reform benefit positive, so the sets are equal)annual_reduction = 0, every change statistic, falling share and null is exactly 0, while median benefit levels stay equal and positive.test_nulls.py::test_zero_reform_is_exactly_zero(property),::test_build_zero_reform_nulls_are_all_exactly_zero,test_statistics.py::test_zero_reform_has_exact_zero_changes_share_and_floors,test_timing_properties.py::test_cut_bounds_monotonicity_and_zero_reform_on_rounded_paths(property)test_timing_properties.py::test_cut_bounds_monotonicity_and_zero_reform_on_rounded_paths(property),test_statistics.py::test_accounting_identity_and_cut_bound_on_invented_components(property),::test_mint_order_falling_share_and_individual_cut_bounds(property; band medians of individual changes in [−100, 0]),::test_valid_dual_entitlement_can_raise_benefits_under_registered_cut,::test_dual_entitlement_bound_violation_is_structural_under_dime_floors(property)test_statistics.py::test_larger_cut_weakly_lowers_p_and_every_individual_change(property),test_timing_properties.py::test_cut_bounds_monotonicity_and_zero_reform_on_rounded_paths(property)test_runner.py::test_same_draw_seed_is_deterministic,test_timing_properties.py::test_registered_draw_root_and_module_stream_are_deterministic(property),test_statistics.py::test_cost_and_mint_order_independent_including_every_floortest_statistics.py::test_median_bounds_permutation_and_weight_scale(property),::test_equal_positive_weights_match_ordinary_median(property),::test_registered_exact_weighted_median,::test_near_half_weight_uses_exact_binary_fraction,::test_zero_weights_are_excluded_and_counted_for_each_mediantest_nulls.py::test_null_is_exact_product_with_factors_less_than_one,::test_more_reduced_increases_strictly_lowers_the_null,::test_larger_reduction_lowers_null_and_larger_cola_raises_it(all properties),::test_committed_nulls_reproduce_exactly_from_pinned_inputstest_compare.py::test_oact_corners_contain_point_and_monotonicity(property),::test_pwbm_corner_interval_contains_point(property),::test_oact_precision_gate_boundary,::test_mint_interval_branches_and_formats,::test_interval_subtraction_and_null_propagation,::test_null_fields_are_reported_never_guessed_and_empty_band_serializestest_statistics.py::test_ratio_means_and_union_differential_against_existing_functions,::test_cost_floor_matches_v2_and_ratio_means_floor_matches_a7--registered-commit, a dirty tree, an existing artifact or sidecar, and a changed specification file.test_registered_run_script.py::test_preflight_refusal_matrix,::test_changed_specification_is_refused,::test_existing_artifact_or_sidecar_is_one_shot_refusalcola_track_a'sREGISTERED_ROWS, the exercise-1 and exercise-3 constants and their consumers are byte-unchanged.test_unchanged.py(2 tests)test_timing_properties.py::test_future_start_year_reaches_the_actual_legacy_emitternullwith a reason underallow_nan=False.test_statistics.py::test_empty_band_and_undefined_floor_serialize_with_reasons,test_registered_run_script.py::test_undefined_values_and_reasons_serialize,::test_nonfinite_value_is_rejected_before_either_file_is_writtendd222b9and at HEAD.test_mechanism_l_equivalence.py(4 tests)test_delayed_credit_disclosure.py(27 items)data.tr2026accessor agree for the COLAs effective December 2027, 2028 and 2029.test_tr2026_crosscheck.pyTests run
Every run used
.venv/bin/python -m pytest -p no:cacheproviderwithPOPULACE_DYNAMICS_PSID_DIRset to an empty directory, serially (pytest-xdist is not installed).tests/acola_trackdae71963plus the housekeeping diff later committed as7cd45ee7tests/acola_track/test_mechanism_l_equivalence.py, rerun after the provenance commit6abb6726tests/cola_track_a,tests/fra68_track/test_registered_run_script.py,tests/track_a_v2/test_matrix_estimands.py,tests/estimates/test_cola_age_profile.py,tests/test_scenario_benefits.py,tests/fra68_track/test_dry_run_membership_text.py,tests/track_a_v2/test_dry_run_protocol.py,tests/baselines/test_track_a_inputs.pytests/estimates/test_birth_evidence_artifact.py -k post_review6abb6726-k tiers_match_policy_manifest, full collection7cd45ee7tests/cola_track_a/test_statutory_capture_oracle.pyskips because the local policyengine-us checkout is not at the captured revision.populace.fitis not installed in the repo venv.git diff --checkare clean on all 25 Python files the branch adds or changes.Tier counts
2195258cThe recount is correct at this branch's base only. Master has moved, so the coordinator's tier-count slot recounts at merge.
Mechanism-L equivalence and provenance
git worktree add --detach .equiv-dd222b9 dd222b9af926c773a0f92732e2d08be507793378inside the clone.PYTHONPATH=$PWD/.equiv-dd222b9/src .venv/bin/python scripts/acola_mechanism_l_equivalence.py $PWD/.equiv-dd222b9 --output <scratch>.populace_dynamicsfiles. All 117 resolve under the worktree'ssrcand equaldd222b9's blobs.7cd45ee7withPYTHONPATH=$PWD/src. It imports the same 117 files, byte-identical.tests/acola_track/mechanism_l_dd222b9.json:07c59d69544503f87b43e8be5df57f01d773f597aa52b8f4027f40f7f9cc87de;5d7eef14e1cd4556e7a6d4d28f3b43f3cb4c442a68ffa6569724b5a831ea7a27.REG18_MECHANISM_DRIFT. The golden file was not regenerated.tests/acola_track/mechanism_l_dd222b9.provenance.json(SHA-256504e60b5…) records the method, both commands, the registered and build commits, the output and script hashes, and the 117 imported files. It also keeps this replay's first-attempt runs (build side ata3806e56, the same output) and the stage-2 builder's earliergit archiveexport record verbatim (builder file SHA-256b48fc549…).git diff --name-status dd222b9 <master>overcola_track_a/,scenario_benefits.py,estimates/cola_age_profile.py,track_a_v2/,fra68_track/,ss/,claiming.py,engine/andscripts/run_track_a_registered.py. At2195258c,f8ffc7d9and current masterfe5ab5ab, it shows only two added files:engine/forward_earnings_s1_v1.pyandss/statutory_delayed_credit.py. No existing file changed.Coordination (ruling 14)
cola_track_a/,track_a_v2/,scenario_benefits.py,estimates/cola_age_profile.pyoracola_track/.scripts/first_estimates_birth_evidence.py,tests/estimates/test_birth_evidence_artifact.py), so merge order will need a rebase of the tuple: Coverage-rule registry (CE1) #583, SIPP income, assets, pension and SSI readers (D2) #581, PSID income and wealth readers and field registry (D1a) #575, Aggregate-table captures and readers, part 1 (D4) #574, Federal SSI interface and source-to-input contract (SSI0) #573, Retirement-plan rule layer (WP2) #572, SM1: differential mortality by lifetime earnings, education and race (normalized within age-sex-year cells) #570, OP1: open-population harness around the sealed loop #566, Track B insured status: quarters of coverage; fully, currently and disability insured #562, Track B P2: history-based participation gate, developed on invented data (d1803, reserve) #561, IC3 employer gate block: thresholds, partitions, and rulings (draft for referee) #230 and Pre-IC3 noise floors: the Workstream B aggregate-side battery, promoted to v1 (E1, E2, E6/E7, E11; E11-detail/E12 gaps recorded) #223.Against #571, by hash only
Of the 37 paths this branch changes from
2195258c, 30 are byte-identical at #571's headf78efbc6. Seven differ. For six, #571 holds the builder's version (checked against the builder's hash list) and this branch holds a commit above:docs/design/acola_spec_only_nulls.jsonandsrc/populace_dynamics/acola_track/nulls.py(10c02653);tests/acola_track/test_delayed_credit_disclosure.py(f02181e9);docs/design/acola_trust_fund_implementation.md(dae71963,6abb6726);tests/tier_counts.jsonandtests/README-tiers.md(7cd45ee7).The seventh is
tests/acola_track/mechanism_l_dd222b9.provenance.json, which each branch wrote for itself.🤖 Generated with Claude Code