Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
03927ca
Preserve canonical SPM selection and receipts across API calculations
MaxGhenis Sep 9, 2026
a00f594
Unify household identity across simulation and report persistence
MaxGhenis Sep 9, 2026
edd2167
Record Fable final-fix scope and verification plan
MaxGhenis Sep 9, 2026
a21fcd6
Document certified immutability for all linked US households
MaxGhenis Sep 9, 2026
e335975
Persist typed SPM polling failures as terminal cache records
MaxGhenis Sep 9, 2026
d1d3518
Record final Fable fix verification and publication blocker
MaxGhenis Sep 9, 2026
152e34b
Merge canonical SPM contracts with Stage 11 household migration
MaxGhenis Sep 9, 2026
73d47fd
Align simulation documentation with immutable Stage 11 households
MaxGhenis Sep 9, 2026
e26ff8c
Add real MySQL and PostgreSQL regressions for canonical household and…
MaxGhenis Sep 9, 2026
56af1cf
Keep rollout journal outside the API source change
MaxGhenis Sep 9, 2026
83ec171
Integrate API 3.54.0 release metadata into canonical SPM support
MaxGhenis Sep 9, 2026
50d1f0c
Integrate canonical SPM API contracts with API 3.54.2
MaxGhenis Sep 10, 2026
2910a98
Merge origin/master into canonical SPM API branch
MaxGhenis Sep 11, 2026
4a7e614
Add progress log for the canonical SPM review fixes
MaxGhenis Sep 11, 2026
27ac486
Compare SPM receipt settings rather than exact receipt JSON
MaxGhenis Sep 11, 2026
1b9dfcf
Decide the canonical SPM boundary by model capability, not bundle ver…
MaxGhenis Sep 11, 2026
8607db4
Treat an inherited SPM default as a default, not as a choice
MaxGhenis Sep 11, 2026
3ff4352
Say what the certified boundary does to a caller that chose nothing
MaxGhenis Sep 11, 2026
057309c
Keep the canonical SPM contract, its tests and its published document…
MaxGhenis Sep 11, 2026
ee45311
Merge master's calculated-household cache into the canonical SPM cont…
MaxGhenis Sep 11, 2026
630860d
Qualify the ported SPM receipt cache against real Redis
MaxGhenis Sep 11, 2026
34b6e05
Merge master's upstream simulation error responses into the canonical…
MaxGhenis Sep 11, 2026
908d5df
Merge the automated API version bump into the canonical SPM contract
MaxGhenis Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/v2-integration-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ jobs:
services:
mysql:
image: mysql:8.4
# Disposable job-owned credentials, matching the v1 lifecycle target.
env:
MYSQL_ROOT_PASSWORD: policyengine_test
MYSQL_DATABASE: policyengine_alembic_test
Expand Down Expand Up @@ -73,9 +74,9 @@ jobs:
- name: Test v2 metadata publication and resource routes
run: uv run coverage run -a --branch -m pytest -q tests/integration/test_v2_catalog_publication.py tests/integration/test_v2_metadata_routes.py
- name: Test v2 policy persistence and immediate v1 mirroring
run: uv run coverage run -a --branch -m pytest -q tests/integration/test_v2_policy_persistence.py tests/integration/test_v1_policy_dual_write.py tests/integration/test_v2_user_policy_mirroring.py tests/integration/test_v1_user_policy_dual_write.py
run: uv run coverage run -a --branch -m pytest -q tests/integration/test_v2_policy_persistence.py tests/integration/test_v1_policy_dual_write.py tests/integration/test_mysql_policy_dual_write.py tests/integration/test_v2_user_policy_mirroring.py tests/integration/test_v1_user_policy_dual_write.py
- name: Test v2 household persistence and immediate v1 copying
run: uv run coverage run -a --branch -m pytest -q tests/integration/test_v2_household_persistence.py tests/integration/test_v1_household_dual_write.py
run: uv run coverage run -a --branch -m pytest -q tests/integration/test_v2_household_persistence.py tests/integration/test_v1_household_dual_write.py tests/integration/test_mysql_household_spm_dual_write.py
- name: Qualify production-scale v2 metadata publication
run: uv run coverage run -a --branch -m pytest -q tests/integration/test_v2_catalog_publication_qualification.py
env:
Expand Down
1 change: 1 addition & 0 deletions changelog.d/canonical-spm-bundle-capability.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Decide whether a bundle predates the canonical SPM contract from the installed country model's capability rather than an allowlist of bundle version strings, so an automated bundle bump no longer rejects every US request, and report an uncertified canonical bundle through the readiness probe instead of only on each request.
1 change: 1 addition & 0 deletions changelog.d/canonical-spm-contract-consistency.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Report every SPM failure with the offending field and reason rather than validator internals, whichever of a request, a bundle manifest, a worker capability or a country receipt failed; answer a country package installed without its Simulation with a typed configuration failure instead of an internal error, so the readiness probe reports not-ready rather than raising; reject an spm key on a country that has no SPM settings as unsupported rather than as a correctable null; resolve the capability probe's package by the repository's own country-package map and read any failure to load that package as a model without the canonical constructor rather than an internal error; and bring the served specification and the canonical SPM contract document back in line with what an omitted selection now does.
1 change: 1 addition & 0 deletions changelog.d/canonical-spm-inherited-defaults.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Treat an omitted SPM selection as an inherited default rather than a chosen measurement, so a certified bundle no longer rejects a calculation or a stored household replay that never asked for one: its SPM-dependent variables come back null while the rest of the calculation succeeds, a household saved without a selection stores none and keeps its hash, and an explicit null selection is rejected instead of quietly inheriting the defaults.
1 change: 1 addition & 0 deletions changelog.d/canonical-spm-receipt-identity.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Match a canonical SPM receipt against a resolved selection by its settings rather than its exact JSON, so stored household replay hits the computed-household cache when the country omits null values, and report an unreadable country receipt as a typed configuration failure instead of an internal error.
1 change: 1 addition & 0 deletions changelog.d/canonical-spm-request-contract.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add certified canonical SPM settings, structured household input errors, stored selection replay, and cached calculation provenance. Expose metadata capability for an explicit app geography choice and reject unsupported canonical worker execution until its coordinated release is certified. Preserve the currently pinned legacy model without promoting dependency versions.
3 changes: 3 additions & 0 deletions changelog.d/canonical-spm-review-fixes.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Parse explicit SPM selections on economy HTTP requests, report unsupported measurement
years only when SPM executes, replay failed jobs and historical padded simulation IDs,
validate cached household and worker receipts, and document economy/metadata SPM contracts.
7 changes: 7 additions & 0 deletions changelog.d/canonical-spm-terminal-errors.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Persist typed canonical SPM worker failures for annual and budget-window requests,
including invalid segmented results, so later polls replay the same code and
message after API service recreation without contacting a vanished job. Preserve
canonical cache identity and existing cache lifetime and runtime refresh rules.
Preserve Stage 11 immutability for all stored households, including historical
households without saved SPM settings; changed inputs, labels or settings require
a new replacement household. Use a public worker PR documentation link.
1 change: 1 addition & 0 deletions changelog.d/canonical-spm-terminal-stored-results.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Record a terminal SPM failure when a stored economy result cannot be certified, so polling reaches an end instead of re-deriving the same rejection from the same payload, report a household's saved artifact hash that this deployment lacks as a configuration failure rather than a caller error, and keep validator internals out of SPM error messages.
4 changes: 4 additions & 0 deletions changelog.d/household-population-identity.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Use strict US numeric household identity consistently for simulation replay,
and comparison report snapshots, preserving historical
saved spellings. Document simulation persistence requests and responses in the
served OpenAPI specification.
1 change: 1 addition & 0 deletions changelog.d/persisted-policy-mirror-identity.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Qualify mirrored policy identity against real MySQL JSON storage and PostgreSQL retries, retaining distinct native numeric inputs and rejecting conflicting historical mappings without rewriting them.
1 change: 1 addition & 0 deletions changelog.d/simulation-household-gap-lock.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Stop taking a locking read on the linked household row when creating a simulation: households are immutable, so the lock serialized against a mutation path that does not exist while a locking read of an absent numeric id took an InnoDB gap lock that briefly blocked unrelated household inserts.
Loading
Loading