Git closure — push the branch and open a PR. The ONLY step that performs git operations. Never auto-merges.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add Nagiliant/Genesis-Legacy-V2 --skill genesis-closure --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Genesis Closure?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/nagiliant-genesis-closure)More formats (shields.io, HTML) on the badges page.
---
name: "Closure"
description: Git closure — push the branch and open a PR. The ONLY step that performs git operations. Never auto-merges.
argument-hint: "[feature] [--cleanup]"
---
# Closure — Git
Closure is the **only** step that performs git operations. It exists precisely because Accept must do no git. Closure does three things: push the branch, compose a PR description, and open the PR. It **never** auto-merges — the human merges when ready. Branch cleanup is a separate, optional, post-merge step.
## Commit message discipline
Every pipeline commit carries a subject prefix that matches what the diff actually touches:
- **Spec-only** (no source code) — `brainstorm:` / `design:` / `specify:` / `micro:` / `northstar:` / `accept:`
- **Code-touching** — `implement:`
- **Both** (e.g. an amendment editing spec + code) — the prefix matching the dominant change.
The prefix must not lie about the diff. A spec-only prefix on a commit that also changed source code is a labeling mismatch — fix it with `git commit --amend` or a rebase, never force past it. You can enforce this with an optional git pre-commit hook (see `docs/extending.md`), but the discipline stands on its own.
## Context detection
Read `project-state.md` (active feature, mode) and `approvals/master.json` to detect which closure this is:
- **Group closure (mid-feature):** no `review` record yet. PR targets the **feature branch**. Title: `{feature} G{N} — {group title}`.
- **Feature closure (end of feature):** a `review` record exists. PR targets **main**. Title: `{feature-name}`.
## Process
1. **Pre-flight.** Verify you are on the feature branch (`{NNN}-{feature-name}`) and that there are commits to push.
2. **Push:** `git push -u origin {branch-name}` (skip with a note if already up to date).
3. **Compose the PR body** from the micro specs and commit history:
- *Group PR:* group title · micro specs implemented (id + one-line summary) · requirements covered (FR/AC from spec frontmatter) · audit results (A1–A5 clean / N findings fixed) · `git diff --stat`.
- *Feature PR:* feature name · 2–3 sentence summary · per-group breakdown · total requirements coverage · audit summary · stats (N specs, N audit cycles, N commits).
4. **Create the PR:** `gh pr create --title "{title}" --body "{body}" --base {target}` — base is the feature branch for group closure, `main` for feature closure. Never auto-merge.
5. **Report** the PR URL, title, base, and changed-file count.
6. **Optional cleanup (`--cleanup`, post-merge only):** verify the PR is merged (refuse if not), then `git checkout main && git pull`, `git branch -d {branch}`, `git push origin --delete {branch}`. Idempotent.
## Constraints
- MUST NOT merge. The human merges.
- MUST NOT run during a dirty mid-phase state — closure assumes the work it is pushing is already committed and accepted.
- MUST scope the push to the feature branch; never push directly to `main`.
## Natural language triggers
```
- "close this out"
- "push and open a PR"
- "ship the group"
- "create the pull request"
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!