claude-code-workflow 7.2.10 → 7.2.11

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 (322) hide show
  1. package/.claude/agents/cli-planning-agent.md +3 -0
  2. package/.claude/agents/debug-explore-agent.md +1 -0
  3. package/.claude/agents/tdd-developer.md +1 -0
  4. package/.claude/agents/team-worker.md +1 -1
  5. package/.claude/agents/test-action-planning-agent.md +3 -0
  6. package/.claude/agents/test-context-search-agent.md +1 -0
  7. package/.claude/agents/test-fix-agent.md +3 -0
  8. package/.claude/skills/review-code/SKILL.md +2 -0
  9. package/.claude/skills/review-cycle/SKILL.md +4 -0
  10. package/.claude/skills/skill-simplify/phases/02-optimize.md +4 -0
  11. package/.claude/skills/spec-generator/phases/05-epics-stories.md +4 -0
  12. package/.claude/skills/team-arch-opt/specs/team-config.json +5 -5
  13. package/.claude/skills/team-frontend-debug/roles/analyzer/role.md +3 -2
  14. package/.claude/skills/team-perf-opt/roles/coordinator/commands/monitor.md +1 -1
  15. package/.claude/skills/team-perf-opt/specs/team-config.json +5 -5
  16. package/.claude/skills/team-quality-assurance/roles/executor/role.md +2 -1
  17. package/.claude/skills/team-review/roles/reviewer/role.md +2 -1
  18. package/.claude/skills/team-tech-debt/roles/scanner/role.md +2 -1
  19. package/.claude/skills/team-testing/roles/executor/role.md +2 -1
  20. package/.claude/skills/team-testing/roles/generator/role.md +2 -1
  21. package/.claude/skills/team-ultra-analyze/roles/explorer/role.md +2 -1
  22. package/.claude/skills/team-ux-improve/specs/team-config.json +6 -6
  23. package/.claude/skills/workflow-execute/phases/06-review.md +4 -4
  24. package/.claude/skills/workflow-lite-test-review/SKILL.md +2 -0
  25. package/.claude/skills/workflow-plan/phases/05-plan-verify.md +4 -0
  26. package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +1 -0
  27. package/.claude/skills/workflow-tdd-plan/phases/05-tdd-task-generation.md +2 -1
  28. package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +1 -0
  29. package/.claude/skills/workflow-test-fix/phases/05-test-cycle-execute.md +2 -1
  30. package/.claude/skills/workflow-tune/SKILL.md +487 -0
  31. package/.claude/skills/workflow-tune/phases/01-setup.md +548 -0
  32. package/.claude/skills/workflow-tune/phases/02-step-execute.md +197 -0
  33. package/.claude/skills/workflow-tune/phases/03-step-analyze.md +386 -0
  34. package/.claude/skills/workflow-tune/phases/04-synthesize.md +257 -0
  35. package/.claude/skills/workflow-tune/phases/05-optimize-report.md +246 -0
  36. package/.claude/skills/workflow-tune/specs/workflow-eval-criteria.md +57 -0
  37. package/.claude/skills/workflow-tune/templates/step-analysis-prompt.md +88 -0
  38. package/.claude/skills/workflow-tune/templates/synthesis-prompt.md +90 -0
  39. package/.codex/skills/analyze-with-file/SKILL.md +2 -0
  40. package/.codex/skills/debug-with-file/SKILL.md +4 -0
  41. package/.codex/skills/issue-discover/SKILL.md +1 -0
  42. package/.codex/skills/review-cycle/phases/02-parallel-review.md +3 -0
  43. package/.codex/skills/team-designer/agents/validation-reporter.md +186 -0
  44. package/.codex/skills/team-iterdev/agents/gc-controller.md +193 -0
  45. package/.codex/skills/team-iterdev/agents/task-analyzer.md +206 -0
  46. package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -0
  47. package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -0
  48. package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +182 -0
  49. package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -0
  50. package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +162 -0
  51. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +4 -0
  52. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +2 -0
  53. package/ccw/dist/commands/spec.d.ts.map +1 -1
  54. package/ccw/dist/commands/spec.js +9 -4
  55. package/ccw/dist/commands/spec.js.map +1 -1
  56. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  57. package/ccw/dist/core/routes/codexlens-routes.js +3 -1
  58. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  59. package/ccw/dist/tools/spec-index-builder.d.ts +8 -4
  60. package/ccw/dist/tools/spec-index-builder.d.ts.map +1 -1
  61. package/ccw/dist/tools/spec-index-builder.js +8 -4
  62. package/ccw/dist/tools/spec-index-builder.js.map +1 -1
  63. package/ccw/dist/tools/spec-init.d.ts +1 -1
  64. package/ccw/dist/tools/spec-init.d.ts.map +1 -1
  65. package/ccw/dist/tools/spec-init.js +127 -0
  66. package/ccw/dist/tools/spec-init.js.map +1 -1
  67. package/ccw/dist/tools/spec-loader.d.ts.map +1 -1
  68. package/ccw/dist/tools/spec-loader.js +2 -1
  69. package/ccw/dist/tools/spec-loader.js.map +1 -1
  70. package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js → AlertDialog-BW9jiZ-p.js} +2 -2
  71. package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js.map → AlertDialog-BW9jiZ-p.js.map} +1 -1
  72. package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js → AnalysisPage-ds-w_nVO.js} +2 -2
  73. package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js.map → AnalysisPage-ds-w_nVO.js.map} +1 -1
  74. package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js → ApiSettingsPage-DlCbXxTz.js} +2 -2
  75. package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js.map → ApiSettingsPage-DlCbXxTz.js.map} +1 -1
  76. package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js → CliModeToggle-Dq3nL4fF.js} +2 -2
  77. package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js.map → CliModeToggle-Dq3nL4fF.js.map} +1 -1
  78. package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js → CliSessionSharePage-BNDkEE4u.js} +2 -2
  79. package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js.map → CliSessionSharePage-BNDkEE4u.js.map} +1 -1
  80. package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js → CliViewerPage-ChM-uNx_.js} +2 -2
  81. package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js.map → CliViewerPage-ChM-uNx_.js.map} +1 -1
  82. package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js +2 -0
  83. package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js.map +1 -0
  84. package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js → Collapsible-CRNbykXN.js} +2 -2
  85. package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js.map → Collapsible-CRNbykXN.js.map} +1 -1
  86. package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js → CommandsManagerPage-C2JWcemF.js} +2 -2
  87. package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js.map → CommandsManagerPage-C2JWcemF.js.map} +1 -1
  88. package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js → DeepWikiPage-CvleOtJy.js} +2 -2
  89. package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js.map → DeepWikiPage-CvleOtJy.js.map} +1 -1
  90. package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js → EndpointsPage-CMOWQG64.js} +2 -2
  91. package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js.map → EndpointsPage-CMOWQG64.js.map} +1 -1
  92. package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js → ExplorerPage-DaFPRlNo.js} +2 -2
  93. package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js.map → ExplorerPage-DaFPRlNo.js.map} +1 -1
  94. package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js → FixSessionPage-CC4p04Az.js} +2 -2
  95. package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js.map → FixSessionPage-CC4p04Az.js.map} +1 -1
  96. package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js → FloatingFileBrowser-DROn1xZ5.js} +2 -2
  97. package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js.map → FloatingFileBrowser-DROn1xZ5.js.map} +1 -1
  98. package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js → FloatingPanel-CmL_yhDv.js} +2 -2
  99. package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js.map → FloatingPanel-CmL_yhDv.js.map} +1 -1
  100. package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js → GraphExplorerPage-DCV5ybKE.js} +2 -2
  101. package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js.map → GraphExplorerPage-DCV5ybKE.js.map} +1 -1
  102. package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js → HistoryPage-D0fYQZgc.js} +2 -2
  103. package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js.map → HistoryPage-D0fYQZgc.js.map} +1 -1
  104. package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js → HookManagerPage-D2FuJfsM.js} +2 -2
  105. package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js.map → HookManagerPage-D2FuJfsM.js.map} +1 -1
  106. package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js → InstallationsPage-tjklillZ.js} +2 -2
  107. package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js.map → InstallationsPage-tjklillZ.js.map} +1 -1
  108. package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js → IssueHubPage-E4JVrhO1.js} +2 -2
  109. package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js.map → IssueHubPage-E4JVrhO1.js.map} +1 -1
  110. package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js → LiteTasksPage-aJuRoyLt.js} +2 -2
  111. package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js.map → LiteTasksPage-aJuRoyLt.js.map} +1 -1
  112. package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js → McpManagerPage-BJeuWJv1.js} +2 -2
  113. package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js.map → McpManagerPage-BJeuWJv1.js.map} +1 -1
  114. package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js → MemoryPage-BI4FAXhs.js} +2 -2
  115. package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js.map → MemoryPage-BI4FAXhs.js.map} +1 -1
  116. package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js → NotFoundPage-DD2svchp.js} +2 -2
  117. package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js.map → NotFoundPage-DD2svchp.js.map} +1 -1
  118. package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js → OrchestratorPage-FC__7yYa.js} +2 -2
  119. package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js.map → OrchestratorPage-FC__7yYa.js.map} +1 -1
  120. package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js → ProjectOverviewPage-DBB_-FzV.js} +2 -2
  121. package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js.map → ProjectOverviewPage-DBB_-FzV.js.map} +1 -1
  122. package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js → PromptHistoryPage-BwOAvCH8.js} +2 -2
  123. package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js.map → PromptHistoryPage-BwOAvCH8.js.map} +1 -1
  124. package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js → ReviewSessionPage-Dd1-g_gp.js} +2 -2
  125. package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js.map → ReviewSessionPage-Dd1-g_gp.js.map} +1 -1
  126. package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js → RulesManagerPage-B3RGdsKD.js} +2 -2
  127. package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js.map → RulesManagerPage-B3RGdsKD.js.map} +1 -1
  128. package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js → SessionDetailPage-DM-W5R8K.js} +2 -2
  129. package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js.map → SessionDetailPage-DM-W5R8K.js.map} +1 -1
  130. package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js → SessionsPage-BVz1KCc7.js} +2 -2
  131. package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js.map → SessionsPage-BVz1KCc7.js.map} +1 -1
  132. package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js → SettingsPage-ComW7EZS.js} +4 -4
  133. package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js.map → SettingsPage-ComW7EZS.js.map} +1 -1
  134. package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js → SkillsManagerPage-CKom9XwV.js} +2 -2
  135. package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js.map → SkillsManagerPage-CKom9XwV.js.map} +1 -1
  136. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js → SpecsSettingsPage-DQz7WP2s.js} +2 -2
  137. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js.map → SpecsSettingsPage-DQz7WP2s.js.map} +1 -1
  138. package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js → Switch-BPMdND9H.js} +2 -2
  139. package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js.map → Switch-BPMdND9H.js.map} +1 -1
  140. package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js → TabsNavigation-qqt70VYL.js} +2 -2
  141. package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js.map → TabsNavigation-qqt70VYL.js.map} +1 -1
  142. package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js → TaskDrawer-BqK_qiHX.js} +2 -2
  143. package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js.map → TaskDrawer-BqK_qiHX.js.map} +1 -1
  144. package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js → TeamPage-u5_i0Rgh.js} +2 -2
  145. package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js.map → TeamPage-u5_i0Rgh.js.map} +1 -1
  146. package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js → TerminalDashboardPage-rUtC9e40.js} +2 -2
  147. package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js.map → TerminalDashboardPage-rUtC9e40.js.map} +1 -1
  148. package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js → archive-C3u8YNQF.js} +2 -2
  149. package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js.map → archive-C3u8YNQF.js.map} +1 -1
  150. package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js → archive-restore-DfQ998g5.js} +2 -2
  151. package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js.map → archive-restore-DfQ998g5.js.map} +1 -1
  152. package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js → arrow-right-BshJM9Po.js} +2 -2
  153. package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js.map → arrow-right-BshJM9Po.js.map} +1 -1
  154. package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js → bookmark-plus-D03qJyOZ.js} +2 -2
  155. package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js.map → bookmark-plus-D03qJyOZ.js.map} +1 -1
  156. package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js → bot-CyzWuwq0.js} +2 -2
  157. package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js.map → bot-CyzWuwq0.js.map} +1 -1
  158. package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js → braces-BPgtyjsG.js} +2 -2
  159. package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js.map → braces-BPgtyjsG.js.map} +1 -1
  160. package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js → circle-stop-Dix1AOmw.js} +2 -2
  161. package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js.map → circle-stop-Dix1AOmw.js.map} +1 -1
  162. package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js → cpu-CCQ4Q0Zh.js} +2 -2
  163. package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js.map → cpu-CCQ4Q0Zh.js.map} +1 -1
  164. package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js → ellipsis-vertical-BpTysg-Y.js} +2 -2
  165. package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js.map → ellipsis-vertical-BpTysg-Y.js.map} +1 -1
  166. package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js → eye-DGY1rAZs.js} +2 -2
  167. package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js.map → eye-DGY1rAZs.js.map} +1 -1
  168. package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js → eye-off-D8t3JfWG.js} +2 -2
  169. package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js.map → eye-off-D8t3JfWG.js.map} +1 -1
  170. package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js → file-json-BAdJb0n8.js} +2 -2
  171. package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js.map → file-json-BAdJb0n8.js.map} +1 -1
  172. package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js → file-text-DrJFiOUB.js} +2 -2
  173. package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js.map → file-text-DrJFiOUB.js.map} +1 -1
  174. package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js → filter-CKqzYbz7.js} +2 -2
  175. package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js.map → filter-CKqzYbz7.js.map} +1 -1
  176. package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js → folder-CV8511y9.js} +2 -2
  177. package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js.map → folder-CV8511y9.js.map} +1 -1
  178. package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js → gauge-XKvmu_uU.js} +2 -2
  179. package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js.map → gauge-XKvmu_uU.js.map} +1 -1
  180. package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js → globe-C56cDUzX.js} +2 -2
  181. package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js.map → globe-C56cDUzX.js.map} +1 -1
  182. package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js → grid-3x3-Bya-suFW.js} +2 -2
  183. package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js.map → grid-3x3-Bya-suFW.js.map} +1 -1
  184. package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js → hard-drive-CmuTZpsB.js} +2 -2
  185. package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js.map → hard-drive-CmuTZpsB.js.map} +1 -1
  186. package/ccw/frontend/dist/assets/{hash-Bd1RD285.js → hash-CRPT_tJQ.js} +2 -2
  187. package/ccw/frontend/dist/assets/{hash-Bd1RD285.js.map → hash-CRPT_tJQ.js.map} +1 -1
  188. package/ccw/frontend/dist/assets/{history-eyyCQA6b.js → history-C1pJZQCL.js} +2 -2
  189. package/ccw/frontend/dist/assets/{history-eyyCQA6b.js.map → history-C1pJZQCL.js.map} +1 -1
  190. package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js → index-B6TpijCe.js} +2 -2
  191. package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js.map → index-B6TpijCe.js.map} +1 -1
  192. package/ccw/frontend/dist/assets/{index-b2C0iFd1.js → index-Bcq-7r6F.js} +2 -2
  193. package/ccw/frontend/dist/assets/{index-b2C0iFd1.js.map → index-Bcq-7r6F.js.map} +1 -1
  194. package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js → index-CI8-rBff.js} +2 -2
  195. package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js.map → index-CI8-rBff.js.map} +1 -1
  196. package/ccw/frontend/dist/assets/{index-CY6Lueph.js → index-Dmt9OiEf.js} +2 -2
  197. package/ccw/frontend/dist/assets/{index-CY6Lueph.js.map → index-Dmt9OiEf.js.map} +1 -1
  198. package/ccw/frontend/dist/assets/{index-DfeBbFXo.js → index-anSMmEF8.js} +2 -2
  199. package/ccw/frontend/dist/assets/{index-DfeBbFXo.js.map → index-anSMmEF8.js.map} +1 -1
  200. package/ccw/frontend/dist/assets/{index-B6I7GQC5.js → index-dWT2M6Ef.js} +4 -4
  201. package/ccw/frontend/dist/assets/{index-B6I7GQC5.js.map → index-dWT2M6Ef.js.map} +1 -1
  202. package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js → layout-grid-TSO0BFQE.js} +2 -2
  203. package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js.map → layout-grid-TSO0BFQE.js.map} +1 -1
  204. package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js → lightbulb-Caj6fIQD.js} +2 -2
  205. package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js.map → lightbulb-Caj6fIQD.js.map} +1 -1
  206. package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js → link-2-DE9lMxa-.js} +2 -2
  207. package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js.map → link-2-DE9lMxa-.js.map} +1 -1
  208. package/ccw/frontend/dist/assets/{link-CL4JmoHb.js → link-BZtPgLW0.js} +2 -2
  209. package/ccw/frontend/dist/assets/{link-CL4JmoHb.js.map → link-BZtPgLW0.js.map} +1 -1
  210. package/ccw/frontend/dist/assets/{list-CDmYFcio.js → list-DubWyY-U.js} +2 -2
  211. package/ccw/frontend/dist/assets/{list-CDmYFcio.js.map → list-DubWyY-U.js.map} +1 -1
  212. package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js → map-pin-DwN_48AF.js} +2 -2
  213. package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js.map → map-pin-DwN_48AF.js.map} +1 -1
  214. package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js → messages-square-bjxvaiM9.js} +2 -2
  215. package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js.map → messages-square-bjxvaiM9.js.map} +1 -1
  216. package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js → minimize-2-CGfBKD_V.js} +2 -2
  217. package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js.map → minimize-2-CGfBKD_V.js.map} +1 -1
  218. package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js → package-nzWY6ilt.js} +2 -2
  219. package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js.map → package-nzWY6ilt.js.map} +1 -1
  220. package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js → plug-CiLce49C.js} +2 -2
  221. package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js.map → plug-CiLce49C.js.map} +1 -1
  222. package/ccw/frontend/dist/assets/{power-DmIojFl-.js → power-CFLmB-U9.js} +2 -2
  223. package/ccw/frontend/dist/assets/{power-DmIojFl-.js.map → power-CFLmB-U9.js.map} +1 -1
  224. package/ccw/frontend/dist/assets/{save-BFa03OnG.js → save-DuO6OF0C.js} +2 -2
  225. package/ccw/frontend/dist/assets/{save-BFa03OnG.js.map → save-DuO6OF0C.js.map} +1 -1
  226. package/ccw/frontend/dist/assets/{send-Vet3sN4J.js → send-CZk9p0mM.js} +2 -2
  227. package/ccw/frontend/dist/assets/{send-Vet3sN4J.js.map → send-CZk9p0mM.js.map} +1 -1
  228. package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js → square-check-big-BY_1YQQg.js} +2 -2
  229. package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js.map → square-check-big-BY_1YQQg.js.map} +1 -1
  230. package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js → square-pen-CnZgm6g-.js} +2 -2
  231. package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js.map → square-pen-CnZgm6g-.js.map} +1 -1
  232. package/ccw/frontend/dist/assets/{star-BCQHcnSe.js → star-Cn1F0qy7.js} +2 -2
  233. package/ccw/frontend/dist/assets/{star-BCQHcnSe.js.map → star-Cn1F0qy7.js.map} +1 -1
  234. package/ccw/frontend/dist/assets/{style-CJsrp48L.js → style-Dxs1iXCV.js} +2 -2
  235. package/ccw/frontend/dist/assets/{style-CJsrp48L.js.map → style-Dxs1iXCV.js.map} +1 -1
  236. package/ccw/frontend/dist/assets/{target-CBzCJCB1.js → target-Bz1fLRKH.js} +2 -2
  237. package/ccw/frontend/dist/assets/{target-CBzCJCB1.js.map → target-Bz1fLRKH.js.map} +1 -1
  238. package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js → test-tube-C6qCYlDr.js} +2 -2
  239. package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js.map → test-tube-C6qCYlDr.js.map} +1 -1
  240. package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js → upload-C71kd4Qs.js} +2 -2
  241. package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js.map → upload-C71kd4Qs.js.map} +1 -1
  242. package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js → useApiSettings-CqP2BAJ7.js} +2 -2
  243. package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js.map → useApiSettings-CqP2BAJ7.js.map} +1 -1
  244. package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js → useCli-PCoPoVeM.js} +2 -2
  245. package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js.map → useCli-PCoPoVeM.js.map} +1 -1
  246. package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js → useCommands-3OfPQPw4.js} +2 -2
  247. package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js.map → useCommands-3OfPQPw4.js.map} +1 -1
  248. package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js → useDebounce-bXiFhQx9.js} +2 -2
  249. package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js.map → useDebounce-bXiFhQx9.js.map} +1 -1
  250. package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js → useFileExplorer-DEyUm46_.js} +2 -2
  251. package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js.map → useFileExplorer-DEyUm46_.js.map} +1 -1
  252. package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js → useLocale-sXTrdxcJ.js} +2 -2
  253. package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js.map → useLocale-sXTrdxcJ.js.map} +1 -1
  254. package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js → useSkills-D0W0kXYm.js} +3 -3
  255. package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js.map → useSkills-D0W0kXYm.js.map} +1 -1
  256. package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js → useSystemSettings-DZ-8lZsG.js} +2 -2
  257. package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js.map → useSystemSettings-DZ-8lZsG.js.map} +1 -1
  258. package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js → wand-sparkles-83GmAYuw.js} +2 -2
  259. package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js.map → wand-sparkles-83GmAYuw.js.map} +1 -1
  260. package/ccw/frontend/dist/index.html +1 -1
  261. package/package.json +1 -1
  262. package/.claude/skills/team-arch-opt/role-specs/analyzer.md +0 -80
  263. package/.claude/skills/team-arch-opt/role-specs/designer.md +0 -118
  264. package/.claude/skills/team-arch-opt/role-specs/refactorer.md +0 -106
  265. package/.claude/skills/team-arch-opt/role-specs/reviewer.md +0 -116
  266. package/.claude/skills/team-arch-opt/role-specs/validator.md +0 -117
  267. package/.claude/skills/team-brainstorm/role-specs/challenger.md +0 -63
  268. package/.claude/skills/team-brainstorm/role-specs/evaluator.md +0 -58
  269. package/.claude/skills/team-brainstorm/role-specs/ideator.md +0 -71
  270. package/.claude/skills/team-brainstorm/role-specs/synthesizer.md +0 -59
  271. package/.claude/skills/team-frontend/role-specs/analyst.md +0 -91
  272. package/.claude/skills/team-frontend/role-specs/architect.md +0 -85
  273. package/.claude/skills/team-frontend/role-specs/developer.md +0 -92
  274. package/.claude/skills/team-frontend/role-specs/qa.md +0 -78
  275. package/.claude/skills/team-issue/role-specs/explorer.md +0 -95
  276. package/.claude/skills/team-issue/role-specs/implementer.md +0 -89
  277. package/.claude/skills/team-issue/role-specs/integrator.md +0 -86
  278. package/.claude/skills/team-issue/role-specs/planner.md +0 -83
  279. package/.claude/skills/team-issue/role-specs/reviewer.md +0 -89
  280. package/.claude/skills/team-iterdev/role-specs/architect.md +0 -64
  281. package/.claude/skills/team-iterdev/role-specs/developer.md +0 -73
  282. package/.claude/skills/team-iterdev/role-specs/reviewer.md +0 -65
  283. package/.claude/skills/team-iterdev/role-specs/tester.md +0 -87
  284. package/.claude/skills/team-perf-opt/role-specs/benchmarker.md +0 -110
  285. package/.claude/skills/team-perf-opt/role-specs/optimizer.md +0 -102
  286. package/.claude/skills/team-perf-opt/role-specs/profiler.md +0 -73
  287. package/.claude/skills/team-perf-opt/role-specs/reviewer.md +0 -91
  288. package/.claude/skills/team-perf-opt/role-specs/strategist.md +0 -114
  289. package/.claude/skills/team-planex/role-specs/executor.md +0 -90
  290. package/.claude/skills/team-planex/role-specs/planner.md +0 -110
  291. package/.claude/skills/team-quality-assurance/role-specs/analyst.md +0 -79
  292. package/.claude/skills/team-quality-assurance/role-specs/executor.md +0 -64
  293. package/.claude/skills/team-quality-assurance/role-specs/generator.md +0 -67
  294. package/.claude/skills/team-quality-assurance/role-specs/scout.md +0 -66
  295. package/.claude/skills/team-quality-assurance/role-specs/strategist.md +0 -70
  296. package/.claude/skills/team-review/role-specs/fixer.md +0 -75
  297. package/.claude/skills/team-review/role-specs/reviewer.md +0 -66
  298. package/.claude/skills/team-review/role-specs/scanner.md +0 -70
  299. package/.claude/skills/team-roadmap-dev/role-specs/executor.md +0 -71
  300. package/.claude/skills/team-roadmap-dev/role-specs/planner.md +0 -77
  301. package/.claude/skills/team-roadmap-dev/role-specs/verifier.md +0 -73
  302. package/.claude/skills/team-tech-debt/role-specs/assessor.md +0 -70
  303. package/.claude/skills/team-tech-debt/role-specs/executor.md +0 -80
  304. package/.claude/skills/team-tech-debt/role-specs/planner.md +0 -71
  305. package/.claude/skills/team-tech-debt/role-specs/scanner.md +0 -85
  306. package/.claude/skills/team-tech-debt/role-specs/validator.md +0 -83
  307. package/.claude/skills/team-testing/role-specs/analyst.md +0 -94
  308. package/.claude/skills/team-testing/role-specs/executor.md +0 -97
  309. package/.claude/skills/team-testing/role-specs/generator.md +0 -96
  310. package/.claude/skills/team-testing/role-specs/strategist.md +0 -82
  311. package/.claude/skills/team-uidesign/role-specs/designer.md +0 -72
  312. package/.claude/skills/team-uidesign/role-specs/implementer.md +0 -74
  313. package/.claude/skills/team-uidesign/role-specs/researcher.md +0 -84
  314. package/.claude/skills/team-uidesign/role-specs/reviewer.md +0 -70
  315. package/.claude/skills/team-ux-improve/role-specs/designer.md +0 -191
  316. package/.claude/skills/team-ux-improve/role-specs/diagnoser.md +0 -110
  317. package/.claude/skills/team-ux-improve/role-specs/explorer.md +0 -109
  318. package/.claude/skills/team-ux-improve/role-specs/implementer.md +0 -164
  319. package/.claude/skills/team-ux-improve/role-specs/scanner.md +0 -117
  320. package/.claude/skills/team-ux-improve/role-specs/tester.md +0 -163
  321. package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js +0 -2
  322. package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js.map +0 -1
@@ -0,0 +1,197 @@
1
+ # Phase 2: Execute Step
2
+
3
+ > **COMPACT SENTINEL [Phase 2: Execute Step]**
4
+ > This phase contains 4 execution steps (Step 2.1 -- 2.4).
5
+ > If you can read this sentinel but cannot find the full Step protocol below, context has been compressed.
6
+ > Recovery: `Read("phases/02-step-execute.md")`
7
+
8
+ Execute a single workflow step and collect its output artifacts.
9
+
10
+ ## Objective
11
+
12
+ - Determine step execution method (skill invoke / ccw cli / shell command)
13
+ - Execute step with appropriate tool
14
+ - Collect output artifacts into step directory
15
+ - Write artifacts manifest
16
+
17
+ ## Execution
18
+
19
+ ### Step 2.1: Prepare Step Directory
20
+
21
+ ```javascript
22
+ const stepIdx = currentStepIndex; // from orchestrator loop
23
+ const step = state.steps[stepIdx];
24
+ const stepDir = `${state.work_dir}/steps/step-${stepIdx + 1}`;
25
+ const artifactsDir = `${stepDir}/artifacts`;
26
+
27
+ // Capture pre-execution state (git status, file timestamps)
28
+ const preGitStatus = Bash('git status --porcelain 2>/dev/null || echo "not a git repo"').stdout;
29
+
30
+ // ★ Warn if dirty git working directory (first step only)
31
+ if (stepIdx === 0 && preGitStatus.trim() && preGitStatus.trim() !== 'not a git repo') {
32
+ const dirtyLines = preGitStatus.trim().split('\n').length;
33
+ // Log warning — artifact collection via git diff may be unreliable
34
+ // This is informational; does not block execution
35
+ console.warn(`⚠ Dirty git working directory detected (${dirtyLines} changed files). Artifact collection via git diff may include pre-existing changes.`);
36
+ }
37
+
38
+ const preExecSnapshot = {
39
+ timestamp: new Date().toISOString(),
40
+ git_status: preGitStatus,
41
+ working_files: Glob('**/*.{ts,js,md,json}').slice(0, 50) // sample
42
+ };
43
+ Write(`${stepDir}/pre-exec-snapshot.json`, JSON.stringify(preExecSnapshot, null, 2));
44
+ ```
45
+
46
+ ### Step 2.2: Execute by Step Type
47
+
48
+ ```javascript
49
+ let executionResult = { success: false, method: '', output: '', duration: 0 };
50
+ const startTime = Date.now();
51
+
52
+ switch (step.type) {
53
+ case 'skill': {
54
+ // Skill invocation — use Skill tool
55
+ // Extract skill name and arguments from command
56
+ const skillCmd = step.command.replace(/^\//, '');
57
+ const [skillName, ...skillArgs] = skillCmd.split(/\s+/);
58
+
59
+ // Execute skill (this runs synchronously within current context)
60
+ // Note: Skill execution produces artifacts in the working directory
61
+ // We capture changes by comparing pre/post state
62
+ Skill({
63
+ name: skillName,
64
+ arguments: skillArgs.join(' ')
65
+ });
66
+
67
+ executionResult.method = 'skill';
68
+ executionResult.success = true;
69
+ break;
70
+ }
71
+
72
+ case 'ccw-cli': {
73
+ // Direct ccw cli command
74
+ const cliCommand = step.command;
75
+
76
+ Bash({
77
+ command: cliCommand,
78
+ run_in_background: true,
79
+ timeout: 600000 // 10 minutes
80
+ });
81
+
82
+ // STOP — wait for hook callback
83
+ // After callback:
84
+ executionResult.method = 'ccw-cli';
85
+ executionResult.success = true;
86
+ break;
87
+ }
88
+
89
+ case 'command': {
90
+ // Generic shell command
91
+ const result = Bash({
92
+ command: step.command,
93
+ timeout: 300000 // 5 minutes
94
+ });
95
+
96
+ executionResult.method = 'command';
97
+ executionResult.output = result.stdout || '';
98
+ executionResult.success = result.exitCode === 0;
99
+
100
+ // Save command output
101
+ if (executionResult.output) {
102
+ Write(`${artifactsDir}/command-output.txt`, executionResult.output);
103
+ }
104
+ if (result.stderr) {
105
+ Write(`${artifactsDir}/command-stderr.txt`, result.stderr);
106
+ }
107
+ break;
108
+ }
109
+ }
110
+
111
+ executionResult.duration = Date.now() - startTime;
112
+ ```
113
+
114
+ ### Step 2.3: Collect Artifacts
115
+
116
+ ```javascript
117
+ // Capture post-execution state
118
+ const postExecSnapshot = {
119
+ timestamp: new Date().toISOString(),
120
+ git_status: Bash('git status --porcelain 2>/dev/null || echo "not a git repo"').stdout,
121
+ working_files: Glob('**/*.{ts,js,md,json}').slice(0, 50)
122
+ };
123
+
124
+ // Detect changed/new files by comparing snapshots
125
+ const preFiles = new Set(preExecSnapshot.working_files);
126
+ const newOrChanged = postExecSnapshot.working_files.filter(f => !preFiles.has(f));
127
+
128
+ // Also check git diff for modified files
129
+ const gitDiff = Bash('git diff --name-only 2>/dev/null || true').stdout.trim().split('\n').filter(Boolean);
130
+
131
+ // Collect all artifacts (new files + git-changed files + declared expected_artifacts)
132
+ const declaredArtifacts = (step.expected_artifacts || []).filter(f => {
133
+ // Verify declared artifacts actually exist
134
+ const exists = Glob(f);
135
+ return exists.length > 0;
136
+ }).flatMap(f => Glob(f));
137
+
138
+ const allArtifacts = [...new Set([...newOrChanged, ...gitDiff, ...declaredArtifacts])];
139
+
140
+ // Copy detected artifacts to step artifacts dir (or record references)
141
+ const artifactManifest = {
142
+ step: step.name,
143
+ step_index: stepIdx,
144
+ execution_method: executionResult.method,
145
+ success: executionResult.success,
146
+ duration_ms: executionResult.duration,
147
+ artifacts: allArtifacts.map(f => ({
148
+ path: f,
149
+ type: f.endsWith('.md') ? 'markdown' : f.endsWith('.json') ? 'json' : 'other',
150
+ size: 'unknown' // Can be filled by stat if needed
151
+ })),
152
+ // For skill type: also check .workflow/.scratchpad for generated files
153
+ scratchpad_files: step.type === 'skill'
154
+ ? Glob('.workflow/.scratchpad/**/*').filter(f => {
155
+ // Only include files created after step started
156
+ return true; // Heuristic: include recent scratchpad files
157
+ }).slice(0, 20)
158
+ : [],
159
+ collected_at: new Date().toISOString()
160
+ };
161
+
162
+ Write(`${stepDir}/artifacts-manifest.json`, JSON.stringify(artifactManifest, null, 2));
163
+ ```
164
+
165
+ ### Step 2.4: Update State
166
+
167
+ ```javascript
168
+ state.steps[stepIdx].status = 'executed';
169
+ state.steps[stepIdx].execution = {
170
+ method: executionResult.method,
171
+ success: executionResult.success,
172
+ duration_ms: executionResult.duration,
173
+ artifacts_dir: artifactsDir,
174
+ manifest_path: `${stepDir}/artifacts-manifest.json`,
175
+ artifact_count: artifactManifest.artifacts.length,
176
+ started_at: preExecSnapshot.timestamp,
177
+ completed_at: new Date().toISOString()
178
+ };
179
+
180
+ state.updated_at = new Date().toISOString();
181
+ Write(`${state.work_dir}/workflow-state.json`, JSON.stringify(state, null, 2));
182
+ ```
183
+
184
+ ## Error Handling
185
+
186
+ | Error | Recovery |
187
+ |-------|----------|
188
+ | Skill not found | Record failure, set success=false, continue to Phase 3 |
189
+ | CLI timeout (10min) | Retry once with shorter timeout, then record failure |
190
+ | Command exit non-zero | Record stderr, set success=false, continue to Phase 3 |
191
+ | No artifacts detected | Continue to Phase 3 — analysis evaluates step definition quality |
192
+
193
+ ## Output
194
+
195
+ - **Files**: `pre-exec-snapshot.json`, `artifacts-manifest.json`, `artifacts/` (if command type)
196
+ - **State**: `steps[stepIdx].execution` updated
197
+ - **Next**: Phase 3 (Analyze Step)
@@ -0,0 +1,386 @@
1
+ # Phase 3: Analyze Step
2
+
3
+ > **COMPACT SENTINEL [Phase 3: Analyze Step]**
4
+ > This phase contains 5 execution steps (Step 3.1 -- 3.5).
5
+ > If you can read this sentinel but cannot find the full Step protocol below, context has been compressed.
6
+ > Recovery: `Read("phases/03-step-analyze.md")`
7
+
8
+ Analyze a completed step's artifacts and quality using `ccw cli --tool gemini --mode analysis`. Uses `--resume` to maintain context across step analyses, building a continuous analysis chain.
9
+
10
+ ## Objective
11
+
12
+ - Inspect step artifacts (file list, content, quality signals)
13
+ - Build analysis prompt with step context + prior process log
14
+ - Execute via ccw cli Gemini with resume chain
15
+ - Parse analysis results → write step-{N}-analysis.md
16
+ - Append findings to process-log.md
17
+ - Return updated session ID for resume chain
18
+
19
+ ## Execution
20
+
21
+ ### Step 3.1: Inspect Artifacts
22
+
23
+ ```javascript
24
+ const stepIdx = currentStepIndex;
25
+ const step = state.steps[stepIdx];
26
+ const stepDir = `${state.work_dir}/steps/step-${stepIdx + 1}`;
27
+
28
+ // Read artifacts manifest
29
+ const manifest = JSON.parse(Read(`${stepDir}/artifacts-manifest.json`));
30
+
31
+ // Build artifact summary based on analysis depth
32
+ let artifactSummary = '';
33
+
34
+ if (state.analysis_depth === 'quick') {
35
+ // Quick: just file list and sizes
36
+ artifactSummary = `Artifacts (${manifest.artifacts.length} files):\n` +
37
+ manifest.artifacts.map(a => `- ${a.path} (${a.type})`).join('\n');
38
+ } else {
39
+ // Standard/Deep: include file content summaries
40
+ artifactSummary = manifest.artifacts.map(a => {
41
+ const maxLines = state.analysis_depth === 'deep' ? 300 : 150;
42
+ try {
43
+ const content = Read(a.path, { limit: maxLines });
44
+ return `--- ${a.path} (${a.type}) ---\n${content}`;
45
+ } catch {
46
+ return `--- ${a.path} --- [unreadable]`;
47
+ }
48
+ }).join('\n\n');
49
+
50
+ // Deep: also include scratchpad files
51
+ if (state.analysis_depth === 'deep' && manifest.scratchpad_files?.length > 0) {
52
+ artifactSummary += '\n\n--- Scratchpad Files ---\n' +
53
+ manifest.scratchpad_files.slice(0, 5).map(f => {
54
+ const content = Read(f, { limit: 100 });
55
+ return `--- ${f} ---\n${content}`;
56
+ }).join('\n\n');
57
+ }
58
+ }
59
+
60
+ // Execution result summary
61
+ const execSummary = `Execution: ${step.execution.method} | ` +
62
+ `Success: ${step.execution.success} | ` +
63
+ `Duration: ${step.execution.duration_ms}ms | ` +
64
+ `Artifacts: ${manifest.artifacts.length} files`;
65
+ ```
66
+
67
+ ### Step 3.2: Build Prior Context
68
+
69
+ ```javascript
70
+ // Build accumulated process log context for this analysis
71
+ const priorProcessLog = Read(`${state.work_dir}/process-log.md`);
72
+
73
+ // Build step chain context (what came before, what comes after)
74
+ const stepChainContext = state.steps.map((s, i) => {
75
+ const status = i < stepIdx ? 'completed' : i === stepIdx ? 'CURRENT' : 'pending';
76
+ const score = s.analysis?.quality_score || '-';
77
+ return `${i + 1}. [${status}] ${s.name} (${s.type}) — Quality: ${score}`;
78
+ }).join('\n');
79
+
80
+ // Previous step handoff context (if not first step)
81
+ let handoffContext = '';
82
+ if (stepIdx > 0) {
83
+ const prevStep = state.steps[stepIdx - 1];
84
+ const prevAnalysis = prevStep.analysis;
85
+ if (prevAnalysis) {
86
+ handoffContext = `PREVIOUS STEP OUTPUT SUMMARY:
87
+ Step "${prevStep.name}" produced ${prevStep.execution?.artifact_count || 0} artifacts.
88
+ Quality: ${prevAnalysis.quality_score}/100
89
+ Key outputs: ${prevAnalysis.key_outputs?.join(', ') || 'unknown'}
90
+ Handoff notes: ${prevAnalysis.handoff_notes || 'none'}`;
91
+ }
92
+ }
93
+ ```
94
+
95
+ ### Step 3.3: Construct Analysis Prompt
96
+
97
+ ```javascript
98
+ // Ref: templates/step-analysis-prompt.md
99
+
100
+ const depthInstructions = {
101
+ quick: 'Provide brief assessment (3-5 bullet points). Focus on: execution success, output completeness, obvious issues.',
102
+ standard: 'Provide detailed assessment. Cover: execution quality, output completeness, artifact quality, step-to-step handoff readiness, potential issues.',
103
+ deep: 'Provide exhaustive assessment. Cover: execution quality, output completeness and correctness, artifact quality and structure, step-to-step handoff integrity, error handling, performance signals, architecture implications, edge cases.'
104
+ };
105
+
106
+ // ★ Build test requirements section (the evaluation baseline)
107
+ const testReqs = step.test_requirements;
108
+ let testReqSection = '';
109
+ if (testReqs) {
110
+ testReqSection = `
111
+ TEST REQUIREMENTS (Acceptance Criteria — use these as the PRIMARY evaluation baseline):
112
+ Pass Criteria: ${testReqs.pass_criteria}
113
+ Expected Outputs: ${(testReqs.expected_outputs || []).join(', ') || 'not specified'}
114
+ Content Signals (patterns that indicate success): ${(testReqs.content_signals || []).join(', ') || 'not specified'}
115
+ Quality Thresholds: ${(testReqs.quality_thresholds || []).join(', ') || 'not specified'}
116
+ Fail Signals (patterns that indicate failure): ${(testReqs.fail_signals || []).join(', ') || 'not specified'}
117
+ Handoff Contract (what next step needs): ${testReqs.handoff_contract || 'not specified'}
118
+
119
+ IMPORTANT: Score quality_score based on how well the actual output matches these test requirements.
120
+ - 90-100: All pass_criteria met, all expected_outputs present, content_signals found, no fail_signals
121
+ - 70-89: Most criteria met, minor gaps
122
+ - 50-69: Partial match, significant gaps
123
+ - 0-49: Fail — fail_signals present or pass_criteria not met`;
124
+ } else {
125
+ testReqSection = `
126
+ NOTE: No pre-generated test requirements for this step. Evaluate based on general quality signals and workflow context.`;
127
+ }
128
+
129
+ const analysisPrompt = `PURPOSE: Evaluate workflow step "${step.name}" (step ${stepIdx + 1}/${state.steps.length}) against its acceptance criteria. Judge whether the command execution met the pre-defined test requirements.
130
+
131
+ WORKFLOW CONTEXT:
132
+ Name: ${state.workflow_name}
133
+ Goal: ${state.workflow_context}
134
+ Step Chain:
135
+ ${stepChainContext}
136
+
137
+ CURRENT STEP:
138
+ Name: ${step.name}
139
+ Type: ${step.type}
140
+ Command: ${step.command}
141
+ ${step.success_criteria ? `Success Criteria: ${step.success_criteria}` : ''}
142
+ ${testReqSection}
143
+
144
+ EXECUTION RESULT:
145
+ ${execSummary}
146
+
147
+ ${handoffContext}
148
+
149
+ STEP ARTIFACTS:
150
+ ${artifactSummary}
151
+
152
+ ANALYSIS DEPTH: ${state.analysis_depth}
153
+ ${depthInstructions[state.analysis_depth]}
154
+
155
+ TASK:
156
+ 1. **Requirement Matching**: Compare actual output against test requirements (pass_criteria, expected_outputs, content_signals)
157
+ 2. **Fail Signal Detection**: Check for any fail_signals in the output
158
+ 3. **Handoff Contract Verification**: Does the output satisfy handoff_contract for the next step?
159
+ 4. **Gap Analysis**: What's missing between actual output and requirements?
160
+ 5. **Quality Score**: Rate 0-100 based on requirement fulfillment (NOT general quality)
161
+
162
+ EXPECTED OUTPUT (strict JSON, no markdown):
163
+ {
164
+ "quality_score": <0-100>,
165
+ "requirement_match": {
166
+ "pass": <true|false>,
167
+ "criteria_met": ["<which pass_criteria were satisfied>"],
168
+ "criteria_missed": ["<which pass_criteria were NOT satisfied>"],
169
+ "expected_outputs_found": ["<expected files that exist>"],
170
+ "expected_outputs_missing": ["<expected files that are absent>"],
171
+ "content_signals_found": ["<success patterns detected in output>"],
172
+ "content_signals_missing": ["<success patterns NOT found>"],
173
+ "fail_signals_detected": ["<failure patterns found, if any>"]
174
+ },
175
+ "execution_assessment": {
176
+ "success": <true|false>,
177
+ "completeness": "<complete|partial|failed>",
178
+ "notes": "<brief assessment>"
179
+ },
180
+ "artifact_assessment": {
181
+ "count": <number>,
182
+ "quality": "<high|medium|low>",
183
+ "key_outputs": ["<main output 1>", "<main output 2>"],
184
+ "missing_outputs": ["<expected but missing>"]
185
+ },
186
+ "handoff_assessment": {
187
+ "ready": <true|false>,
188
+ "contract_satisfied": <true|false|null>,
189
+ "next_step_compatible": <true|false|null>,
190
+ "handoff_notes": "<what next step should know>"
191
+ },
192
+ "issues": [
193
+ { "severity": "high|medium|low", "description": "<issue>", "suggestion": "<fix>" }
194
+ ],
195
+ "optimization_opportunities": [
196
+ { "area": "<area>", "description": "<opportunity>", "impact": "high|medium|low" }
197
+ ],
198
+ "step_summary": "<1-2 sentence summary for process log>"
199
+ }
200
+
201
+ CONSTRAINTS: Be specific, reference artifact content where possible, score against requirements not general quality, output ONLY JSON`;
202
+ ```
203
+
204
+ ### Step 3.4: Execute via ccw cli Gemini with Resume
205
+
206
+ ```javascript
207
+ function escapeForShell(str) {
208
+ return str.replace(/"/g, '\\"').replace(/\$/g, '\\$').replace(/`/g, '\\`');
209
+ }
210
+
211
+ // Build CLI command with optional resume
212
+ let cliCommand = `ccw cli -p "${escapeForShell(analysisPrompt)}" --tool gemini --mode analysis`;
213
+
214
+ // Resume from previous step's analysis session (maintains context chain)
215
+ if (state.analysis_session_id) {
216
+ cliCommand += ` --resume ${state.analysis_session_id}`;
217
+ }
218
+
219
+ Bash({
220
+ command: cliCommand,
221
+ run_in_background: true,
222
+ timeout: 300000 // 5 minutes
223
+ });
224
+
225
+ // STOP — wait for hook callback
226
+ ```
227
+
228
+ ### Step 3.5: Parse Results and Update Process Log
229
+
230
+ After CLI completes:
231
+
232
+ ```javascript
233
+ const rawOutput = /* CLI output from callback */;
234
+
235
+ // Extract session ID from CLI output for resume chain
236
+ const sessionIdMatch = rawOutput.match(/\[CCW_EXEC_ID=([^\]]+)\]/);
237
+ if (sessionIdMatch) {
238
+ state.analysis_session_id = sessionIdMatch[1];
239
+ }
240
+
241
+ // Parse JSON
242
+ const jsonMatch = rawOutput.match(/\{[\s\S]*\}/);
243
+ let analysis;
244
+
245
+ if (jsonMatch) {
246
+ try {
247
+ analysis = JSON.parse(jsonMatch[0]);
248
+ } catch (e) {
249
+ // Fallback: extract score heuristically
250
+ const scoreMatch = rawOutput.match(/"quality_score"\s*:\s*(\d+)/);
251
+ analysis = {
252
+ quality_score: scoreMatch ? parseInt(scoreMatch[1]) : 50,
253
+ execution_assessment: { success: step.execution.success, completeness: 'unknown', notes: 'Parse failed' },
254
+ artifact_assessment: { count: manifest.artifacts.length, quality: 'unknown', key_outputs: [], missing_outputs: [] },
255
+ handoff_assessment: { ready: true, next_step_compatible: null, handoff_notes: '' },
256
+ issues: [{ severity: 'low', description: 'Analysis output parsing failed', suggestion: 'Review raw output' }],
257
+ optimization_opportunities: [],
258
+ step_summary: 'Analysis parsing failed — raw output saved for manual review'
259
+ };
260
+ }
261
+ } else {
262
+ analysis = {
263
+ quality_score: 50,
264
+ step_summary: 'No structured analysis output received'
265
+ };
266
+ }
267
+
268
+ // Write step analysis file
269
+ const reqMatch = analysis.requirement_match;
270
+ const reqMatchSection = reqMatch ? `
271
+ ## Requirement Match — ${reqMatch.pass ? 'PASS ✓' : 'FAIL ✗'}
272
+
273
+ ### Criteria Met
274
+ ${(reqMatch.criteria_met || []).map(c => `- ✓ ${c}`).join('\n') || '- None'}
275
+
276
+ ### Criteria Missed
277
+ ${(reqMatch.criteria_missed || []).map(c => `- ✗ ${c}`).join('\n') || '- None'}
278
+
279
+ ### Expected Outputs
280
+ - Found: ${(reqMatch.expected_outputs_found || []).join(', ') || 'None'}
281
+ - Missing: ${(reqMatch.expected_outputs_missing || []).join(', ') || 'None'}
282
+
283
+ ### Content Signals
284
+ - Detected: ${(reqMatch.content_signals_found || []).join(', ') || 'None'}
285
+ - Missing: ${(reqMatch.content_signals_missing || []).join(', ') || 'None'}
286
+
287
+ ### Fail Signals
288
+ ${(reqMatch.fail_signals_detected || []).length > 0
289
+ ? (reqMatch.fail_signals_detected || []).map(f => `- ⚠ ${f}`).join('\n')
290
+ : '- None detected'}
291
+ ` : '';
292
+
293
+ const stepAnalysisReport = `# Step ${stepIdx + 1} Analysis: ${step.name}
294
+
295
+ **Quality Score**: ${analysis.quality_score}/100
296
+ **Requirement Match**: ${reqMatch ? (reqMatch.pass ? 'PASS' : 'FAIL') : 'N/A (no test requirements)'}
297
+ **Date**: ${new Date().toISOString()}
298
+ ${reqMatchSection}
299
+ ## Execution
300
+ - Success: ${analysis.execution_assessment?.success}
301
+ - Completeness: ${analysis.execution_assessment?.completeness}
302
+ - Notes: ${analysis.execution_assessment?.notes}
303
+
304
+ ## Artifacts
305
+ - Count: ${analysis.artifact_assessment?.count}
306
+ - Quality: ${analysis.artifact_assessment?.quality}
307
+ - Key Outputs: ${analysis.artifact_assessment?.key_outputs?.join(', ') || 'N/A'}
308
+ - Missing: ${analysis.artifact_assessment?.missing_outputs?.join(', ') || 'None'}
309
+
310
+ ## Handoff Readiness
311
+ - Ready: ${analysis.handoff_assessment?.ready}
312
+ - Contract Satisfied: ${analysis.handoff_assessment?.contract_satisfied}
313
+ - Next Step Compatible: ${analysis.handoff_assessment?.next_step_compatible}
314
+ - Notes: ${analysis.handoff_assessment?.handoff_notes}
315
+
316
+ ## Issues
317
+ ${(analysis.issues || []).map(i => `- [${i.severity}] ${i.description} → ${i.suggestion}`).join('\n') || 'None'}
318
+
319
+ ## Optimization Opportunities
320
+ ${(analysis.optimization_opportunities || []).map(o => `- [${o.impact}] ${o.area}: ${o.description}`).join('\n') || 'None'}
321
+ `;
322
+
323
+ Write(`${stepDir}/step-${stepIdx + 1}-analysis.md`, stepAnalysisReport);
324
+
325
+ // Append to process log
326
+ const reqPassStr = reqMatch ? (reqMatch.pass ? 'PASS' : 'FAIL') : 'N/A';
327
+ const processLogEntry = `
328
+ ## Step ${stepIdx + 1}: ${step.name} — Score: ${analysis.quality_score}/100 | Req: ${reqPassStr}
329
+
330
+ **Command**: \`${step.command}\`
331
+ **Result**: ${analysis.execution_assessment?.completeness || 'unknown'} | ${analysis.artifact_assessment?.count || 0} artifacts
332
+ **Requirement Match**: ${reqPassStr}${reqMatch ? ` — Met: ${(reqMatch.criteria_met || []).length}, Missed: ${(reqMatch.criteria_missed || []).length}, Fail Signals: ${(reqMatch.fail_signals_detected || []).length}` : ''}
333
+ **Summary**: ${analysis.step_summary || 'No summary'}
334
+ **Issues**: ${(analysis.issues || []).filter(i => i.severity === 'high').map(i => i.description).join('; ') || 'None critical'}
335
+ **Handoff**: ${analysis.handoff_assessment?.contract_satisfied ? 'Contract satisfied' : analysis.handoff_assessment?.handoff_notes || 'Ready'}
336
+
337
+ ---
338
+ `;
339
+
340
+ // Append to process-log.md
341
+ const currentLog = Read(`${state.work_dir}/process-log.md`);
342
+ Write(`${state.work_dir}/process-log.md`, currentLog + processLogEntry);
343
+
344
+ // Update state
345
+ state.steps[stepIdx].analysis = {
346
+ quality_score: analysis.quality_score,
347
+ requirement_pass: reqMatch?.pass ?? null,
348
+ criteria_met_count: (reqMatch?.criteria_met || []).length,
349
+ criteria_missed_count: (reqMatch?.criteria_missed || []).length,
350
+ fail_signals_count: (reqMatch?.fail_signals_detected || []).length,
351
+ key_outputs: analysis.artifact_assessment?.key_outputs || [],
352
+ handoff_notes: analysis.handoff_assessment?.handoff_notes || '',
353
+ contract_satisfied: analysis.handoff_assessment?.contract_satisfied ?? null,
354
+ issue_count: (analysis.issues || []).length,
355
+ high_issues: (analysis.issues || []).filter(i => i.severity === 'high').length,
356
+ optimization_count: (analysis.optimization_opportunities || []).length,
357
+ analysis_file: `${stepDir}/step-${stepIdx + 1}-analysis.md`
358
+ };
359
+ state.steps[stepIdx].status = 'analyzed';
360
+
361
+ state.process_log_entries.push({
362
+ step_index: stepIdx,
363
+ step_name: step.name,
364
+ quality_score: analysis.quality_score,
365
+ summary: analysis.step_summary,
366
+ timestamp: new Date().toISOString()
367
+ });
368
+
369
+ state.updated_at = new Date().toISOString();
370
+ Write(`${state.work_dir}/workflow-state.json`, JSON.stringify(state, null, 2));
371
+ ```
372
+
373
+ ## Error Handling
374
+
375
+ | Error | Recovery |
376
+ |-------|----------|
377
+ | CLI timeout | Retry once without --resume (fresh session) |
378
+ | Resume session not found | Start fresh analysis session, continue |
379
+ | JSON parse fails | Extract score heuristically, save raw output |
380
+ | No output | Default score 50, minimal process log entry |
381
+
382
+ ## Output
383
+
384
+ - **Files**: `step-{N}-analysis.md`, updated `process-log.md`
385
+ - **State**: `steps[stepIdx].analysis` updated, `analysis_session_id` updated
386
+ - **Next**: Phase 2 for next step, or Phase 4 (Synthesize) if all steps done