feat(release): add deterministic artifact integrity manifest - #616
Draft
seonghobae wants to merge 14 commits into
Draft
feat(release): add deterministic artifact integrity manifest#616seonghobae wants to merge 14 commits into
seonghobae wants to merge 14 commits into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Buyer / acquisition-readiness objective
This bounded release-readiness slice gives operators a deterministic, source-revision-bound SHA-256 manifest for built release artifacts before release/tagging. It is an integrity receipt only: it does not claim signed provenance, SLSA level, SOC 2 status, or certification, and it complements rather than replaces cryptographic provenance/attestation.
Exact current identity
develop@2c328875e00e86537df3e965170be80532571cad;b427cd455f41e7c09ae20fbbf400d42c4f61d4bf;feat/release-artifact-manifest;Any head or protected-base movement invalidates head/base-sensitive evidence until freshly regenerated. This body is traceability, not merge authority.
Implemented release-integrity slice
The branch implements and tests deterministic artifact ordering, exact 40-hex source-revision binding, logical artifact identities with SHA-256 and byte length, a canonical manifest self-digest, key-order-invariant verification, tamper/source-revision failure, regular-file/symlink safeguards, duplicate/traversal-like name rejection, streaming hashing, bounded non-secret CLI envelopes, malformed-manifest fail-closed behavior, and pathname-identity checks around opened manifest/artifact handles.
The operator contract remains intentionally narrow: unsigned local integrity metadata only, without signing keys, secrets, gate bypasses, or a competing provenance format.
Test-first repair evidence
Earlier RED/GREEN stages established canonical nested artifact digest serialization and safe handle-bound manifest reads. A fresh current-source regression then exposed an analogous artifact-path replacement gap:
d3018a44d55a8ce6fadda67a6b53315ab289904a: Server Tests run33072327214,unit-and-apijob98517475339, failed because the realisticrelease-artifact-path-racehook was never invoked (0 !== 1). The production verifier hashed an already-open inode but neither exposed the artifact-open test seam nor verified that the pathname still resolved to that inode after open/read.ea9472e90bdb9de1365f69e385aeb98bdedb0178wiresafterArtifactOpenthrough verification, compares opened-handle identity with pathname identity immediately after open and after hashing, and mapsartifact_changed_during_readto the actionablerebuild_release_artifactsoperator response.b427cd455f41e7c09ae20fbbf400d42c4f61d4bfchanges only the accompanying doctoring/traceability after that production repair; the release-manifest production bytes are unchanged fromea9472e9....33074287282is terminal success;unit-and-apijob98524314560andcloud-e2ejob98524314566are successful. The unit log explicitly recordsrelease artifact manifest tests passedandrelease artifact pathname replacement regression passed. Fuzz33074287171, Dependency Review33074287204, OSV33074287876, Security Scan33074287182, and SAST Semgrep33074287175are also terminal success.This is behavioral GREEN, not merge-authorizing exact-head provenance: current Server Tests checked out synthetic merge
a3d19c4169cb1f2710be288827cb05b0a4031407(b427cd45...merged into protected base) rather than the immutable contributor SHA. Protecteddevelopstill lacks the repository exact-head Server Tests/coverage repair owned by #523, and organization-reusable SAST/Security exact-head integrity remains owned byContextualWisdomLab/.github#1222/ its canonical owner PR path. Predecessor, synthetic-only, or status-only evidence is non-authorizing.Standards boundary
The doctoring record cites the approved SLSA v1.2 provenance model and GitHub artifact-attestation guidance. This local manifest is explicitly unsigned integrity metadata; cryptographic provenance remains an independent release gate.
Merge gate
Remain Draft until one unchanged exact head against the then-current protected base simultaneously has repository-owned exact-head deterministic/browser/100%-owned statement-branch-function-line coverage/docstring evidence, corrected central exact-head SAST/Security evidence, every applicable dependency/supply-chain/security/package/provenance gate terminal-passing, zero valid unresolved findings, and the live ruleset's qualifying independent current-head approval.
Pending, queued, skipped-required, cancelled, absent, neutral-required, failed, stale, predecessor, synthetic-only, status-only, author-only, or model-only evidence is non-authorizing.
Refs #523
ContextualWisdomLab/.github#1222