Skip to content

Stage every artifact a promotion manifest binds - #172

Merged
DavidBakerEffendi merged 1 commit into
mainfrom
dave/stage-bound-promotion-artifacts
Aug 26, 2026
Merged

Stage every artifact a promotion manifest binds#172
DavidBakerEffendi merged 1 commit into
mainfrom
dave/stage-bound-promotion-artifacts

Conversation

@DavidBakerEffendi

Copy link
Copy Markdown
Collaborator

The v0.3.1 legacy freeze
(32954887242)
ran all eleven candidate shards green — roslyn included, so #171 worked —
and then failed in aggregation:

Error: canonicalize promotion artifact docs/legacy-promotion-selection-policy.md
Caused by: No such file or directory (os error 2)

freeze-manifest resolves a promotion manifest's bound artifacts relative to
the staged corpus. The legacy manifest binds its eligibility policy under
docs/, and stage-release-bundle.sh copies benchmarks fixtures adapters schema src containers scripts plus a few root files — never docs/. So the
bundle could not canonicalize an artifact its own manifest hash-binds, which is
exactly the self-verifying property the tier exists to provide.

It is the only such artifact: sweeping every file reference in
benchmarks/promotion/** yields one path outside the staged prefixes, bound by
both manifest.json and cohort.json.

The fix

Copy exactly the bound files, derived by reading the promotion manifests
rather than naming docs/ here, so a newly bound artifact is staged without
editing this script. Not all of docs/ — that carries node_modules and build
output, which would bloat the bundle and hand the analyzer a large unrelated
tree to index.

Verification, against the failed run's own evidence

  • Staging emits the policy at the manifest's expected path, sha256
    1ac2968892c97af5…matching the binding — and docs/ contributes that
    one file and nothing else.
  • Downloaded all eleven shard reports from that run and re-ran the exact
    aggregation: succeeds, satisfies the workflow's
    snapshotKind == "legacy_promoted" and balancedCoreCaseCount == 110 and (.corpus | length == 30) gate, and generate-results produces both pages.

That run's Bifrost report also confirms the expected set from #160 exactly:

110 cases: 106 passed, 1 improved, 3 failed, 0 errors   (bifrost 6624e883)
  improved  cpp-parity-function-like-macro-expanded-call
  failed    rust-struct-construction                                  (#170)
  failed    rust-parity-module-declaration-definition                 (#170)
  failed    scala-parity-case-class-generated-construction-and-copy

Regression cover

Adds a test asserting the derivation is present and that every artifact bound
outside the staged prefixes actually exists. unittest discover runs 40 tests
green; reproduction contract exits 0.

🤖 Generated with Claude Code

The v0.3.1 legacy freeze ran all eleven candidate shards green and then failed
in aggregation:

  Error: canonicalize promotion artifact docs/legacy-promotion-selection-policy.md
  Caused by: No such file or directory (os error 2)

freeze-manifest resolves a promotion manifest's bound artifacts relative to the
staged corpus, and the legacy manifest binds its eligibility policy under
docs/. Staging copies benchmarks, fixtures, adapters, schema, src, containers,
and scripts plus a few root files, so that document never reached the bundle. A
bundle that cannot canonicalize an artifact its own manifest hash-binds is not
self-verifying, which is the property the tier exists to provide.

Copy exactly the bound files, derived by reading the promotion manifests rather
than naming docs/ here, so a newly bound artifact is staged without editing
this script. Not all of docs/: that carries node_modules and build output,
which would bloat the bundle and hand the analyzer a large unrelated tree to
index.

Verified against the failed run's own evidence. Staging now emits the policy at
the manifest's expected path with sha256 1ac2968892c97af5..., matching the
binding, and docs/ contributes that one file and nothing else. Re-running the
exact aggregation with all eleven reports downloaded from that run succeeds,
satisfies the workflow's jq gate, and generates both result pages.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@DavidBakerEffendi
DavidBakerEffendi merged commit 8393daf into main Aug 26, 2026
5 checks passed
@DavidBakerEffendi
DavidBakerEffendi deleted the dave/stage-bound-promotion-artifacts branch August 26, 2026 11:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant