82 lines
2.9 KiB
Markdown
82 lines
2.9 KiB
Markdown
# APP-3919: Commit Dialog
|
|
|
|
Parent spec: `specs/APP-3918/PRODUCT.md`
|
|
Branch: `edward/commit-dialog`
|
|
|
|
## Summary
|
|
|
|
Add a commit dialog overlay to the code review panel that lets users compose and execute a git commit directly from the code review header, without switching to the terminal.
|
|
|
|
## Problem
|
|
|
|
The git operations button (from the parent branch) dispatches `OpenCommitDialog` but has no dialog to open. Users must switch to the terminal to run `git commit`. This breaks the inline workflow the button is designed to enable.
|
|
|
|
## User Experience
|
|
|
|
### Opening the dialog
|
|
|
|
The commit dialog opens when the user:
|
|
- Clicks the "Commit" primary button in the code review header
|
|
- Selects "Commit" from the chevron dropdown menu
|
|
|
|
The dialog renders as a centered modal overlay with a blurred background, consistent with the existing discard confirmation dialog.
|
|
|
|
### Dialog layout
|
|
|
|
The dialog ("Commit your changes") contains four sections:
|
|
|
|
1. **Branch** — displays the current branch name with a git-branch icon. Read-only.
|
|
|
|
2. **Changes** — shows a summary of changed files with aggregate stats (file count, +additions, -deletions).
|
|
- A collapsible file list shows per-file stats (filename, directory, +/-, -)
|
|
- "Include unstaged" toggle (on by default) controls whether unstaged + untracked changes are included or only staged changes
|
|
- Toggling the switch reloads the file list from git
|
|
|
|
3. **Commit message** — a multi-line text editor with placeholder text "Leave blank to autogenerate a commit message".
|
|
- Supports soft-wrap and autogrow
|
|
- ESC dismisses the dialog
|
|
- Editor is focused on open
|
|
|
|
4. **Intent selector** — currently only "Commit" button. Future: "Commit and push", "Commit and create PR".
|
|
|
|
### Footer
|
|
|
|
- Cancel button (left)
|
|
- Confirm "Commit" button (right) — disabled when no files or no commit message
|
|
|
|
### After committing
|
|
|
|
On success:
|
|
- Dialog closes
|
|
- A toast notification shows "Changes successfully committed."
|
|
- Diffs are reloaded to reflect the new state
|
|
- Diff metadata and PR info are refreshed
|
|
|
|
On failure:
|
|
- Dialog closes
|
|
- A toast shows the error message
|
|
- Diffs are reloaded (state may have partially changed)
|
|
|
|
### Closing the dialog
|
|
|
|
The dialog can be closed by:
|
|
- Clicking Cancel
|
|
- Clicking the X button
|
|
- Pressing ESC in the message editor
|
|
|
|
## Non-goals
|
|
|
|
- Staging individual files/hunks from the dialog (the "Include unstaged" toggle is all-or-nothing)
|
|
- Commit amend
|
|
- Compound actions (commit+push, commit+create PR) — stubs exist but are wired in child branches
|
|
|
|
## Success Criteria
|
|
|
|
1. Clicking "Commit" in the header opens the dialog overlay
|
|
2. The dialog shows the current branch, file changes with stats, and a message editor
|
|
3. Toggling "Include unstaged" refreshes the file list (staged-only vs all changes)
|
|
4. Confirming runs `git commit` with the entered message
|
|
5. Success/failure toasts appear after the commit
|
|
6. The code review panel refreshes to reflect post-commit state
|
|
7. ESC and Cancel close the dialog without committing
|