Priority: P2
User request
In the Source Control panel, make "Commit and Push" the default action/button. Keep separate "Commit only" and "Push only" actions available as secondary options, likely in a dropdown or split-button menu.
Also consider the merge flow: when a user merges from the Source Control page, BadCode may need to automatically push the merge commit by default. This probably belongs behind a setting like "push after source-control actions" / "auto-push after merge" for users who prefer manual push control. We should brainstorm the exact product behavior when implementing this issue.
Follow-up observed on May 26, 2026:
- The user was on a new local branch,
qol-updater, created outside Source Control.
- The Source Control panel showed the local branch but did not present an obvious way to publish the branch upstream.
- The UI should expose a clear publish-branch path when the current branch has no upstream, rather than requiring the user to know the right terminal command.
Why
Most source-control flows should optimize for the common case: commit local changes and push them. Separate commit/push actions are still useful, but they should not dominate the primary path. Merge behavior should follow the same philosophy: if the app helps create a merge commit, the user should not be left with a local-only state unless they explicitly prefer that workflow.
For new local branches, publishing the branch is a core source-control action. A visible Publish branch action is clearer than a generic disabled or ambiguous Push button when hasUpstream is false.
Starting points
apps/web/src/components/GitActionsControl.logic.ts owns quick-action and menu action selection.
buildMenuItems() currently builds separate Commit, Push, and PR items.
resolveQuickAction() already has commit_push and commit_push_pr action paths.
apps/web/src/components/GitActionsControl.tsx renders the action UI and dialogs.
apps/web/src/components/source-control/SourceControlPanel.tsx has source-control panel commit UI, branch UI, and push mutation wiring.
packages/contracts/src/git.ts exposes branch/upstream status such as hasUpstream.
apps/server/src/vcs/GitVcsDriverCore.ts already has push paths for branches without upstream, so this may be mostly a UI labeling/gating issue.
- Merge actions should be checked wherever the Source Control page wires branch/merge operations.
Acceptance criteria
Priority: P2
User request
In the Source Control panel, make "Commit and Push" the default action/button. Keep separate "Commit only" and "Push only" actions available as secondary options, likely in a dropdown or split-button menu.
Also consider the merge flow: when a user merges from the Source Control page, BadCode may need to automatically push the merge commit by default. This probably belongs behind a setting like "push after source-control actions" / "auto-push after merge" for users who prefer manual push control. We should brainstorm the exact product behavior when implementing this issue.
Follow-up observed on May 26, 2026:
qol-updater, created outside Source Control.Why
Most source-control flows should optimize for the common case: commit local changes and push them. Separate commit/push actions are still useful, but they should not dominate the primary path. Merge behavior should follow the same philosophy: if the app helps create a merge commit, the user should not be left with a local-only state unless they explicitly prefer that workflow.
For new local branches, publishing the branch is a core source-control action. A visible
Publish branchaction is clearer than a generic disabled or ambiguousPushbutton whenhasUpstreamis false.Starting points
apps/web/src/components/GitActionsControl.logic.tsowns quick-action and menu action selection.buildMenuItems()currently builds separateCommit,Push, and PR items.resolveQuickAction()already hascommit_pushandcommit_push_praction paths.apps/web/src/components/GitActionsControl.tsxrenders the action UI and dialogs.apps/web/src/components/source-control/SourceControlPanel.tsxhas source-control panel commit UI, branch UI, and push mutation wiring.packages/contracts/src/git.tsexposes branch/upstream status such ashasUpstream.apps/server/src/vcs/GitVcsDriverCore.tsalready has push paths for branches without upstream, so this may be mostly a UI labeling/gating issue.Acceptance criteria
Publish branchaction.HEADto the selected/default remote branch and sets upstream tracking.GitActionsControl.logictests,SourceControlPanelcoverage, and relevant browser/UI tests.