--- name: push description: Push a committed branch whose task-defined checks passed. With --fixup, continue with CI and review handling in the primary conversation. --- # Push ## Planner Entry Push the verified commit directly in the primary conversation. With `--fixup`, continue with `/pr-fixup` in that same conversation; do not delegate polling or delivery. ## Available skills - **`/commit`** — Creates the artifact after task-defined checks pass. - **`/pr-fixup`** — Wait for CI checks and CodeRabbit, Greptile, Claude, OpenCode, and cubic review feedback, fix any failures or valid comments, and push again. ## Options - `--fixup` — after pushing, begin `/pr-fixup` in the same conversation. > **Note:** This skill normally uses `git push`. It uses `gh pr view` before a > no-upstream fallback so a checked-out fork PR is not accidentally pushed to > its base repository. ## Your task Push the already committed branch to its remote. ### Steps **Create a todo/task for each step below and mark them as completed as you go.** 1. **Uncommitted changes:** If there are dirty or staged changes, stop: a new commit and the affected task checks are required first. 2. **Task-check evidence:** Require the task-defined unit, integration, and E2E checks affected by this commit to pass. If the checkout or commit changed afterward, rerun only the affected task checks. 3. **Safety check:** Verify the current branch is NOT `main` or `master`. If it is, stop and ask the user — direct pushes to the default branch should go through a PR. 4. **Push** the current branch: ```bash git push ``` If the branch has no upstream, first look up the current branch's PR. Treat an unavailable or ambiguous lookup as a stop condition; only a confirmed absence of a PR permits the ordinary `origin` fallback. For a confirmed PR, require its `headRefName` to match the checked-out local branch, then inspect its delivery target: ```bash gh pr view --json isCrossRepository,headRepositoryOwner,headRepository,headRefName,headRefOid,maintainerCanModify ``` For a cross-repository PR, the PR head owner can push its own fork directly. When acting as a base-repository maintainer on somebody else's fork, `maintainerCanModify` must be `true`; do not treat that field as a universal fork-owner gate. Push the exact current commit to the reported head owner, repository, and ref. Before using the HTTPS URL, configure Git to use the authenticated `gh` credential helper: ```bash gh auth setup-git git push "https://github.com//.git" "HEAD:refs/heads/" ``` If that push fails with `git repository does not match any credential lease scope`, do not put a token in command arguments or logs. Retry after `gh auth setup-git`; if HTTPS still rejects the contributor-fork push, use the SSH fallback below or report the authentication/scope blocker. Never embed the token in a remote URL, command argument, log, or persisted credential. Re-fetch the PR and require its `headRefOid` to equal local `HEAD` afterward. If HTTPS still rejects a contributor-fork push and SSH authentication is available, verify the exact target with `git ls-remote git@github.com:/.git`, then retry the same exact ref over SSH (using the exact remote-OID lease if history was rewritten). Re-fetch and verify the PR head OID again. Do not substitute a local `fork` remote or an inferred repository. Do not use a conveniently named local `fork`/`contributor` remote: linked worktrees share remote configuration, so it can refer to another task. Re-fetch the PR and require `headRefOid` to equal local `HEAD`. Only for a non-PR or same-repository PR, use `git push -u origin HEAD` rather than transcribing the branch name. Then verify `git rev-parse HEAD` equals `git rev-parse '@{upstream}'`, and report the branch from `git branch --show-current`. If the branch was rebased or history was rewritten, first confirm the current branch is not `main` or `master`, then use the exact remote-OID lease `git push --force-with-lease=refs/heads/:`. Use generic `--force-with-lease` only when no remote OID was captured; never use an unconditional force push. If the branch modifies `.github/workflows/*` and GitHub rejects the push with a message like `refusing to allow an OAuth App to create or update workflow ... without workflow scope`, treat it as push authentication/scope, not a code or branch-protection failure. Retry with an SSH remote when available, for example `git push git@github.com:/.git `, or tell the user the token needs `workflow` scope. If both HTTPS and SSH pushes time out and an authorized GitHub connector exposes Git database writes, preserve the tested tree by creating blobs for the exact file contents, a tree from the known parent tree, and a commit with the same parent and message, then fast-forward the existing branch ref. Fetch that ref, verify its content and commit, and reset the local worktree only to the fetched SHA. This can produce a different commit SHA, so all subsequent checks and final evidence must use the fetched head. 5. **Report** the pushed commit hash and branch. 6. **If `--fixup`:** Continue with `/pr-fixup` in this conversation.