policyengine 6.4.3__tar.gz → 6.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- policyengine-6.6.0/.github/dispatch-policyengine-release.sh +51 -0
- policyengine-6.6.0/.github/qualification-ledger.sh +116 -0
- policyengine-6.6.0/.github/workflows/certify-uk-release.yaml +581 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/workflows/pr_code_changes.yaml +4 -3
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/workflows/push.yaml +77 -4
- {policyengine-6.4.3 → policyengine-6.6.0}/CHANGELOG.md +41 -0
- {policyengine-6.4.3/src/policyengine.egg-info → policyengine-6.6.0}/PKG-INFO +3 -2
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/_quarto.yml +1 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/dev.md +1 -1
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/disclosure.md +55 -2
- policyengine-6.6.0/docs/engineering/runbooks/uk-qualification.md +120 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/households.md +2 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/microsim.md +54 -1
- policyengine-6.6.0/docs/receipts.md +185 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/run-records.md +1 -1
- {policyengine-6.4.3 → policyengine-6.6.0}/pyproject.toml +6 -2
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/bundle.py +12 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/certify_data_release.py +18 -0
- policyengine-6.6.0/scripts/check_uk_candidate.py +1305 -0
- policyengine-6.6.0/scripts/generate_receipt_schemas.py +60 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/generate_trace_tros.py +22 -1
- policyengine-6.6.0/scripts/release_consumers.py +164 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/__init__.py +8 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/__init__.py +1 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/run_record.py +24 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/simulation.py +30 -6
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/tax_benefit_model_version.py +12 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/data/bundle/manifest.json +10 -10
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
- policyengine-6.6.0/src/policyengine/data/qualification/replay_policy.md +57 -0
- policyengine-6.6.0/src/policyengine/data/qualification/uk.json +40 -0
- policyengine-6.6.0/src/policyengine/data/qualification/uk_budget_critical_inputs.json +58 -0
- policyengine-6.6.0/src/policyengine/data/qualification/uk_review_bounds.json +79 -0
- policyengine-6.6.0/src/policyengine/data/schemas/execution_receipt.v1.schema.json +720 -0
- policyengine-6.6.0/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md +9 -0
- policyengine-6.6.0/src/policyengine/data/schemas/vendor/policyengine-scorecard/qualification_request.v1.json +145 -0
- policyengine-6.6.0/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json +638 -0
- policyengine-6.6.0/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_status.v1.json +36 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/release.py +62 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/schema.py +5 -1
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/uk_geography_disclosure.py +112 -7
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/__init__.py +21 -0
- policyengine-6.6.0/src/policyengine/provenance/bytecode.py +179 -0
- policyengine-6.6.0/src/policyengine/provenance/canonical.py +200 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/certification.py +133 -6
- policyengine-6.6.0/src/policyengine/provenance/loaded.py +34 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/manifest.py +87 -1
- policyengine-6.6.0/src/policyengine/provenance/qualification.py +1140 -0
- policyengine-6.6.0/src/policyengine/provenance/qualification_ledger.py +356 -0
- policyengine-6.6.0/src/policyengine/provenance/receipt.py +4066 -0
- policyengine-6.6.0/src/policyengine/provenance/uk_candidate.py +3291 -0
- policyengine-6.6.0/src/policyengine/provenance/uk_qualification.py +1613 -0
- policyengine-6.6.0/src/policyengine/provenance/wheels.py +438 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/model_version.py +61 -5
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/budget_reform_contract.py +349 -28
- policyengine-6.6.0/src/policyengine/tax_benefit_models/uk/capital_gains_responses.py +321 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/datasets.py +22 -2
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/household.py +13 -4
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/model.py +16 -0
- {policyengine-6.4.3 → policyengine-6.6.0/src/policyengine.egg-info}/PKG-INFO +3 -2
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine.egg-info/SOURCES.txt +57 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine.egg-info/requires.txt +2 -1
- policyengine-6.6.0/tests/fixtures/uk_contract/README.md +15 -0
- policyengine-6.6.0/tests/fixtures/uk_contract/evaluate_case_rows.json +1 -0
- policyengine-6.6.0/tests/fixtures/uk_contract/full_released_uk_2.130.1.json +14922 -0
- policyengine-6.6.0/tests/fixtures/uk_contract/pinned_uk_2.125.1_defects.json +2050 -0
- policyengine-6.6.0/tests/fixtures/uk_contract/population_pass_max_examples_0.json +161 -0
- policyengine-6.6.0/tests/fixtures/uk_metrics/README.md +31 -0
- policyengine-6.6.0/tests/fixtures/uk_metrics/budget_metrics_report.json +21199 -0
- policyengine-6.6.0/tests/fixtures/uk_metrics/standard_reforms.yaml +150 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/DIGESTS.json +8 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/README.md +17 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/qualification_request_golden.jcs +1 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/qualification_request_golden.json +72 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REPLAY_RECEIPT.json +4480 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REQUEST.json +59 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/replay_receipt_golden.jcs +1 -0
- policyengine-6.6.0/tests/fixtures/uk_replay/replay_receipt_golden.json +138 -0
- policyengine-6.6.0/tests/qualification_fixtures.py +214 -0
- policyengine-6.6.0/tests/receipt_modifiers.py +25 -0
- policyengine-6.6.0/tests/receipt_unbindable_modifiers.py +16 -0
- policyengine-6.6.0/tests/test_canonical_json.py +231 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_release.py +139 -2
- policyengine-6.6.0/tests/test_execution_receipt.py +7434 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_household_calculator_snapshot.py +5 -1
- policyengine-6.6.0/tests/test_qualification_contracts.py +1202 -0
- policyengine-6.6.0/tests/test_qualification_ledger_concurrency.py +515 -0
- policyengine-6.6.0/tests/test_qualification_ledger_script.py +111 -0
- policyengine-6.6.0/tests/test_qualified_pair_certification.py +594 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_budget_reform_contract.py +289 -0
- policyengine-6.6.0/tests/test_uk_candidate_gates.py +3750 -0
- policyengine-6.6.0/tests/test_uk_candidate_metric_baselines.py +743 -0
- policyengine-6.6.0/tests/test_uk_cgt_response_records.py +231 -0
- policyengine-6.6.0/tests/test_uk_cgt_responses.py +432 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_dated_reforms.py +12 -1
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_geography_disclosure.py +196 -7
- policyengine-6.6.0/tests/test_uk_qualification_pipeline.py +3338 -0
- policyengine-6.6.0/tests/test_uk_qualification_workflow.py +796 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_year_file_data_year.py +10 -0
- policyengine-6.6.0/tests/test_wheels.py +853 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/uv.lock +13 -2
- policyengine-6.4.3/.github/dispatch-policyengine-release.sh +0 -28
- policyengine-6.4.3/tests/fixtures/uk_contract/evaluate_case_rows.json +0 -1
- {policyengine-6.4.3 → policyengine-6.6.0}/.claude/policyengine-guide.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.claude/quick-reference.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/CONTRIBUTING.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/bump_version.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/capture-version.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/changelog_template.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/check-changelog.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/copilot-instructions.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/fetch_version.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/get-changelog-diff.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/has-functional-changes.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/is-version-number-acceptable.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/publish-git-tag.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/wait-for-pypi.sh +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/workflows/draft-pdf.yml +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.github/workflows/pr_docs_changes.yaml +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.gitignore +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/.python-version +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/AGENTS.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/CITATION.cff +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/CLAUDE.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/CODE_OF_CONDUCT.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/CONTRIBUTING.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/LICENSE +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/Makefile +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/README.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/architecture.png +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/architecture.svg +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/changelog.d/.gitkeep +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/.gitignore +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/_generator/README.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/_generator/build_reference.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/bundles.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/countries.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/data-publishing-design.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/decile-impact-spec.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/runbooks/acs-local-wic-replacement.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/runbooks/canonical-spm-development.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/runbooks/us-legacy-spm-sources.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/skills/README.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/skills/data-certification.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/skills/github-prs.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/engineering/skills/repository-guidance.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/examples.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/getting-started.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/impact-analysis.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/index.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/methodology/index.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/methodology/model-architecture.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/methodology/us-health-costs.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/outputs.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/programs/index.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/programs/us-chip.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/reference/index.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/reforms.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/regions.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/release-bundles.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/trace-case-study.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/docs/visualisation.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/belgium_axiom_pilot.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/employment_income_variation_uk.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/employment_income_variation_us.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/household_impact_example.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/income_bands_uk.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/income_distribution_us.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/paper_repro_uk.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/policy_change_uk.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/speedtest_us_simulation.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/uk_geography_disclosure.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/examples/us_budgetary_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/paper-preview.html +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/paper.bib +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/paper.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/check_data_staleness.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/check_native_spm_loading.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/check_release_credentials.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/export_bundle_release_assets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/generate_bundle_artifacts.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/prepare_package_bundle_update.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/release_lock.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/scripts/spm_bundle.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/setup.cfg +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/bundle.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/cli.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/cache.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/dataset.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/dynamic.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/output.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/parameter.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/parameter_node.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/parameter_value.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/policy.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/region.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/scoping_strategy.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/spm.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/tax_benefit_model.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/core/variable.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/uk/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/uk/regions.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/us/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/us/data/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/us/data/districts.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/us/data/places.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/us/data/states.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/countries/us/regions.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/data/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/data/uk_geography_assets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/derivations/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/derivations/narrate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/derivations/trace.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/__main__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/areas.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/estimate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/noise.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/support.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/disclosure/validate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/graph/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/graph/extractor.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/graph/graph.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/aggregate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/change_aggregate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/cliff_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/congressional_district_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/constituency_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/decile_analysis.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/decile_grouping.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/decile_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/extra_variables.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/inequality.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/intra_decile_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/labor_supply_response.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/local_authority_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/poverty.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/program_statistics.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/uk_geography_assets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/outputs/uk_geography_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/bundle_validation.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/dataset_materialization.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/pyproject_pins.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/spm_configuration.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/trace.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/verify.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/provenance/zenodo.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/results/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/results/schema.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/results/trace_tro.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/results/tracking.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/be/model.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/household.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/common/result.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/uk/budget_reform_population.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/household.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_inputs.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/declarations.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/independence.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/model_adapter.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/record.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/registry.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/runs.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/legacy_spm/universe.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/model.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/tax_benefit_models/us/spm.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/dates.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/design.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/entity_utils.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/errors.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/hashing.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/household_validation.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/parameter_labels.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/parametric_reforms.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine/utils/plotting.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine.egg-info/dependency_links.txt +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine.egg-info/entry_points.txt +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/src/policyengine.egg-info/top_level.txt +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/conftest.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/filtering_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/parameter_labels_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/region_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/release_tros/README.md +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/release_tros/country-models.lock.toml +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/release_tros/manifest.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/release_tros/us-release_manifest.json +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/release_tros/us.trace.tro.jsonld +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/spm_development.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/us_reform_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/fixtures/variable_label_fixtures.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_aggregate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_be_axiom_pilot.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_budgetary_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_bump_version.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_bundle.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_bundle_metadata.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_cache.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_certify_data_release.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_change_aggregate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_cliff_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_cliff_impact_analysis.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_congressional_district_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_constituency_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_dataset_materialization.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_dataset_persistence.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_dataset_runtime.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_dataset_source.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_decile_grouping.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_derivations.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_dict_reforms_on_simulation.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_areas.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_estimate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_noise.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_schema.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_support.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_disclosure_validate.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_entity_mapping.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_entity_utils.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_entity_utils_characterization.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_errors.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_extra_variables.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_filtering.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_generate_trace_tros.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_graph/__init__.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_graph/conftest.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_graph/test_extractor.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_household_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_inequality.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_intra_decile_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_labor_supply_response.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_local_authority_impact.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_manifest_version_mismatch.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_models.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_pandas3_compatibility.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_parameter_labels.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_parameter_nodes.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_parameter_values.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_parametric_reforms.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_poverty.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_poverty_by_demographics.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_poverty_run.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_preservation_mirror.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_program_statistics.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_pyproject_pins.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_region.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_region_group_strategy.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_release_credentials.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_release_lock.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_release_manifests.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_release_tro_generation.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_results.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_run_record.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_scoping_strategy.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_small_follow_ups.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_bundle_bootstrap.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_bundle_tooling.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_decile.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_development_authentication.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_household.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_model.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_selection.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_spm_selection_schema.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_trace_tro.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_trace_tro_verify.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_analysis.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_geography_assets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_program_statistics.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_uk_regions.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_legacy_inputs.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_legacy_inputs_integration.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_legacy_spm.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_legacy_spm_integration.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_legacy_spm_model_contract.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_long_term_datasets.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_microsim_structural_reforms.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_native_alignment.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_native_hdf_weights.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_program_statistics.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_reform_application.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_regions.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_us_year_file_stamp.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_variable_labels.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_variable_metadata.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/test_zenodo_mirror.py +0 -0
- {policyengine-6.4.3 → policyengine-6.6.0}/tests/uk_contract_row_scenarios.py +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Notify consumer repositories that a policyengine release is available on
|
|
4
|
+
# PyPI by sending a repository dispatch, which triggers their update
|
|
5
|
+
# workflows.
|
|
6
|
+
#
|
|
7
|
+
# Environment:
|
|
8
|
+
# VERSION Exact policyengine version that was released.
|
|
9
|
+
# GH_TOKEN PolicyEngine GitHub App token with Contents write access to
|
|
10
|
+
# the consumer repositories.
|
|
11
|
+
# CONSUMER_REPOS Space-separated repositories to notify (default:
|
|
12
|
+
# policyengine-api policyengine-sim-api).
|
|
13
|
+
# PAYLOAD_FILE Optional JSON file holding the whole dispatch body
|
|
14
|
+
# ({"event_type": ..., "client_payload": {...}}), as written
|
|
15
|
+
# by scripts/release_consumers.py. Without it, a
|
|
16
|
+
# policyengine-release event carrying only the version is sent.
|
|
17
|
+
set -euo pipefail
|
|
18
|
+
|
|
19
|
+
if [[ -z "${VERSION:-}" ]]; then
|
|
20
|
+
echo "ERROR: VERSION must be set." >&2
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
read -r -a REPOS <<< "${CONSUMER_REPOS:-policyengine-api policyengine-sim-api}"
|
|
25
|
+
|
|
26
|
+
if [[ -n "${PAYLOAD_FILE:-}" ]]; then
|
|
27
|
+
payload_version=$(python - "$PAYLOAD_FILE" <<'PY'
|
|
28
|
+
import json
|
|
29
|
+
import sys
|
|
30
|
+
|
|
31
|
+
payload = json.load(open(sys.argv[1]))["client_payload"]
|
|
32
|
+
request = payload.get("request")
|
|
33
|
+
print(payload.get("version") or request["candidate"]["policyengine"]["version"])
|
|
34
|
+
PY
|
|
35
|
+
)
|
|
36
|
+
if [[ "$payload_version" != "$VERSION" ]]; then
|
|
37
|
+
echo "ERROR: ${PAYLOAD_FILE} is for ${payload_version}, not ${VERSION}." >&2
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
for repo in "${REPOS[@]}"; do
|
|
43
|
+
if [[ -n "${PAYLOAD_FILE:-}" ]]; then
|
|
44
|
+
gh api "repos/PolicyEngine/${repo}/dispatches" --method POST --input "$PAYLOAD_FILE"
|
|
45
|
+
else
|
|
46
|
+
gh api "repos/PolicyEngine/${repo}/dispatches" \
|
|
47
|
+
-f event_type=policyengine-release \
|
|
48
|
+
-f "client_payload[version]=${VERSION}"
|
|
49
|
+
fi
|
|
50
|
+
echo "Dispatched policyengine ${VERSION} to PolicyEngine/${repo}."
|
|
51
|
+
done
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Check out, or publish to, the qualification ledger branch.
|
|
4
|
+
#
|
|
5
|
+
# .github/qualification-ledger.sh checkout <dir>
|
|
6
|
+
# .github/qualification-ledger.sh publish <dir> "<commit message>"
|
|
7
|
+
#
|
|
8
|
+
# The ledger is an orphan branch that only grows. Each attempt writes its own
|
|
9
|
+
# directory (uk/<pair_id>/attempts/<key>/), which concurrent publishes never
|
|
10
|
+
# share. A rejected push is retried by replaying the single new commit on the
|
|
11
|
+
# latest tip; the new commit may be the branch's first (two runs can both find
|
|
12
|
+
# no ledger yet), so it is replayed with cherry-pick, which needs no parent.
|
|
13
|
+
#
|
|
14
|
+
# Two attempts of one pair do share that pair's published files
|
|
15
|
+
# (qualification_receipt.json, latest_attempt.json and pair.json). Git must
|
|
16
|
+
# never merge those line by line: a textual merge of two receipts can produce
|
|
17
|
+
# a valid-looking receipt that is neither (one attempt's harness with another's
|
|
18
|
+
# replay). They are replayed as binary, so a concurrent change to them
|
|
19
|
+
# conflicts. When those are the only conflicts and LEDGER_REDERIVE is set, the
|
|
20
|
+
# tip's copies are kept and "$LEDGER_REDERIVE <dir>" recomputes every pair's
|
|
21
|
+
# published files from its immutable attempts; otherwise the publish fails.
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
BRANCH="${LEDGER_BRANCH:-uk-qualification-ledger}"
|
|
25
|
+
command="${1:?usage: qualification-ledger.sh checkout|publish <dir> [message]}"
|
|
26
|
+
dir="${2:?ledger directory required}"
|
|
27
|
+
|
|
28
|
+
case "$command" in
|
|
29
|
+
checkout)
|
|
30
|
+
if git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
|
|
31
|
+
git fetch --quiet origin "$BRANCH"
|
|
32
|
+
git worktree add --quiet --force -B "$BRANCH" "$dir" FETCH_HEAD
|
|
33
|
+
else
|
|
34
|
+
git worktree add --quiet --detach "$dir"
|
|
35
|
+
(
|
|
36
|
+
cd "$dir"
|
|
37
|
+
git switch --quiet --orphan "$BRANCH"
|
|
38
|
+
cat > README.md <<'README'
|
|
39
|
+
# UK candidate qualification ledger
|
|
40
|
+
|
|
41
|
+
Written by `.github/workflows/certify-uk-release.yaml` in PolicyEngine/policyengine.py.
|
|
42
|
+
Each `uk/<pair_id>/` directory holds a candidate pair, every qualification
|
|
43
|
+
attempt's gate evidence, the replay request and receipt, and the latest
|
|
44
|
+
qualification receipt. Nothing is deleted.
|
|
45
|
+
README
|
|
46
|
+
)
|
|
47
|
+
fi
|
|
48
|
+
;;
|
|
49
|
+
publish)
|
|
50
|
+
message="${3:?commit message required}"
|
|
51
|
+
cd "$dir"
|
|
52
|
+
git add -A
|
|
53
|
+
if git diff --cached --quiet; then
|
|
54
|
+
echo "Ledger unchanged."
|
|
55
|
+
exit 0
|
|
56
|
+
fi
|
|
57
|
+
identity=(-c user.name="policyengine-qualification[bot]"
|
|
58
|
+
-c user.email="qualification@policyengine.org")
|
|
59
|
+
git "${identity[@]}" commit --quiet -m "$message"
|
|
60
|
+
new_commit="$(git rev-parse HEAD)"
|
|
61
|
+
delay="${LEDGER_RETRY_DELAY:-5}"
|
|
62
|
+
attributes="$(mktemp)"
|
|
63
|
+
trap 'rm -f "$attributes"' EXIT
|
|
64
|
+
printf '%s\n' \
|
|
65
|
+
'qualification_receipt.json merge=binary' \
|
|
66
|
+
'latest_attempt.json merge=binary' \
|
|
67
|
+
'pair.json merge=binary' > "$attributes"
|
|
68
|
+
for attempt in 1 2 3 4 5 6; do
|
|
69
|
+
if git push --quiet origin "HEAD:refs/heads/$BRANCH"; then
|
|
70
|
+
echo "Published ledger: $message"
|
|
71
|
+
exit 0
|
|
72
|
+
fi
|
|
73
|
+
# Someone else published first: replay this one commit on their tip.
|
|
74
|
+
if ! git fetch --quiet origin "$BRANCH"; then
|
|
75
|
+
sleep $((attempt * delay))
|
|
76
|
+
continue
|
|
77
|
+
fi
|
|
78
|
+
git reset --quiet --hard FETCH_HEAD
|
|
79
|
+
if ! git "${identity[@]}" -c core.attributesFile="$attributes" \
|
|
80
|
+
cherry-pick --allow-empty "$new_commit" >/dev/null 2>&1; then
|
|
81
|
+
conflicted="$(git diff --name-only --diff-filter=U)"
|
|
82
|
+
shared_only=true
|
|
83
|
+
while IFS= read -r path; do
|
|
84
|
+
[ -z "$path" ] && continue
|
|
85
|
+
case "$path" in
|
|
86
|
+
uk/*/qualification_receipt.json|uk/*/latest_attempt.json|uk/*/pair.json)
|
|
87
|
+
# Only a pair's published files, never an attempt's own.
|
|
88
|
+
case "$path" in uk/*/*/*) shared_only=false ;; esac ;;
|
|
89
|
+
*) shared_only=false ;;
|
|
90
|
+
esac
|
|
91
|
+
done <<< "$conflicted"
|
|
92
|
+
if [ -z "$conflicted" ] || [ "$shared_only" != true ] \
|
|
93
|
+
|| [ -z "${LEDGER_REDERIVE:-}" ]; then
|
|
94
|
+
git cherry-pick --abort || true
|
|
95
|
+
echo "::error::The ledger commit conflicts with a concurrent publish."
|
|
96
|
+
exit 1
|
|
97
|
+
fi
|
|
98
|
+
while IFS= read -r path; do
|
|
99
|
+
git checkout --ours -- "$path"
|
|
100
|
+
done <<< "$conflicted"
|
|
101
|
+
# Recompute published files from the attempts, the tip's and this one's.
|
|
102
|
+
$LEDGER_REDERIVE "$PWD"
|
|
103
|
+
git add -A
|
|
104
|
+
# Completes the cherry-pick, keeping its message, even if empty.
|
|
105
|
+
git "${identity[@]}" commit --quiet --allow-empty --no-edit
|
|
106
|
+
fi
|
|
107
|
+
sleep $((attempt * delay))
|
|
108
|
+
done
|
|
109
|
+
echo "::error::Could not publish the qualification ledger after 6 attempts."
|
|
110
|
+
exit 1
|
|
111
|
+
;;
|
|
112
|
+
*)
|
|
113
|
+
echo "Unknown command: $command" >&2
|
|
114
|
+
exit 2
|
|
115
|
+
;;
|
|
116
|
+
esac
|