build(deps): exclude fastq@1.20.2 from the npm trust policy, reviewed - #738
build(deps): exclude fastq@1.20.2 from the npm trust policy, reviewed#738wenzowski wants to merge 1 commit into
Conversation
`fastq@1.20.2` was published without the SLSA provenance its 1.20.0 and
1.20.1 predecessors carry, so mise's `no-downgrade` trust policy refuses
the pinned `npm:renovate` and every `ci` job in this repository dies in
tool install before compiling a line. The pin has not moved; what changed
is upstream metadata on a transitive dependency.
REVIEWED BEFORE EXCLUDING, which is what the table's own comment reserves
for a person rather than an agent. Four checks, all clean:
* the npm `gitHead` `4cdcc374...` is exactly `refs/tags/v1.20.2` in
`mcollina/fastq`;
* `diff -r` of the published tarball against a clone at that tag
reports no differing file — only ordinary pack exclusions;
* `package.json` declares no install, preinstall or postinstall script
and no `bin`;
* the one dependency, `reusify@^1.0.4`, is unchanged.
And the missing attestation explains itself: the tarball ships a stray
`.nyc_output/` whose `processinfo` records
`cwd: /home/matteo/repositories/fastq` and a local `tape` invocation, so
this is a hand publish off the sole maintainer's own workstation rather
than through the OIDC release workflow. The same benign case the two
existing exclusions record, and the one the policy names.
NARROW BY VERSION, as the two above are. A bare `fastq` would exempt
every future release and `npm.shell_out=true` would switch the whole
check off; neither is used, so the next unreviewed downgrade in any
package — fastq included — is refused again.
Shown able to fail on the one thing that changed: `mise install
npm:renovate` was red before and exits 0 after.
The residual is stated rather than hidden: a tarball matching its tag and
doing nothing at install time is a weaker claim than the attestation it
substitutes for, and nothing checkable from here covers the publishing
workstation. Reporting the dropped provenance upstream is still open on
the row.
Closes CLOUD-1136
CLOUD-1136 `fastq@1.20.2` lost its provenance upstream, so mise's no-downgrade trust policy refuses the pinned `npm:renovate` and every PR's `ci` job dies in tool install
Why Every Observed 2026-08-29T01:59:59Z on run 33227753755, job This is a property of the world, not of any commit
So this is The remedy is a reviewed, version-scoped exemption
"npm:renovate" = { version = "41.173.1", trust_policy_excludes = [
"@yarnpkg/core@4.4.4",
"@yarnpkg/libzip@3.2.2",
] }
That is the design working: a third exclusion is refused until a human performs the review. Adding Fixed in PR #734, not filed-and-left: the review below was performed, recorded in this row's comments, and the narrow Refinement — Ready Refinement gate: Definition of Ready & Done. This body carries only specializations.
Acceptance
Filed from CLOUD-1030's session, whose PR this blocked. Not fixed here because the remedy is the supply-chain review Generated by Claude Code |
|
Warning Review limit reachedNext included review available in 27 minutes. View limit detailsLimit details: You’ve used the included review currently available. Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Free Run ID: 📒 Files selected for processing (1)
Note 🎁 Summarized by CodeRabbit FreeYour organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/settings/billing. Comment |
|
❌ The last analysis has failed. |
Closing: superseded on
mainwhile this was in flight. CLOUD-1136 was fixed by another session, and that fix is strictly better than this one.origin/mainatec2c9c15already carriesfastq@1.20.2intrust_policy_excludes, and its comment covers everything this PR's did plus three things it did not:SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U), which is a stronger identity check than the maintainer-name comparison here;aube_argsonly applies under a different package manager, andMISE_MINIMUM_RELEASE_AGEgoverns tool selection rather than transitive npm resolution;fastq@1.20.2anyway (fastq arrives transitively under a caret range, so no top-level pin decides it) and it breaksrenovate-config-validator, because renovate 44 readsRENOVATE_CONFIGas inline JSON5 while this repo's task uses that name for a path seam.The two reviews agree independently on the finding that matters — same
gitHead, matching the realv1.20.2tag, a manual publish by the sole maintainer outside the OIDC workflow, benign. That agreement is worth something, but it does not justify a second commit touching the same six lines.The evidence gathered here is on CLOUD-1136 as a comment and stays useful there: the tarball-versus-tag
diff -r(no differing file), the absence of any install/preinstall/postinstall script orbin, and the.nyc_output/artifact recordingcwd: /home/matteo/repositories/fastq— the direct evidence of the hand publish, which the landed comment infers rather than shows.No code from this branch is lost, because none of it should land. Nothing else was on it.