[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6R7RN35V9A352H0CPHC83Q3":3,"skill-same:01M6R7RN35V9A352H0CPHC83Q3":44},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":12,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":29,"install":30,"resources":43},"01M6R7RN35V9A352H0CPHC83Q3","release-process",null,"barichter\u002Fsquad","barichter","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F96797186?v=4","01M6R712K8ESMDF089BFENBR16","01M6R712R74BSQQSG2GTXBWR8P",0,"MIT","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-sdk\u002Ftemplates\u002Fskills\u002Frelease-process\u002FSKILL.md",[],[17,18,19],"release process","release","process","2026-11-10 10:12:30",false,"# Release Process\n\n> Earned knowledge from the v0.9.0→v0.9.1 incident. Every agent involved in releases MUST read this before starting release work.\n\n## SCOPE\n\n✅ THIS SKILL PRODUCES:\n- Pre-release validation checks that prevent broken publishes\n- Correct npm publish commands (never workspace-scoped)\n- Fallback procedures when CI workflows fail\n- Post-publish verification steps\n\n❌ THIS SKILL DOES NOT PRODUCE:\n- Feature implementation or test code\n- Architecture decisions\n- Documentation content\n\n## Confidence: high\n\nEstablished through the v0.9.1 incident (8-hour recovery). Every rule below is battle-tested.\n\n## Context\n\nSquad publishes two npm packages: `@bradygaster\u002Fsquad-sdk` and `@bradygaster\u002Fsquad-cli`. The release pipeline flows: dev → preview → main → GitHub Release → npm publish. Brady (project owner) triggers releases — the coordinator does NOT.\n\n## Rules (Non-Negotiable)\n\n### 1. Coordinator Does NOT Publish\n\nThe coordinator routes work and manages agents. It does NOT run `npm publish`, trigger release workflows, or make release decisions. Brady owns the release trigger. If an agent or the coordinator is asked to publish, escalate to Brady.\n\n### 2. Pre-Publish Dependency Validation\n\nBefore ANY release is tagged, scan every `packages\u002F*\u002Fpackage.json` for:\n- `file:` references (workspace leak — the v0.9.0 root cause)\n- `link:` references\n- Absolute paths in dependency values\n- Non-semver version strings\n\n**Command:**\n```bash\ngrep -r '\"file:\\|\"link:\\|\"\u002F' packages\u002F*\u002Fpackage.json\n```\nIf anything matches, STOP. Do not proceed. Fix the reference first.\n\n### 3. Never Use `npm -w` for Publishing\n\n`npm -w packages\u002Fsquad-sdk publish` hangs silently when 2FA is enabled. Always `cd` into the package directory:\n\n```bash\ncd packages\u002Fsquad-sdk && npm publish --access public\ncd packages\u002Fsquad-cli && npm publish --access public\n```\n\n### 4. Fallback Protocol\n\nIf `workflow_dispatch` or the publish workflow fails:\n1. Try once more (ONE retry, not four)\n2. If it fails again → local publish immediately\n3. Do NOT attempt GitHub UI file operations to fix workflow indexing\n4. GitHub has a ~15min workflow cache TTL after file renames\u002Fdeletes — waiting helps, retrying doesn't\n\n### 5. Post-Publish Smoke Test\n\nAfter every publish, verify in a clean shell:\n```bash\nnpm install -g @bradygaster\u002Fsquad-cli@latest\nsquad --version    # should match published version\nsquad doctor       # should pass in a test repo\n```\n\nIf the smoke test fails, rollback immediately.\n\n### 6. npm Token Must Be Automation Type\n\nNPM_TOKEN in CI must be an Automation token (not a user token with 2FA prompts). User tokens with `auth-and-writes` 2FA cause silent hangs in non-interactive environments.\n\n### 7. No Draft GitHub Releases\n\nNever create draft GitHub Releases. The `release: published` event only fires when a release is published — drafts don't trigger the npm publish workflow.\n\n### 8. Version Format\n\nSemantic versioning only: `MAJOR.MINOR.PATCH` (e.g., `0.9.1`). Four-part versions like `0.8.21.4` are NOT valid semver and will break npm publish.\n\n### 9. SKIP_BUILD_BUMP=1 in CI\n\nSet this environment variable in all CI build steps to prevent the build script from mutating versions during CI runs.\n\n## Release Checklist (Quick Reference)\n\n```\n□ All tests passing on dev\n□ No file:\u002Flink: references in packages\u002F*\u002Fpackage.json\n□ CHANGELOG.md updated\n□ Version bumps committed (node -e script)\n□ npm auth verified (Automation token)\n□ No draft GitHub Releases pending\n□ Local build + test: npm run build && npx vitest run\n□ Push dev → CI green\n□ Promote dev → preview (squad-promote workflow)\n□ Preview CI green (squad-preview validates)\n□ Promote preview → main\n□ squad-release auto-creates GitHub Release\n□ squad-npm-publish auto-triggers\n□ Monitor publish workflow\n□ Post-publish smoke test\n```\n\n## Known Gotchas\n\n| Gotcha | Impact | Mitigation |\n|--------|--------|------------|\n| npm workspaces rewrite `\"*\"` → `\"file:..\u002Fpath\"` | Broken global installs | Preflight scan in CI (squad-npm-publish.yml) |\n| GitHub Actions workflow cache (~15min TTL) | 422 on workflow_dispatch after file renames | Wait 15min or use local publish fallback |\n| `npm -w publish` hangs with 2FA | Silent hang, no error | Never use `-w` for publish |\n| Draft GitHub Releases | npm publish workflow doesn't trigger | Never create drafts |\n| User npm tokens with 2FA | EOTP errors in CI | Use Automation token type |\n\n## CI Gate: Workspace Publish Policy\n\nThe `publish-policy` job in `squad-ci.yml` scans all workflow files for bare `npm publish` commands that are missing `-w`\u002F`--workspace` flags. Any workflow that attempts a non-workspace-scoped publish will fail CI. This prevents accidental root-level publishes that would push the wrong `package.json` to npm.\n\nSee `.github\u002Fworkflows\u002Fsquad-ci.yml` → `publish-policy` job for implementation details.\n\n## Related\n\n- Issues: #556–#564 (release:next)\n- Retro: `.squad\u002Fdecisions\u002Finbox\u002Fsurgeon-v091-retrospective.md`\n- CI audit: `.squad\u002Fdecisions\u002Finbox\u002Fbooster-ci-audit.md`\n- Playbook: `PUBLISH-README.md` (repo root)\n",{},"dev","ec19f5e92325e634e3c6eff500e3cefa56131cc9","packages\u002Fsquad-sdk\u002Ftemplates\u002Fskills\u002Frelease-process","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad","https:\u002F\u002Fgithub.com\u002Fbarichter","2026-04-13 22:53:46",{"source":7,"skillName":5,"commands":31,"prompt":41,"zipAvailable":42},[32,35,38],{"tool":33,"command":34},"npx","npx skills add barichter\u002Fsquad --skill release-process",{"tool":36,"command":37},"bunx","bunx skills add barichter\u002Fsquad --skill release-process",{"tool":39,"command":40},"pnpm","pnpm dlx skills add barichter\u002Fsquad --skill release-process","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-sdk\u002Ftemplates\u002Fskills\u002Frelease-process\u002FSKILL.md",true,[],[45,61,69,86,109,115],{"skillNo":46,"name":47,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":48,"categories":49,"keywords":55,"publishedAt":20},"01M6R7VE8SZD1E37WWJN4ZFPWB","My Skill","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fmy-skill\u002FSKILL.md",[50],{"categoryNo":51,"categoryName":52,"taxonomyType":53,"taxonomyTypeDesc":54},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[56,57,58,59,60],"my","my skill","tester","vitest","testing",{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":20},"01M6R7VD19M4TMAA74XGD6QSZX","bad-skill","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fbad-skill\u002FSKILL.md",[],[67,68],"bad skill","bad",{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":20},"01M6R7V9TYTX6Z621V6RWA51G6","squad-conventions","Core conventions and patterns used in the Squad codebase","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[76,77,78,79,80,81,82,83,84,85],"squad conventions","squad","conventions","project-conventions","core","patterns","project","manual","high","codebase",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":20},"01M6R7TTF0ABMGSVWASVYF6D51","rework-rate","Measure and interpret PR rework rate — the emerging 5th DORA metric","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Frework-rate\u002FSKILL.md",[],[93,94,95,96,97,98,99,100,101,84,77,102,103,104,105,106,107,108,83],"rate","rework rate","metric","efficiency","prs","when","pr","review","code quality","code","code-review","metrics","health","team","analyze","quality",{"skillNo":110,"name":111,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":20},"01M6R7TRZPET44JRCSQF08EEA8","nap","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fnap\u002FSKILL.md",[],[111],{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"publishedAt":20},"01M6R7TK10WCT77A52E27GR5R3","{skill-name}","{what this skill teaches agents}","https:\u002F\u002Fgithub.com\u002Fbarichter\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskill.md",[121],{"categoryNo":51,"categoryName":52,"taxonomyType":53,"taxonomyTypeDesc":54},[123,124,125,126,127,128,129,130,131,132,83,84,60],"{skill name}","skill name","name","design","api","how","error-handling","learned","error","api-design"]