Release CW: stage-batch7 — 10-PR low-risk batch (v0.51.125) — UI polish + bug fixes + diagnostics#2849
Merged
Merged
Conversation
…mposer textarea When tool approval or clarification cards appear during streaming, they unconditionally call focus() on their input elements via setTimeout, stealing focus from the composer (#msg) if the user is actively typing. This silently drops keystrokes mid-type. Add a guard: only move focus to the card if the composer textarea does not already have focus. The document.activeElement check matches the pattern already used upstream in other focus-sensitive components. Fixes: #
After the user responds to a clarify prompt, insert a synthetic user message into the conversation showing their choice. This makes the clarify interaction visible in the chat history, which was previously only shown in the transient clarify dialog card. The message is marked with _clarify_response: true so downstream consumers can distinguish it from regular user messages if needed.
…2740) Squashed from 2 author commits: - a1017d0 initial fix: flex:0 0 auto on all 5 chip wraps - bf54ba5 Copilot review fix-up: consolidate into single rule Closes #2740. CSS-only, no JS changes. Default-width layout unchanged, only affects narrow-viewport overflow regime via composer-left's existing overflow-x:auto.
…risk batch) Cherry-picked PRs: - #2839 (tn801534) — kanban worker log URL double query param fix - #2832 (franksong2702) — tolerate malformed request logging - #2818 (humayunak) — prevent focus theft by approval/clarify cards - #2820 (tangerine-fan) — echo clarify user choice as visible message - #2826 (Koraji95-coder) — chip wrap overlap fix at narrow widths (closes #2740) - #2843 (AJV20) — Settings option to ignore Agent updates - #2837 (franksong2702) — clarify CSRF rejection diagnostics - #2838 (franksong2702) — surface gateway scheduling guidance in Tasks panel - #2834 (franksong2702) — render mailto:/tel: links + sandbox HTML preview links - #2829 (franksong2702) — large markdown preview falls back to plain text (closes #2823, supersedes #2828)
This was referenced May 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release CW — v0.51.125 — stage-batch7 — 10-PR low-risk batch
Big batch from the May 24 sweep. 10 contributor PRs, all well-tested, all pre-cleared by Opus advisor as SHIP. Mix of UI/UX polish, bug fixes, diagnostics improvements, and a duplicate-PR resolution.
Cherry-picks
static/panels.jskanban URLserver.pylog_requeststatic/messages.jsfocus guardstatic/messages.jsclarify echostatic/style.csschip wraps (squashed 2 commits)api/routes.pyCSRF diagnosticsSupersedes
#2828 by Raven7979 — same scope as #2829 (large markdown preview fallback). Picking #2829 because: named constants with semantic names, helpers extracted, status message includes size+lines, dedicated test file with 5 cases. Will close #2828 as superseded.
Conflict resolution
10 PRs across
api/routes.py+ 3 static JS files + style.css. The only real merge conflict was #2826 (PR has 2 commits, the 2nd was a Copilot review fixup that assumed the 1st was applied) — usedgit merge --squashto apply both as one commit. Everything else was clean cherry-pick with only CHANGELOG conflicts (resolved by keeping ours).Pre-Opus gate
ast.parse+node -con all touchedOpus advisor verdict
What's NOT in this batch
Still queued for review:
api/state_sync.pybackground-thread DB writesapi/routes.pywrite path