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.
- package/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +2 -2
- package/.ccw/workflows/cli-templates/schemas/task-schema.json +14 -7
- package/.claude/agents/action-planning-agent.md +7 -4
- package/.claude/agents/cli-explore-agent.md +77 -63
- package/.claude/agents/cli-lite-planning-agent.md +11 -10
- package/.claude/agents/issue-plan-agent.md +421 -426
- package/.claude/commands/workflow/spec/setup.md +1 -1
- package/.claude/skills/ccw-chain/SKILL.md +119 -0
- package/.claude/skills/ccw-chain/chains/ccw-cycle.json +21 -0
- package/.claude/skills/ccw-chain/chains/ccw-exploration.json +47 -0
- package/.claude/skills/ccw-chain/chains/ccw-issue.json +33 -0
- package/.claude/skills/ccw-chain/chains/ccw-lightweight.json +57 -0
- package/.claude/skills/ccw-chain/chains/ccw-main.json +52 -0
- package/.claude/skills/ccw-chain/chains/ccw-standard.json +39 -0
- package/.claude/skills/ccw-chain/chains/ccw-team.json +10 -0
- package/.claude/skills/ccw-chain/chains/ccw-with-file.json +31 -0
- package/.claude/skills/ccw-chain/phases/analyze-with-file.md +788 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/SKILL.md +408 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/01-mode-routing.md +207 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/02-artifacts.md +567 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/03-role-analysis.md +748 -0
- package/.claude/skills/ccw-chain/phases/brainstorm/phases/04-synthesis.md +827 -0
- package/.claude/skills/ccw-chain/phases/brainstorm-with-file.md +482 -0
- package/.claude/skills/ccw-chain/phases/collaborative-plan-with-file.md +639 -0
- package/.claude/skills/ccw-chain/phases/debug-with-file.md +656 -0
- package/.claude/skills/ccw-chain/phases/integration-test-cycle.md +936 -0
- package/.claude/skills/ccw-chain/phases/issue-convert-to-plan.md +720 -0
- package/.claude/skills/ccw-chain/phases/issue-discover.md +483 -0
- package/.claude/skills/ccw-chain/phases/issue-execute.md +629 -0
- package/.claude/skills/ccw-chain/phases/issue-from-brainstorm.md +382 -0
- package/.claude/skills/ccw-chain/phases/issue-plan.md +343 -0
- package/.claude/skills/ccw-chain/phases/issue-queue.md +464 -0
- package/.claude/skills/ccw-chain/phases/refactor-cycle.md +852 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/SKILL.md +132 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-fix.md +760 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-module.md +764 -0
- package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-session.md +775 -0
- package/.claude/skills/ccw-chain/phases/roadmap-with-file.md +544 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/SKILL.md +338 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-5-requirement-clarification.md +404 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-discovery.md +257 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/02-product-brief.md +274 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/03-requirements.md +184 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/04-architecture.md +248 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/05-epics-stories.md +178 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-5-auto-fix.md +144 -0
- package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-readiness-check.md +480 -0
- package/.claude/skills/ccw-chain/phases/team-planex.md +123 -0
- package/.claude/skills/ccw-chain/phases/ui-design-explore-auto.md +678 -0
- package/.claude/skills/ccw-chain/phases/unified-execute-with-file.md +870 -0
- package/.claude/skills/ccw-chain/phases/workflow-execute/SKILL.md +625 -0
- package/.claude/skills/ccw-chain/phases/workflow-execute/phases/06-review.md +215 -0
- package/.claude/skills/ccw-chain/phases/workflow-lite-plan.md +616 -0
- package/.claude/skills/ccw-chain/phases/workflow-multi-cli-plan.md +424 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/SKILL.md +466 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/01-session-discovery.md +99 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/02-context-gathering.md +338 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/03-conflict-resolution.md +422 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/04-task-generation.md +440 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/05-plan-verify.md +395 -0
- package/.claude/skills/ccw-chain/phases/workflow-plan/phases/06-replan.md +594 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/SKILL.md +527 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/01-session-discovery.md +57 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/02-context-gathering.md +407 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/03-test-coverage-analysis.md +172 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/05-tdd-task-generation.md +473 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/06-tdd-structure-validation.md +189 -0
- package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/07-tdd-verify.md +635 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/SKILL.md +482 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/01-session-start.md +60 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/02-test-context-gather.md +493 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/03-test-concept-enhanced.md +150 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/04-test-task-generate.md +346 -0
- package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/05-test-cycle-execute.md +538 -0
- package/.claude/skills/ccw-chain/specs/auto-mode.md +47 -0
- package/.claude/skills/ccw-chain/specs/intent-patterns.md +60 -0
- package/.claude/skills/chain-loader/SKILL.md +78 -0
- package/.claude/skills/chain-loader/phases/01-analyze-skill.md +53 -0
- package/.claude/skills/chain-loader/phases/02-design-graph.md +73 -0
- package/.claude/skills/chain-loader/phases/03-generate-validate.md +75 -0
- package/.claude/skills/chain-loader/specs/chain-schema.md +99 -0
- package/.claude/skills/chain-loader/specs/design-patterns.md +99 -0
- package/.claude/skills/chain-loader/templates/chain-json.md +63 -0
- package/.claude/skills/review-cycle/phases/review-module.md +764 -764
- package/.claude/skills/review-cycle/phases/review-session.md +775 -775
- package/.claude/skills/workflow-multi-cli-plan/SKILL.md +2 -2
- package/.claude/skills/workflow-plan/phases/03-conflict-resolution.md +422 -422
- package/.claude/skills/workflow-plan/phases/05-plan-verify.md +395 -395
- package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +407 -407
- package/.claude/skills/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -426
- package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +493 -493
- package/.codex/skills/brainstorm/SKILL.md +3 -3
- package/.codex/skills/clean/SKILL.md +3 -3
- package/.codex/skills/issue-discover/SKILL.md +13 -13
- package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
- package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
- package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
- package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
- package/.codex/skills/review-cycle/SKILL.md +10 -10
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
- package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
- package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
- package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
- package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
- package/.codex/skills/spec-generator/README.md +1 -1
- package/.codex/skills/spec-generator/SKILL.md +184 -88
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
- package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
- package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
- package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
- package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
- package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
- package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
- package/.codex/skills/spec-setup/SKILL.md +4 -4
- package/.codex/skills/workflow-plan/SKILL.md +6 -6
- package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
- package/README.md +14 -0
- package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.js +0 -23
- package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
- package/ccw/dist/tools/chain-loader.d.ts +10 -0
- package/ccw/dist/tools/chain-loader.d.ts.map +1 -0
- package/ccw/dist/tools/chain-loader.js +642 -0
- package/ccw/dist/tools/chain-loader.js.map +1 -0
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +2 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/json-builder.js +20 -0
- package/ccw/dist/tools/json-builder.js.map +1 -1
- package/ccw/dist/types/chain-types.d.ts +72 -0
- package/ccw/dist/types/chain-types.d.ts.map +1 -0
- package/ccw/dist/types/chain-types.js +5 -0
- package/ccw/dist/types/chain-types.js.map +1 -0
- package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js → AlertDialog-exlTDW81.js} +3 -3
- package/ccw/frontend/dist/assets/{AlertDialog-BjP1ydDR.js.map → AlertDialog-exlTDW81.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js → AnalysisPage-cgV9LfAI.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-CAX3xqMf.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CtWlmztq.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js → CliModeToggle-Be9xsPiv.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-hR4a-eLX.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-DzNPkFN9.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js → CliViewerPage-BrE-oyEq.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-BPEGN4TT.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js → CodexLensPage-Cd3nrC93.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Cf0r2RHY.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js → Collapsible-DXFl3VKF.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-DEm1rJ4h.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-BpeWw8HO.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js → DeepWikiPage-CpDxtmRX.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-BEsmh2vF.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js → EndpointsPage-BchjWe7s.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-B30SFdtU.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js → ExplorerPage-CbWvaJ0y.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-BVvMpg1O.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js → FixSessionPage-YMjVRiCk.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CL73dHbh.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-BL-28lMZ.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js → FloatingPanel-BtqzqDVq.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-BzZDciHZ.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
- package/ccw/frontend/dist/assets/{GraphExplorerPage-CDp6-d8P.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js → HistoryPage-BuWpQ7k5.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-fZY_7O9n.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js → HookManagerPage-D0BtMIWy.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-4LJeC9bq.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js → InstallationsPage-C7dwsAKG.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage-Bpigrbhw.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js → IssueHubPage-D0nCNaeB.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-BP0zJc1R.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSt2oVKQ.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js → McpManagerPage-C-S5CehM.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-B-xaMA0w.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js → MemoryPage-P_B0JVUQ.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-CJqo_7DY.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js → NotFoundPage-S4Jn9LUE.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-ibZeQA-Y.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-DgJ4ctPQ.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-Cit0Yq0D.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js → PromptHistoryPage-YEMjFARX.js} +3 -3
- package/ccw/frontend/dist/assets/{PromptHistoryPage-Ce1HDIK0.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js → ReviewSessionPage-DnTm55nG.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-J1KikNrk.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js → RulesManagerPage-CUwebtO2.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-CdBjTmth.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-B9ZK7LvX.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js → SessionsPage-BpgP4087.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-CW_nS5UR.js.map → SessionsPage-BpgP4087.js.map} +1 -1
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-DJpi9XQL.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js → Switch-CYSPdqWk.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-Ac6Ov7uy.js.map → Switch-CYSPdqWk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js → TabsNavigation-CPh6Zor1.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-DZAAspqR.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js → TaskDrawer-Ds-8830B.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-BJkwfhIZ.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js → TeamPage-CJODUxBk.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-BJgjxBgb.js.map → TeamPage-CJODUxBk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-D1WekoOy.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-DxemgIhF.js → archive-CjwVpw6k.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-DxemgIhF.js.map → archive-CjwVpw6k.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js → archive-restore-2vZa9Ic3.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-CjS83f1V.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js → arrow-right-CUU5XDgT.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-B5PUcn8I.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-DCc9aPbb.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-DOwFtzak.js → bot-BwpSRDUa.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-DOwFtzak.js.map → bot-BwpSRDUa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-96qH3aFh.js → braces-DBzUW1XC.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-96qH3aFh.js.map → braces-DBzUW1XC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js → circle-stop-CGNNsjvE.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-CCxSuil1.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js → cpu-D27G86Ul.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-CZNSJFdq.js.map → cpu-D27G86Ul.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-h8xtvw2_.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js → eye-C6MOB7Au.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-D3NY0bm6.js.map → eye-C6MOB7Au.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js → eye-off-BxfBlZ26.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-Cy2vkc8p.js.map → eye-off-BxfBlZ26.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js → file-json-NI237wA-.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-Bzq3U1Mx.js.map → file-json-NI237wA-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js → file-text-Byn2_2v6.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DwuwPDPi.js.map → file-text-Byn2_2v6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-q9g-bknU.js → filter-D-7PhZjx.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-q9g-bknU.js.map → filter-D-7PhZjx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-CL6vb42J.js → folder-BoAsK_FL.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-CL6vb42J.js.map → folder-BoAsK_FL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js → gauge-DCSxJIS4.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-BkrcQBly.js.map → gauge-DCSxJIS4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js → globe-CHS3prza.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BQbwyNeV.js.map → globe-CHS3prza.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js → grid-3x3-D7K35U7S.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-x5_7DrN7.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js → hard-drive-eq9xE07G.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-DTyWXwzf.js.map → hard-drive-eq9xE07G.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-80O0kJO7.js → hash-C1DMpBua.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-80O0kJO7.js.map → hash-C1DMpBua.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js → history-Di5SBCY-.js} +2 -2
- package/ccw/frontend/dist/assets/{history-DDlN2Bwa.js.map → history-Di5SBCY-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-mbeo62f8.js → index--_R7COnA.js} +2 -2
- package/ccw/frontend/dist/assets/{index-mbeo62f8.js.map → index--_R7COnA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-rLgoBCfV.js → index-BUol9HDD.js} +3 -3
- package/ccw/frontend/dist/assets/{index-rLgoBCfV.js.map → index-BUol9HDD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Bs80iCX0.js → index-CT9oykfw.js} +2 -2
- package/ccw/frontend/dist/assets/{index-Bs80iCX0.js.map → index-CT9oykfw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js → index-Ddwvf87H.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B9A3Hnrk.js.map → index-Ddwvf87H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js → layout-grid-LiX0qZbN.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-C1niOWJx.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js → lightbulb-CL3DVEwb.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-BTmI7SUg.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js → link-2-CC5cFeq6.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-CB9HKeuZ.js.map → link-2-CC5cFeq6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-koEYiemK.js → link-ngFQ9bs0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-koEYiemK.js.map → link-ngFQ9bs0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-v2_GaLdC.js → list-BEU6I0KK.js} +2 -2
- package/ccw/frontend/dist/assets/{list-v2_GaLdC.js.map → list-BEU6I0KK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js → map-pin-BWZdLA6y.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-BQNfAqG_.js.map → map-pin-BWZdLA6y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js → messages-square-K6_Chm7n.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-Dzq5LGg9.js.map → messages-square-K6_Chm7n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js → minimize-2-CWkphauf.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-CtkoJXcz.js.map → minimize-2-CWkphauf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-CH3smL37.js → package-DrNgkamn.js} +2 -2
- package/ccw/frontend/dist/assets/{package-CH3smL37.js.map → package-DrNgkamn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js → plug-CMo3sw5_.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-CZ0aL_yF.js.map → plug-CMo3sw5_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-F2A_J4l6.js → power-DppNTW5e.js} +2 -2
- package/ccw/frontend/dist/assets/{power-F2A_J4l6.js.map → power-DppNTW5e.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-Byxot0YU.js → save-CD8aPMbZ.js} +2 -2
- package/ccw/frontend/dist/assets/{save-Byxot0YU.js.map → save-CD8aPMbZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-JjqhUkpw.js → send-B4z90fQD.js} +2 -2
- package/ccw/frontend/dist/assets/{send-JjqhUkpw.js.map → send-B4z90fQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js → settings-2-CAKRU_QC.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2--SuN9rAt.js.map → settings-2-CAKRU_QC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js → square-check-big-KhI3HrzX.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-BbngGB2h.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js → square-pen-BtdGIpuq.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-CgrHgZSl.js.map → square-pen-BtdGIpuq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js → star-ZoBUkXoD.js} +2 -2
- package/ccw/frontend/dist/assets/{star-BU3TQr7Z.js.map → star-ZoBUkXoD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-CKs7nnn3.js → style-CltxQP-P.js} +2 -2
- package/ccw/frontend/dist/assets/{style-CKs7nnn3.js.map → style-CltxQP-P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-DW5tsDW6.js → target-C32OUSGf.js} +2 -2
- package/ccw/frontend/dist/assets/{target-DW5tsDW6.js.map → target-C32OUSGf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js → test-tube-0IxoyAVZ.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-BHm7w3ON.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js → upload-4eKCkyBn.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-DYR7PWwt.js.map → upload-4eKCkyBn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js → useApiSettings-zLTUWqhi.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D0TVgQD_.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js → useCli-BtN2vpOX.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-DfY8mAP8.js.map → useCli-BtN2vpOX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js → useCommands-_spj49qL.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-CGusDp0F.js.map → useCommands-_spj49qL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js → useDebounce-Bm9KFZvd.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-CIwh0fF1.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js → useFileExplorer-DOmpm6v9.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-FMyFv39K.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js → useLocale-D2rj4rea.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-B2qhsoTb.js.map → useLocale-D2rj4rea.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js → useSkills-OskEpomF.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-cxKXMBm3.js.map → useSkills-OskEpomF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js → useSystemSettings-BjMgsNSF.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-B-xUT_z-.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js → wand-sparkles-CLhyYWa7.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-DZV_3lPr.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/ccw/scripts/prepublish-clean.mjs +0 -1
- package/package.json +1 -3
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js +0 -150
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +0 -1
- package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js +0 -7
- package/ccw/frontend/dist/assets/SkillsManagerPage-CTnWrrwp.js.map +0 -1
- package/ccw-litellm/README.md +0 -180
- package/ccw-litellm/pyproject.toml +0 -35
- package/ccw-litellm/src/ccw_litellm/__init__.py +0 -47
- package/ccw-litellm/src/ccw_litellm/cli.py +0 -108
- package/ccw-litellm/src/ccw_litellm/clients/__init__.py +0 -12
- package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +0 -270
- package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +0 -198
- package/ccw-litellm/src/ccw_litellm/config/__init__.py +0 -22
- package/ccw-litellm/src/ccw_litellm/config/loader.py +0 -343
- package/ccw-litellm/src/ccw_litellm/config/models.py +0 -162
- package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +0 -14
- package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +0 -52
- package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +0 -45
|
@@ -1,395 +1,395 @@
|
|
|
1
|
-
# Phase 5: Plan Verification
|
|
2
|
-
|
|
3
|
-
Perform READ-ONLY verification analysis between IMPL_PLAN.md, task JSONs, and brainstorming artifacts. Generates structured report with quality gate recommendation. Does NOT modify any source files.
|
|
4
|
-
|
|
5
|
-
## Objective
|
|
6
|
-
|
|
7
|
-
- Generate comprehensive verification report identifying inconsistencies, duplications, ambiguities
|
|
8
|
-
- Produce quality gate recommendation (BLOCK_EXECUTION / PROCEED_WITH_FIXES / PROCEED_WITH_CAUTION / PROCEED)
|
|
9
|
-
- Route to next action based on quality gate result
|
|
10
|
-
|
|
11
|
-
## Entry Points
|
|
12
|
-
|
|
13
|
-
- **From Plan Mode**: After Phase 4 completes, user selects "Verify Plan Quality"
|
|
14
|
-
- **From Verify Mode**: Directly triggered via `workflow-plan` skill (plan-verify phase)
|
|
15
|
-
|
|
16
|
-
## User Input
|
|
17
|
-
|
|
18
|
-
```text
|
|
19
|
-
$ARGUMENTS
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
You **MUST** consider the user input before proceeding (if not empty).
|
|
23
|
-
|
|
24
|
-
## Operating Constraints
|
|
25
|
-
|
|
26
|
-
**STRICTLY READ-ONLY FOR SOURCE ARTIFACTS**:
|
|
27
|
-
- **MUST NOT** modify `IMPL_PLAN.md`, any `task.json` files, or brainstorming artifacts
|
|
28
|
-
- **MUST NOT** create or delete task files
|
|
29
|
-
- **MUST ONLY** write the verification report to `.process/PLAN_VERIFICATION.md`
|
|
30
|
-
|
|
31
|
-
**Synthesis Authority**: The `role analysis documents` are **authoritative** for requirements and design decisions. Any conflicts between IMPL_PLAN/tasks and synthesis are automatically CRITICAL and require adjustment of the plan/tasks—not reinterpretation of requirements.
|
|
32
|
-
|
|
33
|
-
**Quality Gate Authority**: The verification report provides a binding recommendation based on objective severity criteria. User MUST review critical/high issues before proceeding with implementation.
|
|
34
|
-
|
|
35
|
-
## Execution
|
|
36
|
-
|
|
37
|
-
### Step 5.0: Load Validation Context
|
|
38
|
-
|
|
39
|
-
Run `ccw spec load --category validation` for verification rules and acceptance criteria.
|
|
40
|
-
|
|
41
|
-
### Step 5.1: Initialize Analysis Context
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# Detect active workflow session
|
|
45
|
-
IF --session parameter provided:
|
|
46
|
-
session_id = provided session
|
|
47
|
-
ELSE:
|
|
48
|
-
# Auto-detect active session
|
|
49
|
-
active_sessions = bash(find .workflow/active/ -name "WFS-*" -type d 2>/dev/null)
|
|
50
|
-
IF active_sessions is empty:
|
|
51
|
-
ERROR: "No active workflow session found. Use --session <session-id>"
|
|
52
|
-
EXIT
|
|
53
|
-
ELSE IF active_sessions has multiple entries:
|
|
54
|
-
# Use most recently modified session
|
|
55
|
-
session_id = bash(ls -td .workflow/active/WFS-*/ 2>/dev/null | head -1 | xargs basename)
|
|
56
|
-
ELSE:
|
|
57
|
-
session_id = basename(active_sessions[0])
|
|
58
|
-
|
|
59
|
-
# Derive absolute paths
|
|
60
|
-
session_dir = .workflow/active/WFS-{session}
|
|
61
|
-
brainstorm_dir = session_dir/.brainstorming
|
|
62
|
-
task_dir = session_dir/.task
|
|
63
|
-
process_dir = session_dir/.process
|
|
64
|
-
session_file = session_dir/workflow-session.json
|
|
65
|
-
|
|
66
|
-
# Create .process directory if not exists (report output location)
|
|
67
|
-
IF NOT EXISTS(process_dir):
|
|
68
|
-
bash(mkdir -p "{process_dir}")
|
|
69
|
-
|
|
70
|
-
# Validate required artifacts
|
|
71
|
-
# Note: "role analysis documents" refers to [role]/analysis.md files (e.g., product-manager/analysis.md)
|
|
72
|
-
SYNTHESIS_DIR = brainstorm_dir # Contains role analysis files: */analysis.md
|
|
73
|
-
IMPL_PLAN = session_dir/IMPL_PLAN.md
|
|
74
|
-
TASK_FILES = Glob(task_dir/*.json)
|
|
75
|
-
PLANNING_NOTES = session_dir/planning-notes.md # N+1 context and constraints
|
|
76
|
-
|
|
77
|
-
# Abort if missing - in order of dependency
|
|
78
|
-
SESSION_FILE_EXISTS = EXISTS(session_file)
|
|
79
|
-
IF NOT SESSION_FILE_EXISTS:
|
|
80
|
-
WARNING: "workflow-session.json not found. User intent alignment verification will be skipped."
|
|
81
|
-
# Continue execution - this is optional context, not blocking
|
|
82
|
-
|
|
83
|
-
PLANNING_NOTES_EXISTS = EXISTS(PLANNING_NOTES)
|
|
84
|
-
IF NOT PLANNING_NOTES_EXISTS:
|
|
85
|
-
WARNING: "planning-notes.md not found. Constraints/N+1 context verification will be skipped."
|
|
86
|
-
# Continue execution - optional context
|
|
87
|
-
|
|
88
|
-
SYNTHESIS_FILES = Glob(brainstorm_dir/*/analysis.md)
|
|
89
|
-
IF SYNTHESIS_FILES.count == 0:
|
|
90
|
-
WARNING: "No role analysis documents found in .brainstorming/*/analysis.md. Synthesis-based dimensions (E, G) will use reduced coverage."
|
|
91
|
-
SYNTHESIS_AVAILABLE = false
|
|
92
|
-
# Continue execution - brainstorm artifacts are optional for direct planning workflows
|
|
93
|
-
ELSE:
|
|
94
|
-
SYNTHESIS_AVAILABLE = true
|
|
95
|
-
|
|
96
|
-
IF NOT EXISTS(IMPL_PLAN):
|
|
97
|
-
ERROR: "IMPL_PLAN.md not found. Run /workflow-plan first"
|
|
98
|
-
EXIT
|
|
99
|
-
|
|
100
|
-
IF TASK_FILES.count == 0:
|
|
101
|
-
ERROR: "No task JSON files found. Run /workflow-plan first"
|
|
102
|
-
EXIT
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Step 5.2: Load Artifacts (Progressive Disclosure)
|
|
106
|
-
|
|
107
|
-
Load only minimal necessary context from each artifact:
|
|
108
|
-
|
|
109
|
-
**From workflow-session.json** (OPTIONAL - Primary Reference for User Intent):
|
|
110
|
-
- **ONLY IF EXISTS**: Load user intent context
|
|
111
|
-
- Original user prompt/intent (project or description field)
|
|
112
|
-
- User's stated goals and objectives
|
|
113
|
-
- User's scope definition
|
|
114
|
-
- **IF MISSING**: Set user_intent_analysis = "SKIPPED: workflow-session.json not found"
|
|
115
|
-
|
|
116
|
-
**From planning-notes.md** (OPTIONAL - Constraints & N+1 Context):
|
|
117
|
-
- **ONLY IF EXISTS**: Load planning context
|
|
118
|
-
- Consolidated Constraints (numbered list from Phase 1-3)
|
|
119
|
-
- N+1 Context: Decisions table (Decision | Rationale | Revisit?)
|
|
120
|
-
- N+1 Context: Deferred items list
|
|
121
|
-
- **IF MISSING**: Set planning_notes_analysis = "SKIPPED: planning-notes.md not found"
|
|
122
|
-
|
|
123
|
-
**From role analysis documents** (AUTHORITATIVE SOURCE):
|
|
124
|
-
- Functional Requirements (IDs, descriptions, acceptance criteria)
|
|
125
|
-
- Non-Functional Requirements (IDs, targets)
|
|
126
|
-
- Business Requirements (IDs, success metrics)
|
|
127
|
-
- Key Architecture Decisions
|
|
128
|
-
- Risk factors and mitigation strategies
|
|
129
|
-
- Implementation Roadmap (high-level phases)
|
|
130
|
-
|
|
131
|
-
**From IMPL_PLAN.md**:
|
|
132
|
-
- Summary and objectives
|
|
133
|
-
- Context Analysis
|
|
134
|
-
- Implementation Strategy
|
|
135
|
-
- Task Breakdown Summary
|
|
136
|
-
- Success Criteria
|
|
137
|
-
- Brainstorming Artifacts References (if present)
|
|
138
|
-
|
|
139
|
-
**From task.json files**:
|
|
140
|
-
- Task IDs
|
|
141
|
-
- Titles and descriptions
|
|
142
|
-
- Status
|
|
143
|
-
- Dependencies (depends_on, blocks)
|
|
144
|
-
- Context (requirements, focus_paths, acceptance, artifacts)
|
|
145
|
-
- Flow control (pre_analysis, implementation_approach)
|
|
146
|
-
- Meta (complexity, priority)
|
|
147
|
-
|
|
148
|
-
### Step 5.3: Build Semantic Models
|
|
149
|
-
|
|
150
|
-
Create internal representations (do not include raw artifacts in output):
|
|
151
|
-
|
|
152
|
-
**Requirements inventory**:
|
|
153
|
-
- Each functional/non-functional/business requirement with stable ID
|
|
154
|
-
- Requirement text, acceptance criteria, priority
|
|
155
|
-
|
|
156
|
-
**Architecture decisions inventory**:
|
|
157
|
-
- ADRs from synthesis
|
|
158
|
-
- Technology choices
|
|
159
|
-
- Data model references
|
|
160
|
-
|
|
161
|
-
**Task coverage mapping**:
|
|
162
|
-
- Map each task to one or more requirements (by ID reference or keyword inference)
|
|
163
|
-
- Map each requirement to covering tasks
|
|
164
|
-
|
|
165
|
-
**Dependency graph**:
|
|
166
|
-
- Task-to-task dependencies (depends_on, blocks)
|
|
167
|
-
- Requirement-level dependencies (from synthesis)
|
|
168
|
-
|
|
169
|
-
### Step 5.4: Detection Passes (Agent-Driven Multi-Dimensional Analysis)
|
|
170
|
-
|
|
171
|
-
**Execution Strategy**:
|
|
172
|
-
- Single `cli-explore-agent` invocation
|
|
173
|
-
- Agent executes multiple CLI analyses internally (different dimensions: A-J)
|
|
174
|
-
- Token Budget: 50 findings maximum (aggregate remainder in overflow summary)
|
|
175
|
-
- Priority Allocation: CRITICAL (unlimited) → HIGH (15) → MEDIUM (20) → LOW (15)
|
|
176
|
-
- Early Exit: If CRITICAL findings > 0 in User Intent/Requirements Coverage, skip LOW/MEDIUM checks
|
|
177
|
-
|
|
178
|
-
**Execution Order** (Agent orchestrates internally):
|
|
179
|
-
|
|
180
|
-
1. **Tier 1 (CRITICAL Path)**: A, B, C, I - User intent, coverage, consistency, constraints compliance (full analysis)
|
|
181
|
-
2. **Tier 2 (HIGH Priority)**: D, E, J - Dependencies, synthesis alignment, N+1 context validation (limit 15 findings)
|
|
182
|
-
3. **Tier 3 (MEDIUM Priority)**: F - Specification quality (limit 20 findings)
|
|
183
|
-
4. **Tier 4 (LOW Priority)**: G, H - Duplication, feasibility (limit 15 findings)
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
#### Step 5.4.1: Launch Unified Verification Agent
|
|
188
|
-
|
|
189
|
-
```javascript
|
|
190
|
-
Task(
|
|
191
|
-
subagent_type="cli-explore-agent",
|
|
192
|
-
run_in_background=false,
|
|
193
|
-
description="Multi-dimensional plan verification",
|
|
194
|
-
prompt=`
|
|
195
|
-
## Plan Verification Task
|
|
196
|
-
|
|
197
|
-
### MANDATORY FIRST STEPS
|
|
198
|
-
1.
|
|
199
|
-
2.
|
|
200
|
-
3. Read: ${session_file} (user intent)
|
|
201
|
-
4. Read: ${PLANNING_NOTES} (constraints & N+1 context)
|
|
202
|
-
5. Read: ${IMPL_PLAN} (implementation plan)
|
|
203
|
-
6. Glob: ${task_dir}/*.json (task files)
|
|
204
|
-
7. Glob: ${SYNTHESIS_DIR}/*/analysis.md (role analyses)
|
|
205
|
-
|
|
206
|
-
### Execution Flow
|
|
207
|
-
|
|
208
|
-
**Load schema → Execute tiered CLI analysis → Aggregate findings → Write JSON**
|
|
209
|
-
|
|
210
|
-
FOR each tier in [1, 2, 3, 4]:
|
|
211
|
-
- Load tier config from plan-verify-agent-schema.json
|
|
212
|
-
- Execute: ccw cli -p "PURPOSE: Verify dimensions {tier.dimensions}
|
|
213
|
-
TASK: {tier.checks from schema}
|
|
214
|
-
CONTEXT: @${session_dir}/**/*
|
|
215
|
-
EXPECTED: Findings JSON with dimension, severity, location, summary, recommendation
|
|
216
|
-
CONSTRAINTS: Limit {tier.limit} findings
|
|
217
|
-
" --tool gemini --mode analysis --rule {tier.rule}
|
|
218
|
-
- Parse findings, check early exit condition
|
|
219
|
-
- IF tier == 1 AND critical_count > 0: skip tier 3-4
|
|
220
|
-
|
|
221
|
-
### Output
|
|
222
|
-
Write: ${process_dir}/verification-findings.json (follow verify-json-schema.json)
|
|
223
|
-
Return: Quality gate decision + 2-3 sentence summary
|
|
224
|
-
`
|
|
225
|
-
)
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
#### Step 5.4.2: Load and Organize Findings
|
|
231
|
-
|
|
232
|
-
```javascript
|
|
233
|
-
// Load findings (single parse for all subsequent use)
|
|
234
|
-
const data = JSON.parse(Read(`${process_dir}/verification-findings.json`))
|
|
235
|
-
const { session_id, timestamp, verification_tiers_completed, findings, summary } = data
|
|
236
|
-
const { critical_count, high_count, medium_count, low_count, total_findings, coverage_percentage, recommendation } = summary
|
|
237
|
-
|
|
238
|
-
// Group by severity and dimension
|
|
239
|
-
const bySeverity = Object.groupBy(findings, f => f.severity)
|
|
240
|
-
const byDimension = Object.groupBy(findings, f => f.dimension)
|
|
241
|
-
|
|
242
|
-
// Dimension metadata (from schema)
|
|
243
|
-
const DIMS = {
|
|
244
|
-
A: "User Intent Alignment", B: "Requirements Coverage", C: "Consistency Validation",
|
|
245
|
-
D: "Dependency Integrity", E: "Synthesis Alignment", F: "Task Specification Quality",
|
|
246
|
-
G: "Duplication Detection", H: "Feasibility Assessment",
|
|
247
|
-
I: "Constraints Compliance", J: "N+1 Context Validation"
|
|
248
|
-
}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Step 5.5: Generate Report
|
|
252
|
-
|
|
253
|
-
```javascript
|
|
254
|
-
// Helper: render dimension section
|
|
255
|
-
const renderDimension = (dim) => {
|
|
256
|
-
const items = byDimension[dim] || []
|
|
257
|
-
return items.length > 0
|
|
258
|
-
? items.map(f => `### ${f.id}: ${f.summary}\n- **Severity**: ${f.severity}\n- **Location**: ${f.location.join(', ')}\n- **Recommendation**: ${f.recommendation}`).join('\n\n')
|
|
259
|
-
: `> No ${DIMS[dim]} issues detected.`
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// Helper: render severity section
|
|
263
|
-
const renderSeverity = (severity, impact) => {
|
|
264
|
-
const items = bySeverity[severity] || []
|
|
265
|
-
return items.length > 0
|
|
266
|
-
? items.map(f => `#### ${f.id}: ${f.summary}\n- **Dimension**: ${f.dimension_name}\n- **Location**: ${f.location.join(', ')}\n- **Impact**: ${impact}\n- **Recommendation**: ${f.recommendation}`).join('\n\n')
|
|
267
|
-
: `> No ${severity.toLowerCase()}-severity issues detected.`
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// Build Markdown report
|
|
271
|
-
const fullReport = `
|
|
272
|
-
# Plan Verification Report
|
|
273
|
-
|
|
274
|
-
**Session**: WFS-${session_id} | **Generated**: ${timestamp}
|
|
275
|
-
**Tiers Completed**: ${verification_tiers_completed.join(', ')}
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
|
-
## Executive Summary
|
|
280
|
-
|
|
281
|
-
| Metric | Value | Status |
|
|
282
|
-
|--------|-------|--------|
|
|
283
|
-
| Risk Level | ${critical_count > 0 ? 'CRITICAL' : high_count > 0 ? 'HIGH' : medium_count > 0 ? 'MEDIUM' : 'LOW'} | ${critical_count > 0 ? 'RED' : high_count > 0 ? 'ORANGE' : medium_count > 0 ? 'YELLOW' : 'GREEN'} |
|
|
284
|
-
| Critical/High/Medium/Low | ${critical_count}/${high_count}/${medium_count}/${low_count} | |
|
|
285
|
-
| Coverage | ${coverage_percentage}% | ${coverage_percentage >= 90 ? 'GREEN' : coverage_percentage >= 75 ? 'YELLOW' : 'RED'} |
|
|
286
|
-
|
|
287
|
-
**Recommendation**: **${recommendation}**
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
## Findings Summary
|
|
292
|
-
|
|
293
|
-
| ID | Dimension | Severity | Location | Summary |
|
|
294
|
-
|----|-----------|----------|----------|---------|
|
|
295
|
-
${findings.map(f => `| ${f.id} | ${f.dimension_name} | ${f.severity} | ${f.location.join(', ')} | ${f.summary} |`).join('\n')}
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
## Analysis by Dimension
|
|
300
|
-
|
|
301
|
-
${['A','B','C','D','E','F','G','H','I','J'].map(d => `### ${d}. ${DIMS[d]}\n\n${renderDimension(d)}`).join('\n\n---\n\n')}
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
## Findings by Severity
|
|
306
|
-
|
|
307
|
-
### CRITICAL (${critical_count})
|
|
308
|
-
${renderSeverity('CRITICAL', 'Blocks execution')}
|
|
309
|
-
|
|
310
|
-
### HIGH (${high_count})
|
|
311
|
-
${renderSeverity('HIGH', 'Fix before execution recommended')}
|
|
312
|
-
|
|
313
|
-
### MEDIUM (${medium_count})
|
|
314
|
-
${renderSeverity('MEDIUM', 'Address during/after implementation')}
|
|
315
|
-
|
|
316
|
-
### LOW (${low_count})
|
|
317
|
-
${renderSeverity('LOW', 'Optional improvement')}
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
|
-
## Next Steps
|
|
322
|
-
|
|
323
|
-
${recommendation === 'BLOCK_EXECUTION' ? 'BLOCK: Fix critical issues then re-verify' :
|
|
324
|
-
recommendation === 'PROCEED_WITH_FIXES' ? 'FIX RECOMMENDED: Address high issues then re-verify or execute' :
|
|
325
|
-
'READY: Proceed to Skill(skill="workflow-execute")'}
|
|
326
|
-
|
|
327
|
-
Re-verify: \`/workflow-plan-verify --session ${session_id}\`
|
|
328
|
-
Execute: \`Skill(skill="workflow-execute", args="--resume-session=${session_id}")\`
|
|
329
|
-
`
|
|
330
|
-
|
|
331
|
-
// Write report
|
|
332
|
-
Write(`${process_dir}/PLAN_VERIFICATION.md`, fullReport)
|
|
333
|
-
console.log(`Report: ${process_dir}/PLAN_VERIFICATION.md\n${recommendation} | C:${critical_count} H:${high_count} M:${medium_count} L:${low_count} | Coverage:${coverage_percentage}%`)
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
### Step 5.6: Next Step Selection
|
|
337
|
-
|
|
338
|
-
```javascript
|
|
339
|
-
// Reference workflowPreferences (set by SKILL.md via AskUserQuestion)
|
|
340
|
-
const autoYes = workflowPreferences.autoYes
|
|
341
|
-
const canExecute = recommendation !== 'BLOCK_EXECUTION'
|
|
342
|
-
|
|
343
|
-
// Auto mode
|
|
344
|
-
if (autoYes) {
|
|
345
|
-
if (canExecute) {
|
|
346
|
-
Skill(skill="workflow-execute", args="--resume-session=\"${session_id}\"")
|
|
347
|
-
} else {
|
|
348
|
-
console.log(`[Auto] BLOCK_EXECUTION - Fix ${critical_count} critical issues first.`)
|
|
349
|
-
}
|
|
350
|
-
return
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
// Interactive mode - build options based on quality gate
|
|
354
|
-
const options = canExecute
|
|
355
|
-
? [
|
|
356
|
-
{ label: canExecute && recommendation === 'PROCEED_WITH_FIXES' ? "Execute Anyway" : "Execute (Recommended)",
|
|
357
|
-
description: "Proceed to Skill(skill=\"workflow-execute\")" },
|
|
358
|
-
{ label: "Review Report", description: "Review findings before deciding" },
|
|
359
|
-
{ label: "Re-verify", description: "Re-run after manual fixes" }
|
|
360
|
-
]
|
|
361
|
-
: [
|
|
362
|
-
{ label: "Review Report", description: "Review critical issues" },
|
|
363
|
-
{ label: "Re-verify", description: "Re-run after fixing issues" }
|
|
364
|
-
]
|
|
365
|
-
|
|
366
|
-
const selection = AskUserQuestion({
|
|
367
|
-
questions: [{
|
|
368
|
-
question: `Quality gate: ${recommendation}. Next step?`,
|
|
369
|
-
header: "Action",
|
|
370
|
-
multiSelect: false,
|
|
371
|
-
options
|
|
372
|
-
}]
|
|
373
|
-
})
|
|
374
|
-
|
|
375
|
-
// Handle selection
|
|
376
|
-
if (selection.includes("Execute")) {
|
|
377
|
-
Skill(skill="workflow-execute", args="--resume-session=\"${session_id}\"")
|
|
378
|
-
} else if (selection === "Re-verify") {
|
|
379
|
-
// Direct phase re-execution: re-read and execute this phase
|
|
380
|
-
Read("phases/05-plan-verify.md")
|
|
381
|
-
// Re-execute with current session context
|
|
382
|
-
}
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
## Output
|
|
386
|
-
|
|
387
|
-
- **File**: `PLAN_VERIFICATION.md` (verification report with quality gate)
|
|
388
|
-
- **File**: `verification-findings.json` (structured findings data)
|
|
389
|
-
|
|
390
|
-
## Completion
|
|
391
|
-
|
|
392
|
-
Phase 5 is a terminal phase. Based on quality gate result, user routes to:
|
|
393
|
-
- Execute → Skill(skill="workflow-execute")
|
|
394
|
-
- Re-verify → Re-run Phase 5
|
|
395
|
-
- Review → Manual inspection
|
|
1
|
+
# Phase 5: Plan Verification
|
|
2
|
+
|
|
3
|
+
Perform READ-ONLY verification analysis between IMPL_PLAN.md, task JSONs, and brainstorming artifacts. Generates structured report with quality gate recommendation. Does NOT modify any source files.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Generate comprehensive verification report identifying inconsistencies, duplications, ambiguities
|
|
8
|
+
- Produce quality gate recommendation (BLOCK_EXECUTION / PROCEED_WITH_FIXES / PROCEED_WITH_CAUTION / PROCEED)
|
|
9
|
+
- Route to next action based on quality gate result
|
|
10
|
+
|
|
11
|
+
## Entry Points
|
|
12
|
+
|
|
13
|
+
- **From Plan Mode**: After Phase 4 completes, user selects "Verify Plan Quality"
|
|
14
|
+
- **From Verify Mode**: Directly triggered via `workflow-plan` skill (plan-verify phase)
|
|
15
|
+
|
|
16
|
+
## User Input
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
$ARGUMENTS
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
You **MUST** consider the user input before proceeding (if not empty).
|
|
23
|
+
|
|
24
|
+
## Operating Constraints
|
|
25
|
+
|
|
26
|
+
**STRICTLY READ-ONLY FOR SOURCE ARTIFACTS**:
|
|
27
|
+
- **MUST NOT** modify `IMPL_PLAN.md`, any `task.json` files, or brainstorming artifacts
|
|
28
|
+
- **MUST NOT** create or delete task files
|
|
29
|
+
- **MUST ONLY** write the verification report to `.process/PLAN_VERIFICATION.md`
|
|
30
|
+
|
|
31
|
+
**Synthesis Authority**: The `role analysis documents` are **authoritative** for requirements and design decisions. Any conflicts between IMPL_PLAN/tasks and synthesis are automatically CRITICAL and require adjustment of the plan/tasks—not reinterpretation of requirements.
|
|
32
|
+
|
|
33
|
+
**Quality Gate Authority**: The verification report provides a binding recommendation based on objective severity criteria. User MUST review critical/high issues before proceeding with implementation.
|
|
34
|
+
|
|
35
|
+
## Execution
|
|
36
|
+
|
|
37
|
+
### Step 5.0: Load Validation Context
|
|
38
|
+
|
|
39
|
+
Run `ccw spec load --category validation` for verification rules and acceptance criteria.
|
|
40
|
+
|
|
41
|
+
### Step 5.1: Initialize Analysis Context
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Detect active workflow session
|
|
45
|
+
IF --session parameter provided:
|
|
46
|
+
session_id = provided session
|
|
47
|
+
ELSE:
|
|
48
|
+
# Auto-detect active session
|
|
49
|
+
active_sessions = bash(find .workflow/active/ -name "WFS-*" -type d 2>/dev/null)
|
|
50
|
+
IF active_sessions is empty:
|
|
51
|
+
ERROR: "No active workflow session found. Use --session <session-id>"
|
|
52
|
+
EXIT
|
|
53
|
+
ELSE IF active_sessions has multiple entries:
|
|
54
|
+
# Use most recently modified session
|
|
55
|
+
session_id = bash(ls -td .workflow/active/WFS-*/ 2>/dev/null | head -1 | xargs basename)
|
|
56
|
+
ELSE:
|
|
57
|
+
session_id = basename(active_sessions[0])
|
|
58
|
+
|
|
59
|
+
# Derive absolute paths
|
|
60
|
+
session_dir = .workflow/active/WFS-{session}
|
|
61
|
+
brainstorm_dir = session_dir/.brainstorming
|
|
62
|
+
task_dir = session_dir/.task
|
|
63
|
+
process_dir = session_dir/.process
|
|
64
|
+
session_file = session_dir/workflow-session.json
|
|
65
|
+
|
|
66
|
+
# Create .process directory if not exists (report output location)
|
|
67
|
+
IF NOT EXISTS(process_dir):
|
|
68
|
+
bash(mkdir -p "{process_dir}")
|
|
69
|
+
|
|
70
|
+
# Validate required artifacts
|
|
71
|
+
# Note: "role analysis documents" refers to [role]/analysis.md files (e.g., product-manager/analysis.md)
|
|
72
|
+
SYNTHESIS_DIR = brainstorm_dir # Contains role analysis files: */analysis.md
|
|
73
|
+
IMPL_PLAN = session_dir/IMPL_PLAN.md
|
|
74
|
+
TASK_FILES = Glob(task_dir/*.json)
|
|
75
|
+
PLANNING_NOTES = session_dir/planning-notes.md # N+1 context and constraints
|
|
76
|
+
|
|
77
|
+
# Abort if missing - in order of dependency
|
|
78
|
+
SESSION_FILE_EXISTS = EXISTS(session_file)
|
|
79
|
+
IF NOT SESSION_FILE_EXISTS:
|
|
80
|
+
WARNING: "workflow-session.json not found. User intent alignment verification will be skipped."
|
|
81
|
+
# Continue execution - this is optional context, not blocking
|
|
82
|
+
|
|
83
|
+
PLANNING_NOTES_EXISTS = EXISTS(PLANNING_NOTES)
|
|
84
|
+
IF NOT PLANNING_NOTES_EXISTS:
|
|
85
|
+
WARNING: "planning-notes.md not found. Constraints/N+1 context verification will be skipped."
|
|
86
|
+
# Continue execution - optional context
|
|
87
|
+
|
|
88
|
+
SYNTHESIS_FILES = Glob(brainstorm_dir/*/analysis.md)
|
|
89
|
+
IF SYNTHESIS_FILES.count == 0:
|
|
90
|
+
WARNING: "No role analysis documents found in .brainstorming/*/analysis.md. Synthesis-based dimensions (E, G) will use reduced coverage."
|
|
91
|
+
SYNTHESIS_AVAILABLE = false
|
|
92
|
+
# Continue execution - brainstorm artifacts are optional for direct planning workflows
|
|
93
|
+
ELSE:
|
|
94
|
+
SYNTHESIS_AVAILABLE = true
|
|
95
|
+
|
|
96
|
+
IF NOT EXISTS(IMPL_PLAN):
|
|
97
|
+
ERROR: "IMPL_PLAN.md not found. Run /workflow-plan first"
|
|
98
|
+
EXIT
|
|
99
|
+
|
|
100
|
+
IF TASK_FILES.count == 0:
|
|
101
|
+
ERROR: "No task JSON files found. Run /workflow-plan first"
|
|
102
|
+
EXIT
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Step 5.2: Load Artifacts (Progressive Disclosure)
|
|
106
|
+
|
|
107
|
+
Load only minimal necessary context from each artifact:
|
|
108
|
+
|
|
109
|
+
**From workflow-session.json** (OPTIONAL - Primary Reference for User Intent):
|
|
110
|
+
- **ONLY IF EXISTS**: Load user intent context
|
|
111
|
+
- Original user prompt/intent (project or description field)
|
|
112
|
+
- User's stated goals and objectives
|
|
113
|
+
- User's scope definition
|
|
114
|
+
- **IF MISSING**: Set user_intent_analysis = "SKIPPED: workflow-session.json not found"
|
|
115
|
+
|
|
116
|
+
**From planning-notes.md** (OPTIONAL - Constraints & N+1 Context):
|
|
117
|
+
- **ONLY IF EXISTS**: Load planning context
|
|
118
|
+
- Consolidated Constraints (numbered list from Phase 1-3)
|
|
119
|
+
- N+1 Context: Decisions table (Decision | Rationale | Revisit?)
|
|
120
|
+
- N+1 Context: Deferred items list
|
|
121
|
+
- **IF MISSING**: Set planning_notes_analysis = "SKIPPED: planning-notes.md not found"
|
|
122
|
+
|
|
123
|
+
**From role analysis documents** (AUTHORITATIVE SOURCE):
|
|
124
|
+
- Functional Requirements (IDs, descriptions, acceptance criteria)
|
|
125
|
+
- Non-Functional Requirements (IDs, targets)
|
|
126
|
+
- Business Requirements (IDs, success metrics)
|
|
127
|
+
- Key Architecture Decisions
|
|
128
|
+
- Risk factors and mitigation strategies
|
|
129
|
+
- Implementation Roadmap (high-level phases)
|
|
130
|
+
|
|
131
|
+
**From IMPL_PLAN.md**:
|
|
132
|
+
- Summary and objectives
|
|
133
|
+
- Context Analysis
|
|
134
|
+
- Implementation Strategy
|
|
135
|
+
- Task Breakdown Summary
|
|
136
|
+
- Success Criteria
|
|
137
|
+
- Brainstorming Artifacts References (if present)
|
|
138
|
+
|
|
139
|
+
**From task.json files**:
|
|
140
|
+
- Task IDs
|
|
141
|
+
- Titles and descriptions
|
|
142
|
+
- Status
|
|
143
|
+
- Dependencies (depends_on, blocks)
|
|
144
|
+
- Context (requirements, focus_paths, acceptance, artifacts)
|
|
145
|
+
- Flow control (pre_analysis, implementation_approach)
|
|
146
|
+
- Meta (complexity, priority)
|
|
147
|
+
|
|
148
|
+
### Step 5.3: Build Semantic Models
|
|
149
|
+
|
|
150
|
+
Create internal representations (do not include raw artifacts in output):
|
|
151
|
+
|
|
152
|
+
**Requirements inventory**:
|
|
153
|
+
- Each functional/non-functional/business requirement with stable ID
|
|
154
|
+
- Requirement text, acceptance criteria, priority
|
|
155
|
+
|
|
156
|
+
**Architecture decisions inventory**:
|
|
157
|
+
- ADRs from synthesis
|
|
158
|
+
- Technology choices
|
|
159
|
+
- Data model references
|
|
160
|
+
|
|
161
|
+
**Task coverage mapping**:
|
|
162
|
+
- Map each task to one or more requirements (by ID reference or keyword inference)
|
|
163
|
+
- Map each requirement to covering tasks
|
|
164
|
+
|
|
165
|
+
**Dependency graph**:
|
|
166
|
+
- Task-to-task dependencies (depends_on, blocks)
|
|
167
|
+
- Requirement-level dependencies (from synthesis)
|
|
168
|
+
|
|
169
|
+
### Step 5.4: Detection Passes (Agent-Driven Multi-Dimensional Analysis)
|
|
170
|
+
|
|
171
|
+
**Execution Strategy**:
|
|
172
|
+
- Single `cli-explore-agent` invocation
|
|
173
|
+
- Agent executes multiple CLI analyses internally (different dimensions: A-J)
|
|
174
|
+
- Token Budget: 50 findings maximum (aggregate remainder in overflow summary)
|
|
175
|
+
- Priority Allocation: CRITICAL (unlimited) → HIGH (15) → MEDIUM (20) → LOW (15)
|
|
176
|
+
- Early Exit: If CRITICAL findings > 0 in User Intent/Requirements Coverage, skip LOW/MEDIUM checks
|
|
177
|
+
|
|
178
|
+
**Execution Order** (Agent orchestrates internally):
|
|
179
|
+
|
|
180
|
+
1. **Tier 1 (CRITICAL Path)**: A, B, C, I - User intent, coverage, consistency, constraints compliance (full analysis)
|
|
181
|
+
2. **Tier 2 (HIGH Priority)**: D, E, J - Dependencies, synthesis alignment, N+1 context validation (limit 15 findings)
|
|
182
|
+
3. **Tier 3 (MEDIUM Priority)**: F - Specification quality (limit 20 findings)
|
|
183
|
+
4. **Tier 4 (LOW Priority)**: G, H - Duplication, feasibility (limit 15 findings)
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
#### Step 5.4.1: Launch Unified Verification Agent
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
Task(
|
|
191
|
+
subagent_type="cli-explore-agent",
|
|
192
|
+
run_in_background=false,
|
|
193
|
+
description="Multi-dimensional plan verification",
|
|
194
|
+
prompt=`
|
|
195
|
+
## Plan Verification Task
|
|
196
|
+
|
|
197
|
+
### MANDATORY FIRST STEPS
|
|
198
|
+
1. Read: ~/.ccw/workflows/cli-templates/schemas/plan-verify-agent-schema.json (dimensions & rules)
|
|
199
|
+
2. Read: ~/.ccw/workflows/cli-templates/schemas/verify-json-schema.json (output schema)
|
|
200
|
+
3. Read: ${session_file} (user intent)
|
|
201
|
+
4. Read: ${PLANNING_NOTES} (constraints & N+1 context)
|
|
202
|
+
5. Read: ${IMPL_PLAN} (implementation plan)
|
|
203
|
+
6. Glob: ${task_dir}/*.json (task files)
|
|
204
|
+
7. Glob: ${SYNTHESIS_DIR}/*/analysis.md (role analyses)
|
|
205
|
+
|
|
206
|
+
### Execution Flow
|
|
207
|
+
|
|
208
|
+
**Load schema → Execute tiered CLI analysis → Aggregate findings → Write JSON**
|
|
209
|
+
|
|
210
|
+
FOR each tier in [1, 2, 3, 4]:
|
|
211
|
+
- Load tier config from plan-verify-agent-schema.json
|
|
212
|
+
- Execute: ccw cli -p "PURPOSE: Verify dimensions {tier.dimensions}
|
|
213
|
+
TASK: {tier.checks from schema}
|
|
214
|
+
CONTEXT: @${session_dir}/**/*
|
|
215
|
+
EXPECTED: Findings JSON with dimension, severity, location, summary, recommendation
|
|
216
|
+
CONSTRAINTS: Limit {tier.limit} findings
|
|
217
|
+
" --tool gemini --mode analysis --rule {tier.rule}
|
|
218
|
+
- Parse findings, check early exit condition
|
|
219
|
+
- IF tier == 1 AND critical_count > 0: skip tier 3-4
|
|
220
|
+
|
|
221
|
+
### Output
|
|
222
|
+
Write: ${process_dir}/verification-findings.json (follow verify-json-schema.json)
|
|
223
|
+
Return: Quality gate decision + 2-3 sentence summary
|
|
224
|
+
`
|
|
225
|
+
)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
#### Step 5.4.2: Load and Organize Findings
|
|
231
|
+
|
|
232
|
+
```javascript
|
|
233
|
+
// Load findings (single parse for all subsequent use)
|
|
234
|
+
const data = JSON.parse(Read(`${process_dir}/verification-findings.json`))
|
|
235
|
+
const { session_id, timestamp, verification_tiers_completed, findings, summary } = data
|
|
236
|
+
const { critical_count, high_count, medium_count, low_count, total_findings, coverage_percentage, recommendation } = summary
|
|
237
|
+
|
|
238
|
+
// Group by severity and dimension
|
|
239
|
+
const bySeverity = Object.groupBy(findings, f => f.severity)
|
|
240
|
+
const byDimension = Object.groupBy(findings, f => f.dimension)
|
|
241
|
+
|
|
242
|
+
// Dimension metadata (from schema)
|
|
243
|
+
const DIMS = {
|
|
244
|
+
A: "User Intent Alignment", B: "Requirements Coverage", C: "Consistency Validation",
|
|
245
|
+
D: "Dependency Integrity", E: "Synthesis Alignment", F: "Task Specification Quality",
|
|
246
|
+
G: "Duplication Detection", H: "Feasibility Assessment",
|
|
247
|
+
I: "Constraints Compliance", J: "N+1 Context Validation"
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Step 5.5: Generate Report
|
|
252
|
+
|
|
253
|
+
```javascript
|
|
254
|
+
// Helper: render dimension section
|
|
255
|
+
const renderDimension = (dim) => {
|
|
256
|
+
const items = byDimension[dim] || []
|
|
257
|
+
return items.length > 0
|
|
258
|
+
? items.map(f => `### ${f.id}: ${f.summary}\n- **Severity**: ${f.severity}\n- **Location**: ${f.location.join(', ')}\n- **Recommendation**: ${f.recommendation}`).join('\n\n')
|
|
259
|
+
: `> No ${DIMS[dim]} issues detected.`
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Helper: render severity section
|
|
263
|
+
const renderSeverity = (severity, impact) => {
|
|
264
|
+
const items = bySeverity[severity] || []
|
|
265
|
+
return items.length > 0
|
|
266
|
+
? items.map(f => `#### ${f.id}: ${f.summary}\n- **Dimension**: ${f.dimension_name}\n- **Location**: ${f.location.join(', ')}\n- **Impact**: ${impact}\n- **Recommendation**: ${f.recommendation}`).join('\n\n')
|
|
267
|
+
: `> No ${severity.toLowerCase()}-severity issues detected.`
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Build Markdown report
|
|
271
|
+
const fullReport = `
|
|
272
|
+
# Plan Verification Report
|
|
273
|
+
|
|
274
|
+
**Session**: WFS-${session_id} | **Generated**: ${timestamp}
|
|
275
|
+
**Tiers Completed**: ${verification_tiers_completed.join(', ')}
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Executive Summary
|
|
280
|
+
|
|
281
|
+
| Metric | Value | Status |
|
|
282
|
+
|--------|-------|--------|
|
|
283
|
+
| Risk Level | ${critical_count > 0 ? 'CRITICAL' : high_count > 0 ? 'HIGH' : medium_count > 0 ? 'MEDIUM' : 'LOW'} | ${critical_count > 0 ? 'RED' : high_count > 0 ? 'ORANGE' : medium_count > 0 ? 'YELLOW' : 'GREEN'} |
|
|
284
|
+
| Critical/High/Medium/Low | ${critical_count}/${high_count}/${medium_count}/${low_count} | |
|
|
285
|
+
| Coverage | ${coverage_percentage}% | ${coverage_percentage >= 90 ? 'GREEN' : coverage_percentage >= 75 ? 'YELLOW' : 'RED'} |
|
|
286
|
+
|
|
287
|
+
**Recommendation**: **${recommendation}**
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Findings Summary
|
|
292
|
+
|
|
293
|
+
| ID | Dimension | Severity | Location | Summary |
|
|
294
|
+
|----|-----------|----------|----------|---------|
|
|
295
|
+
${findings.map(f => `| ${f.id} | ${f.dimension_name} | ${f.severity} | ${f.location.join(', ')} | ${f.summary} |`).join('\n')}
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Analysis by Dimension
|
|
300
|
+
|
|
301
|
+
${['A','B','C','D','E','F','G','H','I','J'].map(d => `### ${d}. ${DIMS[d]}\n\n${renderDimension(d)}`).join('\n\n---\n\n')}
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Findings by Severity
|
|
306
|
+
|
|
307
|
+
### CRITICAL (${critical_count})
|
|
308
|
+
${renderSeverity('CRITICAL', 'Blocks execution')}
|
|
309
|
+
|
|
310
|
+
### HIGH (${high_count})
|
|
311
|
+
${renderSeverity('HIGH', 'Fix before execution recommended')}
|
|
312
|
+
|
|
313
|
+
### MEDIUM (${medium_count})
|
|
314
|
+
${renderSeverity('MEDIUM', 'Address during/after implementation')}
|
|
315
|
+
|
|
316
|
+
### LOW (${low_count})
|
|
317
|
+
${renderSeverity('LOW', 'Optional improvement')}
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Next Steps
|
|
322
|
+
|
|
323
|
+
${recommendation === 'BLOCK_EXECUTION' ? 'BLOCK: Fix critical issues then re-verify' :
|
|
324
|
+
recommendation === 'PROCEED_WITH_FIXES' ? 'FIX RECOMMENDED: Address high issues then re-verify or execute' :
|
|
325
|
+
'READY: Proceed to Skill(skill="workflow-execute")'}
|
|
326
|
+
|
|
327
|
+
Re-verify: \`/workflow-plan-verify --session ${session_id}\`
|
|
328
|
+
Execute: \`Skill(skill="workflow-execute", args="--resume-session=${session_id}")\`
|
|
329
|
+
`
|
|
330
|
+
|
|
331
|
+
// Write report
|
|
332
|
+
Write(`${process_dir}/PLAN_VERIFICATION.md`, fullReport)
|
|
333
|
+
console.log(`Report: ${process_dir}/PLAN_VERIFICATION.md\n${recommendation} | C:${critical_count} H:${high_count} M:${medium_count} L:${low_count} | Coverage:${coverage_percentage}%`)
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Step 5.6: Next Step Selection
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
// Reference workflowPreferences (set by SKILL.md via AskUserQuestion)
|
|
340
|
+
const autoYes = workflowPreferences.autoYes
|
|
341
|
+
const canExecute = recommendation !== 'BLOCK_EXECUTION'
|
|
342
|
+
|
|
343
|
+
// Auto mode
|
|
344
|
+
if (autoYes) {
|
|
345
|
+
if (canExecute) {
|
|
346
|
+
Skill(skill="workflow-execute", args="--resume-session=\"${session_id}\"")
|
|
347
|
+
} else {
|
|
348
|
+
console.log(`[Auto] BLOCK_EXECUTION - Fix ${critical_count} critical issues first.`)
|
|
349
|
+
}
|
|
350
|
+
return
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Interactive mode - build options based on quality gate
|
|
354
|
+
const options = canExecute
|
|
355
|
+
? [
|
|
356
|
+
{ label: canExecute && recommendation === 'PROCEED_WITH_FIXES' ? "Execute Anyway" : "Execute (Recommended)",
|
|
357
|
+
description: "Proceed to Skill(skill=\"workflow-execute\")" },
|
|
358
|
+
{ label: "Review Report", description: "Review findings before deciding" },
|
|
359
|
+
{ label: "Re-verify", description: "Re-run after manual fixes" }
|
|
360
|
+
]
|
|
361
|
+
: [
|
|
362
|
+
{ label: "Review Report", description: "Review critical issues" },
|
|
363
|
+
{ label: "Re-verify", description: "Re-run after fixing issues" }
|
|
364
|
+
]
|
|
365
|
+
|
|
366
|
+
const selection = AskUserQuestion({
|
|
367
|
+
questions: [{
|
|
368
|
+
question: `Quality gate: ${recommendation}. Next step?`,
|
|
369
|
+
header: "Action",
|
|
370
|
+
multiSelect: false,
|
|
371
|
+
options
|
|
372
|
+
}]
|
|
373
|
+
})
|
|
374
|
+
|
|
375
|
+
// Handle selection
|
|
376
|
+
if (selection.includes("Execute")) {
|
|
377
|
+
Skill(skill="workflow-execute", args="--resume-session=\"${session_id}\"")
|
|
378
|
+
} else if (selection === "Re-verify") {
|
|
379
|
+
// Direct phase re-execution: re-read and execute this phase
|
|
380
|
+
Read("phases/05-plan-verify.md")
|
|
381
|
+
// Re-execute with current session context
|
|
382
|
+
}
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
## Output
|
|
386
|
+
|
|
387
|
+
- **File**: `PLAN_VERIFICATION.md` (verification report with quality gate)
|
|
388
|
+
- **File**: `verification-findings.json` (structured findings data)
|
|
389
|
+
|
|
390
|
+
## Completion
|
|
391
|
+
|
|
392
|
+
Phase 5 is a terminal phase. Based on quality gate result, user routes to:
|
|
393
|
+
- Execute → Skill(skill="workflow-execute")
|
|
394
|
+
- Re-verify → Re-run Phase 5
|
|
395
|
+
- Review → Manual inspection
|