policyengine 4.16.0__tar.gz → 4.16.2__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 (266) hide show
  1. {policyengine-4.16.0 → policyengine-4.16.2}/.github/copilot-instructions.md +2 -2
  2. {policyengine-4.16.0 → policyengine-4.16.2}/AGENTS.md +2 -2
  3. {policyengine-4.16.0 → policyengine-4.16.2}/CHANGELOG.md +14 -0
  4. {policyengine-4.16.0 → policyengine-4.16.2}/CLAUDE.md +2 -2
  5. {policyengine-4.16.0/src/policyengine.egg-info → policyengine-4.16.2}/PKG-INFO +5 -5
  6. {policyengine-4.16.0 → policyengine-4.16.2}/docs/engineering/skills/README.md +2 -2
  7. policyengine-4.16.2/docs/engineering/skills/data-certification.md +83 -0
  8. {policyengine-4.16.0 → policyengine-4.16.2}/docs/release-bundles.md +28 -12
  9. {policyengine-4.16.0 → policyengine-4.16.2}/pyproject.toml +5 -5
  10. policyengine-4.16.2/scripts/certify_data_release.py +111 -0
  11. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/release_manifests/uk.json +2 -2
  12. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/release_manifests/uk.trace.tro.jsonld +7 -7
  13. policyengine-4.16.2/src/policyengine/data/release_manifests/us.json +3477 -0
  14. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/release_manifests/us.trace.tro.jsonld +24 -25
  15. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/__init__.py +6 -6
  16. policyengine-4.16.2/src/policyengine/provenance/certification.py +385 -0
  17. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/manifest.py +25 -2
  18. policyengine-4.16.2/src/policyengine/provenance/pyproject_pins.py +122 -0
  19. {policyengine-4.16.0 → policyengine-4.16.2/src/policyengine.egg-info}/PKG-INFO +5 -5
  20. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/SOURCES.txt +6 -14
  21. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/requires.txt +4 -4
  22. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +3 -3
  23. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +1 -1
  24. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +3 -3
  25. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +3 -3
  26. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +3 -3
  27. policyengine-4.16.2/tests/test_certify_data_release.py +275 -0
  28. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_models.py +5 -4
  29. policyengine-4.16.2/tests/test_pyproject_pins.py +105 -0
  30. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_release_manifests.py +26 -34
  31. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_trace_tro.py +12 -12
  32. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_regions.py +8 -4
  33. {policyengine-4.16.0 → policyengine-4.16.2}/uv.lock +11 -11
  34. policyengine-4.16.0/docs/engineering/skills/release-bundles.md +0 -122
  35. policyengine-4.16.0/scripts/import_policyengine_bundle.py +0 -13
  36. policyengine-4.16.0/src/policyengine/data/release_manifests/us.json +0 -505
  37. policyengine-4.16.0/src/policyengine/provenance/bundle_import/__init__.py +0 -15
  38. policyengine-4.16.0/src/policyengine/provenance/bundle_import/api.py +0 -141
  39. policyengine-4.16.0/src/policyengine/provenance/bundle_import/archive.py +0 -109
  40. policyengine-4.16.0/src/policyengine/provenance/bundle_import/cli.py +0 -84
  41. policyengine-4.16.0/src/policyengine/provenance/bundle_import/constants.py +0 -11
  42. policyengine-4.16.0/src/policyengine/provenance/bundle_import/country_manifest.py +0 -218
  43. policyengine-4.16.0/src/policyengine/provenance/bundle_import/digest.py +0 -73
  44. policyengine-4.16.0/src/policyengine/provenance/bundle_import/hf.py +0 -63
  45. policyengine-4.16.0/src/policyengine/provenance/bundle_import/io.py +0 -36
  46. policyengine-4.16.0/src/policyengine/provenance/bundle_import/pyproject.py +0 -113
  47. policyengine-4.16.0/src/policyengine/provenance/bundle_import/types.py +0 -31
  48. policyengine-4.16.0/tests/test_import_policyengine_bundle.py +0 -432
  49. {policyengine-4.16.0 → policyengine-4.16.2}/.claude/policyengine-guide.md +0 -0
  50. {policyengine-4.16.0 → policyengine-4.16.2}/.claude/quick-reference.md +0 -0
  51. {policyengine-4.16.0 → policyengine-4.16.2}/.github/CONTRIBUTING.md +0 -0
  52. {policyengine-4.16.0 → policyengine-4.16.2}/.github/bump_version.py +0 -0
  53. {policyengine-4.16.0 → policyengine-4.16.2}/.github/changelog_template.md +0 -0
  54. {policyengine-4.16.0 → policyengine-4.16.2}/.github/check-changelog.sh +0 -0
  55. {policyengine-4.16.0 → policyengine-4.16.2}/.github/fetch_version.py +0 -0
  56. {policyengine-4.16.0 → policyengine-4.16.2}/.github/get-changelog-diff.sh +0 -0
  57. {policyengine-4.16.0 → policyengine-4.16.2}/.github/has-functional-changes.sh +0 -0
  58. {policyengine-4.16.0 → policyengine-4.16.2}/.github/is-version-number-acceptable.sh +0 -0
  59. {policyengine-4.16.0 → policyengine-4.16.2}/.github/publish-git-tag.sh +0 -0
  60. {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/draft-pdf.yml +0 -0
  61. {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/pr_code_changes.yaml +0 -0
  62. {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/pr_docs_changes.yaml +0 -0
  63. {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/push.yaml +0 -0
  64. {policyengine-4.16.0 → policyengine-4.16.2}/.gitignore +0 -0
  65. {policyengine-4.16.0 → policyengine-4.16.2}/.python-version +0 -0
  66. {policyengine-4.16.0 → policyengine-4.16.2}/CITATION.cff +0 -0
  67. {policyengine-4.16.0 → policyengine-4.16.2}/CODE_OF_CONDUCT.md +0 -0
  68. {policyengine-4.16.0 → policyengine-4.16.2}/LICENSE +0 -0
  69. {policyengine-4.16.0 → policyengine-4.16.2}/Makefile +0 -0
  70. {policyengine-4.16.0 → policyengine-4.16.2}/README.md +0 -0
  71. {policyengine-4.16.0 → policyengine-4.16.2}/architecture.png +0 -0
  72. {policyengine-4.16.0 → policyengine-4.16.2}/architecture.svg +0 -0
  73. {policyengine-4.16.0 → policyengine-4.16.2}/changelog.d/.gitkeep +0 -0
  74. {policyengine-4.16.0 → policyengine-4.16.2}/docs/.gitignore +0 -0
  75. {policyengine-4.16.0 → policyengine-4.16.2}/docs/_generator/README.md +0 -0
  76. {policyengine-4.16.0 → policyengine-4.16.2}/docs/_generator/build_reference.py +0 -0
  77. {policyengine-4.16.0 → policyengine-4.16.2}/docs/_quarto.yml +0 -0
  78. {policyengine-4.16.0 → policyengine-4.16.2}/docs/countries.md +0 -0
  79. {policyengine-4.16.0 → policyengine-4.16.2}/docs/data-publishing-design.md +0 -0
  80. {policyengine-4.16.0 → policyengine-4.16.2}/docs/dev.md +0 -0
  81. {policyengine-4.16.0 → policyengine-4.16.2}/docs/engineering/skills/github-prs.md +0 -0
  82. {policyengine-4.16.0 → policyengine-4.16.2}/docs/engineering/skills/repository-guidance.md +0 -0
  83. {policyengine-4.16.0 → policyengine-4.16.2}/docs/examples.md +0 -0
  84. {policyengine-4.16.0 → policyengine-4.16.2}/docs/getting-started.md +0 -0
  85. {policyengine-4.16.0 → policyengine-4.16.2}/docs/households.md +0 -0
  86. {policyengine-4.16.0 → policyengine-4.16.2}/docs/impact-analysis.md +0 -0
  87. {policyengine-4.16.0 → policyengine-4.16.2}/docs/index.md +0 -0
  88. {policyengine-4.16.0 → policyengine-4.16.2}/docs/methodology/index.md +0 -0
  89. {policyengine-4.16.0 → policyengine-4.16.2}/docs/methodology/model-architecture.md +0 -0
  90. {policyengine-4.16.0 → policyengine-4.16.2}/docs/methodology/us-health-costs.md +0 -0
  91. {policyengine-4.16.0 → policyengine-4.16.2}/docs/microsim.md +0 -0
  92. {policyengine-4.16.0 → policyengine-4.16.2}/docs/outputs.md +0 -0
  93. {policyengine-4.16.0 → policyengine-4.16.2}/docs/programs/index.md +0 -0
  94. {policyengine-4.16.0 → policyengine-4.16.2}/docs/programs/us-chip.md +0 -0
  95. {policyengine-4.16.0 → policyengine-4.16.2}/docs/reference/index.md +0 -0
  96. {policyengine-4.16.0 → policyengine-4.16.2}/docs/reforms.md +0 -0
  97. {policyengine-4.16.0 → policyengine-4.16.2}/docs/regions.md +0 -0
  98. {policyengine-4.16.0 → policyengine-4.16.2}/docs/trace-case-study.md +0 -0
  99. {policyengine-4.16.0 → policyengine-4.16.2}/docs/visualisation.md +0 -0
  100. {policyengine-4.16.0 → policyengine-4.16.2}/examples/employment_income_variation_uk.py +0 -0
  101. {policyengine-4.16.0 → policyengine-4.16.2}/examples/employment_income_variation_us.py +0 -0
  102. {policyengine-4.16.0 → policyengine-4.16.2}/examples/household_impact_example.py +0 -0
  103. {policyengine-4.16.0 → policyengine-4.16.2}/examples/income_bands_uk.py +0 -0
  104. {policyengine-4.16.0 → policyengine-4.16.2}/examples/income_distribution_us.py +0 -0
  105. {policyengine-4.16.0 → policyengine-4.16.2}/examples/paper_repro_uk.py +0 -0
  106. {policyengine-4.16.0 → policyengine-4.16.2}/examples/policy_change_uk.py +0 -0
  107. {policyengine-4.16.0 → policyengine-4.16.2}/examples/speedtest_us_simulation.py +0 -0
  108. {policyengine-4.16.0 → policyengine-4.16.2}/examples/us_budgetary_impact.py +0 -0
  109. {policyengine-4.16.0 → policyengine-4.16.2}/paper-preview.html +0 -0
  110. {policyengine-4.16.0 → policyengine-4.16.2}/paper.bib +0 -0
  111. {policyengine-4.16.0 → policyengine-4.16.2}/paper.md +0 -0
  112. {policyengine-4.16.0 → policyengine-4.16.2}/scripts/check_data_staleness.py +0 -0
  113. {policyengine-4.16.0 → policyengine-4.16.2}/scripts/generate_trace_tros.py +0 -0
  114. {policyengine-4.16.0 → policyengine-4.16.2}/scripts/refresh_release_bundle.py +0 -0
  115. {policyengine-4.16.0 → policyengine-4.16.2}/setup.cfg +0 -0
  116. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/__init__.py +0 -0
  117. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/cli.py +0 -0
  118. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/__init__.py +0 -0
  119. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/cache.py +0 -0
  120. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/dataset.py +0 -0
  121. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/dynamic.py +0 -0
  122. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/output.py +0 -0
  123. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/parameter.py +0 -0
  124. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/parameter_node.py +0 -0
  125. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/parameter_value.py +0 -0
  126. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/policy.py +0 -0
  127. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/region.py +0 -0
  128. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/scoping_strategy.py +0 -0
  129. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/simulation.py +0 -0
  130. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/tax_benefit_model.py +0 -0
  131. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  132. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/variable.py +0 -0
  133. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/__init__.py +0 -0
  134. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/uk/__init__.py +0 -0
  135. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/uk/regions.py +0 -0
  136. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/__init__.py +0 -0
  137. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/__init__.py +0 -0
  138. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/districts.py +0 -0
  139. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/places.py +0 -0
  140. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/states.py +0 -0
  141. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/regions.py +0 -0
  142. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/__init__.py +0 -0
  143. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  144. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/uk_geography_assets.py +0 -0
  145. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/derivations/__init__.py +0 -0
  146. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/derivations/narrate.py +0 -0
  147. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/derivations/trace.py +0 -0
  148. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/graph/__init__.py +0 -0
  149. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/graph/extractor.py +0 -0
  150. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/graph/graph.py +0 -0
  151. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/__init__.py +0 -0
  152. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/aggregate.py +0 -0
  153. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/change_aggregate.py +0 -0
  154. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/cliff_impact.py +0 -0
  155. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  156. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/constituency_impact.py +0 -0
  157. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/decile_impact.py +0 -0
  158. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/extra_variables.py +0 -0
  159. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/inequality.py +0 -0
  160. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  161. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/labor_supply_response.py +0 -0
  162. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/local_authority_impact.py +0 -0
  163. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/poverty.py +0 -0
  164. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/program_statistics.py +0 -0
  165. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  166. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/bundle.py +0 -0
  167. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/dataset_sources.py +0 -0
  168. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/trace.py +0 -0
  169. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/__init__.py +0 -0
  170. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/schema.py +0 -0
  171. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/trace_tro.py +0 -0
  172. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/tracking.py +0 -0
  173. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  174. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  175. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  176. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
  177. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  178. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  179. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  180. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  181. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
  182. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  183. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
  184. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  185. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  186. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  187. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  188. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  189. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/__init__.py +0 -0
  190. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/data/__init__.py +0 -0
  191. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/data/caching_google_storage_client.py +0 -0
  192. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/data/version_aware_storage_client.py +0 -0
  193. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/dates.py +0 -0
  194. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/design.py +0 -0
  195. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/entity_utils.py +0 -0
  196. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/errors.py +0 -0
  197. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/google_cloud_bucket.py +0 -0
  198. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/household_validation.py +0 -0
  199. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/parameter_labels.py +0 -0
  200. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/parametric_reforms.py +0 -0
  201. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/plotting.py +0 -0
  202. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/dependency_links.txt +0 -0
  203. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/entry_points.txt +0 -0
  204. {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/top_level.txt +0 -0
  205. {policyengine-4.16.0 → policyengine-4.16.2}/tests/__init__.py +0 -0
  206. {policyengine-4.16.0 → policyengine-4.16.2}/tests/conftest.py +0 -0
  207. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/__init__.py +0 -0
  208. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/filtering_fixtures.py +0 -0
  209. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  210. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
  211. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  212. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  213. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  214. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  215. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  216. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  217. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/region_fixtures.py +0 -0
  218. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/us_reform_fixtures.py +0 -0
  219. {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/variable_label_fixtures.py +0 -0
  220. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_aggregate.py +0 -0
  221. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_bump_version.py +0 -0
  222. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_bundle_refresh.py +0 -0
  223. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_cache.py +0 -0
  224. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_change_aggregate.py +0 -0
  225. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_cliff_impact.py +0 -0
  226. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_cliff_impact_analysis.py +0 -0
  227. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_congressional_district_impact.py +0 -0
  228. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_constituency_impact.py +0 -0
  229. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_dataset_sources.py +0 -0
  230. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_derivations.py +0 -0
  231. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_dict_reforms_on_simulation.py +0 -0
  232. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_entity_mapping.py +0 -0
  233. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_entity_utils.py +0 -0
  234. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_errors.py +0 -0
  235. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_extra_variables.py +0 -0
  236. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_filtering.py +0 -0
  237. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_graph/__init__.py +0 -0
  238. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_graph/conftest.py +0 -0
  239. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_graph/test_extractor.py +0 -0
  240. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_household_calculator_snapshot.py +0 -0
  241. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_household_impact.py +0 -0
  242. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_inequality.py +0 -0
  243. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_intra_decile_impact.py +0 -0
  244. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_labor_supply_response.py +0 -0
  245. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_local_authority_impact.py +0 -0
  246. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_manifest_version_mismatch.py +0 -0
  247. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_pandas3_compatibility.py +0 -0
  248. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_parameter_labels.py +0 -0
  249. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_parametric_reforms.py +0 -0
  250. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_poverty.py +0 -0
  251. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_poverty_by_demographics.py +0 -0
  252. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_poverty_run.py +0 -0
  253. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_preservation_mirror.py +0 -0
  254. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_region.py +0 -0
  255. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_results.py +0 -0
  256. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_scoping_strategy.py +0 -0
  257. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_small_follow_ups.py +0 -0
  258. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_analysis.py +0 -0
  259. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_geography_assets.py +0 -0
  260. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_program_statistics.py +0 -0
  261. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_regions.py +0 -0
  262. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_long_term_datasets.py +0 -0
  263. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_microsim_structural_reforms.py +0 -0
  264. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_program_statistics.py +0 -0
  265. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_reform_application.py +0 -0
  266. {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_variable_labels.py +0 -0
@@ -10,5 +10,5 @@ from branches in `PolicyEngine/policyengine.py`; never create fork PRs.
10
10
  For repository-wide API, testing, documentation, release, or package-boundary
11
11
  changes, read `docs/engineering/skills/repository-guidance.md`.
12
12
 
13
- For certified release-bundle updates or reviews, read
14
- `docs/engineering/skills/release-bundles.md`.
13
+ For data-release certification or reviews, read
14
+ `docs/engineering/skills/data-certification.md`.
@@ -15,8 +15,8 @@ Before making or reviewing repository-wide API, testing, documentation, release,
15
15
  or package-boundary changes, read
16
16
  `docs/engineering/skills/repository-guidance.md`.
17
17
 
18
- Before updating or reviewing certified release bundles, read
19
- `docs/engineering/skills/release-bundles.md`.
18
+ Before certifying or reviewing a country data release, read
19
+ `docs/engineering/skills/data-certification.md`.
20
20
 
21
21
  ## Repository Boundaries
22
22
 
@@ -1,3 +1,17 @@
1
+ ## [4.16.2] - 2026-06-12
2
+
3
+ ### Changed
4
+
5
+ - Certify country data releases directly from their Hugging Face release manifests (`scripts/certify_data_release.py`), replacing the policyengine-bundles import flow. The vendored US manifest is regenerated through the new path (byte-identical apart from the certification source strings), and the vendored bundle archive copies are no longer shipped.
6
+
7
+
8
+ ## [4.16.1] - 2026-06-12
9
+
10
+ ### Changed
11
+
12
+ - Import PolicyEngine bundle 4.16.0: the `populace-data` release manifest (`populace_us_2024` built from primary sources) replaces `policyengine-us-data` as the certified US data release, with policyengine-us 1.723.0 and policyengine-core 3.27.1. Dataset references and region datasets now honor per-artifact repo pins so inherited datasets keep resolving from their original repos.
13
+
14
+
1
15
  ## [4.16.0] - 2026-06-11
2
16
 
3
17
  ### Added
@@ -20,5 +20,5 @@ Before making or reviewing repository-wide API, testing, documentation, release,
20
20
  or package-boundary changes, read
21
21
  `docs/engineering/skills/repository-guidance.md`.
22
22
 
23
- Before updating or reviewing certified release bundles, read
24
- `docs/engineering/skills/release-bundles.md`.
23
+ Before certifying or reviewing a country data release, read
24
+ `docs/engineering/skills/data-certification.md`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 4.16.0
3
+ Version: 4.16.2
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
@@ -692,8 +692,8 @@ Provides-Extra: uk
692
692
  Requires-Dist: policyengine_core>=3.26.1; extra == "uk"
693
693
  Requires-Dist: policyengine-uk==2.88.20; extra == "uk"
694
694
  Provides-Extra: us
695
- Requires-Dist: policyengine_core==3.26.1; extra == "us"
696
- Requires-Dist: policyengine-us==1.722.4; extra == "us"
695
+ Requires-Dist: policyengine_core>=3.27.1; extra == "us"
696
+ Requires-Dist: policyengine-us==1.723.0; extra == "us"
697
697
  Provides-Extra: dev
698
698
  Requires-Dist: pytest; extra == "dev"
699
699
  Requires-Dist: furo; extra == "dev"
@@ -705,9 +705,9 @@ Requires-Dist: build; extra == "dev"
705
705
  Requires-Dist: plotly>=5.0.0; extra == "dev"
706
706
  Requires-Dist: pytest-asyncio>=0.26.0; extra == "dev"
707
707
  Requires-Dist: ruff>=0.9.0; extra == "dev"
708
- Requires-Dist: policyengine_core==3.26.1; extra == "dev"
708
+ Requires-Dist: policyengine_core>=3.27.1; extra == "dev"
709
709
  Requires-Dist: policyengine-uk==2.88.20; extra == "dev"
710
- Requires-Dist: policyengine-us==1.722.4; extra == "dev"
710
+ Requires-Dist: policyengine-us==1.723.0; extra == "dev"
711
711
  Requires-Dist: towncrier>=24.8.0; extra == "dev"
712
712
  Requires-Dist: mypy>=1.11.0; extra == "dev"
713
713
  Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
@@ -13,5 +13,5 @@ Current skills:
13
13
  changelog-fragment requirements, PR head verification, and title conventions.
14
14
  - `repository-guidance.md`: policyengine.py structure, commands, package
15
15
  boundaries, test expectations, and repo-specific anti-patterns.
16
- - `release-bundles.md`: certified release-bundle refresh workflow, model/data
17
- compatibility gates, expected files, and bundle-specific tests.
16
+ - `data-certification.md`: certifying country data releases from their
17
+ release manifests, validation semantics, expected files, and legacy paths.
@@ -0,0 +1,83 @@
1
+ # Data certification
2
+
3
+ Use this skill when certifying a country data release for `policyengine.py`,
4
+ or reviewing a certification change.
5
+
6
+ ## What certification is
7
+
8
+ A data release is published on Hugging Face with a release manifest: per-
9
+ artifact repo/revision/sha256 pins, build provenance, compatibility claims,
10
+ and region dataset templates. Certification asserts that *this*
11
+ `policyengine.py` release, with the model package pinned in
12
+ `pyproject.toml`, serves that data release — and the assertion is only made
13
+ good by the test suite passing on the exact pinned pair.
14
+
15
+ There is no intermediate bundle repo. The vendored country manifest at
16
+ `src/policyengine/data/release_manifests/{country}.json` is derived directly
17
+ from the data release manifest.
18
+
19
+ ## Certifying a release
20
+
21
+ Open the work on a fresh branch from current `main` (use a clean worktree if
22
+ the checkout is dirty).
23
+
24
+ ```bash
25
+ python scripts/certify_data_release.py --country us \
26
+ --manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
27
+ ```
28
+
29
+ The script fetches and validates the manifest (every artifact must carry a
30
+ revision pin; the certified dataset must be reachable), writes the vendored
31
+ country manifest, exact-pins the country model package and raises the core
32
+ floor in `pyproject.toml`, regenerates the TRACE TRO sidecar, and writes a
33
+ Towncrier changelog fragment.
34
+
35
+ Private data (UK) requires `HUGGING_FACE_TOKEN` or `HF_TOKEN`.
36
+
37
+ After running:
38
+
39
+ - `uv lock` if pins moved, then `uv sync --all-extras`,
40
+ - run the full test suite — snapshot drift from a model bump is refreshed
41
+ with `PE_UPDATE_SNAPSHOTS=1 pytest tests/test_household_calculator_snapshot.py`,
42
+ - commit the manifest, TRO, `pyproject.toml`, `uv.lock`, and fragment
43
+ together.
44
+
45
+ A certification PR should normally change only:
46
+
47
+ - `src/policyengine/data/release_manifests/{country}.json` (+ `.trace.tro.jsonld`)
48
+ - `pyproject.toml` / `uv.lock`
49
+ - one Towncrier fragment under `changelog.d/`
50
+ - test constants/snapshots that pin certified versions
51
+
52
+ ## Validation semantics
53
+
54
+ Hard failures (certification refuses): missing national default dataset,
55
+ default dataset absent from artifacts, any artifact without a revision pin,
56
+ unreachable certified dataset, unknown country.
57
+
58
+ Certification gate: the model version must either exactly match the
59
+ build-time model (`compatibility_basis: built_with_model_package`) or be
60
+ covered by the publisher's `compatible_model_packages` claim
61
+ (`compatibility_basis: compatible_model_packages`, recorded with a
62
+ warning — the publisher's claim is made good only by this repo's test
63
+ suite passing on the pinned pair). Neither basis means certification is
64
+ refused: a new data build or a published compatibility claim is required.
65
+
66
+ Warnings (recorded, not blocking): artifacts without sha256, and the
67
+ publisher-claim basis above.
68
+
69
+ ## Legacy paths
70
+
71
+ Countries whose current data release predates release manifests (the UK
72
+ enhanced FRS) are refreshed with the legacy single-country tool until their
73
+ next release certifies through a manifest:
74
+
75
+ ```bash
76
+ python scripts/refresh_release_bundle.py --country uk --model-version 2.89.0
77
+ ```
78
+
79
+ Do not hand-edit vendored country manifests for normal updates.
80
+
81
+ The retired `policyengine-bundles` flow (candidates → generated bundle →
82
+ archive import) is preserved read-only in that repo's history; bundles
83
+ 4.15.x–4.16.x remain the historical record of earlier certifications.
@@ -1,5 +1,15 @@
1
1
  # Release Bundles
2
2
 
3
+ > **Current process.** Certification now runs inside this repository:
4
+ > `scripts/certify_data_release.py` derives the vendored country manifest
5
+ > directly from a country's data release manifest (see the
6
+ > [data certification](engineering/skills/data-certification.md)
7
+ > engineering skill). The intermediate `policyengine-bundles` repository
8
+ > flow is retired; its published bundles remain the historical record of
9
+ > earlier certifications. The architecture below — country `*-data`
10
+ > repos publish immutable manifests, `policyengine.py` certifies — is
11
+ > unchanged.
12
+
3
13
  This document defines the intended reproducibility boundary for `policyengine.py`.
4
14
 
5
15
  The key design decision is:
@@ -59,18 +69,19 @@ It does not define the final supported runtime bundle exposed to users.
59
69
 
60
70
  It does not rebuild microdata artifacts.
61
71
 
62
- New multi-country bundles are generated and archived in
63
- `PolicyEngine/policyengine-bundles`. `policyengine.py` vendors one current
64
- bundle from that archive under `src/policyengine/data/bundle/`, then generates
65
- the legacy country release manifests that runtime code still reads. The import
72
+ Certification runs in this repository: the vendored country release
73
+ manifest under `src/policyengine/data/release_manifests/` is derived
74
+ directly from the country's published data release manifest. The
66
75
  entrypoint is:
67
76
 
68
77
  ```bash
69
- python scripts/import_policyengine_bundle.py 4.14.0
78
+ python scripts/certify_data_release.py --country us \
79
+ --manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
70
80
  ```
71
81
 
72
- The `policyengine-bundles` publish workflow runs this importer automatically
73
- when it opens the consuming `.py` PR.
82
+ Earlier releases (policyengine 4.15.x–4.16.x) were certified through the
83
+ `PolicyEngine/policyengine-bundles` archive flow; those bundles remain the
84
+ historical record of their certifications.
74
85
 
75
86
  ## Two manifest layers
76
87
 
@@ -396,11 +407,16 @@ Things that should usually not affect the fingerprint:
396
407
  `policyengine.py` may certify a staged data artifact for a model version only if one of the following is true:
397
408
 
398
409
  1. the model version exactly matches the `built_with_model_package.version`
399
- 2. the model version has the same `data_build_fingerprint` as the build-time model version
400
-
401
- If neither is true, the bundle release must fail and a new data build is required.
402
-
403
- This should be a hard failure, not a warning.
410
+ (`compatibility_basis: built_with_model_package`)
411
+ 2. the data publisher's `compatible_model_packages` covers the model version
412
+ (`compatibility_basis: compatible_model_packages` the publisher's claim,
413
+ recorded with a warning and made good by the test suite passing on the
414
+ pinned pair)
415
+
416
+ If neither is true, certification fails hard and a new data build or a
417
+ published compatibility claim is required. A `data_build_fingerprint`
418
+ basis (same fingerprint as the build-time model) is a planned third
419
+ basis; it requires fingerprint metadata from the installed model package.
404
420
 
405
421
  ## Artifact states
406
422
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "4.16.0"
7
+ version = "4.16.2"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -48,8 +48,8 @@ uk = [
48
48
  "policyengine-uk==2.88.20",
49
49
  ]
50
50
  us = [
51
- "policyengine_core==3.26.1",
52
- "policyengine-us==1.722.4",
51
+ "policyengine_core>=3.27.1",
52
+ "policyengine-us==1.723.0",
53
53
  ]
54
54
  dev = [
55
55
  "pytest",
@@ -62,9 +62,9 @@ dev = [
62
62
  "plotly>=5.0.0",
63
63
  "pytest-asyncio>=0.26.0",
64
64
  "ruff>=0.9.0",
65
- "policyengine_core==3.26.1",
65
+ "policyengine_core>=3.27.1",
66
66
  "policyengine-uk==2.88.20",
67
- "policyengine-us==1.722.4",
67
+ "policyengine-us==1.723.0",
68
68
  "towncrier>=24.8.0",
69
69
  "mypy>=1.11.0",
70
70
  "pytest-cov>=5.0.0",
@@ -0,0 +1,111 @@
1
+ """Certify a country data release from its HF release manifest.
2
+
3
+ Replaces the policyengine-bundles import flow: fetches the data release
4
+ manifest, validates it, writes the vendored country manifest, exact-pins
5
+ the country model package in ``pyproject.toml``, regenerates the TRACE
6
+ TRO sidecar, and writes a Towncrier changelog fragment.
7
+
8
+ Usage::
9
+
10
+ python scripts/certify_data_release.py --country us \\
11
+ --manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
12
+
13
+ Private data (UK) requires ``HUGGING_FACE_TOKEN`` or ``HF_TOKEN`` in the
14
+ environment. After running: commit the changed manifest / TRO /
15
+ pyproject.toml / changelog fragment, re-lock if pins moved, and run the
16
+ test suite — certification is only asserted once the suite passes on the
17
+ exact pinned pair.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ import argparse
23
+ import os
24
+ import sys
25
+ from pathlib import Path
26
+
27
+ REPO_ROOT = Path(__file__).resolve().parents[1]
28
+ sys.path.insert(0, str(REPO_ROOT / "src"))
29
+
30
+ from policyengine.provenance.certification import ( # noqa: E402
31
+ certify_data_release,
32
+ )
33
+ from policyengine.provenance.pyproject_pins import ( # noqa: E402
34
+ update_country_pins,
35
+ )
36
+
37
+
38
+ def main(argv=None) -> int:
39
+ parser = argparse.ArgumentParser(description="Certify a country data release.")
40
+ parser.add_argument("--country", required=True, choices=["us", "uk"])
41
+ parser.add_argument(
42
+ "--manifest-uri",
43
+ required=True,
44
+ help="hf://dataset/<repo_id>@<revision>/<path-to-release_manifest.json>",
45
+ )
46
+ parser.add_argument(
47
+ "--model-version",
48
+ default=None,
49
+ help="Model package version to certify for (default: installed).",
50
+ )
51
+ parser.add_argument("--no-pyproject", action="store_true")
52
+ parser.add_argument("--no-tro", action="store_true")
53
+ parser.add_argument("--no-changelog", action="store_true")
54
+ parser.add_argument(
55
+ "--skip-artifact-check",
56
+ action="store_true",
57
+ help="Skip the reachability HEAD on the certified dataset.",
58
+ )
59
+ args = parser.parse_args(argv)
60
+
61
+ token = os.environ.get("HUGGING_FACE_TOKEN") or os.environ.get("HF_TOKEN")
62
+
63
+ result = certify_data_release(
64
+ country=args.country,
65
+ manifest_uri=args.manifest_uri,
66
+ model_version=args.model_version,
67
+ token=token,
68
+ check_artifacts=not args.skip_artifact_check,
69
+ )
70
+ print(result.summary())
71
+
72
+ if not args.no_pyproject:
73
+ from importlib.metadata import version as installed_version
74
+
75
+ update_country_pins(
76
+ pyproject_path=REPO_ROOT / "pyproject.toml",
77
+ country=args.country,
78
+ model_package=result.model_package,
79
+ model_version=result.model_version,
80
+ core_version=installed_version("policyengine_core"),
81
+ )
82
+ print(f"pinned {result.model_package}=={result.model_version}")
83
+
84
+ if not args.no_tro:
85
+ from policyengine.provenance.bundle import regenerate_trace_tro
86
+
87
+ tro_path = regenerate_trace_tro(
88
+ args.country, result.country_manifest_path.parent
89
+ )
90
+ print(f"trace tro: {tro_path}")
91
+
92
+ if not args.no_changelog:
93
+ changelog_dir = REPO_ROOT / "changelog.d"
94
+ changelog_dir.mkdir(exist_ok=True)
95
+ fragment = (
96
+ changelog_dir
97
+ / f"certify-{args.country}-{result.build_id or 'data'}.changed.md"
98
+ )
99
+ fragment.write_text(
100
+ f"Certify the {args.country.upper()} data release "
101
+ f"`{result.build_id}` ({result.default_dataset}, "
102
+ f"{result.model_package} {result.model_version}) directly from "
103
+ "its data release manifest.\n"
104
+ )
105
+ print(f"changelog: {fragment}")
106
+
107
+ return 0
108
+
109
+
110
+ if __name__ == "__main__":
111
+ raise SystemExit(main())
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema_version": 1,
3
- "bundle_id": "uk-4.16.0",
3
+ "bundle_id": "uk-4.16.2",
4
4
  "country_id": "uk",
5
- "policyengine_version": "4.16.0",
5
+ "policyengine_version": "4.16.2",
6
6
  "model_package": {
7
7
  "name": "policyengine-uk",
8
8
  "version": "2.88.20",
@@ -18,18 +18,18 @@
18
18
  "schema:url": "https://policyengine.org"
19
19
  },
20
20
  "schema:dateCreated": "2026-05-20T20:16:50.641086Z",
21
- "schema:description": "TRACE TRO for certified runtime bundle uk-4.16.0 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-4.16.2 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": "4.16.0"
26
+ "schema:softwareVersion": "4.16.2"
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-4.16.0.",
32
+ "rdfs:comment": "Certified arrangement for bundle uk-4.16.2.",
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": "0a41c311264380a355c249c6a7e4f3569bee644806b5ec0cdcf1f1163a907a89"
78
+ "trov:sha256": "5f4629bb55d361c9a1a9f2a46950570acccfefd10ec5fd04865b27d9017d10ea"
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": "257fcf97222403305b02103fdd04539a410da51b597cb87daac326dee12e37ef"
105
+ "trov:sha256": "cfdc777af8b1dd4666c26bad8ceb7a47e0fe6cec0f89c569601e90055760858e"
106
106
  }
107
107
  },
108
108
  "trov:hasPerformance": {
@@ -112,8 +112,8 @@
112
112
  "pe:certifiedBy": "policyengine.py bundled manifest",
113
113
  "pe:certifiedForModelVersion": "2.88.20",
114
114
  "pe:ciGitRef": "refs/heads/main",
115
- "pe:ciGitSha": "86f1de199dcc5da6e87fdab2999adcf3d3e94eec",
116
- "pe:ciRunUrl": "https://github.com/PolicyEngine/policyengine.py/actions/runs/27359946095",
115
+ "pe:ciGitSha": "8b084c5cefdf02d38dd6f974fd846905c3167f39",
116
+ "pe:ciRunUrl": "https://github.com/PolicyEngine/policyengine.py/actions/runs/27407803462",
117
117
  "pe:compatibilityBasis": "exact_build_model_version",
118
118
  "pe:dataBuildFingerprint": "sha256:77f149725a36055fd89961855230401852b0712d301c6e26d6d16565c6b23809",
119
119
  "pe:dataBuildId": "policyengine-uk-data-1.55.10",