Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
score_registered refuses a candidate spec without a 64-hex SHA-256 and marks any run with an injected matrix or injected fills as not the registered TEST scoring. Tests now reach the hash mismatch, check the oracle's permutation within every stratum, check that the combined current reading takes the smaller gap on real readings, and show the neutral rule can only tighten the improves tier. The proposal notes the two nits in bound files left as they are, the rounding of three tolerance bounds, and that #516 merges before TEST. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fill_careers fills only the gap years the gate scored (1997-2005) by default and leaves a gap year with no visible neighbour at the assembler's value; the donor cache is keyed by the bank's content; persons of uncoded sex take the routed part's copula; a forest leaf can never be empty; the fit script refuses an existing manifest before fitting and never replaces a staged file with other bytes, and binds the gate files it depends on; the score script pins the registered manifest, records whether its code was clean, leaves a started marker and publishes no local paths. The manifest is refitted next at this commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
940ad6f to
2cebe01
Compare
estimates/epuf_fill.py holds gate_epuf_fill's candidate fills, fitted on EPUF TRAIN only: odd years by a two-part random-forest draw (a probability forest for a zero year, a quantile regression forest for the positive share) per sex with a person-level copula calibrated on held-out TRAIN persons, against kNN triples; pre-career years by rank-kNN donor careers, against a chained one-sided draw. Artifacts are byte-reproducible npz files staged outside git and loaded by SHA-256. cohorts/psid2010_epuf_fill.py applies them to a built PSID-2010 cohort's careers behind new provenance values (gap_epuf_drawn, pre_career_epuf_donor); career.py and the registered runs are untouched. Both modules are excluded from the birth-evidence reducer's seal. The DEV log and kept code bytes are updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… by SHA-256) runs/epuf_fill_candidates_v1.json names the registered fills, fitted at 9f06947 by scripts/fit_epuf_fills.py; a second fit reproduced all four byte for byte. scripts/score_epuf_fill_test.py is the one TEST scoring, refused until gates.yaml locks the gate. A DEV dry run of the registered procedure (20 seeds) predicts: odd primary adopted as an uncertified improvement (7 of 183 cells failing, at ages 22-29 mostly), pre primary certified (0 of 136). The registration document records it before TEST. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fill_careers fills only the gap years the gate scored (1997-2005) by default and leaves a gap year with no visible neighbour at the assembler's value; the donor cache is keyed by the bank's content; persons of uncoded sex take the routed part's copula; a forest leaf can never be empty; the fit script refuses an existing manifest before fitting and never replaces a staged file with other bytes, and binds the gate files it depends on; the score script pins the registered manifest, records whether its code was clean, leaves a started marker and publishes no local paths. The manifest is refitted next at this commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e fixed code The first manifest (SHA-256 8d42153...) recorded the pre-review code commit. It was never used to read TEST. It is refitted at the reviewed code next; the artifacts' bytes are expected to be identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nned runs/epuf_fill_candidates_v1.json is refitted at 598e443 with the code files clean; the four artifacts' SHA-256 values are unchanged from the withdrawn manifest. The score script pins this manifest and checks the lock before it leaves any marker. The registration document records the code review, the refit and why the DEV dry run still stands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The score script checks the staged candidates against the manifest before leaving any marker and binds the cell and wage-base helpers; tests tie its pin to the manifest and check that it refuses another manifest, an unlocked gate and an existing result. fill_careers' docstring says which pre-career years it adds. The two nits left in the pinned fill module are recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reachable commit Rebasing onto #515's fixes left the manifest's code commit unreachable from the branch. It is refitted at this commit; the artifacts' bytes are unchanged. The branch syncs with #515 by merge from here on, so the manifest's commit stays reachable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The four artifacts' SHA-256 values are unchanged. The score script pins the new manifest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2cebe01 to
bddde85
Compare
Delta review of #516 (D1): once gates.yaml locks the gate, the refusal test would have passed the lock check and read TEST. It now patches the lock status, points --fills-dir at a test folder, and replaces test_part with a function that fails the test if reached. It also covers the missing case: gate locked, a staged file with other bytes, refused before any .started.json marker. Test-only; no pinned file changes and no refit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Confirmation review of head Status
APPROVE. D1 is fixed. No path through the test can reach I only had read and search tools, with no shell. So I ran no FindingsNo blocking findings. One note, not a defect:
1. Can any path in the test reach TEST?The test calls
2. Does the new locked-but-wrong-bytes case test the right refusal?Yes.
3. Can any other test read TEST once the gate is locked?No.
4. Pinned files
So a commit that touches only this file can't affect a pin. What I couldn't verify (needs a shell)
I made no edits, commits or posts, and read no EPUF microdata. |
…s surface CI shard 1 on #516 failed test__estimator_surface__pins_complete_module_tuple: the test globs estimates/*.py and expects every module that is not a named exclusion to be on the registered first-estimates surface. The fills module is opt-in (only the gate's scoring and its fit script load it), so it gets its own named exclusion, like the COLA tabulation and Track U modules. coordinator._ESTIMATOR_SURFACE_SOURCES is unchanged. Test-only; no pinned file changes and no refit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Head
APPROVE Commit Findings1. The exclusion is correct. Nothing on the first-estimates path imports
2. The comment is accurate ( 3. Any other new module still fails the test.
4. The test file is not pinned or hashed anywhere. Outside What I verified and what I could not
No files were edited and no EPUF microdata was read. |
…ates branch Brings in master through #509 (492d5a6). Merged, not rebased, so the manifest's code_commit (b722382) stays on this branch's history; the manifest, the staged fills and every pinned file are unchanged. Only the tier-count files conflicted; recounted against the full collection: unit 6,037, artifact 3,398 (total 11,516). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Head
Verdicts
Findings
What I verified
What I could not verify
|
…ratory QRF follow-up The pre alternative is a one-step binned conditional-quantile chain, not a QRF: each year conditions on one later share (22 bins), sex and age. The document now says so where it describes the candidate and its DEV result, and the TEST procedure requires that wording, so its result is not read as a QRF result. Its five worst DEV cells are youth levels and zero shares, which is what the text reports. Adds an exploratory follow-up after TEST: a full-career microcosm-fit QRF fill reported beside the registered results. It is not a candidate and cannot change a tier or adoption. Doc-only; no registered rule, parameter or pinned file changes. Mechanism claims checked against epuf_fill.py by an independent reviewer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Head
|
Max is ruling on d927 (ratify K = 1). The brief he sees includes a DEV-only sweep of K over the registered dry run, so the sweep is disclosed in the DEV log before the lock closes it: - gate_epuf_fill_dev_registered_dryrun.json: the registered TEST procedure dry-run on DEV, with every cell (previously summarized in the log only); - gate_epuf_fill_dev_k_sweep.py and .txt: the re-scoring at K from 0.25 to 4 with the repository's own score/adoption_tier/adopt/combined_current; K = 1 reproduces the record exactly; - a DEV-log line and a paragraph in the candidates registration. K = 1 was registered at 14045be, before any DEV score; nothing registered changes. No pinned file, manifest or bound file is touched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of 0634936 (APPROVE, non-blocking): the log line gave grid-rounded thresholds as if exact. It now carries the exact breakpoints (odd 0.8968 and 2.6903, odd alternative 3.4117; pre 0.2564 and 0.7693), each a cell's |gap|/sigma or |gap|/(3 sigma), and the paragraph says the sweep used a 0.005 grid with every breakpoint checked exactly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Head What changed
What the reviewer checked
Status: waiting on Max's d927. The brief recommends ratifying K = 1 as registered. |
What this does
This PR adds the learned replacements for the career assembler's two fill rules, and registers them as
gate_epuf_fill's candidates before any TEST read. It is stacked on #515 (the gate's registration), which is stacked on #509. Merge those first.A gate here is a pass-or-fail test whose rules and thresholds are fixed and published before anything is scored against it.
odd_forest: two-part random-forest draw per sex. A probability forest for a zero year, a quantile regression forest for the positive share, conditioning on the recorded years aroundt, age and year. A person-level copula, calibrated on held-out TRAIN persons, carries multi-year persistenceodd_knn: kNN triples ont-1,t+1max(1968, birth_year + 22)(now: zero)pre_donor: rank-kNN donor careers, copying whole blocks from the 3 nearest TRAIN donors of the same sex and birth yearpre_chain: chained one-sided drawFiles
src/populace_dynamics/estimates/epuf_fill.py: the four fills.load_fillrefuses any bytes other than the registered SHA-256.src/populace_dynamics/cohorts/psid2010_epuf_fill.py:fill_careersapplies the fills to a built PSID-2010 cohort, opt-in.gap_epuf_drawnandpre_career_epuf_donor.career.py,cohorts/psid2010.pyand every registered run are untouched.scripts/fit_epuf_fills.py: fits the four on EPUF TRAIN with the registered parameters.~/PolicyEngine/epuf-data/fills).runs/epuf_fill_candidates_v1.jsonpins their SHA-256.scripts/score_epuf_fill_test.py: the one TEST scoring, throughepuf_fill_scoring.score_registered. It refuses untilgates.yamllocks the gate.docs/amendments/gate_epuf_fill_candidates_registration.md: the registration, with the DEV prediction stated before TEST.DEV results (development part; TEST unread)
This is the registered procedure, dry-run on DEV with 20 seeds and the artifacts loaded by hash.
Every DEV score is disclosed in
docs/amendments/gate_epuf_fill_dev_scores_*.json*, and the candidate code behind each later score is kept indocs/amendments/gate_epuf_fill_candidate_code/.Downstream
The DYNASIM projection tests (exercises 1, 3 and 4) build on the PSID-2010 cohort and draw no earnings after 2010, so their AIMEs inherit the career fill. Applying the registered fills to that cohort, as a description and not a registered result, changes the median top-35 indexed earnings through 2010:
The odd-year fill moves medians by between -2% and +4%.
These are registered one-shots, so nothing is rerun here. New runs are queued for Max as decision d929.
Invariants, and where they are tested
Fills obey the scoring contract. On their own cells they return finite shares in [0, 1]; every other cell is unchanged; draws are deterministic per seed, differ across seeds, and do not depend on row order.
tests/estimates/test_epuf_fill.py, for all four.Artifacts round-trip. Bytes are reproducible, and
load_fillrefuses other bytes.Donor blocks are real donors' blocks from the same sex and birth year. Years before the first earning age are zero.
fill_careers.tests/cohorts/test_psid2010_epuf_fill.py.Manifest.
tests/test_epuf_fill_candidates_manifest.py.Remaining, after Max's ruling on d927
gates.yamlto lock the gate.scripts/score_epuf_fill_test.pyonce.axiom: n/a: microsim-only career imputation; no policy rule is encoded or changed.
Merge method: merge commit only, never squash or rebase. The binding tests diff b722382 (the manifest's code_commit) and cb76ad1 against HEAD. If that commit drops out of master's history, they skip silently instead of failing.
🤖 Generated with Claude Code