diff --git a/bundles/4.16.0/bundle.json b/bundles/4.16.0/bundle.json index 81caa6c..36bcc3e 100644 --- a/bundles/4.16.0/bundle.json +++ b/bundles/4.16.0/bundle.json @@ -3,7 +3,7 @@ "countries": { "us": "countries/us.json" }, - "created_at": "2026-06-11T17:06:01Z", + "created_at": "2026-06-11T17:27:36Z", "metadata": { "generated_by": "scripts/generate_bundle.py", "testing_only": false diff --git a/bundles/4.16.0/countries/us.json b/bundles/4.16.0/countries/us.json index de327dd..c2060ec 100644 --- a/bundles/4.16.0/countries/us.json +++ b/bundles/4.16.0/countries/us.json @@ -24,8 +24,10 @@ "version": "0.1.0" }, "metadata": { + "built_with_model_version": "1.723.0", "candidate_data_release_manifest_uri": "hf://dataset/policyengine/populace-us@populace-us-2024-5da5a95-20260611/releases/populace-us-2024-5da5a95-20260611/release_manifest.json", - "candidate_model_package": "policyengine-us" + "candidate_model_package": "policyengine-us", + "data_build_id": "populace-us-2024-5da5a95-20260611" }, "model_package": { "name": "policyengine-us", diff --git a/bundles/4.16.0/validation-report.json b/bundles/4.16.0/validation-report.json index e81006f..0571b3b 100644 --- a/bundles/4.16.0/validation-report.json +++ b/bundles/4.16.0/validation-report.json @@ -8635,7 +8635,7 @@ "status": "passed" } ], - "generated_at": "2026-06-11T17:06:02Z", + "generated_at": "2026-06-11T17:27:37Z", "metadata": { "generated_by": "scripts/validate_bundle.py", "validation_kind": "registry" diff --git a/src/policyengine_bundles/generation.py b/src/policyengine_bundles/generation.py index 0f1fc87..86f4b2f 100644 --- a/src/policyengine_bundles/generation.py +++ b/src/policyengine_bundles/generation.py @@ -255,6 +255,45 @@ def _build_country_bundle( ) -> CountryBundle: release = DataReleaseManifest.model_validate(loaded_manifest.payload) release = _rewrite_artifacts_to_loaded_revision(release, loaded_manifest) + return _assemble_country_bundle( + release=release, + loaded_manifest=loaded_manifest, + country=country, + country_id=country_id, + bundle_version=bundle_version, + packages=packages, + release_manifest_path=release_manifest_path, + ) + + +def _build_provenance_metadata(release: DataReleaseManifest) -> dict[str, str]: + """Build provenance keys consumed by downstream bundle importers.""" + build = release.build + if build is None: + return {} + metadata: dict[str, str] = {} + if build.build_id: + metadata["data_build_id"] = build.build_id + model_build = build.built_with_model_package + if model_build is not None: + metadata["built_with_model_version"] = model_build.version + if model_build.git_sha: + metadata["built_with_model_git_sha"] = model_build.git_sha + if model_build.data_build_fingerprint: + metadata["data_build_fingerprint"] = model_build.data_build_fingerprint + return metadata + + +def _assemble_country_bundle( + *, + release: DataReleaseManifest, + loaded_manifest: LoadedManifest, + country: CandidateCountry, + country_id: str, + bundle_version: str, + packages: Mapping[str, PackagePin], + release_manifest_path: str | None, +) -> CountryBundle: model_package = packages[country.model_package] core_package = packages["policyengine-core"] default_dataset = _default_dataset(release) @@ -294,6 +333,7 @@ def _build_country_bundle( "candidate_data_release_manifest_uri": ( country.data_release_manifest_uri ), + **_build_provenance_metadata(release), }, ), metadata={