Skip to content

Define and enforce a release artifact contract for populace-us (releases differ in files and manifest schema) #11

Description

@PavelMakarchuk

Problem

The three releases currently on policyengine/populace-us are mutually inconsistent:

release build_manifest.json release_manifest.json sound_ecps_replacement_comparison.json
populace-us-2024-1abddeb-20260611 ❌ missing ✅ (852 B, unversioned schema: release_id, country_id, artifacts, validation) ❌ missing
populace-us-2024-5da5a95-20260611 ✅ (168 KB, schema_version: 1)
populace-us-2024-9f1260b-20260611 ✅ (2.7 KB, schema_version: 1)

So a consumer iterating releases/ hits: a release with no build manifest at all, and two different release_manifest.json schemas (one without schema_version). The 5da5a95 vs 9f1260b size difference (168 KB vs 2.7 KB) also suggests the manifest contents aren't stable yet.

DESIGN.md makes "stage manifests are load-bearing" a binding process rule; the release directory is the most public manifest of all.

Proposal

  1. Name the mandatory files for a release to count as published (suggest: build_manifest.json, release_manifest.json, sound_ecps_replacement_comparison.json).
  2. Version the release-manifest schema and reject publishing on schema drift (a ten-line check in the publish step, in the spirit of the behavioral-contract-tests rule).
  3. Either backfill or delete incomplete releases (1abddeb) so the listing is trustworthy.

Consumer

PolicyEngine/calibration-diagnostics Populace mode currently defends against this by filtering to releases that contain build_manifest.json, but the contract should live with the producer, not in every consumer.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions