Repository navigation
Land the Dynamics graph, accounting, identity and history stack (#420, #436–#448) - #449
Merged
Merged
Conversation
# Conflicts: # scripts/first_estimates_birth_evidence.py # tests/README-tiers.md # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
# Conflicts: # scripts/first_estimates_birth_evidence.py # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
# Conflicts: # scripts/first_estimates_birth_evidence.py # tests/README-tiers.md # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
# Conflicts: # scripts/first_estimates_birth_evidence.py # tests/README-tiers.md # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
# Conflicts: # scripts/first_estimates_birth_evidence.py # tests/README-tiers.md # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
# Conflicts: # tests/README-tiers.md # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
# Conflicts: # scripts/first_estimates_birth_evidence.py # tests/README-tiers.md # tests/estimates/test_birth_evidence_artifact.py # tests/tier_counts.json
Each of the thirteen stacked drafts appended its new opt-in modules to the birth-evidence reducer's POST_REVIEW_SOURCE_EXCLUSIONS and bumped the tier manifest independently, so they conflicted only on those four files. - Union of all twenty new source paths in the script and its pinned test tuple; duplicate comments collapsed. - The reachability test now guards the identity and history modules (person_identity, forward/covered earnings histories, mortality observer, closed-cohort, assembled-history and compact histories) alongside the PSID, graph, accounting, claiming-successor and entrant exclusions. - Tier manifest recollected on the combined tree: unit 2,207, artifact 2,672, integration_psid 848, reproduction_legacy 520, oracle_policyengine 159; total 6,406. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… source numbers - The one-year graph's advance step copied the prior year's survives=True and death_probability onto next-period rows, so person_period.csv and the in-memory population reported outcomes no draw produced. Next-period rows now carry null outcomes through a same-version claim node, and the evaluation refuses admitted rows that claim one. - _integer_column refuses values outside signed 64-bit instead of wrapping (a wrapped event year slipped past the fit cutoff; a wrapped person_id renamed a person). - Weight, start_weight, exposure and death readers refuse JSON strings and booleans instead of coercing them. Review findings on #449 (cross-family review, independently verified). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PopulationReconciliationError and HistoryAccountingError rebuilt from args=(message,) on unpickle/copy and raised TypeError, so a refusal raised in a worker process broke the pool and lost its discrepancies, kind and period. Both now define __reduce__ that restores every field. Review findings on #449. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- validate_projection_allocator refuses projection metadata whose allocator can hand a later birth an unreserved initial or scheduled person_id (a schedule built from a second allocator at the same start made one ID name a dead entrant and a newborn). The check lives in entrant_schedule.py because engine/loop.py is inside the birth-evidence reducer's reviewed-implementation identity; a test pins that the unvalidated loop still reuses the ID, so loop-level enforcement needs a deliberate re-pin. - Activation years are normalized to int at the boundary so the provenance and alignment records serialize; duplicate years after normalization are refused. Review findings on #449. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…contract Review findings on #449. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A rehashed audit with float years validated, giving one observation two encodings and digests; NumPy draw indexes and scheduled-year keys passed validation and then crashed the digest step. Review findings on #449. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 6,497) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
September 22, 2026 22:29
This was referenced Sep 22, 2026
MaxGhenis
added a commit
that referenced
this pull request
Sep 23, 2026
Tier manifest recollected on the merged tree: unit 2,341; total 6,540. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Lands the thirteen green draft PRs from the September 9–22 Dynamics lane onto current
masterin one merge-commit integration, so later work builds onmasterinstead of on stacked drafts. Each PR's head is merged unchanged (merge commits, no squash), so every original commit stays in history.populace_dynamics.graph)engine/claiming.py)engine/accounting.py)Conflict resolution
The PRs conflicted only on four shared files. Each PR appended its own new modules to the birth-evidence reducer's
POST_REVIEW_SOURCE_EXCLUSIONSand bumped the tier manifest independently.scripts/first_estimates_birth_evidence.py: union of all 20 new source paths; duplicate comments collapsed.tests/estimates/test_birth_evidence_artifact.py: the pinned tuple matches the script, and the reachability test also guards the seven identity/history modules alongside the PSID, graph, accounting, claiming-successor and entrant exclusions. No registered evidence pin changes.tests/tier_counts.json/tests/README-tiers.md: recollected on the combined tree (unit 2,207; artifact 2,672; integration_psid 848; reproduction_legacy 520; oracle_policyengine 159; total 6,406).All other files merged without conflict. No gate, contract, amendment or
runs/artifact is touched.Verification
Cross-family review and fixes
Five Claude reviewers read the stack's source cluster by cluster; each finding then went to two independent refuters. Of 13 reported findings, 11 were confirmed (2 medium, 9 low) and 2 rejected. All 11 are fixed with regression tests, each cluster independently verified:
survives=Trueanddeath_probability(no draw had happened); those rows now carry null outcomes and the evaluation refuses admitted rows that claim one. Out-of-int64 IDs and years are refused instead of wrapping (a wrapped year slipped past the fit cutoff). String and boolean weights, exposures and deaths are refused instead of coerced.PopulationReconciliationErrorandHistoryAccountingErrorare now picklable and copyable with every field intact.entrant_schedule.validate_projection_allocatorrefuses projection metadata whose allocator can hand a later birth an existing unreserved ID (a schedule built from a second allocator at the same start made one ID name both a dead entrant and a newborn). The check lives outsideengine/loop.pybecause the loop is inside the birth-evidence reducer's reviewed-implementation identity. A test pins that the unvalidated loop still reuses the ID, so enforcing it in the loop needs a deliberate re-pin. Numpy activation years are normalized so audit records serialize.PersonIdentityMap(and the histories that embed it) are picklable. The recorder's native-versus-private key hazard is documented, not guarded: nonnegative native IDs below the map size are indistinguishable from private keys, so the recorder cannot detect the mistake. The wired Retain original-cohort histories from assembled projections #447 path translates keys correctly.The review also caught a duplicated test that my union merge introduced (removed). Local unit tier after the fixes: 2,167 passed, 131 skipped (graph tests needing the
graphextra, covered by CI's graph-integration job), 0 failed. Tier manifest: unit 2,298, total 6,497.Closes #420, #436, #437, #438, #439, #440, #441, #443, #444, #445, #446, #447, #448 on merge.
🤖 Generated with Claude Code