Installs into .claude/skills of the current project.
Are you the author of Gate Push?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/jamie-bitflight-gate-push)
---
name: gate-push
description: "Single-verb branch-to-PR quality gate pipeline. Use when the user wants to gate, push, and open a PR for a branch in one command."
argument-hint: <branch-name>
user-invocable: true
---
Load `dh:dh-cli-usage` before using `<sam_cli/>` or `<dh_scripts/>`.
# Gate Push
Run `/dh:gate-push <branch-name>` to resolve branch context into a `/dh:complete-implementation` input and execute that quality-gate pipeline.
## Required input
- `branch_name = $ARGUMENTS` (must be non-empty)
If empty: stop with:
```text
COMPLETION BLOCKED — Missing required argument <branch-name>.
Then re-run:
/dh:gate-push <branch-name>
```
## Branch → backlog lookup algorithm
1. Normalize `branch_name` into a lookup slug:
- Strip leading branch type prefix when present (`feature/`, `fix/`, `chore/`, etc.) by removing only the prefix up to and including the first `/` character
- Then replace any remaining `/`, `_`, and `-` with spaces (for example `feature/auth/login-fix` → `auth login fix`)
- Trim whitespace
- Store the result as `normalized_slug`
- Expected pattern is `type/slug` (e.g., `feature/foo-bar`); multi-segment branches (`type/segment1/segment2`) are supported and normalize with the same replacement rule
2. Strategy 1 (title match):
- `<sam_cli/> backlog list --title "<normalized_slug>"`
3. Strategy 2 (topic match fallback, only if Strategy 1 has zero results):
- `<sam_cli/> backlog list --topic "<normalized_slug>"`
4. If exactly one item is returned, use it as `match`.
5. If multiple items are returned, do not guess — stop and follow the No-match / unresolved fallback procedure below.
## Resolve complete-implementation input
From `match`, resolve in this order:
1. If `match.issue` exists (issue number field from backlog output) → `target = #<match.issue>`
2. Else if `match.plan` exists and non-empty → `target = <match.plan>` (use the backlog item's plan field directly)
3. Else no resolvable target
## Execute gate pipeline
If `target` is resolved:
```text
Skill(skill: "dh:complete-implementation", args: "<target>")
```
`/dh:complete-implementation` is the source of truth for the quality-gate phases and final push/PR behavior. Do not duplicate its gate logic here.
## No-match / unresolved fallback
If no backlog match is found, a match exists but has neither `issue` nor `plan`, or multiple matches are found:
- Do not prompt mid-loop.
- Stop with:
```text
COMPLETION BLOCKED — Branch cannot be resolved to a single backlog issue/plan.
Required precondition:
- Ensure branch-to-backlog mapping is decided at workflow start (for example via `/dh:work-backlog-item --auto ...`) or at the start of `/dh:implement-feature`.
- Ensure the matched backlog item has either an issue number or a linked plan.
Then re-run:
/dh:gate-push <branch-name>
```
## Success check
After successful completion, verify PR visibility for the branch.
**GitHub backend only** — this step requires a GitHub remote configured with the `gh` CLI.
For beads and other non-GitHub backends, skip this step and verify via your backend's native
tooling (e.g., `bd show <issue-id>` for merge-request state).
```bash
if gh repo view --json name >/dev/null 2>&1; then
gh pr list --head <branch-name>
else
echo "Remote is not a GitHub repository — PR visibility check not applicable for this backend."
fi
```
Use the original input branch (`branch_name`), not `normalized_slug`, for `--head`.