Two related simplification-audit findings, bundled because they edit some of the same skill-audit files and splitting would fragment single-file diffs. Finding 10: delete 48 per-skill/reference README.md files (they restated SKILL.md in narrative form and no agent ever loads them) plus 2 scaffold templates. Drop the README criterion from skill-audit's file-structure.md and finding-criteria.md, and the README-generation step from skill-author's new-skill.sh; update new-skill.bats to match. Plugin-root READMEs are kept intentionally, out of scope. Finding 12: strip historical ADR-0020/ADR-0023 citations and changelog-style narration from model-facing skill content across kyberforge and git plugin skills. Delete skill-author's one-time retrofit.md migration guide and its references. Some ADR-0023 tags were not narration but check-rtk-prefix's required opt-out marker for intentionally-bare git commands -- those were restored, not stripped. Mirror re-synced and full pre-commit/pre-push suite verified green. Refs: SIMPLIFICATION-AUDIT.md findings 10, 12 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YR2CjVumUbEGWcMikcoXBD
3.9 KiB
name, description, metadata
| name | description | metadata | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| git-branches | Use when creating, switching, deleting, renaming, tracking, merging, or comparing local git branches under GitHub Flow or Gitflow. Not writing or rewriting commits -> `git-commits`. Not history inspection -> `git-history`. Not a Gitea remote's branches -> `gitea-branches`. |
|
Gotchas
- Uncommitted changes abort a switch.
git switchrefuses rather than clobbering conflicting local edits. Offer to stash and retry — forcing the checkout past it is how work disappears. - A branch and a tag can carry the same name. Detect it before acting —
git branch --list <name>(bare, notrtk: rtk prints a phantom*line even on no match, which reports every name as ambiguous) andrtk git tag --list <name>; output from both means the name is ambiguous. Prefergit switchovergit checkout, and where a command accepts either ref, disambiguate withrefs/heads/<name>orrefs/tags/<name>. mainandmasterare a refusal, not a gate. Force-pushing, force-deleting, or renaming them is rejected even when the caller passesconfirm: true— no flag makes the remote's history recoverable. Offer a new branch instead.
Step 1 — Determine the branching pattern
Read branching_pattern from the git plugin config (.claude/plugins/git/config.json; the plugin root's config.example.json shows the shape). Default: github-flow. With no config, infer Gitflow from the presence of a develop or release/* branch, and GitHub Flow otherwise.
The two patterns are not mixable, and the wrong merge rule silently damages history. If the action touches a base branch, a name prefix, or a merge rule, read references/branch-patterns.md.
Step 2 — Dispatch on the action
| Action | Reference |
|---|---|
| create, switch, delete, rename, track, list, get-intent, stash | references/branch-operations.md |
| merge a branch, resolve merge conflicts | references/merging.md |
| compare two branches, find their divergence | references/comparing-branches.md |
Load only the file the action needs. A destructive action still passes Step 3 first.
Step 3 — Gate destructive operations
Before any delete or force-delete that loses history:
- Does the branch track a remote? Warn if so.
- Are there unpushed commits on it? Warn if so.
- Did the caller pass
confirm: true? Fail if not — for a human caller, prompt interactively instead of failing.
These gates are passable. The main/master refusal in Gotchas is not.
Step 4 — Set tracking
A new branch's first push must be rtk git push -u origin <branch>. The push itself is git-remotes' — every remote-side gate lives there, which is why Step 2's remote-delete row hands off the same way — but the upstream requirement originates here, so carry it in the handoff. Without an upstream, later pushes and pulls either fail or silently target the wrong remote branch, and the caller has no way to tell which happened.
Step 5 — Return a structured result
Return every operation in this shape rather than prose, including failures — a calling agent chains its next operation on the result and cannot parse a sentence.
{
"success": true,
"action": "create|switch|delete|rename|track|list|get-intent",
"branch": "<name>",
"message": "descriptive message",
"intent": "<intent if tracked>",
"tracking": "origin/<branch, if set>",
"error": "<error message if success=false>",
"suggestion": "<recovery suggestion if applicable>"
}
When the failure is uncommitted local changes, set "suggestion": "stash changes and retry" so the caller can offer recovery rather than surfacing a dead end.
When a calling agent supplies a structured request rather than prose, read references/orchestrator-contract.md for the request schema.