diff --git a/.agents/skills/close-feature/SKILL.md b/.agents/skills/close-feature/SKILL.md new file mode 100644 index 0000000..0641566 --- /dev/null +++ b/.agents/skills/close-feature/SKILL.md @@ -0,0 +1,115 @@ +--- +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 " +``` diff --git a/.claude/skills/close-feature b/.claude/skills/close-feature new file mode 120000 index 0000000..e4894f7 --- /dev/null +++ b/.claude/skills/close-feature @@ -0,0 +1 @@ +../../.agents/skills/close-feature \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 18b0ab5..ceb3eb6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ### Issue tracker -Issues live as local markdown files under `.scratch//`. See `docs/agents/issue-tracker.md`. +Active feature work lives under `.scratch//`. Completed features are merged into `docs/issues/` via `/close-feature`. See `docs/agents/issue-tracker.md`. ### Triage labels