release: attest bounded v1.5 canary equivalence - #1049
Conversation
|
Note Automatic reviews are paused because your team has used its included automatic processing for this billing period (headroom scales with your seat count). You can still comment "Gitar review" to run one anytime, and automatic reviews resume on their own by October 1. Add seats for more headroom. Code Review ✅ Approved🔴 High risk Adds v1.5.0 canary equivalence attestation with a narrow carry-forward rule and fail-closed comparison, requiring exact byte-identity on operational members and a closed allowlist of audit/release/docs changes. Comprehensive test coverage validates the retained-candidate comparison (10 changed / 335 unchanged members) and release-hygiene requirements. No issues found. Review coverageRules No rules evaluated OptionsDisplay: compact → Counting what did not apply, without listing it. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Gitar |
Codex audit (merge-authority lane)Head SHA: |
Claude audit (merge-authority lane)Head SHA: |
Problem and result
The accepted v1.5.0 paid completion and cancellation canaries used immutable candidate
3ac84902, while the later release-closeout source changed only audit publication, release-readiness, workflow templates, packaged release docs, and metadata. The existing qualification contract requires exact final-candidate bytes, but the authorized provider campaign has no remaining recovery creates.This PR adds a narrow v1.5.0 carry-forward rule and a fail-closed
compare-canary-surfaceattestation. It requires ancestor lineage, identical wheel inventory and metadata headers, byte-identical operational members, a closed ten-member audit/release/docs allowlist, exact-final-candidate private acceptance, audit-receipt replay, and count-preserved campaign evidence. Any Slack, supervisor, provider, CLI, persistence, state, dependency, entry-point, unknown, or added member change refuses carry-forward and requires newly authorized canaries.The current retained-candidate comparison passes with exactly ten changed members and 335 byte-identical members. This PR does not publish, tag, invoke Slack, or create a provider session. After merge, its own final candidate must be built once and compared directly with the retained canary candidate.
Validation
25 passed, 76 subtestsintests/test_release_v150.py363 passed, 945 subtestsin release-hygiene coverage70 passed, 378 subtestsin release identity and v1.4.2 regression coverage40 passed, 297 subtestsin audit-publication and package-lineage coveragegit diff --checkmigration release-readiness --json: PASSSupports #920 and #923.