maestro-flow 0.3.10 → 0.3.12
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/.claude/agents/conceptual-planning-agent.md +1 -0
- package/.claude/agents/workflow-analyzer.md +114 -114
- package/.claude/agents/workflow-collab-planner.md +144 -144
- package/.claude/agents/workflow-debugger.md +102 -103
- package/.claude/agents/workflow-executor.md +127 -128
- package/.claude/agents/workflow-integration-checker.md +82 -82
- package/.claude/agents/workflow-nyquist-auditor.md +85 -84
- package/.claude/agents/workflow-phase-researcher.md +85 -85
- package/.claude/agents/workflow-plan-checker.md +90 -90
- package/.claude/agents/workflow-planner.md +178 -178
- package/.claude/agents/workflow-roadmapper.md +81 -83
- package/.claude/agents/workflow-verifier.md +119 -119
- package/.claude/commands/learn-decompose.md +176 -176
- package/.claude/commands/learn-follow.md +167 -167
- package/.claude/commands/learn-retro.md +3 -3
- package/.claude/commands/learn-second-opinion.md +2 -2
- package/.claude/commands/maestro-brainstorm.md +1 -0
- package/.claude/commands/maestro-coordinate.md +1 -3
- package/.claude/commands/maestro-fork.md +133 -111
- package/.claude/commands/maestro-merge.md +85 -77
- package/.claude/commands/maestro-plan.md +88 -2
- package/.claude/commands/maestro-roadmap.md +113 -2
- package/.claude/commands/maestro.md +1 -0
- package/.claude/commands/manage-harvest.md +131 -131
- package/.claude/commands/manage-issue.md +2 -2
- package/.claude/commands/quality-business-test.md +5 -5
- package/.claude/commands/quality-debug.md +3 -2
- package/.claude/commands/quality-retrospective.md +6 -4
- package/.claude/commands/quality-review.md +1 -1
- package/.claude/commands/quality-test-gen.md +5 -4
- package/.claude/commands/spec-add.md +67 -56
- package/.claude/commands/spec-load.md +66 -64
- package/.claude/commands/spec-setup.md +5 -9
- package/.codex/skills/learn-decompose/SKILL.md +119 -0
- package/.codex/skills/learn-follow/SKILL.md +83 -0
- package/.codex/skills/learn-investigate/SKILL.md +83 -0
- package/.codex/skills/learn-retro/SKILL.md +83 -0
- package/.codex/skills/learn-second-opinion/SKILL.md +86 -0
- package/.codex/skills/maestro/SKILL.md +151 -279
- package/.codex/skills/maestro-analyze/SKILL.md +59 -71
- package/.codex/skills/maestro-brainstorm/SKILL.md +452 -463
- package/.codex/skills/maestro-chain/SKILL.md +95 -110
- package/.codex/skills/maestro-coordinate/SKILL.md +68 -234
- package/.codex/skills/maestro-execute/SKILL.md +435 -446
- package/.codex/skills/maestro-fork/SKILL.md +98 -0
- package/.codex/skills/maestro-init/SKILL.md +172 -167
- package/.codex/skills/maestro-learn/SKILL.md +80 -0
- package/.codex/skills/maestro-link-coordinate/SKILL.md +224 -220
- package/.codex/skills/maestro-merge/SKILL.md +69 -0
- package/.codex/skills/maestro-milestone-audit/SKILL.md +108 -103
- package/.codex/skills/maestro-milestone-complete/SKILL.md +155 -149
- package/.codex/skills/maestro-milestone-release/SKILL.md +70 -0
- package/.codex/skills/maestro-overlay/SKILL.md +188 -185
- package/.codex/skills/maestro-plan/SKILL.md +58 -69
- package/.codex/skills/maestro-quick/SKILL.md +26 -23
- package/.codex/skills/maestro-roadmap/SKILL.md +65 -73
- package/.codex/skills/maestro-spec-generate/SKILL.md +66 -74
- package/.codex/skills/maestro-ui-design/SKILL.md +35 -32
- package/.codex/skills/maestro-verify/SKILL.md +556 -566
- package/.codex/skills/manage-codebase-rebuild/SKILL.md +397 -405
- package/.codex/skills/manage-codebase-refresh/SKILL.md +93 -82
- package/.codex/skills/manage-harvest/SKILL.md +82 -0
- package/.codex/skills/manage-issue/SKILL.md +80 -65
- package/.codex/skills/manage-issue-discover/SKILL.md +491 -503
- package/.codex/skills/manage-learn/SKILL.md +190 -186
- package/.codex/skills/manage-memory/SKILL.md +95 -72
- package/.codex/skills/manage-memory-capture/SKILL.md +99 -86
- package/.codex/skills/manage-status/SKILL.md +102 -89
- package/.codex/skills/quality-business-test/SKILL.md +228 -223
- package/.codex/skills/quality-debug/SKILL.md +54 -66
- package/.codex/skills/quality-integration-test/SKILL.md +532 -544
- package/.codex/skills/quality-refactor/SKILL.md +197 -191
- package/.codex/skills/quality-retrospective/SKILL.md +512 -505
- package/.codex/skills/quality-review/SKILL.md +95 -107
- package/.codex/skills/quality-sync/SKILL.md +101 -89
- package/.codex/skills/quality-test/SKILL.md +202 -198
- package/.codex/skills/quality-test-gen/SKILL.md +94 -105
- package/.codex/skills/spec-add/SKILL.md +58 -39
- package/.codex/skills/spec-load/SKILL.md +45 -40
- package/.codex/skills/spec-map/SKILL.md +180 -182
- package/.codex/skills/spec-setup/SKILL.md +94 -76
- package/.codex/skills/team-coordinate/SKILL.md +346 -357
- package/.codex/skills/team-executor/SKILL.md +70 -112
- package/.codex/skills/team-lifecycle-v4/SKILL.md +311 -299
- package/.codex/skills/team-quality-assurance/SKILL.md +234 -227
- package/.codex/skills/team-review/SKILL.md +232 -225
- package/.codex/skills/team-tech-debt/SKILL.md +78 -100
- package/.codex/skills/team-testing/SKILL.md +242 -235
- package/.codex/skills/wiki-connect/SKILL.md +75 -0
- package/.codex/skills/wiki-digest/SKILL.md +87 -0
- package/README.md +9 -4
- package/README.zh-CN.md +9 -4
- package/dashboard/dist/assets/{ArtifactsPage-DZNCi6tn.js → ArtifactsPage-CUrrDGgN.js} +1 -1
- package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +49 -0
- package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +27 -0
- package/dashboard/dist/assets/{CollabPage-B4NAHXS2.js → CollabPage-DIUXeazv.js} +1 -1
- package/dashboard/dist/assets/{ExecutionPanel-CFt4LJyq.js → ExecutionPanel-VmYeADFj.js} +1 -1
- package/dashboard/dist/assets/KanbanPage-DLq8v7hg.js +21 -0
- package/dashboard/dist/assets/{MarkdownRenderer-X4af_WNb.js → MarkdownRenderer-D7AehrnR.js} +1 -1
- package/dashboard/dist/assets/{McpPage-BKfCVIyU.js → McpPage-BY0SjTgw.js} +2 -2
- package/dashboard/dist/assets/{OutputPanel-BlBQFJSW.js → OutputPanel-B-Rjwgmv.js} +1 -1
- package/dashboard/dist/assets/{ProblemsPanel-De3DLvoI.js → ProblemsPanel-GEpF-oi4.js} +1 -1
- package/dashboard/dist/assets/RequirementBoardPage-xs8uDM7I.js +6 -0
- package/dashboard/dist/assets/{RequirementPage-Bllxe2XI.js → RequirementPage-BKDSFwjA.js} +5 -10
- package/dashboard/dist/assets/SpecsPage-DLFb9ZH0.js +36 -0
- package/dashboard/dist/assets/SupervisorPage-SOki_kgz.js +6 -0
- package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +11 -0
- package/dashboard/dist/assets/{TreeBrowser-Q12qobZs.js → TreeBrowser-B9DHdULE.js} +1 -1
- package/dashboard/dist/assets/{WorkflowPage-D_Fzdy3_.js → WorkflowPage-C8hWbYim.js} +1 -1
- package/dashboard/dist/assets/{check-u6fGOwQO.js → check-DJDk3A2a.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-Csu22t58.js → chevron-right-C7bVDreZ.js} +1 -1
- package/dashboard/dist/assets/{circle-CMrkbRNg.js → circle-Qfgy4LB_.js} +1 -1
- package/dashboard/dist/assets/{circle-alert-c3tH1P4z.js → circle-alert-Na1vf6qQ.js} +1 -1
- package/dashboard/dist/assets/{circle-check-gYxxSYuH.js → circle-check-CEGgy3NV.js} +1 -1
- package/dashboard/dist/assets/{circle-check-big-TDSeWstm.js → circle-check-big-3JB8zRYj.js} +1 -1
- package/dashboard/dist/assets/{code-CFN2uX9V.js → code-Ble63Idz.js} +1 -1
- package/dashboard/dist/assets/{columns-3-38xIDlzy.js → columns-3-BUcKlxve.js} +1 -1
- package/dashboard/dist/assets/{download-DC7KkKyP.js → download-CMqkfn8x.js} +1 -1
- package/dashboard/dist/assets/{folder-CWq_lAnf.js → folder-B9ewx9LL.js} +1 -1
- package/dashboard/dist/assets/index-C2Mcb4TJ.js +231 -0
- package/dashboard/dist/assets/index-DyBbPc18.css +1 -0
- package/dashboard/dist/assets/{index-Do71weNR.js → index-JTmGteaT.js} +1 -1
- package/dashboard/dist/assets/{list-CgIP_2A-.js → list-DI8Wn2aT.js} +1 -1
- package/dashboard/dist/assets/loader-B5F6PzFT.js +11 -0
- package/dashboard/dist/assets/{minus-DYoN5UGk.js → minus-Lp_BfctG.js} +1 -1
- package/dashboard/dist/assets/{pen-line-Bh_WKYHm.js → pen-line-Ch7sphzZ.js} +1 -1
- package/dashboard/dist/assets/pencil-_yRMHmGT.js +6 -0
- package/dashboard/dist/assets/{proxy-BKxDAKTj.js → proxy-D72Y8a4Y.js} +1 -1
- package/dashboard/dist/assets/{search-SieXnOgr.js → search-BS6fI6Bg.js} +1 -1
- package/dashboard/dist/assets/{shallow-Bme1JY57.js → shallow-BXasQBvr.js} +1 -1
- package/dashboard/dist/assets/table-CeGlFjlP.js +6 -0
- package/dashboard/dist/assets/{terminal-BB3Xfuv5.js → terminal-BJic2yW-.js} +1 -1
- package/dashboard/dist/assets/{trash-2-C8f4vFFM.js → trash-2-Czz4X8Fb.js} +1 -1
- package/dashboard/dist/assets/{zap-4uwlzVm0.js → zap-C3H0jVFA.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +16 -1
- package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js +1 -2
- package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.js +2 -1
- package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/index.js +3 -0
- package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/collab.js +124 -0
- package/dashboard/dist-server/dashboard/src/server/routes/collab.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js +75 -30
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +5 -0
- package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +5 -0
- package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.d.ts +10 -0
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.js +73 -0
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/shared/collab-types.d.ts +31 -0
- package/dashboard/dist-server/dashboard/src/shared/collab-types.js +28 -0
- package/dashboard/dist-server/dashboard/src/shared/collab-types.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.js +10 -0
- package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/coordinate-types.d.ts +22 -0
- package/dashboard/dist-server/dashboard/src/shared/issue-types.d.ts +12 -0
- package/dashboard/dist-server/dashboard/src/shared/issue-types.js +12 -0
- package/dashboard/dist-server/dashboard/src/shared/issue-types.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +22 -0
- package/dashboard/dist-server/dashboard/src/shared/team-types.js +7 -0
- package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/types.d.ts +3 -2
- package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +28 -2
- package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
- package/dashboard/dist-server/shared/agent-types.d.ts +4 -0
- package/dashboard/dist-server/src/hooks/constants.d.ts +3 -1
- package/dashboard/dist-server/src/hooks/constants.js +4 -2
- package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
- package/dist/shared/agent-types.d.ts +4 -0
- package/dist/shared/agent-types.d.ts.map +1 -1
- package/dist/src/commands/collab.js +4 -4
- package/dist/src/commands/collab.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +66 -1
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +29 -18
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/spec.d.ts.map +1 -1
- package/dist/src/commands/spec.js +7 -2
- package/dist/src/commands/spec.js.map +1 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.js +23 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
- package/dist/src/hooks/constants.d.ts +3 -1
- package/dist/src/hooks/constants.d.ts.map +1 -1
- package/dist/src/hooks/constants.js +4 -2
- package/dist/src/hooks/constants.js.map +1 -1
- package/dist/src/hooks/guards/index.d.ts +1 -0
- package/dist/src/hooks/guards/index.d.ts.map +1 -1
- package/dist/src/hooks/guards/index.js +1 -0
- package/dist/src/hooks/guards/index.js.map +1 -1
- package/dist/src/hooks/guards/spec-validator.d.ts +25 -0
- package/dist/src/hooks/guards/spec-validator.d.ts.map +1 -0
- package/dist/src/hooks/guards/spec-validator.js +66 -0
- package/dist/src/hooks/guards/spec-validator.js.map +1 -0
- package/dist/src/hooks/keyword-spec-injector.d.ts +21 -0
- package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -0
- package/dist/src/hooks/keyword-spec-injector.js +96 -0
- package/dist/src/hooks/keyword-spec-injector.js.map +1 -0
- package/dist/src/hooks/plugins/spec-injection-plugin.d.ts +2 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.js +21 -12
- package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
- package/dist/src/hooks/skill-context.d.ts +3 -0
- package/dist/src/hooks/skill-context.d.ts.map +1 -1
- package/dist/src/hooks/skill-context.js +95 -9
- package/dist/src/hooks/skill-context.js.map +1 -1
- package/dist/src/hooks/spec-bridge.d.ts +40 -0
- package/dist/src/hooks/spec-bridge.d.ts.map +1 -0
- package/dist/src/hooks/spec-bridge.js +97 -0
- package/dist/src/hooks/spec-bridge.js.map +1 -0
- package/dist/src/hooks/spec-injector.d.ts.map +1 -1
- package/dist/src/hooks/spec-injector.js +18 -12
- package/dist/src/hooks/spec-injector.js.map +1 -1
- package/dist/src/hooks/statusline.d.ts.map +1 -1
- package/dist/src/hooks/statusline.js +6 -3
- package/dist/src/hooks/statusline.js.map +1 -1
- package/dist/src/team/phase-orchestrator.d.ts +52 -0
- package/dist/src/team/phase-orchestrator.d.ts.map +1 -0
- package/dist/src/team/phase-orchestrator.js +165 -0
- package/dist/src/team/phase-orchestrator.js.map +1 -0
- package/dist/src/team/phase-types.d.ts +51 -0
- package/dist/src/team/phase-types.d.ts.map +1 -0
- package/dist/src/team/phase-types.js +41 -0
- package/dist/src/team/phase-types.js.map +1 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +6 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/merge-validator.d.ts.map +1 -1
- package/dist/src/tools/merge-validator.js +114 -16
- package/dist/src/tools/merge-validator.js.map +1 -1
- package/dist/src/tools/spec-entry-parser.d.ts +56 -0
- package/dist/src/tools/spec-entry-parser.d.ts.map +1 -0
- package/dist/src/tools/spec-entry-parser.js +196 -0
- package/dist/src/tools/spec-entry-parser.js.map +1 -0
- package/dist/src/tools/spec-init.d.ts.map +1 -1
- package/dist/src/tools/spec-init.js +66 -92
- package/dist/src/tools/spec-init.js.map +1 -1
- package/dist/src/tools/spec-keyword-index.d.ts +30 -0
- package/dist/src/tools/spec-keyword-index.d.ts.map +1 -0
- package/dist/src/tools/spec-keyword-index.js +101 -0
- package/dist/src/tools/spec-keyword-index.js.map +1 -0
- package/dist/src/tools/spec-loader.d.ts +3 -3
- package/dist/src/tools/spec-loader.d.ts.map +1 -1
- package/dist/src/tools/spec-loader.js +49 -23
- package/dist/src/tools/spec-loader.js.map +1 -1
- package/dist/src/tools/team-agents.d.ts +27 -0
- package/dist/src/tools/team-agents.d.ts.map +1 -0
- package/dist/src/tools/team-agents.js +362 -0
- package/dist/src/tools/team-agents.js.map +1 -0
- package/dist/src/tools/team-mailbox.d.ts +40 -0
- package/dist/src/tools/team-mailbox.d.ts.map +1 -0
- package/dist/src/tools/team-mailbox.js +384 -0
- package/dist/src/tools/team-mailbox.js.map +1 -0
- package/dist/src/tools/team-msg.d.ts +17 -8
- package/dist/src/tools/team-msg.d.ts.map +1 -1
- package/dist/src/tools/team-msg.js +110 -13
- package/dist/src/tools/team-msg.js.map +1 -1
- package/dist/src/tools/team-tasks-mcp.d.ts +27 -0
- package/dist/src/tools/team-tasks-mcp.d.ts.map +1 -0
- package/dist/src/tools/team-tasks-mcp.js +408 -0
- package/dist/src/tools/team-tasks-mcp.js.map +1 -0
- package/package.json +2 -1
- package/shared/agent-types.ts +4 -0
- package/templates/worktree-scope.json +9 -10
- package/templates/worktrees.json +26 -27
- package/workflows/analyze.md +816 -816
- package/workflows/brainstorm.md +480 -471
- package/workflows/codebase-rebuild.md +332 -332
- package/workflows/codebase-refresh.md +240 -240
- package/workflows/debug.md +16 -6
- package/workflows/execute.md +1 -1
- package/workflows/fork.md +100 -36
- package/workflows/harvest.md +420 -420
- package/workflows/integration-test.md +355 -343
- package/workflows/issue-discover.md +414 -414
- package/workflows/issue.md +14 -4
- package/workflows/learn.md +19 -5
- package/workflows/maestro.md +1 -0
- package/workflows/map.md +111 -111
- package/workflows/merge.md +113 -55
- package/workflows/milestone-complete.md +176 -176
- package/workflows/plan.md +1 -1
- package/workflows/quick.md +497 -497
- package/workflows/refactor.md +300 -300
- package/workflows/retrospective.md +61 -22
- package/workflows/review.md +17 -4
- package/workflows/roadmap.md +335 -335
- package/workflows/spec-generate.md +640 -640
- package/workflows/specs-add.md +46 -81
- package/workflows/specs-load.md +15 -17
- package/workflows/specs-setup.md +40 -161
- package/workflows/test.md +12 -2
- package/workflows/ui-style.md +9 -2
- package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +0 -49
- package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +0 -22
- package/dashboard/dist/assets/KanbanPage-C8USth6H.js +0 -21
- package/dashboard/dist/assets/RequirementBoardPage-Bf1trzqs.js +0 -11
- package/dashboard/dist/assets/SpecsPage-9lwxKT27.js +0 -36
- package/dashboard/dist/assets/SupervisorPage-SusdfHFq.js +0 -6
- package/dashboard/dist/assets/TeamsPage-DsuM6OwC.js +0 -6
- package/dashboard/dist/assets/arrow-left-Bqtb2hle.js +0 -6
- package/dashboard/dist/assets/index-DWG-WrzT.js +0 -231
- package/dashboard/dist/assets/index-GUNJodSR.css +0 -1
- package/dashboard/dist/assets/table-llyEtj-7.js +0 -6
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: workflow-verifier
|
|
3
|
-
description: Goal-backward verification across three layers (existence, substance, connection)
|
|
4
|
-
allowed-tools:
|
|
5
|
-
- Read
|
|
6
|
-
- Glob
|
|
7
|
-
- Grep
|
|
8
|
-
- Bash
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Workflow Verifier
|
|
12
|
-
|
|
13
|
-
## Role
|
|
14
|
-
You perform goal-backward verification of completed work using a three-layer checking approach. You verify that artifacts exist, contain real substance, and are properly connected to the rest of the system. You also validate each task's convergence criteria individually. You are read-only and never modify project files.
|
|
15
|
-
|
|
16
|
-
## Search Tools
|
|
17
|
-
@~/.maestro/templates/search-tools.md — Follow search tool priority and selection patterns.
|
|
18
|
-
|
|
19
|
-
## Process
|
|
20
|
-
|
|
21
|
-
1. **Load goals** -- Read the phase/task goals, success criteria, must_haves, and `convergence.criteria` from each task JSON
|
|
22
|
-
2. **Layer 1 - Existence** -- Verify all expected artifacts exist:
|
|
23
|
-
- Files created as specified in task `files[].path` where `files[].action` is "create"
|
|
24
|
-
- Functions/classes/modules present at `files[].target`
|
|
25
|
-
- Configuration entries added
|
|
26
|
-
3. **Layer 2 - Substance** -- Verify artifacts are non-trivial:
|
|
27
|
-
- Files contain meaningful implementation (not stubs or TODOs)
|
|
28
|
-
- Functions have real logic (not empty bodies or pass-through)
|
|
29
|
-
- Tests actually test behavior (not empty test cases)
|
|
30
|
-
4. **Layer 3 - Connection** -- Verify artifacts are properly wired:
|
|
31
|
-
- Imports resolve correctly
|
|
32
|
-
- New modules are registered/exported
|
|
33
|
-
- Routes are mounted, handlers are connected
|
|
34
|
-
- Configuration is loaded and used
|
|
35
|
-
5. **Per-task convergence validation** -- For each completed task, verify every item in `convergence.criteria`:
|
|
36
|
-
- Run `convergence.verification` command if defined
|
|
37
|
-
- Check each criterion individually (pass/fail with evidence)
|
|
38
|
-
- Cross-reference with task summaries in `.summaries/`
|
|
39
|
-
6. **Check must_haves** -- Verify each must_have category:
|
|
40
|
-
- `truths`: Invariants that must hold
|
|
41
|
-
- `artifacts`: Files/outputs that must exist
|
|
42
|
-
- `key_links`: Connections that must be wired
|
|
43
|
-
7. **Write report** -- Output verification.json with results
|
|
44
|
-
|
|
45
|
-
## Input
|
|
46
|
-
- Phase or task goals with must_haves definition
|
|
47
|
-
- `.task/TASK-{NNN}.json` files with `convergence.criteria` to validate
|
|
48
|
-
- Completed code/artifacts to verify
|
|
49
|
-
- Task summaries from `.summaries/`
|
|
50
|
-
- **Project specs** — `maestro spec load --category validation`: verification criteria, acceptance standards. Must verify code complies with loaded constraints.
|
|
51
|
-
|
|
52
|
-
## Output
|
|
53
|
-
`verification.json`:
|
|
54
|
-
```json
|
|
55
|
-
{
|
|
56
|
-
"phase": "<phase-id>",
|
|
57
|
-
"status": "pass|fail",
|
|
58
|
-
"layers": {
|
|
59
|
-
"existence": {"pass": true, "checks": [...]},
|
|
60
|
-
"substance": {"pass": true, "checks": [...]},
|
|
61
|
-
"connection": {"pass": false, "checks": [...]}
|
|
62
|
-
},
|
|
63
|
-
"convergence_check": {
|
|
64
|
-
"TASK-001": {
|
|
65
|
-
"status": "pass",
|
|
66
|
-
"criteria": [
|
|
67
|
-
{"criterion": "File src/tools/new-tool.ts exports NewTool class", "pass": true, "evidence": "grep confirms export at line 15"},
|
|
68
|
-
{"criterion": "npm run build completes without errors", "pass": true, "evidence": "build exit code 0"}
|
|
69
|
-
]
|
|
70
|
-
},
|
|
71
|
-
"TASK-002": {
|
|
72
|
-
"status": "fail",
|
|
73
|
-
"criteria": [
|
|
74
|
-
{"criterion": "GET /api/health returns 200", "pass": true, "evidence": "curl test passed"},
|
|
75
|
-
{"criterion": "Response includes version field", "pass": false, "evidence": "Response body missing 'version' key"}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
"must_haves": {
|
|
80
|
-
"truths": [{"claim": "...", "verified": true}],
|
|
81
|
-
"artifacts": [{"path": "...", "exists": true, "substantial": true}],
|
|
82
|
-
"key_links": [{"from": "...", "to": "...", "connected": false}]
|
|
83
|
-
},
|
|
84
|
-
"gaps": [
|
|
85
|
-
{"layer": "connection", "description": "Router not mounted in app.ts", "severity": "high", "task": "TASK-002"}
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Constraints
|
|
91
|
-
- Read-only; never modify project files
|
|
92
|
-
- Every check must have evidence (file:line reference or command output)
|
|
93
|
-
- Layer 2 checks must go beyond file existence (actually read content)
|
|
94
|
-
- Layer 3 checks must trace import/require chains
|
|
95
|
-
- Verify each `convergence.criteria` item from task JSON individually
|
|
96
|
-
- Report gaps with severity (high/medium/low), specific location, and originating task ID
|
|
97
|
-
- Do not suggest fixes; only identify gaps
|
|
98
|
-
|
|
99
|
-
## Schema Reference
|
|
100
|
-
- **Task schema**: `templates/task.json` -- Used to locate `convergence.criteria` and `files` for verification
|
|
101
|
-
- Key fields consumed during verification:
|
|
102
|
-
- `convergence.criteria` -- Array of testable conditions to check per task (replaces deprecated `done_when`)
|
|
103
|
-
- `convergence.verification` -- Command or steps to run for automated checking
|
|
104
|
-
- `files[].{path, action, target}` -- Expected file operations to verify
|
|
105
|
-
- `status` -- Top-level task status (only verify tasks with status "completed")
|
|
106
|
-
- **Verification template**: `templates/verification.json` -- Output format reference
|
|
107
|
-
|
|
108
|
-
## Output Location
|
|
109
|
-
- **
|
|
110
|
-
- **
|
|
111
|
-
- **Per-task verification**: Embedded in the `convergence_check` block within verification.json (not separate files)
|
|
112
|
-
|
|
113
|
-
## Error Behavior
|
|
114
|
-
- **Task JSON missing or malformed**: Skip task, log as gap with severity "high" and description "Task definition missing or unreadable"
|
|
115
|
-
- **convergence.verification command fails**: Log command error output as evidence, mark criterion as "fail"
|
|
116
|
-
- **Cannot determine pass/fail for a criterion**: Mark as "inconclusive" with explanation; count as fail for overall status
|
|
117
|
-
- **Build/test environment unavailable**: Log as gap with severity "medium", skip automated checks, perform static checks only
|
|
118
|
-
- **All tasks pass all layers**: Set status to "pass" and report clean verification
|
|
119
|
-
- **Any gap found**: Set status to "fail" regardless of gap severity; list all gaps for resolution
|
|
1
|
+
---
|
|
2
|
+
name: workflow-verifier
|
|
3
|
+
description: Goal-backward verification across three layers (existence, substance, connection)
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Glob
|
|
7
|
+
- Grep
|
|
8
|
+
- Bash
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Workflow Verifier
|
|
12
|
+
|
|
13
|
+
## Role
|
|
14
|
+
You perform goal-backward verification of completed work using a three-layer checking approach. You verify that artifacts exist, contain real substance, and are properly connected to the rest of the system. You also validate each task's convergence criteria individually. You are read-only and never modify project files.
|
|
15
|
+
|
|
16
|
+
## Search Tools
|
|
17
|
+
@~/.maestro/templates/search-tools.md — Follow search tool priority and selection patterns.
|
|
18
|
+
|
|
19
|
+
## Process
|
|
20
|
+
|
|
21
|
+
1. **Load goals** -- Read the phase/task goals, success criteria, must_haves, and `convergence.criteria` from each task JSON
|
|
22
|
+
2. **Layer 1 - Existence** -- Verify all expected artifacts exist:
|
|
23
|
+
- Files created as specified in task `files[].path` where `files[].action` is "create"
|
|
24
|
+
- Functions/classes/modules present at `files[].target`
|
|
25
|
+
- Configuration entries added
|
|
26
|
+
3. **Layer 2 - Substance** -- Verify artifacts are non-trivial:
|
|
27
|
+
- Files contain meaningful implementation (not stubs or TODOs)
|
|
28
|
+
- Functions have real logic (not empty bodies or pass-through)
|
|
29
|
+
- Tests actually test behavior (not empty test cases)
|
|
30
|
+
4. **Layer 3 - Connection** -- Verify artifacts are properly wired:
|
|
31
|
+
- Imports resolve correctly
|
|
32
|
+
- New modules are registered/exported
|
|
33
|
+
- Routes are mounted, handlers are connected
|
|
34
|
+
- Configuration is loaded and used
|
|
35
|
+
5. **Per-task convergence validation** -- For each completed task, verify every item in `convergence.criteria`:
|
|
36
|
+
- Run `convergence.verification` command if defined
|
|
37
|
+
- Check each criterion individually (pass/fail with evidence)
|
|
38
|
+
- Cross-reference with task summaries in `.summaries/`
|
|
39
|
+
6. **Check must_haves** -- Verify each must_have category:
|
|
40
|
+
- `truths`: Invariants that must hold
|
|
41
|
+
- `artifacts`: Files/outputs that must exist
|
|
42
|
+
- `key_links`: Connections that must be wired
|
|
43
|
+
7. **Write report** -- Output verification.json with results
|
|
44
|
+
|
|
45
|
+
## Input
|
|
46
|
+
- Phase or task goals with must_haves definition
|
|
47
|
+
- `.task/TASK-{NNN}.json` files with `convergence.criteria` to validate
|
|
48
|
+
- Completed code/artifacts to verify
|
|
49
|
+
- Task summaries from `.summaries/`
|
|
50
|
+
- **Project specs** — `maestro spec load --category validation`: verification criteria, acceptance standards. Must verify code complies with loaded constraints.
|
|
51
|
+
|
|
52
|
+
## Output
|
|
53
|
+
`verification.json`:
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"phase": "<phase-id>",
|
|
57
|
+
"status": "pass|fail",
|
|
58
|
+
"layers": {
|
|
59
|
+
"existence": {"pass": true, "checks": [...]},
|
|
60
|
+
"substance": {"pass": true, "checks": [...]},
|
|
61
|
+
"connection": {"pass": false, "checks": [...]}
|
|
62
|
+
},
|
|
63
|
+
"convergence_check": {
|
|
64
|
+
"TASK-001": {
|
|
65
|
+
"status": "pass",
|
|
66
|
+
"criteria": [
|
|
67
|
+
{"criterion": "File src/tools/new-tool.ts exports NewTool class", "pass": true, "evidence": "grep confirms export at line 15"},
|
|
68
|
+
{"criterion": "npm run build completes without errors", "pass": true, "evidence": "build exit code 0"}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"TASK-002": {
|
|
72
|
+
"status": "fail",
|
|
73
|
+
"criteria": [
|
|
74
|
+
{"criterion": "GET /api/health returns 200", "pass": true, "evidence": "curl test passed"},
|
|
75
|
+
{"criterion": "Response includes version field", "pass": false, "evidence": "Response body missing 'version' key"}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"must_haves": {
|
|
80
|
+
"truths": [{"claim": "...", "verified": true}],
|
|
81
|
+
"artifacts": [{"path": "...", "exists": true, "substantial": true}],
|
|
82
|
+
"key_links": [{"from": "...", "to": "...", "connected": false}]
|
|
83
|
+
},
|
|
84
|
+
"gaps": [
|
|
85
|
+
{"layer": "connection", "description": "Router not mounted in app.ts", "severity": "high", "task": "TASK-002"}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Constraints
|
|
91
|
+
- Read-only; never modify project files
|
|
92
|
+
- Every check must have evidence (file:line reference or command output)
|
|
93
|
+
- Layer 2 checks must go beyond file existence (actually read content)
|
|
94
|
+
- Layer 3 checks must trace import/require chains
|
|
95
|
+
- Verify each `convergence.criteria` item from task JSON individually
|
|
96
|
+
- Report gaps with severity (high/medium/low), specific location, and originating task ID
|
|
97
|
+
- Do not suggest fixes; only identify gaps
|
|
98
|
+
|
|
99
|
+
## Schema Reference
|
|
100
|
+
- **Task schema**: `templates/task.json` -- Used to locate `convergence.criteria` and `files` for verification
|
|
101
|
+
- Key fields consumed during verification:
|
|
102
|
+
- `convergence.criteria` -- Array of testable conditions to check per task (replaces deprecated `done_when`)
|
|
103
|
+
- `convergence.verification` -- Command or steps to run for automated checking
|
|
104
|
+
- `files[].{path, action, target}` -- Expected file operations to verify
|
|
105
|
+
- `status` -- Top-level task status (only verify tasks with status "completed")
|
|
106
|
+
- **Verification template**: `templates/verification.json` -- Output format reference
|
|
107
|
+
|
|
108
|
+
## Output Location
|
|
109
|
+
- **Scratch verification**: `.workflow/scratch/{slug}/verification.json`
|
|
110
|
+
- **Legacy fallback**: `.workflow/phases/{NN}-{slug}/` paths are still recognized for backward compatibility
|
|
111
|
+
- **Per-task verification**: Embedded in the `convergence_check` block within verification.json (not separate files)
|
|
112
|
+
|
|
113
|
+
## Error Behavior
|
|
114
|
+
- **Task JSON missing or malformed**: Skip task, log as gap with severity "high" and description "Task definition missing or unreadable"
|
|
115
|
+
- **convergence.verification command fails**: Log command error output as evidence, mark criterion as "fail"
|
|
116
|
+
- **Cannot determine pass/fail for a criterion**: Mark as "inconclusive" with explanation; count as fail for overall status
|
|
117
|
+
- **Build/test environment unavailable**: Log as gap with severity "medium", skip automated checks, perform static checks only
|
|
118
|
+
- **All tasks pass all layers**: Set status to "pass" and report clean verification
|
|
119
|
+
- **Any gap found**: Set status to "fail" regardless of gap severity; list all gaps for resolution
|
|
@@ -1,176 +1,176 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: learn-decompose
|
|
3
|
-
description: Decompose code into cataloged design patterns, saving findings to specs and wiki
|
|
4
|
-
argument-hint: "<path|module> [--patterns <list>] [--save-spec] [--save-wiki]"
|
|
5
|
-
allowed-tools:
|
|
6
|
-
- Read
|
|
7
|
-
- Write
|
|
8
|
-
- Bash
|
|
9
|
-
- Glob
|
|
10
|
-
- Grep
|
|
11
|
-
- Agent
|
|
12
|
-
- AskUserQuestion
|
|
13
|
-
---
|
|
14
|
-
<purpose>
|
|
15
|
-
Systematic pattern extraction from code. Analyzes a module or directory across 4 dimensions (structural, behavioral, data, error) using parallel agents, then catalogs findings with code anchors. Discovered patterns can be persisted to specs (via `spec-add`) and wiki (via `maestro wiki create`).
|
|
16
|
-
|
|
17
|
-
Unlike `learn-follow` which reads code with forcing questions, this command is purpose-built for pattern identification and cataloging. It produces a reusable pattern catalog that feeds into the spec system.
|
|
18
|
-
</purpose>
|
|
19
|
-
|
|
20
|
-
<context>
|
|
21
|
-
Arguments: $ARGUMENTS
|
|
22
|
-
|
|
23
|
-
**Target resolution:**
|
|
24
|
-
- File path → analyze that file
|
|
25
|
-
- Directory path → analyze all source files in it
|
|
26
|
-
- Module name → Glob for matching directory under `src/`
|
|
27
|
-
|
|
28
|
-
**Flags:**
|
|
29
|
-
- `--patterns <list>` — Comma-separated pattern names to look for (e.g., "observer,factory,middleware"). If omitted, detect all.
|
|
30
|
-
- `--save-spec` — Invoke `Skill({ skill: "spec-add" })` for each newly discovered pattern
|
|
31
|
-
- `--save-wiki` — Create wiki note entries per pattern group via `maestro wiki create --type note`
|
|
32
|
-
|
|
33
|
-
**Storage written:**
|
|
34
|
-
- `.workflow/learning/decompose-{slug}-{YYYY-MM-DD}.md` — Pattern decomposition report
|
|
35
|
-
- `.workflow/learning/lessons.jsonl` — One insight per discovered pattern (source: "decompose")
|
|
36
|
-
- `.workflow/learning/learning-index.json` — Updated index
|
|
37
|
-
- If `--save-spec`: entries appended to `.workflow/specs/coding-conventions.md`
|
|
38
|
-
- If `--save-wiki`: new wiki note entries
|
|
39
|
-
|
|
40
|
-
**Storage read:**
|
|
41
|
-
- Source files at target path
|
|
42
|
-
- `.workflow/specs/coding-conventions.md` — Existing documented patterns (for dedup)
|
|
43
|
-
- `.workflow/learning/lessons.jsonl` — Previously identified patterns (for dedup)
|
|
44
|
-
</context>
|
|
45
|
-
|
|
46
|
-
<execution>
|
|
47
|
-
|
|
48
|
-
### Stage 1: Resolve Target
|
|
49
|
-
- If argument is a file: verify exists, use as single-file target
|
|
50
|
-
- If argument is a directory: list all `.ts`, `.tsx`, `.js`, `.jsx` files (exclude `node_modules`, `dist`, `.test.`)
|
|
51
|
-
- If argument is a module name: Glob `src/**/{module}*` to find matching directory
|
|
52
|
-
- If target unresolvable, AskUserQuestion with suggestions
|
|
53
|
-
|
|
54
|
-
### Stage 2: Load Existing Patterns
|
|
55
|
-
- Read `.workflow/specs/coding-conventions.md` — extract documented patterns
|
|
56
|
-
- Search `lessons.jsonl` for entries with `category: "pattern"` — previously discovered
|
|
57
|
-
- Build dedup set: pattern names already known
|
|
58
|
-
|
|
59
|
-
### Stage 3: Parallel Agent Analysis (4 dimensions)
|
|
60
|
-
Spawn 4 Agents in a single message, each analyzing the target from one dimension:
|
|
61
|
-
|
|
62
|
-
**Agent 1 — Structural Patterns:**
|
|
63
|
-
- Class hierarchy and composition relationships
|
|
64
|
-
- Module boundaries and encapsulation
|
|
65
|
-
- Dependency injection / inversion of control
|
|
66
|
-
- Builder, Factory, Singleton patterns
|
|
67
|
-
- Export structure (barrel files, re-exports)
|
|
68
|
-
|
|
69
|
-
**Agent 2 — Behavioral Patterns:**
|
|
70
|
-
- Event flow (EventEmitter, pub/sub, callbacks)
|
|
71
|
-
- Middleware chains and interceptors
|
|
72
|
-
- Observer/subscriber patterns
|
|
73
|
-
- Command/strategy patterns
|
|
74
|
-
- State machines
|
|
75
|
-
|
|
76
|
-
**Agent 3 — Data Patterns:**
|
|
77
|
-
- Repository / data access patterns
|
|
78
|
-
- DTO / transformation pipelines
|
|
79
|
-
- Caching strategies (memoization, LRU, TTL)
|
|
80
|
-
- Serialization / deserialization
|
|
81
|
-
- Schema validation approaches
|
|
82
|
-
|
|
83
|
-
**Agent 4 — Error Patterns:**
|
|
84
|
-
- Error boundary and propagation
|
|
85
|
-
- Retry / backoff / circuit breaker
|
|
86
|
-
- Fallback chains
|
|
87
|
-
- Validation and guard clauses
|
|
88
|
-
- Logging and observability patterns
|
|
89
|
-
|
|
90
|
-
Each agent returns findings as structured list:
|
|
91
|
-
```json
|
|
92
|
-
[{
|
|
93
|
-
"name": "pattern name",
|
|
94
|
-
"dimension": "structural|behavioral|data|error",
|
|
95
|
-
"confidence": "high|medium|low",
|
|
96
|
-
"anchors": ["file:line", "file:line"],
|
|
97
|
-
"description": "what it does",
|
|
98
|
-
"rationale": "why this approach",
|
|
99
|
-
"tradeoffs": "what was given up"
|
|
100
|
-
}]
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
If `--patterns` specified, instruct agents to focus only on named patterns.
|
|
104
|
-
|
|
105
|
-
### Stage 4: Cross-Reference & Dedup
|
|
106
|
-
- Match agent findings against existing pattern set from Stage 2
|
|
107
|
-
- Mark each finding: `documented` (already in specs), `known` (in lessons), or `new`
|
|
108
|
-
- Flag contradictions: finding conflicts with documented convention
|
|
109
|
-
- Merge duplicate findings across agents (same pattern found by multiple dimensions)
|
|
110
|
-
|
|
111
|
-
### Stage 5: Produce Pattern Catalog
|
|
112
|
-
Build the decomposition report grouped by dimension:
|
|
113
|
-
|
|
114
|
-
```markdown
|
|
115
|
-
# Pattern Decomposition: {target}
|
|
116
|
-
|
|
117
|
-
## Summary
|
|
118
|
-
- Patterns found: N (M new, K documented, J known)
|
|
119
|
-
- Dimensions analyzed: structural, behavioral, data, error
|
|
120
|
-
- Contradictions: N
|
|
121
|
-
|
|
122
|
-
## Structural Patterns
|
|
123
|
-
| Pattern | Confidence | Location | Status |
|
|
124
|
-
|---------|-----------|----------|--------|
|
|
125
|
-
| {name} | high | {file:line} | new / documented / known |
|
|
126
|
-
|
|
127
|
-
### {Pattern Name}
|
|
128
|
-
**Description:** ...
|
|
129
|
-
**Code example:** (inline snippet from anchor)
|
|
130
|
-
**Trade-offs:** ...
|
|
131
|
-
|
|
132
|
-
## Behavioral Patterns
|
|
133
|
-
...
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Stage 6: Persist
|
|
137
|
-
1. Write `.workflow/learning/decompose-{slug}-{date}.md`
|
|
138
|
-
2. Append each **new** pattern to `lessons.jsonl`:
|
|
139
|
-
- `source: "decompose"`, `category: "pattern"`, `confidence: <level>`
|
|
140
|
-
- Tags: `["decompose", "{dimension}", "{target-slug}"]`
|
|
141
|
-
- Stable INS-id from `hash("decompose" + target + pattern_name)`
|
|
142
|
-
3. Update `learning-index.json`
|
|
143
|
-
4. If `--save-spec`: for each new pattern, invoke `Skill({ skill: "spec-add", args: "pattern {description}" })`
|
|
144
|
-
5. If `--save-wiki`: create wiki note per dimension group via `maestro wiki create --type note --slug decompose-{dimension}-{slug}`
|
|
145
|
-
6. Display summary with counts and next steps
|
|
146
|
-
|
|
147
|
-
**Next-step routing:**
|
|
148
|
-
- Follow-along on a specific pattern → `/learn-follow <anchor-file>`
|
|
149
|
-
- Get second opinion on findings → `/learn-second-opinion <target>`
|
|
150
|
-
- Add all new patterns to specs → `/spec-add
|
|
151
|
-
</execution>
|
|
152
|
-
|
|
153
|
-
<error_codes>
|
|
154
|
-
| Code | Severity | Condition | Recovery |
|
|
155
|
-
|------|----------|-----------|----------|
|
|
156
|
-
| E001 | error | Target path not found | Check path exists, or use a module name |
|
|
157
|
-
| E002 | error | No source files found in target directory | Check target has .ts/.js files, exclude filters may be too aggressive |
|
|
158
|
-
| W001 | warning | One or more dimension agents failed — partial results | Proceed with available dimensions, retry failed ones |
|
|
159
|
-
| W002 | warning | coding-conventions.md not found — skipping dedup against specs | All patterns marked as "new" |
|
|
160
|
-
| W003 | warning | Large target (>50 files) — analysis may be slow | Consider narrowing scope with --patterns filter |
|
|
161
|
-
</error_codes>
|
|
162
|
-
|
|
163
|
-
<success_criteria>
|
|
164
|
-
- [ ] Target resolved to concrete file list
|
|
165
|
-
- [ ] Existing patterns loaded for dedup
|
|
166
|
-
- [ ] All 4 dimension agents spawned in parallel
|
|
167
|
-
- [ ] Each finding has: name, dimension, confidence, anchors, description, tradeoffs
|
|
168
|
-
- [ ] Cross-reference performed (documented / known / new status assigned)
|
|
169
|
-
- [ ] Pattern catalog written to `decompose-{slug}-{date}.md`
|
|
170
|
-
- [ ] New patterns appended to `lessons.jsonl` with stable INS-ids
|
|
171
|
-
- [ ] `learning-index.json` updated
|
|
172
|
-
- [ ] If --save-spec: spec entries created for new patterns
|
|
173
|
-
- [ ] If --save-wiki: wiki notes created per dimension group
|
|
174
|
-
- [ ] No files modified outside `.workflow/learning/` (and optionally specs/wiki)
|
|
175
|
-
- [ ] Summary displayed with pattern counts and next-step routing
|
|
176
|
-
</success_criteria>
|
|
1
|
+
---
|
|
2
|
+
name: learn-decompose
|
|
3
|
+
description: Decompose code into cataloged design patterns, saving findings to specs and wiki
|
|
4
|
+
argument-hint: "<path|module> [--patterns <list>] [--save-spec] [--save-wiki]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- Agent
|
|
12
|
+
- AskUserQuestion
|
|
13
|
+
---
|
|
14
|
+
<purpose>
|
|
15
|
+
Systematic pattern extraction from code. Analyzes a module or directory across 4 dimensions (structural, behavioral, data, error) using parallel agents, then catalogs findings with code anchors. Discovered patterns can be persisted to specs (via `spec-add`) and wiki (via `maestro wiki create`).
|
|
16
|
+
|
|
17
|
+
Unlike `learn-follow` which reads code with forcing questions, this command is purpose-built for pattern identification and cataloging. It produces a reusable pattern catalog that feeds into the spec system.
|
|
18
|
+
</purpose>
|
|
19
|
+
|
|
20
|
+
<context>
|
|
21
|
+
Arguments: $ARGUMENTS
|
|
22
|
+
|
|
23
|
+
**Target resolution:**
|
|
24
|
+
- File path → analyze that file
|
|
25
|
+
- Directory path → analyze all source files in it
|
|
26
|
+
- Module name → Glob for matching directory under `src/`
|
|
27
|
+
|
|
28
|
+
**Flags:**
|
|
29
|
+
- `--patterns <list>` — Comma-separated pattern names to look for (e.g., "observer,factory,middleware"). If omitted, detect all.
|
|
30
|
+
- `--save-spec` — Invoke `Skill({ skill: "spec-add" })` for each newly discovered pattern
|
|
31
|
+
- `--save-wiki` — Create wiki note entries per pattern group via `maestro wiki create --type note`
|
|
32
|
+
|
|
33
|
+
**Storage written:**
|
|
34
|
+
- `.workflow/learning/decompose-{slug}-{YYYY-MM-DD}.md` — Pattern decomposition report
|
|
35
|
+
- `.workflow/learning/lessons.jsonl` — One insight per discovered pattern (source: "decompose")
|
|
36
|
+
- `.workflow/learning/learning-index.json` — Updated index
|
|
37
|
+
- If `--save-spec`: entries appended to `.workflow/specs/coding-conventions.md`
|
|
38
|
+
- If `--save-wiki`: new wiki note entries
|
|
39
|
+
|
|
40
|
+
**Storage read:**
|
|
41
|
+
- Source files at target path
|
|
42
|
+
- `.workflow/specs/coding-conventions.md` — Existing documented patterns (for dedup)
|
|
43
|
+
- `.workflow/learning/lessons.jsonl` — Previously identified patterns (for dedup)
|
|
44
|
+
</context>
|
|
45
|
+
|
|
46
|
+
<execution>
|
|
47
|
+
|
|
48
|
+
### Stage 1: Resolve Target
|
|
49
|
+
- If argument is a file: verify exists, use as single-file target
|
|
50
|
+
- If argument is a directory: list all `.ts`, `.tsx`, `.js`, `.jsx` files (exclude `node_modules`, `dist`, `.test.`)
|
|
51
|
+
- If argument is a module name: Glob `src/**/{module}*` to find matching directory
|
|
52
|
+
- If target unresolvable, AskUserQuestion with suggestions
|
|
53
|
+
|
|
54
|
+
### Stage 2: Load Existing Patterns
|
|
55
|
+
- Read `.workflow/specs/coding-conventions.md` — extract documented patterns
|
|
56
|
+
- Search `lessons.jsonl` for entries with `category: "pattern"` — previously discovered
|
|
57
|
+
- Build dedup set: pattern names already known
|
|
58
|
+
|
|
59
|
+
### Stage 3: Parallel Agent Analysis (4 dimensions)
|
|
60
|
+
Spawn 4 Agents in a single message, each analyzing the target from one dimension:
|
|
61
|
+
|
|
62
|
+
**Agent 1 — Structural Patterns:**
|
|
63
|
+
- Class hierarchy and composition relationships
|
|
64
|
+
- Module boundaries and encapsulation
|
|
65
|
+
- Dependency injection / inversion of control
|
|
66
|
+
- Builder, Factory, Singleton patterns
|
|
67
|
+
- Export structure (barrel files, re-exports)
|
|
68
|
+
|
|
69
|
+
**Agent 2 — Behavioral Patterns:**
|
|
70
|
+
- Event flow (EventEmitter, pub/sub, callbacks)
|
|
71
|
+
- Middleware chains and interceptors
|
|
72
|
+
- Observer/subscriber patterns
|
|
73
|
+
- Command/strategy patterns
|
|
74
|
+
- State machines
|
|
75
|
+
|
|
76
|
+
**Agent 3 — Data Patterns:**
|
|
77
|
+
- Repository / data access patterns
|
|
78
|
+
- DTO / transformation pipelines
|
|
79
|
+
- Caching strategies (memoization, LRU, TTL)
|
|
80
|
+
- Serialization / deserialization
|
|
81
|
+
- Schema validation approaches
|
|
82
|
+
|
|
83
|
+
**Agent 4 — Error Patterns:**
|
|
84
|
+
- Error boundary and propagation
|
|
85
|
+
- Retry / backoff / circuit breaker
|
|
86
|
+
- Fallback chains
|
|
87
|
+
- Validation and guard clauses
|
|
88
|
+
- Logging and observability patterns
|
|
89
|
+
|
|
90
|
+
Each agent returns findings as structured list:
|
|
91
|
+
```json
|
|
92
|
+
[{
|
|
93
|
+
"name": "pattern name",
|
|
94
|
+
"dimension": "structural|behavioral|data|error",
|
|
95
|
+
"confidence": "high|medium|low",
|
|
96
|
+
"anchors": ["file:line", "file:line"],
|
|
97
|
+
"description": "what it does",
|
|
98
|
+
"rationale": "why this approach",
|
|
99
|
+
"tradeoffs": "what was given up"
|
|
100
|
+
}]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
If `--patterns` specified, instruct agents to focus only on named patterns.
|
|
104
|
+
|
|
105
|
+
### Stage 4: Cross-Reference & Dedup
|
|
106
|
+
- Match agent findings against existing pattern set from Stage 2
|
|
107
|
+
- Mark each finding: `documented` (already in specs), `known` (in lessons), or `new`
|
|
108
|
+
- Flag contradictions: finding conflicts with documented convention
|
|
109
|
+
- Merge duplicate findings across agents (same pattern found by multiple dimensions)
|
|
110
|
+
|
|
111
|
+
### Stage 5: Produce Pattern Catalog
|
|
112
|
+
Build the decomposition report grouped by dimension:
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
# Pattern Decomposition: {target}
|
|
116
|
+
|
|
117
|
+
## Summary
|
|
118
|
+
- Patterns found: N (M new, K documented, J known)
|
|
119
|
+
- Dimensions analyzed: structural, behavioral, data, error
|
|
120
|
+
- Contradictions: N
|
|
121
|
+
|
|
122
|
+
## Structural Patterns
|
|
123
|
+
| Pattern | Confidence | Location | Status |
|
|
124
|
+
|---------|-----------|----------|--------|
|
|
125
|
+
| {name} | high | {file:line} | new / documented / known |
|
|
126
|
+
|
|
127
|
+
### {Pattern Name}
|
|
128
|
+
**Description:** ...
|
|
129
|
+
**Code example:** (inline snippet from anchor)
|
|
130
|
+
**Trade-offs:** ...
|
|
131
|
+
|
|
132
|
+
## Behavioral Patterns
|
|
133
|
+
...
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Stage 6: Persist
|
|
137
|
+
1. Write `.workflow/learning/decompose-{slug}-{date}.md`
|
|
138
|
+
2. Append each **new** pattern to `lessons.jsonl`:
|
|
139
|
+
- `source: "decompose"`, `category: "pattern"`, `confidence: <level>`
|
|
140
|
+
- Tags: `["decompose", "{dimension}", "{target-slug}"]`
|
|
141
|
+
- Stable INS-id from `hash("decompose" + target + pattern_name)`
|
|
142
|
+
3. Update `learning-index.json`
|
|
143
|
+
4. If `--save-spec`: for each new pattern, invoke `Skill({ skill: "spec-add", args: "pattern {description}" })`
|
|
144
|
+
5. If `--save-wiki`: create wiki note per dimension group via `maestro wiki create --type note --slug decompose-{dimension}-{slug}`
|
|
145
|
+
6. Display summary with counts and next steps
|
|
146
|
+
|
|
147
|
+
**Next-step routing:**
|
|
148
|
+
- Follow-along on a specific pattern → `/learn-follow <anchor-file>`
|
|
149
|
+
- Get second opinion on findings → `/learn-second-opinion <target>`
|
|
150
|
+
- Add all new patterns to specs → `/spec-add coding ...` per pattern
|
|
151
|
+
</execution>
|
|
152
|
+
|
|
153
|
+
<error_codes>
|
|
154
|
+
| Code | Severity | Condition | Recovery |
|
|
155
|
+
|------|----------|-----------|----------|
|
|
156
|
+
| E001 | error | Target path not found | Check path exists, or use a module name |
|
|
157
|
+
| E002 | error | No source files found in target directory | Check target has .ts/.js files, exclude filters may be too aggressive |
|
|
158
|
+
| W001 | warning | One or more dimension agents failed — partial results | Proceed with available dimensions, retry failed ones |
|
|
159
|
+
| W002 | warning | coding-conventions.md not found — skipping dedup against specs | All patterns marked as "new" |
|
|
160
|
+
| W003 | warning | Large target (>50 files) — analysis may be slow | Consider narrowing scope with --patterns filter |
|
|
161
|
+
</error_codes>
|
|
162
|
+
|
|
163
|
+
<success_criteria>
|
|
164
|
+
- [ ] Target resolved to concrete file list
|
|
165
|
+
- [ ] Existing patterns loaded for dedup
|
|
166
|
+
- [ ] All 4 dimension agents spawned in parallel
|
|
167
|
+
- [ ] Each finding has: name, dimension, confidence, anchors, description, tradeoffs
|
|
168
|
+
- [ ] Cross-reference performed (documented / known / new status assigned)
|
|
169
|
+
- [ ] Pattern catalog written to `decompose-{slug}-{date}.md`
|
|
170
|
+
- [ ] New patterns appended to `lessons.jsonl` with stable INS-ids
|
|
171
|
+
- [ ] `learning-index.json` updated
|
|
172
|
+
- [ ] If --save-spec: spec entries created for new patterns
|
|
173
|
+
- [ ] If --save-wiki: wiki notes created per dimension group
|
|
174
|
+
- [ ] No files modified outside `.workflow/learning/` (and optionally specs/wiki)
|
|
175
|
+
- [ ] Summary displayed with pattern counts and next-step routing
|
|
176
|
+
</success_criteria>
|