--- name: speckit-branch-convention-rename description: Rename non-compliant branches and spec folders to match the configured convention compatibility: Requires spec-kit project structure with .specify/ directory metadata: author: github-spec-kit source: branch-convention:commands/speckit.branch-convention.rename.md --- # Rename to Convention Rename non-compliant Git branches and spec folders to match the configured naming convention. Handles both branch renaming and folder moving with full safety checks. ## User Input ```text $ARGUMENTS ``` You **MUST** consider the user input before proceeding (if not empty). The user may specify a specific branch to rename (e.g., "004-chat-system") or "all" to rename everything non-compliant. ## Prerequisites 1. Verify a spec-kit project exists by checking for `.specify/` directory 2. Load convention config from `.specify/branch-convention.yml` 3. If no convention is configured, inform the user and suggest running `/speckit.branch-convention.configure` first 4. Verify the working tree is clean (no uncommitted changes) — renaming with dirty state risks data loss ## Outline 1. **Run validation first**: Execute the same checks as `/speckit.branch-convention.validate` to identify all non-compliant branches and folders. 2. **Build rename plan**: For each non-compliant item, compute the correct name: | Current Name | Convention | New Name | Action | | ----------------- | ----------------------- | ---------------------- | --------------------------- | | `004-chat-system` | `{type}/{seq}-{kebab}` | `feat/004-chat-system` | Rename branch, keep folder | | `5-api` | `{seq}-{kebab}` (pad 3) | `005-api` | Rename branch + move folder | | `PROJ142-auth` | `{ticket}-{kebab}` | `PROJ-142-auth` | Rename branch + move folder | 3. **Present the rename plan**: Show a preview table before making any changes: ```markdown # Rename Plan | # | Current Branch | New Branch | Current Folder | New Folder | | --- | --------------- | -------------------- | --------------- | --------------------------- | | 1 | 004-chat-system | feat/004-chat-system | 004-chat-system | 004-chat-system (unchanged) | | 2 | 5-api | feat/005-api | 5-api | 005-api | **Actions**: {N} branches to rename, {M} folders to move ``` 4. **Confirm with user**: Ask for explicit confirmation before proceeding. This is a destructive operation. 5. **Execute renames** (after confirmation): For each item in the plan: - **Rename spec folder**: `git mv specs/{old} specs/{new}` (preserves git history) - **Update internal references**: Search spec.md, plan.md, tasks.md for references to the old folder/branch name and update them - **Rename git branch**: `git branch -m {old} {new}` - **Update tracking**: If branch tracks a remote, inform user to update remote separately 6. **Update references in artifacts**: After renaming, scan all spec artifacts for stale references: - `spec.md` header metadata (branch name field) - `plan.md` header metadata - `tasks.md` header metadata - Any cross-references between features 7. **Report**: Output a summary: - How many branches were renamed - How many folders were moved - How many artifact references were updated - Any items that could not be renamed (e.g., currently checked-out branch conflicts) - Suggest next step: `/speckit.branch-convention.validate` to confirm all items are now compliant ## Rules - **Never rename without confirmation** — always show the plan first and wait for explicit approval - **Clean working tree required** — refuse to rename if there are uncommitted changes - **Use git mv for folders** — preserves git history and tracking - **Update all references** — scan artifacts for old names and update to new names - **Never rename main/master/develop** — only rename spec-kit feature branches - **Handle checked-out branch** — if the current branch needs renaming, rename it last using `git branch -m` - **Remote branches are informational only** — report that remote branches need manual update (`git push origin :{old} {new}`) but do not push automatically