Repository navigation
🤖 fix: bump effect to stable 4.0.4 and dependencies within range - #7625
Conversation
4.0.5 and later rewrite TestClock and break the streamBridge and routerSubscriptions heartbeat tests, so this stops at 4.0.4. --- _Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_
Ran `bun update` (Bun 1.4.3, 7-day minimumReleaseAge) and bumped exact pins that have in-range releases: @aws-sdk/client-bedrock 3.1152.0, @modelcontextprotocol/client 2.3.1, @duckdb/node-api 1.5.6-r.1, the playwright trio 1.64.1, eslint-plugin-storybook 10.6.2. Ported the trpc-cli patch to 0.12.4 (the code moved to dist/parse-router.js). Held back, each pinned exactly because the newer in-range release breaks us: - ai and @ai-sdk/*: 7.0.143 changes DecisionModel/EvaluationModel types and blows up streamManager typing (~100 errors). Needs its own PR. - rehype-harden 1.1.6: 1.1.8 lets relative links through without a defaultOrigin, which MarkdownFilePreview relies on blocking. - @novnc/novnc 1.6.0: 1.7 drops the lib/ CJS build we import. - posthog-node 5.56.0: 5.56.1 adds a dynamic @opentelemetry/api import that check-startup-imports cannot resolve. - @swc/core 1.15.3 (override): 1.16 breaks vite-plugin-top-level-await. - prettier 3.7.4: 3.9 reformats 182 files. - typescript-eslint 8.48.1: 8.71 adds ~620 type-aware lint errors. - @types/bun 1.3.3: 1.4.3 references a @types/node 26 type. - ghostty-web: pinned to 0.4.0-next.7, newer than the 0.4.0 that ^ resolves to. Code changes for the bumps: react-router stabilized useTransitions, Tailwind 4.3 made scrollbar-none a core utility (class order), Radix Select 2.4 needs an HTMLFormElement global in happy-dom tests, geist renamed LICENSE.TXT, and @types/node 24.19 / undici 7.30 overload changes in five tests. --- _Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_
vscode: @types/node 20.19.43, esbuild 0.27.7. @types/vscode stays at 1.107 because it must not pass engines.vscode (^1.106.0). chat-components: bun update (tailwind-merge 3.7, @types/react 19.3, vite 6.4.4). --- _Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
🟢 e2e stories (Haiku): 14 passed22 agent steps · 7 replayed from cache · 15 model calls · 46.4k tokens (24% cached) All 14 tests in 9 files
e2e 0.20.0 · 1m 21s · web · run artifacts 🟢 e2e Electron stories (Haiku): 3 passed3 agent steps · 3 model calls · 8.0k tokens (22% cached) All 3 tests in 3 files
e2e 0.20.0 · 22.2s · electron · run artifacts 🟢 e2e agent repros (Haiku): no tests selectedSpend: $0.00 of the $1.00 cap (proxy ledger) e2e 0.20.0 · 6.9s · 2 targets (web, phone) · run artifacts |
CI on the first push found four regressions from the in-range bumps: - jest 30.5 makes module.register() throw inside the sandboxed loader, and Storybook's serverRequire calls it to load .storybook/test-runner.ts, so every Storybook test suite failed to run. jest stays at 30.2.0 (exact pin; the 30.x tree in bun.lock is main's). - Radix 1.3 (dismissable-layer 1.2) changes Escape and outside-pointer handling: tests/ui analyticsModal, the bug-bash repros that probe the DismissableLayer fiber and four Pixel stories broke. Every @radix-ui package goes back to main's version, and the HTMLFormElement test shims that Radix Select 2.4 needed are reverted. - streamdown had resolved its own marked 17.0.6 next to the root 17.0.1 pin that listItemRanges relies on; the nested copy is removed. - Shiki 3.23 added a c3 grammar, so highlightWorker.test.ts now uses a language that only Highlights knows. --- _Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_
|
@codex review |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
…-harden - babel-jest still declared ^30.5.2 while the lock holds 30.2.0: pin it at 30.2.0 with jest. - Pin each direct @radix-ui dependency at its locked (main) version, so a later `bun update` keeps the Radix hold. Radix pins its internal packages exactly, so this holds the whole tree. - Restore main's nested streamdown/rehype-harden 1.1.7 instead of 1.1.8. --- _Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_
# Conflicts: # patches/trpc-cli@0.12.4.patch
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
Readiness record for head
Enqueuing in the merge queue per the maintainer's instruction. Generated with |
…iew stays the LCP (coder#7638) Fixes coder#7637 ## Summary `geist` 1.8.1 (from coder#7625) made Geist Mono's text box taller: ascent/descent went from 955/245 to 1005/295 units, so a 12 px code line's text box grew from 14 px to 16 px. The phone static workspace view paints the seeded code line before Geist Mono loads (fallback monospace, 14 px tall). The live app's code line now paints larger than that copy, so Chrome records a second, later LCP entry and Lighthouse simulates LCP at the end of the JS load. This PR adds `ascent-override`/`descent-override`/`line-gap-override` to the Geist Mono `@font-face`, which restores 1.5.1's vertical metrics and keeps the bump. ## Background - Static view (coder#6879/coder#6880): on a phone `/workspace/<id>` the early script paints the transcript tail before the app loads. Geist Mono is deliberately not preloaded (coder#6216, comment in `staticAssets.ts`), so code in the static view paints in the fallback monospace. - Before coder#7625, the live code line (Geist Mono 1.5.1, 178x14 px text box) was no larger than the static copy (fallback, 180x14), so the static paint stayed the final LCP. After coder#7625 it is 175x16, which is larger. - Font tables (fontTools, `unitsPerEm` 1000, `fsSelection.USE_TYPO_METRICS` set in both): | geist | hhea/typo ascent | descent | lineGap | content height | | --- | --- | --- | --- | --- | | 1.5.1 | 955 | 245 | 0 | 1.2 em | | 1.8.1 | 1005 | 295 | 0 | 1.3 em | The ascent minus descent is the same (710), so the overrides move no glyph: the baseline in a fixed line-height stays where it is. They only shrink the inline text box back to 1.2 em, which also restores the pre-bump height of inline-code backgrounds and of `line-height: normal` monospace text (for example the terminal default font). ## Bisect Check: seed like the auditor (`seed.mjs`, 4 text rows), run `xum server` with `env -i`, `XUM_DISABLE_TELEMETRY=1`, a temp `XUM_ROOT` and a free port, then open the workspace page in headless Chromium (Playwright; 412x823, DPR 1.75, `isMobile`, `hasTouch`, a Moto G Power UA, service workers blocked, a fresh browser per run). It records every `largest-contentful-paint` entry. PASS = no entry outside the static view after the static paint. | Build | Result | LCP entries (time, size, element) | | --- | --- | --- | | 6959dfc (base) | PASS 3/3 | 392 ms 9306 static code line (no later entry) | | 0c9a0c0 (main) | FAIL 3/3 | 352 ms 9306 static, then 728 ms 9555 live code line (runs 2 and 3: 60 → 416 ms, 56 → 388 ms) | | 0c9a0c0 + geist 1.5.1 only | PASS 3/3 | 400 ms 9306 static (no later entry) | | this PR | PASS 5/5 | 348 ms 9306 static (no later entry); live text box 175x14 | Reverting `geist` alone flips the check, so I did not bisect the Tailwind pair or the other packages. ## Validation - LCP-entry check above: head PASS 5/5, main FAIL 3/3. - `make first-run-view-parity`: `parity.json` is identical on base and on this PR. The paragraph boxes match, and both sides show the same shell pixel diff in one 14x14 icon box, so that diff was there before this PR. - `make check-phone-chrome`: the phone skeleton matches the live page. - `make static-check` passes. - Built CSS has the three descriptors in the Geist Mono `@font-face`. No test added. The defect is a rendered text-box size in a real browser with real font files. A happy-dom or build-time check cannot measure that, and a test that reads the CSS would only repeat the three values. The browser check above is the reliable gate, and the Lighthouse VM covers it after merge. ## Risks Low. The change is CSS only and touches the Geist Mono face only. Glyph positions stay the same. Text boxes of monospace text go back to their pre-coder#7625 height. Geist (sans) also changed its metrics in 1.8.1 (920/220/100 → 1005/295/0). I did not change it: it is preloaded, so the static view and the live app already paint it with the same font. --- _Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_ <!-- mux-attribution: model=anthropic:claude-opus-5-5 thinking=high -->
Summary
Moves
effectfrom4.0.0-rc.112to stable4.0.4and takes every dependency update that stays inside its semver range and passes our gates, in the root app,vscode/andpackages/chat-components. Packages whose newest in-range release breaks us are pinned exactly at the last working version, with the reason below.Background
We were still on an Effect v4 release candidate after v4 went stable, and many other dependencies had drifted behind their in-range releases. Majors are out of scope for this PR.
Implementation
Five commits:
effect4.0.0-rc.112 → 4.0.4. 4.0.5 and later rewriteTestClockand break thestreamBridgeandrouterSubscriptionsheartbeat tests, so this stops at 4.0.4.bun update(Bun 1.4.3, 7-dayminimumReleaseAgerespected) plus in-range bumps of exact pins:@aws-sdk/client-bedrock3.1152.0,@modelcontextprotocol/client2.3.1,@duckdb/node-api1.5.6-r.1, the playwright trio 1.64.1,eslint-plugin-storybook10.6.2. Thetrpc-clipatch is ported to 0.12.4 (the code moved todist/parse-router.js).vscode/:@types/node20.19.43,esbuild0.27.7 (@types/vscodestays at 1.107 so it does not passengines.vscode).packages/chat-components:tailwind-merge3.7,@types/react19.3,vite6.4.4.@radix-uipackage at main's versions, remove a nestedmarked17.0.6 that streamdown had resolved next to the root 17.0.1 pin, and move onehighlightWorkertest offc3(Shiki 3.23 added a c3 grammar).package.json(jest,babel-jest, each direct@radix-uidependency) and keep main's nestedstreamdown/rehype-harden1.1.7.Code changes the bumps needed:
useTransitions(dropped theunstable_prefix).scrollbar-nonea core utility, which changes the class order in 5 files.LICENSE.TXTtoLICENSE.txt.@types/node24.19 / undici 7.30 overload changes needed small type fixes in five tests.Held back (pinned exactly)
ai,@ai-sdk/*ai7.0.107,@ai-sdk/*at their current lock versionsDecisionModel/EvaluationModeltypes (~100 type errors instreamManager). Needs its own PR.rehype-hardendefaultOrigin, whichMarkdownFilePreviewrelies on blocking.@novnc/novnclib/CJS build we import.posthog-node@opentelemetry/apiimport thatcheck-startup-importscannot resolve.@swc/core(override)vite-plugin-top-level-await.prettiertypescript-eslint@types/bun@types/node26 type.jest,babel-jestmodule.register()throw in its sandboxed loader. Storybook'sserverRequirecalls it to load.storybook/test-runner.ts, so every Storybook suite fails to run.@radix-ui/*ghostty-web^resolves to.Validation
make typecheck,make static-check,make lint-eslint,make buildpass after the rebase on main.make test-bugbash-repros-sandbox: 74 + 2 repro files pass.tests/ui/layout/analyticsModal.test.ts(jest) passes again after the Radix hold.Risks
Medium-low. Most bumps are patch or minor releases inside existing ranges. The widest surface is
effect(backend services and tests) and the react-router/Tailwind bumps (renderer). The packages known to change behavior are held back above.Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:high• Cost:$16.91