Skip to content

base red: webviews bun run check is green (floating promises, #30357 a11y, tokens, type scale, browser lanes, format) - #30801

Merged
lawrencecchen merged 7 commits into
feat-cmux-nextfrom
fix/base-red-webviews-floating-promises
Nov 1, 2026
Merged

lawrencecchen merged 7 commits into
feat-cmux-nextfrom
fix/base-red-webviews-floating-promises

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

bun run check in webviews/ fails at the feat-cmux-next tip on every webviews push, so scripts/web-lint.sh needs CMUX_WEB_LINT_SKIP_REASON, and the CI web lint is red for everyone. This PR makes it exit 0 at this head. No lint rule is disabled, and no baseline grows.

Red piece Cause Culprit Fix
vp lint, and vp check --no-fmt --no-lint ("0 errors and 4 warnings", exit 1) config/vite-plus/check.ts sets denyWarnings: true, so the 4 no-floating-promises warnings in App.tsx fail both commands. #30220 made requestFolder and chooseProject return Promise<void>. void at the 4 callers that start a pick and do not wait for it. pickFolder already catches the host's refusal, so the promise has no host error to report.
The same two commands, after the first fix 4 jsx-a11y warnings (autoFocus, role="listbox" on a list of buttons, role="group" on a div), also red under denyWarnings. #30357 The Popover focuses the search field through initialFocus={ref}, the list is a plain <ul>, and the repository choices are a named <fieldset> (its border, padding and min width removed in CSS).
check:design-tokens New spacing literals off the 4/8 px scale #30357, #30386 Spacing moves to the nearest scale step (1 or 2 px). The two status dots use aspect-ratio: 1 and not calc(space + 2px), so they stay 14 px and 6 px circles.
check:type-scale New raw font-size: 11px / 12px #30357 var(--text-caption) / var(--text-detail). These are the same sizes at interface scale 1.
check:browser-lanes A requestAnimationFrame loop in a browser test #30297 The probe resize moves into window.cmuxAfterPaint's drive, which runs in the same frame callbacks.
vp fmt --check 17 files were not formatted #30357, #30386, #30297, #30205 vp fmt. The 3 test files that #30711 also formats are byte-identical to that PR.
acpmux-protocol:check (appeared at feat 6c53035) methods.ts stale: the spec has 2 new Cloud turn methods #30775 Generator output only: bun scripts/acpmux-protocol-codegen.ts (+4 lines in protocol/generated/methods.ts).

Red and green

All commands ran from webviews/.

  • At 7c549a483d05 and 265c68a569a, bun run check exited 1. The red pieces were check:design-tokens, check:type-scale, vp fmt --check, vp lint and vp check --no-fmt --no-lint, then also check:browser-lanes. bunx --bun vp lint showed the 4 no-floating-promises warnings at App.tsx lines 11518, 11678, 12128 and 12555.
  • At feat 87b4c905072, bun run acpmux-protocol:check exited 1: "acpmux protocol generated files are stale in src/agent-session/acpmux/protocol/generated: methods.ts". At head 85be59136f8 (merged with 87b4c905072), bun run check exits 0 and scripts/web-lint.sh --base origin/feat-cmux-next --head HEAD passes; the push passed the pre-push hook with no skip reason.
  • At this head, bun run check exits 0, and scripts/web-lint.sh passes.

Observed / Not run

  • Observed:
    • bun test for RepoRecoveryCard (3 pass), CloudStartView (8 pass), backgroundTurns (4 pass), subsessions (9 pass), subagentOrder (4 pass) and summary-started-chats-scale (2 pass).
    • CMUX_BROWSER_TESTS=1 bun test ./test/agent-pane-composer-rest-gap.test.ts: 3 pass.
    • prepush-gate.py: no new violations.
  • Not run:
    • No gallery before/after: scripts/gallery-compare.sh could not reach cmux-lawrence over ssh from this VM. The visual changes are 1–2 px spacing changes in the Cloud repository picker, the repository recovery card and the Cloud startup checklist. The gallery advisory run on this PR shows them.
    • No app build.

Changelog

none


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

bun run check in webviews/ was red on every push at the feat-cmux-next tip, blocking web lint for everyone. This PR makes it exit 0 without disabling any lint rule or growing a baseline.

Fixes

  • Four folder-pick promises in App.tsx that start a pick without waiting for it are now explicitly voided, silencing no-floating-promises.
  • The repository picker's search field focuses through the Popover's initialFocus ref instead of autoFocus, and the repo list is a plain <ul>.
  • The recovery card's repository choices are a <fieldset>, with its border, padding, and min width removed in CSS.
  • Spacing moved to the nearest 4/8 px scale step, and raw font sizes replaced with var(--text-caption) / var(--text-detail) (the same sizes at interface scale 1).
  • The rest-gap browser test resizes its probe in window.cmuxAfterPaint's drive instead of a requestAnimationFrame loop.
  • The generated methods.ts now lists fix(acpmux): register Cloud turn methods and TLS provider #30775's two Cloud turn methods, so the protocol catalog check passes.
  • 17 files reformatted with vp fmt; the three test files are byte-identical to another PR's formatting.

Written for commit 85be591. Summary will update on new commits.

View guided diff Turn on auto-fix

… awaited (no-floating-promises)

webviews' lint runs with denyWarnings (config/vite-plus/check.ts), so the four
`no-floating-promises` warnings in App.tsx made `vp lint` and
`vp check --no-fmt --no-lint` ("0 errors and 4 warnings") exit 1 on every
webviews push. #30220 (e24c1aa) made requestFolder and chooseProject
return their Promise<void>. Four callers that start a pick and do not wait for
it (the New Tab start at 11518, the two browse results and the folder chooser's
pick) now say so with `void`. The promise cannot reject with a host error:
pickFolder catches the host's refusal and the folder is then used or refused
inside it, so no `.catch` is needed. No rule is disabled.

Red at 7c549a4 (cd webviews): bunx --bun vp lint   exit 1, 4 no-floating-promises
Green here: no no-floating-promises finding.
…d pass lint, tokens, type scale and format

#30357 (7d5f3ae) added four jsx-a11y warnings (denyWarnings makes them
red), five new design-token violations, four raw font sizes and nine
unformatted files, so `bun run check` had five red pieces at the tip.
- CloudRepositoryPicker: the Popover focuses the search field (initialFocus
  ref), not autoFocus; the list of repository buttons is a plain list (a
  listbox role on a list of buttons was wrong for assistive tech).
- RepoRecoveryCard: the repository choices are a named <fieldset>, not a div
  with role="group"; its CSS removes the fieldset's border, padding and min width.
- Spacing on the scale (4/8 px) and font sizes from the type scale
  (--text-caption 11 px, --text-detail 12 px, the same at interface scale 1).
- vp fmt on the nine files; the three test files are byte-identical to #30711.

Red at 7c549a4 (cd webviews): bun run check   5 red: check:design-tokens, check:type-scale, vp fmt --check, vp lint, vp check --no-fmt --no-lint
Green here: bun run check   exit 0. bun test of RepoRecoveryCard, backgroundTurns, subsessions and subagentOrder: all pass.
…t-gap test pass tokens, browser lanes and format

At origin/feat-cmux-next 265c68a, `bun run check` (and scripts/web-lint.sh) had
three more red pieces from two later merges:
- check:design-tokens: #30386 (f1f79b0) cloudStart.css. Spacing on the scale
  (gap 6/7 -> 8 px, padding 13 -> 12 px, 2/14 -> 4/12 px), and the two status dots
  take their height from `aspect-ratio: 1` instead of a calc() that sat beside the
  height scale; they stay 14 px and 6 px circles.
- check:browser-lanes: #30297 (c7c9a16) test/agent-pane-composer-rest-gap.test.ts
  resized its probe from a requestAnimationFrame loop. The probe now resizes in
  window.cmuxAfterPaint's drive (the same frame callbacks); its ResizeObserver
  samples the gap as before.
- vp fmt on the eight files these merges left unformatted.

Red at 265c68a (cd webviews): bun run check   red: check:browser-lanes, check:design-tokens, vp fmt --check
Green here: bun run check   exit 0. CMUX_BROWSER_TESTS=1 bun test ./test/agent-pane-composer-rest-gap.test.ts   3 pass.
bun test CloudStartView.test.tsx 8 pass; summary-started-chats-scale.test.ts 2 pass.
@lawrencecchen lawrencecchen added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 1, 2026
@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review fcac2cb: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr30801 -f ref=fix/base-red-webviews-floating-promises -f platform=macos -f backend_mode=local

Gallery before/after for 85be591: 16 states rendered, 0 images differ, 2801 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41301243463 -R manaflow-ai/cmux -n gallery-advisory-30801-85be59136f818cc59039c6de0a65d5703272839e (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.access-offer/turn-no-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single-multiedit Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single-multiedit Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-multiedit Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-multiedit Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single-long Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single-long Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-long Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-long Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/duration-columns Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/duration-columns Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-light Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-light Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-dark Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-dark Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-light Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-light Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-dark Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-dark Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-light Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-light Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-dark Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-dark Apple System Colors unchanged 0% own conversation.css

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 87b4c90; does not block

Shipped in:

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No issues found across 21 files

View guided diff | Turn on auto-fix | Re-trigger cubic

@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Review (subagent, correctness first): SHIP at fcac2cb

Independent review (webviews base-red owner's review subagent):

  • App.tsx: the four void callers do not change behavior; pickFolder (startFolder.tsx) catches every callNative error, so no rejection is lost.
  • CloudRepositoryPicker: Popover takes initialFocus as a ref (src/ui/Popover.tsx), so focus still goes to the search field. The old role=listbox had plain button children with no options and no arrow keys, so removing it is correct.
  • RepoRecoveryCard: a <fieldset aria-label> has the same group role and name as before; the CSS reset removes the default box. The tests pass.
  • CSS: spacing is on the 4/8 scale, and the font sizes are --text-detail/--text-caption. No baseline, ratchet or allowlist file changed. The status dots stay 14/6 px circles (width + aspect-ratio in an inline-flex parent).
  • Rest-gap test: the probe resize moves to cmuxAfterPaint's drive with the same frame timing; the measurement and assertions do not change.
  • 15 of the 21 files are formatter output only (the merge-base version run through vp fmt is byte-identical).

Commands (from webviews/, on this head merged with feat ffe1ad2):

  • bun run check: exit 0
  • bun test: CloudStartView 8 pass, RepoRecoveryCard 3 pass, backgroundTurns 4 pass, subsessions 9 pass, subagentOrder 4 pass, summary-started-chats-scale 2 pass
  • CMUX_BROWSER_TESTS=1 bun test ./test/agent-pane-composer-rest-gap.test.ts: 3 pass (Chromium; WebKit is not installed on the VM)

Red on the base: at feat 3154610, bun run check exits 1 with 6 red pieces: check:browser-lanes, check:design-tokens, check:type-scale, vp fmt --check (17 files), vp lint, vp check --no-fmt --no-lint.
Non-blocking: 1-2 px spacing moves and no gallery before/after (the body says so); the --text-* sizes follow the interface scale.

@lawrencecchen lawrencecchen added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Nov 1, 2026
@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Review (subagent, correctness first): SHIP at fcac2cb

The reviewer ran these at this head in webviews/:

  • bun run check exits 0.
  • RepoRecoveryCard test: 3 pass. CloudStartView test: 8 pass.

What the reviewer confirmed:

  • 14 of the 21 changed files are only formatting. For each one, vp fmt of the merge-base copy gives the head file exactly.
  • The four voids are safe. pickFolder catches every host error, and requestFolder used void pickFolder before cmux NEXT composer: /cd moves the chat to another folder #30220.
  • initialFocus={ref} focuses the search field. ProjectChooser already uses the same pattern.
  • The old role="listbox" was wrong: it had no options and no arrow keys.
  • The fieldset keeps its accessible name.
  • The status dots stay 14 px and 6 px circles.
  • The rest-gap probe still resizes once per frame.
  • No lint rule is disabled and no baseline file changes.

…urn methods (generator output)

#30775 (6c53035) added agent-session-turn-prepare and
agent-session-turn-abandon to cmux-tui/crates/acpmux/spec/acpmux-protocol.json
but did not run the webviews generator, so `bun run acpmux-protocol:check`
(the last piece of `bun run check`) failed at feat-cmux-next 87b4c90:
"acpmux protocol generated files are stale in src/agent-session/acpmux/protocol/generated: methods.ts".
This commit is the output of `bun scripts/acpmux-protocol-codegen.ts` only (+4 lines).

Red at 87b4c90 (cd webviews): bun run acpmux-protocol:check   exit 1 (stale methods.ts)
Green here: bun run acpmux-protocol:check   exit 0
@lawrencecchen lawrencecchen removed the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Nov 1, 2026
@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Review (subagent, correctness first): SHIP at 85be591

This reviews the change since the SHIP at fcac2cb:

  • Merge 96a9a30 (feat 87b4c90): git show --remerge-diff prints nothing, so there is no hand resolution. The PR's own diff is the same 21 files, +687/-191, before and after the merge. The only context change is Remove Cloud repository cursor overrides #30738's removed cursor: pointer, and the PR does not add it back.
  • 85be591: methods.ts +4 lines. The two lines are fix(acpmux): register Cloud turn methods and TLS provider #30775's agent-session-turn-prepare and agent-session-turn-abandon, in the spec's order and position, untyped request. bun scripts/acpmux-protocol-codegen.ts --check exit 0.
  • bun run check (webviews/) exit 0. scripts/web-lint.sh --base origin/feat-cmux-next --head HEAD exit 0.
  • Red on the base: at 87b4c90, acpmux-protocol:check reports methods.ts stale. The 6 earlier pieces are listed in the body.

@lawrencecchen lawrencecchen added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Nov 1, 2026
@lawrencecchen
lawrencecchen merged commit ebacf1a into feat-cmux-next Nov 1, 2026
213 of 223 checks passed
@lawrencecchen
lawrencecchen deleted the fix/base-red-webviews-floating-promises branch November 1, 2026 11:31
@blacksmith-sh

blacksmith-sh Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Found 7 test failures on Blacksmith runners:

Failures

Test View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
nightly must build and hand off the macOS 26 helper and Xcode 26.5 app before publishin
g/
nightly must build and hand off the macOS 26 helper and Xcode 26.5 app before publishin
g
View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_log2']/
CoreFoundation, missing 1: ['_log2']
View Logs
test_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit (main.WorkflowTests.t
est_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit)/
test_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit (main.WorkflowTests.t
est_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit)
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…ane's table (pane-english base red) (#30935)

#30801 gave the Cloud start checklist an English aria-label,
"Cloud startup checklist", in CloudStartView.tsx. test/pane-english.test.ts
"no user-visible English is written in the pane's sources" fails on
feat-cmux-next for it (react-apps-check (6), runs 41307005642 and
41308229592). Read it from a new cloudStartup.checklist entry, alongside
the other cloudStartup strings.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-2f629b93d5a20c58e6f8

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 85be5913 Deployed Nov 1, 2026 by lawrencecchen via wait for same-key tree publisher #95915
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant