Skip to content

composer: unwrap quote blocks with Backspace - #25681

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
lane/nx-quote-backspace
Oct 26, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
lane/nx-quote-backspace

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Backspace now unwraps a quote at its start into a plain paragraph, including an empty quote. It preserves the text and keeps any preceding paragraph separate. This repairs the shared rich editor used by chat and Cmd-I. New Tab paths that use plain inputs cannot create quote blocks.

Leo, 2026-10-26: "and i cant delete quote block text thingy with backspace? only shift enter? strange..."

Milkdown replaces ProseMirror's lifting Backspace with joinTextblockBackward: the first quote stays stuck, while one after other text can merge into that paragraph. A quote-specific command lifts its first paragraph before that fallback. Other Backspace behavior passes through.

Verification

  • cd webviews && bun test test/composer-quote-backspace.test.tsx: 0 pass / 3 fail at regression commit 7419f7e7377b; 3 pass / 0 fail after the fix. Reproduced all three failures against current base 4e28d9cf44d9ec587ad96d223ced6e5bc2c7f5b0 too.
  • Quote and caret suites: 5 pass / 0 fail at head 75284f15318dbf58ca5654f91b8bb27ec50d9a5e.
  • Changed-file lint, full webviews typecheck and prepush gate pass.
  • Full web lint reports an unchanged base violation in webviews/src/pages/keybindings/styles.css (missing reduced-transparency fallback). No changes to that file.

Observed / Not run

Observed the real Chromium gallery editor before and after Backspace in three fixture states: quoted text, empty quote, and a quote after another paragraph. The recording below compares base (left) and head (right), in order: nonempty quote, empty quote, quote after another paragraph. Reference reviewed: cmux-design-references/apps/claude/live/composer-demo-ready.png; this keyboard repair preserves existing composer chrome.

No native build or manual nightly verification performed yet. The regression exercises the shared editor's actual keymap; the recordings drive a real browser keyboard.

Before left, after right: Backspace quote behavior

Full quality recording

Agent session: agent session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 26, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-fc596 created for this PR by the cmux coordinator.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Independent Astra xhigh review: SHIP at 75284f15318dbf58ca5654f91b8bb27ec50d9a5e, session 01a17a37-2c15-73d3-89d5-c2e70b0bd2be on gcp-agent-lane-1. The initial review correctly caught an overbroad New Tab claim; the description now limits this to the rich MarkdownField in chat and Cmd-I. New Tab plain inputs cannot create rich quote blocks. Source head is unchanged.

Primary review: SHIP for the quote lift, keymap precedence, unchanged attachment Backspace interception, and all three regression cases. Base red/green: 0/3 then 3/0; adjacent caret suite gives 5/0 at this head. The real browser recording is in the body.

Exact-head checks reconciled: fast gates and cmux-next checks succeeded. Familiar-intent, review-link, gallery-comment and fast-gates status publication failed on GitHub installation quota403; fast-gates logged GATES=success. Gallery health run40408638812 rendered all three new quote states ready=1 (text1045ms, empty699ms, after-paragraph817ms). Its13 broken states are unchanged Add Project/folder/permission/menu selector fixtures, with no Backspace in those plays; this PR touches none of their source/fixtures. CI run40408638974 is still being waited to terminal state because the PR watcher truncated the check list at100; no green or merge is inferred from that truncated snapshot.

@blacksmith-sh

blacksmith-sh Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Found 122 test failures on Blacksmith runners:

Failures

Test View Logs
test/accent-glass-invariants.test.ts/accent-glass-invariants.test View Logs
test/accent-glass-invariants.test.ts/accent-glass-invariants.test View Logs
test/agent-pane-agents-pill.test.ts/agent-pane-agents-pill.test View Logs
test/agent-pane-agents-pill.test.ts/agent-pane-agents-pill.test View Logs
test/agent-pane-attach-huge-files.test.ts/agent-pane-attach-huge-files.test View Logs
test/agent-pane-attach-huge-files.test.ts/agent-pane-attach-huge-files.test View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs
test/agent-pane-column-edges.test.ts/agent-pane-column-edges.test View Logs
test/agent-pane-column-edges.test.ts/agent-pane-column-edges.test View Logs

...and 112 more test failures. View all on Blacksmith

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

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

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

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

CI failed on 75284f1531 (run 40408638974 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (2) code a web test failed
web / react-apps-base-check (3) code a web test failed
web / react-apps-base-check (4) code a web test failed
web / react-apps-base-check (1) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs agent-pane-peer-chat.test.ts a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-...: failed (job)
  • seen on other PRs agent-pane-question-records.test.ts answered live, the card goes and the record takes its place: failed (job)
  • seen on other PRs agent-pane-queue-steer.test.ts queued and steering prompts > the queue takes its own place in the stack: nothing is cut off or draw...: failed (job)
  • seen on other PRs agent-pane-stream-jitter.test.ts chromium: settling short, long, and tool-ending replies does not move the message or composer: failed (job)
  • seen on other PRs agent-pane-stream-jitter.test.ts chromium: a queued prompt deleted while the turn runs a tool leaves no gap for long: failed (job)
  • seen on other PRs chat-environment-scroll-stability.test.tsx long-chat scroll leaves the Left chip mounted and stable, while own cwd changes update it: failed (job)
  • seen on other PRs chat-environment-scroll-stability.test.tsx long-chat scroll leaves the Right chip mounted and stable, while own cwd changes update it: failed (job)
  • seen on other PRs chat-open-perf.test.ts a live row drawn before a slow chat is read shows whole, with no fade after: failed (job)
  • seen on other PRs accent-glass-invariants.test.ts (unnamed): failed (job)
  • seen on other PRs agent-pane-agents-pill.test.ts by default the running agents sit in the tray above the composer, not in the transcript: failed (job)
  • ... 22 more in the job logs
Matched log lines
web / react-apps-base-check (2): (fail) a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-chat [30943.68ms]
web / react-apps-base-check (3): (fail) (unnamed) [100336.72ms]
web / react-apps-base-check (4): (fail) 0 .mov 300 MB paste local [2333.38ms]
web / react-apps-base-check (1): (fail) the summary card lists the chat's background tasks: running ones first, the finished folded [1082.28ms]

Not re-run automatically: web / react-apps-base-check (2), web / react-apps-base-check (3), web / react-apps-base-check (4), web / react-apps-base-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; NEW: green on the base 711019c; do not merge until green; see lane-rules
red: web / react-apps-base-check (1); no finished base run on 711019c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (2); no finished base run on 711019c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (3); no finished base run on 711019c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on 711019c to compare; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on 711019c to compare; do not merge until green; see lane-rules

Tour of 75284f1531 (run): no media. The tour job failed before the tour ran (build or setup); the run log has the output.

@teamleaderleo
teamleaderleo merged commit 80818cb into feat-cmux-next Oct 26, 2026
157 of 174 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-quote-backspace branch October 26, 2026 23:49
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

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

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant