Skip to content

fix(deps): bump vulnerable dependencies in every lockfile - #892

Merged
Kamirus merged 1 commit into
mainfrom
fix/security-deps-2026-10
Oct 14, 2026
Merged

Kamirus merged 1 commit into
mainfrom
fix/security-deps-2026-10

Conversation

@Kamirus

@Kamirus Kamirus commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Closes 76 of the 87 open Dependabot alerts, across root, blog/, cli/, cli-releases/frontend/, docs/ and frontend/, including 7 critical and 28 high. Two of the fixes ship in the CLI: smol-toml and undici.

Replaces the per-alert bot PRs #871, #872, #874, #880, #882, #883, #884, #885 and #886, and the Dependabot groups #857 and #867:

  • The bot PRs each fix one alert in one directory, but share lockfiles and overrides blocks, so every merge conflicts the rest. Together they cover 9 alerts.
  • #874 and #886 also commit tsc output (docs/src/pages/index-old.js, docs/src/components/HomepageFeatures/index.js) next to the .tsx sources, which gives Docusaurus two pages for /index-old.
  • The Dependabot groups fail npm ci: #867 with ERESOLVE (it pulls eslint-plugin-svelte 3.23, which needs a newer eslint than the root's 8.57), and #857 with a lockfile out of sync with package.json.

How

Every consumer stays inside its declared semver range, and no override is added. A pin moves only where it was the vulnerable version itself:

Pin Before After
fast-uri override, blog/ and docs/ 3.1.6 3.1.8
js-yaml override, frontend/ 4.3.1 4.3.2
dompurify, frontend/ 3.4.12 3.4.17
markdown-it, frontend/ and cli-releases/frontend/ 14.2.0 14.3.2
smol-toml, cli/ 1.7.1 1.9.1

qs needed one indirect step: express 4.22.2 and body-parser 1.20.6 pin it to ~6.15.1, below the 6.16.0 fix, so they move to 4.22.3 and 1.20.8, which take ~6.16.0.

In frontend/, npm update pruned the optional-peer entry svelte-check/node_modules/picomatch, so I restored it to keep the diff scoped, as in #856. npm ci installs the same tree either way.

CLI impact

smol-toml 1.9 rewrites the parser, which closes GHSA-r4xh-jqrq-34v2 (quadratic parse time). It returns null-prototype objects and rejects a few forms of invalid TOML that 1.7 accepted. readConfig only spreads and iterates the parsed tables, so the prototype change doesn't reach it. I parsed and re-stringified 1,387 TOML files from this repo, motoko-core, skills-internal and app with both versions: the output is identical. The only difference is the error message for one template file with a {{DEPENDENCIES}} placeholder, which both versions reject.

undici moves from 7.29.0 to 7.30.0 under jsdom's ^7.21.0. Both are in cli/CHANGELOG.md under ## Next.

What is still open

11 alerts have no fix that the dependents accept:

  • braces (3, high) and sprintf-js (3, medium): no patched release exists.
  • postcss-selector-parser GHSA-rj75-hqrm-r3gf (5, medium): fixed only in 7.1.6. The 7.x copies move to 7.1.6, but eslint-plugin-svelte (^6.1.0) and cssnano's plugins (^6.0.16) require 6.x. Those copies move to 6.1.4, which closes GHSA-w9m9-85wc-3x92. Forcing 7.x onto them would cross a major version for a build-time parser that only reads our own CSS.

🤖 Generated with Claude Code

Closes 76 of the 87 open Dependabot alerts across root, blog/, cli/,
cli-releases/frontend/, docs/ and frontend/. Every consumer stays inside
its declared semver range; only pins that were themselves vulnerable move
(fast-uri overrides in blog/ and docs/, the js-yaml override, dompurify and
markdown-it in frontend/, markdown-it in cli-releases/frontend/, and
smol-toml in cli/).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Kamirus
Kamirus requested review from a team and automation-sa-sre as code owners October 12, 2026 15:57
@github-actions

Copy link
Copy Markdown
Contributor

Cursor AI review

👍 APPROVE — looks safe to merge

Category Assessment Details
Summary ✅ In-range security bumps across root, CLI, frontend, docs, blog, and cli-releases lockfiles. The only published-CLI pins that move are smol-toml 1.7.1→1.9.1 and transitive undici 7.29.0→7.30.0; frontend also patches dompurify and markdown-it.
Code Quality ✅ No new helpers or speculative code. Pins move only where they already existed (cli/package.json, frontend/docs/blog overrides); no new overrides were added.
Consistency ✅ User-facing CLI pins are recorded under ## Next in cli/CHANGELOG.md. No commands, flags, or mops.toml keys changed, so docs and .agents/skills/mops-cli/SKILL.md correctly stay untouched.
Security ✅ Traced readConfig/writeConfig in cli/mops.ts (spread + Object.entries only; writeConfig JSON-roundtrips before TOML.stringify). No hasOwnProperty/instanceof Object on parsed tables. Frontend still sanitizes after markdown-it in frontend/logic/markdown-to-html.ts and PackageDocs.svelte. Pins only move up; no CI/workflow/auth/registry files changed.
Tests ✅ No snapshots changed, which matches a stringify-compatible parser bump. Existing exact-string write tests (cli/tests/add-remove-ergonomics.test.ts) and parse/resolve coverage (cli/tests/resolve-memo.test.ts, cli/tests/locked.test.ts, cli/integrity.ts readLocalDepEdges) exercise typical mops.toml. Transient-error tests in cli/tests/install-concurrency.test.ts do not depend on the npm undici package shape.
Maintainability ✅ Each package.json pin matches its lockfile (smol-toml 1.9.1, markdown-it 14.3.2, dompurify 3.4.17, fast-uri 3.1.8, js-yaml 4.3.2). Transitive site/build patches stay in-range (express 4.22.3 / qs 6.16.0, postcss-selector-parser 6.1.4 and 7.1.6).

Verdict

Decision: APPROVE
Risk: Low
Reason: Lockfile-only security patches with no source, workflow, or registry changes. The smol-toml 1.9 rewrite is the one production CLI concern, and readConfig/writeConfig plus existing exact-string mops.toml tests do not depend on the 1.9 null-prototype or the newly rejected invalid-TOML forms.


Generated for commit 4890602

@automation-sa-sre automation-sa-sre left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: the AI review verdict for 4890602 is APPROVE. See the "Cursor AI review" comment for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants