Repository navigation
Conversation
This branch has not been 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.
Repair the data assignment that gave virtually every IRA saver an employer-plan contribution. The pinned artifact has 27,261 traditional IRA contributor records; 27,259 also have employer-plan or SE-pension contributions. With the correct §219(g) phase-out in PolicyEngine-US #10032, weighted 2025 gross traditional contributions are $15.400bn and deductions $5.819bn, a $9.581bn phase-out reduction. SOI deductible IRA payments are $13.166590bn (TY2022) and $13.771289bn (TY2023). These are different years and people versus tax returns; no double application of the phase-out was established.
This draft implements option A of d1244. Publication and readiness remain Max's decisions.
Source and method:
Invariants and tests:
np.ndarrayarguments let the unchanged fail-closed guard distinguish numeric selectors from source-column reads; its exact runtime import-graph pin is 76. At5ca8277edf73f77d87ab3f31134abf17e3f8de53, retirement assignment preserves assembly metadata and mass history, emits optionaldraw_auditseparately, and passes that evidence through maintainedPoolStageOutputreceipts. The selected pool regression passes with the metadata guard unchanged.source:with_us_retirement_contribution_inputs(54→43; graph total 2744→2733). The removed row names areperson.@effective:employer_health_coverage,person.@effective:person_tax_unit_link,person.@effective:sex,person.@effective:social_security_income,person.@effective:tax_unit_role,tax_unit.@effective:filing_status,tax_unit.@effective:tax_unit_id,person.social_security_dependents,person.social_security_disability,person.social_security_retirement, andperson.social_security_survivors. The invariant is(2733, 92, 227, 35, 0, 213); structural tax-unit identifiers remain enforced by source-wrapper inputs.5ca8277edf73f77d87ab3f31134abf17e3f8de53: both US-engine matrices passed all eight lineage tests, including the original producer-count failure, then failed the coverage snapshot (42,184 expected configuration fields; 42,216 observed). Both engine-free matrices likewise reached the stale exact field-usage snapshot after 14,529/14,403 tests passed. The remaining CI blocker requires canonical projection and reviewed snapshot refresh; the PR remains a draft.PYTHONPATHand hit its 25-minute outer deadline. The corrected isolated.venv/bin/python -u tools/generate_us_bundle_from_constants.pyexited 1 after 698 seconds because the clean-worker import ofmicrocosm.build.us_runtime.puf_qrf_workerexceeded the unchanged 300-second timeout. No generated resources changed, no timeout or generated resource was hand-edited, and--checkwas not run.uv sync --all-packages --locked --extra us; the documenteduv run --no-sync python -u tools/generate_us_bundle_from_constants.pyran with inheritedPYTHONPATHcleared and native-library thread limits set; the retry also clearedPYTHONHOMEandPYTHONPYCACHEPREFIX. Host load fluctuated from about 20 to nearly 500 during these attempts. The first attempt was stopped after the 45-minute outer deadline with an empty log (exit 130). The single retry reached its 25-minute outer deadline (exit 143; 0 log bytes). The repository generator and its 300-second clean-worker timeout were unchanged. Canonical generation has not completed; generator--check, compiler projection/pin refresh, coverage generation/check, and the requested focused reruns remain outstanding. Round 3 newly run tests: 0.expected_rows,member,member_sha256,sha256,size_bytes(5); workplace-Roth provenance artifactformat,kind,vintage(3); CPS drawdonor_table,seed_from_build_config, threeage_breaks(5); three PUFage_breaks(3). Removed three fixed account shares (dc_share_of_remainder,se_pension_share,traditional_ira_share) and seven QRF terminals (max_train_samples,n_estimators,predictors/3throughpredictors/7). Authored seed ownership adds one net binding (site,owners/0/kind,owners/0/id; +3).microcosm.build.us_runtime.joint_retirementandmicrocosm.build.us_runtime.scf_retirement; +2), replace the 14-terminalretirement_contributions_training_capwith two 16-terminal CPS/PUF joint-draw definitions (+18), and add the same net three-leaf seed ownership binding (+3). Each joint definition namesid,stream,value_source,default,rng_family,rng_version,kernel,seed_material/0, fiveconsumption_ordersteps,reset_boundary,draw_condition, andderivation; these attest complete-vector sampling and its deterministic consumption order. Pre-regeneration counts are 32,413 authored + 9,803 resolved = 42,216; the branch already has 54 seed sites, 54 owner rows and 113 owner bindings. Canonical regeneration also removes the 11 obsolete producer input rows (2,744→2,733), so final field/count/hash pins must be observed from the maintained compiler after generation.tools/generate_us_bundle_from_constants.py, then--check, in a working locked US environment. It emitspackages/microcosm-build/src/microcosm/build/us/spec/{battery,bundle,calibration,catalogs,geography,imputation,publication,selection,sources,spine,take_up,vintages}.yaml,packages/microcosm-build/src/microcosm/build/us/country_package.json, andpackages/microcosm-build/src/microcosm/build/us/engine_abi.lock.json. Regenerate the retirement input/resource/seed declarations, derive legacy schedule/resource projections through the maintained compiler, and refresh reviewed schedule/payload, graph-node, resource/checkpoint, source-manifest, seed-map, input-count and field-usage pointer/count pins from canonical observations. Preserve the frozensource_stages.json,support_spine.json, andtake_up_contract.jsonassets; canonical generation checks their compatibility projections. Regenerate the existing repository coverage projection withtools/spec_engine_coverage.py, then its--check, retaining operational-field stripping for resource/checkpoint hashes. Session reports/evidence stay untracked.Validation:
Data release needs:
Run a fresh configured Route A build with a fresh RUN_ROOT (old accepted stages/checkpoints can bypass changed retirement logic):
ROUTE_A_ENV=<settings-file> bash tools/route_a/route_a.sh --resolve, thenROUTE_A_ENV=<settings-file> ~/reviews/us-hub/scripts/heavy_run.sh ira-participation-release bash tools/route_a/route_a.shwith the same operator settings. The raw-source base stage alone is documented at roughly 46 minutes / 72GB, beyond this sandbox job. Use a reviewed PolicyEngine-US version containing #10032; the existing lock predates the phase-out fix. Validate before/after with the same model, gross counts/amounts against accumulation tables, deductions separately against SOI payments, and the share of traditional IRA contributors who are active participants. The newtools/validate_us_ira_participation.pyruns this same-engine before/after scoring through the maintained household-batched scorer and records hashes, gross contributor counts/amounts, traditional-contributor active share, and filer-restricted parent tax-unit deductions separately from dependent own-return deductions. It requires unaged base-2024 H5 inputs and refuses stored capped contributions, active-participation results or deductions that could override the model. Run it under the heavy lock after the build:~/reviews/us-hub/scripts/heavy_run.sh ira-participation-validation uv run --no-sync python tools/validate_us_ira_participation.py --before-h5 <incumbent.h5> --after-h5 <candidate.h5> --year 2025 --out <untracked-evidence/ira-validation.json>. Recalibrate/review the broad JCT IRA anchor and general AGI/tax constraints. Do not publish or promote from this PR.