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,442 @@
1
+ # OWASP Top 10 2021 Checklist
2
+
3
+ Code-level detection patterns, vulnerable code examples, and remediation templates for each OWASP category.
4
+
5
+ ## When to Use
6
+
7
+ | Phase | Usage | Section |
8
+ |-------|-------|---------|
9
+ | Phase 2 | Reference during OWASP code review | All categories |
10
+ | Phase 4 | Classify findings by OWASP category | Category IDs |
11
+
12
+ ---
13
+
14
+ ## A01: Broken Access Control
15
+
16
+ **CWE**: CWE-200, CWE-284, CWE-285, CWE-352, CWE-639
17
+
18
+ ### Detection Patterns
19
+
20
+ ```bash
21
+ # Missing auth middleware on route handlers
22
+ grep -rnE 'app\.(get|post|put|delete|patch)\s*\(\s*["\x27/]' --include='*.ts' --include='*.js' .
23
+ # Then verify each route has auth middleware
24
+
25
+ # Direct object reference without ownership check
26
+ grep -rnE 'findById\(.*params|findOne\(.*params|\.get\(.*id' --include='*.ts' --include='*.js' --include='*.py' .
27
+
28
+ # Path traversal patterns
29
+ grep -rnE '(readFile|writeFile|createReadStream|open)\s*\(.*req\.' --include='*.ts' --include='*.js' .
30
+ grep -rnE 'os\.path\.join\(.*request\.' --include='*.py' .
31
+
32
+ # Missing CORS restrictions
33
+ grep -rnE 'Access-Control-Allow-Origin.*\*|cors\(\s*\)' --include='*.ts' --include='*.js' .
34
+ ```
35
+
36
+ ### Vulnerable Code Example
37
+
38
+ ```javascript
39
+ // BAD: No ownership check
40
+ app.get('/api/documents/:id', auth, async (req, res) => {
41
+ const doc = await Document.findById(req.params.id); // Any user can access any doc
42
+ res.json(doc);
43
+ });
44
+ ```
45
+
46
+ ### Remediation
47
+
48
+ ```javascript
49
+ // GOOD: Ownership check
50
+ app.get('/api/documents/:id', auth, async (req, res) => {
51
+ const doc = await Document.findOne({ _id: req.params.id, owner: req.user.id });
52
+ if (!doc) return res.status(404).json({ error: 'Not found' });
53
+ res.json(doc);
54
+ });
55
+ ```
56
+
57
+ ---
58
+
59
+ ## A02: Cryptographic Failures
60
+
61
+ **CWE**: CWE-259, CWE-327, CWE-331, CWE-798
62
+
63
+ ### Detection Patterns
64
+
65
+ ```bash
66
+ # Weak hash algorithms
67
+ grep -rniE '(md5|sha1)\s*\(' --include='*.ts' --include='*.js' --include='*.py' --include='*.java' .
68
+
69
+ # Plaintext password storage
70
+ grep -rniE 'password\s*[:=]\s*.*\.(body|query|params)' --include='*.ts' --include='*.js' .
71
+
72
+ # Hardcoded encryption keys
73
+ grep -rniE '(encrypt|cipher|secret|key)\s*[:=]\s*["\x27][A-Za-z0-9+/=]{8,}' --include='*.ts' --include='*.js' --include='*.py' .
74
+
75
+ # HTTP (not HTTPS) for sensitive operations
76
+ grep -rniE 'http://.*\.(api|auth|login|payment)' --include='*.ts' --include='*.js' --include='*.py' .
77
+
78
+ # Missing encryption at rest
79
+ grep -rniE '(password|ssn|credit.?card|social.?security)' --include='*.sql' --include='*.prisma' --include='*.schema' .
80
+ ```
81
+
82
+ ### Vulnerable Code Example
83
+
84
+ ```python
85
+ # BAD: MD5 for password hashing
86
+ import hashlib
87
+ password_hash = hashlib.md5(password.encode()).hexdigest()
88
+ ```
89
+
90
+ ### Remediation
91
+
92
+ ```python
93
+ # GOOD: bcrypt with proper work factor
94
+ import bcrypt
95
+ password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
96
+ ```
97
+
98
+ ---
99
+
100
+ ## A03: Injection
101
+
102
+ **CWE**: CWE-20, CWE-74, CWE-79, CWE-89
103
+
104
+ ### Detection Patterns
105
+
106
+ ```bash
107
+ # SQL string concatenation/interpolation
108
+ grep -rniE "(query|execute|raw)\s*\(\s*[\`\"'].*(\+|\$\{|%s|\.format)" --include='*.ts' --include='*.js' --include='*.py' .
109
+ grep -rniE "f[\"'].*SELECT.*\{" --include='*.py' .
110
+
111
+ # NoSQL injection
112
+ grep -rniE '\$where|\$regex.*req\.' --include='*.ts' --include='*.js' .
113
+ grep -rniE 'find\(\s*\{.*req\.(body|query|params)' --include='*.ts' --include='*.js' .
114
+
115
+ # OS command injection
116
+ grep -rniE '(child_process|exec|execSync|spawn|system|popen|subprocess)\s*\(.*req\.' --include='*.ts' --include='*.js' --include='*.py' .
117
+
118
+ # XPath/LDAP injection
119
+ grep -rniE '(xpath|ldap).*\+.*req\.' --include='*.ts' --include='*.js' --include='*.py' .
120
+
121
+ # Template injection
122
+ grep -rniE '(render_template_string|Template\(.*req\.|eval\(.*req\.)' --include='*.py' --include='*.js' .
123
+ ```
124
+
125
+ ### Vulnerable Code Example
126
+
127
+ ```javascript
128
+ // BAD: SQL string concatenation
129
+ const result = await db.query(`SELECT * FROM users WHERE id = ${req.params.id}`);
130
+ ```
131
+
132
+ ### Remediation
133
+
134
+ ```javascript
135
+ // GOOD: Parameterized query
136
+ const result = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id]);
137
+ ```
138
+
139
+ ---
140
+
141
+ ## A04: Insecure Design
142
+
143
+ **CWE**: CWE-209, CWE-256, CWE-501, CWE-522
144
+
145
+ ### Detection Patterns
146
+
147
+ ```bash
148
+ # Missing rate limiting on auth endpoints
149
+ grep -rniE '(login|register|reset.?password|forgot.?password)' --include='*.ts' --include='*.js' --include='*.py' .
150
+ # Then check if rate limiting middleware is applied
151
+
152
+ # No account lockout mechanism
153
+ grep -rniE 'failed.?login|login.?attempt|max.?retries' --include='*.ts' --include='*.js' --include='*.py' .
154
+
155
+ # Business logic without validation
156
+ grep -rniE '(transfer|withdraw|purchase|delete.?account)' --include='*.ts' --include='*.js' --include='*.py' .
157
+ # Then check for confirmation/validation steps
158
+ ```
159
+
160
+ ### Checks
161
+
162
+ - [ ] Authentication flows have rate limiting
163
+ - [ ] Account lockout after N failed attempts
164
+ - [ ] Multi-step operations have proper state validation
165
+ - [ ] Business-critical operations require confirmation
166
+ - [ ] Threat modeling has been performed (see Phase 3)
167
+
168
+ ### Remediation
169
+
170
+ Implement defense-in-depth: rate limiting, input validation, business logic validation, and multi-step confirmation for critical operations.
171
+
172
+ ---
173
+
174
+ ## A05: Security Misconfiguration
175
+
176
+ **CWE**: CWE-2, CWE-11, CWE-13, CWE-15, CWE-16, CWE-388
177
+
178
+ ### Detection Patterns
179
+
180
+ ```bash
181
+ # Debug mode enabled
182
+ grep -rniE '(DEBUG|NODE_ENV)\s*[:=]\s*(true|True|1|"development"|"debug")' \
183
+ --include='*.env' --include='*.env.*' --include='*.py' --include='*.json' --include='*.yaml' .
184
+
185
+ # Default credentials
186
+ grep -rniE '(admin|root|test|default).*[:=].*password' --include='*.env' --include='*.yaml' --include='*.json' --include='*.py' .
187
+
188
+ # Verbose error responses (stack traces to client)
189
+ grep -rniE '(stack|stackTrace|traceback).*res\.(json|send)|app\.use.*err.*stack' --include='*.ts' --include='*.js' .
190
+
191
+ # Missing security headers
192
+ grep -rniE '(helmet|X-Frame-Options|X-Content-Type-Options|Strict-Transport-Security)' --include='*.ts' --include='*.js' .
193
+
194
+ # Directory listing enabled
195
+ grep -rniE 'autoindex\s+on|directory.?listing|serveStatic.*index.*false' --include='*.conf' --include='*.ts' --include='*.js' .
196
+
197
+ # Unnecessary features/services
198
+ grep -rniE '(graphiql|playground|swagger-ui).*true' --include='*.ts' --include='*.js' --include='*.py' --include='*.yaml' .
199
+ ```
200
+
201
+ ### Vulnerable Code Example
202
+
203
+ ```javascript
204
+ // BAD: Stack trace in error response
205
+ app.use((err, req, res, next) => {
206
+ res.status(500).json({ error: err.message, stack: err.stack });
207
+ });
208
+ ```
209
+
210
+ ### Remediation
211
+
212
+ ```javascript
213
+ // GOOD: Generic error response in production
214
+ app.use((err, req, res, next) => {
215
+ console.error(err.stack); // Log internally
216
+ res.status(500).json({ error: 'Internal server error' });
217
+ });
218
+ ```
219
+
220
+ ---
221
+
222
+ ## A06: Vulnerable and Outdated Components
223
+
224
+ **CWE**: CWE-1104
225
+
226
+ ### Detection Patterns
227
+
228
+ ```bash
229
+ # Check dependency lock files age
230
+ ls -la package-lock.json yarn.lock requirements.txt Pipfile.lock go.sum 2>/dev/null
231
+
232
+ # Run package audits (from Phase 1)
233
+ npm audit --json 2>/dev/null
234
+ pip-audit --format json 2>/dev/null
235
+
236
+ # Check for pinned vs unpinned dependencies
237
+ grep -E ':\s*"\^|:\s*"~|:\s*"\*|>=\s' package.json 2>/dev/null
238
+ grep -E '^[a-zA-Z].*[^=]==[^=]' requirements.txt 2>/dev/null # Good: pinned
239
+ grep -E '^[a-zA-Z].*>=|^[a-zA-Z][^=]*$' requirements.txt 2>/dev/null # Bad: unpinned
240
+ ```
241
+
242
+ ### Checks
243
+
244
+ - [ ] All dependencies have pinned versions
245
+ - [ ] No known CVEs in dependencies (via audit tools)
246
+ - [ ] Dependencies are actively maintained (not abandoned)
247
+ - [ ] Lock files are committed to version control
248
+
249
+ ### Remediation
250
+
251
+ Run `npm audit fix` or `pip install --upgrade` for vulnerable packages. Pin all dependency versions. Set up automated dependency scanning (Dependabot, Renovate).
252
+
253
+ ---
254
+
255
+ ## A07: Identification and Authentication Failures
256
+
257
+ **CWE**: CWE-255, CWE-259, CWE-287, CWE-384
258
+
259
+ ### Detection Patterns
260
+
261
+ ```bash
262
+ # Weak password requirements
263
+ grep -rniE 'password.*length.*[0-5]|minlength.*[0-5]|min.?length.*[0-5]' --include='*.ts' --include='*.js' --include='*.py' .
264
+
265
+ # Missing password hashing
266
+ grep -rniE 'password\s*[:=].*req\.' --include='*.ts' --include='*.js' .
267
+ # Then check if bcrypt/argon2/scrypt is used before storage
268
+
269
+ # Session fixation (no rotation after login)
270
+ grep -rniE 'session\.regenerate|session\.id\s*=' --include='*.ts' --include='*.js' .
271
+
272
+ # JWT without expiration
273
+ grep -rniE 'jwt\.sign\(' --include='*.ts' --include='*.js' .
274
+ # Then check for expiresIn option
275
+
276
+ # Credentials in URL
277
+ grep -rniE '(token|key|password|secret)=[^&\s]+' --include='*.ts' --include='*.js' --include='*.py' .
278
+ ```
279
+
280
+ ### Vulnerable Code Example
281
+
282
+ ```javascript
283
+ // BAD: JWT without expiration
284
+ const token = jwt.sign({ userId: user.id }, SECRET);
285
+ ```
286
+
287
+ ### Remediation
288
+
289
+ ```javascript
290
+ // GOOD: JWT with expiration and proper claims
291
+ const token = jwt.sign(
292
+ { userId: user.id, role: user.role },
293
+ SECRET,
294
+ { expiresIn: '1h', issuer: 'myapp', audience: 'myapp-client' }
295
+ );
296
+ ```
297
+
298
+ ---
299
+
300
+ ## A08: Software and Data Integrity Failures
301
+
302
+ **CWE**: CWE-345, CWE-353, CWE-426, CWE-494, CWE-502
303
+
304
+ ### Detection Patterns
305
+
306
+ ```bash
307
+ # Insecure deserialization
308
+ grep -rniE '(pickle\.load|yaml\.load\(|unserialize|JSON\.parse\(.*req\.|eval\()' --include='*.py' --include='*.ts' --include='*.js' --include='*.php' .
309
+
310
+ # Missing integrity checks on downloads/updates
311
+ grep -rniE '(download|fetch|curl|wget)' --include='*.sh' --include='*.yaml' --include='*.yml' .
312
+ # Then check for checksum/signature verification
313
+
314
+ # CI/CD pipeline without pinned action versions
315
+ grep -rniE 'uses:\s*[^@]+$|uses:.*@(main|master|latest)' .github/workflows/*.yml 2>/dev/null
316
+
317
+ # Unsafe YAML loading
318
+ grep -rniE 'yaml\.load\(' --include='*.py' .
319
+ # Should be yaml.safe_load()
320
+ ```
321
+
322
+ ### Vulnerable Code Example
323
+
324
+ ```python
325
+ # BAD: Unsafe YAML loading
326
+ import yaml
327
+ data = yaml.load(user_input) # Allows arbitrary code execution
328
+ ```
329
+
330
+ ### Remediation
331
+
332
+ ```python
333
+ # GOOD: Safe YAML loading
334
+ import yaml
335
+ data = yaml.safe_load(user_input)
336
+ ```
337
+
338
+ ---
339
+
340
+ ## A09: Security Logging and Monitoring Failures
341
+
342
+ **CWE**: CWE-223, CWE-532, CWE-778
343
+
344
+ ### Detection Patterns
345
+
346
+ ```bash
347
+ # Check for logging of auth events
348
+ grep -rniE '(log|logger|logging)\.' --include='*.ts' --include='*.js' --include='*.py' .
349
+ # Then check if login/logout/failed-auth events are logged
350
+
351
+ # Sensitive data in logs
352
+ grep -rniE 'log.*(password|token|secret|credit.?card|ssn)' --include='*.ts' --include='*.js' --include='*.py' .
353
+
354
+ # Empty catch blocks (swallowed errors)
355
+ grep -rniE 'catch\s*\([^)]*\)\s*\{\s*\}' --include='*.ts' --include='*.js' .
356
+
357
+ # Missing audit trail for critical operations
358
+ grep -rniE '(delete|update|create|transfer)' --include='*.ts' --include='*.js' --include='*.py' .
359
+ # Then check if these operations are logged with user context
360
+ ```
361
+
362
+ ### Checks
363
+
364
+ - [ ] Failed login attempts are logged with IP and timestamp
365
+ - [ ] Successful logins are logged
366
+ - [ ] Access control failures are logged
367
+ - [ ] Input validation failures are logged
368
+ - [ ] Sensitive data is NOT logged (passwords, tokens, PII)
369
+ - [ ] Logs include sufficient context (who, what, when, where)
370
+
371
+ ### Remediation
372
+
373
+ Implement structured logging with: user ID, action, timestamp, IP address, result (success/failure). Exclude sensitive data. Set up log monitoring and alerting for anomalous patterns.
374
+
375
+ ---
376
+
377
+ ## A10: Server-Side Request Forgery (SSRF)
378
+
379
+ **CWE**: CWE-918
380
+
381
+ ### Detection Patterns
382
+
383
+ ```bash
384
+ # User-controlled URLs in fetch/request calls
385
+ grep -rniE '(fetch|axios|http\.request|requests\.(get|post)|urllib)\s*\(.*req\.(body|query|params)' \
386
+ --include='*.ts' --include='*.js' --include='*.py' .
387
+
388
+ # URL construction from user input
389
+ grep -rniE '(url|endpoint|target|redirect)\s*[:=].*req\.(body|query|params)' --include='*.ts' --include='*.js' --include='*.py' .
390
+
391
+ # Image/file fetch from URL
392
+ grep -rniE '(download|fetchImage|getFile|loadUrl)\s*\(.*req\.' --include='*.ts' --include='*.js' --include='*.py' .
393
+
394
+ # Redirect without validation
395
+ grep -rniE 'res\.redirect\(.*req\.|redirect_to.*request\.' --include='*.ts' --include='*.js' --include='*.py' .
396
+ ```
397
+
398
+ ### Vulnerable Code Example
399
+
400
+ ```javascript
401
+ // BAD: Unvalidated URL fetch
402
+ app.get('/proxy', async (req, res) => {
403
+ const response = await fetch(req.query.url); // Can access internal services
404
+ res.send(await response.text());
405
+ });
406
+ ```
407
+
408
+ ### Remediation
409
+
410
+ ```javascript
411
+ // GOOD: URL allowlist validation
412
+ const ALLOWED_HOSTS = ['api.example.com', 'cdn.example.com'];
413
+
414
+ app.get('/proxy', async (req, res) => {
415
+ const url = new URL(req.query.url);
416
+ if (!ALLOWED_HOSTS.includes(url.hostname)) {
417
+ return res.status(400).json({ error: 'Host not allowed' });
418
+ }
419
+ if (url.protocol !== 'https:') {
420
+ return res.status(400).json({ error: 'HTTPS required' });
421
+ }
422
+ const response = await fetch(url.toString());
423
+ res.send(await response.text());
424
+ });
425
+ ```
426
+
427
+ ---
428
+
429
+ ## Quick Reference
430
+
431
+ | ID | Category | Key Grep Pattern | Severity Baseline |
432
+ |----|----------|-----------------|-------------------|
433
+ | A01 | Broken Access Control | `findById.*params` without owner check | High |
434
+ | A02 | Cryptographic Failures | `md5\|sha1` for passwords | High |
435
+ | A03 | Injection | `query.*\+.*req\.\|f".*SELECT.*\{` | Critical |
436
+ | A04 | Insecure Design | Missing rate limit on auth routes | Medium |
437
+ | A05 | Security Misconfiguration | `DEBUG.*true\|stack.*res.json` | Medium |
438
+ | A06 | Vulnerable Components | `npm audit` / `pip-audit` results | Varies |
439
+ | A07 | Auth Failures | `jwt.sign` without `expiresIn` | High |
440
+ | A08 | Integrity Failures | `pickle.load\|yaml.load` | High |
441
+ | A09 | Logging Failures | Empty catch blocks, no auth logging | Medium |
442
+ | A10 | SSRF | `fetch.*req.query.url` | High |
@@ -0,0 +1,141 @@
1
+ # Scoring Gates
2
+
3
+ Defines the 10-point scoring system, severity weights, quality gates, and trend tracking format for security audits.
4
+
5
+ ## When to Use
6
+
7
+ | Phase | Usage | Section |
8
+ |-------|-------|---------|
9
+ | Phase 1 | Quick-scan scoring (daily gate) | Severity Weights, Daily Gate |
10
+ | Phase 4 | Full audit scoring and reporting | All sections |
11
+
12
+ ---
13
+
14
+ ## 10-Point Scale
15
+
16
+ All security audit scores are on a 0-10 scale where 10 = no findings and 0 = critical exposure.
17
+
18
+ | Score | Rating | Description |
19
+ |-------|--------|-------------|
20
+ | 9.0 - 10.0 | Excellent | Minimal risk. Production-ready without reservations. |
21
+ | 7.0 - 8.9 | Good | Low risk. Acceptable for production with minor improvements. |
22
+ | 5.0 - 6.9 | Fair | Moderate risk. Remediation recommended before production. |
23
+ | 3.0 - 4.9 | Poor | High risk. Remediation required. Not production-ready. |
24
+ | 0.0 - 2.9 | Critical | Severe exposure. Immediate action required. |
25
+
26
+ ## Severity Weights
27
+
28
+ Each finding is weighted by severity for score calculation.
29
+
30
+ | Severity | Weight | Criteria | Examples |
31
+ |----------|--------|----------|----------|
32
+ | **Critical** | 10 | Exploitable with high impact, no user interaction needed | RCE, SQL injection with data access, leaked production credentials, auth bypass |
33
+ | **High** | 7 | Exploitable with significant impact, may need user interaction | Broken authentication, SSRF, privilege escalation, XSS with session theft |
34
+ | **Medium** | 4 | Limited exploitability or moderate impact | Reflected XSS, CSRF, verbose error messages, missing security headers |
35
+ | **Low** | 1 | Informational or minimal impact | Missing best-practice headers, minor info disclosure, deprecated dependencies without known exploit |
36
+
37
+ ## Score Calculation
38
+
39
+ ```
40
+ Input:
41
+ findings[] -- array of all findings with severity
42
+ files_scanned -- total source files analyzed
43
+
44
+ Algorithm:
45
+ base_score = 10.0
46
+ normalization = max(10, files_scanned)
47
+
48
+ weighted_sum = 0
49
+ for each finding:
50
+ weighted_sum += severity_weight(finding.severity)
51
+
52
+ penalty = weighted_sum / normalization
53
+ final_score = max(0, base_score - penalty)
54
+ final_score = round(final_score, 1)
55
+
56
+ return final_score
57
+ ```
58
+
59
+ **Example**:
60
+
61
+ | Findings | Files Scanned | Weighted Sum | Penalty | Score |
62
+ |----------|--------------|--------------|---------|-------|
63
+ | 1 critical | 50 | 10 | 0.2 | 9.8 |
64
+ | 2 critical, 3 high | 50 | 41 | 0.82 | 9.2 |
65
+ | 5 critical, 10 high | 50 | 120 | 2.4 | 7.6 |
66
+ | 10 critical, 20 high, 15 medium | 100 | 300 | 3.0 | 7.0 |
67
+ | 20 critical | 20 | 200 | 10.0 | 0.0 |
68
+
69
+ ## Quality Gates
70
+
71
+ ### Daily Quick-Scan Gate
72
+
73
+ Applies to Phase 1 (Supply Chain Scan) only.
74
+
75
+ | Result | Condition | Action |
76
+ |--------|-----------|--------|
77
+ | **PASS** | score >= 8.0 | Continue. No blocking issues. |
78
+ | **WARN** | 6.0 <= score < 8.0 | Log warning. Review findings before deploy. |
79
+ | **FAIL** | score < 6.0 | Block deployment. Remediate critical/high findings. |
80
+
81
+ ### Comprehensive Audit Gate
82
+
83
+ Applies to full audit (all 4 phases).
84
+
85
+ **Initial/Baseline audit** (no previous audit exists):
86
+
87
+ | Result | Condition | Action |
88
+ |--------|-----------|--------|
89
+ | **PASS** | score >= 2.0 | Baseline established. Plan remediation. |
90
+ | **FAIL** | score < 2.0 | Critical exposure. Immediate triage required. |
91
+
92
+ **Subsequent audits** (previous audit exists):
93
+
94
+ | Result | Condition | Action |
95
+ |--------|-----------|--------|
96
+ | **PASS** | score >= previous_score | No regression. Continue improvement. |
97
+ | **WARN** | score within 0.5 of previous | Marginal change. Review new findings. |
98
+ | **FAIL** | score < previous_score - 0.5 | Regression detected. Investigate new findings. |
99
+
100
+ **Production readiness target**: score >= 7.0
101
+
102
+ ## Trend Tracking Format
103
+
104
+ Each audit report stores trend data for comparison.
105
+
106
+ ```json
107
+ {
108
+ "trend": {
109
+ "current_date": "2026-03-29",
110
+ "current_score": 7.5,
111
+ "previous_date": "2026-03-22",
112
+ "previous_score": 6.8,
113
+ "score_delta": 0.7,
114
+ "new_findings": 2,
115
+ "resolved_findings": 5,
116
+ "direction": "improving",
117
+ "history": [
118
+ { "date": "2026-03-15", "score": 5.2, "total_findings": 45 },
119
+ { "date": "2026-03-22", "score": 6.8, "total_findings": 32 },
120
+ { "date": "2026-03-29", "score": 7.5, "total_findings": 29 }
121
+ ]
122
+ }
123
+ }
124
+ ```
125
+
126
+ **Direction values**:
127
+
128
+ | Direction | Condition |
129
+ |-----------|-----------|
130
+ | `improving` | score_delta > 0.5 |
131
+ | `stable` | -0.5 <= score_delta <= 0.5 |
132
+ | `regressing` | score_delta < -0.5 |
133
+ | `baseline` | No previous audit exists |
134
+
135
+ ## Finding Deduplication
136
+
137
+ When the same vulnerability appears in multiple phases:
138
+ 1. Keep the highest-severity classification
139
+ 2. Merge evidence from all phases
140
+ 3. Count as a single finding for scoring
141
+ 4. Note all phases that detected it
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: ship
3
+ description: Structured release pipeline with pre-flight checks, AI code review, version bump, changelog, and PR creation. Triggers on "ship", "release", "publish".
4
+ allowed-tools: Read, Write, Bash, Glob, Grep
5
+ ---
6
+
7
+ # Ship
8
+
9
+ Structured release pipeline that guides code from working branch to pull request through 5 gated phases: pre-flight checks, automated code review, version bump, changelog generation, and PR creation.
10
+
11
+ ## Key Design Principles
12
+
13
+ 1. **Phase Gates**: Each phase must pass before the next begins — no shipping broken code
14
+ 2. **Multi-Project Support**: Detects npm (package.json), Python (pyproject.toml), and generic (VERSION) projects
15
+ 3. **AI-Powered Review**: Uses CCW CLI to run automated code review before release
16
+ 4. **Audit Trail**: Each phase produces structured output for traceability
17
+ 5. **Safe Defaults**: Warns on risky operations (direct push to main, major version bumps)
18
+
19
+ ## Architecture Overview
20
+
21
+ ```
22
+ User: "ship" / "release" / "publish"
23
+ |
24
+ v
25
+ ┌──────────────────────────────────────────────────────────┐
26
+ │ Phase 1: Pre-Flight Checks │
27
+ │ → git clean? branch ok? tests pass? build ok? │
28
+ │ → Output: preflight-report.json │
29
+ │ → Gate: ALL checks must pass │
30
+ ├──────────────────────────────────────────────────────────┤
31
+ │ Phase 2: Code Review │
32
+ │ → detect merge base, diff against base │
33
+ │ → ccw cli --tool gemini --mode analysis │
34
+ │ → flag high-risk changes │
35
+ │ → Output: review-summary │
36
+ │ → Gate: No critical issues flagged │
37
+ ├──────────────────────────────────────────────────────────┤
38
+ │ Phase 3: Version Bump │
39
+ │ → detect version file (package.json/pyproject.toml/VERSION)
40
+ │ → determine bump type from commits or user input │
41
+ │ → update version file │
42
+ │ → Output: version change record │
43
+ │ → Gate: Version updated successfully │
44
+ ├──────────────────────────────────────────────────────────┤
45
+ │ Phase 4: Changelog & Commit │
46
+ │ → generate changelog from git log since last tag │
47
+ │ → update CHANGELOG.md │
48
+ │ → create release commit, push to remote │
49
+ │ → Output: commit SHA │
50
+ │ → Gate: Push successful │
51
+ ├──────────────────────────────────────────────────────────┤
52
+ │ Phase 5: PR Creation │
53
+ │ → gh pr create with structured body │
54
+ │ → auto-link issues from commits │
55
+ │ → Output: PR URL │
56
+ │ → Gate: PR created │
57
+ └──────────────────────────────────────────────────────────┘
58
+ ```
59
+
60
+ ## Execution Flow
61
+
62
+ Execute phases sequentially. Each phase has a gate condition — if the gate fails, stop and report status.
63
+
64
+ 1. **Phase 1**: [Pre-Flight Checks](phases/01-preflight-checks.md) -- Validate git state, branch, tests, build
65
+ 2. **Phase 2**: [Code Review](phases/02-code-review.md) -- AI-powered diff review with risk assessment
66
+ 3. **Phase 3**: [Version Bump](phases/03-version-bump.md) -- Detect and update version across project types
67
+ 4. **Phase 4**: [Changelog & Commit](phases/04-changelog-commit.md) -- Generate changelog, create release commit, push
68
+ 5. **Phase 5**: [PR Creation](phases/05-pr-creation.md) -- Create PR with structured body and issue links
69
+
70
+ ## Pre-Flight Checklist (Quick Reference)
71
+
72
+ | Check | Command | Pass Condition |
73
+ |-------|---------|----------------|
74
+ | Git clean | `git status --porcelain` | Empty output |
75
+ | Branch | `git branch --show-current` | Not main/master |
76
+ | Tests | `npm test` / `pytest` | Exit code 0 |
77
+ | Build | `npm run build` / `python -m build` | Exit code 0 |
78
+
79
+ ## Completion Status Protocol
80
+
81
+ This skill follows the Completion Status Protocol defined in [SKILL-DESIGN-SPEC.md sections 13-14](../_shared/SKILL-DESIGN-SPEC.md#13-completion-status-protocol).
82
+
83
+ Every execution terminates with one of:
84
+
85
+ | Status | When |
86
+ |--------|------|
87
+ | **DONE** | All 5 phases completed, PR created |
88
+ | **DONE_WITH_CONCERNS** | PR created but with review warnings or non-critical issues |
89
+ | **BLOCKED** | A gate failed (dirty git, tests fail, push rejected) |
90
+ | **NEEDS_CONTEXT** | Cannot determine bump type, ambiguous branch target |
91
+
92
+ ### Escalation
93
+
94
+ Follows the Three-Strike Rule (SKILL-DESIGN-SPEC section 14). On 3 consecutive failures at the same step, stop and output diagnostic dump.
95
+
96
+ ## Reference Documents
97
+
98
+ | Document | Purpose |
99
+ |----------|---------|
100
+ | [phases/01-preflight-checks.md](phases/01-preflight-checks.md) | Git, branch, test, build validation |
101
+ | [phases/02-code-review.md](phases/02-code-review.md) | AI-powered diff review |
102
+ | [phases/03-version-bump.md](phases/03-version-bump.md) | Version detection and bump |
103
+ | [phases/04-changelog-commit.md](phases/04-changelog-commit.md) | Changelog generation and release commit |
104
+ | [phases/05-pr-creation.md](phases/05-pr-creation.md) | PR creation with issue linking |
105
+ | [../_shared/SKILL-DESIGN-SPEC.md](../_shared/SKILL-DESIGN-SPEC.md) | Skill design spec (completion protocol, escalation) |