claude-code-workflow 7.2.9 → 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 (324) 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 +64 -103
  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/roadmap-with-file/SKILL.md +11 -17
  44. package/.codex/skills/team-designer/agents/validation-reporter.md +186 -0
  45. package/.codex/skills/team-iterdev/agents/gc-controller.md +193 -0
  46. package/.codex/skills/team-iterdev/agents/task-analyzer.md +206 -0
  47. package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -0
  48. package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -0
  49. package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +182 -0
  50. package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -0
  51. package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +162 -0
  52. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +4 -0
  53. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +2 -0
  54. package/ccw/dist/commands/spec.d.ts.map +1 -1
  55. package/ccw/dist/commands/spec.js +9 -4
  56. package/ccw/dist/commands/spec.js.map +1 -1
  57. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  58. package/ccw/dist/core/routes/codexlens-routes.js +3 -1
  59. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  60. package/ccw/dist/tools/spec-index-builder.d.ts +8 -4
  61. package/ccw/dist/tools/spec-index-builder.d.ts.map +1 -1
  62. package/ccw/dist/tools/spec-index-builder.js +8 -4
  63. package/ccw/dist/tools/spec-index-builder.js.map +1 -1
  64. package/ccw/dist/tools/spec-init.d.ts +1 -1
  65. package/ccw/dist/tools/spec-init.d.ts.map +1 -1
  66. package/ccw/dist/tools/spec-init.js +127 -0
  67. package/ccw/dist/tools/spec-init.js.map +1 -1
  68. package/ccw/dist/tools/spec-loader.d.ts.map +1 -1
  69. package/ccw/dist/tools/spec-loader.js +2 -1
  70. package/ccw/dist/tools/spec-loader.js.map +1 -1
  71. package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js → AlertDialog-BW9jiZ-p.js} +2 -2
  72. package/ccw/frontend/dist/assets/{AlertDialog-gTMl4gSG.js.map → AlertDialog-BW9jiZ-p.js.map} +1 -1
  73. package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js → AnalysisPage-ds-w_nVO.js} +2 -2
  74. package/ccw/frontend/dist/assets/{AnalysisPage-Bc4p4SvJ.js.map → AnalysisPage-ds-w_nVO.js.map} +1 -1
  75. package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js → ApiSettingsPage-DlCbXxTz.js} +2 -2
  76. package/ccw/frontend/dist/assets/{ApiSettingsPage-CVK108u2.js.map → ApiSettingsPage-DlCbXxTz.js.map} +1 -1
  77. package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js → CliModeToggle-Dq3nL4fF.js} +2 -2
  78. package/ccw/frontend/dist/assets/{CliModeToggle-34Sjwl05.js.map → CliModeToggle-Dq3nL4fF.js.map} +1 -1
  79. package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js → CliSessionSharePage-BNDkEE4u.js} +2 -2
  80. package/ccw/frontend/dist/assets/{CliSessionSharePage-bJZAYI38.js.map → CliSessionSharePage-BNDkEE4u.js.map} +1 -1
  81. package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js → CliViewerPage-ChM-uNx_.js} +2 -2
  82. package/ccw/frontend/dist/assets/{CliViewerPage-VYnQGjxU.js.map → CliViewerPage-ChM-uNx_.js.map} +1 -1
  83. package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js +2 -0
  84. package/ccw/frontend/dist/assets/CodexLensPage-DOcsYNQk.js.map +1 -0
  85. package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js → Collapsible-CRNbykXN.js} +2 -2
  86. package/ccw/frontend/dist/assets/{Collapsible-B_xd1Qbg.js.map → Collapsible-CRNbykXN.js.map} +1 -1
  87. package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js → CommandsManagerPage-C2JWcemF.js} +2 -2
  88. package/ccw/frontend/dist/assets/{CommandsManagerPage-Bjx1bPbH.js.map → CommandsManagerPage-C2JWcemF.js.map} +1 -1
  89. package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js → DeepWikiPage-CvleOtJy.js} +2 -2
  90. package/ccw/frontend/dist/assets/{DeepWikiPage-EgHsHvAH.js.map → DeepWikiPage-CvleOtJy.js.map} +1 -1
  91. package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js → EndpointsPage-CMOWQG64.js} +2 -2
  92. package/ccw/frontend/dist/assets/{EndpointsPage-CuwpbCzK.js.map → EndpointsPage-CMOWQG64.js.map} +1 -1
  93. package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js → ExplorerPage-DaFPRlNo.js} +2 -2
  94. package/ccw/frontend/dist/assets/{ExplorerPage-cvlx0Zw0.js.map → ExplorerPage-DaFPRlNo.js.map} +1 -1
  95. package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js → FixSessionPage-CC4p04Az.js} +2 -2
  96. package/ccw/frontend/dist/assets/{FixSessionPage-C74-MPza.js.map → FixSessionPage-CC4p04Az.js.map} +1 -1
  97. package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js → FloatingFileBrowser-DROn1xZ5.js} +2 -2
  98. package/ccw/frontend/dist/assets/{FloatingFileBrowser-x_-6y_n2.js.map → FloatingFileBrowser-DROn1xZ5.js.map} +1 -1
  99. package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js → FloatingPanel-CmL_yhDv.js} +2 -2
  100. package/ccw/frontend/dist/assets/{FloatingPanel-BGwmbJR1.js.map → FloatingPanel-CmL_yhDv.js.map} +1 -1
  101. package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js → GraphExplorerPage-DCV5ybKE.js} +2 -2
  102. package/ccw/frontend/dist/assets/{GraphExplorerPage-Bg5-aQxi.js.map → GraphExplorerPage-DCV5ybKE.js.map} +1 -1
  103. package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js → HistoryPage-D0fYQZgc.js} +2 -2
  104. package/ccw/frontend/dist/assets/{HistoryPage-C00fh0HE.js.map → HistoryPage-D0fYQZgc.js.map} +1 -1
  105. package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js → HookManagerPage-D2FuJfsM.js} +2 -2
  106. package/ccw/frontend/dist/assets/{HookManagerPage-CtVTB_ae.js.map → HookManagerPage-D2FuJfsM.js.map} +1 -1
  107. package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js → InstallationsPage-tjklillZ.js} +2 -2
  108. package/ccw/frontend/dist/assets/{InstallationsPage-CYuMQDbC.js.map → InstallationsPage-tjklillZ.js.map} +1 -1
  109. package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js → IssueHubPage-E4JVrhO1.js} +2 -2
  110. package/ccw/frontend/dist/assets/{IssueHubPage-T_VSvUMh.js.map → IssueHubPage-E4JVrhO1.js.map} +1 -1
  111. package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js → LiteTasksPage-aJuRoyLt.js} +2 -2
  112. package/ccw/frontend/dist/assets/{LiteTasksPage-DmcgvIvi.js.map → LiteTasksPage-aJuRoyLt.js.map} +1 -1
  113. package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js → McpManagerPage-BJeuWJv1.js} +2 -2
  114. package/ccw/frontend/dist/assets/{McpManagerPage-C_a7QSKz.js.map → McpManagerPage-BJeuWJv1.js.map} +1 -1
  115. package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js → MemoryPage-BI4FAXhs.js} +2 -2
  116. package/ccw/frontend/dist/assets/{MemoryPage-CWKmXY5k.js.map → MemoryPage-BI4FAXhs.js.map} +1 -1
  117. package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js → NotFoundPage-DD2svchp.js} +2 -2
  118. package/ccw/frontend/dist/assets/{NotFoundPage-B1duXK6r.js.map → NotFoundPage-DD2svchp.js.map} +1 -1
  119. package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js → OrchestratorPage-FC__7yYa.js} +2 -2
  120. package/ccw/frontend/dist/assets/{OrchestratorPage-Ib9TM6HE.js.map → OrchestratorPage-FC__7yYa.js.map} +1 -1
  121. package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js → ProjectOverviewPage-DBB_-FzV.js} +2 -2
  122. package/ccw/frontend/dist/assets/{ProjectOverviewPage-sXSWMbF8.js.map → ProjectOverviewPage-DBB_-FzV.js.map} +1 -1
  123. package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js → PromptHistoryPage-BwOAvCH8.js} +2 -2
  124. package/ccw/frontend/dist/assets/{PromptHistoryPage-B6jaqG12.js.map → PromptHistoryPage-BwOAvCH8.js.map} +1 -1
  125. package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js → ReviewSessionPage-Dd1-g_gp.js} +2 -2
  126. package/ccw/frontend/dist/assets/{ReviewSessionPage-D5qJyr3s.js.map → ReviewSessionPage-Dd1-g_gp.js.map} +1 -1
  127. package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js → RulesManagerPage-B3RGdsKD.js} +2 -2
  128. package/ccw/frontend/dist/assets/{RulesManagerPage-DyawK8QE.js.map → RulesManagerPage-B3RGdsKD.js.map} +1 -1
  129. package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js → SessionDetailPage-DM-W5R8K.js} +2 -2
  130. package/ccw/frontend/dist/assets/{SessionDetailPage-Cym_RvC9.js.map → SessionDetailPage-DM-W5R8K.js.map} +1 -1
  131. package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js → SessionsPage-BVz1KCc7.js} +2 -2
  132. package/ccw/frontend/dist/assets/{SessionsPage-Dkc1Hv8W.js.map → SessionsPage-BVz1KCc7.js.map} +1 -1
  133. package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js → SettingsPage-ComW7EZS.js} +4 -4
  134. package/ccw/frontend/dist/assets/{SettingsPage-Rik9cUIj.js.map → SettingsPage-ComW7EZS.js.map} +1 -1
  135. package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js → SkillsManagerPage-CKom9XwV.js} +2 -2
  136. package/ccw/frontend/dist/assets/{SkillsManagerPage-BGDWYAyI.js.map → SkillsManagerPage-CKom9XwV.js.map} +1 -1
  137. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js → SpecsSettingsPage-DQz7WP2s.js} +2 -2
  138. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CTiA1DMP.js.map → SpecsSettingsPage-DQz7WP2s.js.map} +1 -1
  139. package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js → Switch-BPMdND9H.js} +2 -2
  140. package/ccw/frontend/dist/assets/{Switch-BgAFC-Wk.js.map → Switch-BPMdND9H.js.map} +1 -1
  141. package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js → TabsNavigation-qqt70VYL.js} +2 -2
  142. package/ccw/frontend/dist/assets/{TabsNavigation-drSnu5jn.js.map → TabsNavigation-qqt70VYL.js.map} +1 -1
  143. package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js → TaskDrawer-BqK_qiHX.js} +2 -2
  144. package/ccw/frontend/dist/assets/{TaskDrawer-ePC__6-P.js.map → TaskDrawer-BqK_qiHX.js.map} +1 -1
  145. package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js → TeamPage-u5_i0Rgh.js} +2 -2
  146. package/ccw/frontend/dist/assets/{TeamPage-C6bdFWn8.js.map → TeamPage-u5_i0Rgh.js.map} +1 -1
  147. package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js → TerminalDashboardPage-rUtC9e40.js} +2 -2
  148. package/ccw/frontend/dist/assets/{TerminalDashboardPage-Zofi_DZM.js.map → TerminalDashboardPage-rUtC9e40.js.map} +1 -1
  149. package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js → archive-C3u8YNQF.js} +2 -2
  150. package/ccw/frontend/dist/assets/{archive-Bza1KlB9.js.map → archive-C3u8YNQF.js.map} +1 -1
  151. package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js → archive-restore-DfQ998g5.js} +2 -2
  152. package/ccw/frontend/dist/assets/{archive-restore-CpsDm-cG.js.map → archive-restore-DfQ998g5.js.map} +1 -1
  153. package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js → arrow-right-BshJM9Po.js} +2 -2
  154. package/ccw/frontend/dist/assets/{arrow-right-CibG_LVO.js.map → arrow-right-BshJM9Po.js.map} +1 -1
  155. package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js → bookmark-plus-D03qJyOZ.js} +2 -2
  156. package/ccw/frontend/dist/assets/{bookmark-plus-BheO8EgG.js.map → bookmark-plus-D03qJyOZ.js.map} +1 -1
  157. package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js → bot-CyzWuwq0.js} +2 -2
  158. package/ccw/frontend/dist/assets/{bot-BlhM0Nl0.js.map → bot-CyzWuwq0.js.map} +1 -1
  159. package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js → braces-BPgtyjsG.js} +2 -2
  160. package/ccw/frontend/dist/assets/{braces-Dqjg_eCO.js.map → braces-BPgtyjsG.js.map} +1 -1
  161. package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js → circle-stop-Dix1AOmw.js} +2 -2
  162. package/ccw/frontend/dist/assets/{circle-stop-DYZSLYU0.js.map → circle-stop-Dix1AOmw.js.map} +1 -1
  163. package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js → cpu-CCQ4Q0Zh.js} +2 -2
  164. package/ccw/frontend/dist/assets/{cpu-DWCyAOAv.js.map → cpu-CCQ4Q0Zh.js.map} +1 -1
  165. package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js → ellipsis-vertical-BpTysg-Y.js} +2 -2
  166. package/ccw/frontend/dist/assets/{ellipsis-vertical-DIyoSEHx.js.map → ellipsis-vertical-BpTysg-Y.js.map} +1 -1
  167. package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js → eye-DGY1rAZs.js} +2 -2
  168. package/ccw/frontend/dist/assets/{eye-DUy7aLEx.js.map → eye-DGY1rAZs.js.map} +1 -1
  169. package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js → eye-off-D8t3JfWG.js} +2 -2
  170. package/ccw/frontend/dist/assets/{eye-off-CGRUVRDR.js.map → eye-off-D8t3JfWG.js.map} +1 -1
  171. package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js → file-json-BAdJb0n8.js} +2 -2
  172. package/ccw/frontend/dist/assets/{file-json-BxLBtU9d.js.map → file-json-BAdJb0n8.js.map} +1 -1
  173. package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js → file-text-DrJFiOUB.js} +2 -2
  174. package/ccw/frontend/dist/assets/{file-text-BoHsW2es.js.map → file-text-DrJFiOUB.js.map} +1 -1
  175. package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js → filter-CKqzYbz7.js} +2 -2
  176. package/ccw/frontend/dist/assets/{filter-B4vOqP6B.js.map → filter-CKqzYbz7.js.map} +1 -1
  177. package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js → folder-CV8511y9.js} +2 -2
  178. package/ccw/frontend/dist/assets/{folder-BKhwCNFG.js.map → folder-CV8511y9.js.map} +1 -1
  179. package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js → gauge-XKvmu_uU.js} +2 -2
  180. package/ccw/frontend/dist/assets/{gauge-Dgf64gkT.js.map → gauge-XKvmu_uU.js.map} +1 -1
  181. package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js → globe-C56cDUzX.js} +2 -2
  182. package/ccw/frontend/dist/assets/{globe-Cus_S6Ux.js.map → globe-C56cDUzX.js.map} +1 -1
  183. package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js → grid-3x3-Bya-suFW.js} +2 -2
  184. package/ccw/frontend/dist/assets/{grid-3x3-DM08hpAN.js.map → grid-3x3-Bya-suFW.js.map} +1 -1
  185. package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js → hard-drive-CmuTZpsB.js} +2 -2
  186. package/ccw/frontend/dist/assets/{hard-drive-eCtll84F.js.map → hard-drive-CmuTZpsB.js.map} +1 -1
  187. package/ccw/frontend/dist/assets/{hash-Bd1RD285.js → hash-CRPT_tJQ.js} +2 -2
  188. package/ccw/frontend/dist/assets/{hash-Bd1RD285.js.map → hash-CRPT_tJQ.js.map} +1 -1
  189. package/ccw/frontend/dist/assets/{history-eyyCQA6b.js → history-C1pJZQCL.js} +2 -2
  190. package/ccw/frontend/dist/assets/{history-eyyCQA6b.js.map → history-C1pJZQCL.js.map} +1 -1
  191. package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js → index-B6TpijCe.js} +2 -2
  192. package/ccw/frontend/dist/assets/{index-ZnmWxcZg.js.map → index-B6TpijCe.js.map} +1 -1
  193. package/ccw/frontend/dist/assets/{index-b2C0iFd1.js → index-Bcq-7r6F.js} +2 -2
  194. package/ccw/frontend/dist/assets/{index-b2C0iFd1.js.map → index-Bcq-7r6F.js.map} +1 -1
  195. package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js → index-CI8-rBff.js} +2 -2
  196. package/ccw/frontend/dist/assets/{index-Cs2ShCCy.js.map → index-CI8-rBff.js.map} +1 -1
  197. package/ccw/frontend/dist/assets/{index-CY6Lueph.js → index-Dmt9OiEf.js} +2 -2
  198. package/ccw/frontend/dist/assets/{index-CY6Lueph.js.map → index-Dmt9OiEf.js.map} +1 -1
  199. package/ccw/frontend/dist/assets/{index-DfeBbFXo.js → index-anSMmEF8.js} +2 -2
  200. package/ccw/frontend/dist/assets/{index-DfeBbFXo.js.map → index-anSMmEF8.js.map} +1 -1
  201. package/ccw/frontend/dist/assets/{index-B6I7GQC5.js → index-dWT2M6Ef.js} +4 -4
  202. package/ccw/frontend/dist/assets/{index-B6I7GQC5.js.map → index-dWT2M6Ef.js.map} +1 -1
  203. package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js → layout-grid-TSO0BFQE.js} +2 -2
  204. package/ccw/frontend/dist/assets/{layout-grid-ChrTrCby.js.map → layout-grid-TSO0BFQE.js.map} +1 -1
  205. package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js → lightbulb-Caj6fIQD.js} +2 -2
  206. package/ccw/frontend/dist/assets/{lightbulb-CvXiTlzN.js.map → lightbulb-Caj6fIQD.js.map} +1 -1
  207. package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js → link-2-DE9lMxa-.js} +2 -2
  208. package/ccw/frontend/dist/assets/{link-2-W0Nl17ec.js.map → link-2-DE9lMxa-.js.map} +1 -1
  209. package/ccw/frontend/dist/assets/{link-CL4JmoHb.js → link-BZtPgLW0.js} +2 -2
  210. package/ccw/frontend/dist/assets/{link-CL4JmoHb.js.map → link-BZtPgLW0.js.map} +1 -1
  211. package/ccw/frontend/dist/assets/{list-CDmYFcio.js → list-DubWyY-U.js} +2 -2
  212. package/ccw/frontend/dist/assets/{list-CDmYFcio.js.map → list-DubWyY-U.js.map} +1 -1
  213. package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js → map-pin-DwN_48AF.js} +2 -2
  214. package/ccw/frontend/dist/assets/{map-pin-0Mfsw_3d.js.map → map-pin-DwN_48AF.js.map} +1 -1
  215. package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js → messages-square-bjxvaiM9.js} +2 -2
  216. package/ccw/frontend/dist/assets/{messages-square-C6h08ple.js.map → messages-square-bjxvaiM9.js.map} +1 -1
  217. package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js → minimize-2-CGfBKD_V.js} +2 -2
  218. package/ccw/frontend/dist/assets/{minimize-2-Cbu2yRzi.js.map → minimize-2-CGfBKD_V.js.map} +1 -1
  219. package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js → package-nzWY6ilt.js} +2 -2
  220. package/ccw/frontend/dist/assets/{package-CoLVUZGJ.js.map → package-nzWY6ilt.js.map} +1 -1
  221. package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js → plug-CiLce49C.js} +2 -2
  222. package/ccw/frontend/dist/assets/{plug-BYTYqsw1.js.map → plug-CiLce49C.js.map} +1 -1
  223. package/ccw/frontend/dist/assets/{power-DmIojFl-.js → power-CFLmB-U9.js} +2 -2
  224. package/ccw/frontend/dist/assets/{power-DmIojFl-.js.map → power-CFLmB-U9.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{save-BFa03OnG.js → save-DuO6OF0C.js} +2 -2
  226. package/ccw/frontend/dist/assets/{save-BFa03OnG.js.map → save-DuO6OF0C.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{send-Vet3sN4J.js → send-CZk9p0mM.js} +2 -2
  228. package/ccw/frontend/dist/assets/{send-Vet3sN4J.js.map → send-CZk9p0mM.js.map} +1 -1
  229. package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js → square-check-big-BY_1YQQg.js} +2 -2
  230. package/ccw/frontend/dist/assets/{square-check-big-B9nzZRfE.js.map → square-check-big-BY_1YQQg.js.map} +1 -1
  231. package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js → square-pen-CnZgm6g-.js} +2 -2
  232. package/ccw/frontend/dist/assets/{square-pen-C7K13x4Z.js.map → square-pen-CnZgm6g-.js.map} +1 -1
  233. package/ccw/frontend/dist/assets/{star-BCQHcnSe.js → star-Cn1F0qy7.js} +2 -2
  234. package/ccw/frontend/dist/assets/{star-BCQHcnSe.js.map → star-Cn1F0qy7.js.map} +1 -1
  235. package/ccw/frontend/dist/assets/{style-CJsrp48L.js → style-Dxs1iXCV.js} +2 -2
  236. package/ccw/frontend/dist/assets/{style-CJsrp48L.js.map → style-Dxs1iXCV.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{target-CBzCJCB1.js → target-Bz1fLRKH.js} +2 -2
  238. package/ccw/frontend/dist/assets/{target-CBzCJCB1.js.map → target-Bz1fLRKH.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js → test-tube-C6qCYlDr.js} +2 -2
  240. package/ccw/frontend/dist/assets/{test-tube-BYTc5mvQ.js.map → test-tube-C6qCYlDr.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js → upload-C71kd4Qs.js} +2 -2
  242. package/ccw/frontend/dist/assets/{upload-DzyQj7ib.js.map → upload-C71kd4Qs.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js → useApiSettings-CqP2BAJ7.js} +2 -2
  244. package/ccw/frontend/dist/assets/{useApiSettings-CFPww7gU.js.map → useApiSettings-CqP2BAJ7.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js → useCli-PCoPoVeM.js} +2 -2
  246. package/ccw/frontend/dist/assets/{useCli-ByL_a5CD.js.map → useCli-PCoPoVeM.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js → useCommands-3OfPQPw4.js} +2 -2
  248. package/ccw/frontend/dist/assets/{useCommands-BvKIoOzB.js.map → useCommands-3OfPQPw4.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js → useDebounce-bXiFhQx9.js} +2 -2
  250. package/ccw/frontend/dist/assets/{useDebounce-CmKmoP7n.js.map → useDebounce-bXiFhQx9.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js → useFileExplorer-DEyUm46_.js} +2 -2
  252. package/ccw/frontend/dist/assets/{useFileExplorer-G5UoArCU.js.map → useFileExplorer-DEyUm46_.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js → useLocale-sXTrdxcJ.js} +2 -2
  254. package/ccw/frontend/dist/assets/{useLocale-D2iHK44M.js.map → useLocale-sXTrdxcJ.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js → useSkills-D0W0kXYm.js} +3 -3
  256. package/ccw/frontend/dist/assets/{useSkills-CYU4zqhm.js.map → useSkills-D0W0kXYm.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js → useSystemSettings-DZ-8lZsG.js} +2 -2
  258. package/ccw/frontend/dist/assets/{useSystemSettings-JznNpij7.js.map → useSystemSettings-DZ-8lZsG.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js → wand-sparkles-83GmAYuw.js} +2 -2
  260. package/ccw/frontend/dist/assets/{wand-sparkles-DqS0VCeN.js.map → wand-sparkles-83GmAYuw.js.map} +1 -1
  261. package/ccw/frontend/dist/index.html +1 -1
  262. package/package.json +1 -1
  263. package/.claude/skills/team-arch-opt/role-specs/analyzer.md +0 -80
  264. package/.claude/skills/team-arch-opt/role-specs/designer.md +0 -118
  265. package/.claude/skills/team-arch-opt/role-specs/refactorer.md +0 -106
  266. package/.claude/skills/team-arch-opt/role-specs/reviewer.md +0 -116
  267. package/.claude/skills/team-arch-opt/role-specs/validator.md +0 -117
  268. package/.claude/skills/team-brainstorm/role-specs/challenger.md +0 -63
  269. package/.claude/skills/team-brainstorm/role-specs/evaluator.md +0 -58
  270. package/.claude/skills/team-brainstorm/role-specs/ideator.md +0 -71
  271. package/.claude/skills/team-brainstorm/role-specs/synthesizer.md +0 -59
  272. package/.claude/skills/team-frontend/role-specs/analyst.md +0 -91
  273. package/.claude/skills/team-frontend/role-specs/architect.md +0 -85
  274. package/.claude/skills/team-frontend/role-specs/developer.md +0 -92
  275. package/.claude/skills/team-frontend/role-specs/qa.md +0 -78
  276. package/.claude/skills/team-issue/role-specs/explorer.md +0 -95
  277. package/.claude/skills/team-issue/role-specs/implementer.md +0 -89
  278. package/.claude/skills/team-issue/role-specs/integrator.md +0 -86
  279. package/.claude/skills/team-issue/role-specs/planner.md +0 -83
  280. package/.claude/skills/team-issue/role-specs/reviewer.md +0 -89
  281. package/.claude/skills/team-iterdev/role-specs/architect.md +0 -64
  282. package/.claude/skills/team-iterdev/role-specs/developer.md +0 -73
  283. package/.claude/skills/team-iterdev/role-specs/reviewer.md +0 -65
  284. package/.claude/skills/team-iterdev/role-specs/tester.md +0 -87
  285. package/.claude/skills/team-perf-opt/role-specs/benchmarker.md +0 -110
  286. package/.claude/skills/team-perf-opt/role-specs/optimizer.md +0 -102
  287. package/.claude/skills/team-perf-opt/role-specs/profiler.md +0 -73
  288. package/.claude/skills/team-perf-opt/role-specs/reviewer.md +0 -91
  289. package/.claude/skills/team-perf-opt/role-specs/strategist.md +0 -114
  290. package/.claude/skills/team-planex/role-specs/executor.md +0 -90
  291. package/.claude/skills/team-planex/role-specs/planner.md +0 -110
  292. package/.claude/skills/team-quality-assurance/role-specs/analyst.md +0 -79
  293. package/.claude/skills/team-quality-assurance/role-specs/executor.md +0 -64
  294. package/.claude/skills/team-quality-assurance/role-specs/generator.md +0 -67
  295. package/.claude/skills/team-quality-assurance/role-specs/scout.md +0 -66
  296. package/.claude/skills/team-quality-assurance/role-specs/strategist.md +0 -70
  297. package/.claude/skills/team-review/role-specs/fixer.md +0 -75
  298. package/.claude/skills/team-review/role-specs/reviewer.md +0 -66
  299. package/.claude/skills/team-review/role-specs/scanner.md +0 -70
  300. package/.claude/skills/team-roadmap-dev/role-specs/executor.md +0 -71
  301. package/.claude/skills/team-roadmap-dev/role-specs/planner.md +0 -77
  302. package/.claude/skills/team-roadmap-dev/role-specs/verifier.md +0 -73
  303. package/.claude/skills/team-tech-debt/role-specs/assessor.md +0 -70
  304. package/.claude/skills/team-tech-debt/role-specs/executor.md +0 -80
  305. package/.claude/skills/team-tech-debt/role-specs/planner.md +0 -71
  306. package/.claude/skills/team-tech-debt/role-specs/scanner.md +0 -85
  307. package/.claude/skills/team-tech-debt/role-specs/validator.md +0 -83
  308. package/.claude/skills/team-testing/role-specs/analyst.md +0 -94
  309. package/.claude/skills/team-testing/role-specs/executor.md +0 -97
  310. package/.claude/skills/team-testing/role-specs/generator.md +0 -96
  311. package/.claude/skills/team-testing/role-specs/strategist.md +0 -82
  312. package/.claude/skills/team-uidesign/role-specs/designer.md +0 -72
  313. package/.claude/skills/team-uidesign/role-specs/implementer.md +0 -74
  314. package/.claude/skills/team-uidesign/role-specs/researcher.md +0 -84
  315. package/.claude/skills/team-uidesign/role-specs/reviewer.md +0 -70
  316. package/.claude/skills/team-ux-improve/role-specs/designer.md +0 -191
  317. package/.claude/skills/team-ux-improve/role-specs/diagnoser.md +0 -110
  318. package/.claude/skills/team-ux-improve/role-specs/explorer.md +0 -109
  319. package/.claude/skills/team-ux-improve/role-specs/implementer.md +0 -164
  320. package/.claude/skills/team-ux-improve/role-specs/scanner.md +0 -117
  321. package/.claude/skills/team-ux-improve/role-specs/tester.md +0 -163
  322. package/.codex/skills/analyze-with-file/EXECUTE.md +0 -716
  323. package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js +0 -2
  324. package/ccw/frontend/dist/assets/CodexLensPage-My6DnfN6.js.map +0 -1
@@ -1,716 +0,0 @@
1
- # Analyze Task Generation & Execution Spec
2
-
3
- > **Purpose**: Quality standards for task generation + execution specification for Phase 5 of `analyze-with-file`.
4
- > **Consumer**: Phase 5 of `analyze-with-file` workflow.
5
- > **Scope**: Task generation quality + direct inline execution.
6
-
7
- ---
8
-
9
- ## Task Generation Flow
10
-
11
- > **Entry point**: Routed here from SKILL.md Phase 5 when complexity is `complex` (≥3 recommendations or high-priority with dependencies).
12
-
13
- ```
14
- Step 1: Load context → Step 2: Generate .task/*.json → Step 3: Pre-execution analysis
15
- → Step 4: User confirmation → Step 5: Serial execution → Step 6: Finalize
16
- ```
17
-
18
- **Input artifacts** (all from session folder):
19
-
20
- | Artifact | Required | Provides |
21
- |----------|----------|----------|
22
- | `conclusions.json` | Yes | `recommendations[]` with action, rationale, priority, evidence_refs |
23
- | `exploration-codebase.json` | No | `relevant_files[]`, `patterns[]`, `constraints[]`, `integration_points[]` — primary source for file resolution |
24
- | `explorations.json` | No | `sources[]`, `key_findings[]` — fallback for file resolution |
25
- | `perspectives.json` | No | Multi-perspective findings — alternative to explorations.json |
26
-
27
- ---
28
-
29
- ## File Resolution Algorithm
30
-
31
- Target files are resolved with a 3-priority fallback chain. Recommendations carry only `evidence_refs` — file resolution is EXECUTE.md's responsibility:
32
-
33
- ```javascript
34
- function resolveTargetFiles(rec, codebaseContext, explorations) {
35
- // Priority 1: Extract file paths from evidence_refs (e.g., "src/auth/token.ts:89")
36
- if (rec.evidence_refs?.length) {
37
- const filePaths = [...new Set(
38
- rec.evidence_refs
39
- .filter(ref => ref.includes('/') || ref.includes('.'))
40
- .map(ref => ref.split(':')[0])
41
- )]
42
- if (filePaths.length) {
43
- return filePaths.map(path => ({
44
- path,
45
- action: 'modify',
46
- target: null,
47
- changes: []
48
- }))
49
- }
50
- }
51
-
52
- // Priority 2: Match from exploration-codebase.json relevant_files
53
- if (codebaseContext?.relevant_files?.length) {
54
- const keywords = extractKeywords(rec.action + ' ' + rec.rationale)
55
- const matched = codebaseContext.relevant_files.filter(f =>
56
- keywords.some(kw =>
57
- f.path.toLowerCase().includes(kw) ||
58
- f.summary?.toLowerCase().includes(kw) ||
59
- f.relevance?.toLowerCase().includes(kw)
60
- )
61
- )
62
- if (matched.length) {
63
- return matched.map(f => ({
64
- path: f.path,
65
- action: 'modify',
66
- target: null,
67
- changes: rec.changes || []
68
- }))
69
- }
70
- }
71
-
72
- // Priority 3: Match from explorations.json sources
73
- if (explorations?.sources?.length) {
74
- const actionVerb = rec.action.split(' ')[0].toLowerCase()
75
- const matched = explorations.sources.filter(s =>
76
- s.summary?.toLowerCase().includes(actionVerb) ||
77
- s.file?.includes(actionVerb)
78
- )
79
- if (matched.length) {
80
- return matched.map(s => ({
81
- path: s.file,
82
- action: 'modify',
83
- target: null,
84
- changes: []
85
- }))
86
- }
87
- }
88
-
89
- // Fallback: empty array — task relies on description + implementation for guidance
90
- return []
91
- }
92
-
93
- function extractKeywords(text) {
94
- return text
95
- .toLowerCase()
96
- .replace(/[^a-z0-9\u4e00-\u9fa5\s]/g, ' ')
97
- .split(/\s+/)
98
- .filter(w => w.length > 2)
99
- .filter(w => !['the', 'and', 'for', 'with', 'from', 'that', 'this'].includes(w))
100
- }
101
- ```
102
-
103
- ---
104
-
105
- ## Task Type Inference
106
-
107
- | Recommendation Pattern | Inferred Type |
108
- |------------------------|---------------|
109
- | fix, resolve, repair, patch, correct | `fix` |
110
- | refactor, restructure, extract, reorganize, decouple | `refactor` |
111
- | add, implement, create, build, introduce | `feature` |
112
- | improve, optimize, enhance, upgrade, streamline | `enhancement` |
113
- | test, coverage, validate, verify, assert | `testing` |
114
-
115
- ```javascript
116
- function inferTaskType(rec) {
117
- const text = (rec.action + ' ' + rec.rationale).toLowerCase()
118
- const patterns = [
119
- { type: 'fix', keywords: ['fix', 'resolve', 'repair', 'patch', 'correct', 'bug'] },
120
- { type: 'refactor', keywords: ['refactor', 'restructure', 'extract', 'reorganize', 'decouple'] },
121
- { type: 'feature', keywords: ['add', 'implement', 'create', 'build', 'introduce'] },
122
- { type: 'enhancement', keywords: ['improve', 'optimize', 'enhance', 'upgrade', 'streamline'] },
123
- { type: 'testing', keywords: ['test', 'coverage', 'validate', 'verify', 'assert'] }
124
- ]
125
- for (const p of patterns) {
126
- if (p.keywords.some(kw => text.includes(kw))) return p.type
127
- }
128
- return 'enhancement' // safe default
129
- }
130
- ```
131
-
132
- ## Effort Inference
133
-
134
- | Signal | Effort |
135
- |--------|--------|
136
- | priority=high AND files >= 3 | `large` |
137
- | priority=high OR files=2 | `medium` |
138
- | priority=medium AND files <= 1 | `medium` |
139
- | priority=low OR single file | `small` |
140
-
141
- ```javascript
142
- function inferEffort(rec, targetFiles) {
143
- const fileCount = targetFiles?.length || 0
144
- if (rec.priority === 'high' && fileCount >= 3) return 'large'
145
- if (rec.priority === 'high' || fileCount >= 2) return 'medium'
146
- if (rec.priority === 'low' || fileCount <= 1) return 'small'
147
- return 'medium'
148
- }
149
- ```
150
-
151
- ---
152
-
153
- ## Convergence Quality Validation
154
-
155
- Every task's `convergence` MUST pass quality gates before writing to disk.
156
-
157
- ### Quality Rules
158
-
159
- | Field | Requirement | Validation |
160
- |-------|-------------|------------|
161
- | `criteria[]` | **Testable** — assertions or concrete manual steps | Reject vague patterns; each criterion must reference observable behavior |
162
- | `verification` | **Executable** — shell command or explicit step sequence | Must contain a runnable command or step-by-step verification procedure |
163
- | `definition_of_done` | **Business language** — non-technical stakeholder can judge | Must NOT contain technical commands (jest, tsc, npm, build) |
164
-
165
- ### Vague Pattern Detection
166
-
167
- ```javascript
168
- const VAGUE_PATTERNS = /正常|正确|好|可以|没问题|works|fine|good|correct|properly|as expected/i
169
- const TECHNICAL_IN_DOD = /compile|build|lint|npm|npx|jest|tsc|eslint|cargo|pytest|go test/i
170
-
171
- function validateConvergenceQuality(tasks) {
172
- const issues = []
173
- tasks.forEach(task => {
174
- // Rule 1: No vague criteria
175
- task.convergence.criteria.forEach((c, i) => {
176
- if (VAGUE_PATTERNS.test(c) && c.length < 20) {
177
- issues.push({
178
- task: task.id, field: `criteria[${i}]`,
179
- problem: 'Vague criterion', value: c,
180
- fix: 'Replace with specific observable condition from evidence'
181
- })
182
- }
183
- })
184
-
185
- // Rule 2: Verification should be executable
186
- if (task.convergence.verification && task.convergence.verification.length < 5) {
187
- issues.push({
188
- task: task.id, field: 'verification',
189
- problem: 'Too short to be executable', value: task.convergence.verification,
190
- fix: 'Provide shell command or numbered step sequence'
191
- })
192
- }
193
-
194
- // Rule 3: DoD should be business language
195
- if (TECHNICAL_IN_DOD.test(task.convergence.definition_of_done)) {
196
- issues.push({
197
- task: task.id, field: 'definition_of_done',
198
- problem: 'Contains technical commands', value: task.convergence.definition_of_done,
199
- fix: 'Rewrite in business language describing user/system outcome'
200
- })
201
- }
202
-
203
- // Rule 4: files[].changes should not be empty when files exist
204
- task.files?.forEach((f, i) => {
205
- if (f.action === 'modify' && (!f.changes || f.changes.length === 0) && !f.change) {
206
- issues.push({
207
- task: task.id, field: `files[${i}].changes`,
208
- problem: 'No change description for modify action', value: f.path,
209
- fix: 'Describe what specifically changes in this file'
210
- })
211
- }
212
- })
213
-
214
- // Rule 5: implementation steps should exist
215
- if (!task.implementation || task.implementation.length === 0) {
216
- issues.push({
217
- task: task.id, field: 'implementation',
218
- problem: 'No implementation steps',
219
- fix: 'Add at least one step describing how to realize this task'
220
- })
221
- }
222
- })
223
-
224
- // Auto-fix where possible, log remaining issues
225
- issues.forEach(issue => {
226
- // Attempt auto-fix based on available evidence
227
- // If unfixable, log warning — task still generated but flagged
228
- })
229
- return issues
230
- }
231
- ```
232
-
233
- ### Good vs Bad Examples
234
-
235
- **Criteria**:
236
-
237
- | Bad | Good |
238
- |-----|------|
239
- | `"Code works correctly"` | `"refreshToken() returns a new JWT with >0 expiry when called with expired token"` |
240
- | `"No errors"` | `"Error handler at auth.ts:45 returns 401 status with { error: 'token_expired' } body"` |
241
- | `"Performance is good"` | `"API response time < 200ms at p95 for /api/users endpoint under 100 concurrent requests"` |
242
-
243
- **Verification**:
244
-
245
- | Bad | Good |
246
- |-----|------|
247
- | `"Check it"` | `"jest --testPathPattern=auth.test.ts && npx tsc --noEmit"` |
248
- | `"Run tests"` | `"1. Run npm test -- --grep 'token refresh' 2. Verify no TypeScript errors with npx tsc --noEmit"` |
249
-
250
- **Definition of Done**:
251
-
252
- | Bad | Good |
253
- |-----|------|
254
- | `"jest passes"` | `"Users remain logged in across token expiration without manual re-login"` |
255
- | `"No TypeScript errors"` | `"Authentication flow handles all user-facing error scenarios with clear error messages"` |
256
-
257
- ---
258
-
259
- ## Required Task Fields (analyze-with-file producer)
260
-
261
- SKILL.md produces minimal recommendations `{action, rationale, priority, evidence_refs}`. EXECUTE.md enriches these into full task JSON. The final `.task/*.json` MUST populate:
262
-
263
- | Block | Fields | Required |
264
- |-------|--------|----------|
265
- | IDENTITY | `id`, `title`, `description` | Yes |
266
- | CLASSIFICATION | `type`, `priority`, `effort` | Yes |
267
- | DEPENDENCIES | `depends_on` | Yes (empty array if none) |
268
- | CONVERGENCE | `convergence.criteria[]`, `convergence.verification`, `convergence.definition_of_done` | Yes |
269
- | FILES | `files[].path`, `files[].action`, `files[].changes`/`files[].change` | Yes (if files identified) |
270
- | IMPLEMENTATION | `implementation[]` with step + description | Yes |
271
- | CONTEXT | `evidence`, `source.tool`, `source.session_id`, `source.original_id` | Yes |
272
-
273
- ### Task JSON Example
274
-
275
- ```json
276
- {
277
- "id": "TASK-001",
278
- "title": "Fix authentication token refresh",
279
- "description": "Token refresh fails silently when JWT expires, causing users to be logged out unexpectedly",
280
- "type": "fix",
281
- "priority": "high",
282
- "effort": "medium",
283
- "files": [
284
- {
285
- "path": "src/auth/token.ts",
286
- "action": "modify",
287
- "target": "refreshToken",
288
- "changes": [
289
- "Add await to refreshToken() call at line 89",
290
- "Add error propagation for refresh failure"
291
- ],
292
- "change": "Add await to refreshToken() call and propagate errors"
293
- },
294
- {
295
- "path": "src/middleware/auth.ts",
296
- "action": "modify",
297
- "target": "authMiddleware",
298
- "changes": [
299
- "Update error handler at line 45 to distinguish refresh failures from auth failures"
300
- ],
301
- "change": "Update error handler to propagate refresh failures"
302
- }
303
- ],
304
- "depends_on": [],
305
- "convergence": {
306
- "criteria": [
307
- "refreshToken() returns new valid JWT when called with expired token",
308
- "Expired token triggers automatic refresh without user action",
309
- "Failed refresh returns 401 with { error: 'token_expired' } body"
310
- ],
311
- "verification": "jest --testPathPattern=token.test.ts && npx tsc --noEmit",
312
- "definition_of_done": "Users remain logged in across token expiration without manual re-login"
313
- },
314
- "implementation": [
315
- {
316
- "step": "1",
317
- "description": "Add await to refreshToken() call in token.ts",
318
- "actions": ["Read token.ts", "Add await keyword at line 89", "Verify async chain"]
319
- },
320
- {
321
- "step": "2",
322
- "description": "Update error handler in auth middleware",
323
- "actions": ["Read auth.ts", "Modify error handler at line 45", "Add refresh-specific error type"]
324
- }
325
- ],
326
- "evidence": ["src/auth/token.ts:89", "src/middleware/auth.ts:45"],
327
- "source": {
328
- "tool": "analyze-with-file",
329
- "session_id": "ANL-auth-token-refresh-2025-01-21",
330
- "original_id": "TASK-001"
331
- }
332
- }
333
- ```
334
-
335
- ---
336
-
337
- ## Step 1: Load All Context Sources
338
-
339
- Phase 2-4 already loaded and processed these artifacts. If data is still in conversation memory, skip disk reads.
340
-
341
- ```javascript
342
- // Skip loading if already in memory from Phase 2-4
343
- // Only read from disk when entering EXECUTE.md from a fresh/resumed session
344
-
345
- if (!conclusions) {
346
- conclusions = JSON.parse(Read(`${sessionFolder}/conclusions.json`))
347
- }
348
-
349
- if (!codebaseContext) {
350
- codebaseContext = file_exists(`${sessionFolder}/exploration-codebase.json`)
351
- ? JSON.parse(Read(`${sessionFolder}/exploration-codebase.json`))
352
- : null
353
- }
354
-
355
- if (!explorations) {
356
- explorations = file_exists(`${sessionFolder}/explorations.json`)
357
- ? JSON.parse(Read(`${sessionFolder}/explorations.json`))
358
- : file_exists(`${sessionFolder}/perspectives.json`)
359
- ? JSON.parse(Read(`${sessionFolder}/perspectives.json`))
360
- : null
361
- }
362
- ```
363
-
364
- ## Step 2: Enrich Recommendations & Generate .task/*.json
365
-
366
- SKILL.md Phase 4 produces minimal recommendations: `{action, rationale, priority, evidence_refs}`.
367
- This step enriches each recommendation with execution-specific details using codebase context, then generates individual task JSON files.
368
-
369
- **Enrichment pipeline**: `rec (minimal) + codebaseContext + explorations → task JSON (full)`
370
-
371
- ```javascript
372
- const tasks = conclusions.recommendations.map((rec, index) => {
373
- const taskId = `TASK-${String(index + 1).padStart(3, '0')}`
374
-
375
- // 1. ENRICH: Resolve target files from codebase context (not from rec)
376
- const targetFiles = resolveTargetFiles(rec, codebaseContext, explorations)
377
-
378
- // 2. ENRICH: Generate implementation steps from action + context
379
- const implSteps = generateImplementationSteps(rec, targetFiles, codebaseContext)
380
-
381
- // 3. ENRICH: Derive change descriptions per file
382
- const enrichedFiles = targetFiles.map(f => ({
383
- path: f.path,
384
- action: f.action || 'modify',
385
- target: f.target || null,
386
- changes: deriveChanges(rec, f, codebaseContext) || [],
387
- change: rec.action
388
- }))
389
-
390
- return {
391
- id: taskId,
392
- title: rec.action,
393
- description: rec.rationale,
394
- type: inferTaskType(rec),
395
- priority: rec.priority,
396
- effort: inferEffort(rec, targetFiles),
397
-
398
- files: enrichedFiles,
399
- depends_on: [],
400
-
401
- // CONVERGENCE (must pass quality validation)
402
- convergence: {
403
- criteria: generateCriteria(rec),
404
- verification: generateVerification(rec),
405
- definition_of_done: generateDoD(rec)
406
- },
407
-
408
- // IMPLEMENTATION steps (generated here, not from SKILL.md)
409
- implementation: implSteps,
410
-
411
- // CONTEXT
412
- evidence: rec.evidence_refs || [],
413
- source: {
414
- tool: 'analyze-with-file',
415
- session_id: sessionId,
416
- original_id: taskId
417
- }
418
- }
419
- })
420
-
421
- // Quality validation
422
- validateConvergenceQuality(tasks)
423
-
424
- // Write each task as individual JSON file
425
- Bash(`mkdir -p ${sessionFolder}/.task`)
426
- tasks.forEach(task => {
427
- Write(`${sessionFolder}/.task/${task.id}.json`, JSON.stringify(task, null, 2))
428
- })
429
- ```
430
-
431
- **Enrichment Functions**:
432
-
433
- ```javascript
434
- // Generate implementation steps from action + resolved files
435
- function generateImplementationSteps(rec, targetFiles, codebaseContext) {
436
- // 1. Parse rec.action into atomic steps
437
- // 2. Map steps to target files
438
- // 3. Add context from codebaseContext.patterns if applicable
439
- // Return: [{step: '1', description: '...', actions: [...]}]
440
- return [{
441
- step: '1',
442
- description: rec.action,
443
- actions: targetFiles.map(f => `Modify ${f.path}`)
444
- }]
445
- }
446
-
447
- // Derive specific change descriptions for a file
448
- function deriveChanges(rec, file, codebaseContext) {
449
- // 1. Match rec.action keywords to file content patterns
450
- // 2. Use codebaseContext.patterns for context-aware change descriptions
451
- // 3. Use rec.evidence_refs to locate specific modification points
452
- // Return: ['specific change 1', 'specific change 2']
453
- return [rec.action]
454
- }
455
- ```
456
-
457
- ## Step 3-6: Execution Steps
458
-
459
- After `.task/*.json` generation, validate and execute tasks directly inline.
460
-
461
- ### Step 3: Pre-Execution Analysis
462
-
463
- ```javascript
464
- const taskFiles = Glob(`${sessionFolder}/.task/*.json`)
465
- const tasks = taskFiles.map(f => JSON.parse(Read(f)))
466
-
467
- // 1. Dependency validation
468
- const taskIds = new Set(tasks.map(t => t.id))
469
- const errors = []
470
- tasks.forEach(task => {
471
- task.depends_on.forEach(dep => {
472
- if (!taskIds.has(dep)) errors.push(`${task.id}: depends on unknown task ${dep}`)
473
- })
474
- })
475
-
476
- // 2. Circular dependency detection (DFS)
477
- function detectCycles(tasks) {
478
- const graph = new Map(tasks.map(t => [t.id, t.depends_on]))
479
- const visited = new Set(), inStack = new Set(), cycles = []
480
- function dfs(node, path) {
481
- if (inStack.has(node)) { cycles.push([...path, node].join(' → ')); return }
482
- if (visited.has(node)) return
483
- visited.add(node); inStack.add(node)
484
- ;(graph.get(node) || []).forEach(dep => dfs(dep, [...path, node]))
485
- inStack.delete(node)
486
- }
487
- tasks.forEach(t => { if (!visited.has(t.id)) dfs(t.id, []) })
488
- return cycles
489
- }
490
-
491
- // 3. Topological sort for execution order
492
- function topoSort(tasks) {
493
- const inDegree = new Map(tasks.map(t => [t.id, 0]))
494
- tasks.forEach(t => t.depends_on.forEach(dep => {
495
- inDegree.set(t.id, inDegree.get(t.id) + 1)
496
- }))
497
- const queue = tasks.filter(t => inDegree.get(t.id) === 0).map(t => t.id)
498
- const order = []
499
- while (queue.length) {
500
- const id = queue.shift()
501
- order.push(id)
502
- tasks.forEach(t => {
503
- if (t.depends_on.includes(id)) {
504
- inDegree.set(t.id, inDegree.get(t.id) - 1)
505
- if (inDegree.get(t.id) === 0) queue.push(t.id)
506
- }
507
- })
508
- }
509
- return order
510
- }
511
-
512
- // 4. File conflict detection
513
- const fileTaskMap = new Map()
514
- tasks.forEach(task => {
515
- (task.files || []).forEach(f => {
516
- if (!fileTaskMap.has(f.path)) fileTaskMap.set(f.path, [])
517
- fileTaskMap.get(f.path).push(task.id)
518
- })
519
- })
520
- const conflicts = []
521
- fileTaskMap.forEach((taskIds, file) => {
522
- if (taskIds.length > 1) conflicts.push({ file, tasks: taskIds })
523
- })
524
- ```
525
-
526
- ### Step 4: Initialize Execution Artifacts
527
-
528
- ```javascript
529
- // execution.md — overview with task table
530
- const executionMd = `# Execution Overview
531
-
532
- ## Session Info
533
- - **Session ID**: ${sessionId}
534
- - **Plan Source**: .task/*.json (from analysis conclusions)
535
- - **Started**: ${getUtc8ISOString()}
536
- - **Total Tasks**: ${tasks.length}
537
-
538
- ## Task Overview
539
-
540
- | # | ID | Title | Type | Priority | Status |
541
- |---|-----|-------|------|----------|--------|
542
- ${tasks.map((t, i) => `| ${i+1} | ${t.id} | ${t.title} | ${t.type} | ${t.priority} | pending |`).join('\n')}
543
-
544
- ## Pre-Execution Analysis
545
- ${conflicts.length
546
- ? `### File Conflicts\n${conflicts.map(c => `- **${c.file}**: ${c.tasks.join(', ')}`).join('\n')}`
547
- : 'No file conflicts detected.'}
548
-
549
- ## Execution Timeline
550
- > Updated as tasks complete
551
- `
552
- Write(`${sessionFolder}/execution.md`, executionMd)
553
-
554
- // execution-events.md — chronological event log
555
- Write(`${sessionFolder}/execution-events.md`,
556
- `# Execution Events\n\n**Session**: ${sessionId}\n**Started**: ${getUtc8ISOString()}\n\n---\n\n`)
557
- ```
558
-
559
- ### Step 5: Task Execution Loop
560
-
561
- **User Confirmation** before execution:
562
-
563
- ```javascript
564
- if (!autoYes) {
565
- const action = AskUserQuestion({
566
- questions: [{
567
- question: `Execute ${tasks.length} tasks?\n${tasks.map(t => ` ${t.id}: ${t.title} (${t.priority})`).join('\n')}`,
568
- header: "Confirm",
569
- multiSelect: false,
570
- options: [
571
- { label: "Start", description: "Execute all tasks serially" },
572
- { label: "Adjust", description: "Modify .task/*.json before execution" },
573
- { label: "Skip", description: "Keep .task/*.json, skip execution" }
574
- ]
575
- }]
576
- })
577
- // "Adjust": user edits task files, then resumes
578
- // "Skip": end — user can execute later separately
579
- }
580
- ```
581
-
582
- Execute tasks serially using `task.implementation` steps and `task.files[].changes` as guidance.
583
-
584
- ```
585
- For each taskId in executionOrder:
586
- ├─ Load task from .task/{taskId}.json
587
- ├─ Check dependencies satisfied
588
- ├─ Record START event → execution-events.md
589
- ├─ Execute using task.implementation + task.files[].changes:
590
- │ ├─ Read target files listed in task.files[]
591
- │ ├─ Apply modifications described in files[].changes / files[].change
592
- │ ├─ Follow implementation[].actions sequence
593
- │ └─ Use Edit (preferred), Write (new files), Bash (build/test)
594
- ├─ Verify convergence:
595
- │ ├─ Check each convergence.criteria[] item
596
- │ ├─ Run convergence.verification (if executable command)
597
- │ └─ Record verification results
598
- ├─ Record COMPLETE/FAIL event → execution-events.md
599
- ├─ Update execution.md task status
600
- └─ Continue to next task
601
- ```
602
-
603
- **Execution Guidance Priority** — what the AI follows when executing each task:
604
-
605
- | Priority | Source | Example |
606
- |----------|--------|---------|
607
- | 1 | `files[].changes` / `files[].change` | "Add await to refreshToken() call at line 89" |
608
- | 2 | `implementation[].actions` | ["Read token.ts", "Add await keyword at line 89"] |
609
- | 3 | `implementation[].description` | "Add await to refreshToken() call in token.ts" |
610
- | 4 | `task.description` | "Token refresh fails silently..." |
611
-
612
- When `files[].changes` is populated, the AI has concrete instructions. When empty, it falls back to `implementation` steps, then to `description`.
613
-
614
- ### Step 5.1: Failure Handling
615
-
616
- ```javascript
617
- // On task failure, ask user how to proceed
618
- if (!autoYes) {
619
- AskUserQuestion({
620
- questions: [{
621
- question: `Task ${task.id} failed: ${errorMessage}\nHow to proceed?`,
622
- header: "Failure",
623
- multiSelect: false,
624
- options: [
625
- { label: "Skip & Continue", description: "Skip this task, continue with next" },
626
- { label: "Retry", description: "Retry this task" },
627
- { label: "Abort", description: "Stop execution, keep progress" }
628
- ]
629
- }]
630
- })
631
- }
632
- ```
633
-
634
- ### Step 6: Finalize
635
-
636
- After all tasks complete:
637
-
638
- 1. Append execution summary to `execution.md` (statistics, task results table)
639
- 2. Append session footer to `execution-events.md`
640
- 3. Write back `_execution` state to each `.task/*.json`:
641
-
642
- ```javascript
643
- tasks.forEach(task => {
644
- const updated = {
645
- ...task,
646
- status: task._status, // "completed" | "failed" | "skipped"
647
- executed_at: task._executed_at,
648
- result: {
649
- success: task._status === 'completed',
650
- files_modified: task._result?.files_modified || [],
651
- summary: task._result?.summary || '',
652
- error: task._result?.error || null,
653
- convergence_verified: task._result?.convergence_verified || []
654
- }
655
- }
656
- Write(`${sessionFolder}/.task/${task.id}.json`, JSON.stringify(updated, null, 2))
657
- })
658
- ```
659
-
660
- ### Step 6.1: Post-Execution Options
661
-
662
- ```javascript
663
- if (!autoYes) {
664
- AskUserQuestion({
665
- questions: [{
666
- question: `Execution complete: ${completedTasks.size}/${tasks.length} succeeded. Next:`,
667
- header: "Post-Execute",
668
- multiSelect: false,
669
- options: [
670
- { label: "Retry Failed", description: `Re-execute ${failedTasks.size} failed tasks` },
671
- { label: "View Events", description: "Display execution-events.md" },
672
- { label: "Create Issue", description: "Create issue from failed tasks" },
673
- { label: "Done", description: "End workflow" }
674
- ]
675
- }]
676
- })
677
- }
678
- ```
679
-
680
- ---
681
-
682
- ## Output Structure
683
-
684
- ```
685
- {sessionFolder}/
686
- ├── .task/ # Individual task JSON files (with _execution state after completion)
687
- │ ├── TASK-001.json
688
- │ └── ...
689
- ├── execution.md # Execution overview + task table + summary
690
- └── execution-events.md # Chronological event log
691
- ```
692
-
693
- ## execution-events.md Event Format
694
-
695
- ```markdown
696
- ## {timestamp} — {task.id}: {task.title}
697
-
698
- **Type**: {task.type} | **Priority**: {task.priority}
699
- **Status**: IN PROGRESS
700
- **Files**: {task.files[].path}
701
-
702
- ### Execution Log
703
- - Read {file} ({lines} lines)
704
- - Applied: {change description}
705
- - ...
706
-
707
- **Status**: COMPLETED / FAILED
708
- **Files Modified**: {list}
709
-
710
- #### Convergence Verification
711
- - [x/] {criterion 1}
712
- - [x/] {criterion 2}
713
- - **Verification**: {command} → PASS/FAIL
714
-
715
- ---
716
- ```