Skip to main content
← Back to list
01Issue
FeatureOpenSwamp CLIPublic
AssigneesNone

Relationships

#3352 extension push: audit the dependency versions the bundle actually ships (pinned facts, deno info resolution, JSR existence)

Opened by skunk-ape · 10/13/2026

Part C (#3352, release 2, swamp) of the extension dependency trust plan (#3350–#3354). Plan: Extension dependency trust plan (https://claude.ai/code/artifact/c333312a-ca26-4056-a7f2-cabd7f30457c).

Problem

The push gate audits something other than what ships.

  • Facts come from latest. fetchNpmFacts reads dist-tags.latest for deprecation, license, maintainers and publish date. Only OSV uses the pinned version. So a pin to a deprecated old version passes, and a good pin fails when latest is deprecated.
  • Unpinned and range specifiers are guessed. With no version, latest is audited. A range (^1.2) is sent to OSV as if it were a version, and can match nothing.
  • JSR is never audited. Every jsr: dependency is marked passed without a lookup.

Change

  1. The pinned version's facts. Read versions[<resolved>] for deprecation, license, maintainers and publish date.
  2. What the bundle resolves. Run deno info --json on each entry point, with the same config and lockfile settings deno bundle uses (src/domain/models/bundle.ts: --config when the extension has a deno.json, otherwise no lock). Audit those resolved npm and JSR versions. Each unpinned or range specifier gets a finding that names the version this push bundled.
  3. JSR. The package and version must exist: missing is an error (the push would fail to resolve anyway). A yanked version is a warning. OSV has no JSR data, so there's no vulnerability check.
  4. Severity. A deprecated pin and an unpinned or range specifier are warnings in this release. #3354 makes them errors after a two-week window. A missing JSR version is an error now.

Depends on

#3350.

Acceptance

  • Unit tests: a pinned deprecated version; latest deprecated with a good pin; unpinned; ^/~ ranges; an exact version; a subpath import; with and without a deno.json and lockfile; JSR present, yanked and missing.
  • A UAT item covers the deprecated-pin warning, the range warning naming the resolved version, and a missing JSR version. Its tests skip themselves until the binary has the capability.
  • Release notes, plus a notice to publishers whose latest version would block once #3354 ships.
02Bog Flow
◉OPEN○TRIAGED○IN PROGRESS○SHIPPED

Open

10/13/2026, 2:31:21 PM

No activity in this phase yet.

03Sludge Pulse

Sign in to post a ripple.