conformance-kit ships gates/vuln-gate.mjs, which repos that vendor the kit run as their own dependency check. As of the org-wide rollout (#2), those repos also run the shared osv-scan lane. Two dependency gates, different databases, different postures.
How this surfaced
site#173 is red on conformance:
node vendor/conformance-kit/gates/vuln-gate.mjs
✗ vuln-gate: 3 known critical/high in all deps (0 critical, 3 high) · threshold 0
Pre-existing and unrelated to that PR — but it means the vendored gate has been there all along, and is currently failing. Worth recording against infra#104's premise that "no repo had any dependency scanning": true in effect, wrong in detail. That premise has now been corrected three times (the deno.lock gap, required-baseline.yml being inert, and this).
The actual differences
|
vuln-gate.mjs |
osv-scan lane |
| source |
npm audit-shaped |
OSV database |
| scope |
vendored per repo, npm only |
every ecosystem osv-scanner supports + deno.lock npm subset |
| threshold |
$VULN_THRESHOLD, counts critical/high |
any known vulnerability |
| posture |
hard-fail at threshold |
hard-fail, with report-only adoption grace |
| bump path |
re-vendor the kit per repo |
one pin edit, fleet-wide |
Redundancy here is not automatically bad — the two consult different advisory sources, and a finding in one that the other misses is real signal. The problem is that nobody has decided, so repos will drift into having two gates with different thresholds and no stated relationship.
Options
- Coexist, documented. Keep both, write down which is authoritative for merge-blocking and which is advisory. Cheapest; leaves two things to maintain.
- Shared lane supersedes. Remove
vuln-gate from the kit, point vendoring repos at osv-scan. One definition, but drops npm-audit coverage that OSV may not duplicate.
- vuln-gate becomes an osv-scan caller. The kit stops implementing scanning and just calls the shared workflow. Preserves the kit's interface, single implementation underneath.
Done when
conformance-kitshipsgates/vuln-gate.mjs, which repos that vendor the kit run as their own dependency check. As of the org-wide rollout (#2), those repos also run the sharedosv-scanlane. Two dependency gates, different databases, different postures.How this surfaced
site#173 is red on
conformance:Pre-existing and unrelated to that PR — but it means the vendored gate has been there all along, and is currently failing. Worth recording against infra#104's premise that "no repo had any dependency scanning": true in effect, wrong in detail. That premise has now been corrected three times (the deno.lock gap,
required-baseline.ymlbeing inert, and this).The actual differences
vuln-gate.mjsosv-scanlane$VULN_THRESHOLD, counts critical/highreport-onlyadoption graceRedundancy here is not automatically bad — the two consult different advisory sources, and a finding in one that the other misses is real signal. The problem is that nobody has decided, so repos will drift into having two gates with different thresholds and no stated relationship.
Options
vuln-gatefrom the kit, point vendoring repos atosv-scan. One definition, but drops npm-audit coverage that OSV may not duplicate.Done when
conformance-kit(unknown — needs an org-wide code search, which a repo-scoped agent session can't run)site's 3 pre-existing highs are cleared or accepted with a written reason (separate from this decision — see the remediation queue)