Repository navigation
fix(web): merge button fits its label and animates width changes - #18478
Merged
Merged
Conversation
Contributor
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a small, isolated web UI fix that makes the existing merge button track its label and animate width changes. Its runtime effects are limited to presentation; merge actions, accessibility text, tooltips, and other product behavior remain unchanged. You can add or adjust custom eligibility rules. Learn more. |
macroscopeapp
Bot
dismissed
their stale review
October 12, 2026 03:25
Dismissing prior approval to re-evaluate fd4a53f
macroscopeapp
Bot
dismissed
their stale review
October 12, 2026 03:40
Dismissing prior approval to re-evaluate 3bfb767
github-actions Bot
added a commit
to omarcresp/t3code-flake
that referenced
this pull request
Oct 13, 2026
## What's Changed * fix(web): remember editor selections before opening folders by @Yash-Singh1 in pingdotgg/t3code#19078 * fix(ci): retry Cursor webhook HTTP 400s on main by @Yash-Singh1 in pingdotgg/t3code#19077 * fix(web): let context handoff details use the available width by @Yash-Singh1 in pingdotgg/t3code#19098 * fix(server): snoozed threads allow queued automatic wakes by @Yash-Singh1 in pingdotgg/t3code#19099 * fix(web): merge button fits its label and animates width changes by @flamboh in pingdotgg/t3code#18478 * fix(web): Cmd+Enter creates the new project while an option is highlighted by @SunkenInTime in pingdotgg/t3code#18901 * fix(pi): queue turn-start prompts when native work is running by @StiensWout in pingdotgg/t3code#18639 * fix(pi): load T3 tool schemas for completion gateways by @StiensWout in pingdotgg/t3code#18643 * fix(devices): report agent tool startup failures by @PixPMusic in pingdotgg/t3code#18502 * fix(web): settings warn when an environment silently drops a setting by @flamboh in pingdotgg/t3code#18334 * fix(desktop): stop unsolicited Messages code autofill by @StiensWout in pingdotgg/t3code#19118 * feat(chat): show pending context handoff when selecting a model by @maria-rcks in pingdotgg/t3code#18369 * fix(server): collect SQLite planner statistics when the database opens by @otavio in pingdotgg/t3code#18471 * fix(server): failed threads no longer scan every tool item for errors by @realhasanshoaib in pingdotgg/t3code#18628 * fix(web): keep clone folder names readable in the setup project picker by @tachytelicdetonation in pingdotgg/t3code#12474 * fix(composer): allow slash skill search within messages by @Bil0000 in pingdotgg/t3code#19107 ## New Contributors * @tachytelicdetonation made their first contribution in pingdotgg/t3code#12474 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3066...v0.0.46-nightly.20261013.3080 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261013.3080
github-actions Bot
added a commit
to davidvanderklay/t3code-flake
that referenced
this pull request
Oct 13, 2026
## What's Changed * fix(web): remember editor selections before opening folders by @Yash-Singh1 in pingdotgg/t3code#19078 * fix(ci): retry Cursor webhook HTTP 400s on main by @Yash-Singh1 in pingdotgg/t3code#19077 * fix(web): let context handoff details use the available width by @Yash-Singh1 in pingdotgg/t3code#19098 * fix(server): snoozed threads allow queued automatic wakes by @Yash-Singh1 in pingdotgg/t3code#19099 * fix(web): merge button fits its label and animates width changes by @flamboh in pingdotgg/t3code#18478 * fix(web): Cmd+Enter creates the new project while an option is highlighted by @SunkenInTime in pingdotgg/t3code#18901 * fix(pi): queue turn-start prompts when native work is running by @StiensWout in pingdotgg/t3code#18639 * fix(pi): load T3 tool schemas for completion gateways by @StiensWout in pingdotgg/t3code#18643 * fix(devices): report agent tool startup failures by @PixPMusic in pingdotgg/t3code#18502 * fix(web): settings warn when an environment silently drops a setting by @flamboh in pingdotgg/t3code#18334 * fix(desktop): stop unsolicited Messages code autofill by @StiensWout in pingdotgg/t3code#19118 * feat(chat): show pending context handoff when selecting a model by @maria-rcks in pingdotgg/t3code#18369 * fix(server): collect SQLite planner statistics when the database opens by @otavio in pingdotgg/t3code#18471 * fix(server): failed threads no longer scan every tool item for errors by @realhasanshoaib in pingdotgg/t3code#18628 * fix(web): keep clone folder names readable in the setup project picker by @tachytelicdetonation in pingdotgg/t3code#12474 * fix(composer): allow slash skill search within messages by @Bil0000 in pingdotgg/t3code#19107 ## New Contributors * @tachytelicdetonation made their first contribution in pingdotgg/t3code#12474 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3066...v0.0.46-nightly.20261013.3080 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261013.3080
aorwall
added a commit
to aorwall/t3code
that referenced
this pull request
Oct 14, 2026
Merges `pingdotgg/t3code` up to `6002c5c68c` (42 commits, base `5070a83a32`), using a merge commit. No open merge PR to stack on; this branches from `main` at `882bb0a638`. ## Resolution - **`package.json`** (conflict): dropped upstream's `tsc-rs` 0.6.0 bump (pingdotgg#19187). The fork removed `tsc-rs`, and the `tsc-rs` tripwire holds that. New path-policy entry: `root-package-json` (`decide`). - **`pnpm-lock.yaml`** (conflict, `theirs`): took upstream's copy. Its seven `tsc-rs@0.6.0` entries fail `minimumReleaseAge` before resolution can prune them, so I stripped them and let `install.mjs` re-derive the rest. The fork edges (`moatless-api`, `mermaid`) are back, and `verify --only lockfile` passes. - 14 other files that both sides touched merged without conflict. `duplicate-adds` and `resolution-check` are both clean. `FilePreviewPanel.tsx` (`decide`) took upstream's `threadRef` prop and kept both fork deltas. The two unlisted files now have `converged` entries: `terminal-drawer-open-in-editor` and `thread-shell-subtasks`. In `threadShell.ts`, upstream's `isChildRunLive` and the fork's listing filter merged together correctly. - File counts: 136 files landed, against 136 in the upstream range. The only differences are `package.json` (missing, because its one upstream change was the dropped bump) and `docs/fork/inventory.json` (extra, fork-only). The fork delta is 809 files. - **Script fix:** Moatless replaced its dispatch match arms with a `MethodTable` (moatless#1138). Because of that, `unsupported-methods.mjs` found no arms and exited 2. It now reads `.detached`/`.session`/`.stream` registrations and follows handlers passed by name. Result: ADD 0, DROP 0, KEEP 2 (`vcs.switchRef`, `git.preparePullRequestThread`), which matches `gaps.md`. ## Verification `verify.mjs`: these checks pass: duplicate-adds, tripwires, resolution-check, unsupported-methods (after the fix), lockfile, fmt, lint, typecheck, build. `test` fails. Each of the failing files also failed when run alone, and they are the same five files as in the 2026-10-13 merge, all caused by the sandbox: shared `AgentScope`, server `ServerBrowserPage` (no Playwright browser), `AcpAdapterV2`, `OrchestratorReplayFixtures`, and `OpenCodeServerLedger`. ## Usable as-is - Full-screen visual replies with zoom (pingdotgg#17561). Links inside HTML renders open the way chat links do (pingdotgg#18897). App shortcuts keep working after you click into an HTML render (pingdotgg#18898). - Touch-scrolling in terminal output (pingdotgg#11305). Fixed: answering a question reset the editor caret (pingdotgg#11337). Links in agent questions are now clickable (pingdotgg#19197). - Fixed: "Subagent needs input" stayed after the subagent finished (pingdotgg#18996). This is client-side and uses `activityRunStatus` with a fallback to `status`. - Slash skill search now works mid-message (pingdotgg#19107). Fixed: removing a project opened a new thread for it (pingdotgg#15864). Settings now warn when an environment silently drops a setting (pingdotgg#18334). - Smaller fixes: context handoff details use the available width (pingdotgg#19098), pace icon alignment (pingdotgg#18580), tool-call collection perf (pingdotgg#18853), git file paths keep whitespace in the contract schema (pingdotgg#12465), Android beta links (pingdotgg#18955). - Pending context-handoff preview when you pick a model (pingdotgg#18369). It is computed on the client from `server.providers` (`requiresNewThreadForModelChange`, `continuation.groupKey`). If Moatless does not report those fields, the preview shows a handoff on every provider switch. ## Unsupported in Moatless / needs implementation - Delegated tasks in separate worktrees (pingdotgg#19102): `isolation: "worktree"` on the orchestrator MCP `delegate_task`, and `workspaceStrategy` on the child-launch command. Moatless does not create worktrees (`FEATURES.worktreeSelection`). - These land behind flags that are already gated: scheduled-task dialog fix (pingdotgg#18940, `scheduledTasks`), PR merge/auto-merge button sizing (pingdotgg#18478, pingdotgg#19111, `pullRequestSurface`), remembering editor selections (pingdotgg#19078, `openInEditor`), device tool startup failures (pingdotgg#18502, `deviceHub`), npm "update everything" (pingdotgg#18709, `serverUpdateBanner`), clone folder names in the welcome wizard (pingdotgg#12474), Cmd+Enter create-project in the palette (pingdotgg#18901). - No new RPC methods (ADD 0). ## Backend behavior to consider reproducing in Moatless I added these to the "Runtime fixes upstream made to its own server" entry in `docs/fork/gaps.md`: - Worktree isolation for delegated tasks (pingdotgg#19102). - Snoozed threads still take queued automatic wakes (pingdotgg#19099). - Indexed failed-thread error lookup (pingdotgg#18628). - SQLite: no fsync on every commit, and planner stats collected on open (pingdotgg#19205, pingdotgg#18471). - Distinct CI checks with overlapping names (pingdotgg#19162). - Bitbucket short-hash heads in review guides (pingdotgg#18900). - Webhook template backtracking (pingdotgg#19160). - OpenCode timeout formatting (pingdotgg#12469). - Pi tool schemas and turn-start queueing (pingdotgg#18643, pingdotgg#18639). - Usage hubs without a host, and Antigravity accounts deduplicated (pingdotgg#11368, pingdotgg#19207). - Haiku 5.5 as the default for background text generation (pingdotgg#18781). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- Moatless task: https://moatless.soaplabstest.com/tasks/db18f6dc-70c1-4d89-ada7-cd4b4f19a247
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.
Note
🤖 Claude Opus 5.5 on behalf of Oliver
Problem
The PR panel's header merge button is much wider than its label when the merge method is plain "Merge". The button always reserved room for its "Confirm merge?" state. "Squash and merge" and "Rebase and merge" are already longer than that, so only plain Merge showed the empty space.
Change
The button now sizes to its method label and animates its width whenever the label changes:
A new
AnimatedWidthcomponent, the width counterpart ofAnimatedHeight, does this. It measures its content with the sharedobserveResizeobserver and transitionswidthover 150ms. It doesn't animate on first render and respectsprefers-reduced-motion.interpolate-sizecan't do this on its own: the button's width isautobefore and after, so the browser never starts a transition. That approach is also Chromium-only.The button's minimum width is still its method label. That way "Squash and merge" never shrinks when it becomes "Confirm merge?", so a second click near the left edge doesn't miss. The header actions are right-aligned, so plain Merge grows to the left and stays under the pointer.
Scope and approval
This is a small, focused visual fix for one control. Confirm behavior, actions, and the other header buttons are unchanged.
Verification
vp test run apps/web/src/components/pullRequest/PullRequestDetailPanel.test.tsx: 29 passed. Web typecheck passes, and lint on the changed files shows no errors.Before: Merge reserves the width of "Confirm merge?"
After: Merge fits its label at rest
After, transition slowed to 1.2s for the recording (the browser recorder captures about 7–14 fps, too few frames to show a 150ms tween). It shows Merge → Confirm merge? → Escape → Merge, then switching to Squash and merge and back to Merge.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/264963c5b63a352b/merge-width-slowed.mp4
Not checked: the desktop app and dark theme.
Model: Claude Opus 5.5 (first screenshots by GPT-5.6 Luna). Harness: Claude Code in T3 Code.