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.
Files changed (440) hide show
  1. {policyengine-6.7.2 → policyengine-6.7.4}/CHANGELOG.md +18 -0
  2. {policyengine-6.7.2/src/policyengine.egg-info → policyengine-6.7.4}/PKG-INFO +1 -1
  3. {policyengine-6.7.2 → policyengine-6.7.4}/pyproject.toml +1 -1
  4. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_uk_candidate.py +23 -1
  5. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/bundle/manifest.json +10 -10
  6. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
  7. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
  8. policyengine-6.7.4/src/policyengine/data/qualification/replay_policy.md +171 -0
  9. policyengine-6.7.4/src/policyengine/data/qualification/uk_replay_exceptions.json +42 -0
  10. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/qualification.py +530 -18
  11. policyengine-6.7.4/src/policyengine/provenance/replay_probe.py +157 -0
  12. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/uk_candidate.py +245 -21
  13. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/uk_qualification.py +166 -2
  14. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/budget_reform_contract.py +126 -44
  15. {policyengine-6.7.2 → policyengine-6.7.4/src/policyengine.egg-info}/PKG-INFO +1 -1
  16. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/SOURCES.txt +20 -1
  17. policyengine-6.7.4/tests/fixtures/replay_exceptions/README.md +21 -0
  18. policyengine-6.7.4/tests/fixtures/replay_exceptions/main_policy_metadata.json +5 -0
  19. policyengine-6.7.4/tests/fixtures/replay_exceptions/main_replay_policy.py.txt +502 -0
  20. policyengine-6.7.4/tests/fixtures/replay_exceptions/replay_receipt_uk2.134.7_failed.json +2994 -0
  21. policyengine-6.7.4/tests/fixtures/replay_exceptions/uk2.134.7_budget_inputs.json +179 -0
  22. policyengine-6.7.4/tests/fixtures/replay_exceptions/uk2.134.7_budget_inputs.result.json +16 -0
  23. policyengine-6.7.4/tests/fixtures/replay_exceptions/uk2.134.7_qualification_receipt.json +334 -0
  24. policyengine-6.7.4/tests/fixtures/uk_contract/README.md +15 -0
  25. policyengine-6.7.4/tests/fixtures/uk_contract/evaluate_case_rows.json +1 -0
  26. 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
  27. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualification_contracts.py +1 -1
  28. policyengine-6.7.4/tests/test_replay_exception_coherence_round3.py +141 -0
  29. policyengine-6.7.4/tests/test_replay_exception_finalize_review.py +319 -0
  30. policyengine-6.7.4/tests/test_replay_exception_hardening_round3.py +247 -0
  31. policyengine-6.7.4/tests/test_replay_exception_lineage.py +86 -0
  32. policyengine-6.7.4/tests/test_replay_exception_lineage_round3.py +501 -0
  33. policyengine-6.7.4/tests/test_replay_exception_policy_review.py +149 -0
  34. policyengine-6.7.4/tests/test_replay_exception_probe.py +161 -0
  35. policyengine-6.7.4/tests/test_replay_exception_probe_round3.py +214 -0
  36. policyengine-6.7.4/tests/test_replay_exceptions.py +1123 -0
  37. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_budget_reform_contract.py +88 -4
  38. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_candidate_gates.py +352 -55
  39. policyengine-6.7.4/tests/test_uk_qualification_replay_inputs.py +619 -0
  40. {policyengine-6.7.2 → policyengine-6.7.4}/tests/uk_contract_row_scenarios.py +5 -2
  41. {policyengine-6.7.2 → policyengine-6.7.4}/uv.lock +1 -1
  42. policyengine-6.7.2/src/policyengine/data/qualification/replay_policy.md +0 -89
  43. policyengine-6.7.2/tests/fixtures/uk_contract/README.md +0 -15
  44. policyengine-6.7.2/tests/fixtures/uk_contract/evaluate_case_rows.json +0 -1
  45. {policyengine-6.7.2 → policyengine-6.7.4}/.claude/policyengine-guide.md +0 -0
  46. {policyengine-6.7.2 → policyengine-6.7.4}/.claude/quick-reference.md +0 -0
  47. {policyengine-6.7.2 → policyengine-6.7.4}/.github/CONTRIBUTING.md +0 -0
  48. {policyengine-6.7.2 → policyengine-6.7.4}/.github/bump_version.py +0 -0
  49. {policyengine-6.7.2 → policyengine-6.7.4}/.github/capture-version.sh +0 -0
  50. {policyengine-6.7.2 → policyengine-6.7.4}/.github/changelog_template.md +0 -0
  51. {policyengine-6.7.2 → policyengine-6.7.4}/.github/check-changelog.sh +0 -0
  52. {policyengine-6.7.2 → policyengine-6.7.4}/.github/copilot-instructions.md +0 -0
  53. {policyengine-6.7.2 → policyengine-6.7.4}/.github/dispatch-policyengine-release.sh +0 -0
  54. {policyengine-6.7.2 → policyengine-6.7.4}/.github/fetch_version.py +0 -0
  55. {policyengine-6.7.2 → policyengine-6.7.4}/.github/get-changelog-diff.sh +0 -0
  56. {policyengine-6.7.2 → policyengine-6.7.4}/.github/has-functional-changes.sh +0 -0
  57. {policyengine-6.7.2 → policyengine-6.7.4}/.github/is-version-number-acceptable.sh +0 -0
  58. {policyengine-6.7.2 → policyengine-6.7.4}/.github/publish-git-tag.sh +0 -0
  59. {policyengine-6.7.2 → policyengine-6.7.4}/.github/qualification-ledger.sh +0 -0
  60. {policyengine-6.7.2 → policyengine-6.7.4}/.github/wait-for-pypi.sh +0 -0
  61. {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/certify-uk-release.yaml +0 -0
  62. {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/draft-pdf.yml +0 -0
  63. {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/pr_code_changes.yaml +0 -0
  64. {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/pr_docs_changes.yaml +0 -0
  65. {policyengine-6.7.2 → policyengine-6.7.4}/.github/workflows/push.yaml +0 -0
  66. {policyengine-6.7.2 → policyengine-6.7.4}/.gitignore +0 -0
  67. {policyengine-6.7.2 → policyengine-6.7.4}/.python-version +0 -0
  68. {policyengine-6.7.2 → policyengine-6.7.4}/AGENTS.md +0 -0
  69. {policyengine-6.7.2 → policyengine-6.7.4}/CITATION.cff +0 -0
  70. {policyengine-6.7.2 → policyengine-6.7.4}/CLAUDE.md +0 -0
  71. {policyengine-6.7.2 → policyengine-6.7.4}/CODE_OF_CONDUCT.md +0 -0
  72. {policyengine-6.7.2 → policyengine-6.7.4}/CONTRIBUTING.md +0 -0
  73. {policyengine-6.7.2 → policyengine-6.7.4}/LICENSE +0 -0
  74. {policyengine-6.7.2 → policyengine-6.7.4}/Makefile +0 -0
  75. {policyengine-6.7.2 → policyengine-6.7.4}/README.md +0 -0
  76. {policyengine-6.7.2 → policyengine-6.7.4}/architecture.png +0 -0
  77. {policyengine-6.7.2 → policyengine-6.7.4}/architecture.svg +0 -0
  78. {policyengine-6.7.2 → policyengine-6.7.4}/changelog.d/.gitkeep +0 -0
  79. {policyengine-6.7.2 → policyengine-6.7.4}/docs/.gitignore +0 -0
  80. {policyengine-6.7.2 → policyengine-6.7.4}/docs/_generator/README.md +0 -0
  81. {policyengine-6.7.2 → policyengine-6.7.4}/docs/_generator/build_reference.py +0 -0
  82. {policyengine-6.7.2 → policyengine-6.7.4}/docs/_quarto.yml +0 -0
  83. {policyengine-6.7.2 → policyengine-6.7.4}/docs/bundles.md +0 -0
  84. {policyengine-6.7.2 → policyengine-6.7.4}/docs/countries.md +0 -0
  85. {policyengine-6.7.2 → policyengine-6.7.4}/docs/data-publishing-design.md +0 -0
  86. {policyengine-6.7.2 → policyengine-6.7.4}/docs/decile-impact-spec.md +0 -0
  87. {policyengine-6.7.2 → policyengine-6.7.4}/docs/dev.md +0 -0
  88. {policyengine-6.7.2 → policyengine-6.7.4}/docs/disclosure.md +0 -0
  89. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/acs-local-wic-replacement.md +0 -0
  90. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
  91. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/canonical-spm-development.md +0 -0
  92. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/uk-qualification.md +0 -0
  93. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/runbooks/us-legacy-spm-sources.md +0 -0
  94. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/README.md +0 -0
  95. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/data-certification.md +0 -0
  96. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/github-prs.md +0 -0
  97. {policyengine-6.7.2 → policyengine-6.7.4}/docs/engineering/skills/repository-guidance.md +0 -0
  98. {policyengine-6.7.2 → policyengine-6.7.4}/docs/examples.md +0 -0
  99. {policyengine-6.7.2 → policyengine-6.7.4}/docs/getting-started.md +0 -0
  100. {policyengine-6.7.2 → policyengine-6.7.4}/docs/households.md +0 -0
  101. {policyengine-6.7.2 → policyengine-6.7.4}/docs/impact-analysis.md +0 -0
  102. {policyengine-6.7.2 → policyengine-6.7.4}/docs/index.md +0 -0
  103. {policyengine-6.7.2 → policyengine-6.7.4}/docs/methodology/index.md +0 -0
  104. {policyengine-6.7.2 → policyengine-6.7.4}/docs/methodology/model-architecture.md +0 -0
  105. {policyengine-6.7.2 → policyengine-6.7.4}/docs/methodology/us-health-costs.md +0 -0
  106. {policyengine-6.7.2 → policyengine-6.7.4}/docs/microsim.md +0 -0
  107. {policyengine-6.7.2 → policyengine-6.7.4}/docs/outputs.md +0 -0
  108. {policyengine-6.7.2 → policyengine-6.7.4}/docs/programs/index.md +0 -0
  109. {policyengine-6.7.2 → policyengine-6.7.4}/docs/programs/us-chip.md +0 -0
  110. {policyengine-6.7.2 → policyengine-6.7.4}/docs/receipts.md +0 -0
  111. {policyengine-6.7.2 → policyengine-6.7.4}/docs/reference/index.md +0 -0
  112. {policyengine-6.7.2 → policyengine-6.7.4}/docs/reforms.md +0 -0
  113. {policyengine-6.7.2 → policyengine-6.7.4}/docs/regions.md +0 -0
  114. {policyengine-6.7.2 → policyengine-6.7.4}/docs/release-bundles.md +0 -0
  115. {policyengine-6.7.2 → policyengine-6.7.4}/docs/run-records.md +0 -0
  116. {policyengine-6.7.2 → policyengine-6.7.4}/docs/trace-case-study.md +0 -0
  117. {policyengine-6.7.2 → policyengine-6.7.4}/docs/visualisation.md +0 -0
  118. {policyengine-6.7.2 → policyengine-6.7.4}/examples/belgium_axiom_pilot.py +0 -0
  119. {policyengine-6.7.2 → policyengine-6.7.4}/examples/employment_income_variation_uk.py +0 -0
  120. {policyengine-6.7.2 → policyengine-6.7.4}/examples/employment_income_variation_us.py +0 -0
  121. {policyengine-6.7.2 → policyengine-6.7.4}/examples/household_impact_example.py +0 -0
  122. {policyengine-6.7.2 → policyengine-6.7.4}/examples/income_bands_uk.py +0 -0
  123. {policyengine-6.7.2 → policyengine-6.7.4}/examples/income_distribution_us.py +0 -0
  124. {policyengine-6.7.2 → policyengine-6.7.4}/examples/paper_repro_uk.py +0 -0
  125. {policyengine-6.7.2 → policyengine-6.7.4}/examples/policy_change_uk.py +0 -0
  126. {policyengine-6.7.2 → policyengine-6.7.4}/examples/speedtest_us_simulation.py +0 -0
  127. {policyengine-6.7.2 → policyengine-6.7.4}/examples/uk_geography_disclosure.py +0 -0
  128. {policyengine-6.7.2 → policyengine-6.7.4}/examples/us_budgetary_impact.py +0 -0
  129. {policyengine-6.7.2 → policyengine-6.7.4}/paper-preview.html +0 -0
  130. {policyengine-6.7.2 → policyengine-6.7.4}/paper.bib +0 -0
  131. {policyengine-6.7.2 → policyengine-6.7.4}/paper.md +0 -0
  132. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/bundle.py +0 -0
  133. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/certify_data_release.py +0 -0
  134. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_data_staleness.py +0 -0
  135. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_native_spm_loading.py +0 -0
  136. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/check_release_credentials.py +0 -0
  137. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/export_bundle_release_assets.py +0 -0
  138. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/generate_bundle_artifacts.py +0 -0
  139. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/generate_receipt_schemas.py +0 -0
  140. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/generate_trace_tros.py +0 -0
  141. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/prepare_package_bundle_update.py +0 -0
  142. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/release_consumers.py +0 -0
  143. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/release_lock.py +0 -0
  144. {policyengine-6.7.2 → policyengine-6.7.4}/scripts/spm_bundle.py +0 -0
  145. {policyengine-6.7.2 → policyengine-6.7.4}/setup.cfg +0 -0
  146. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/__init__.py +0 -0
  147. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/bundle.py +0 -0
  148. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/cli.py +0 -0
  149. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/__init__.py +0 -0
  150. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/cache.py +0 -0
  151. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/dataset.py +0 -0
  152. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/dynamic.py +0 -0
  153. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/output.py +0 -0
  154. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/parameter.py +0 -0
  155. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/parameter_node.py +0 -0
  156. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/parameter_value.py +0 -0
  157. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/policy.py +0 -0
  158. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/region.py +0 -0
  159. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/run_record.py +0 -0
  160. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/scoping_strategy.py +0 -0
  161. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/simulation.py +0 -0
  162. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/spm.py +0 -0
  163. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/tax_benefit_model.py +0 -0
  164. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  165. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/core/variable.py +0 -0
  166. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/__init__.py +0 -0
  167. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/uk/__init__.py +0 -0
  168. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/uk/regions.py +0 -0
  169. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/__init__.py +0 -0
  170. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/__init__.py +0 -0
  171. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/districts.py +0 -0
  172. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/places.py +0 -0
  173. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/data/states.py +0 -0
  174. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/countries/us/regions.py +0 -0
  175. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/__init__.py +0 -0
  176. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/qualification/uk.json +0 -0
  177. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/qualification/uk_budget_critical_inputs.json +0 -0
  178. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/qualification/uk_review_bounds.json +0 -0
  179. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/execution_receipt.v1.schema.json +0 -0
  180. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  181. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md +0 -0
  182. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/qualification_request.v1.json +0 -0
  183. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json +0 -0
  184. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_status.v1.json +0 -0
  185. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/data/uk_geography_assets.py +0 -0
  186. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/derivations/__init__.py +0 -0
  187. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/derivations/narrate.py +0 -0
  188. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/derivations/trace.py +0 -0
  189. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/__init__.py +0 -0
  190. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/__main__.py +0 -0
  191. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/areas.py +0 -0
  192. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/estimate.py +0 -0
  193. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/noise.py +0 -0
  194. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/release.py +0 -0
  195. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/schema.py +0 -0
  196. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/support.py +0 -0
  197. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/disclosure/validate.py +0 -0
  198. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/graph/__init__.py +0 -0
  199. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/graph/extractor.py +0 -0
  200. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/graph/graph.py +0 -0
  201. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/__init__.py +0 -0
  202. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/aggregate.py +0 -0
  203. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/change_aggregate.py +0 -0
  204. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/cliff_impact.py +0 -0
  205. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  206. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/constituency_impact.py +0 -0
  207. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/decile_analysis.py +0 -0
  208. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/decile_grouping.py +0 -0
  209. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/decile_impact.py +0 -0
  210. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/extra_variables.py +0 -0
  211. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/inequality.py +0 -0
  212. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  213. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/labor_supply_response.py +0 -0
  214. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/local_authority_impact.py +0 -0
  215. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/poverty.py +0 -0
  216. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/program_statistics.py +0 -0
  217. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  218. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/uk_geography_disclosure.py +0 -0
  219. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/outputs/uk_geography_impact.py +0 -0
  220. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/__init__.py +0 -0
  221. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/bundle_validation.py +0 -0
  222. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/bytecode.py +0 -0
  223. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/canonical.py +0 -0
  224. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/certification.py +0 -0
  225. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/dataset_materialization.py +0 -0
  226. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/loaded.py +0 -0
  227. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/manifest.py +0 -0
  228. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/pyproject_pins.py +0 -0
  229. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/qualification_ledger.py +0 -0
  230. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/receipt.py +0 -0
  231. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/spm_configuration.py +0 -0
  232. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/trace.py +0 -0
  233. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/verify.py +0 -0
  234. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/wheels.py +0 -0
  235. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/provenance/zenodo.py +0 -0
  236. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/__init__.py +0 -0
  237. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/schema.py +0 -0
  238. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/trace_tro.py +0 -0
  239. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/results/tracking.py +0 -0
  240. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
  241. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
  242. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/be/model.py +0 -0
  243. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  244. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
  245. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  246. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  247. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
  248. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  249. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  250. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  251. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  252. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/budget_reform_population.py +0 -0
  253. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/capital_gains_responses.py +0 -0
  254. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
  255. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  256. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
  257. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  258. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  259. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  260. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  261. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_inputs.py +0 -0
  262. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/__init__.py +0 -0
  263. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/declarations.py +0 -0
  264. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/independence.py +0 -0
  265. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/model_adapter.py +0 -0
  266. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/record.py +0 -0
  267. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/registry.py +0 -0
  268. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/runs.py +0 -0
  269. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/legacy_spm/universe.py +0 -0
  270. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  271. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/tax_benefit_models/us/spm.py +0 -0
  272. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/__init__.py +0 -0
  273. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/dates.py +0 -0
  274. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/design.py +0 -0
  275. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/entity_utils.py +0 -0
  276. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/errors.py +0 -0
  277. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/hashing.py +0 -0
  278. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/household_validation.py +0 -0
  279. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/parameter_labels.py +0 -0
  280. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/parametric_reforms.py +0 -0
  281. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine/utils/plotting.py +0 -0
  282. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/dependency_links.txt +0 -0
  283. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/entry_points.txt +0 -0
  284. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/requires.txt +0 -0
  285. {policyengine-6.7.2 → policyengine-6.7.4}/src/policyengine.egg-info/top_level.txt +0 -0
  286. {policyengine-6.7.2 → policyengine-6.7.4}/tests/__init__.py +0 -0
  287. {policyengine-6.7.2 → policyengine-6.7.4}/tests/conftest.py +0 -0
  288. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/__init__.py +0 -0
  289. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/filtering_fixtures.py +0 -0
  290. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  291. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
  292. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  293. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  294. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  295. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
  296. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
  297. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
  298. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
  299. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
  300. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  301. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  302. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  303. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/region_fixtures.py +0 -0
  304. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/README.md +0 -0
  305. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/country-models.lock.toml +0 -0
  306. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/manifest.json +0 -0
  307. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/us-release_manifest.json +0 -0
  308. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/release_tros/us.trace.tro.jsonld +0 -0
  309. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/spm_development.py +0 -0
  310. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_contract/pinned_uk_2.125.1_defects.json +0 -0
  311. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_contract/population_pass_max_examples_0.json +0 -0
  312. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_metrics/README.md +0 -0
  313. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_metrics/budget_metrics_report.json +0 -0
  314. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_metrics/standard_reforms.yaml +0 -0
  315. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/DIGESTS.json +0 -0
  316. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/README.md +0 -0
  317. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/qualification_request_golden.jcs +0 -0
  318. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/qualification_request_golden.json +0 -0
  319. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REPLAY_RECEIPT.json +0 -0
  320. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REQUEST.json +0 -0
  321. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json +0 -0
  322. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json +0 -0
  323. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json +0 -0
  324. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/replay_receipt_golden.jcs +0 -0
  325. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/uk_replay/replay_receipt_golden.json +0 -0
  326. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/us_reform_fixtures.py +0 -0
  327. {policyengine-6.7.2 → policyengine-6.7.4}/tests/fixtures/variable_label_fixtures.py +0 -0
  328. {policyengine-6.7.2 → policyengine-6.7.4}/tests/qualification_fixtures.py +0 -0
  329. {policyengine-6.7.2 → policyengine-6.7.4}/tests/receipt_modifiers.py +0 -0
  330. {policyengine-6.7.2 → policyengine-6.7.4}/tests/receipt_unbindable_modifiers.py +0 -0
  331. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_aggregate.py +0 -0
  332. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_be_axiom_pilot.py +0 -0
  333. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_budgetary_impact.py +0 -0
  334. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_bump_version.py +0 -0
  335. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_bundle.py +0 -0
  336. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_bundle_metadata.py +0 -0
  337. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_cache.py +0 -0
  338. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_canonical_json.py +0 -0
  339. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_certify_data_release.py +0 -0
  340. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_change_aggregate.py +0 -0
  341. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_cliff_impact.py +0 -0
  342. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_cliff_impact_analysis.py +0 -0
  343. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_congressional_district_impact.py +0 -0
  344. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_constituency_impact.py +0 -0
  345. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_materialization.py +0 -0
  346. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_persistence.py +0 -0
  347. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_runtime.py +0 -0
  348. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dataset_source.py +0 -0
  349. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_decile_grouping.py +0 -0
  350. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_derivations.py +0 -0
  351. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_dict_reforms_on_simulation.py +0 -0
  352. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_areas.py +0 -0
  353. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_estimate.py +0 -0
  354. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_noise.py +0 -0
  355. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_release.py +0 -0
  356. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_schema.py +0 -0
  357. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_support.py +0 -0
  358. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_disclosure_validate.py +0 -0
  359. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_entity_mapping.py +0 -0
  360. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_entity_utils.py +0 -0
  361. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_entity_utils_characterization.py +0 -0
  362. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_errors.py +0 -0
  363. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_execution_receipt.py +0 -0
  364. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_extra_variables.py +0 -0
  365. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_filtering.py +0 -0
  366. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_generate_trace_tros.py +0 -0
  367. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_graph/__init__.py +0 -0
  368. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_graph/conftest.py +0 -0
  369. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_graph/test_extractor.py +0 -0
  370. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_household_calculator_snapshot.py +0 -0
  371. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_household_impact.py +0 -0
  372. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_inequality.py +0 -0
  373. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_intra_decile_impact.py +0 -0
  374. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_labor_supply_response.py +0 -0
  375. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_local_authority_impact.py +0 -0
  376. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_manifest_version_mismatch.py +0 -0
  377. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_models.py +0 -0
  378. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_pandas3_compatibility.py +0 -0
  379. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parameter_labels.py +0 -0
  380. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parameter_nodes.py +0 -0
  381. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parameter_values.py +0 -0
  382. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_parametric_reforms.py +0 -0
  383. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_poverty.py +0 -0
  384. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_poverty_by_demographics.py +0 -0
  385. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_poverty_run.py +0 -0
  386. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_preservation_mirror.py +0 -0
  387. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_program_statistics.py +0 -0
  388. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_pyproject_pins.py +0 -0
  389. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualification_ledger_concurrency.py +0 -0
  390. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualification_ledger_script.py +0 -0
  391. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_qualified_pair_certification.py +0 -0
  392. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_region.py +0 -0
  393. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_region_group_strategy.py +0 -0
  394. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_credentials.py +0 -0
  395. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_lock.py +0 -0
  396. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_manifests.py +0 -0
  397. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_release_tro_generation.py +0 -0
  398. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_results.py +0 -0
  399. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_run_record.py +0 -0
  400. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_scoping_strategy.py +0 -0
  401. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_small_follow_ups.py +0 -0
  402. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_bundle_bootstrap.py +0 -0
  403. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_bundle_tooling.py +0 -0
  404. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_decile.py +0 -0
  405. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_development_authentication.py +0 -0
  406. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_household.py +0 -0
  407. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_model.py +0 -0
  408. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_selection.py +0 -0
  409. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_spm_selection_schema.py +0 -0
  410. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_trace_tro.py +0 -0
  411. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_trace_tro_verify.py +0 -0
  412. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_analysis.py +0 -0
  413. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_candidate_metric_baselines.py +0 -0
  414. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_cgt_response_records.py +0 -0
  415. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_cgt_responses.py +0 -0
  416. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_dated_reforms.py +0 -0
  417. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_geography_assets.py +0 -0
  418. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_geography_disclosure.py +0 -0
  419. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_program_statistics.py +0 -0
  420. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_qualification_pipeline.py +0 -0
  421. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_qualification_workflow.py +0 -0
  422. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_regions.py +0 -0
  423. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_uk_year_file_data_year.py +0 -0
  424. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_inputs.py +0 -0
  425. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_inputs_integration.py +0 -0
  426. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_spm.py +0 -0
  427. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_spm_integration.py +0 -0
  428. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_legacy_spm_model_contract.py +0 -0
  429. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_long_term_datasets.py +0 -0
  430. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_microsim_structural_reforms.py +0 -0
  431. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_native_alignment.py +0 -0
  432. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_native_hdf_weights.py +0 -0
  433. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_program_statistics.py +0 -0
  434. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_reform_application.py +0 -0
  435. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_regions.py +0 -0
  436. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_us_year_file_stamp.py +0 -0
  437. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_variable_labels.py +0 -0
  438. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_variable_metadata.py +0 -0
  439. {policyengine-6.7.2 → policyengine-6.7.4}/tests/test_wheels.py +0 -0
  440. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 6.7.2
3
+ Version: 6.7.4
4
4
  Summary: A package to conduct policy analysis using PolicyEngine tax-benefit models.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "6.7.2"
7
+ version = "6.7.4"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -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, fetch=fetch, state_ref=settings["state_ref"]
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",
2
+ "bundle_version": "6.7.4",
3
3
  "citation": {
4
4
  "publisher": "PolicyEngine",
5
- "title": "PolicyEngine bundle 6.7.2",
5
+ "title": "PolicyEngine bundle 6.7.4",
6
6
  "type": "software-bundle",
7
- "version": "6.7.2"
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.2",
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.2",
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.2",
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.2",
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.2",
298
+ "install_requirement": "policyengine==6.7.4",
299
299
  "name": "policyengine",
300
300
  "role": "bundle_carrier",
301
- "version": "6.7.2"
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.2",
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.2 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
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.2"
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.2.",
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": "6680bb82cd34486f2fe8c9fad7455b34fdecbd2586487b65c2b4c2cec2e6f20b"
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": "de752e7eba643dbd363f783783239fdcde3b439858c06ced739be5cb78a8734f"
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.2 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
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.2"
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.2.",
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": "6680bb82cd34486f2fe8c9fad7455b34fdecbd2586487b65c2b4c2cec2e6f20b"
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": "fdda3195c7d0d9de4123c8087ebaf2d09b20908b0068f46fa8f3bf686edf90f7"
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
+ }