claude-code-workflow 7.2.28 → 7.2.30

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 (348) hide show
  1. package/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +2 -2
  2. package/.ccw/workflows/cli-templates/schemas/task-schema.json +14 -7
  3. package/.claude/agents/action-planning-agent.md +7 -4
  4. package/.claude/agents/cli-explore-agent.md +77 -63
  5. package/.claude/agents/cli-lite-planning-agent.md +11 -10
  6. package/.claude/agents/issue-plan-agent.md +421 -426
  7. package/.claude/commands/workflow/spec/setup.md +1 -1
  8. package/.claude/skills/ccw-chain/SKILL.md +119 -0
  9. package/.claude/skills/ccw-chain/chains/ccw-cycle.json +21 -0
  10. package/.claude/skills/ccw-chain/chains/ccw-exploration.json +47 -0
  11. package/.claude/skills/ccw-chain/chains/ccw-issue.json +33 -0
  12. package/.claude/skills/ccw-chain/chains/ccw-lightweight.json +57 -0
  13. package/.claude/skills/ccw-chain/chains/ccw-main.json +52 -0
  14. package/.claude/skills/ccw-chain/chains/ccw-standard.json +39 -0
  15. package/.claude/skills/ccw-chain/chains/ccw-team.json +10 -0
  16. package/.claude/skills/ccw-chain/chains/ccw-with-file.json +31 -0
  17. package/.claude/skills/ccw-chain/phases/analyze-with-file.md +788 -0
  18. package/.claude/skills/ccw-chain/phases/brainstorm/SKILL.md +408 -0
  19. package/.claude/skills/ccw-chain/phases/brainstorm/phases/01-mode-routing.md +207 -0
  20. package/.claude/skills/ccw-chain/phases/brainstorm/phases/02-artifacts.md +567 -0
  21. package/.claude/skills/ccw-chain/phases/brainstorm/phases/03-role-analysis.md +748 -0
  22. package/.claude/skills/ccw-chain/phases/brainstorm/phases/04-synthesis.md +827 -0
  23. package/.claude/skills/ccw-chain/phases/brainstorm-with-file.md +482 -0
  24. package/.claude/skills/ccw-chain/phases/collaborative-plan-with-file.md +639 -0
  25. package/.claude/skills/ccw-chain/phases/debug-with-file.md +656 -0
  26. package/.claude/skills/ccw-chain/phases/integration-test-cycle.md +936 -0
  27. package/.claude/skills/ccw-chain/phases/issue-convert-to-plan.md +720 -0
  28. package/.claude/skills/ccw-chain/phases/issue-discover.md +483 -0
  29. package/.claude/skills/ccw-chain/phases/issue-execute.md +629 -0
  30. package/.claude/skills/ccw-chain/phases/issue-from-brainstorm.md +382 -0
  31. package/.claude/skills/ccw-chain/phases/issue-plan.md +343 -0
  32. package/.claude/skills/ccw-chain/phases/issue-queue.md +464 -0
  33. package/.claude/skills/ccw-chain/phases/refactor-cycle.md +852 -0
  34. package/.claude/skills/ccw-chain/phases/review-cycle/SKILL.md +132 -0
  35. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-fix.md +760 -0
  36. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-module.md +764 -0
  37. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-session.md +775 -0
  38. package/.claude/skills/ccw-chain/phases/roadmap-with-file.md +544 -0
  39. package/.claude/skills/ccw-chain/phases/spec-generator/SKILL.md +338 -0
  40. package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-5-requirement-clarification.md +404 -0
  41. package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-discovery.md +257 -0
  42. package/.claude/skills/ccw-chain/phases/spec-generator/phases/02-product-brief.md +274 -0
  43. package/.claude/skills/ccw-chain/phases/spec-generator/phases/03-requirements.md +184 -0
  44. package/.claude/skills/ccw-chain/phases/spec-generator/phases/04-architecture.md +248 -0
  45. package/.claude/skills/ccw-chain/phases/spec-generator/phases/05-epics-stories.md +178 -0
  46. package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-5-auto-fix.md +144 -0
  47. package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-readiness-check.md +480 -0
  48. package/.claude/skills/ccw-chain/phases/team-planex.md +123 -0
  49. package/.claude/skills/ccw-chain/phases/ui-design-explore-auto.md +678 -0
  50. package/.claude/skills/ccw-chain/phases/unified-execute-with-file.md +870 -0
  51. package/.claude/skills/ccw-chain/phases/workflow-execute/SKILL.md +625 -0
  52. package/.claude/skills/ccw-chain/phases/workflow-execute/phases/06-review.md +215 -0
  53. package/.claude/skills/ccw-chain/phases/workflow-lite-plan.md +616 -0
  54. package/.claude/skills/ccw-chain/phases/workflow-multi-cli-plan.md +424 -0
  55. package/.claude/skills/ccw-chain/phases/workflow-plan/SKILL.md +466 -0
  56. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/01-session-discovery.md +99 -0
  57. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/02-context-gathering.md +338 -0
  58. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/03-conflict-resolution.md +422 -0
  59. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/04-task-generation.md +440 -0
  60. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/05-plan-verify.md +395 -0
  61. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/06-replan.md +594 -0
  62. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/SKILL.md +527 -0
  63. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/01-session-discovery.md +57 -0
  64. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/02-context-gathering.md +407 -0
  65. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/03-test-coverage-analysis.md +172 -0
  66. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -0
  67. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/05-tdd-task-generation.md +473 -0
  68. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/06-tdd-structure-validation.md +189 -0
  69. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/07-tdd-verify.md +635 -0
  70. package/.claude/skills/ccw-chain/phases/workflow-test-fix/SKILL.md +482 -0
  71. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/01-session-start.md +60 -0
  72. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/02-test-context-gather.md +493 -0
  73. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/03-test-concept-enhanced.md +150 -0
  74. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/04-test-task-generate.md +346 -0
  75. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/05-test-cycle-execute.md +538 -0
  76. package/.claude/skills/ccw-chain/specs/auto-mode.md +47 -0
  77. package/.claude/skills/ccw-chain/specs/intent-patterns.md +60 -0
  78. package/.claude/skills/chain-loader/SKILL.md +78 -0
  79. package/.claude/skills/chain-loader/phases/01-analyze-skill.md +53 -0
  80. package/.claude/skills/chain-loader/phases/02-design-graph.md +73 -0
  81. package/.claude/skills/chain-loader/phases/03-generate-validate.md +75 -0
  82. package/.claude/skills/chain-loader/specs/chain-schema.md +99 -0
  83. package/.claude/skills/chain-loader/specs/design-patterns.md +99 -0
  84. package/.claude/skills/chain-loader/templates/chain-json.md +63 -0
  85. package/.claude/skills/review-cycle/phases/review-module.md +764 -764
  86. package/.claude/skills/review-cycle/phases/review-session.md +775 -775
  87. package/.claude/skills/workflow-multi-cli-plan/SKILL.md +2 -2
  88. package/.claude/skills/workflow-plan/phases/03-conflict-resolution.md +422 -422
  89. package/.claude/skills/workflow-plan/phases/05-plan-verify.md +395 -395
  90. package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +407 -407
  91. package/.claude/skills/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -426
  92. package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +493 -493
  93. package/.codex/skills/brainstorm/SKILL.md +3 -3
  94. package/.codex/skills/clean/SKILL.md +3 -3
  95. package/.codex/skills/issue-discover/SKILL.md +13 -13
  96. package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
  97. package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
  98. package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
  99. package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
  100. package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
  101. package/.codex/skills/review-cycle/SKILL.md +10 -10
  102. package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
  103. package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
  104. package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
  105. package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
  106. package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
  107. package/.codex/skills/spec-generator/README.md +1 -1
  108. package/.codex/skills/spec-generator/SKILL.md +184 -88
  109. package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
  110. package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
  111. package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
  112. package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
  113. package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
  114. package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
  115. package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
  116. package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
  117. package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
  118. package/.codex/skills/spec-setup/SKILL.md +4 -4
  119. package/.codex/skills/workflow-plan/SKILL.md +6 -6
  120. package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
  121. package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
  122. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
  123. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
  124. package/README.md +14 -0
  125. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  126. package/ccw/dist/core/routes/litellm-api-routes.js +0 -23
  127. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  128. package/ccw/dist/tools/chain-loader.d.ts +10 -0
  129. package/ccw/dist/tools/chain-loader.d.ts.map +1 -0
  130. package/ccw/dist/tools/chain-loader.js +642 -0
  131. package/ccw/dist/tools/chain-loader.js.map +1 -0
  132. package/ccw/dist/tools/index.d.ts.map +1 -1
  133. package/ccw/dist/tools/index.js +2 -0
  134. package/ccw/dist/tools/index.js.map +1 -1
  135. package/ccw/dist/tools/json-builder.js +20 -0
  136. package/ccw/dist/tools/json-builder.js.map +1 -1
  137. package/ccw/dist/types/chain-types.d.ts +72 -0
  138. package/ccw/dist/types/chain-types.d.ts.map +1 -0
  139. package/ccw/dist/types/chain-types.js +5 -0
  140. package/ccw/dist/types/chain-types.js.map +1 -0
  141. package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js → AlertDialog-exlTDW81.js} +3 -3
  142. package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js.map → AlertDialog-exlTDW81.js.map} +1 -1
  143. package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js → AnalysisPage-cgV9LfAI.js} +2 -2
  144. package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
  145. package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
  146. package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
  147. package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js → CliModeToggle-Be9xsPiv.js} +2 -2
  148. package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
  149. package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
  150. package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
  151. package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js → CliViewerPage-BrE-oyEq.js} +2 -2
  152. package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
  153. package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js → CodexLensPage-Cd3nrC93.js} +2 -2
  154. package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
  155. package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js → Collapsible-DXFl3VKF.js} +2 -2
  156. package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
  157. package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
  158. package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
  159. package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js → DeepWikiPage-CpDxtmRX.js} +2 -2
  160. package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
  161. package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js → EndpointsPage-BchjWe7s.js} +2 -2
  162. package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
  163. package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js → ExplorerPage-CbWvaJ0y.js} +2 -2
  164. package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
  165. package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js → FixSessionPage-YMjVRiCk.js} +2 -2
  166. package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
  167. package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
  168. package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
  169. package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js → FloatingPanel-BtqzqDVq.js} +2 -2
  170. package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
  171. package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
  172. package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
  173. package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js → HistoryPage-BuWpQ7k5.js} +2 -2
  174. package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
  175. package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js → HookManagerPage-D0BtMIWy.js} +2 -2
  176. package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
  177. package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js → InstallationsPage-C7dwsAKG.js} +2 -2
  178. package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
  179. package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js → IssueHubPage-D0nCNaeB.js} +2 -2
  180. package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
  181. package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
  182. package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
  183. package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js → McpManagerPage-C-S5CehM.js} +2 -2
  184. package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
  185. package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js → MemoryPage-P_B0JVUQ.js} +2 -2
  186. package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
  187. package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js → NotFoundPage-S4Jn9LUE.js} +2 -2
  188. package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
  189. package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
  190. package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
  191. package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
  192. package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
  193. package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js → PromptHistoryPage-YEMjFARX.js} +3 -3
  194. package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
  195. package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js → ReviewSessionPage-DnTm55nG.js} +2 -2
  196. package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
  197. package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js → RulesManagerPage-CUwebtO2.js} +2 -2
  198. package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
  199. package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
  200. package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
  201. package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js → SessionsPage-BpgP4087.js} +2 -2
  202. package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js.map → SessionsPage-BpgP4087.js.map} +1 -1
  203. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
  204. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
  205. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
  206. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
  207. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
  208. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
  209. package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js → Switch-CYSPdqWk.js} +2 -2
  210. package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js.map → Switch-CYSPdqWk.js.map} +1 -1
  211. package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js → TabsNavigation-CPh6Zor1.js} +2 -2
  212. package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
  213. package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js → TaskDrawer-Ds-8830B.js} +2 -2
  214. package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
  215. package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js → TeamPage-CJODUxBk.js} +2 -2
  216. package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js.map → TeamPage-CJODUxBk.js.map} +1 -1
  217. package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
  218. package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
  219. package/ccw/frontend/dist/assets/{archive-DxemgIhF.js → archive-CjwVpw6k.js} +2 -2
  220. package/ccw/frontend/dist/assets/{archive-DxemgIhF.js.map → archive-CjwVpw6k.js.map} +1 -1
  221. package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js → archive-restore-2vZa9Ic3.js} +2 -2
  222. package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
  223. package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js → arrow-right-CUU5XDgT.js} +2 -2
  224. package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
  226. package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{bot-DOwFtzak.js → bot-BwpSRDUa.js} +2 -2
  228. package/ccw/frontend/dist/assets/{bot-DOwFtzak.js.map → bot-BwpSRDUa.js.map} +1 -1
  229. package/ccw/frontend/dist/assets/{braces-96qH3aFh.js → braces-DBzUW1XC.js} +2 -2
  230. package/ccw/frontend/dist/assets/{braces-96qH3aFh.js.map → braces-DBzUW1XC.js.map} +1 -1
  231. package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js → circle-stop-CGNNsjvE.js} +2 -2
  232. package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
  233. package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js → cpu-D27G86Ul.js} +2 -2
  234. package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js.map → cpu-D27G86Ul.js.map} +1 -1
  235. package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
  236. package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js → eye-C6MOB7Au.js} +2 -2
  238. package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js.map → eye-C6MOB7Au.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js → eye-off-BxfBlZ26.js} +2 -2
  240. package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js.map → eye-off-BxfBlZ26.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js → file-json-NI237wA-.js} +2 -2
  242. package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js.map → file-json-NI237wA-.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js → file-text-Byn2_2v6.js} +2 -2
  244. package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js.map → file-text-Byn2_2v6.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{filter-q9g-bknU.js → filter-D-7PhZjx.js} +2 -2
  246. package/ccw/frontend/dist/assets/{filter-q9g-bknU.js.map → filter-D-7PhZjx.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{folder-CL6vb42J.js → folder-BoAsK_FL.js} +2 -2
  248. package/ccw/frontend/dist/assets/{folder-CL6vb42J.js.map → folder-BoAsK_FL.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js → gauge-DCSxJIS4.js} +2 -2
  250. package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js.map → gauge-DCSxJIS4.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js → globe-CHS3prza.js} +2 -2
  252. package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js.map → globe-CHS3prza.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js → grid-3x3-D7K35U7S.js} +2 -2
  254. package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js → hard-drive-eq9xE07G.js} +2 -2
  256. package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js.map → hard-drive-eq9xE07G.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{hash-80O0kJO7.js → hash-C1DMpBua.js} +2 -2
  258. package/ccw/frontend/dist/assets/{hash-80O0kJO7.js.map → hash-C1DMpBua.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js → history-Di5SBCY-.js} +2 -2
  260. package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js.map → history-Di5SBCY-.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{index-mbeo62f8.js → index--_R7COnA.js} +2 -2
  262. package/ccw/frontend/dist/assets/{index-mbeo62f8.js.map → index--_R7COnA.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{index-rLgoBCfV.js → index-BUol9HDD.js} +3 -3
  264. package/ccw/frontend/dist/assets/{index-rLgoBCfV.js.map → index-BUol9HDD.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{index-Bs80iCX0.js → index-CT9oykfw.js} +2 -2
  266. package/ccw/frontend/dist/assets/{index-Bs80iCX0.js.map → index-CT9oykfw.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js → index-Ddwvf87H.js} +2 -2
  268. package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js.map → index-Ddwvf87H.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js → layout-grid-LiX0qZbN.js} +2 -2
  270. package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js → lightbulb-CL3DVEwb.js} +2 -2
  272. package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js → link-2-CC5cFeq6.js} +2 -2
  274. package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js.map → link-2-CC5cFeq6.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{link-koEYiemK.js → link-ngFQ9bs0.js} +2 -2
  276. package/ccw/frontend/dist/assets/{link-koEYiemK.js.map → link-ngFQ9bs0.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{list-v2_GaLdC.js → list-BEU6I0KK.js} +2 -2
  278. package/ccw/frontend/dist/assets/{list-v2_GaLdC.js.map → list-BEU6I0KK.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js → map-pin-BWZdLA6y.js} +2 -2
  280. package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js.map → map-pin-BWZdLA6y.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js → messages-square-K6_Chm7n.js} +2 -2
  282. package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js.map → messages-square-K6_Chm7n.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js → minimize-2-CWkphauf.js} +2 -2
  284. package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js.map → minimize-2-CWkphauf.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/{package-CH3smL37.js → package-DrNgkamn.js} +2 -2
  286. package/ccw/frontend/dist/assets/{package-CH3smL37.js.map → package-DrNgkamn.js.map} +1 -1
  287. package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js → plug-CMo3sw5_.js} +2 -2
  288. package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js.map → plug-CMo3sw5_.js.map} +1 -1
  289. package/ccw/frontend/dist/assets/{power-F2A_J4l6.js → power-DppNTW5e.js} +2 -2
  290. package/ccw/frontend/dist/assets/{power-F2A_J4l6.js.map → power-DppNTW5e.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{save-Byxot0YU.js → save-CD8aPMbZ.js} +2 -2
  292. package/ccw/frontend/dist/assets/{save-Byxot0YU.js.map → save-CD8aPMbZ.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{send-JjqhUkpw.js → send-B4z90fQD.js} +2 -2
  294. package/ccw/frontend/dist/assets/{send-JjqhUkpw.js.map → send-B4z90fQD.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js → settings-2-CAKRU_QC.js} +2 -2
  296. package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js.map → settings-2-CAKRU_QC.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js → square-check-big-KhI3HrzX.js} +2 -2
  298. package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js → square-pen-BtdGIpuq.js} +2 -2
  300. package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js.map → square-pen-BtdGIpuq.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js → star-ZoBUkXoD.js} +2 -2
  302. package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js.map → star-ZoBUkXoD.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{style-CKs7nnn3.js → style-CltxQP-P.js} +2 -2
  304. package/ccw/frontend/dist/assets/{style-CKs7nnn3.js.map → style-CltxQP-P.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{target-DW5tsDW6.js → target-C32OUSGf.js} +2 -2
  306. package/ccw/frontend/dist/assets/{target-DW5tsDW6.js.map → target-C32OUSGf.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js → test-tube-0IxoyAVZ.js} +2 -2
  308. package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js → upload-4eKCkyBn.js} +2 -2
  310. package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js.map → upload-4eKCkyBn.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js → useApiSettings-zLTUWqhi.js} +2 -2
  312. package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js → useCli-BtN2vpOX.js} +2 -2
  314. package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js.map → useCli-BtN2vpOX.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js → useCommands-_spj49qL.js} +2 -2
  316. package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js.map → useCommands-_spj49qL.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js → useDebounce-Bm9KFZvd.js} +2 -2
  318. package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js → useFileExplorer-DOmpm6v9.js} +2 -2
  320. package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js → useLocale-D2rj4rea.js} +2 -2
  322. package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js.map → useLocale-D2rj4rea.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js → useSkills-OskEpomF.js} +3 -3
  324. package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js.map → useSkills-OskEpomF.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js → useSystemSettings-BjMgsNSF.js} +2 -2
  326. package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js → wand-sparkles-CLhyYWa7.js} +2 -2
  328. package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
  329. package/ccw/frontend/dist/index.html +1 -1
  330. package/ccw/scripts/prepublish-clean.mjs +0 -1
  331. package/package.json +1 -3
  332. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js +0 -150
  333. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +0 -1
  334. package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js +0 -7
  335. package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js.map +0 -1
  336. package/ccw-litellm/README.md +0 -180
  337. package/ccw-litellm/pyproject.toml +0 -35
  338. package/ccw-litellm/src/ccw_litellm/__init__.py +0 -47
  339. package/ccw-litellm/src/ccw_litellm/cli.py +0 -108
  340. package/ccw-litellm/src/ccw_litellm/clients/__init__.py +0 -12
  341. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +0 -270
  342. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +0 -198
  343. package/ccw-litellm/src/ccw_litellm/config/__init__.py +0 -22
  344. package/ccw-litellm/src/ccw_litellm/config/loader.py +0 -343
  345. package/ccw-litellm/src/ccw_litellm/config/models.py +0 -162
  346. package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +0 -14
  347. package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +0 -52
  348. package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +0 -45
@@ -0,0 +1,538 @@
1
+ # Phase 2: Test Cycle Execution (test-cycle-execute)
2
+
3
+ > **📌 COMPACT SENTINEL [Phase 5: Test-Cycle-Execute]**
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/05-test-cycle-execute.md")`
7
+
8
+ Execute test-fix workflow with dynamic task generation and iterative fix cycles until test pass rate >= 95% or max iterations reached. Uses @cli-planning-agent for failure analysis and task generation.
9
+
10
+ ## Objective
11
+
12
+ - Discover and load test session with generated tasks
13
+ - Execute initial task pipeline (IMPL-001 → 001.3 → 001.5 → 002)
14
+ - Run iterative fix loop with adaptive strategy engine
15
+ - Achieve pass rate >= 95% or exhaust max iterations
16
+ - Complete session with summary and post-expansion options
17
+
18
+ ## Quick Start
19
+
20
+ ```bash
21
+ # Execute test-fix workflow (auto-discovers active session)
22
+ /workflow-test-fix
23
+
24
+ # Resume interrupted session
25
+ /workflow-test-fix --resume-session="WFS-test-user-auth"
26
+
27
+ # Custom iteration limit (default: 10)
28
+ /workflow-test-fix --max-iterations=15
29
+ ```
30
+
31
+ **Quality Gate**: Test pass rate >= 95% (criticality-aware) or 100%
32
+ **Max Iterations**: 10 (default, adjustable)
33
+ **CLI Tools**: Gemini → Qwen → Codex (fallback chain)
34
+
35
+ ## Core Concept
36
+
37
+ Dynamic test-fix orchestrator with **adaptive task generation** based on runtime analysis.
38
+
39
+ **Orchestrator Boundary**: The orchestrator (this phase) is responsible ONLY for:
40
+ - Loop control and iteration tracking
41
+ - Strategy selection and threshold decisions
42
+ - Delegating analysis to @cli-planning-agent and execution to @test-fix-agent
43
+ - Reading results and making pass/fail decisions
44
+ - The orchestrator does NOT directly modify source code, run tests, or perform root cause analysis
45
+
46
+ **vs Standard Execute**:
47
+ - **Standard**: Pre-defined tasks → Execute sequentially → Done
48
+ - **Test-Cycle**: Initial tasks → **Test → Analyze failures → Generate fix tasks → Fix → Re-test** → Repeat until pass
49
+
50
+ ## Execution
51
+
52
+ ### Step 2.1: Discovery
53
+
54
+ Load session, tasks, and iteration state.
55
+
56
+ ```
57
+ 1. Discovery
58
+ └─ Load session, tasks, iteration state
59
+ ```
60
+
61
+ **For full-pipeline entry (from Phase 1-4)**: Use `testSessionId` passed from Phase 4.
62
+
63
+ **For direct entry (/workflow-test-fix)**:
64
+ - `--resume-session="WFS-xxx"` → Use specified session
65
+ - No args → Auto-discover active test session (find `.workflow/active/WFS-test-*`)
66
+
67
+ ### Step 2.2: Execute Initial Tasks
68
+
69
+ Execute the generated task pipeline sequentially:
70
+
71
+ ```
72
+ IMPL-001 (test-gen, @code-developer) →
73
+ IMPL-001.3 (code-validation, @test-fix-agent) →
74
+ IMPL-001.5 (test-quality-review, @test-fix-agent) →
75
+ IMPL-002 (test-fix, @test-fix-agent) →
76
+ Calculate pass_rate from test-results.json
77
+ ```
78
+
79
+ **Agent Invocation - @test-fix-agent** (execution):
80
+ ```javascript
81
+ Task(
82
+ subagent_type="test-fix-agent",
83
+ run_in_background=false,
84
+ description=`Execute ${task.meta.type}: ${task.title}`,
85
+ prompt=`
86
+ ## Task Objective
87
+ ${taskTypeObjective[task.meta.type]}
88
+
89
+ ## MANDATORY FIRST STEPS
90
+ 1. Read task JSON: ${session.task_json_path}
91
+ 2. Read iteration state: ${session.iteration_state_path}
92
+ 3. ${taskTypeSpecificReads[task.meta.type]}
93
+
94
+ ## CRITICAL: Syntax Check Priority
95
+ **Before any code modification or test execution:**
96
+ - Run project syntax checker (TypeScript: tsc --noEmit, ESLint, etc.)
97
+ - Verify zero syntax errors before proceeding
98
+ - If syntax errors found: Fix immediately before other work
99
+ - Syntax validation is MANDATORY gate - no exceptions
100
+
101
+ ## Session Paths
102
+ - Workflow Dir: ${session.workflow_dir}
103
+ - Task JSON: ${session.task_json_path}
104
+ - Test Results Output: ${session.test_results_path}
105
+ - Test Output Log: ${session.test_output_path}
106
+ - Iteration State: ${session.iteration_state_path}
107
+
108
+ ## Task Type: ${task.meta.type}
109
+ ${taskTypeGuidance[task.meta.type]}
110
+
111
+ ## Expected Deliverables
112
+ ${taskTypeDeliverables[task.meta.type]}
113
+
114
+ ## Success Criteria
115
+ - ${taskTypeSuccessCriteria[task.meta.type]}
116
+ - Update task status in task JSON
117
+ - Save all outputs to specified paths
118
+ - Report completion to orchestrator
119
+ `
120
+ )
121
+
122
+ // Task Type Configurations
123
+ const taskTypeObjective = {
124
+ "test-gen": "Generate comprehensive tests based on requirements",
125
+ "test-fix": "Execute test suite and report results with criticality assessment",
126
+ "test-fix-iteration": "Apply fixes from strategy and validate with tests"
127
+ };
128
+
129
+ const taskTypeSpecificReads = {
130
+ "test-gen": "Read test context: ${session.test_context_path}",
131
+ "test-fix": "Read previous results (if exists): ${session.test_results_path}",
132
+ "test-fix-iteration": "Read fix strategy: ${session.analysis_path}, fix history: ${session.fix_history_path}"
133
+ };
134
+
135
+ const taskTypeGuidance = {
136
+ "test-gen": `
137
+ - Read task.context.requirements for test scenarios
138
+ - Generate tests following existing patterns and framework conventions
139
+ `,
140
+ "test-fix": `
141
+ - Execute multi-layer test suite (follow your Layer-Aware Diagnosis spec)
142
+ - Save structured results to ${session.test_results_path}
143
+ - Apply criticality assessment per your spec (high/medium/low)
144
+ `,
145
+ "test-fix-iteration": `
146
+ - Load fix_strategy from task.context.fix_strategy
147
+ - Identify modification_points: ${task.context.fix_strategy.modification_points}
148
+ - Apply surgical fixes (minimal changes)
149
+ - Test execution mode: ${task.context.fix_strategy.test_execution.mode}
150
+ * affected_only: Run ${task.context.fix_strategy.test_execution.affected_tests}
151
+ * full_suite: Run complete test suite
152
+ - If failures persist: Document in test-results.json, DO NOT analyze (orchestrator handles)
153
+ `
154
+ };
155
+
156
+ const taskTypeDeliverables = {
157
+ "test-gen": "- Test files in target directories\n - Test coverage report\n - Summary in .summaries/",
158
+ "test-fix": "- test-results.json (pass_rate, criticality, failures)\n - test-output.log (full test output)\n - Summary in .summaries/",
159
+ "test-fix-iteration": "- Modified source files\n - test-results.json (updated pass_rate)\n - test-output.log\n - Summary in .summaries/"
160
+ };
161
+
162
+ const taskTypeSuccessCriteria = {
163
+ "test-gen": "All test files created, executable without errors, coverage documented",
164
+ "test-fix": "Test results saved with accurate pass_rate and criticality, all failures documented",
165
+ "test-fix-iteration": "Fixes applied per strategy, tests executed, results reported (pass/fail to orchestrator)"
166
+ };
167
+ ```
168
+
169
+ **Decision after IMPL-002 execution**:
170
+ ```
171
+ pass_rate = Read(test-results.json).pass_rate
172
+ ├─ 100% → SUCCESS: Proceed to Step 2.4 (Completion)
173
+ ├─ 95-99% + all failures low criticality → PARTIAL SUCCESS: Proceed to Step 2.4
174
+ └─ <95% or critical failures → Enter Step 2.3 (Fix Loop)
175
+ ```
176
+
177
+ ### Step 2.3: Iterative Fix Loop
178
+
179
+ **Conditional**: Only enters when pass_rate < 95% or critical failures exist.
180
+
181
+ #### Intelligent Strategy Engine
182
+
183
+ **Auto-selects optimal strategy based on iteration context:**
184
+
185
+ | Strategy | Trigger | Behavior |
186
+ |----------|---------|----------|
187
+ | **Conservative** | Iteration 1-2 (default) | Single targeted fix, full validation |
188
+ | **Aggressive** | Pass rate >80% + similar failures | Batch fix related issues |
189
+ | **Surgical** | Regression detected (pass rate drops >10%) | Minimal changes, rollback focus |
190
+
191
+ **Selection Logic** (in orchestrator):
192
+ ```javascript
193
+ if (iteration <= 2) return "conservative";
194
+ if (passRate > 80 && failurePattern.similarity > 0.7) return "aggressive";
195
+ if (regressionDetected) return "surgical";
196
+ return "conservative";
197
+ ```
198
+
199
+ **Integration**: Strategy passed to @cli-planning-agent in prompt for tailored analysis.
200
+
201
+ #### Progressive Testing
202
+
203
+ **Runs affected tests during iterations, full suite only for final validation.**
204
+
205
+ **How It Works**:
206
+ 1. @cli-planning-agent analyzes fix_strategy.modification_points
207
+ 2. Maps modified files to test files (via imports + integration patterns)
208
+ 3. Returns `affected_tests[]` in task JSON
209
+ 4. @test-fix-agent runs: `npm test -- ${affected_tests.join(' ')}`
210
+ 5. Final validation: `npm test` (full suite)
211
+
212
+ **Benefits**: 70-90% iteration speed improvement, instant feedback on fix effectiveness.
213
+
214
+ #### Orchestrator Runtime Calculations
215
+
216
+ **From iteration-state.json**:
217
+ - Current iteration: `iterations.length + 1`
218
+ - Stuck tests: Tests appearing in `failed_tests` for 3+ consecutive iterations
219
+ - Regression: Compare consecutive `pass_rate` values (>10% drop)
220
+ - Max iterations: Read from `task.meta.max_iterations`
221
+
222
+ #### Fix Loop Flow
223
+
224
+ ```
225
+ for each iteration (N = 1 to maxIterations):
226
+ 1. Detect: stuck tests, regression, progress trend
227
+ 2. Select strategy: conservative/aggressive/surgical
228
+ 3. Generate fix task via @cli-planning-agent
229
+ 4. Execute fix via @test-fix-agent
230
+ 5. Re-test → Calculate pass_rate
231
+ 6. Decision:
232
+ ├─ pass_rate >= 95% → EXIT loop → Step 2.4
233
+ ├─ regression detected → Rollback, switch to surgical
234
+ └─ continue → Next iteration
235
+ ```
236
+
237
+ #### Agent Invocation - @cli-planning-agent (failure analysis)
238
+
239
+ ```javascript
240
+ Task(
241
+ subagent_type="cli-planning-agent",
242
+ run_in_background=false,
243
+ description=`Analyze test failures (iteration ${N}) - ${strategy} strategy`,
244
+ prompt=`
245
+ ## Task Objective
246
+ Analyze test failures and generate fix task JSON for iteration ${N}
247
+
248
+ ## Strategy
249
+ ${selectedStrategy} - ${strategyDescription}
250
+
251
+ ## PROJECT CONTEXT (MANDATORY)
252
+ 1. Run: \`ccw spec load --category execution\` (tech stack, build system, constraints)
253
+ 2. Run: \`ccw spec load --category test\` (test framework, coverage targets, conventions)
254
+
255
+ ## MANDATORY FIRST STEPS
256
+ 1. Read test results: ${session.test_results_path}
257
+ 2. Read test output: ${session.test_output_path}
258
+ 3. Read iteration state: ${session.iteration_state_path}
259
+
260
+ ## Context Metadata (Orchestrator-Calculated)
261
+ - Session ID: ${sessionId} (from file path)
262
+ - Current Iteration: ${N} (= iterations.length + 1)
263
+ - Max Iterations: ${maxIterations} (from task.meta.max_iterations)
264
+ - Current Pass Rate: ${passRate}%
265
+ - Selected Strategy: ${selectedStrategy} (from iteration-state.json)
266
+ - Stuck Tests: ${stuckTests} (calculated from iterations[].failed_tests history)
267
+
268
+ ## CLI Configuration
269
+ - Tool Priority: gemini & codex
270
+ - Template: 01-diagnose-bug-root-cause.txt
271
+ - Timeout: 2400000ms
272
+
273
+ ## Expected Deliverables
274
+ 1. Task JSON: ${session.task_dir}/IMPL-fix-${N}.json
275
+ - Must include: fix_strategy.test_execution.affected_tests[]
276
+ - Must include: fix_strategy.confidence_score
277
+ 2. Analysis report: ${session.process_dir}/iteration-${N}-analysis.md
278
+ 3. CLI output: ${session.process_dir}/iteration-${N}-cli-output.txt
279
+
280
+ ## Strategy-Specific Requirements
281
+ - Conservative: Single targeted fix, high confidence required
282
+ - Aggressive: Batch fix similar failures, pattern-based approach
283
+ - Surgical: Minimal changes, focus on rollback safety
284
+
285
+ ## Success Criteria
286
+ - Concrete fix strategy with modification points (file:function:lines)
287
+ - Affected tests list for progressive testing
288
+ - Root cause analysis (not just symptoms)
289
+ `
290
+ )
291
+ ```
292
+
293
+ #### CLI Tool Configuration
294
+
295
+ **Fallback Chain**: Gemini → Qwen → Codex
296
+ **Template**: `~/.ccw/workflows/cli-templates/prompts/analysis/01-diagnose-bug-root-cause.txt`
297
+ **Timeout**: 40min (2400000ms)
298
+
299
+ **Tool Details**:
300
+ 1. **Gemini** (primary): `gemini-2.5-pro`
301
+ 2. **Qwen** (fallback): `coder-model`
302
+ 3. **Codex** (fallback): `gpt-5.1-codex`
303
+
304
+ **When to Fallback**: HTTP 429, timeout, analysis quality degraded
305
+
306
+ **CLI Fallback Triggers** (Gemini → Qwen → Codex → manual):
307
+
308
+ Fallback is triggered when any of these conditions occur:
309
+
310
+ 1. **Invalid Output**:
311
+ - CLI tool fails to generate valid `IMPL-fix-N.json` (JSON parse error)
312
+ - Missing required fields: `fix_strategy.modification_points` or `fix_strategy.affected_tests`
313
+
314
+ 2. **Low Confidence**:
315
+ - `fix_strategy.confidence_score < 0.4` (indicates uncertain analysis)
316
+
317
+ 3. **Technical Failures**:
318
+ - HTTP 429 (rate limit) or 5xx errors
319
+ - Timeout (exceeds 2400000ms / 40min)
320
+ - Connection errors
321
+
322
+ 4. **Quality Degradation**:
323
+ - Analysis report < 100 words (too brief, likely incomplete)
324
+ - No concrete modification points provided (only general suggestions)
325
+ - Same root cause identified 3+ consecutive times (stuck analysis)
326
+
327
+ **Fallback Sequence**:
328
+ - Try primary tool (Gemini)
329
+ - If trigger detected → Try fallback (Qwen)
330
+ - If trigger detected again → Try final fallback (Codex)
331
+ - If all fail → Mark as degraded, use basic pattern matching from fix-history.json, notify user
332
+
333
+ #### Iteration State JSON
334
+
335
+ **Purpose**: Persisted state machine for iteration loop - enables Resume and historical analysis.
336
+
337
+ ```json
338
+ {
339
+ "current_task": "IMPL-002",
340
+ "selected_strategy": "aggressive",
341
+ "next_action": "execute_fix_task",
342
+ "iterations": [
343
+ {
344
+ "iteration": 1,
345
+ "pass_rate": 70,
346
+ "strategy": "conservative",
347
+ "failed_tests": ["test_auth_flow", "test_user_permissions"]
348
+ },
349
+ {
350
+ "iteration": 2,
351
+ "pass_rate": 82,
352
+ "strategy": "conservative",
353
+ "failed_tests": ["test_user_permissions", "test_token_expiry"]
354
+ },
355
+ {
356
+ "iteration": 3,
357
+ "pass_rate": 89,
358
+ "strategy": "aggressive",
359
+ "failed_tests": ["test_auth_edge_case"]
360
+ }
361
+ ]
362
+ }
363
+ ```
364
+
365
+ **Field Descriptions**:
366
+ - `current_task`: Pointer to active task (essential for Resume)
367
+ - `selected_strategy`: Current iteration strategy (runtime state)
368
+ - `next_action`: State machine next step (`execute_fix_task` | `retest` | `complete`)
369
+ - `iterations[]`: Historical log of all iterations (source of truth for trends)
370
+
371
+ #### TodoWrite Update (Fix Loop)
372
+
373
+ ```javascript
374
+ TodoWrite({
375
+ todos: [
376
+ {
377
+ content: "Execute IMPL-001: Generate tests [code-developer]",
378
+ status: "completed",
379
+ activeForm: "Executing test generation"
380
+ },
381
+ {
382
+ content: "Execute IMPL-002: Test & Fix Cycle [ITERATION]",
383
+ status: "in_progress",
384
+ activeForm: "Running test-fix iteration cycle"
385
+ },
386
+ {
387
+ content: " → Iteration 1: Initial test (pass: 70%, conservative)",
388
+ status: "completed",
389
+ activeForm: "Running initial tests"
390
+ },
391
+ {
392
+ content: " → Iteration 2: Fix validation (pass: 82%, conservative)",
393
+ status: "completed",
394
+ activeForm: "Fixing validation issues"
395
+ },
396
+ {
397
+ content: " → Iteration 3: Batch fix auth (pass: 89%, aggressive)",
398
+ status: "in_progress",
399
+ activeForm: "Fixing authentication issues"
400
+ }
401
+ ]
402
+ });
403
+ ```
404
+
405
+ **Update Rules**:
406
+ - Add iteration item with: strategy, pass rate
407
+ - Mark completed after each iteration
408
+ - Update parent task when all complete
409
+
410
+ ### Step 2.4: Completion
411
+
412
+ #### Completion Conditions
413
+
414
+ **Full Success**:
415
+ - All tasks completed
416
+ - Pass rate === 100%
417
+ - Action: Auto-complete session
418
+
419
+ **Partial Success**:
420
+ - All tasks completed
421
+ - Pass rate >= 95% and < 100%
422
+ - All failures are "low" criticality
423
+ - Action: Auto-approve with review note
424
+
425
+ **Failure**:
426
+ - Max iterations (10) reached without 95% pass rate
427
+ - Pass rate < 95% after max iterations
428
+ - Action: Generate failure report, mark blocked, return to user
429
+
430
+ #### Commit Strategy
431
+
432
+ **Automatic Commits** (orchestrator-managed):
433
+
434
+ The orchestrator automatically creates git commits at key checkpoints to enable safe rollback:
435
+
436
+ 1. **After Successful Iteration** (pass rate increased):
437
+ ```bash
438
+ git add .
439
+ git commit -m "test-cycle: iteration ${N} - ${strategy} strategy (pass: ${oldRate}% → ${newRate}%)"
440
+ ```
441
+
442
+ 2. **Before Rollback** (regression detected):
443
+ ```bash
444
+ # Current state preserved, then:
445
+ git revert HEAD
446
+ git commit -m "test-cycle: rollback iteration ${N} - regression detected (pass: ${newRate}% < ${oldRate}%)"
447
+ ```
448
+
449
+ **Commit Content**:
450
+ - Modified source files from fix application
451
+ - Updated test-results.json, iteration-state.json
452
+ - Excludes: temporary files, logs
453
+
454
+ **Benefits**:
455
+ - Each successful iteration is a safe rollback point
456
+ - Regression detection can instantly revert to last known-good state
457
+ - Full iteration history visible in git log for post-mortem analysis
458
+ - No manual intervention needed for rollback — orchestrator handles automatically
459
+
460
+ #### Post-Completion Expansion
461
+
462
+ **Auto-sync**: 执行 `/workflow:session:sync -y "{summary}"` 更新 specs/*.md + project-tech。
463
+
464
+ 完成后询问用户是否扩展为issue(test/enhance/refactor/doc),选中项调用 `/issue:new "{summary} - {dimension}"`
465
+
466
+ ## Agent Roles Summary
467
+
468
+ | Agent | Responsibility |
469
+ |-------|---------------|
470
+ | **Orchestrator** | Loop control, strategy selection, pass rate calculation, threshold decisions |
471
+ | **@cli-planning-agent** | CLI analysis (Gemini/Qwen/Codex), root cause extraction, task generation, affected test detection |
472
+ | **@test-fix-agent** | Test execution, code fixes, criticality assignment, result reporting |
473
+
474
+ **Core Responsibilities (Detailed)**:
475
+
476
+ - **Orchestrator** (this skill):
477
+ - Loop control: iteration count, max iterations enforcement, exit conditions
478
+ - Strategy selection based on iteration context (conservative → aggressive → surgical)
479
+ - Pass rate calculation from test-results.json after each iteration
480
+ - Threshold decisions: 95% gate, criticality-aware partial success
481
+ - Commit management: auto-commit on improvement, rollback on regression
482
+ - Regression detection: compare consecutive pass_rate values (>10% drop triggers surgical)
483
+ - Stuck test tracking: tests failing 3+ consecutive iterations flagged for alternative strategy
484
+
485
+ - **@cli-planning-agent** (failure analysis):
486
+ - Execute CLI tools (Gemini/Qwen/Codex) with fallback chain for root cause analysis
487
+ - Extract concrete modification points (file:function:lines) from analysis
488
+ - Generate fix task JSON (IMPL-fix-N.json) with fix_strategy and confidence_score
489
+ - Detect affected tests for progressive testing (map modified files → test files)
490
+ - Apply strategy-specific analysis (conservative: single fix, aggressive: batch, surgical: minimal)
491
+
492
+ - **@test-fix-agent** (execution):
493
+ - Execute test suite and capture pass/fail counts, error messages, stack traces
494
+ - Apply code fixes per fix_strategy.modification_points (surgical, minimal changes)
495
+ - Assess criticality for each failure (high/medium/low based on impact)
496
+ - Report structured results to test-results.json with pass_rate and failure details
497
+ - Validate syntax before any code modification (TypeScript: tsc --noEmit, ESLint)
498
+
499
+ ## Error Handling
500
+
501
+ | Scenario | Action |
502
+ |----------|--------|
503
+ | Test execution error | Log, retry with error context |
504
+ | CLI analysis failure | Fallback: Gemini → Qwen → Codex → manual |
505
+ | Agent execution error | Save state, retry with simplified context |
506
+ | Max iterations reached | Generate failure report, mark blocked |
507
+ | Regression detected | Rollback last fix, switch to surgical strategy |
508
+ | Stuck tests detected | Continue with alternative strategy, document in failure report |
509
+
510
+ ## Session File Structure
511
+
512
+ ```
513
+ .workflow/active/WFS-test-{session}/
514
+ ├── workflow-session.json # Session metadata
515
+ ├── IMPL_PLAN.md, TODO_LIST.md
516
+ ├── .task/
517
+ │ ├── IMPL-{001,002}.json # Initial tasks
518
+ │ └── IMPL-fix-{N}.json # Generated fix tasks
519
+ ├── .process/
520
+ │ ├── iteration-state.json # Current iteration + strategy + stuck tests
521
+ │ ├── test-results.json # Latest results (pass_rate, criticality)
522
+ │ ├── test-output.log # Full test output
523
+ │ ├── fix-history.json # All fix attempts
524
+ │ ├── iteration-{N}-analysis.md # CLI analysis report
525
+ │ └── iteration-{N}-cli-output.txt
526
+ └── .summaries/iteration-summaries/
527
+ ```
528
+
529
+ ## Output
530
+
531
+ - **Variable**: `finalPassRate` (percentage)
532
+ - **File**: `test-results.json` (final results)
533
+ - **File**: `iteration-state.json` (full iteration history)
534
+ - **TodoWrite**: Mark Phase 5 completed
535
+
536
+ ## Next Phase
537
+
538
+ Return to orchestrator. Workflow complete. Offer post-completion expansion options.
@@ -0,0 +1,47 @@
1
+ # Auto Mode Specification
2
+
3
+ When user passes `-y` or `--yes` in arguments, the entire CCW chain enters auto mode.
4
+
5
+ ## Detection
6
+
7
+ ```javascript
8
+ const autoYes = /\b(-y|--yes)\b/.test($ARGUMENTS)
9
+ ```
10
+
11
+ ## Behavior Changes
12
+
13
+ | Phase | Normal Mode | Auto Mode |
14
+ |-------|-------------|-----------|
15
+ | Phase 1 (Analyze) | Full analysis | Same |
16
+ | Phase 1.5 (Clarify) | Ask if clarity < 2 | **Skip** — infer from available info |
17
+ | Phase 3 (Confirm) | Show pipeline, ask confirm | **Skip** — execute immediately |
18
+ | Phase 5 (Execute) | Error → ask retry/skip/abort | **Skip** failed step, continue |
19
+ | Skill Args | As-is | **Inject** `-y` to all downstream Skills |
20
+
21
+ ## Propagation Mechanism
22
+
23
+ The `-y` flag is propagated to every Skill in the command chain via `assembleCommand`:
24
+
25
+ ```javascript
26
+ function assembleCommand(step, previousResult) {
27
+ let args = step.args || '';
28
+ if (!args && previousResult?.session_id) {
29
+ args = `--session="${previousResult.session_id}"`;
30
+ }
31
+ // Propagate -y to downstream Skills
32
+ if (autoYes && !args.includes('-y') && !args.includes('--yes')) {
33
+ args = args ? `${args} -y` : '-y';
34
+ }
35
+ return { skill: step.cmd, args };
36
+ }
37
+ ```
38
+
39
+ ## Examples
40
+
41
+ ```bash
42
+ # Auto mode — skip all confirmations
43
+ /ccw -y "Add user authentication"
44
+
45
+ # Auto mode — urgent hotfix, skip everything
46
+ /ccw --yes "Fix memory leak in WebSocket handler"
47
+ ```
@@ -0,0 +1,60 @@
1
+ # Intent Detection Patterns
2
+
3
+ Complete reference for task_type pattern matching used in Phase 1.
4
+
5
+ ## Pattern Priority Order
6
+
7
+ Patterns are matched in this order — first match wins.
8
+
9
+ | # | task_type | Regex Pattern | Category | Level |
10
+ |---|-----------|--------------|----------|-------|
11
+ | 1 | `bugfix-hotfix` | `(urgent\|production\|critical)` AND `(fix\|bug)` | Lightweight | 2 |
12
+ | 2 | `greenfield` | `从零开始\|from scratch\|0.*to.*1\|greenfield\|全新.*开发\|新项目\|new project\|build.*from.*ground` | Exploration | 3-4 |
13
+ | 3 | `brainstorm` | `brainstorm\|ideation\|头脑风暴\|创意\|发散思维\|creative thinking\|multi-perspective.*think\|compare perspectives\|探索.*可能` | Exploration | 4 |
14
+ | 4 | `brainstorm-to-issue` | `brainstorm.*issue\|头脑风暴.*issue\|idea.*issue\|想法.*issue\|从.*头脑风暴\|convert.*brainstorm` | Issue | 4 |
15
+ | 5 | `debug-file` | `debug.*document\|hypothesis.*debug\|troubleshoot.*track\|investigate.*log\|调试.*记录\|假设.*验证\|systematic debug\|深度调试` | With-File | 3 |
16
+ | 6 | `analyze-file` | `analyze.*document\|explore.*concept\|understand.*architecture\|investigate.*discuss\|collaborative analysis\|分析.*讨论\|深度.*理解\|协作.*分析` | With-File | 3 |
17
+ | 7 | `collaborative-plan` | `collaborative.*plan\|协作.*规划\|多人.*规划\|multi.*agent.*plan\|Plan Note\|分工.*规划` | With-File | 3 |
18
+ | 8 | `roadmap` | `roadmap\|路线.*图` | With-File | 4 |
19
+ | 9 | `spec-driven` | `spec.*gen\|specification\|PRD\|产品需求\|产品文档\|产品规格` | Exploration | 4 |
20
+ | 10 | `integration-test` | `integration.*test\|集成测试\|端到端.*测试\|e2e.*test\|integration.*cycle` | Cycle | 3 |
21
+ | 11 | `refactor` | `refactor\|重构\|tech.*debt\|技术债务` | Cycle | 3 |
22
+ | 12 | `team-planex` | `team.*plan.*exec\|team.*planex\|团队.*规划.*执行\|并行.*规划.*执行\|wave.*pipeline` | Team | Team |
23
+ | 13 | `multi-cli` | `multi.*cli\|多.*CLI\|多模型.*协作\|multi.*model.*collab` | Standard | 3 |
24
+ | 14 | `bugfix` | `fix\|bug\|error\|crash\|fail\|debug` | Lightweight | 2 |
25
+ | 15 | `issue-batch` | `(issues?\|batch)` AND `(fix\|resolve)` | Issue | Issue |
26
+ | 16 | `issue-transition` | `issue workflow\|structured workflow\|queue\|multi-stage` | Issue | 2.5 |
27
+ | 17 | `exploration` | `uncertain\|explore\|research\|what if` | Exploration | 4 |
28
+ | 18 | `quick-task` | `(quick\|simple\|small)` AND `(feature\|function)` | Lightweight | 2 |
29
+ | 19 | `ui-design` | `ui\|design\|component\|style` | Standard/Exploration | 3-4 |
30
+ | 20 | `tdd` | `tdd\|test-driven\|test first` | Standard | 3 |
31
+ | 21 | `test-fix` | `test fail\|fix test\|failing test` | Standard | 3 |
32
+ | 22 | `test-gen` | `generate test\|写测试\|add test\|补充测试` | Standard | 3 |
33
+ | 23 | `review` | `review\|code review` | Standard | 3 |
34
+ | 24 | `documentation` | `docs\|documentation\|readme` | Lightweight | 2 |
35
+ | — | `feature` | (default) | Lightweight/Standard | 2-3 |
36
+
37
+ ## Complexity-Dependent Routing
38
+
39
+ Some task_types route differently based on complexity:
40
+
41
+ | task_type | Low | Medium | High |
42
+ |-----------|-----|--------|------|
43
+ | `feature` | Lightweight (rapid) | Lightweight (rapid) | Standard (coupled) |
44
+ | `greenfield` | Exploration (brainstorm-to-plan) | Exploration (greenfield-plan) | Exploration (greenfield-phased) |
45
+ | `ui-design` | Standard (ui) | Standard (ui) | Exploration (ui) |
46
+
47
+ ## Example Inputs → Detected Types
48
+
49
+ | Input | Detected task_type | Category |
50
+ |-------|-------------------|----------|
51
+ | "Add API endpoint" | feature (low) | Lightweight |
52
+ | "Fix login timeout" | bugfix | Lightweight |
53
+ | "从零开始: 用户系统" | greenfield | Exploration |
54
+ | "头脑风暴: 通知系统" | brainstorm | Exploration |
55
+ | "深度调试 WebSocket" | debug-file | With-File |
56
+ | "协作分析: 认证架构" | analyze-file | With-File |
57
+ | "roadmap: OAuth + 2FA" | roadmap | With-File |
58
+ | "集成测试: 支付流程" | integration-test | Cycle |
59
+ | "重构 auth 模块" | refactor | Cycle |
60
+ | "OAuth2 system" (high) | feature (high) | Standard |