Skip to content
Back to skills

Gate Push

ASecurity

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.

  • 67 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
toolsgobashgitbackend

Works with

  • cli

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add Jamie-BitFlight/claude_skills --skill gate-push --agent claude-code

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.

Security grade badge for Gate Push
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jamie-bitflight-gate-push/badge)](https://www.skillsdirectory.com/skills/jamie-bitflight-gate-push)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…