chore(deps): refresh the dependency tree, undici 8 and the iconify v2 packs - #1572
Conversation
undici 7 -> 8 in the daemon and the relay. The whole surface either package uses
is `fetch`, `ProxyAgent` and the `Dispatcher` type, but two things ride along:
undici 8 negotiates HTTP/2 by default, so Slack egress now uses h2 where the
server offers it, and `@slack/socket-mode` still declares `undici@^7` as a peer.
Every symbol it imports — `WebSocket`, `ping`, `CloseEvent`, `ErrorEvent`,
`MessageEvent`, `fetch` — is unchanged in 8, so that range is stale rather than
the API broken; `pnpm peers check` reports it and installs are unaffected.
@iconify-icons/{logos,ph} 1.x -> 2.0.0 in the console. The packs rename as they
major: `logos/gitlab` is now the LOGOTYPE (tanuki + wordmark, ~4.6:1) and the
mark moved to `logos/gitlab-icon`, so GitlabMark follows it, matching
`slack-icon` beside it. Left alone the GitLab mark would draw a 512x111 wordmark
inside a square 9px slot.
The mark test pinned the artwork's hex case, which upstream also changed, so it
compares case-insensitively now — and it pins the SHAPE too, because the
logotype carries the same brand triad and color alone no longer tells the two
apart. That aspect check is what would have caught this swap.
v2 also points every icon subpath at one shared `data.d.ts`, so two icons from
one pack resolve to the same file and read as a duplicate import; the rule is
off for the one file that does that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No manifest change: every move here is inside a range the manifests already declare, so this is simply what `pnpm update -r` resolves today. Nothing has refreshed the tree on its own — there is no bot on this repo and the lockfile only moved as a side effect of feature work — so it had drifted a long way. The refresh clears the audit backlog: 20 high / 8 moderate / 1 low become 6 high / 0 / 0. What carried each fix: - @fastify/static path traversal and authorization bypass, through @fastify/swagger-ui 6.1.0 -> 6.1.1, which moves @fastify/static 9 -> 10 - fast-uri host confusion, through fastify 5.10.0 -> 5.12.1 - postcss arbitrary file read, through next 16.2.11 -> 16.3.3, which pins postcss 8.5.23 - hono, including `memo()` retaining SSR output across requests, through the mem0 plugin's @modelcontextprotocol/node reaching hono 4.13.5 - dompurify, through posthog-js 1.407 -> 1.422 - nanoid, brace-expansion, js-yaml, find-my-way and valibot, through vitest, eslint 10.9.1 and prisma 7.10 The six that remain are either dev-only inside promptfoo's tree or have no published fix. image-size has no 2.0.3, and its two DoS advisories sit in the ICNS, JXL and HEIF parsers, which the icon upload path cannot reach: it allowlists PNG, JPEG and WebP by magic bytes before it ever calls `imageSize`. Beyond the advisories the notable moves are prisma 7.10 across client, adapter and instrumentation; lucide and lucide-react together at 1.35, so the control plane and the console stay on one icon set; eslint 10.9.1 with typescript-eslint 8.68; and @larksuiteoapi/node-sdk 1.73, grammy 1.46 and pg 8.23. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Approved — I found no blocking regressions in this revision.
The Undici 8 change is contained to the existing fetch / ProxyAgent / Dispatcher seams, and the repository’s Node floor satisfies Undici 8’s engine requirement. The remaining @slack/socket-mode peer-range warning is accurately disclosed and is a reasonable real-workspace smoke-test item rather than a blocker for this active-development project. The Iconify v2 adaptation selects the square gitlab-icon, and the updated test now protects the shape distinction that matters.
I also checked the full dependency refresh rather than treating it as opaque: the lockfile parses successfully under the pinned pnpm, git diff --check is clean, and the build, check, Linux unit, integration, daemon-store, evaluation, and sandbox CI paths are green. The Windows unit job was still pending when I completed the review.
sent by review-bot (Codex · gpt-5.6-sol) · open in session
Two commits, in order: the two major bumps that needed source changes, then the lockfile refresh that needed none. They read much more easily apart than as one diff.
Nothing refreshes this tree on its own — there is no dependency bot here, and the lockfile has only ever moved as a side effect of feature work — so it had drifted a long way.
1. undici 8 and the iconify v2 icon packs
undici7 → 8 in the daemon and the relay. The whole surface either package uses isfetch,ProxyAgentand theDispatchertype, but two things ride along and a reviewer should see both:allowH2: falsewould keep the old wire behavior, and is deliberately not done here — that default is most of what the major is.@slack/socket-modestill declaresundici@^7as a peer — 3.0.1, the current release, too — sopnpm peers checknow reports one unmet peer. Every symbol it imports (WebSocket,ping,CloseEvent,ErrorEvent,MessageEvent,fetch) is unchanged in undici 8, so the range is stale rather than the API broken, andstrict-peer-dependenciesis off, so installs and CI are unaffected. Socket Mode is the daemon's Slack ingress and the unit suites mock the SDK, so this is the one thing worth a real-workspace smoke test before it ships.@iconify-icons/{logos,ph}1.x → 2.0.0 in the console. The packs rename as they major:logos/gitlabis now the LOGOTYPE (tanuki + wordmark, 512×111) and the mark moved tologos/gitlab-icon(256×247).GitlabMarkfollows it, matchingslack-iconbeside it. Left alone, the GitLab mark would draw a wordmark inside a square 9px slot.The existing mark test did catch this, but only by accident: it asserted the artwork's hex case, which upstream also changed. Both variants carry the brand triad, so color alone no longer separates them — the test now compares hex case-insensitively and pins the shape instead, which is what actually catches a swap like this.
v2 also points every icon subpath at one shared
data.d.ts, so importing two icons from one pack resolves to the same file and reads as a duplicate import;import-x/no-duplicatesis off for the one file that does that.Verified in the running console: the GitLab card renders
viewBox="0 0 256 247"in a square 9×9 box.2. Lockfile refresh
No manifest change — every move is inside a range the manifests already declare, so this is what
pnpm update -rresolves today.pnpm audit: 20 high / 8 moderate / 1 low → 6 high / 0 moderate / 0 low. What carried each fix:@fastify/staticpath traversal + authorization bypass@fastify/swagger-ui6.1.0 → 6.1.1 (moves@fastify/static9 → 10)fast-urihost confusionfastify5.10.0 → 5.12.1postcssarbitrary file readnext16.2.11 → 16.3.3 (pinspostcss8.5.23)hono, incl.memo()retaining SSR output across requests@modelcontextprotocol/nodereachinghono4.13.5dompurifyposthog-js1.407 → 1.422nanoid,brace-expansion,js-yaml,find-my-way,valibotvitest,eslint10.9.1,prisma7.10The six that remain are either dev-only inside promptfoo's tree or have no published fix.
image-sizehas no 2.0.3, and its two DoS advisories sit in the ICNS, JXL and HEIF parsers, which the icon upload path cannot reach:validateIconUploadallowlists PNG, JPEG and WebP by magic bytes before it ever callsimageSize, under a 512 KB cap.Beyond the advisories, the moves worth knowing:
prisma7.10 across client / adapter / instrumentation;lucideandlucide-reacttogether at 1.35, so the control plane and the console stay on one icon set;eslint10.9.1 withtypescript-eslint8.68;@larksuiteoapi/node-sdk1.73,grammy1.46,pg8.23.Deliberately not taken:
typescript7 (typescript-eslint 8.68 still peers<6.1.0),@types/node26 (the runtime is Node 24 everywhere —.nvmrc,engines, every image),conventional-changelog-conventionalcommits10 (rebuilt on@conventional-changelog/template, while release-notes-generator still wantsconventional-changelog-writer@^8), andprisma8 (RC only).Testing
pnpm typecheck,pnpm lint(zero warnings),pnpm format:checkandpnpm buildall pass — including the daemon, cli and setup self-contained assertions and the console's production build.Suites: relay, control-plane, web, cli, setup, protocol, message, connection, activation-policy, k8s-client, observability, memory-plugin-mem0 and the release scripts all pass.
The daemon suite reports 13 failures in
shim-workspace-files,shim-exec-handlerandshim-cancellation. These are pre-existing and macOS-only — restoring the original lockfile reproduces exactly the same 13 — and CI does not run them on macOS. The cause is the root fence comparing a canonicalized root against a lexical target, which only diverges wheretmpdir()is a symlink (/var/folders→/private/var/folders). Untouched by this PR, worth its own fix.Control-plane
test:intwas not run locally (needs Docker); CI covers it.🤖 Generated with Claude Code