Stage every artifact a promotion manifest binds - #172
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The v0.3.1 legacy freeze
(32954887242)
ran all eleven candidate shards green — roslyn included, so #171 worked —
and then failed in aggregation:
freeze-manifestresolves a promotion manifest's bound artifacts relative tothe staged corpus. The legacy manifest binds its eligibility policy under
docs/, andstage-release-bundle.shcopiesbenchmarks fixtures adapters schema src containers scriptsplus a few root files — neverdocs/. So thebundle 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
filereference inbenchmarks/promotion/**yields one path outside the staged prefixes, bound byboth
manifest.jsonandcohort.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 withoutediting this script. Not all of
docs/— that carriesnode_modulesand buildoutput, which would bloat the bundle and hand the analyzer a large unrelated
tree to index.
Verification, against the failed run's own evidence
1ac2968892c97af5…— matching the binding — anddocs/contributes thatone file and nothing else.
aggregation: succeeds, satisfies the workflow's
snapshotKind == "legacy_promoted" and balancedCoreCaseCount == 110 and (.corpus | length == 30)gate, andgenerate-resultsproduces both pages.That run's Bifrost report also confirms the expected set from #160 exactly:
Regression cover
Adds a test asserting the derivation is present and that every artifact bound
outside the staged prefixes actually exists.
unittest discoverruns 40 testsgreen; reproduction contract exits 0.
🤖 Generated with Claude Code