docs(spec): harden the release and dependency supply chain - #30
Draft
antstanley wants to merge 2 commits into
Draft
docs(spec): harden the release and dependency supply chain#30antstanley wants to merge 2 commits into
antstanley wants to merge 2 commits into
Conversation
antstanley
force-pushed
the
spec/harden-release-supply-chain
branch
2 times, most recently
from
August 5, 2026 08:22
f2a7343 to
9e9ca4b
Compare
antstanley
changed the base branch from
main
to
spec/eliminate-secret-leakage-logs-spans
August 5, 2026 08:22
antstanley
marked this pull request as draft
August 5, 2026 08:25
This was referenced Aug 5, 2026
antstanley
force-pushed
the
spec/harden-release-supply-chain
branch
from
August 5, 2026 09:00
9e9ca4b to
e744d3b
Compare
antstanley
force-pushed
the
spec/eliminate-secret-leakage-logs-spans
branch
from
August 5, 2026 09:00
39283a4 to
c398ab3
Compare
antstanley
force-pushed
the
spec/harden-release-supply-chain
branch
from
August 5, 2026 11:29
e744d3b to
c6d5c2b
Compare
antstanley
force-pushed
the
spec/eliminate-secret-leakage-logs-spans
branch
from
August 5, 2026 11:29
c398ab3 to
7814df6
Compare
antstanley
force-pushed
the
spec/harden-release-supply-chain
branch
from
August 5, 2026 12:01
c6d5c2b to
e3cda33
Compare
antstanley
force-pushed
the
spec/eliminate-secret-leakage-logs-spans
branch
from
August 5, 2026 12:01
7814df6 to
a308cc3
Compare
antstanley
force-pushed
the
spec/eliminate-secret-leakage-logs-spans
branch
from
August 15, 2026 21:39
a308cc3 to
563e998
Compare
antstanley
force-pushed
the
spec/harden-release-supply-chain
branch
from
August 15, 2026 21:39
e3cda33 to
5ba2c80
Compare
antstanley
changed the base branch from
spec/eliminate-secret-leakage-logs-spans
to
main
August 15, 2026 21:40
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code <noreply@letta.com>
antstanley
force-pushed
the
spec/harden-release-supply-chain
branch
from
August 16, 2026 17:16
db87a10 to
ef313b6
Compare
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.
Note
Stacked PR 14 of 16 — part of stack #35, which targets
main.Base: #31 (
spec/eliminate-secret-leakage-logs-spans) · Followed by: #34This PR's diff shows only its own change. Merge the stack bottom-up; do not merge this before its base.
Why it sits at position 14: Distribution and CI surfaces. Mutually scoped with #25 on the installer: #25 owns the checksum fail-open, this owns the
--versiontraversal, signing and attestation.Scope of this PR
This PR currently carries the change spec. It will also carry the implementation plan and the build work for that spec — plan and code land as later commits on this same branch, so the spec, its plan, and its implementation review and merge as one unit.
Review order within the PR: spec first, then plan, then implementation.
Change spec proposing hardening of the release and dependency supply chain.
Problem. Eleven confirmed findings across four surfaces: the
publish-npmjob resolves dependencies at run time while holdingid-token: writepublishing rights;release.ymlcarries one workflow-levelpermissionsblock instead of per-job least privilege; release installs bypass the committed lockfile; two of four distribution channels ship with no build provenance; there is no dependency-advisory gate, so a lockfile that fails an advisory check today surfaces nothing; andinstall.shinterpolates its--versionoperand into a download URL without validation.Proposed delta.
permissions:blocks, withpublint/attwmoved out of the publishing job into apermissions: {}validation job.--frozen-lockfileon every release install, after regenerating the stale Node lockfile.actions/attest-build-provenanceon the binary and container builds — the two channels lacking what npm--provenanceand PyPI Trusted Publishing already give the other two — withinstall.shverifying viagh attestation verifyand failing loudly rather than silently.--versionoperand before any URL is constructed.cargo denyadvisory gate backed by a newdeny.toml, with a stated policy — no entry fails the build; an entry carrying a reachability rationale and an expiry warns until that expiry — plus a resolved-graph dependency-policy check for the pre-release crypto crates.Corrections to the scan, from reading the workflows and manifests.
publish-npm(npm@latest,@napi-rs/cli,npx --yes publint,npx --yes @arethetypeswrong/cli), not five. The fifth cited site is an unfrozen install of the Lambda dependency graph — a different defect, also fixed here.bindings/python/Cargo.toml:12pins"0.22", so nocargo updatecan reach either fix — this needs a version bump, not a refresh.rsa 0.10.0-rc.18.g4-no-dependency-advisory-gate-in-cidescribes it as a dev-only edge that does not ship;crates/adapters/Cargo.toml:19declares it under[dependencies](and separately at:40under[dev-dependencies]), so it does ship. The spec follows the code. This does not make RUSTSEC-2023-0071 reachable — all fourRsaPrivateKey::newsites remain#[cfg(test)]— but the crate is in the shipped graph, not only the test graph.--no-frozen-lockfileis release-only.ci.ymluses plainpnpm install, which pnpm freezes automatically under CI.rsa 0.10.0-rc.18starts atCargo.lock:3714;verify_rsa_pkcs1v15atkms/mod.rs:269;setup.shkey generation at:9-16.Cross-reference note. The installer's checksum verification failing open is owned by
2026-08-05-fail_closed_across_config_and_adapters.md(#25) and is cross-referenced rather than restated. That file is not onmainyet, so the two links resolve once #25 merges.Drafted with the
spec-creatorplugin from a deep security scan of the repository at53cbdec9. Spec only — no source, workflow, or.gitignorechanges.