docs(decisions): Add ADR 0082 pinning the publish-stage npm CLI version - #99
Merged
Conversation
ADR 0082 decides that the floating, node-24-bundled npm provisioning is replaced by an explicitly pinned, integrity-verified npm distribution selected from a reviewed allowlist, with a bump procedure requiring an npm-internals diff-review checklist and per-version compatibility fixtures. Motivation: the issue #97 remediation mechanism depends on npm internals (oidc.js flow, config exclusive semantics, publishConfig flatten timing, sigstore-js major) that already vary across the currently allowed range (11.5.1/11.17.0/12.0.2), and the fourth dogfood showed fail-closed read-back protects acceptance but not registry state (0.1.2 is permanently burned). The decision completes the builder-owned npm principle (ADR 0016/0017) and the recorded pinned-setup intent of ADR 0027, and makes the specification's per-version fixture obligation satisfiable. Relations: partially-supersedes ADR 0027's npm provisioning clause (reverse edge added); see-also ADR 0016/0017/0029/0081 (reverse edges added). Accepted ADR bodies are untouched; only frontmatter relations were updated. adr-relations-check: 83 ADRs, 184 edges, NO PROBLEMS. Signed-off-by: Yunseo Kim <git@yunseo.kim>
Rescope the decision per review: the npm pin applies to the publish job only; build-stage npm selection stays with the Node.js 24 toolchain npm and remains governed by ADR 0016/0017/0027 unchanged. The publish-side contract changes from exact equality with the build-time runtime.npm_version record to validation against the reviewed allowlist pin, since build and publish npm versions now diverge by design. The ADR 0027 partial-supersession scope narrows to the publish-stage npm provisioning clause. Retitle the ADR and filename accordingly and update both index READMEs. Signed-off-by: Yunseo Kim <git@yunseo.kim>
Signed-off-by: Yunseo Kim <git@yunseo.kim>
yunseo-kim
force-pushed
the
docs/adr-0082-npm-version-pinning
branch
from
August 16, 2026 14:47
d63f058 to
6c1b1ef
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.
Summary
Adds ADR 0082, deciding that the publish-stage npm CLI is provisioned as an explicitly pinned, integrity-verified distribution selected from a reviewed allowlist, replacing the current floating node-24-bundled npm on the publish job only. Build-stage npm selection is unchanged and remains governed by ADR 0016/0017/0027.
oidc.jsflow,buildMetadata()branch structure,@npmcli/configexclusive enforcement,publishConfigflatten timing, sigstore-js major) plus per-version compatibility fixtures.runtime.npm_versionrecord, since build npm (toolchain, floating) and publish npm (pinned) diverge by design. Build continues recording its actual npm inruntime.npm_version.partially-supersedes ADR-0027scoped to the publish-stage npm provisioning clause (reverse edge added),see-alsoADR 0016/0017/0029/0081 (reverse edges added).docs/decisions/README.mdandREADME.ko.md.oidc.jsstructure, exclusive env carve-out, sigstore-js v3–v5). The fourth dogfood showed fail-closed read-back protects acceptance but not registry state (@windlass/vers-js@0.1.2is permanently burned). A floating toolchain under a source-dependent publish mechanism leaves the verification surface open, and a node-24 image update is a correlated-failure vector for all callers. The decision completes the builder-owned npm principle (ADR 0016/0017) and ADR 0027's recorded pinned-setup intent on the publish path, and makes the specification's per-version fixture obligation satisfiable. Upstream fix: provenance-file takes precedence over OIDC auto-generated provenance npm/cli#9882 adoption becomes a deliberate pinned bump.adr-relations-checkpasses (83 ADRs, 184 edges, NO PROBLEMS); prettier and markdownlint clean.Related Issues
Change Type
Changelog
Changelog update:
Checklist
General
type(scope): SummaryProtocol / Compatibility Impact
Testing
Describe test evidence:
adr-relations-checkreports 83 ADRs / 184 edges / NO PROBLEMS; prettier and markdownlint clean ondocs/decisions/; verified via git diff that existing ADRs changed only in frontmatterrelations(bodies immutable per convention).Documentation
Rollout / Risk
Reviewer Checklist