{"id":"60d63eab-a3a1-460a-b0f6-989f7b9be2cd","shortId":"mUa8K6","kind":"skill","title":"done","tagline":"Task completion workflow — run tests, commit, push, and update MASTER_PLAN.md. Use when a task is finished and ready to ship. Triggers on \"/done\", \"mark done\", \"task complete\", \"finish task\", \"ship it\".","description":"# Task Completion Workflow\n\nFinalize a completed task: verify tests pass, commit changes, update MASTER_PLAN.md, and push.\n\n## Triggers\n\n- `/master-plan:done` - Main command\n- \"mark done\", \"task complete\", \"finish task\", \"ship it\"\n\n## Workflow\n\n### Step 1: Check What Changed\n\nRun git status to see what files were modified:\n\n```bash\ngit status\ngit diff --stat\n```\n\nOutput immediately:\n```\nFiles changed:\n- [list of modified files]\n```\n\n### Step 2: Get Task Information\n\nUse `AskUserQuestion` to collect:\n\n1. **Task ID** (header: \"Task ID\")\n   - Options: \"Tracked task (enter ID)\" or \"Quick fix (no task ID)\"\n\n2. **Run tests?** (header: \"Tests\")\n   - Options: \"Yes — run test suite (Recommended)\" or \"Skip tests\"\n\nThen ask in plain text: \"What's a brief summary of the changes? (1-2 sentences)\"\n\n**IMPORTANT**: Wait for user to provide the summary before proceeding.\n\n### Step 3: Run Tests (unless skipped)\n\nDetect and run the project's test command. Check in order:\n1. If `package.json` exists → `npm test`\n2. If `Cargo.toml` exists → `cargo test`\n3. If `pyproject.toml` or `setup.py` exists → `pytest`\n4. If `Makefile` with `test` target → `make test`\n5. If `go.mod` exists → `go test ./...`\n\n**If tests fail**: STOP immediately. Report failures. Do NOT proceed.\n**If tests pass**: Continue.\n**If no test command found**: Warn user and continue.\n\n### Step 4: Update MASTER_PLAN.md (if tracked task)\n\n**Skip this step if user selected \"Quick fix (no task ID)\".**\n\n**CRITICAL**: Tasks may appear in **multiple locations**. Update ALL of them:\n\n#### 4a. Summary/Roadmap Table\n\nFind the task row and update:\n\n```markdown\n# Before:\n| **TASK-XXX** | **Title** | **P2** | PLANNED | ... |\n\n# After:\n| ~~**TASK-XXX**~~ | ✅ **Title** | **P2** | ✅ DONE (YYYY-MM-DD) | ... |\n```\n\n#### 4b. Subtask/Bullet Lists\n\n```markdown\n# Before:\n- TASK-XXX: Description\n\n# After:\n- ~~TASK-XXX~~: ✅ Description\n```\n\n#### 4c. Detailed Section Header\n\n```markdown\n# Before:\n### TASK-XXX: Title (IN PROGRESS)\n\n# After:\n### ~~TASK-XXX~~: Title (✅ DONE)\n```\n\n#### 4d. Verify All Updated\n\nSearch for the task ID and confirm all occurrences show strikethrough or ✅ DONE:\n\n```bash\ngrep \"TASK-XXX\" docs/MASTER_PLAN.md\n```\n\n### Step 5: Commit and Push\n\nStage all relevant files. **NEVER commit**:\n- `.env*` files\n- `credentials*.json` or files containing secrets\n- `node_modules/`, `__pycache__/`, `target/`, `.venv/`\n- Backup files, generated stats, lock files (unless intentional)\n\nPrefer staging specific files by name over `git add -A`.\n\n```bash\n# Stage code files\ngit add <changed-files>\ngit add docs/MASTER_PLAN.md  # if tracked task\n\n# Commit\ngit commit -m \"$(cat <<'EOF'\nfeat(TASK-XXX): Brief summary from user\n\n- Key change 1\n- Key change 2\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\"\n\n# Push\ngit push\n```\n\n**For quick fixes (no task ID):**\n```bash\ngit commit -m \"$(cat <<'EOF'\nfix: Brief summary from user\n\nCo-Authored-By: Claude <noreply@anthropic.com>\nEOF\n)\"\ngit push\n```\n\n**Commit prefix conventions:**\n- `feat(TASK-XXX):` — New feature\n- `fix(BUG-XXX):` — Bug fix\n- `chore(TASK-XXX):` — Maintenance\n- `refactor(TASK-XXX):` — Code refactoring\n- `docs(TASK-XXX):` — Documentation only\n\n### Step 6: Report Completion\n\nOutput this summary:\n\n```\n## Task Complete\n\n- **Task**: TASK-XXX (or \"Quick fix\")\n- **Summary**: [user's summary]\n- **Tests**: ✅ Passed (or ⏭️ Skipped)\n- **Commit**: [short hash] — [message]\n- **Push**: ✅ Pushed to origin\n- **MASTER_PLAN.md**: Updated / N/A\n```\n\n## Important Rules\n\n1. **NEVER skip commit/push** — Changes must be pushed to the remote\n2. **ALWAYS collect summary** — Don't proceed without knowing what changed\n3. **Update ALL locations** in MASTER_PLAN.md for tracked tasks\n4. **Verify with grep** after updating MASTER_PLAN.md\n5. **Wait for user input** — Don't assume or skip questions\n6. **Test failures block completion** — If tests fail, stop and report\n\n## Files to NEVER Commit\n\n- `.env*` files (secrets)\n- `credentials*.json`\n- Private keys, tokens\n- Generated/cached files (`node_modules/`, `dist/`, `__pycache__/`)\n- OS files (`.DS_Store`, `Thumbs.db`)","tags":["done","master","plan","endlessblink","agent-skills","ai-workflow","claude-code","claude-code-plugin","master-plan","productivity","task-management"],"capabilities":["skill","source-endlessblink","skill-done","topic-agent-skills","topic-ai-workflow","topic-claude-code","topic-claude-code-plugin","topic-master-plan","topic-productivity","topic-task-management"],"categories":["master-plan"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/endlessblink/master-plan/done","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add endlessblink/master-plan","source_repo":"https://github.com/endlessblink/master-plan","install_from":"skills.sh"}},"qualityScore":"0.462","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 24 github stars · SKILL.md body (4,085 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T13:02:13.491Z","embedding":null,"createdAt":"2026-04-18T23:04:39.295Z","updatedAt":"2026-04-24T13:02:13.491Z","lastSeenAt":"2026-04-24T13:02:13.491Z","tsv":"'-2':145 '/done':24 '/master-plan':50 '1':64,100,144,174,412,521 '2':92,117,180,415,532 '3':158,186,543 '4':193,231,552 '4a':259 '4b':287 '4c':301 '4d':319 '5':201,343,559 '6':485,570 'add':382,389,391 'alway':533 'appear':251 'ask':132 'askuserquest':97 'assum':566 'author':418,445 'backup':366 'bash':77,336,384,432 'block':573 'brief':139,406,439 'bug':463,465 'bug-xxx':462 'cargo':184 'cargo.toml':182 'cat':400,436 'chang':44,67,86,143,411,414,525,542 'check':65,171 'chore':467 'claud':420,447 'co':417,444 'co-authored-bi':416,443 'code':386,476 'collect':99,534 'command':53,170,224 'commit':7,43,344,352,396,398,434,452,508,584 'commit/push':524 'complet':3,28,34,38,57,487,492,574 'confirm':329 'contain':359 'continu':220,229 'convent':454 'credenti':355,588 'critic':248 'dd':286 'descript':295,300 'detail':302 'detect':163 'diff':81 'dist':597 'doc':478 'docs/master_plan.md':341,392 'document':482 'done':1,26,51,55,282,318,335 'ds':601 'enter':109 'env':353,585 'eof':401,422,437,449 'exist':177,183,191,204 'fail':209,577 'failur':213,572 'feat':402,455 'featur':460 'file':74,85,90,350,354,358,367,371,377,387,581,586,594,600 'final':36 'find':262 'finish':17,29,58 'fix':113,244,428,438,461,466,499 'found':225 'generat':368 'generated/cached':593 'get':93 'git':69,78,80,381,388,390,397,424,433,450 'go':205 'go.mod':203 'grep':337,555 'hash':510 'header':103,120,304 'id':102,105,110,116,247,327,431 'immedi':84,211 'import':147,519 'inform':95 'input':563 'intent':373 'json':356,589 'key':410,413,591 'know':540 'list':87,289 'locat':254,546 'lock':370 'm':399,435 'main':52 'mainten':471 'make':199 'makefil':195 'mark':25,54 'markdown':268,290,305 'master_plan.md':11,46,233,516,548,558 'may':250 'messag':511 'mm':285 'modifi':76,89 'modul':362,596 'multipl':253 'must':526 'n/a':518 'name':379 'never':351,522,583 'new':459 'node':361,595 'noreply@anthropic.com':421,448 'npm':178 'occurr':331 'option':106,122 'order':173 'origin':515 'os':599 'output':83,488 'p2':274,281 'package.json':176 'pass':42,219,505 'plain':134 'plan':275 'prefer':374 'prefix':453 'privat':590 'proceed':156,216,538 'progress':312 'project':167 'provid':152 'push':8,48,346,423,425,451,512,513,528 'pycach':363,598 'pyproject.toml':188 'pytest':192 'question':569 'quick':112,243,427,498 'readi':19 'recommend':127 'refactor':472,477 'relev':349 'remot':531 'report':212,486,580 'row':265 'rule':520 'run':5,68,118,124,159,165 'search':323 'secret':360,587 'section':303 'see':72 'select':242 'sentenc':146 'setup.py':190 'ship':21,31,60 'short':509 'show':332 'skill' 'skill-done' 'skip':129,162,237,507,523,568 'source-endlessblink' 'specif':376 'stage':347,375,385 'stat':82,369 'status':70,79 'step':63,91,157,230,239,342,484 'stop':210,578 'store':602 'strikethrough':333 'subtask/bullet':288 'suit':126 'summari':140,154,407,440,490,500,503,535 'summary/roadmap':260 'tabl':261 'target':198,364 'task':2,15,27,30,33,39,56,59,94,101,104,108,115,236,246,249,264,271,278,293,298,308,315,326,339,395,404,430,457,469,474,480,491,493,495,551 'task-xxx':270,277,292,297,307,314,338,403,456,468,473,479,494 'test':6,41,119,121,125,130,160,169,179,185,197,200,206,208,218,223,504,571,576 'text':135 'thumbs.db':603 'titl':273,280,310,317 'token':592 'topic-agent-skills' 'topic-ai-workflow' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-master-plan' 'topic-productivity' 'topic-task-management' 'track':107,235,394,550 'trigger':22,49 'unless':161,372 'updat':10,45,232,255,267,322,517,544,557 'use':12,96 'user':150,227,241,409,442,501,562 'venv':365 'verifi':40,320,553 'wait':148,560 'warn':226 'without':539 'workflow':4,35,62 'xxx':272,279,294,299,309,316,340,405,458,464,470,475,481,496 'yes':123 'yyyi':284 'yyyy-mm-dd':283","prices":[{"id":"32ae21b6-b121-4c4b-8aca-eabaf799680e","listingId":"60d63eab-a3a1-460a-b0f6-989f7b9be2cd","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"endlessblink","category":"master-plan","install_from":"skills.sh"},"createdAt":"2026-04-18T23:04:39.295Z"}],"sources":[{"listingId":"60d63eab-a3a1-460a-b0f6-989f7b9be2cd","source":"github","sourceId":"endlessblink/master-plan/done","sourceUrl":"https://github.com/endlessblink/master-plan/tree/master/skills/done","isPrimary":false,"firstSeenAt":"2026-04-18T23:04:39.295Z","lastSeenAt":"2026-04-24T13:02:13.491Z"}],"details":{"listingId":"60d63eab-a3a1-460a-b0f6-989f7b9be2cd","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"endlessblink","slug":"done","github":{"repo":"endlessblink/master-plan","stars":24,"topics":["agent-skills","ai-workflow","claude-code","claude-code-plugin","master-plan","productivity","task-management"],"license":"mit","html_url":"https://github.com/endlessblink/master-plan","pushed_at":"2026-02-26T07:00:33Z","description":"AI-native task management for Claude Code. Track tasks in MASTER_PLAN.md — pick, save, ship.","skill_md_sha":"8e29263de9da05e43d78957fc67a6333eec6f736","skill_md_path":"skills/done/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/endlessblink/master-plan/tree/master/skills/done"},"layout":"multi","source":"github","category":"master-plan","frontmatter":{"name":"done","description":"Task completion workflow — run tests, commit, push, and update MASTER_PLAN.md. Use when a task is finished and ready to ship. Triggers on \"/done\", \"mark done\", \"task complete\", \"finish task\", \"ship it\"."},"skills_sh_url":"https://skills.sh/endlessblink/master-plan/done"},"updatedAt":"2026-04-24T13:02:13.491Z"}}