Skip to content

fix(web): Push on the default branch no longer offers a feature branch the server rejects - #29845

Merged
juliusmarminge merged 3 commits into
pingdotgg:mainfrom
saphid:fix/gitactions-hunt
Nov 14, 2026
Merged

juliusmarminge merged 3 commits into
pingdotgg:mainfrom
saphid:fix/gitactions-hunt

Conversation

@saphid

@saphid saphid commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

On the default branch with unpushed commits and local edits, Push → Check out feature branch & continue sent push with featureBranch: true. The server rejects feature-branch checkout for actions that do not commit. The same unsupported option was available for create_pr.

The web confirmation now disables that option for Push and Create PR and explains why. Commit actions with local changes still offer it, and continuing on the current branch is unchanged. This extends the clean-tree guard from #18716. Mobile handles feature branches separately and is unchanged.

This is a small fix for an existing client/server precondition mismatch; no prior issue or product-direction approval is claimed. The integration retains main’s menu-availability fix from #31972.

Verification

  • Integrated main at 8c9af54; candidate aaafcef.
  • Red against that main’s logic: the regression fails at the dirty-tree Push guard; 1 failed, 17 passed. Candidate source restored after the check.
  • CI=true vp test run apps/web/src/components/GitActionsControl.logic.test.ts: 18/18 passed locally and in the worktree’s Linux Boat sandbox.
  • CI=true TMPDIR=/private/tmp vp run check:changed 8c9af5418a3344e7a2063c12be18cafd1a79ad60: format, lint, both knip checks, affected typechecks (2 packages), focused tests and React compiler checks passed after the merge commit.
  • Fresh independent integration review: Claude Opus 5.5, high reasoning, Claude Code through T3; approved with no actionable findings. Original implementation review: GPT-6.1 Sol, high.

Existing client proof

Maria’s real-client verification used Linux and original head 17d60a9. It reproduced the server rejection, verified the disabled option, pushed successfully on main while retaining local edits, and exercised feature-branch Commit & push. These captures are supplied evidence from that revision, not a fresh capture of the merge. The integration preserves the same guard and handler; only the test import required conflict resolution.

Before

Before: Push offers unsupported feature-branch checkout

After, original PR head

After: Push disables feature-branch checkout and explains why

Original-head interaction: Push guard, Abort and successful Push to main

No fresh running-client capture was made for the integration. Maria did not exercise native desktop/mobile, macOS/Windows, remote/relay/tunnel, providers other than Codex, hosted PR creation or the create_pr dialog; the focused test covers its action guard.

Original implementation: Claude Opus 5.5 in Claude Code (T3 Code). Conflict integration: GPT-6.1 Sol in Codex (T3 Code).

…h the server rejects

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Nov 3, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 17d60a9

Macroscope's review found this PR approvable — The dialog now disables feature-branch checkout for Push and Create PR because those actions do not commit changes and the server already rejects them. Commit workflows and explicit continuation on the current branch are unchanged.

No code changes detected at cbf73a4. Prior analysis still applies.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The feature-branch availability check now uses the requested action and working-tree state. The component passes the action to the check. Tests cover commit-and-push, push, and create-PR cases.

Changes: Feature Branch Availability

Layer / File(s) Summary
Action-aware availability check
apps/web/src/components/GitActionsControl.logic.ts, apps/web/src/components/GitActionsControl.tsx, apps/web/src/components/GitActionsControl.logic.test.ts
The check returns an unavailable reason when the working tree is clean. When changes exist, it returns a reason for push and create_pr, but not for commit actions. The component passes the action, and tests cover these cases.

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: maria-rcks

Merge Risk: Minimal · up to cbf73

Push and Create PR on the default branch no longer offer a feature-branch option that the server rejects. Commit actions are unchanged, and the change is easy to revert. No merge-blocking risk is evident.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title names the main change: the Push action on the default branch no longer offers a feature-branch option that the server rejects. It follows the conventional commit format. It is specific and m…
Description check Passed The description follows the template. It has a Problem section that gives the reproduction steps and the server rejection. It has a Change section that explains the guard. It has a Scope section that …
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title names the main change: the Push action on the default branch no longer offers a feature-branch option that the server rejects. It follows the conventional commit format. It is specific and matches the changeset, which disables the feature-branch option for Push and Create PR in the web confirmation.

Full details: Description check

Explanation

The description follows the template. It has a Problem section that gives the reproduction steps and the server rejection. It has a Change section that explains the guard. It has a Scope section that says no prior issue is claimed and links #18716 and #31972. It has a Verification section with focused test results, check results, and client captures. It states what was not verified, and it names the models that did the work. Two template items are weaker: the Scope section does not link an issue or explain why an issue is not needed in full detail, and the Verification section relies on evidence from an earlier revision. The required content is still present.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between aaafcef and cbf73a4.

Files selected for processing: 2

  • apps/web/src/components/GitActionsControl.logic.ts
  • apps/web/src/components/GitActionsControl.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 1 remain after this review.

@maria-rcks

maria-rcks commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

Verified unchanged head 17d60a9f984b9fdeacdfff2848e47215608dba6d on Linux using the running dev web client, the repository Playwright dependency, and /usr/bin/google-chrome. Created the project through the app and used real Codex gpt-6.1-sol turns to prepare and inspect a real git repository with a local bare origin. No mocks or fixtures.

  • Reproduced on github/main (61c3794c32): with one unpushed commit and an uncommitted README change on main, Git action options → Push offered feature-branch checkout. Clicking it sent push with featureBranch: true; the server returned Feature-branch checkout is only supported for commit actions.
  • Ran the exact PR head against the same project, thread, commit and dirty file. The feature-branch button is disabled and explains that Push does not commit changes. Abort leaves the repository unchanged.
  • Clicked Push to main. The app showed Pushed to origin/main; the real remote received the existing commit and README remained uncommitted. A second real Codex turn through the PR build confirmed this.
  • Clicked Commit & push → Check out feature branch & continue. It generated feature/docs-verification-change, committed the dirty file, pushed it, and updated the client/thread branch. The working tree was clean afterward.

Short runtime transcript from the real repository and bare origin:

After Push to main:
$ git status --short --branch
## main...origin/main
 M README.md
$ git rev-parse HEAD
8a94811d69238c457d08a2e52022657d45750423
$ git --git-dir=/home/user/gitactions-verification-remote.git rev-parse main
8a94811d69238c457d08a2e52022657d45750423

After feature-branch Commit & push:
$ git status --short --branch
## feature/docs-verification-change...origin/feature/docs-verification-change
$ git rev-parse HEAD
97bec8db53609a821d765af6d283e1e2237f2f09
$ git --git-dir=/home/user/gitactions-verification-remote.git rev-parse feature/docs-verification-change
97bec8db53609a821d765af6d283e1e2237f2f09

blacksmith-check passed the focused logic tests (17/17) and vp run check:changed HEAD^: format, lint, both knip checks, affected typechecks, tests and React compiler checks. The explicit base was needed because the worker initially had shallow snapshot history; fetched the exact head with depth 2 before rerunning. Existing CI reports 32 successful checks, none pending or failing.

Before, main with the invalid feature-branch action enabled:

Main offers feature-branch checkout for Push

After, the same data on the PR head:

PR disables feature-branch checkout for Push and explains why

The 10-second recording shows the Push guard, Abort, the still-enabled commit feature-branch option, and a successful Push to main. Inspected the capture and verified uploaded playback.

PR Push guard and successful continuation on main

Not verified

Native desktop shell, iOS/Android, macOS/Windows, remote/relay/tunnel connections, and providers other than Codex were not exercised on this Linux VM. Hosted PR creation and the create_pr confirmation branch were not exercised: the isolated repository uses a local bare origin, and Create PR was disabled on the default branch. The focused test covers its action guard. No external repository or additional PR was created, and no source changes were needed.

@juliusmarminge juliusmarminge added the takeover:in-progress A takeover lead is working on this PR label Nov 14, 2026
@juliusmarminge

Copy link
Copy Markdown
Member

Evidence

Real web app, Chromium on Linux, 1280×800, light theme, fresh synthetic state and replay provider on both commits.

Created origin/main with one unpushed commit and a modified README. Opened Git action options → Push. On base, selected feature-branch checkout and observed the server rejection. On head, checkout is disabled with an explanation while Push to main remains enabled. Opened and aborted Commit & push as the control.

Before After
Commit c342f3dec2 cbf73a432c
Result Scenario fails: feature-branch checkout remains enabled Scenario passes: checkout disabled, explanation visible, Push to main enabled
Git actions Before: Git actions After: Git actions
Push dialog Before: checkout enabled After: checkout disabled with explanation
Rejected checkout Before: server rejects feature-branch checkout Prevented by the disabled option
Commit & push control Before: checkout remains enabled for commit action After: checkout remains enabled for commit action
Failure capture Before: enabled checkout at failed assertion Passed
Recording Before interaction After interaction

Scenario and synthetic seed script

Create PR was not exercised because the local remote disables that menu item.

Not shown:

  • Create PR confirmation: the reproduction uses a local non-GitHub origin, so Create PR is disabled.
  • Execution of Push to main and commit-time feature-branch checkout was not exercised; their availability was verified and the control dialog was aborted.

@juliusmarminge juliusmarminge added takeover:ready Takeover done; auto-lands when gates pass and removed takeover:in-progress A takeover lead is working on this PR labels Nov 14, 2026
@juliusmarminge
juliusmarminge merged commit 170c1f7 into pingdotgg:main Nov 14, 2026
55 checks passed
@juliusmarminge juliusmarminge removed the takeover:ready Takeover done; auto-lands when gates pass label Nov 14, 2026
Pipyakas pushed a commit to Pipyakas/t3code that referenced this pull request Nov 15, 2026
…h the server rejects (pingdotgg#29845)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
(cherry picked from commit 170c1f7)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants