claude-code-workflow 7.2.27 → 7.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/.ccw/specs/architecture-constraints.md +5 -0
  2. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
  3. package/.claude/skills/investigate/SKILL.md +110 -0
  4. package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
  5. package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
  6. package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
  7. package/.claude/skills/investigate/phases/04-implementation.md +139 -0
  8. package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
  9. package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
  10. package/.claude/skills/investigate/specs/iron-law.md +101 -0
  11. package/.claude/skills/security-audit/SKILL.md +125 -0
  12. package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
  13. package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
  14. package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
  15. package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
  16. package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
  17. package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
  18. package/.claude/skills/ship/SKILL.md +105 -0
  19. package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
  20. package/.claude/skills/ship/phases/02-code-review.md +137 -0
  21. package/.claude/skills/ship/phases/03-version-bump.md +171 -0
  22. package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
  23. package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
  24. package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
  25. package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
  26. package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
  27. package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  28. package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
  29. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  30. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
  31. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
  32. package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
  33. package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  34. package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  35. package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  36. package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
  37. package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
  38. package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  39. package/.claude/skills/team-motion-design/SKILL.md +129 -0
  40. package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
  41. package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
  42. package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  43. package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
  44. package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
  45. package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
  46. package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  47. package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  48. package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  49. package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
  50. package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
  51. package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
  52. package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
  53. package/.claude/skills/team-ui-polish/SKILL.md +127 -0
  54. package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  55. package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
  56. package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
  57. package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
  58. package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
  59. package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
  60. package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
  61. package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
  62. package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  63. package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
  64. package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  65. package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
  66. package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  67. package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
  68. package/.claude/skills/team-uidesign/SKILL.md +6 -1
  69. package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
  70. package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
  71. package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
  72. package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
  73. package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
  74. package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
  75. package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
  76. package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
  77. package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
  78. package/.claude/skills/team-ux-improve/SKILL.md +3 -0
  79. package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
  80. package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
  81. package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
  82. package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
  83. package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
  84. package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
  85. package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
  86. package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
  87. package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
  88. package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
  89. package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
  90. package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  91. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  92. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
  93. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
  94. package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
  95. package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  96. package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  97. package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  98. package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  99. package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  100. package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  101. package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
  102. package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
  103. package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  104. package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  105. package/.codex/skills/investigate/agents/investigator.md +392 -0
  106. package/.codex/skills/investigate/orchestrator.md +362 -0
  107. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  108. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  109. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  110. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  111. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  112. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  113. package/.codex/skills/security-audit/orchestrator.md +384 -0
  114. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  115. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  116. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  117. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  118. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  119. package/.codex/skills/ship/orchestrator.md +426 -0
  120. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  121. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  122. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  123. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  124. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  125. package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
  126. package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  127. package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
  128. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  129. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
  130. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
  131. package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
  132. package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  133. package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  134. package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  135. package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
  136. package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
  137. package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  138. package/.codex/skills/team-motion-design/SKILL.md +222 -0
  139. package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
  140. package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
  141. package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  142. package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
  143. package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
  144. package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
  145. package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  146. package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  147. package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  148. package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
  149. package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
  150. package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
  151. package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
  152. package/.codex/skills/team-ui-polish/SKILL.md +218 -0
  153. package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  154. package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
  155. package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
  156. package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
  157. package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
  158. package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
  159. package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
  160. package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
  161. package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  162. package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
  163. package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  164. package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
  165. package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  166. package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
  167. package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
  168. package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  169. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  170. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
  171. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
  172. package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
  173. package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  174. package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  175. package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  176. package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  177. package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  178. package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  179. package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
  180. package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
  181. package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  182. package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  183. package/README.md +8 -0
  184. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  185. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  186. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  187. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  188. package/ccw/dist/core/routes/cli-routes.js +34 -0
  189. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  190. package/ccw/dist/core/routes/system-routes.js +2 -2
  191. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  192. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
  193. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
  194. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
  195. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
  196. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
  197. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
  198. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
  199. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
  200. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
  201. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
  202. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
  203. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
  204. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
  205. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
  206. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
  207. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
  208. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
  209. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
  210. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
  211. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
  212. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
  213. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
  214. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
  215. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
  216. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
  217. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
  218. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
  219. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
  220. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
  221. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
  222. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
  223. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
  224. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
  225. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
  226. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
  227. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
  228. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
  229. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
  230. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
  231. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
  232. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
  233. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
  234. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
  235. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
  236. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
  237. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
  238. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
  239. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
  240. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
  241. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
  242. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
  243. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
  244. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
  245. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
  246. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
  247. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
  248. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
  249. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
  250. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
  251. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
  252. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
  253. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
  254. package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
  255. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
  256. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
  257. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
  258. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
  259. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
  260. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
  261. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
  262. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
  263. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
  264. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
  265. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
  266. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
  267. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
  268. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
  269. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
  270. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
  271. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
  272. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
  273. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
  274. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
  275. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
  276. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
  277. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
  278. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
  279. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
  280. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
  281. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
  282. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
  283. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
  284. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
  285. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
  286. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
  287. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
  288. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
  289. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
  290. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
  291. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
  292. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
  293. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
  294. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
  295. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
  296. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
  297. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
  298. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
  299. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
  300. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
  301. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
  302. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
  303. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
  304. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
  305. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
  306. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
  307. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
  308. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
  309. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
  310. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
  311. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
  312. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
  313. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
  314. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
  315. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
  316. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
  317. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
  318. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
  319. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
  320. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
  321. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
  322. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
  323. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
  324. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
  325. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
  326. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
  327. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
  328. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
  329. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
  330. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
  331. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
  332. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
  333. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
  334. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
  335. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
  336. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
  337. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
  338. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
  339. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
  340. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
  341. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
  342. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
  343. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
  344. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
  345. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
  346. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
  347. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
  348. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
  349. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
  350. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
  351. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
  352. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
  353. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
  354. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
  355. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
  356. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
  357. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
  358. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
  359. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
  360. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
  361. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
  362. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
  363. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
  364. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
  365. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
  366. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
  367. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
  368. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
  369. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
  370. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
  371. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
  372. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
  373. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
  374. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
  375. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
  376. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
  377. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
  378. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
  379. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
  380. package/ccw/frontend/dist/index.html +1 -1
  381. package/package.json +105 -105
  382. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ # Phase 1: Pre-Flight Checks
2
+
3
+ Validate that the repository is in a shippable state before proceeding with the release pipeline.
4
+
5
+ ## Objective
6
+
7
+ - Confirm working tree is clean (no uncommitted changes)
8
+ - Validate current branch is appropriate for release
9
+ - Run test suite and confirm all tests pass
10
+ - Verify build succeeds
11
+
12
+ ## Gate Condition
13
+
14
+ ALL four checks must pass. If any check fails, stop the pipeline and report BLOCKED status with the specific failure.
15
+
16
+ ## Execution Steps
17
+
18
+ ### Step 1: Git Clean Check
19
+
20
+ ```bash
21
+ git_status=$(git status --porcelain)
22
+ if [ -n "$git_status" ]; then
23
+ echo "FAIL: Working tree is dirty"
24
+ echo "$git_status"
25
+ # Gate: BLOCKED — commit or stash changes first
26
+ else
27
+ echo "PASS: Working tree is clean"
28
+ fi
29
+ ```
30
+
31
+ **Pass condition**: `git status --porcelain` produces empty output.
32
+ **On failure**: Report dirty files and suggest `git stash` or `git commit`.
33
+
34
+ ### Step 2: Branch Validation
35
+
36
+ ```bash
37
+ current_branch=$(git branch --show-current)
38
+ if [ "$current_branch" = "main" ] || [ "$current_branch" = "master" ]; then
39
+ echo "WARN: Currently on $current_branch — direct push to main/master is risky"
40
+ # Ask user for confirmation before proceeding
41
+ else
42
+ echo "PASS: On branch $current_branch"
43
+ fi
44
+ ```
45
+
46
+ **Pass condition**: Not on main/master, OR user explicitly confirms direct-to-main release.
47
+ **On warning**: Ask user to confirm they intend to release from main/master directly.
48
+
49
+ ### Step 3: Test Suite Execution
50
+
51
+ Detect and run the project's test suite:
52
+
53
+ ```bash
54
+ # Detection priority:
55
+ # 1. package.json with "test" script → npm test
56
+ # 2. pytest available and tests exist → pytest
57
+ # 3. No tests found → WARN and continue
58
+
59
+ if [ -f "package.json" ] && grep -q '"test"' package.json; then
60
+ npm test
61
+ elif command -v pytest &>/dev/null && [ -d "tests" -o -d "test" ]; then
62
+ pytest
63
+ elif [ -f "pyproject.toml" ] && grep -q 'pytest' pyproject.toml; then
64
+ pytest
65
+ else
66
+ echo "WARN: No test suite detected — skipping test check"
67
+ fi
68
+ ```
69
+
70
+ **Pass condition**: Test command exits with code 0, or no tests detected (warn).
71
+ **On failure**: Report test failures and stop the pipeline.
72
+
73
+ ### Step 4: Build Verification
74
+
75
+ Detect and run the project's build step:
76
+
77
+ ```bash
78
+ # Detection priority:
79
+ # 1. package.json with "build" script → npm run build
80
+ # 2. pyproject.toml → python -m build (if build module available)
81
+ # 3. Makefile with build target → make build
82
+ # 4. No build step → PASS (not all projects need a build)
83
+
84
+ if [ -f "package.json" ] && grep -q '"build"' package.json; then
85
+ npm run build
86
+ elif [ -f "pyproject.toml" ] && python -m build --help &>/dev/null; then
87
+ python -m build
88
+ elif [ -f "Makefile" ] && grep -q '^build:' Makefile; then
89
+ make build
90
+ else
91
+ echo "INFO: No build step detected — skipping build check"
92
+ fi
93
+ ```
94
+
95
+ **Pass condition**: Build command exits with code 0, or no build step detected.
96
+ **On failure**: Report build errors and stop the pipeline.
97
+
98
+ ## Output
99
+
100
+ - **Format**: JSON object with pass/fail per check
101
+ - **Structure**:
102
+
103
+ ```json
104
+ {
105
+ "phase": "preflight",
106
+ "timestamp": "ISO-8601",
107
+ "checks": {
108
+ "git_clean": { "status": "pass|fail", "details": "" },
109
+ "branch": { "status": "pass|warn", "current": "branch-name", "details": "" },
110
+ "tests": { "status": "pass|fail|skip", "details": "" },
111
+ "build": { "status": "pass|fail|skip", "details": "" }
112
+ },
113
+ "overall": "pass|fail",
114
+ "blockers": []
115
+ }
116
+ ```
117
+
118
+ ## Next Phase
119
+
120
+ If all checks pass, proceed to [Phase 2: Code Review](02-code-review.md).
121
+ If any check fails, report BLOCKED status with the preflight report.
@@ -0,0 +1,137 @@
1
+ # Phase 2: Code Review
2
+
3
+ Automated AI-powered code review of changes since the base branch, with risk assessment.
4
+
5
+ ## Objective
6
+
7
+ - Detect the merge base between current branch and target branch
8
+ - Generate diff for review
9
+ - Run AI-powered code review via CCW CLI
10
+ - Flag high-risk changes (large diffs, sensitive files, breaking changes)
11
+
12
+ ## Gate Condition
13
+
14
+ No critical issues flagged by the review. Warnings are reported but do not block.
15
+
16
+ ## Execution Steps
17
+
18
+ ### Step 1: Detect Merge Base
19
+
20
+ ```bash
21
+ # Determine target branch (default: main, fallback: master)
22
+ target_branch="main"
23
+ if ! git rev-parse --verify "origin/$target_branch" &>/dev/null; then
24
+ target_branch="master"
25
+ fi
26
+
27
+ # Find merge base
28
+ merge_base=$(git merge-base "origin/$target_branch" HEAD)
29
+ echo "Merge base: $merge_base"
30
+
31
+ # If on main/master directly, compare against last tag
32
+ current_branch=$(git branch --show-current)
33
+ if [ "$current_branch" = "main" ] || [ "$current_branch" = "master" ]; then
34
+ last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
35
+ if [ -n "$last_tag" ]; then
36
+ merge_base="$last_tag"
37
+ echo "On main — using last tag as base: $last_tag"
38
+ else
39
+ # Use first commit if no tags exist
40
+ merge_base=$(git rev-list --max-parents=0 HEAD | head -1)
41
+ echo "No tags found — using initial commit as base"
42
+ fi
43
+ fi
44
+ ```
45
+
46
+ ### Step 2: Generate Diff Summary
47
+
48
+ ```bash
49
+ # File-level summary
50
+ git diff --stat "$merge_base"...HEAD
51
+
52
+ # Full diff for review
53
+ git diff "$merge_base"...HEAD > /tmp/ship-review-diff.txt
54
+
55
+ # Count changes for risk assessment
56
+ files_changed=$(git diff --name-only "$merge_base"...HEAD | wc -l)
57
+ lines_added=$(git diff --numstat "$merge_base"...HEAD | awk '{s+=$1} END {print s}')
58
+ lines_removed=$(git diff --numstat "$merge_base"...HEAD | awk '{s+=$2} END {print s}')
59
+ ```
60
+
61
+ ### Step 3: Risk Assessment
62
+
63
+ Flag high-risk indicators before AI review:
64
+
65
+ | Risk Factor | Threshold | Risk Level |
66
+ |-------------|-----------|------------|
67
+ | Files changed | > 50 | High |
68
+ | Lines changed | > 1000 | High |
69
+ | Sensitive files modified | Any of: `.env*`, `*secret*`, `*credential*`, `*auth*`, `*.key`, `*.pem` | High |
70
+ | Config files modified | `package.json`, `pyproject.toml`, `tsconfig.json`, `Dockerfile` | Medium |
71
+ | Migration files | `*migration*`, `*migrate*` | Medium |
72
+
73
+ ```bash
74
+ # Check for sensitive file changes
75
+ sensitive_files=$(git diff --name-only "$merge_base"...HEAD | grep -iE '\.(env|key|pem)|secret|credential' || true)
76
+ if [ -n "$sensitive_files" ]; then
77
+ echo "HIGH RISK: Sensitive files modified:"
78
+ echo "$sensitive_files"
79
+ fi
80
+ ```
81
+
82
+ ### Step 4: AI Code Review
83
+
84
+ Use CCW CLI for automated analysis:
85
+
86
+ ```bash
87
+ ccw cli -p "PURPOSE: Review code changes for release readiness; success = all critical issues identified with file:line references
88
+ TASK: Review diff for bugs | Check for breaking changes | Identify security concerns | Assess test coverage gaps
89
+ MODE: analysis
90
+ CONTEXT: @**/* | Reviewing diff from $merge_base to HEAD ($files_changed files, +$lines_added/-$lines_removed lines)
91
+ EXPECTED: Risk assessment (low/medium/high), list of issues with severity and file:line, release recommendation (ship/hold/fix-first)
92
+ CONSTRAINTS: Focus on correctness and security | Flag breaking API changes | Ignore formatting-only changes
93
+ " --tool gemini --mode analysis
94
+ ```
95
+
96
+ **Note**: Wait for the CLI analysis to complete before proceeding. Do not proceed to Phase 3 while review is running.
97
+
98
+ ### Step 5: Evaluate Review Results
99
+
100
+ Based on the AI review output:
101
+
102
+ | Review Result | Action |
103
+ |---------------|--------|
104
+ | No critical issues | Proceed to Phase 3 |
105
+ | Critical issues found | Report BLOCKED, list issues |
106
+ | Warnings only | Proceed with DONE_WITH_CONCERNS note |
107
+ | Review failed/timeout | Ask user whether to proceed or retry |
108
+
109
+ ## Output
110
+
111
+ - **Format**: Review summary with risk assessment
112
+ - **Structure**:
113
+
114
+ ```json
115
+ {
116
+ "phase": "code-review",
117
+ "merge_base": "commit-sha",
118
+ "stats": {
119
+ "files_changed": 0,
120
+ "lines_added": 0,
121
+ "lines_removed": 0
122
+ },
123
+ "risk_level": "low|medium|high",
124
+ "risk_factors": [],
125
+ "ai_review": {
126
+ "recommendation": "ship|hold|fix-first",
127
+ "critical_issues": [],
128
+ "warnings": []
129
+ },
130
+ "overall": "pass|fail|warn"
131
+ }
132
+ ```
133
+
134
+ ## Next Phase
135
+
136
+ If review passes (no critical issues), proceed to [Phase 3: Version Bump](03-version-bump.md).
137
+ If critical issues found, report BLOCKED status with review summary.
@@ -0,0 +1,171 @@
1
+ # Phase 3: Version Bump
2
+
3
+ Detect the current version, determine the bump type, and update the version file.
4
+
5
+ ## Objective
6
+
7
+ - Detect which version file the project uses
8
+ - Read the current version
9
+ - Determine bump type (patch/minor/major) from commit messages or user input
10
+ - Update the version file
11
+ - Record the version change
12
+
13
+ ## Gate Condition
14
+
15
+ Version file updated successfully with the new version.
16
+
17
+ ## Execution Steps
18
+
19
+ ### Step 1: Detect Version File
20
+
21
+ Detection priority order:
22
+
23
+ | Priority | File | Read Method |
24
+ |----------|------|-------------|
25
+ | 1 | `package.json` | `jq -r .version package.json` |
26
+ | 2 | `pyproject.toml` | `grep -oP 'version\s*=\s*"\K[^"]+' pyproject.toml` |
27
+ | 3 | `VERSION` | `cat VERSION` |
28
+
29
+ ```bash
30
+ if [ -f "package.json" ]; then
31
+ version_file="package.json"
32
+ current_version=$(node -p "require('./package.json').version" 2>/dev/null || jq -r .version package.json)
33
+ elif [ -f "pyproject.toml" ]; then
34
+ version_file="pyproject.toml"
35
+ current_version=$(grep -oP 'version\s*=\s*"\K[^"]+' pyproject.toml | head -1)
36
+ elif [ -f "VERSION" ]; then
37
+ version_file="VERSION"
38
+ current_version=$(cat VERSION | tr -d '[:space:]')
39
+ else
40
+ echo "NEEDS_CONTEXT: No version file found"
41
+ echo "Expected one of: package.json, pyproject.toml, VERSION"
42
+ # Ask user which file to use or create
43
+ fi
44
+
45
+ echo "Version file: $version_file"
46
+ echo "Current version: $current_version"
47
+ ```
48
+
49
+ ### Step 2: Determine Bump Type
50
+
51
+ **Auto-detection from commit messages** (conventional commits):
52
+
53
+ ```bash
54
+ # Get commits since last tag
55
+ last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
56
+ if [ -n "$last_tag" ]; then
57
+ commits=$(git log "$last_tag"..HEAD --oneline)
58
+ else
59
+ commits=$(git log --oneline -20)
60
+ fi
61
+
62
+ # Scan for conventional commit prefixes
63
+ has_breaking=$(echo "$commits" | grep -iE '(BREAKING CHANGE|!:)' || true)
64
+ has_feat=$(echo "$commits" | grep -iE '^[a-f0-9]+ feat' || true)
65
+ has_fix=$(echo "$commits" | grep -iE '^[a-f0-9]+ fix' || true)
66
+
67
+ if [ -n "$has_breaking" ]; then
68
+ suggested_bump="major"
69
+ elif [ -n "$has_feat" ]; then
70
+ suggested_bump="minor"
71
+ else
72
+ suggested_bump="patch"
73
+ fi
74
+
75
+ echo "Suggested bump: $suggested_bump"
76
+ ```
77
+
78
+ **User confirmation**:
79
+ - For `patch` and `minor`: proceed with suggested bump, inform user
80
+ - For `major`: always ask user to confirm before proceeding (major bumps have significant implications)
81
+ - User can override the suggestion with an explicit bump type
82
+
83
+ ### Step 3: Calculate New Version
84
+
85
+ ```bash
86
+ # Parse semver components
87
+ IFS='.' read -r major minor patch <<< "$current_version"
88
+
89
+ case "$bump_type" in
90
+ major)
91
+ new_version="$((major + 1)).0.0"
92
+ ;;
93
+ minor)
94
+ new_version="${major}.$((minor + 1)).0"
95
+ ;;
96
+ patch)
97
+ new_version="${major}.${minor}.$((patch + 1))"
98
+ ;;
99
+ esac
100
+
101
+ echo "Version bump: $current_version -> $new_version"
102
+ ```
103
+
104
+ ### Step 4: Update Version File
105
+
106
+ ```bash
107
+ case "$version_file" in
108
+ package.json)
109
+ # Use node/jq for safe JSON update
110
+ jq --arg v "$new_version" '.version = $v' package.json > tmp.json && mv tmp.json package.json
111
+ # Also update package-lock.json if it exists
112
+ if [ -f "package-lock.json" ]; then
113
+ jq --arg v "$new_version" '.version = $v | .packages[""].version = $v' package-lock.json > tmp.json && mv tmp.json package-lock.json
114
+ fi
115
+ ;;
116
+ pyproject.toml)
117
+ # Use sed for TOML update (version line in [project] or [tool.poetry])
118
+ sed -i "s/^version\s*=\s*\".*\"/version = \"$new_version\"/" pyproject.toml
119
+ ;;
120
+ VERSION)
121
+ echo "$new_version" > VERSION
122
+ ;;
123
+ esac
124
+
125
+ echo "Updated $version_file: $current_version -> $new_version"
126
+ ```
127
+
128
+ ### Step 5: Verify Update
129
+
130
+ ```bash
131
+ # Re-read to confirm
132
+ case "$version_file" in
133
+ package.json)
134
+ verified=$(node -p "require('./package.json').version" 2>/dev/null || jq -r .version package.json)
135
+ ;;
136
+ pyproject.toml)
137
+ verified=$(grep -oP 'version\s*=\s*"\K[^"]+' pyproject.toml | head -1)
138
+ ;;
139
+ VERSION)
140
+ verified=$(cat VERSION | tr -d '[:space:]')
141
+ ;;
142
+ esac
143
+
144
+ if [ "$verified" = "$new_version" ]; then
145
+ echo "PASS: Version verified as $new_version"
146
+ else
147
+ echo "FAIL: Version mismatch — expected $new_version, got $verified"
148
+ fi
149
+ ```
150
+
151
+ ## Output
152
+
153
+ - **Format**: Version change record
154
+ - **Structure**:
155
+
156
+ ```json
157
+ {
158
+ "phase": "version-bump",
159
+ "version_file": "package.json",
160
+ "previous_version": "1.2.3",
161
+ "new_version": "1.3.0",
162
+ "bump_type": "minor",
163
+ "bump_source": "auto-detected|user-specified",
164
+ "overall": "pass|fail"
165
+ }
166
+ ```
167
+
168
+ ## Next Phase
169
+
170
+ If version updated successfully, proceed to [Phase 4: Changelog & Commit](04-changelog-commit.md).
171
+ If version update fails, report BLOCKED status.
@@ -0,0 +1,167 @@
1
+ # Phase 4: Changelog & Commit
2
+
3
+ Generate changelog entry from git history, update CHANGELOG.md, create release commit, and push to remote.
4
+
5
+ ## Objective
6
+
7
+ - Parse git log since last tag into grouped changelog entry
8
+ - Update or create CHANGELOG.md
9
+ - Create a release commit with version in the message
10
+ - Push the branch to remote
11
+
12
+ ## Gate Condition
13
+
14
+ Release commit created and pushed to remote successfully.
15
+
16
+ ## Execution Steps
17
+
18
+ ### Step 1: Gather Commits Since Last Tag
19
+
20
+ ```bash
21
+ last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
22
+
23
+ if [ -n "$last_tag" ]; then
24
+ echo "Generating changelog since tag: $last_tag"
25
+ git log "$last_tag"..HEAD --pretty=format:"%h %s" --no-merges
26
+ else
27
+ echo "No previous tag found — using last 50 commits"
28
+ git log --pretty=format:"%h %s" --no-merges -50
29
+ fi
30
+ ```
31
+
32
+ ### Step 2: Group Commits by Conventional Commit Type
33
+
34
+ Parse commit messages and group into categories:
35
+
36
+ | Prefix | Category | Changelog Section |
37
+ |--------|----------|-------------------|
38
+ | `feat:` / `feat(*):`| Features | **Features** |
39
+ | `fix:` / `fix(*):`| Bug Fixes | **Bug Fixes** |
40
+ | `perf:` | Performance | **Performance** |
41
+ | `docs:` | Documentation | **Documentation** |
42
+ | `refactor:` | Refactoring | **Refactoring** |
43
+ | `chore:` | Maintenance | **Maintenance** |
44
+ | `test:` | Testing | *(omitted from changelog)* |
45
+ | Other | Miscellaneous | **Other Changes** |
46
+
47
+ ```bash
48
+ # Example grouping logic (executed by the agent, not a literal script):
49
+ # 1. Read all commits since last tag
50
+ # 2. Parse prefix from each commit message
51
+ # 3. Group into categories
52
+ # 4. Format as markdown sections
53
+ # 5. Omit empty categories
54
+ ```
55
+
56
+ ### Step 3: Format Changelog Entry
57
+
58
+ Generate a markdown changelog entry:
59
+
60
+ ```markdown
61
+ ## [X.Y.Z] - YYYY-MM-DD
62
+
63
+ ### Features
64
+ - feat: description (sha)
65
+ - feat(scope): description (sha)
66
+
67
+ ### Bug Fixes
68
+ - fix: description (sha)
69
+
70
+ ### Performance
71
+ - perf: description (sha)
72
+
73
+ ### Other Changes
74
+ - chore: description (sha)
75
+ ```
76
+
77
+ Rules:
78
+ - Date format: YYYY-MM-DD (ISO 8601)
79
+ - Each entry includes the short SHA for traceability
80
+ - Empty categories are omitted
81
+ - Entries are listed in chronological order within each category
82
+
83
+ ### Step 4: Update CHANGELOG.md
84
+
85
+ ```bash
86
+ if [ -f "CHANGELOG.md" ]; then
87
+ # Insert new entry after the first heading line (# Changelog)
88
+ # The new entry goes between the main heading and the previous version entry
89
+ # Use Write tool to insert the new section at the correct position
90
+ echo "Updating existing CHANGELOG.md"
91
+ else
92
+ # Create new CHANGELOG.md with header
93
+ echo "Creating new CHANGELOG.md"
94
+ fi
95
+ ```
96
+
97
+ **CHANGELOG.md structure**:
98
+ ```markdown
99
+ # Changelog
100
+
101
+ ## [X.Y.Z] - YYYY-MM-DD
102
+ (new entry here)
103
+
104
+ ## [X.Y.Z-1] - YYYY-MM-DD
105
+ (previous entry)
106
+ ```
107
+
108
+ ### Step 5: Create Release Commit
109
+
110
+ ```bash
111
+ # Stage version file and changelog
112
+ git add package.json package-lock.json pyproject.toml VERSION CHANGELOG.md 2>/dev/null
113
+
114
+ # Only stage files that actually exist and are modified
115
+ git add -u
116
+
117
+ # Create release commit
118
+ git commit -m "$(cat <<'EOF'
119
+ chore: bump version to X.Y.Z
120
+
121
+ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
122
+ EOF
123
+ )"
124
+ ```
125
+
126
+ **Commit message format**: `chore: bump version to X.Y.Z`
127
+ - Follows conventional commit format
128
+ - Includes Co-Authored-By trailer
129
+
130
+ ### Step 6: Push to Remote
131
+
132
+ ```bash
133
+ current_branch=$(git branch --show-current)
134
+
135
+ # Check if remote tracking branch exists
136
+ if git rev-parse --verify "origin/$current_branch" &>/dev/null; then
137
+ git push origin "$current_branch"
138
+ else
139
+ git push -u origin "$current_branch"
140
+ fi
141
+ ```
142
+
143
+ **On push failure**:
144
+ - If rejected (non-fast-forward): Report BLOCKED, suggest `git pull --rebase`
145
+ - If permission denied: Report BLOCKED, check remote access
146
+ - If no remote configured: Report BLOCKED, suggest `git remote add`
147
+
148
+ ## Output
149
+
150
+ - **Format**: Commit and push record
151
+ - **Structure**:
152
+
153
+ ```json
154
+ {
155
+ "phase": "changelog-commit",
156
+ "changelog_entry": "## [X.Y.Z] - YYYY-MM-DD ...",
157
+ "commit_sha": "abc1234",
158
+ "commit_message": "chore: bump version to X.Y.Z",
159
+ "pushed_to": "origin/branch-name",
160
+ "overall": "pass|fail"
161
+ }
162
+ ```
163
+
164
+ ## Next Phase
165
+
166
+ If commit and push succeed, proceed to [Phase 5: PR Creation](05-pr-creation.md).
167
+ If push fails, report BLOCKED status with error details.