policyengine 6.7.2__tar.gz → 6.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {policyengine-6.7.2 → policyengine-6.7.4}/CHANGELOG.md +18 -0
- {policyengine-6.7.2/src/policyengine.egg-info → policyengine-6.7.4}/PKG-INFO +1 -1
- {policyengine-6.7.2 → policyengine-6.7.4}/pyproject.toml +1 -1
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_uk_candidate.py +23 -1
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/bundle/manifest.json +10 -10
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
- policyengine-6.7.4/src/policyengine/data/qualification/replay_policy.md +171 -0
- policyengine-6.7.4/src/policyengine/data/qualification/uk_replay_exceptions.json +42 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/qualification.py +530 -18
- policyengine-6.7.4/src/policyengine/provenance/replay_probe.py +157 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/uk_candidate.py +245 -21
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/uk_qualification.py +166 -2
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/budget_reform_contract.py +126 -44
- {policyengine-6.7.2 → policyengine-6.7.4/src/policyengine.egg-info}/PKG-INFO +1 -1
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/SOURCES.txt +20 -1
- policyengine-6.7.4/tests/fixtures/replay_exceptions/README.md +21 -0
- policyengine-6.7.4/tests/fixtures/replay_exceptions/main_policy_metadata.json +5 -0
- policyengine-6.7.4/tests/fixtures/replay_exceptions/main_replay_policy.py.txt +502 -0
- policyengine-6.7.4/tests/fixtures/replay_exceptions/replay_receipt_uk2.134.7_failed.json +2994 -0
- policyengine-6.7.4/tests/fixtures/replay_exceptions/uk2.134.7_budget_inputs.json +179 -0
- policyengine-6.7.4/tests/fixtures/replay_exceptions/uk2.134.7_budget_inputs.result.json +16 -0
- policyengine-6.7.4/tests/fixtures/replay_exceptions/uk2.134.7_qualification_receipt.json +334 -0
- policyengine-6.7.4/tests/fixtures/uk_contract/README.md +15 -0
- policyengine-6.7.4/tests/fixtures/uk_contract/evaluate_case_rows.json +1 -0
- policyengine-6.7.2/tests/fixtures/uk_contract/full_released_uk_2.130.1.json → policyengine-6.7.4/tests/fixtures/uk_contract/full_released_uk_2.135.0.json +2346 -567
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualification_contracts.py +1 -1
- policyengine-6.7.4/tests/test_replay_exception_coherence_round3.py +141 -0
- policyengine-6.7.4/tests/test_replay_exception_finalize_review.py +319 -0
- policyengine-6.7.4/tests/test_replay_exception_hardening_round3.py +247 -0
- policyengine-6.7.4/tests/test_replay_exception_lineage.py +86 -0
- policyengine-6.7.4/tests/test_replay_exception_lineage_round3.py +501 -0
- policyengine-6.7.4/tests/test_replay_exception_policy_review.py +149 -0
- policyengine-6.7.4/tests/test_replay_exception_probe.py +161 -0
- policyengine-6.7.4/tests/test_replay_exception_probe_round3.py +214 -0
- policyengine-6.7.4/tests/test_replay_exceptions.py +1123 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_budget_reform_contract.py +88 -4
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_candidate_gates.py +352 -55
- policyengine-6.7.4/tests/test_uk_qualification_replay_inputs.py +619 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/uk_contract_row_scenarios.py +5 -2
- {policyengine-6.7.2 → policyengine-6.7.4}/uv.lock +1 -1
- policyengine-6.7.2/src/policyengine/data/qualification/replay_policy.md +0 -89
- policyengine-6.7.2/tests/fixtures/uk_contract/README.md +0 -15
- policyengine-6.7.2/tests/fixtures/uk_contract/evaluate_case_rows.json +0 -1
- {policyengine-6.7.2 → policyengine-6.7.4}/.claude/policyengine-guide.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.claude/quick-reference.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/CONTRIBUTING.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/bump_version.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/capture-version.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/changelog_template.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/check-changelog.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/copilot-instructions.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/dispatch-policyengine-release.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/fetch_version.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/get-changelog-diff.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/has-functional-changes.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/is-version-number-acceptable.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/publish-git-tag.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/qualification-ledger.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/wait-for-pypi.sh +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/certify-uk-release.yaml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/draft-pdf.yml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/pr_code_changes.yaml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/pr_docs_changes.yaml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/push.yaml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.gitignore +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/.python-version +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/AGENTS.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/CITATION.cff +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/CLAUDE.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/CODE_OF_CONDUCT.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/CONTRIBUTING.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/LICENSE +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/Makefile +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/architecture.png +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/architecture.svg +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/changelog.d/.gitkeep +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/.gitignore +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/_generator/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/_generator/build_reference.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/_quarto.yml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/bundles.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/countries.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/data-publishing-design.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/decile-impact-spec.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/dev.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/disclosure.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/acs-local-wic-replacement.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/canonical-spm-development.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/uk-qualification.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/us-legacy-spm-sources.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/data-certification.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/github-prs.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/repository-guidance.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/examples.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/getting-started.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/households.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/impact-analysis.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/index.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/methodology/index.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/methodology/model-architecture.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/methodology/us-health-costs.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/microsim.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/outputs.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/programs/index.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/programs/us-chip.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/receipts.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/reference/index.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/reforms.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/regions.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/release-bundles.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/run-records.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/trace-case-study.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/docs/visualisation.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/belgium_axiom_pilot.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/employment_income_variation_uk.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/employment_income_variation_us.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/household_impact_example.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/income_bands_uk.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/income_distribution_us.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/paper_repro_uk.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/policy_change_uk.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/speedtest_us_simulation.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/uk_geography_disclosure.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/examples/us_budgetary_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/paper-preview.html +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/paper.bib +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/paper.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/bundle.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/certify_data_release.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_data_staleness.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_native_spm_loading.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_release_credentials.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/export_bundle_release_assets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/generate_bundle_artifacts.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/generate_receipt_schemas.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/generate_trace_tros.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/prepare_package_bundle_update.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/release_consumers.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/release_lock.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/scripts/spm_bundle.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/setup.cfg +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/bundle.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/cli.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/cache.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/dataset.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/dynamic.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/output.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/parameter.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/parameter_node.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/parameter_value.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/policy.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/region.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/run_record.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/scoping_strategy.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/simulation.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/spm.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/tax_benefit_model.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/tax_benefit_model_version.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/variable.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/uk/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/uk/regions.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/districts.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/places.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/states.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/regions.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/qualification/uk.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/qualification/uk_budget_critical_inputs.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/qualification/uk_review_bounds.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/execution_receipt.v1.schema.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/qualification_request.v1.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_status.v1.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/uk_geography_assets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/derivations/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/derivations/narrate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/derivations/trace.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/__main__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/areas.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/estimate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/noise.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/release.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/schema.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/support.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/validate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/graph/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/graph/extractor.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/graph/graph.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/aggregate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/change_aggregate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/cliff_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/congressional_district_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/constituency_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/decile_analysis.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/decile_grouping.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/decile_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/extra_variables.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/inequality.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/intra_decile_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/labor_supply_response.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/local_authority_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/poverty.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/program_statistics.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/uk_geography_assets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/uk_geography_disclosure.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/uk_geography_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/bundle_validation.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/bytecode.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/canonical.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/certification.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/dataset_materialization.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/loaded.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/manifest.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/pyproject_pins.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/qualification_ledger.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/receipt.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/spm_configuration.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/trace.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/verify.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/wheels.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/zenodo.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/schema.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/trace_tro.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/tracking.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/be/model.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/household.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/result.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/budget_reform_population.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/capital_gains_responses.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/household.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_inputs.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/declarations.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/independence.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/model_adapter.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/record.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/registry.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/runs.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/universe.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/model.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/spm.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/dates.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/design.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/entity_utils.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/errors.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/hashing.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/household_validation.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/parameter_labels.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/parametric_reforms.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/plotting.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/dependency_links.txt +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/entry_points.txt +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/requires.txt +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/top_level.txt +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/conftest.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/filtering_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/parameter_labels_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/region_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/country-models.lock.toml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/manifest.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/us-release_manifest.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/us.trace.tro.jsonld +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/spm_development.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_contract/pinned_uk_2.125.1_defects.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_contract/population_pass_max_examples_0.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_metrics/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_metrics/budget_metrics_report.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_metrics/standard_reforms.yaml +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/DIGESTS.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/README.md +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/qualification_request_golden.jcs +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/qualification_request_golden.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REPLAY_RECEIPT.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REQUEST.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/replay_receipt_golden.jcs +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/replay_receipt_golden.json +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/us_reform_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/variable_label_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/qualification_fixtures.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/receipt_modifiers.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/receipt_unbindable_modifiers.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_aggregate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_be_axiom_pilot.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_budgetary_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_bump_version.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_bundle.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_bundle_metadata.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_cache.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_canonical_json.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_certify_data_release.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_change_aggregate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_cliff_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_cliff_impact_analysis.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_congressional_district_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_constituency_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_materialization.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_persistence.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_runtime.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_source.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_decile_grouping.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_derivations.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dict_reforms_on_simulation.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_areas.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_estimate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_noise.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_release.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_schema.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_support.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_validate.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_entity_mapping.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_entity_utils.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_entity_utils_characterization.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_errors.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_execution_receipt.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_extra_variables.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_filtering.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_generate_trace_tros.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_graph/__init__.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_graph/conftest.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_graph/test_extractor.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_household_calculator_snapshot.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_household_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_inequality.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_intra_decile_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_labor_supply_response.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_local_authority_impact.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_manifest_version_mismatch.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_models.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_pandas3_compatibility.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parameter_labels.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parameter_nodes.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parameter_values.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parametric_reforms.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_poverty.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_poverty_by_demographics.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_poverty_run.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_preservation_mirror.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_program_statistics.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_pyproject_pins.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualification_ledger_concurrency.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualification_ledger_script.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualified_pair_certification.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_region.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_region_group_strategy.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_credentials.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_lock.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_manifests.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_tro_generation.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_results.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_run_record.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_scoping_strategy.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_small_follow_ups.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_bundle_bootstrap.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_bundle_tooling.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_decile.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_development_authentication.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_household.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_model.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_selection.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_selection_schema.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_trace_tro.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_trace_tro_verify.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_analysis.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_candidate_metric_baselines.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_cgt_response_records.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_cgt_responses.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_dated_reforms.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_geography_assets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_geography_disclosure.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_program_statistics.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_qualification_pipeline.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_qualification_workflow.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_regions.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_year_file_data_year.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_inputs.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_inputs_integration.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_spm.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_spm_integration.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_spm_model_contract.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_long_term_datasets.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_microsim_structural_reforms.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_native_alignment.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_native_hdf_weights.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_program_statistics.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_reform_application.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_regions.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_year_file_stamp.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_variable_labels.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_variable_metadata.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_wheels.py +0 -0
- {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_zenodo_mirror.py +0 -0
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## [6.7.4] - 2026-10-18
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
|
|
5
|
+
- The UK replay qualification gate records narrowly scoped data-limited exceptions under policy d1344-replay-regressions-v2. A matching regression requires coherent zero candidate effects, approved input lineage, and digest-bound Budget-input and positive-input probe evidence from the same candidate-pair attempt. Named acceptance must restate the publication designation; unmatched failures still fail.
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Replay exceptions reject nonzero candidate effects at every reported fiscal level and retain cumulative usable-input history across certified pairs. Budget-input evidence is bound to the exact pair and attempt, status maps must agree with missing-input claims, and probe evidence must match the installed model and recorded baseline/reform arithmetic.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [6.7.3] - 2026-10-17
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Contract 2.0.0 of the UK Budget reform contract resolves cos d1344: after a freeze ends, the personal allowance, basic rate limit and aligned NICs thresholds are checked against indexation from the frozen amount (ITA 2007 ss21 and 57), and the six pending checks become gating ones; the sampled property uses the same statutory oracle for the allowance.
|
|
17
|
+
|
|
18
|
+
|
|
1
19
|
## [6.7.2] - 2026-10-17
|
|
2
20
|
|
|
3
21
|
### Fixed
|
|
@@ -66,6 +66,7 @@ from policyengine.provenance.uk_qualification import ( # noqa: E402
|
|
|
66
66
|
ResolvedCandidate,
|
|
67
67
|
WheelFile,
|
|
68
68
|
accept_review,
|
|
69
|
+
attempt_evidence_id,
|
|
69
70
|
attempt_is_recoverable,
|
|
70
71
|
attempt_is_waiting_for_replay,
|
|
71
72
|
attempt_key,
|
|
@@ -76,6 +77,8 @@ from policyengine.provenance.uk_qualification import ( # noqa: E402
|
|
|
76
77
|
candidate_pr_body,
|
|
77
78
|
expected_release_bundle,
|
|
78
79
|
finalize_attempt,
|
|
80
|
+
load_attempt_budget_inputs,
|
|
81
|
+
load_attempt_replay_probe,
|
|
79
82
|
packaged_manifest_sha256,
|
|
80
83
|
plan_promotion,
|
|
81
84
|
prepare_candidate_commit,
|
|
@@ -369,6 +372,16 @@ def cmd_gates(args: argparse.Namespace) -> int:
|
|
|
369
372
|
ledger_root=ledger_root,
|
|
370
373
|
)
|
|
371
374
|
write_gate_results(attempt, results, evidence)
|
|
375
|
+
from policyengine.provenance.replay_probe import run_replay_probes
|
|
376
|
+
|
|
377
|
+
probe_result, probe_evidence = run_replay_probes(
|
|
378
|
+
attempt_id=attempt_evidence_id(attempt),
|
|
379
|
+
candidate_model_version=payload["pair"]["model"]["version"],
|
|
380
|
+
)
|
|
381
|
+
write_gate_results(attempt, [probe_result], {"replay_probe": probe_evidence})
|
|
382
|
+
print(
|
|
383
|
+
f"{probe_result.gate_id:20s} {probe_result.status:13s} {probe_result.summary}"
|
|
384
|
+
)
|
|
372
385
|
for result in results:
|
|
373
386
|
print(f"{result.gate_id:20s} {result.status:13s} {result.summary}")
|
|
374
387
|
return 0
|
|
@@ -417,10 +430,19 @@ def cmd_poll_replay(args: argparse.Namespace) -> int:
|
|
|
417
430
|
read_json(attempt / "replay" / "request.json")
|
|
418
431
|
)
|
|
419
432
|
fetch = scorecard_file(settings["repository"])
|
|
433
|
+
budget_result, budget_evidence = load_attempt_budget_inputs(attempt)
|
|
434
|
+
probe_result, probe_evidence = load_attempt_replay_probe(attempt)
|
|
420
435
|
deadline = time.monotonic() + 60 * args.wait_minutes
|
|
421
436
|
while True:
|
|
422
437
|
gate, status, receipt = read_replay(
|
|
423
|
-
request,
|
|
438
|
+
request,
|
|
439
|
+
fetch=fetch,
|
|
440
|
+
state_ref=settings["state_ref"],
|
|
441
|
+
budget_inputs_result=budget_result,
|
|
442
|
+
budget_inputs_evidence=budget_evidence,
|
|
443
|
+
probe_result=probe_result,
|
|
444
|
+
probe_evidence=probe_evidence,
|
|
445
|
+
attempt_id=attempt_evidence_id(attempt),
|
|
424
446
|
)
|
|
425
447
|
if (status is not None and status.terminal) or time.monotonic() >= deadline:
|
|
426
448
|
break
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"bundle_version": "6.7.
|
|
2
|
+
"bundle_version": "6.7.4",
|
|
3
3
|
"citation": {
|
|
4
4
|
"publisher": "PolicyEngine",
|
|
5
|
-
"title": "PolicyEngine bundle 6.7.
|
|
5
|
+
"title": "PolicyEngine bundle 6.7.4",
|
|
6
6
|
"type": "software-bundle",
|
|
7
|
-
"version": "6.7.
|
|
7
|
+
"version": "6.7.4"
|
|
8
8
|
},
|
|
9
9
|
"countries": {
|
|
10
10
|
"uk": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"data_releases": {
|
|
18
18
|
"uk": {
|
|
19
19
|
"build_id": "policyengine-uk-data-1.58.1",
|
|
20
|
-
"bundle_id": "uk-6.7.
|
|
20
|
+
"bundle_id": "uk-6.7.4",
|
|
21
21
|
"certification": {
|
|
22
22
|
"built_with_model_git_sha": "daad71cd26c107f1b784ff600d1464ba59c70e4a",
|
|
23
23
|
"built_with_model_version": "2.122.2",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"version": "2.130.1",
|
|
100
100
|
"wheel_url": "https://files.pythonhosted.org/packages/1a/21/88e8addba0eabd9a7d3a29fa5293e141feb405baf0432209387f9a1f467a/policyengine_uk-2.130.1-py3-none-any.whl"
|
|
101
101
|
},
|
|
102
|
-
"policyengine_version": "6.7.
|
|
102
|
+
"policyengine_version": "6.7.4",
|
|
103
103
|
"region_datasets": {
|
|
104
104
|
"national": {
|
|
105
105
|
"path_template": "enhanced_frs_2024_25.h5"
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
},
|
|
113
113
|
"us": {
|
|
114
114
|
"build_id": "populace-us-2024-spm-20260915",
|
|
115
|
-
"bundle_id": "us-6.7.
|
|
115
|
+
"bundle_id": "us-6.7.4",
|
|
116
116
|
"certification": {
|
|
117
117
|
"built_with_model_version": "2.2.1",
|
|
118
118
|
"certified_by": "policyengine.py bundle certification",
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
"version": "2.2.1",
|
|
218
218
|
"wheel_url": "https://files.pythonhosted.org/packages/5e/09/86ac3968d2a18e28fce3ba1186fc21728e9f299b96a806d6f204f1e0aaed/policyengine_us-2.2.1-py3-none-any.whl"
|
|
219
219
|
},
|
|
220
|
-
"policyengine_version": "6.7.
|
|
220
|
+
"policyengine_version": "6.7.4",
|
|
221
221
|
"region_datasets": {
|
|
222
222
|
"congressional_district": {
|
|
223
223
|
"path_template": "populace_us_2024.h5"
|
|
@@ -295,10 +295,10 @@
|
|
|
295
295
|
"packages": {
|
|
296
296
|
"policyengine": {
|
|
297
297
|
"import_name": "policyengine",
|
|
298
|
-
"install_requirement": "policyengine==6.7.
|
|
298
|
+
"install_requirement": "policyengine==6.7.4",
|
|
299
299
|
"name": "policyengine",
|
|
300
300
|
"role": "bundle_carrier",
|
|
301
|
-
"version": "6.7.
|
|
301
|
+
"version": "6.7.4"
|
|
302
302
|
},
|
|
303
303
|
"policyengine-core": {
|
|
304
304
|
"import_name": "policyengine_core",
|
|
@@ -334,6 +334,6 @@
|
|
|
334
334
|
"wheel_url": "https://files.pythonhosted.org/packages/19/a0/c484f69a0ebf88a9b9fd0ac28176f8df66550f46714f1b0c5ec0b360824e/spm_calculator-1.0.0-py3-none-any.whl"
|
|
335
335
|
}
|
|
336
336
|
},
|
|
337
|
-
"policyengine_version": "6.7.
|
|
337
|
+
"policyengine_version": "6.7.4",
|
|
338
338
|
"schema_version": 2
|
|
339
339
|
}
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
"schema:url": "https://policyengine.org"
|
|
19
19
|
},
|
|
20
20
|
"schema:dateCreated": "2026-10-14T07:43:49.920588Z",
|
|
21
|
-
"schema:description": "TRACE TRO for certified runtime bundle uk-6.7.
|
|
21
|
+
"schema:description": "TRACE TRO for certified runtime bundle uk-6.7.4 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
|
|
22
22
|
"schema:name": "policyengine uk certified bundle TRO",
|
|
23
23
|
"trov:createdWith": {
|
|
24
24
|
"@type": "schema:SoftwareApplication",
|
|
25
25
|
"schema:name": "policyengine",
|
|
26
|
-
"schema:softwareVersion": "6.7.
|
|
26
|
+
"schema:softwareVersion": "6.7.4"
|
|
27
27
|
},
|
|
28
28
|
"trov:hasArrangement": [
|
|
29
29
|
{
|
|
30
30
|
"@id": "arrangement/1",
|
|
31
31
|
"@type": "trov:ArtifactArrangement",
|
|
32
|
-
"rdfs:comment": "Certified arrangement for bundle uk-6.7.
|
|
32
|
+
"rdfs:comment": "Certified arrangement for bundle uk-6.7.4.",
|
|
33
33
|
"trov:hasArtifactLocation": [
|
|
34
34
|
{
|
|
35
35
|
"@id": "arrangement/1/location/bundle_manifest",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"@type": "trov:ResearchArtifact",
|
|
76
76
|
"schema:name": "policyengine.py bundle manifest for uk",
|
|
77
77
|
"trov:mimeType": "application/json",
|
|
78
|
-
"trov:sha256": "
|
|
78
|
+
"trov:sha256": "ba941346a5d4c77426756e38cb1dc6c518985bbc3d05fb9ebfb0c0aeef3d7151"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
"@id": "composition/1/artifact/data_release_manifest",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"trov:hasFingerprint": {
|
|
103
103
|
"@id": "composition/1/fingerprint",
|
|
104
104
|
"@type": "trov:CompositionFingerprint",
|
|
105
|
-
"trov:sha256": "
|
|
105
|
+
"trov:sha256": "e52daf7bac16573b5f91057ea25906990ed6689576b143deb4fa67652644df5c"
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
"trov:hasPerformance": {
|
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
"schema:name": "PolicyEngine",
|
|
18
18
|
"schema:url": "https://policyengine.org"
|
|
19
19
|
},
|
|
20
|
-
"schema:description": "TRACE TRO for certified runtime bundle us-6.7.
|
|
20
|
+
"schema:description": "TRACE TRO for certified runtime bundle us-6.7.4 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
|
|
21
21
|
"schema:name": "policyengine us certified bundle TRO",
|
|
22
22
|
"trov:createdWith": {
|
|
23
23
|
"@type": "schema:SoftwareApplication",
|
|
24
24
|
"schema:name": "policyengine",
|
|
25
|
-
"schema:softwareVersion": "6.7.
|
|
25
|
+
"schema:softwareVersion": "6.7.4"
|
|
26
26
|
},
|
|
27
27
|
"trov:hasArrangement": [
|
|
28
28
|
{
|
|
29
29
|
"@id": "arrangement/1",
|
|
30
30
|
"@type": "trov:ArtifactArrangement",
|
|
31
|
-
"rdfs:comment": "Certified arrangement for bundle us-6.7.
|
|
31
|
+
"rdfs:comment": "Certified arrangement for bundle us-6.7.4.",
|
|
32
32
|
"trov:hasArtifactLocation": [
|
|
33
33
|
{
|
|
34
34
|
"@id": "arrangement/1/location/bundle_manifest",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"@type": "trov:ResearchArtifact",
|
|
75
75
|
"schema:name": "policyengine.py bundle manifest for us",
|
|
76
76
|
"trov:mimeType": "application/json",
|
|
77
|
-
"trov:sha256": "
|
|
77
|
+
"trov:sha256": "ba941346a5d4c77426756e38cb1dc6c518985bbc3d05fb9ebfb0c0aeef3d7151"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
80
|
"@id": "composition/1/artifact/data_release_manifest",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"trov:hasFingerprint": {
|
|
102
102
|
"@id": "composition/1/fingerprint",
|
|
103
103
|
"@type": "trov:CompositionFingerprint",
|
|
104
|
-
"trov:sha256": "
|
|
104
|
+
"trov:sha256": "e329a374b3ca516be0e7e0273a02b68bad9b4c8e670f88e8c80cd74fceb974b1"
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
107
|
"trov:hasPerformance": {
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Replay gate policy d1344-replay-regressions-v2
|
|
2
|
+
|
|
3
|
+
Decided under cos d1344 by workstream W4 on 15 October 2026, after two
|
|
4
|
+
independent reviews. The pull request that added this file records the
|
|
5
|
+
decision, the reviews and the alternatives considered. Revised on 16
|
|
6
|
+
October 2026, before first use, after the third to fifth reviews of
|
|
7
|
+
policyengine.py#637: scorecard's own record of a mixed known gap no longer
|
|
8
|
+
blocks, flag counters must equal the flags the rows carry, and any
|
|
9
|
+
candidate value other than £0 at a known gap is a contradiction.
|
|
10
|
+
The data-limited exception amendment below was adopted by the Budget
|
|
11
|
+
coordinator following independent review agreement under cos d1344:
|
|
12
|
+
RULE AGREE (GPT-6.1 Sol, round 2, 17 October 2026, head 7f518ff61) and
|
|
13
|
+
CODE AGREE WITH NITS (round 3, head dbc1806df), with the P3 nit fixed in
|
|
14
|
+
this commit. The registry records this adopted decision and review status.
|
|
15
|
+
`evaluate_replay_receipt` in `policyengine.provenance.qualification`
|
|
16
|
+
applies this text. Each qualification receipt records the policy id and
|
|
17
|
+
this file's SHA-256 in its `replay` gate details.
|
|
18
|
+
|
|
19
|
+
The replay gate fails on the regressions a scorecard replay receipt
|
|
20
|
+
identifies. It calls a gap known only on positive evidence from the
|
|
21
|
+
comparison base, and passes the rows that record a known gap. It sends
|
|
22
|
+
every other flagged move to a named reviewer.
|
|
23
|
+
|
|
24
|
+
## Fail
|
|
25
|
+
|
|
26
|
+
- A rejected request, `no_supported_years`, integrity `failed` (a crash or
|
|
27
|
+
missing outputs, persistent or not), or a receipt not bound to the
|
|
28
|
+
request. Only the narrow data-limited exceptions below can make a failed
|
|
29
|
+
integrity reviewable.
|
|
30
|
+
- A mapping flag.
|
|
31
|
+
- A lost result: a coverage row with a base value and no candidate value,
|
|
32
|
+
unless it is the record of a known gap (below).
|
|
33
|
+
- A lost response:
|
|
34
|
+
- a measure-year the candidate lists as inert, unless it is a known gap
|
|
35
|
+
or a data-limited exception applies;
|
|
36
|
+
- a measure-year total at exactly £0 where the base's absolute value is
|
|
37
|
+
at least the diff's bound, max(£1m, 1% of the base's absolute value),
|
|
38
|
+
whether the base was positive or negative, unless a data-limited
|
|
39
|
+
exception applies. A known gap never excuses this: a base whose record
|
|
40
|
+
lists the measure-year as a gap cannot also hold a material value for
|
|
41
|
+
it, and a data-limited exception never excuses that contradiction.
|
|
42
|
+
- An event whose supported grid is incomplete, unless every inert or
|
|
43
|
+
missing and supported measure-year in it is a known gap or is accounted
|
|
44
|
+
for by a data-limited exception. An incomplete event whose receipt does
|
|
45
|
+
not list its missing measure-years fails, and so does one with no inert
|
|
46
|
+
and no missing and supported measure-year at all. A receipt whose
|
|
47
|
+
integrity is `incomplete` with no incomplete event also fails.
|
|
48
|
+
- A receipt that contradicts itself, including a complete event that lists
|
|
49
|
+
an inert, or missing and supported, measure-year; flag counters that
|
|
50
|
+
differ, either way, from the flags its rows carry; and a candidate value
|
|
51
|
+
other than £0 for a measure-year that is a known gap.
|
|
52
|
+
|
|
53
|
+
## Known gaps
|
|
54
|
+
|
|
55
|
+
A candidate measure-year that is inert, or missing and supported (in the
|
|
56
|
+
event's missing list and not its unsupported list), is a known gap only
|
|
57
|
+
when the receipt's base-side record for the same event (`diff.base_events`,
|
|
58
|
+
taken from the base's verified staging and run manifests) lists the same
|
|
59
|
+
measure and year as inert, or as missing and supported, in the base. The
|
|
60
|
+
gate records each known gap with the base's staging manifest SHA-256. A
|
|
61
|
+
legacy-layout base, or an event the base did not replay, has no record, so
|
|
62
|
+
none of its gaps are known.
|
|
63
|
+
|
|
64
|
+
A known gap does not block. Where one side is inert and the other missing,
|
|
65
|
+
scorecard records the gap as a coverage row with exactly £0 on the inert
|
|
66
|
+
side and no value on the other, and an inertness flag on the inert side
|
|
67
|
+
only, on a row with no values. Those flags are the gap itself and neither
|
|
68
|
+
fail nor send the row to review. (Where the candidate is the inert side, its
|
|
69
|
+
inert list already decides that flag.) The gate records every row a known
|
|
70
|
+
gap accounts for, in whole or in part, beside the known gaps; the rest of a
|
|
71
|
+
partly excused row's flags are judged as usual. Any other row at a known gap
|
|
72
|
+
is judged as usual: a coverage row with a base value and no candidate value,
|
|
73
|
+
even £0, is still a lost result, and any candidate value other than £0 at a
|
|
74
|
+
known gap contradicts the candidate's own record, which lists the
|
|
75
|
+
measure-year as inert (exactly £0) or missing (no value).
|
|
76
|
+
|
|
77
|
+
## Data-limited exceptions
|
|
78
|
+
|
|
79
|
+
`uk_replay_exceptions.json` lists narrowly scoped exceptions for regressions
|
|
80
|
+
caused by inputs absent from the candidate's data. Missingness alone does
|
|
81
|
+
not establish cause. The registry is reviewed like code. Each entry records
|
|
82
|
+
an id, failure codes, event, measure key, years, required missing inputs,
|
|
83
|
+
cause, tracking issue, approved lineage, positive-input probe specification,
|
|
84
|
+
publication designation, governing decision and review status.
|
|
85
|
+
|
|
86
|
+
An exception applies only when its code, event, measure key and year all
|
|
87
|
+
match, and the same qualification attempt's `budget_inputs` gate result
|
|
88
|
+
and its evidence report every required input as missing from the
|
|
89
|
+
candidate's data. A degenerate but present input cannot satisfy that
|
|
90
|
+
condition. The same evidence must carry the cumulative `ever_usable_inputs`
|
|
91
|
+
set from the previous certified pair, adding inputs usable in that pair and
|
|
92
|
+
in the candidate. Removing an input or making it formula-backed never erases
|
|
93
|
+
this history. An exception requires that the input has never been usable in
|
|
94
|
+
this chain and is not usable now. For evidence predating the cumulative field,
|
|
95
|
+
recompute the exact direct predecessor's usable inputs and record
|
|
96
|
+
`ever_usable_inputs_basis: "seeded from direct predecessor"`; the registry's
|
|
97
|
+
approved lineage records the human-verified history before that base.
|
|
98
|
+
A previous pair with both the variable
|
|
99
|
+
and column present requires a fresh reviewed registry decision and fails,
|
|
100
|
+
including when the previous column was degenerate. The approved
|
|
101
|
+
SDLT lineage is that no certified uk-data release through 1.58.2 supplied
|
|
102
|
+
the input. When the data gains an input, or the measure-year falls outside
|
|
103
|
+
the entry's years, the exception stops applying automatically.
|
|
104
|
+
|
|
105
|
+
Every reported fiscal effect for an excepted measure-year must be exactly £0,
|
|
106
|
+
including fiscal heads, measure totals, source rows and any other reported
|
|
107
|
+
level. Any nonzero candidate effect is a contradiction and fails,
|
|
108
|
+
independently of any base known gap. This checks reported rows only.
|
|
109
|
+
|
|
110
|
+
The gates job also runs the registry's positive-input probe directly on the
|
|
111
|
+
exact installed candidate model, using one synthetic household and no
|
|
112
|
+
survey data. For the SDLT exception, an England household buys an additional
|
|
113
|
+
residential property for £300,000 in 2026. The reform adds 0.02 to every
|
|
114
|
+
band of `gov.hmrc.stamp_duty.residential.purchase.additional.rate`. Its
|
|
115
|
+
`sdlt_on_residential_property_transactions` output must increase by £6,000
|
|
116
|
+
within £0.10, and must be exactly unchanged when the purchase input is £0.
|
|
117
|
+
An import error, missing variable or parameter, or any other inability to
|
|
118
|
+
run the probe records failure. An exception requires a passing probe from
|
|
119
|
+
the same attempt (identified by both pair id and attempt key), bound to the
|
|
120
|
+
candidate model version and probe specification by digests. Finalization
|
|
121
|
+
re-reads the evidence and verifies its digest, as it does for `budget_inputs`.
|
|
122
|
+
The consumer also checks the installed model version and verifies that the
|
|
123
|
+
recorded baseline/reform outputs yield the claimed positive and zero deltas.
|
|
124
|
+
Budget-input evidence embeds and checks both pair and attempt identity; its
|
|
125
|
+
candidate status map must agree with the missing list, and its previous
|
|
126
|
+
status flags and cumulative history must be internally consistent.
|
|
127
|
+
|
|
128
|
+
Matching `construction_inert` integrity failures and `lost_response`
|
|
129
|
+
regressions (candidate inertness or a measure-year total of £0 against a
|
|
130
|
+
material base value) become review items. Each names the exception, cause
|
|
131
|
+
and required missing inputs. A failed receipt proceeds to the ordinary
|
|
132
|
+
corpus and diff checks only if every integrity failure matches an
|
|
133
|
+
exception. Every unmatched failure, mapping flag, lost result and
|
|
134
|
+
contradiction retains its ordinary treatment. An exception accounts only
|
|
135
|
+
for its matched inert measure-years when checking grid completeness; it
|
|
136
|
+
does not excuse a missing result.
|
|
137
|
+
|
|
138
|
+
An applied exception always requires review and can never qualify a
|
|
139
|
+
candidate automatically. Promotion requires a named reviewer to accept
|
|
140
|
+
the exact qualification receipt. Applied-exception review items carry the
|
|
141
|
+
registry's publication designation, and the named reviewer's acceptance
|
|
142
|
+
explanation must restate it. For SDLT the designation is: not computable,
|
|
143
|
+
in PolicyEngine/uk-autumn-budget-dashboard-2026 (data-limited handling,
|
|
144
|
+
PR #51; Budget-day runbook, PR #14).
|
|
145
|
+
|
|
146
|
+
The gate records every applied exception's id, event, measure key, year
|
|
147
|
+
and matched codes, the registry's SHA-256, and the digests of the same
|
|
148
|
+
attempt's `budget_inputs` and probe results it relied on. Every result
|
|
149
|
+
that reads the registry records its digest.
|
|
150
|
+
|
|
151
|
+
## Review
|
|
152
|
+
|
|
153
|
+
A needs-review verdict blocks automatic promotion. It stays blocked until a
|
|
154
|
+
named reviewer accepts that exact qualification receipt. These go to
|
|
155
|
+
review:
|
|
156
|
+
|
|
157
|
+
- numerical flags;
|
|
158
|
+
- structural flags other than a lost response, including sign reversals
|
|
159
|
+
and moves from zero to non-zero;
|
|
160
|
+
- construction flags;
|
|
161
|
+
- support flags (the separate `supported_years` gate fails a candidate that
|
|
162
|
+
loses a year the previous certificate supported);
|
|
163
|
+
- coverage gains, coverage rows with no value on either side, and any other
|
|
164
|
+
coverage row that is not a lost result or the record of a known gap;
|
|
165
|
+
- inertness flags on a measure-year the candidate does not list as inert,
|
|
166
|
+
other than the record of a known gap;
|
|
167
|
+
- a receipt with no diff against a certified variant.
|
|
168
|
+
|
|
169
|
+
Unsupported years alone never fail. A move below the diff's bound raises
|
|
170
|
+
no numerical flag; it is reviewed only if another flag, such as a structural
|
|
171
|
+
one, fires on it.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Narrow data-limited exceptions for the UK replay qualification gate, reviewed like code under cos d1344. An entry requires coherent zero candidate effects, never-usable input lineage from budget_inputs, and a passing positive-input probe from the same attempt. It always requires a named reviewer's acceptance. The 17 October 2026 decision is adopted by the Budget coordinator following independent review agreement under cos d1344: RULE AGREE (GPT-6.1 Sol, round 2, 17 October 2026, head 7f518ff61) and CODE AGREE WITH NITS (round 3, head dbc1806df), with the P3 nit fixed in this commit.",
|
|
3
|
+
"exceptions": [
|
|
4
|
+
{
|
|
5
|
+
"id": "ab2024-sdlt-hrad-purchase-input",
|
|
6
|
+
"codes": [
|
|
7
|
+
"construction_inert",
|
|
8
|
+
"lost_response"
|
|
9
|
+
],
|
|
10
|
+
"event": "autumn_budget_2024",
|
|
11
|
+
"measure_key": "autumn_budget_2024__sdlt_additional_dwelling_surcharge_2pp",
|
|
12
|
+
"years": [
|
|
13
|
+
2025,
|
|
14
|
+
2026,
|
|
15
|
+
2027,
|
|
16
|
+
2028,
|
|
17
|
+
2029
|
|
18
|
+
],
|
|
19
|
+
"requires_missing_inputs": [
|
|
20
|
+
"additional_residential_property_purchased"
|
|
21
|
+
],
|
|
22
|
+
"cause": "policyengine-uk#2241 charges SDLT higher rates on purchases, which uk-data does not yet impute.",
|
|
23
|
+
"issue": "PolicyEngine/policyengine-uk-data#573 (cos d1354)",
|
|
24
|
+
"approved_lineage": "never supplied by any certified uk-data release up to and including 1.58.2.",
|
|
25
|
+
"publication": "not computable, in PolicyEngine/uk-autumn-budget-dashboard-2026 (data-limited handling, PR #51; Budget-day runbook, PR #14).",
|
|
26
|
+
"probe": {
|
|
27
|
+
"input_variable": "additional_residential_property_purchased",
|
|
28
|
+
"input_entity": "household",
|
|
29
|
+
"year": 2026,
|
|
30
|
+
"positive_input_gbp": 300000,
|
|
31
|
+
"output_variable": "sdlt_on_residential_property_transactions",
|
|
32
|
+
"parameter": "gov.hmrc.stamp_duty.residential.purchase.additional.rate",
|
|
33
|
+
"rate_increment": 0.02,
|
|
34
|
+
"expected_change_gbp": 6000,
|
|
35
|
+
"absolute_tolerance_gbp": 0.1,
|
|
36
|
+
"region": "LONDON"
|
|
37
|
+
},
|
|
38
|
+
"decided_under": "cos d1344; Budget coordinator's data-limited exception proposal of 17 October 2026",
|
|
39
|
+
"review": "Adopted by the Budget coordinator following independent review agreement under cos d1344: RULE AGREE (GPT-6.1 Sol, round 2, 17 October 2026, head 7f518ff61) and CODE AGREE WITH NITS (round 3, head dbc1806df), with the P3 nit fixed in this commit."
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|