Repository navigation
fix(deps): follow-ups to the #1699/#1700/#1701 dependency reviews - #1702
Merged
Merged
Conversation
added 6 commits
October 7, 2026 13:08
The root dependencies block mirrors backend prod deps so npm hoists them, but the root range lagged at ^1.9.0, leaving a nested backend/node_modules/@opentelemetry/api@1.9.1 in the lockfile. Re-locked: the nested copy is gone and the hoisted copy is 1.9.1.
.npmrc sets engine-strict=true, and the locked tree already refuses older Node 22 releases: jsdom 28 and isomorphic-dompurify (backend prod deps) and eslint-visitor-keys require ^22.13.0; vitest 5, vite 8 and rolldown require >=22.12.0. Declaring >=22.0.0 promised installs that fail with EBADENGINE. Root goes to >=22.13.0; mcp-docs (own lockfile, floor 22.12.0 from vitest/vite/jsdom) to >=22.12.0.
…ents widen The root overrides for katex (mermaid wants ^0.16) and postcss-selector-parser (@tailwindcss/typography pins 6.0.10) exist only because the parents' own ranges exclude every patched release. Nothing noticed when that stops being true, at which point the override is dead weight or forces a downgrade. The invariants test now reads each parent's spec from the lockfile and fails with 'mermaid widened its katex range to X — drop the override' once it admits a patched version. Also renames the sharp floor test to say what it checks (sharp >= 0.35.5, not the bundled librsvg version).
Regression guard for GHSA-qqmp-wf37-98f9. A child process registers the real auto-instrumentations (configured as startTelemetry() does) with an in-memory exporter before pg is loaded, runs a query against the test database, and asserts the pg.query span exists while no span carries db.user or the connection's username. Fails on instrumentation-pg 0.72.0 (db.user on pg.connect and pg.query), passes on 0.73.0.
…mentation claim ADMIN-GUIDE → OpenTelemetry now lists the span-attribute renames and the HTTP metric rename + unit change from the 0.221 OTel release (http.server.duration ms → http.server.request.duration s, same for client). Code comments and PERFORMANCE.md claimed Fastify auto-instrumentation, but neither @opentelemetry/instrumentation-fastify nor @fastify/otel is installed; Fastify requests are HTTP server spans.
…in the runbook CHANGELOG [Unreleased]: add the GHSA IDs for the fast-copy and transitive updates (verified against the repo's Dependabot alerts), the HTTP metric rename/unit change, and the Node floor. client-inference runbook: sharp 0.35.5 with @img/sharp-libvips 1.3.4 (librsvg 2.63.2) and GHSA-wq5f-xc86-pv6w.
Merged
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
Follow-ups to the review of the merged dependency PRs #1699 (OpenTelemetry), #1700 (transitive bumps) and #1701 (fast-copy).
#1699 — OpenTelemetry
@opentelemetry/instrumentation-http0.220.0 defaults to old semconv:http.server.durationandhttp.client.duration, unitms. 0.221.0 creates onlyhttp.server.request.durationandhttp.client.request.duration, units, and has no opt-out. undici 0.31.0 emitshttp.client.request.durationin seconds.[Unreleased] → Securitynow covers the rename, the unit change and the 1000× threshold trap.docs/ADMIN-GUIDE.md→ OpenTelemetry gains a table of old → new names for both span attributes and metrics.docs/PERFORMANCE.mdlinks to it.db.user. Addedbackend/src/telemetry.integration.test.ts.NodeSDKwith the realgetNodeAutoInstrumentations(same config asstartTelemetry()). It uses sdk-node's owntracing.InMemorySpanExporter, so no new dependency.pgis loaded; the child then runsSELECT 1against the worker test database.pg.query:*span exists, that no span hasdb.useror an attribute value equal to the connection's username, and thatdb.system.name = postgresql.@opentelemetry/apiwas^1.9.0but backend's is^1.9.1. Root is now^1.9.1and the lockfile is re-locked. The diff only removesbackend/node_modules/@opentelemetry/apiand moves the hoisted copy from 1.9.0 to 1.9.1.@opentelemetry/instrumentation-fastifynor@fastify/otelis installed. The text now says HTTP/undici/pg/Redis, and that Fastify requests show up as HTTP server spans. Fixed intelemetry.ts,telemetry-register.tsand its test's doc comment, theDockerfilecomment, andPERFORMANCE.md. No new dependency.#1700 — transitive bumps
dependency-security-invariants.test.tsnow reads each parent's own spec from the lockfile:mermaid→katex(^0.16.47) and@tailwindcss/typography→postcss-selector-parser(6.0.10).<parent> widened its <dep> range to X — drop the override in package.jsonas soon as that range admits a patched version (≥ 0.18.2 / ≥ 7.1.6).semveris only in the tree as lighthouse's hoisted 5.7.2 and is not declared, so the test doesn't use it.^,~, x-ranges, comparator sets and||. It throws on forms it can't evaluate, so a range it doesn't understand can't silently switch the check off. Table cases cover its boundaries.sharp0.35.5 with@img/sharp-libvips-*1.3.4 (librsvg 2.63.2, libheif 1.23.5, read from the installedversions.json) and added GHSA-wq5f-xc86-pv6w.gh api repos/Compendiq/compendiq-ce/dependabot/alerts(state=fixedandstate=open).engines.nodewas below what the tree enforces. I checked everyengines.nodein the lockfile with semver. The real root floor is 22.13.0, not 22.12.0: jsdom 28 and isomorphic-dompurify (backend prod deps) and eslint-visitor-keys require^20.19.0 || ^22.13.0 || >=24.>=22.13.0.mcp-docs(its own lockfile; floor 22.12.0 from vitest, vite and jsdom) is now>=22.12.0.CONTRIBUTING.mdare updated. There is no.nvmrc. CI readsnode-version-file: package.json, which still resolves to the newest matching Node.Verification
npm run typecheck: exit 0.npm run lint: exit 0.--maxWorkers=4):Test Files 446 passed (446),Tests 7164 passed | 3 skipped (7167).extract-document.test.tshitConnection terminated due to connection timeoutinrunMigrationsduring worker setup. The file passed on its own (28/28) and in the full rerun above.telemetry.integration.test.tsfails before and passes after. With@opentelemetry/instrumentation-pg0.72.0 swapped in temporarily, it fails withexpected [ 'pg.connect db.user', 'pg.query:SELECT kb_creator_test_w1 db.user' ] to deeply equal []. With 0.73.0 it passed 3 of 3 runs. The installed package was restored afterwards.katex: ^0.19.0andpostcss-selector-parser: ^7.0.0, both cases fail. Messages:mermaid widened its katex range to ^0.19.0 — drop the override in package.jsonand@tailwindcss/typography widened its postcss-selector-parser range to ^7.0.0 — …. With the real lockfile they pass (23/23 in the file).