Repository navigation
chore(deps): Radix 1.3, Biome 2.6, PostHog, pierre/diffs 1.6, bun-pty 0.5, vite 8.3, astro 7.4, and Chromium 156 fixes - #930
Conversation
🌐 Website preview
This comment updates in place on every push that touches the website or shared build inputs. |
| return { | ||
| "data-dialog-id": id, | ||
| onEscapeKeyDown: (event) => { | ||
| onEscapeKeyDown?.(event); |
There was a problem hiding this comment.
Non-blocking:
Problem: The foreign-dialog guard invokes onEscapeKeyDown before checking ownership, so caller side effects still run for an Escape it should ignore.
Failure scenario: Open Skills from New Workspace while editing template slots, then press Escape during Radix’s layer handoff. The outer NewWorkspaceDialog handler calls updatePromptDraft(prompt, null), ending slot editing underneath the Skills dialog before this guard prevents dismissal.
Suggested fix: Check ownership first; for a foreign dialog, prevent default and return before invoking the caller’s handler.
4c0f880 to
3963b36
Compare
3963b36 to
1edb038
Compare
97722f2 to
0ec5fa8
Compare
…fs, bun-pty, vite and astro, and fix the Chromium 156 drag-region and editor-chunk loop bugs they exposed
0ec5fa8 to
6c6268d
Compare
| "@types/react": "19.3.0", | ||
| "@types/react-dom": "19.3.0", | ||
| "astro": "7.3.3", | ||
| "astro": "7.4.2", |
There was a problem hiding this comment.
Non-blocking:
Problem: Astro 7.4.2 raises the Node minimum to ≥22.23.4 while the repository still documents ≥22.19 for development.
Failure scenario: A contributor on Node 22.19 runs the required bun run typecheck; the website task exits immediately with Node.js v22.19.0 is not supported by Astro!. This reproduces with the pinned CLI; 7.3.3's CLI accepted ≥22.12.
Suggested fix: Keep an Astro pin compatible with the supported Node floor, or consistently update the repository's development prerequisites to ≥22.23.4.
How to review
About 300 of the roughly 4,500 changed lines carry meaning. The rest is mechanical.
Substance, around 300 lines. Review these:
apps/desktop/src/windowChrome.ts,apps/desktop/src/preload.ts,apps/web/src/index.css, pluswindowChrome.test.tsande2e/topbar-chrome.spec.tspackages/resource-renderers/src/support/rendererMount.tsxand its new test inrendererMount.test.tsxpackages/ui/dialog.tsxpackages/server/src/analytics/errors.tsapps/web/posthogCli.tse2e/plan-open-pr.spec.ts(Escape order) ande2e/layout.spec.ts(two timing races)imageGuard.test.ts(guardedContenthelper),errorReports.test.ts,hydrate.test.ts,ChangesReviewGuide.tsxbiome.jsonand thepackage.jsonfilesapps/desktop,apps/web,apps/web/src/shell,apps/web/src/panels,packages/resource-renderers,packages/ui,packages/server/src/analytics,e2eMechanical, safe to skim:
bun.lock: about 690 lines from the version bumps.patches/@pierre%2Fdiffs@1.6.1.patch: the 1.5.1 patch renamed. Its change lines are identical.apps/web/src/chat/generated/providerGlyphs.ts: the regenerated Qwen glyph.test.each(...)calls and indents their bodies; nothing changes meaning. Each file below is byte-identical to running Biome 2.6formaton itsmainversion:29 formatting-only files
.github/workflows/ci.ymlapps/cli/src/update.test.tsapps/desktop/src/externalNavigation.test.tsapps/web/src/transport/mcp.test.tsapps/website/src/attribution/claimPage.test.tspackages/artifact-tests/src/artifact.test.tspackages/artifact-tests/src/installerEnvironment.test.tspackages/artifact-tests/src/installerScripts.test.tspackages/artifact-tests/src/releaseArtifacts.test.tspackages/extension-api/src/browser.test.tspackages/pi-dag/extension/adapter.test.tspackages/pi-delegation/src/service.test.tspackages/pi-subagents/src/definitions.test.tspackages/pi-subagents/src/extension.test.tspackages/pi-subagents/src/mapping.test.tspackages/server/src/agent/agentSessionManager.test.tspackages/server/src/agent/chatResources.test.tspackages/server/src/analytics/analytics.test.tspackages/server/src/analytics/errors.test.tspackages/server/src/auth/providerLogin.test.tspackages/server/src/host/authAnalytics.test.tspackages/server/src/host/mcp.test.tspackages/server/src/host/planReview.test.tspackages/server/src/host/runQueueAnalytics.test.tspackages/server/src/host/turnShutdown.test.tspackages/server/src/settings/settings.test.tspackages/server/src/turns/turns.test.tspackages/website-analytics/src/index.test.tsscripts/checkModuleBoundaries.test.tsProblem
Seven dependency updates from the audit each broke a test when tried alone, so they were left out of #926. Playwright 1.64's Chromium 156 also exposed two real product bugs, both fixed here:
app-region: var(--window-chrome-drag-region, no-drag)asnone. Anyvar()inapp-regionis dropped, even a defined one. The Windows desktop shell runs on WebView2, an evergreen Chromium, and uses a realapp-region: dragfor its title bar, so the header would stop dragging the window once WebView2 reaches 156. macOS is unaffected because Electrobun rewritesapp-regioninto a custom property.rendererMountforgot the failedlazyat once so that "the next mount retries". React retries a failed render, though, and that retry made a freshlazyand a freshimport(). Chromium 149 caches a failed module fetch, which hid the loop. Chromium 156 refetches: about 5,900 chunk requests in 3 s, and the error boundary never showed.Approach
Chromium 156 fixes (Playwright itself stays at 1.61).
app-region: the desktop publishes its drag flag as thedata-window-chrome-drag-regionattribute on<html>instead of a custom property.window-draguses only literal values:no-dragby default,dragunder:root[data-window-chrome-drag-region="drag"]. This works in every engine and through Electrobun's text rewrite, which still produces the--electrobun-app-regionmirror that title-bar double-click reads.topbar-chrome.spec.tspassed on both Chromium 149 and 156.lazystored by a mount stays stored and failed, so re-renders of that mount throw to the boundary instead of reloading. The next load (hover or idle preload) replaces it. A new unit test fails without the fix, anderror-boundary.spec.tspassed on Chromium 156 with the fix.DropdownMenuclosed by an outside click leaves its content mounted withdata-state="open"while the trigger reportsclosed. It reproduces with both Radix versions and breakshistory-search.spec.ts:738. That needs its own investigation and PR.Radix 1.3 (dialog, toast, popover, dropdown-menu, context-menu, tooltip, moved together because they share
react-dismissable-layer). A toast that opens over a dialog is now the topmost layer, so the first Escape dismisses the toast and the next closes the dialog. Before, one Escape closed the dialog and left the error toast. I kept the new order because it lets you read an error and keep the dialog open.plan-open-pr.spec.tsasserts it, andpackages/ui/SPEC.mddocuments it.The new Radix also moves the Escape listener to a new highest layer in an effect. A modal opened over another dialog could therefore lose an Escape to the dialog under it: the Settings dialog closed under the non-dismissable installer, and
update-install-journey.spec.ts:120failed in 3 of 6 runs.@thinkrail/ui/dialog'sDialogContentandDialogPanelnow ignore an Escape whose focus sits in a different dialog (it passed 6/6 runs). The same render timing exposed two races inlayout.spec.ts, fixed in the tests: one focused a control before the context menu had closed, the other before the app's one-frame focus placement after showing a side.Biome 2.6
biome.json; specs keep their hand wrapping.noUnsafeOptionalChainingerrors in tests are fixed, including aguardedContenthelper inimageGuard.test.ts. OneuseMathMinMaxis fixed inChangesReviewGuide.tsx.noDescendingSpecificityinapps/website/src/styles.css, where reordering selectors risks the cascade, and 2useDomNodeTextContentfalse positives on Playwright'slocator.innerText().PostHog (
posthog-node5.57.2,@posthog/core1.60.1,@posthog/cli0.18.12)mechanism: { type: "chained", … }and nohandled. Our sanitizer turned a missinghandledintofalse, which broke "causes stay handled". It now treats a missinghandledas handled, which is the SDK's own default.posthog-clibinary checksums are re-pinned for 0.18.12. Each hash comes from the officialPostHog/posthogGitHub release archive, and the method was checked by reproducing a 0.18.10 pin exactly. One archive was cross-checked byte for byte againstreleases.posthog.com.@lobehub/icons-static-svg1.101.0: regenerated provider glyphs. Only Qwen changed, to its new logo (screenshots below).@pierre/diffs1.6.1: upstream still lacks both fixes, and pierrecomputer/pierre#1185 was closed unmerged. The patch is re-applied aspatches/@pierre%2Fdiffs@1.6.1.patchwith the same change lines. Its guard tests inreview.spec.ts(text-selection drags keep the comment button) pass.bun-pty0.5.2: 0.5's breaking change makesenvthe child's whole environment.terminalManageralready passes a full copy ofprocess.envplusTERM/COLORTERM. The native library files the binary embeds are unchanged.vite 8.3.5, astro 7.4.2,
@astrojs/markdown-satteri0.4.5, sharp 0.35.5: astro 7.4 itself requires satteri 0.4.5. The built website HTML matchesmainexcept for whitespace, inline-script minification, and an emptysrcset=""dropped from blog images.Changes
apps/desktop/src/windowChrome.ts,preload.ts: publish the drag flag as an<html>attribute;apps/web/src/index.css: literalwindow-dragpackages/resource-renderers/src/support/rendererMount.tsxand test: a failed mountedlazystays failed until a later load replaces itpackages/server/src/analytics/errors.ts: a missingmechanism.handledcounts as handledapps/web/posthogCli.ts: 0.18.12 version and checksumsbiome.json: schema 2.6.3, Markdown off; test reformatting and lint fixesapps/web/src/chat/generated/providerGlyphs.ts: regenerated (Qwen)patches/@pierre%2Fdiffs@1.6.1.patchreplaces the 1.5.1 patchtopbar-chromesets the drag attribute,plan-open-prcovers the new Escape order, andlayoutwaits for the menu to close and for the app's one-frame focus placement before focusing by hand. Both were timing races in the tests that the new Radix render timing exposed.apps/desktop,apps/web,apps/web/src/shell,apps/web/src/panels(patch name),packages/resource-renderers(failedlazy),packages/ui(toast layering),packages/server/src/analytics(chained causes),e2e@biomejs/biome2.6.3,@radix-ui/*(context-menu 2.4.1, dialog 1.3.1, dropdown-menu 2.2.1, popover 1.3.1, toast 1.3.1, tooltip 1.4.1),posthog-node5.57.2,@posthog/core1.60.1,@posthog/cli0.18.12,@lobehub/icons-static-svg1.101.0,@pierre/diffs1.6.1,bun-pty0.5.2, vite 8.3.5, astro 7.4.2,@astrojs/markdown-satteri0.4.5, sharp 0.35.5Screenshots
Only the Qwen provider glyph changes. It is rendered the way the app renders it (
currentColoron the dark surface) at the in-app 14 px size, next to a model label, and enlarged to 64 px.@lobehub/icons-static-svg1.95.1)No other visual change is intended.
Related issues
None. Part of the dependency audit behind #909, #913, #914, #923 and #926. Overlaps #909 (vite, astro, sharp) and #926 (
biome.jsonuntouched there;bun.lockandpackage.jsonin both). Whichever merges later resolves the lockfile.Checklist
bun run lint,bun run typecheck,bun run testbun run e2e, orbun run e2e:fullwhen touching agent behavior)SPEC.md/ top-level specs updated to reflect any boundary, contract, or behavior changeVerification on the final tree, rebased onto
mainwith #926:check:deps,check:boundaries,check:seams,check:spec-surface,check:i18n,lint,typecheck,check:compiler,provider-glyphs:check, andbun run test. All pass.bun run build:binaryandbun run smoke:binary(forbun-pty): pass.error-boundary,topbar-chrome,history-search,plan-open-pr,update-install-journey(31/31)update-install-journey"Install & Restart" repeated 6/6layoutfocus recovery repeated 10/10terminals+workspace-tabs(27/27)review+changes, including the Pierre patch guard testsThe latest full local
bun run e2eis not valid evidence: the machine sat at load average 30–50, the shards ran 4–7× slower than usual, and timeouts failed across every shard. CI's E2E shards are the full-suite check for this PR.Biome 2.6 also formats YAML, which re-wraps one
needs:line in.github/workflows/ci.yml. That is formatting only.Found but not fixed here: in one run the host crashed with
Unknown workspacethrown from the file-watcher callback (watch.ts:104→recordWorkspaceHead→gitHeadSha) after a test removed its workspace. It did not reproduce on rerun and touches no code in this PR, but an uncaught throw from a watcher callback takes down the host, so it deserves its own issue.