claude-code-workflow 7.2.27 → 7.2.29

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 (416) 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/brainstorm/SKILL.md +3 -3
  106. package/.codex/skills/clean/SKILL.md +3 -3
  107. package/.codex/skills/investigate/agents/investigator.md +392 -0
  108. package/.codex/skills/investigate/orchestrator.md +362 -0
  109. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  110. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  111. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  112. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  113. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  114. package/.codex/skills/issue-discover/SKILL.md +13 -13
  115. package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
  116. package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
  117. package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
  118. package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
  119. package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
  120. package/.codex/skills/review-cycle/SKILL.md +10 -10
  121. package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
  122. package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
  123. package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
  124. package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
  125. package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
  126. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  127. package/.codex/skills/security-audit/orchestrator.md +384 -0
  128. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  129. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  130. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  131. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  132. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  133. package/.codex/skills/ship/orchestrator.md +426 -0
  134. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  135. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  136. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  137. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  138. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  139. package/.codex/skills/spec-generator/README.md +1 -1
  140. package/.codex/skills/spec-generator/SKILL.md +184 -88
  141. package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
  142. package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
  143. package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
  144. package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
  145. package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
  146. package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
  147. package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
  148. package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
  149. package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
  150. package/.codex/skills/spec-setup/SKILL.md +4 -4
  151. package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
  152. package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  153. package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
  154. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  155. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
  156. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
  157. package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
  158. package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  159. package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  160. package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  161. package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
  162. package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
  163. package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  164. package/.codex/skills/team-motion-design/SKILL.md +222 -0
  165. package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
  166. package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
  167. package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  168. package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
  169. package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
  170. package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
  171. package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  172. package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  173. package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  174. package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
  175. package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
  176. package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
  177. package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
  178. package/.codex/skills/team-ui-polish/SKILL.md +218 -0
  179. package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  180. package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
  181. package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
  182. package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
  183. package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
  184. package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
  185. package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
  186. package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
  187. package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  188. package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
  189. package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  190. package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
  191. package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  192. package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
  193. package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
  194. package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  195. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  196. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
  197. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
  198. package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
  199. package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  200. package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  201. package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  202. package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  203. package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  204. package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  205. package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
  206. package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
  207. package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  208. package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  209. package/.codex/skills/workflow-plan/SKILL.md +6 -6
  210. package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
  211. package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
  212. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
  213. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
  214. package/README.md +8 -0
  215. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  216. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  217. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  218. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  219. package/ccw/dist/core/routes/cli-routes.js +34 -0
  220. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  221. package/ccw/dist/core/routes/system-routes.js +2 -2
  222. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  223. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-exlTDW81.js} +3 -3
  224. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-exlTDW81.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-cgV9LfAI.js} +2 -2
  226. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
  228. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
  229. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-Be9xsPiv.js} +2 -2
  230. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
  231. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
  232. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
  233. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BrE-oyEq.js} +2 -2
  234. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
  235. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cd3nrC93.js} +2 -2
  236. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DXFl3VKF.js} +2 -2
  238. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
  240. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-CpDxtmRX.js} +2 -2
  242. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-BchjWe7s.js} +2 -2
  244. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-CbWvaJ0y.js} +2 -2
  246. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-YMjVRiCk.js} +2 -2
  248. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
  250. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BtqzqDVq.js} +2 -2
  252. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
  254. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-BuWpQ7k5.js} +2 -2
  256. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-D0BtMIWy.js} +2 -2
  258. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-C7dwsAKG.js} +2 -2
  260. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-D0nCNaeB.js} +2 -2
  262. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
  264. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-C-S5CehM.js} +2 -2
  266. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-P_B0JVUQ.js} +2 -2
  268. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-S4Jn9LUE.js} +2 -2
  270. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
  272. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
  274. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-YEMjFARX.js} +3 -3
  276. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-DnTm55nG.js} +2 -2
  278. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CUwebtO2.js} +2 -2
  280. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
  282. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-BpgP4087.js} +2 -2
  284. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-BpgP4087.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
  286. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
  287. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
  288. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
  289. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
  290. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-CYSPdqWk.js} +2 -2
  292. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-CYSPdqWk.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-CPh6Zor1.js} +2 -2
  294. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-Ds-8830B.js} +2 -2
  296. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-CJODUxBk.js} +2 -2
  298. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-CJODUxBk.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
  300. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-CjwVpw6k.js} +2 -2
  302. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-CjwVpw6k.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-2vZa9Ic3.js} +2 -2
  304. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-CUU5XDgT.js} +2 -2
  306. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
  308. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-BwpSRDUa.js} +2 -2
  310. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-BwpSRDUa.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-DBzUW1XC.js} +2 -2
  312. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-DBzUW1XC.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CGNNsjvE.js} +2 -2
  314. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-D27G86Ul.js} +2 -2
  316. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-D27G86Ul.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
  318. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-C6MOB7Au.js} +2 -2
  320. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-C6MOB7Au.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-BxfBlZ26.js} +2 -2
  322. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-BxfBlZ26.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-NI237wA-.js} +2 -2
  324. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-NI237wA-.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-Byn2_2v6.js} +2 -2
  326. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-Byn2_2v6.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-D-7PhZjx.js} +2 -2
  328. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-D-7PhZjx.js.map} +1 -1
  329. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-BoAsK_FL.js} +2 -2
  330. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-BoAsK_FL.js.map} +1 -1
  331. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-DCSxJIS4.js} +2 -2
  332. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-DCSxJIS4.js.map} +1 -1
  333. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-CHS3prza.js} +2 -2
  334. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-CHS3prza.js.map} +1 -1
  335. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-D7K35U7S.js} +2 -2
  336. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
  337. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-eq9xE07G.js} +2 -2
  338. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-eq9xE07G.js.map} +1 -1
  339. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-C1DMpBua.js} +2 -2
  340. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-C1DMpBua.js.map} +1 -1
  341. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-Di5SBCY-.js} +2 -2
  342. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-Di5SBCY-.js.map} +1 -1
  343. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index--_R7COnA.js} +2 -2
  344. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index--_R7COnA.js.map} +1 -1
  345. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-BUol9HDD.js} +3 -3
  346. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-BUol9HDD.js.map} +1 -1
  347. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-CT9oykfw.js} +2 -2
  348. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-CT9oykfw.js.map} +1 -1
  349. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-Ddwvf87H.js} +2 -2
  350. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-Ddwvf87H.js.map} +1 -1
  351. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-LiX0qZbN.js} +2 -2
  352. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
  353. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-CL3DVEwb.js} +2 -2
  354. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
  355. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CC5cFeq6.js} +2 -2
  356. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CC5cFeq6.js.map} +1 -1
  357. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-ngFQ9bs0.js} +2 -2
  358. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-ngFQ9bs0.js.map} +1 -1
  359. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-BEU6I0KK.js} +2 -2
  360. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-BEU6I0KK.js.map} +1 -1
  361. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BWZdLA6y.js} +2 -2
  362. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BWZdLA6y.js.map} +1 -1
  363. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-K6_Chm7n.js} +2 -2
  364. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-K6_Chm7n.js.map} +1 -1
  365. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CWkphauf.js} +2 -2
  366. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CWkphauf.js.map} +1 -1
  367. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-DrNgkamn.js} +2 -2
  368. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-DrNgkamn.js.map} +1 -1
  369. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CMo3sw5_.js} +2 -2
  370. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CMo3sw5_.js.map} +1 -1
  371. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-DppNTW5e.js} +2 -2
  372. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-DppNTW5e.js.map} +1 -1
  373. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-CD8aPMbZ.js} +2 -2
  374. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-CD8aPMbZ.js.map} +1 -1
  375. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-B4z90fQD.js} +2 -2
  376. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-B4z90fQD.js.map} +1 -1
  377. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2-CAKRU_QC.js} +2 -2
  378. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2-CAKRU_QC.js.map} +1 -1
  379. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-KhI3HrzX.js} +2 -2
  380. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
  381. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-BtdGIpuq.js} +2 -2
  382. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-BtdGIpuq.js.map} +1 -1
  383. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-ZoBUkXoD.js} +2 -2
  384. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-ZoBUkXoD.js.map} +1 -1
  385. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CltxQP-P.js} +2 -2
  386. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CltxQP-P.js.map} +1 -1
  387. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-C32OUSGf.js} +2 -2
  388. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-C32OUSGf.js.map} +1 -1
  389. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-0IxoyAVZ.js} +2 -2
  390. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
  391. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-4eKCkyBn.js} +2 -2
  392. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-4eKCkyBn.js.map} +1 -1
  393. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-zLTUWqhi.js} +2 -2
  394. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
  395. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-BtN2vpOX.js} +2 -2
  396. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-BtN2vpOX.js.map} +1 -1
  397. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-_spj49qL.js} +2 -2
  398. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-_spj49qL.js.map} +1 -1
  399. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-Bm9KFZvd.js} +2 -2
  400. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
  401. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-DOmpm6v9.js} +2 -2
  402. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
  403. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-D2rj4rea.js} +2 -2
  404. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-D2rj4rea.js.map} +1 -1
  405. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-OskEpomF.js} +3 -3
  406. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-OskEpomF.js.map} +1 -1
  407. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-BjMgsNSF.js} +2 -2
  408. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
  409. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-CLhyYWa7.js} +2 -2
  410. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
  411. package/ccw/frontend/dist/index.html +1 -1
  412. package/package.json +105 -105
  413. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js +0 -150
  414. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
  415. package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js +0 -7
  416. package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js.map +0 -1
@@ -0,0 +1,384 @@
1
+ ---
2
+ name: security-audit
3
+ description: OWASP Top 10 and STRIDE security auditing with supply chain analysis. Triggers on "security audit", "security scan", "cso".
4
+ agents: security-auditor
5
+ phases: 4
6
+ ---
7
+
8
+ # Security Audit
9
+
10
+ 4-phase security audit covering supply chain risks, OWASP Top 10 code review, STRIDE threat modeling, and trend-tracked reporting. Produces structured JSON findings in `.workflow/.security/`.
11
+
12
+ ## Architecture
13
+
14
+ ```
15
+ +----------------------------------------------------------------------+
16
+ | security-audit Orchestrator |
17
+ | -> Mode selection: quick-scan (Phase 1 only) vs comprehensive |
18
+ +-----------------------------------+----------------------------------+
19
+ |
20
+ +---------------------+---------------------+
21
+ | |
22
+ [quick-scan mode] [comprehensive mode]
23
+ | |
24
+ +---------v---------+ +------------v-----------+
25
+ | Phase 1 | | Phase 1 |
26
+ | Supply Chain Scan | | Supply Chain Scan |
27
+ | -> supply-chain- | | -> supply-chain- |
28
+ | report.json | | report.json |
29
+ +---------+---------+ +------------+-----------+
30
+ | |
31
+ [score gate] +-----------v-----------+
32
+ score >= 8/10 | Phase 2 |
33
+ | | OWASP Review |
34
+ [DONE or | -> owasp-findings. |
35
+ DONE_WITH_CONCERNS] | json |
36
+ +-----------+-----------+
37
+ |
38
+ +-----------v-----------+
39
+ | Phase 3 |
40
+ | Threat Modeling |
41
+ | (STRIDE) |
42
+ | -> threat-model.json |
43
+ +-----------+-----------+
44
+ |
45
+ +-----------v-----------+
46
+ | Phase 4 |
47
+ | Report & Tracking |
48
+ | -> audit-report- |
49
+ | {date}.json |
50
+ +-----------------------+
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Agent Registry
56
+
57
+ | Agent | task_name | Role File | Responsibility | Pattern | fork_context |
58
+ |-------|-----------|-----------|----------------|---------|-------------|
59
+ | security-auditor | security-auditor | ~/.codex/agents/security-auditor.md | Execute all 4 phases: dependency audit, OWASP review, STRIDE modeling, report generation | Deep Interaction (2.3) | false |
60
+
61
+ > **COMPACT PROTECTION**: Agent files are execution documents. When context compression occurs and agent instructions are reduced to summaries, **you MUST immediately `Read` the corresponding agent.md to reload before continuing execution**.
62
+
63
+ ---
64
+
65
+ ## Fork Context Strategy
66
+
67
+ | Agent | task_name | fork_context | fork_from | Rationale |
68
+ |-------|-----------|-------------|-----------|-----------|
69
+ | security-auditor | security-auditor | false | — | Starts fresh; all context provided via assign_task phase messages |
70
+
71
+ **Fork Decision Rules**:
72
+
73
+ | Condition | fork_context | Reason |
74
+ |-----------|-------------|--------|
75
+ | security-auditor spawn | false | Self-contained pipeline; phase inputs passed via assign_task |
76
+
77
+ ---
78
+
79
+ ## Subagent Registry
80
+
81
+ Utility subagents spawned by `security-auditor` (not by the orchestrator):
82
+
83
+ | Subagent | Agent File | Callable By | Purpose | Model |
84
+ |----------|-----------|-------------|---------|-------|
85
+ | inline-owasp-analysis | ~/.codex/agents/cli-explore-agent.md | security-auditor (Phase 2) | OWASP Top 10 2021 code-level analysis | haiku |
86
+
87
+ > Subagents are spawned by agents within their own execution context (Pattern 2.8), not by the orchestrator.
88
+
89
+ ---
90
+
91
+ ## Mode Selection
92
+
93
+ Determine mode from user request before spawning any agent.
94
+
95
+ | User Intent | Mode | Phases to Execute | Gate |
96
+ |-------------|------|-------------------|------|
97
+ | "quick scan", "daily check", "fast audit" | quick-scan | Phase 1 only | score >= 8/10 |
98
+ | "full audit", "comprehensive", "security audit", "cso" | comprehensive | Phases 1 → 2 → 3 → 4 | no regression (initial: >= 2/10) |
99
+ | Ambiguous | Prompt user: "Quick-scan (Phase 1 only) or comprehensive (all 4 phases)?" | — | — |
100
+
101
+ ---
102
+
103
+ ## Phase Execution
104
+
105
+ ### Phase 1: Supply Chain Scan
106
+
107
+ **Objective**: Detect low-hanging security risks in dependencies, secrets, CI/CD pipelines, and LLM integrations.
108
+
109
+ **Input**:
110
+
111
+ | Source | Description |
112
+ |--------|-------------|
113
+ | Working directory | Project source to be scanned |
114
+ | Mode | quick-scan or comprehensive |
115
+
116
+ **Execution**:
117
+
118
+ Spawn the security-auditor agent and assign Phase 1:
119
+
120
+ ```
121
+ spawn_agent({
122
+ task_name: "security-auditor",
123
+ fork_context: false,
124
+ message: `### MANDATORY FIRST STEPS
125
+ 1. Read: ~/.codex/skills/security-audit/agents/security-auditor.md
126
+
127
+ ## TASK: Phase 1 — Supply Chain Scan
128
+
129
+ Mode: <quick-scan|comprehensive>
130
+ Work directory: .workflow/.security
131
+
132
+ Execute Phase 1 per: ~/.codex/skills/security-audit/phases/01-supply-chain-scan.md
133
+
134
+ Deliverables:
135
+ - .workflow/.security/supply-chain-report.json
136
+ - Structured output summary with finding counts by severity`
137
+ })
138
+ const phase1Result = wait_agent({ targets: ["security-auditor"], timeout_ms: 300000 })
139
+ ```
140
+
141
+ **On timeout**:
142
+
143
+ ```
144
+ assign_task({
145
+ target: "security-auditor",
146
+ items: [{ type: "text", text: "Finalize current supply chain scan and output supply-chain-report.json now." }]
147
+ })
148
+ const phase1Result = wait_agent({ targets: ["security-auditor"], timeout_ms: 120000 })
149
+ ```
150
+
151
+ **Output**:
152
+
153
+ | Artifact | Description |
154
+ |----------|-------------|
155
+ | `.workflow/.security/supply-chain-report.json` | Dependency, secrets, CI/CD, and LLM findings |
156
+
157
+ ---
158
+
159
+ ### Quick-Scan Gate (quick-scan mode only)
160
+
161
+ After Phase 1 completes, evaluate score and close agent.
162
+
163
+ | Condition | Action |
164
+ |-----------|--------|
165
+ | score >= 8.0 | Status: DONE. No blocking issues. |
166
+ | 6.0 <= score < 8.0 | Status: DONE_WITH_CONCERNS. Log warning — review before deploy. |
167
+ | score < 6.0 | Status: DONE_WITH_CONCERNS. Block deployment. Remediate critical/high findings. |
168
+
169
+ ```
170
+ close_agent({ target: "security-auditor" })
171
+ ```
172
+
173
+ > **If quick-scan mode**: Stop here. Output final summary with score and findings count.
174
+
175
+ ---
176
+
177
+ ### Phase 2: OWASP Review (comprehensive mode only)
178
+
179
+ **Objective**: Systematic code-level review against all 10 OWASP Top 10 2021 categories.
180
+
181
+ **Input**:
182
+
183
+ | Source | Description |
184
+ |--------|-------------|
185
+ | `.workflow/.security/supply-chain-report.json` | Phase 1 findings for context |
186
+ | Source files | All .ts/.js/.py/.go/.java excluding node_modules, dist, build |
187
+
188
+ **Execution**:
189
+
190
+ ```
191
+ assign_task({
192
+ target: "security-auditor",
193
+ items: [{ type: "text", text: `## Phase 2 — OWASP Review
194
+
195
+ Execute Phase 2 per: ~/.codex/skills/security-audit/phases/02-owasp-review.md
196
+
197
+ Context: supply-chain-report.json already written to .workflow/.security/
198
+ Reference: ~/.codex/skills/security-audit/specs/owasp-checklist.md
199
+
200
+ Deliverables:
201
+ - .workflow/.security/owasp-findings.json
202
+ - Coverage for all 10 OWASP categories (A01–A10)` }]
203
+ })
204
+ const phase2Result = wait_agent({ targets: ["security-auditor"], timeout_ms: 360000 })
205
+ ```
206
+
207
+ **Output**:
208
+
209
+ | Artifact | Description |
210
+ |----------|-------------|
211
+ | `.workflow/.security/owasp-findings.json` | OWASP findings with owasp_id, severity, file:line, evidence, remediation |
212
+
213
+ ---
214
+
215
+ ### Phase 3: Threat Modeling (comprehensive mode only)
216
+
217
+ **Objective**: Apply STRIDE threat model to architecture components; assess attack surface.
218
+
219
+ **Input**:
220
+
221
+ | Source | Description |
222
+ |--------|-------------|
223
+ | `.workflow/.security/supply-chain-report.json` | Phase 1 findings |
224
+ | `.workflow/.security/owasp-findings.json` | Phase 2 findings |
225
+ | Source files | Route handlers, data stores, auth modules, external service clients |
226
+
227
+ **Execution**:
228
+
229
+ ```
230
+ assign_task({
231
+ target: "security-auditor",
232
+ items: [{ type: "text", text: `## Phase 3 — Threat Modeling (STRIDE)
233
+
234
+ Execute Phase 3 per: ~/.codex/skills/security-audit/phases/03-threat-modeling.md
235
+
236
+ Context: supply-chain-report.json and owasp-findings.json available in .workflow/.security/
237
+ Cross-reference Phase 1 and Phase 2 findings when mapping STRIDE categories.
238
+
239
+ Deliverables:
240
+ - .workflow/.security/threat-model.json
241
+ - All 6 STRIDE categories (S, T, R, I, D, E) evaluated per component
242
+ - Trust boundaries and attack surface quantified` }]
243
+ })
244
+ const phase3Result = wait_agent({ targets: ["security-auditor"], timeout_ms: 360000 })
245
+ ```
246
+
247
+ **Output**:
248
+
249
+ | Artifact | Description |
250
+ |----------|-------------|
251
+ | `.workflow/.security/threat-model.json` | STRIDE threat model with components, trust boundaries, attack surface |
252
+
253
+ ---
254
+
255
+ ### Phase 4: Report & Tracking (comprehensive mode only)
256
+
257
+ **Objective**: Calculate score, compare with previous audits, generate date-stamped report.
258
+
259
+ **Input**:
260
+
261
+ | Source | Description |
262
+ |--------|-------------|
263
+ | `.workflow/.security/supply-chain-report.json` | Phase 1 output |
264
+ | `.workflow/.security/owasp-findings.json` | Phase 2 output |
265
+ | `.workflow/.security/threat-model.json` | Phase 3 output |
266
+ | `.workflow/.security/audit-report-*.json` | Previous audit reports (optional, for trend) |
267
+
268
+ **Execution**:
269
+
270
+ ```
271
+ assign_task({
272
+ target: "security-auditor",
273
+ items: [{ type: "text", text: `## Phase 4 — Report & Tracking
274
+
275
+ Execute Phase 4 per: ~/.codex/skills/security-audit/phases/04-report-tracking.md
276
+
277
+ Scoring reference: ~/.codex/skills/security-audit/specs/scoring-gates.md
278
+
279
+ Steps:
280
+ 1. Aggregate all findings from phases 1–3
281
+ 2. Calculate score using formula: base 10.0 - (weighted_sum / normalization)
282
+ 3. Check for previous audit: ls -t .workflow/.security/audit-report-*.json | head -1
283
+ 4. Compute trend (improving/stable/regressing/baseline)
284
+ 5. Evaluate gate (initial >= 2/10; subsequent >= previous_score)
285
+ 6. Write .workflow/.security/audit-report-<YYYY-MM-DD>.json
286
+
287
+ Deliverables:
288
+ - .workflow/.security/audit-report-<YYYY-MM-DD>.json
289
+ - Updated copies of all phase outputs in .workflow/.security/` }]
290
+ })
291
+ const phase4Result = wait_agent({ targets: ["security-auditor"], timeout_ms: 300000 })
292
+ ```
293
+
294
+ **Output**:
295
+
296
+ | Artifact | Description |
297
+ |----------|-------------|
298
+ | `.workflow/.security/audit-report-<date>.json` | Full scored report with trend, top risks, remediation priority |
299
+
300
+ ---
301
+
302
+ ### Comprehensive Gate (comprehensive mode only)
303
+
304
+ After Phase 4 completes, evaluate gate and close agent.
305
+
306
+ | Audit Type | Condition | Result | Action |
307
+ |------------|-----------|--------|--------|
308
+ | Initial (no prior audit) | score >= 2.0 | PASS | DONE. Baseline established. Plan remediation. |
309
+ | Initial | score < 2.0 | FAIL | DONE_WITH_CONCERNS. Critical exposure. Immediate triage required. |
310
+ | Subsequent | score >= previous_score | PASS | DONE. No regression. |
311
+ | Subsequent | previous_score - 0.5 <= score < previous_score | WARN | DONE_WITH_CONCERNS. Marginal change. Review new findings. |
312
+ | Subsequent | score < previous_score - 0.5 | FAIL | DONE_WITH_CONCERNS. Regression detected. Investigate new findings. |
313
+
314
+ ```
315
+ close_agent({ target: "security-auditor" })
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Lifecycle Management
321
+
322
+ ### Timeout Protocol
323
+
324
+ | Phase | Default Timeout | On Timeout |
325
+ |-------|-----------------|------------|
326
+ | Phase 1: Supply Chain | 300000 ms (5 min) | assign_task "Finalize output now", re-wait 120s |
327
+ | Phase 2: OWASP Review | 360000 ms (6 min) | assign_task "Output partial findings", re-wait 120s |
328
+ | Phase 3: Threat Modeling | 360000 ms (6 min) | assign_task "Output partial threat model", re-wait 120s |
329
+ | Phase 4: Report | 300000 ms (5 min) | assign_task "Write report with available data", re-wait 120s |
330
+
331
+ ### Cleanup Protocol
332
+
333
+ Agent is closed after the final executed phase (Phase 1 for quick-scan, Phase 4 for comprehensive).
334
+
335
+ ```
336
+ close_agent({ target: "security-auditor" })
337
+ ```
338
+
339
+ ---
340
+
341
+ ## Error Handling
342
+
343
+ | Scenario | Resolution |
344
+ |----------|------------|
345
+ | Agent timeout (first) | assign_task "Finalize current work and output now" + re-wait 120000 ms |
346
+ | Agent timeout (second) | Log error, close_agent({ target: "security-auditor" }), report partial results |
347
+ | Phase output file missing | assign_task requesting specific file output, re-wait |
348
+ | Audit tool not installed (npm/pip) | Phase 1 logs as INFO finding and continues — not a blocker |
349
+ | No previous audit found | Treat as baseline — apply initial gate (>= 2/10) |
350
+ | User cancellation | close_agent({ target: "security-auditor" }), report current state |
351
+
352
+ ---
353
+
354
+ ## Output Format
355
+
356
+ ```
357
+ ## Summary
358
+ - One-sentence completion status with mode and final score
359
+
360
+ ## Score
361
+ - Overall: <N>/10 (<Rating>)
362
+ - Gate: PASS|FAIL|WARN
363
+ - Mode: quick-scan|comprehensive
364
+
365
+ ## Findings
366
+ - Critical: <N>
367
+ - High: <N>
368
+ - Medium: <N>
369
+ - Low: <N>
370
+
371
+ ## Artifacts
372
+ - File: .workflow/.security/supply-chain-report.json
373
+ - File: .workflow/.security/owasp-findings.json (comprehensive only)
374
+ - File: .workflow/.security/threat-model.json (comprehensive only)
375
+ - File: .workflow/.security/audit-report-<date>.json (comprehensive only)
376
+
377
+ ## Top Risks
378
+ 1. <Most critical finding with file:line and remediation>
379
+ 2. <Second finding>
380
+
381
+ ## Next Steps
382
+ 1. Remediate critical findings (effort: <low|medium|high>)
383
+ 2. Re-run audit to verify fixes
384
+ ```
@@ -0,0 +1,226 @@
1
+ # Phase 1: Supply Chain Scan
2
+
3
+ > **COMPACT PROTECTION**: This is a core execution phase. If context compression has occurred and this file is only a summary, **MUST `Read` this file again before executing any Step**. Do not execute from memory.
4
+
5
+ Detect low-hanging security risks in third-party dependencies, hardcoded secrets, CI/CD pipelines, and LLM/AI integrations.
6
+
7
+ ## Objective
8
+
9
+ - Audit third-party dependencies for known vulnerabilities
10
+ - Scan source code for leaked secrets and credentials
11
+ - Review CI/CD configuration for injection risks
12
+ - Check for LLM/AI prompt injection vulnerabilities
13
+
14
+ ## Input
15
+
16
+ | Source | Required | Description |
17
+ |--------|----------|-------------|
18
+ | Project root | Yes | Working directory containing source files and dependency manifests |
19
+ | WORK_DIR | Yes | `.workflow/.security` — output directory (create if not exists) |
20
+
21
+ ## Execution Steps
22
+
23
+ ### Step 1: Dependency Audit
24
+
25
+ Detect package manager and run appropriate audit tool.
26
+
27
+ **Decision Table**:
28
+
29
+ | Condition | Action |
30
+ |-----------|--------|
31
+ | `package-lock.json` or `yarn.lock` present | Run `npm audit --json` |
32
+ | `requirements.txt` or `pyproject.toml` present | Run `pip-audit --format json`; fallback `safety check --json` |
33
+ | `go.sum` present | Run `govulncheck ./...` |
34
+ | No manifest files found | Log INFO finding: "No dependency manifests detected"; continue |
35
+ | Audit tool not installed | Log INFO finding: "<tool> not installed — manual review needed"; continue |
36
+
37
+ **Execution**:
38
+
39
+ ```bash
40
+ # Ensure output directory exists
41
+ mkdir -p .workflow/.security
42
+ WORK_DIR=".workflow/.security"
43
+
44
+ # Node.js projects
45
+ if [ -f package-lock.json ] || [ -f yarn.lock ]; then
46
+ npm audit --json > "${WORK_DIR}/npm-audit-raw.json" 2>&1 || true
47
+ fi
48
+
49
+ # Python projects
50
+ if [ -f requirements.txt ] || [ -f pyproject.toml ]; then
51
+ pip-audit --format json --output "${WORK_DIR}/pip-audit-raw.json" 2>&1 || true
52
+ # Fallback: safety check
53
+ safety check --json > "${WORK_DIR}/safety-raw.json" 2>&1 || true
54
+ fi
55
+
56
+ # Go projects
57
+ if [ -f go.sum ]; then
58
+ govulncheck ./... 2>&1 | tee "${WORK_DIR}/govulncheck-raw.txt" || true
59
+ fi
60
+ ```
61
+
62
+ ---
63
+
64
+ ### Step 2: Secrets Detection
65
+
66
+ Scan source files for hardcoded secrets using regex patterns. Exclude generated, compiled, and dependency directories.
67
+
68
+ **Decision Table**:
69
+
70
+ | Match Type | Severity | Category |
71
+ |------------|----------|----------|
72
+ | API key / token with 16+ chars | Critical | secret |
73
+ | AWS AKIA key pattern | Critical | secret |
74
+ | Private key PEM block | Critical | secret |
75
+ | DB connection string with embedded password | Critical | secret |
76
+ | Hardcoded JWT token | High | secret |
77
+ | No matches | — | No finding |
78
+
79
+ **Execution**:
80
+
81
+ ```bash
82
+ # High-confidence patterns (case-insensitive)
83
+ grep -rniE \
84
+ '(api[_-]?key|api[_-]?secret|access[_-]?token|auth[_-]?token|secret[_-]?key)\s*[:=]\s*["\x27][A-Za-z0-9+/=_-]{16,}' \
85
+ --include='*.ts' --include='*.js' --include='*.py' --include='*.go' \
86
+ --include='*.java' --include='*.rb' --include='*.env' --include='*.yml' \
87
+ --include='*.yaml' --include='*.json' --include='*.toml' --include='*.cfg' \
88
+ . || true
89
+
90
+ # AWS patterns
91
+ grep -rniE '(AKIA[0-9A-Z]{16}|aws[_-]?secret[_-]?access[_-]?key)' . || true
92
+
93
+ # Private keys
94
+ grep -rniE '-----BEGIN (RSA |EC |DSA )?PRIVATE KEY-----' . || true
95
+
96
+ # Connection strings with passwords
97
+ grep -rniE '(mongodb|postgres|mysql|redis)://[^:]+:[^@]+@' . || true
98
+
99
+ # JWT tokens (hardcoded)
100
+ grep -rniE 'eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}' . || true
101
+ ```
102
+
103
+ Exclude from scan: `node_modules/`, `.git/`, `dist/`, `build/`, `__pycache__/`, `*.lock`, `*.min.js`.
104
+
105
+ Redact actual matched secret values in findings — use `[REDACTED]` in evidence field.
106
+
107
+ ---
108
+
109
+ ### Step 3: CI/CD Config Review
110
+
111
+ Check GitHub Actions and other CI/CD configurations for injection risks.
112
+
113
+ **Decision Table**:
114
+
115
+ | Pattern Found | Severity | Finding |
116
+ |---------------|----------|---------|
117
+ | `${{ github.event.` in `run:` block | High | Expression injection in workflow run step |
118
+ | `pull_request_target` with checkout of PR code | High | Privileged workflow triggered by untrusted code |
119
+ | `actions/checkout@v1` or `@v2` | Medium | Deprecated action version with known issues |
120
+ | `secrets.` passed to untrusted context | High | Secret exposure risk |
121
+ | No `.github/workflows/` directory | — | Not applicable; skip |
122
+
123
+ **Execution**:
124
+
125
+ ```bash
126
+ # Find workflow files
127
+ find .github/workflows -name '*.yml' -o -name '*.yaml' 2>/dev/null
128
+
129
+ # Check for expression injection in run: blocks
130
+ # Dangerous: ${{ github.event.pull_request.title }} in run:
131
+ grep -rn '\${{.*github\.event\.' .github/workflows/ 2>/dev/null || true
132
+
133
+ # Check for pull_request_target with checkout of PR code
134
+ grep -rn 'pull_request_target' .github/workflows/ 2>/dev/null || true
135
+
136
+ # Check for use of deprecated/vulnerable actions
137
+ grep -rn 'actions/checkout@v1\|actions/checkout@v2' .github/workflows/ 2>/dev/null || true
138
+
139
+ # Check for secrets passed to untrusted contexts
140
+ grep -rn 'secrets\.' .github/workflows/ 2>/dev/null || true
141
+ ```
142
+
143
+ ---
144
+
145
+ ### Step 4: LLM/AI Prompt Injection Check
146
+
147
+ Scan for patterns indicating prompt injection risk in LLM integrations.
148
+
149
+ **Decision Table**:
150
+
151
+ | Pattern Found | Severity | Finding |
152
+ |---------------|----------|---------|
153
+ | User input directly concatenated into prompt/system_message | High | LLM prompt injection vector |
154
+ | User input in template string passed to LLM call | High | LLM prompt injection via template |
155
+ | f-string with user data in `.complete`/`.generate` call | High | Python LLM prompt injection |
156
+ | LLM API call detected, no injection pattern | Low | LLM integration present — review for sanitization |
157
+
158
+ **Execution**:
159
+
160
+ ```bash
161
+ # User input concatenated directly into prompts
162
+ grep -rniE '(prompt|system_message|messages)\s*[+=].*\b(user_input|request\.(body|query|params)|req\.)' \
163
+ --include='*.ts' --include='*.js' --include='*.py' . || true
164
+
165
+ # Template strings with user data in LLM calls
166
+ grep -rniE '(openai|anthropic|llm|chat|completion)\.' \
167
+ --include='*.ts' --include='*.js' --include='*.py' . || true
168
+
169
+ # Check for missing input sanitization before LLM calls
170
+ grep -rniE 'f".*{.*}.*".*\.(chat|complete|generate)' \
171
+ --include='*.py' . || true
172
+ ```
173
+
174
+ ---
175
+
176
+ ## Output
177
+
178
+ | Artifact | Format | Description |
179
+ |----------|--------|-------------|
180
+ | `.workflow/.security/supply-chain-report.json` | JSON | All supply chain findings with severity classifications |
181
+
182
+ ```json
183
+ {
184
+ "phase": "supply-chain-scan",
185
+ "timestamp": "ISO-8601",
186
+ "findings": [
187
+ {
188
+ "category": "dependency|secret|cicd|llm",
189
+ "severity": "critical|high|medium|low",
190
+ "title": "Finding title",
191
+ "description": "Detailed description",
192
+ "file": "path/to/file",
193
+ "line": 42,
194
+ "evidence": "matched text or context",
195
+ "remediation": "How to fix"
196
+ }
197
+ ],
198
+ "summary": {
199
+ "total": 0,
200
+ "by_severity": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
201
+ "by_category": { "dependency": 0, "secret": 0, "cicd": 0, "llm": 0 }
202
+ }
203
+ }
204
+ ```
205
+
206
+ ## Success Criteria
207
+
208
+ | Criterion | Validation Method |
209
+ |-----------|-------------------|
210
+ | All 4 scan steps executed or explicitly skipped with reason | Review step execution log |
211
+ | `supply-chain-report.json` written to `.workflow/.security/` | File exists and is valid JSON |
212
+ | All findings have category, severity, file, evidence, remediation | JSON schema check |
213
+ | Secret values redacted in evidence field | No raw credential values in output |
214
+
215
+ ## Error Handling
216
+
217
+ | Scenario | Resolution |
218
+ |----------|------------|
219
+ | Audit tool not installed | Log INFO finding; continue with remaining steps |
220
+ | `grep` finds no matches | No finding generated for that pattern; continue |
221
+ | `.github/workflows/` does not exist | Mark CI/CD step as not_applicable; continue |
222
+ | Write to WORK_DIR fails | Attempt `mkdir -p .workflow/.security` and retry once |
223
+
224
+ ## Next Phase
225
+
226
+ -> [Phase 2: OWASP Review](02-owasp-review.md)