--- name: close-feature description: Graduate a completed feature from .scratch// into the permanent docs/ structure. Run when all issues in the feature are done, or when the agent notices a feature looks complete. Always confirm with the user before moving files. --- # Close Feature Merge a completed `.scratch//` feature into the permanent `docs/` structure and delete the scratch directory. ## When to run Run this skill when: - The user explicitly calls `/close-feature ` - You notice during any task that ALL issues in a `.scratch//issues/` directory have `Status: done` — surface this proactively and offer to close ("It looks like is fully done. Want me to graduate it to docs/?") Always confirm before moving any files. ## Process ### 1. Identify the slug If called with an argument (`/close-feature `), use that. Otherwise list all `.scratch/` directories and ask the user which one to close. ### 2. Verify all issues are done Read every file in `.scratch//issues/`. Check for a `Status:` line. If any issue does NOT have `Status: done`, list the incomplete ones and stop — ask the user whether to mark them wontfix or wait. ### 3. Show the user what will move Present a summary: - N issues → `docs/issues/` (renumbered from next available) - PRD.md → `docs/PRD.md` (or merged if one already exists) - prd.json → `docs/prd.json` (merged into existing user stories array) - Any ADRs written during the feature → `docs/adr/` (renumbered from next available) - `.scratch//` deleted Ask: "Proceed?" before touching anything. ### 4. Move issues Find the highest existing number in `docs/issues/`. Issues from `.scratch//issues/` take the next slots in dependency order (lowest numbered first). Use `git mv` for each file so history is preserved: ``` git mv .scratch//issues/01-foo.md docs/issues/-foo.md ``` ### 5. Merge PRD If `docs/PRD.md` does not exist: `git mv .scratch//PRD.md docs/PRD.md` If `docs/PRD.md` already exists: append the feature's Problem Statement and Solution sections under a `## ` heading. Do not overwrite the existing file. ### 6. Merge prd.json If `docs/prd.json` does not exist: `git mv .scratch//prd.json docs/prd.json` If `docs/prd.json` already exists: merge the `userStories` array from the scratch prd.json into the main one, assigning new sequential ids to avoid collisions. Update all merged stories to `"status": "done"`. ### 7. Move ADRs If any `.md` files exist directly in `.scratch//` (not in `issues/`) that look like ADRs (contain `## Status` and `## Decision`), move them to `docs/adr/` renumbered from the next available slot. ### 8. Delete scratch directory ``` git rm -r .scratch// ``` If `.scratch/` is now empty, remove it too (it has no meaning without sub-features). ### 9. Commit ``` git add docs/ git commit -m "docs: close feature — graduate to docs/" ``` ### 10. Update ralph default (if needed) If `scripts/ralph_progress.py` exists and its `DEFAULT_PRD` still points at `.scratch//prd.json`, update it to `docs/prd.json`. ## Machine setup reference Skills are stored in `.agents/skills/` and symlinked into `.claude/skills/`. Both directories are git-tracked so cloning the repo gives you all skills automatically. **On a new machine (Linux/Mac):** ```bash git clone # Skills work immediately — .claude/skills/ symlinks resolve automatically. # .claude/settings.local.json is machine-local (gitignored). # Recreate it if you need custom permission allowlists. ``` **On Windows:** ```bash git clone -c core.symlinks=true # Requires Developer Mode or admin rights for symlink creation. # If symlinks didn't resolve, run: scripts/link-skills.sh (or re-run /setup-matt-pocock-skills) ``` **Codex:** reads `AGENTS.md` at the repo root — already tracked, no setup needed. **Hermes / other local LLM tools:** add their context files to the repo root or `docs/` and commit. Point the tool at that file in its config. **To add a new skill to the repo:** ```bash mkdir .agents/skills/ # write .agents/skills//SKILL.md ln -s ../../.agents/skills/ .claude/skills/ git add .agents/skills/ .claude/skills/ git commit -m "skill: add " ```