Gate Push
SkillAI & modelsSingle-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.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Gate Push skill
What this skill tells your AI
The instructions your AI receives, as published by jamie-bitflight/claude_skills in plugins/development-harness/skills/gate-push/SKILL.md and read by ahel’s review.
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:
COMPLETION BLOCKED — Missing required argument <branch-name>.
Then re-run:
/dh:gate-push <branch-name>
Branch → backlog lookup algorithm
- Normalize
branch_nameinto 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 examplefeature/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
- Strip leading branch type prefix when present (
- Strategy 1 (title match):
uv run "${CLAUDE_PLUGIN_ROOT}/sam_schema/cli.py" backlog list --title "<normalized_slug>"
- Strategy 2 (topic match fallback, only if Strategy 1 has zero results):
uv run "${CLAUDE_PLUGIN_ROOT}/sam_schema/cli.py" backlog list --topic "<normalized_slug>"
- If exactly one item is returned, use it as
match. - 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:
- If
match.issueexists (issue number field from backlog output) →target = #<match.issue> - Else if
match.planexists and non-empty →target = <match.plan>(use the backlog item's plan field directly) - Else no resolvable target
Execute gate pipeline
If target is resolved:
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:
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).
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.
Signals
- GitHub stars
- 66
- Forks
- 10
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
gate-push- Source
- github.com/jamie-bitflight/claude_skills