Commit 348ee25e disabled the branch selector for local executors and
also blanked the branch value at submit time. This caused the backend
to fall back to Repository.DefaultBranch, which may contain whatever
branch was checked out at repo discovery time rather than "main".
Keep the selector disabled (cosmetic) but send the auto-selected
branch value so the backend uses the correct base branch.
* feat(web): add right-click context menu to move sidebar tasks between workflow steps
* fix: scope Move to submenu to task's own workflow steps
* fix: surgical rollback and disable actions during delete
* fix: wrap TaskItem in div for ContextMenuTrigger asChild ref forwarding
* refactor: unify right-click and 3-dot menus into single context menu
- Delete task-item-menu.tsx (DropdownMenu) — no longer needed
- TaskItem's 3-dot button now dispatches contextmenu event to trigger
the wrapping ContextMenu
- TaskItemWithContextMenu tracks open state and passes menuOpen to
TaskItem for hover visibility
- Add Duplicate item to the context menu
- Fix step color dots using block display
* fix: use Tailwind class for step color dots instead of inline style
* fix: disable Duplicate menu item until handler is implemented
* fix: defer move-to-step to let context menu close before optimistic update
* fix: defer move-to-step to let context menu close before optimistic update
* feat(vcs): add commit body/description field to commit dialog
Add an optional description textarea below the commit title in both
desktop and mobile commit dialogs, with a dedicated AI generate button
for the description. Add builtin-commit-description utility agent and
E2E test.
* style: fix prettier formatting in mobile git controls and E2E test
* fix(e2e): use specific testid selectors for commit dialog inputs
The commit dialog now has two textboxes (title + body), so
getByRole("textbox") is ambiguous. Use getByTestId selectors
and add exact match for the Commit button.
* fix(ui): add cursor-pointer to mobile commit button
* fix(ui): remove "(optional)" from description label and "Generate" text from button
* fix(ui): match PR dialog style for commit description generate button
* feat(vcs): add AI generate button for PR title
Add builtin-pr-title utility agent and wire up a generate button
inside the PR title input, matching the commit title pattern.
Extract shared dialog field components into vcs-dialog-fields.tsx
to stay within the 600-line file limit.
* refactor(ui): unify generate buttons as icon-only sparkles inside inputs
Move AI generate buttons inside both title inputs and description
textareas (top-right corner) for a consistent look. Remove the
"Generate" label variant — all buttons are now icon-only sparkles.
* style: fix prettier formatting in utility agent generator hook
* fix(a11y): add aria-labels to generate buttons and PR title input
* ci: retrigger E2E tests
* fix(e2e): improve commit dialog button click reliability
Add exact match and enabled check before clicking the dialog
Commit button, increase close timeout.
* ci: retrigger checks
* fix(e2e): improve pre-hooks test commit button reliability
Add exact match, enabled check, and longer dialog timeout to match
the commit-body test pattern.
* fix(ui): prevent dialog field overflow and improve commit description prompt
- Add min-w-0 to relative wrappers in commit and PR dialog fields to
prevent text inputs/textareas from overflowing the dialog bounds
- Rewrite commit description prompt to use system-role framing that
prevents weaker models from adding conversational preamble
* feat(web): add collapsible sections to changes panel
Sections (Unstaged, Staged, Commits, PR Changes, PR Commits) can now
be collapsed/expanded by clicking the section header or chevron arrow.
Includes Playwright E2E test validating collapse and expand behavior.
* fix(web): add aria-expanded to collapsible section toggles
Addresses CodeRabbit review: adds aria-expanded attribute to section
toggle buttons for screen reader support, and asserts the attribute
in the E2E test.
* fix(web): render section toggle as button only when collapsible
Non-collapsible sections keep a plain <span> label to avoid
ambiguous getByRole("button") matches in E2E tests (e.g. "Commit"
action button vs "Commits (0)" section header).
* fix(web): use exact match for Commit button in pre-hooks E2E test
The collapsible "Commits" section toggle button now matches
getByRole("button", { name: "Commit" }) via substring. Use exact
matching to only target the action button.