maestro-flow 0.3.11 → 0.3.13
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/CLAUDE.md +7 -0
- package/.claude/agents/conceptual-planning-agent.md +1 -0
- package/.claude/agents/workflow-analyzer.md +113 -114
- package/.claude/agents/workflow-collab-planner.md +143 -144
- package/.claude/agents/workflow-debugger.md +101 -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 +84 -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 +177 -178
- package/.claude/agents/workflow-roadmapper.md +81 -83
- package/.claude/agents/workflow-verifier.md +118 -119
- package/.claude/commands/learn-retro.md +2 -2
- package/.claude/commands/learn-second-opinion.md +2 -2
- package/.claude/commands/maestro-analyze.md +10 -2
- package/.claude/commands/maestro-brainstorm.md +2 -1
- package/.claude/commands/maestro-execute.md +21 -4
- package/.claude/commands/maestro-fork.md +133 -111
- package/.claude/commands/maestro-merge.md +85 -77
- package/.claude/commands/maestro-milestone-complete.md +14 -0
- package/.claude/commands/maestro-plan.md +100 -8
- package/.claude/commands/maestro-roadmap.md +113 -2
- package/.claude/commands/maestro-ui-design.md +7 -7
- package/.claude/commands/maestro-update.md +176 -0
- package/.claude/commands/maestro-verify.md +18 -3
- package/.claude/commands/maestro.md +1 -0
- package/.claude/commands/manage-codebase-rebuild.md +0 -1
- package/.claude/commands/manage-harvest.md +1 -1
- package/.claude/commands/manage-learn.md +5 -5
- package/.claude/commands/manage-memory-capture.md +4 -4
- package/.claude/commands/manage-memory.md +1 -1
- package/.claude/commands/manage-wiki.md +62 -0
- package/.claude/commands/quality-business-test.md +5 -5
- package/.claude/commands/quality-debug.md +53 -6
- package/.claude/commands/quality-retrospective.md +9 -7
- package/.claude/commands/quality-review.md +39 -7
- package/.claude/commands/quality-sync.md +1 -1
- package/.claude/commands/quality-test-gen.md +5 -4
- package/.claude/commands/quality-test.md +45 -12
- package/.claude/commands/spec-remove.md +51 -0
- package/.claude/commands/spec-setup.md +1 -3
- package/.claude/commands/wiki-connect.md +9 -5
- package/.claude/commands/wiki-digest.md +6 -3
- package/.codex/skills/maestro/SKILL.md +2 -2
- package/.codex/skills/maestro-analyze/SKILL.md +4 -4
- package/.codex/skills/maestro-brainstorm/SKILL.md +4 -4
- package/.codex/skills/maestro-coordinate/SKILL.md +2 -2
- package/.codex/skills/maestro-execute/SKILL.md +15 -5
- package/.codex/skills/maestro-fork/SKILL.md +98 -68
- package/.codex/skills/maestro-init/SKILL.md +5 -4
- package/.codex/skills/maestro-merge/SKILL.md +69 -62
- package/.codex/skills/maestro-milestone-complete/SKILL.md +18 -1
- package/.codex/skills/maestro-plan/SKILL.md +6 -6
- package/.codex/skills/maestro-roadmap/SKILL.md +3 -4
- package/.codex/skills/maestro-spec-generate/SKILL.md +2 -2
- package/.codex/skills/maestro-ui-design/SKILL.md +6 -6
- package/.codex/skills/maestro-verify/SKILL.md +29 -20
- package/.codex/skills/manage-codebase-rebuild/SKILL.md +4 -4
- package/.codex/skills/manage-harvest/SKILL.md +10 -1
- package/.codex/skills/manage-issue-discover/SKILL.md +3 -3
- package/.codex/skills/manage-learn/SKILL.md +3 -2
- package/.codex/skills/manage-memory/SKILL.md +3 -3
- package/.codex/skills/manage-memory-capture/SKILL.md +8 -14
- package/.codex/skills/manage-status/SKILL.md +9 -4
- package/.codex/skills/manage-wiki/SKILL.md +55 -0
- package/.codex/skills/quality-business-test/SKILL.md +8 -6
- package/.codex/skills/quality-debug/SKILL.md +22 -9
- package/.codex/skills/quality-integration-test/SKILL.md +11 -7
- package/.codex/skills/quality-retrospective/SKILL.md +48 -29
- package/.codex/skills/quality-review/SKILL.md +10 -7
- package/.codex/skills/quality-test/SKILL.md +10 -5
- package/.codex/skills/quality-test-gen/SKILL.md +13 -9
- package/.codex/skills/spec-add/SKILL.md +11 -3
- package/.codex/skills/spec-load/SKILL.md +7 -0
- package/.codex/skills/spec-map/SKILL.md +2 -2
- package/.codex/skills/spec-remove/SKILL.md +101 -0
- package/.codex/skills/spec-setup/SKILL.md +4 -8
- package/.codex/skills/wiki-connect/SKILL.md +6 -5
- package/.codex/skills/wiki-digest/SKILL.md +2 -2
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- 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/claude-code-adapter.d.ts +9 -0
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +109 -9
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js +49 -0
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.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/index.js +5 -4
- package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +5 -13
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js +97 -155
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.d.ts +11 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +27 -6
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +25 -7
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +8 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +1 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.d.ts +29 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +148 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +4 -2
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +8 -2
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +5 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +80 -38
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +8 -6
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +40 -5
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +21 -23
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +33 -3
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +184 -12
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.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 +5 -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 +1 -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/ws-protocol.d.ts +27 -1
- 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/commands/delegate.js +26 -0
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dashboard/dist-server/src/coordinator/graph-types.d.ts +11 -1
- package/dashboard/dist-server/src/coordinator/graph-walker.js +29 -2
- package/dashboard/dist-server/src/coordinator/graph-walker.js.map +1 -1
- package/dashboard/dist-server/src/coordinator/prompt-assembler.js +3 -2
- package/dashboard/dist-server/src/coordinator/prompt-assembler.js.map +1 -1
- package/dashboard/dist-server/src/hooks/constants.d.ts +29 -60
- package/dashboard/dist-server/src/hooks/constants.js +105 -82
- package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
- package/dashboard/dist-server/src/types/index.d.ts +2 -1
- package/dist/shared/agent-types.d.ts +4 -0
- package/dist/shared/agent-types.d.ts.map +1 -1
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +26 -0
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/hooks.d.ts +2 -4
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +4 -7
- 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/install-ui/InstallConfirm.d.ts +2 -3
- package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.js +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.js +1 -2
- package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.js +5 -7
- package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts +3 -6
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
- package/dist/src/commands/install-ui/StatuslineConfig.js +21 -17
- package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +95 -0
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/wiki.d.ts.map +1 -1
- package/dist/src/commands/wiki.js +75 -11
- package/dist/src/commands/wiki.js.map +1 -1
- package/dist/src/coordinator/graph-types.d.ts +11 -1
- package/dist/src/coordinator/graph-types.d.ts.map +1 -1
- package/dist/src/coordinator/graph-walker.d.ts.map +1 -1
- package/dist/src/coordinator/graph-walker.js +29 -2
- package/dist/src/coordinator/graph-walker.js.map +1 -1
- package/dist/src/coordinator/prompt-assembler.d.ts.map +1 -1
- package/dist/src/coordinator/prompt-assembler.js +3 -2
- package/dist/src/coordinator/prompt-assembler.js.map +1 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +4 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.js +55 -152
- package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
- package/dist/src/hooks/constants.d.ts +29 -60
- package/dist/src/hooks/constants.d.ts.map +1 -1
- package/dist/src/hooks/constants.js +105 -82
- package/dist/src/hooks/constants.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 +149 -15
- package/dist/src/hooks/skill-context.js.map +1 -1
- package/dist/src/hooks/statusline.d.ts +11 -8
- package/dist/src/hooks/statusline.d.ts.map +1 -1
- package/dist/src/hooks/statusline.js +284 -179
- package/dist/src/hooks/statusline.js.map +1 -1
- package/dist/src/hooks/workspace.d.ts.map +1 -1
- package/dist/src/hooks/workspace.js +2 -1
- package/dist/src/hooks/workspace.js.map +1 -1
- package/dist/src/migrations/_template.d.ts +12 -0
- package/dist/src/migrations/_template.d.ts.map +1 -0
- package/dist/src/migrations/_template.js +55 -0
- package/dist/src/migrations/_template.js.map +1 -0
- package/dist/src/migrations/index.d.ts +14 -0
- package/dist/src/migrations/index.d.ts.map +1 -0
- package/dist/src/migrations/index.js +20 -0
- package/dist/src/migrations/index.js.map +1 -0
- package/dist/src/migrations/run.d.ts +12 -0
- package/dist/src/migrations/run.d.ts.map +1 -0
- package/dist/src/migrations/run.js +119 -0
- package/dist/src/migrations/run.js.map +1 -0
- package/dist/src/migrations/v1-to-v2.d.ts +10 -0
- package/dist/src/migrations/v1-to-v2.d.ts.map +1 -0
- package/dist/src/migrations/v1-to-v2.js +71 -0
- package/dist/src/migrations/v1-to-v2.js.map +1 -0
- 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/team-activity.d.ts.map +1 -1
- package/dist/src/tools/team-activity.js +22 -0
- package/dist/src/tools/team-activity.js.map +1 -1
- package/dist/src/tools/transition-recorder.d.ts +2 -17
- package/dist/src/tools/transition-recorder.d.ts.map +1 -1
- package/dist/src/tools/transition-recorder.js +6 -3
- package/dist/src/tools/transition-recorder.js.map +1 -1
- package/dist/src/types/index.d.ts +2 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/migration-registry.d.ts +65 -0
- package/dist/src/utils/migration-registry.d.ts.map +1 -0
- package/dist/src/utils/migration-registry.js +117 -0
- package/dist/src/utils/migration-registry.js.map +1 -0
- package/dist/src/utils/state-schema.d.ts +153 -0
- package/dist/src/utils/state-schema.d.ts.map +1 -0
- package/dist/src/utils/state-schema.js +329 -0
- package/dist/src/utils/state-schema.js.map +1 -0
- package/package.json +1 -1
- package/shared/agent-types.ts +4 -0
- package/templates/state.json +17 -39
- package/templates/worktree-scope.json +9 -10
- package/templates/worktrees.json +26 -27
- package/workflows/brainstorm.md +10 -1
- package/workflows/codebase-rebuild.md +2 -12
- package/workflows/debug.md +17 -8
- package/workflows/execute.md +18 -4
- package/workflows/fork.md +52 -37
- package/workflows/init.md +1 -4
- package/workflows/integration-test.md +13 -2
- package/workflows/issue.md +8 -4
- package/workflows/learn.md +25 -10
- package/workflows/maestro.codex.md +8 -1
- package/workflows/maestro.md +13 -3
- package/workflows/memory.md +26 -71
- package/workflows/merge.md +48 -52
- package/workflows/milestone-complete.md +24 -7
- package/workflows/retrospective.md +87 -80
- package/workflows/review.md +11 -5
- package/workflows/specs-remove.md +115 -0
- package/workflows/specs-setup.md +10 -32
- package/workflows/status.md +291 -290
- package/workflows/sync.md +5 -5
- package/workflows/test.md +11 -2
- package/workflows/ui-style.md +8 -2
- package/workflows/verify.md +2 -2
- package/workflows/wiki-connect.md +188 -0
- package/workflows/wiki-digest.md +221 -0
- package/workflows/wiki-manage.md +204 -0
- 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
package/workflows/brainstorm.md
CHANGED
|
@@ -126,7 +126,16 @@ Parse $ARGUMENTS to determine execution mode:
|
|
|
126
126
|
- None + single role mode → error E002
|
|
127
127
|
|
|
128
128
|
**Output Directory Resolution**:
|
|
129
|
-
- Phase mode (number):
|
|
129
|
+
- Phase mode (number):
|
|
130
|
+
```
|
|
131
|
+
Read .workflow/state.json → state
|
|
132
|
+
artifacts = state.artifacts ?? []
|
|
133
|
+
art = artifacts.find(a => a.phase === phaseNum)
|
|
134
|
+
IF art:
|
|
135
|
+
output_dir = ".workflow/" + art.path + "/.brainstorming/"
|
|
136
|
+
ELSE:
|
|
137
|
+
ERROR "Phase {phaseNum} not found in artifact registry"
|
|
138
|
+
```
|
|
130
139
|
- All output: `.workflow/scratch/brainstorm-{slug}-{date}/`
|
|
131
140
|
- Existing session: use existing session directory
|
|
132
141
|
|
|
@@ -49,7 +49,7 @@ Scan src/ (and other source directories) for components:
|
|
|
49
49
|
|
|
50
50
|
a. Identify source directories:
|
|
51
51
|
- Check for: src/, lib/, app/, packages/
|
|
52
|
-
-
|
|
52
|
+
- Read project.md Tech Stack section if available for context
|
|
53
53
|
|
|
54
54
|
b. For each source directory, scan for component-forming files:
|
|
55
55
|
- Directories that represent modules (contain index.ts/index.js or multiple files)
|
|
@@ -267,16 +267,7 @@ a. Update state.json:
|
|
|
267
267
|
Set last_updated: "{ISO timestamp}"
|
|
268
268
|
Write updated state.json
|
|
269
269
|
|
|
270
|
-
b. Update project
|
|
271
|
-
Read .workflow/project-tech.json
|
|
272
|
-
Compare detected tech stack (from Step 2 scan) against existing entries:
|
|
273
|
-
- New languages, frameworks, databases, tools discovered
|
|
274
|
-
- Version changes detected (from package.json, go.mod, pyproject.toml, etc.)
|
|
275
|
-
If differences found:
|
|
276
|
-
Update project-tech.json with current detected stack
|
|
277
|
-
Display: "project-tech.json: updated with {count} changes"
|
|
278
|
-
|
|
279
|
-
c. Update project.md Tech Stack (if exists):
|
|
270
|
+
b. Update project.md Tech Stack (if exists):
|
|
280
271
|
Read .workflow/project.md
|
|
281
272
|
Compare "## Tech Stack" section against detected stack from Step 2
|
|
282
273
|
If new entries or changes detected:
|
|
@@ -328,5 +319,4 @@ Suggest next:
|
|
|
328
319
|
| `.workflow/codebase/feature-maps/_index.md` | Feature index |
|
|
329
320
|
| `.workflow/codebase/feature-maps/{slug}.md` | Per-feature documentation |
|
|
330
321
|
| `.workflow/state.json` | Updated: last_codebase_rebuild timestamp |
|
|
331
|
-
| `.workflow/project-tech.json` | Updated: detected tech stack changes |
|
|
332
322
|
| `.workflow/project.md` | Updated: Tech Stack section refreshed |
|
package/workflows/debug.md
CHANGED
|
@@ -14,10 +14,8 @@ When root causes found, auto-updates originating uat.md with diagnosis.
|
|
|
14
14
|
### Step 1: Check Active Sessions
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
#
|
|
18
|
-
find .workflow/
|
|
19
|
-
|
|
20
|
-
# Standalone scratch debug sessions
|
|
17
|
+
# Check scratch dirs (resolved via artifact registry) for debug sessions
|
|
18
|
+
find .workflow/scratch -path "*/.debug/*" -name "understanding.md" 2>/dev/null | head -5
|
|
21
19
|
find .workflow/scratch -type d -name "debug-*" 2>/dev/null | head -5
|
|
22
20
|
```
|
|
23
21
|
|
|
@@ -31,7 +29,7 @@ Display:
|
|
|
31
29
|
|
|
32
30
|
| # | Location | Status | Current Hypothesis |
|
|
33
31
|
|---|----------|--------|--------------------|
|
|
34
|
-
| 1 |
|
|
32
|
+
| 1 | scratch/plan-auth-2026-04-20/.debug/jwt-expiry/ | investigating | Token not refreshed on 401 |
|
|
35
33
|
| 2 | scratch/debug-nav-crash-2026-03-14/ | checkpoint | Awaiting user input |
|
|
36
34
|
|
|
37
35
|
Reply with a number to resume, or describe a new issue.
|
|
@@ -66,7 +64,7 @@ Pass to debug agents as prior knowledge (known issues, root causes, workarounds)
|
|
|
66
64
|
|
|
67
65
|
Skip if --from-uat is not set. Go to Step 3 instead.
|
|
68
66
|
|
|
69
|
-
Read `{
|
|
67
|
+
Read `{artifact_dir}/uat.md` Gaps section (artifact_dir resolved from artifact registry). For each gap:
|
|
70
68
|
```yaml
|
|
71
69
|
- test: T-003
|
|
72
70
|
truth: "User can reply to comments"
|
|
@@ -137,10 +135,21 @@ Create debug session directory and proceed to Step 6.
|
|
|
137
135
|
|
|
138
136
|
| Mode | Directory |
|
|
139
137
|
|------|-----------|
|
|
140
|
-
| Phase-scoped (from UAT) |
|
|
138
|
+
| Phase-scoped (from UAT) | `{ARTIFACT_DIR}/.debug/{gap-slug}/` (ARTIFACT_DIR resolved from artifact registry) |
|
|
141
139
|
| Standalone | `.workflow/scratch/debug-{slug}-{date}/` |
|
|
142
140
|
|
|
143
|
-
```
|
|
141
|
+
```
|
|
142
|
+
IF TARGET_TYPE == "phase":
|
|
143
|
+
Read .workflow/state.json → state
|
|
144
|
+
artifacts = state.artifacts ?? []
|
|
145
|
+
art = artifacts.find(a => a.type === 'execute' && a.phase === phaseNum)
|
|
146
|
+
IF art:
|
|
147
|
+
DEBUG_DIR = ".workflow/" + art.path + "/.debug/{gap-slug}/"
|
|
148
|
+
ELSE:
|
|
149
|
+
ERROR "Phase {phaseNum} not found in artifact registry"
|
|
150
|
+
ELSE:
|
|
151
|
+
DEBUG_DIR = ".workflow/scratch/debug-{slug}-{date}/"
|
|
152
|
+
|
|
144
153
|
mkdir -p "$DEBUG_DIR"
|
|
145
154
|
```
|
|
146
155
|
|
package/workflows/execute.md
CHANGED
|
@@ -221,9 +221,6 @@ For each wave in execution_queue (sequential):
|
|
|
221
221
|
Read .workflow/state.json
|
|
222
222
|
If state.json.status != "executing":
|
|
223
223
|
state.json.status = "executing"
|
|
224
|
-
# Worktree mode: skip phases_summary (reconciled on merge)
|
|
225
|
-
IF NOT file_exists(".workflow/worktree-scope.json"):
|
|
226
|
-
state.json.phases_summary.in_progress += 1
|
|
227
224
|
state.json.last_updated = now()
|
|
228
225
|
Write .workflow/state.json
|
|
229
226
|
|
|
@@ -565,7 +562,24 @@ Write state.json (atomic)
|
|
|
565
562
|
// Incremental learning extraction
|
|
566
563
|
Read all ${PLAN_DIR}/.summaries/TASK-*-summary.md
|
|
567
564
|
Extract: strategy adjustments, patterns discovered, pitfalls encountered
|
|
568
|
-
|
|
565
|
+
|
|
566
|
+
// Check existing entries to avoid duplicates
|
|
567
|
+
existing_learnings = maestro spec load --category learning
|
|
568
|
+
|
|
569
|
+
// Append using <spec-entry> closed-tag format:
|
|
570
|
+
FOR each extracted learning:
|
|
571
|
+
keywords = extract_keywords(learning.content) // 3-5 domain-specific terms
|
|
572
|
+
IF not duplicate of existing_learnings:
|
|
573
|
+
Append to .workflow/specs/learnings.md:
|
|
574
|
+
<spec-entry category="learning" keywords="{keywords}" date="{YYYY-MM-DD}" source="execute">
|
|
575
|
+
|
|
576
|
+
### {learning.summary}
|
|
577
|
+
|
|
578
|
+
{learning.content}
|
|
579
|
+
Phase: {phase} | Plan: {PLAN_DIR}
|
|
580
|
+
|
|
581
|
+
</spec-entry>
|
|
582
|
+
|
|
569
583
|
Mark artifact.harvested = true
|
|
570
584
|
Write state.json (atomic)
|
|
571
585
|
```
|
package/workflows/fork.md
CHANGED
|
@@ -121,12 +121,17 @@ IF syncMode:
|
|
|
121
121
|
## Step 5: Validate & Confirm
|
|
122
122
|
|
|
123
123
|
```
|
|
124
|
-
// Load phase
|
|
124
|
+
// Load phase status from artifact registry
|
|
125
125
|
phaseList = []
|
|
126
|
+
artifacts = projectState.artifacts ?? []
|
|
127
|
+
|
|
128
|
+
// Derive phase status from artifact registry
|
|
126
129
|
for (phaseNum of milestonePhases):
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
+
execArtifacts = artifacts.filter(a => a.type === 'execute' && a.phase === phaseNum)
|
|
131
|
+
status = execArtifacts.some(a => a.status === 'completed') ? 'completed'
|
|
132
|
+
: execArtifacts.length > 0 ? 'in_progress'
|
|
133
|
+
: 'pending'
|
|
134
|
+
phaseList.push({ phase: phaseNum, title: "Phase " + phaseNum, status })
|
|
130
135
|
|
|
131
136
|
// Validate: milestone should have at least one non-completed phase
|
|
132
137
|
nonCompleted = phaseList.filter(p => p.status !== "completed")
|
|
@@ -172,7 +177,7 @@ Bash("git branch -D {branch}") // ignore errors (may not exist)
|
|
|
172
177
|
Bash("git worktree add -b {branch} {wtPath} {baseBranch}")
|
|
173
178
|
|
|
174
179
|
// 6c: Create .workflow/ structure in worktree
|
|
175
|
-
Bash("mkdir -p {wtPath}/.workflow/
|
|
180
|
+
Bash("mkdir -p {wtPath}/.workflow/scratch")
|
|
176
181
|
|
|
177
182
|
// 6d: Copy shared context (read-only)
|
|
178
183
|
Copy .workflow/project.md → {wtPath}/.workflow/project.md
|
|
@@ -182,46 +187,61 @@ IF file_exists(".workflow/config.json"):
|
|
|
182
187
|
IF directory_exists(".workflow/specs"):
|
|
183
188
|
Copy .workflow/specs/ → {wtPath}/.workflow/specs/
|
|
184
189
|
|
|
185
|
-
// 6e: Copy
|
|
186
|
-
ownedPhaseNumbers =
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
190
|
+
// 6e: Copy milestone artifacts to worktree
|
|
191
|
+
ownedPhaseNumbers = milestonePhases.slice() // all phases in this milestone
|
|
192
|
+
|
|
193
|
+
// Copy scratch dirs for this milestone's artifacts
|
|
194
|
+
milestoneArtifacts = artifacts.filter(a =>
|
|
195
|
+
a.milestone === milestoneName && a.path
|
|
196
|
+
)
|
|
197
|
+
for (art of milestoneArtifacts):
|
|
198
|
+
IF directory_exists(".workflow/" + art.path):
|
|
199
|
+
Copy .workflow/{art.path}/ → {wtPath}/.workflow/{art.path}/
|
|
200
|
+
|
|
201
|
+
// 6f: Copy dependency artifacts (phases outside this milestone)
|
|
202
|
+
// Collect dependency phases from roadmap milestone entry
|
|
203
|
+
// (cross-milestone dependencies are defined in milestoneEntry.depends_on or roadmap)
|
|
204
|
+
depPhases = new Set()
|
|
205
|
+
IF milestoneEntry.depends_on:
|
|
206
|
+
for (dep of milestoneEntry.depends_on):
|
|
196
207
|
IF NOT ownedPhaseNumbers.includes(dep):
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
for (dep of
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
// 6g:
|
|
208
|
+
depPhases.add(dep)
|
|
209
|
+
// Copy dependency artifacts from main
|
|
210
|
+
for (dep of depPhases):
|
|
211
|
+
depArtifacts = artifacts.filter(a => a.phase === dep && a.path)
|
|
212
|
+
for (art of depArtifacts):
|
|
213
|
+
IF directory_exists(".workflow/" + art.path):
|
|
214
|
+
Copy .workflow/{art.path}/ → {wtPath}/.workflow/{art.path}/
|
|
215
|
+
|
|
216
|
+
// 6g: Build phase_dependencies map for worktree-scope
|
|
217
|
+
phaseDeps = {}
|
|
218
|
+
IF milestoneEntry.depends_on:
|
|
219
|
+
for (phaseNum of ownedPhaseNumbers):
|
|
220
|
+
phaseDeps[String(phaseNum)] = milestoneEntry.depends_on
|
|
221
|
+
.filter(d => !ownedPhaseNumbers.includes(d))
|
|
222
|
+
|
|
223
|
+
// 6h: Write worktree-scope.json
|
|
206
224
|
Write {wtPath}/.workflow/worktree-scope.json:
|
|
207
225
|
{
|
|
208
226
|
"worktree": true,
|
|
209
227
|
"milestone_num": milestoneNum,
|
|
210
228
|
"milestone": milestoneName,
|
|
211
229
|
"owned_phases": ownedPhaseNumbers,
|
|
230
|
+
"phase_dependencies": phaseDeps,
|
|
212
231
|
"main_worktree": resolve(cwd),
|
|
213
232
|
"branch": branch,
|
|
214
233
|
"base_commit": baseCommit,
|
|
215
234
|
"created_at": getUtc8ISOString()
|
|
216
235
|
}
|
|
217
236
|
|
|
218
|
-
//
|
|
237
|
+
// 6i: Write scoped state.json
|
|
219
238
|
Read .workflow/state.json → mainState
|
|
220
239
|
firstPending = phaseList.find(p => p.status !== "completed")
|
|
221
240
|
scopedState = {
|
|
222
241
|
...mainState,
|
|
223
|
-
|
|
224
|
-
|
|
242
|
+
current_milestone: milestoneName,
|
|
243
|
+
// Carry over milestone-scoped artifacts to worktree
|
|
244
|
+
artifacts: artifacts.filter(a => a.milestone === milestoneName || ownedPhaseNumbers.includes(a.phase))
|
|
225
245
|
}
|
|
226
246
|
Write {wtPath}/.workflow/state.json: scopedState
|
|
227
247
|
```
|
|
@@ -260,14 +280,10 @@ registry.fork_sessions.push({
|
|
|
260
280
|
|
|
261
281
|
Write .workflow/worktrees.json: registry
|
|
262
282
|
|
|
263
|
-
// Mark milestone phases as "forked"
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
Read .workflow/phases/{NN}-{p.slug}/index.json → idx
|
|
268
|
-
idx.status = "forked"
|
|
269
|
-
idx.updated_at = getUtc8ISOString()
|
|
270
|
-
Write .workflow/phases/{NN}-{p.slug}/index.json: idx
|
|
283
|
+
// Mark milestone phases as "forked"
|
|
284
|
+
// In artifact registry model, worktrees.json tracks forked state.
|
|
285
|
+
// No per-phase marking needed — the registry entry signals ownership.
|
|
286
|
+
// (worktrees.json already updated above with owned_phases)
|
|
271
287
|
|
|
272
288
|
mainState.last_updated = getUtc8ISOString()
|
|
273
289
|
Write .workflow/state.json: mainState
|
|
@@ -295,7 +311,6 @@ Display:
|
|
|
295
311
|
/maestro-plan {firstPending.phase}
|
|
296
312
|
/maestro-execute {firstPending.phase}
|
|
297
313
|
/maestro-verify {firstPending.phase}
|
|
298
|
-
/maestro-phase-transition {firstPending.phase}
|
|
299
314
|
# ... repeat for next phases in milestone
|
|
300
315
|
|
|
301
316
|
Or delegate (automated):
|
package/workflows/init.md
CHANGED
|
@@ -88,7 +88,7 @@ CHECK .workflow/state.json exists?
|
|
|
88
88
|
|
|
89
89
|
5. **Create project files:**
|
|
90
90
|
- `.workflow/project.md` from @templates/project.md + user answers (include Core Value, Requirements, Key Decisions)
|
|
91
|
-
- `.workflow/state.json` from template (status: "idle"
|
|
91
|
+
- `.workflow/state.json` from template (status: "idle")
|
|
92
92
|
- `.workflow/config.json` already created in step 2
|
|
93
93
|
|
|
94
94
|
### Path B: Brownfield (has code, no .workflow/)
|
|
@@ -119,14 +119,12 @@ If `.workflow/specs/` does not exist:
|
|
|
119
119
|
1. Create `.workflow/specs/` directory
|
|
120
120
|
2. Auto-trigger `/workflow:specs-setup` — **MUST follow `specs-setup.md` templates exactly**:
|
|
121
121
|
- Scan codebase for conventions
|
|
122
|
-
- Generate `project-tech.json`
|
|
123
122
|
- Generate `specs/coding-conventions.md`
|
|
124
123
|
- Generate `specs/architecture-constraints.md`
|
|
125
124
|
- Generate `specs/quality-rules.md`
|
|
126
125
|
- Generate `specs/debug-notes.md`
|
|
127
126
|
- Generate `specs/test-conventions.md`
|
|
128
127
|
- Generate `specs/review-standards.md`
|
|
129
|
-
- Generate `specs/validation-rules.md`
|
|
130
128
|
- Create empty `specs/learnings.md`
|
|
131
129
|
|
|
132
130
|
|
|
@@ -143,7 +141,6 @@ Verify all required directories and files exist:
|
|
|
143
141
|
config.json ✓
|
|
144
142
|
specs/ ✓
|
|
145
143
|
research/ ✓ (if research enabled)
|
|
146
|
-
phases/ ✓ (create empty)
|
|
147
144
|
scratch/ ✓ (create empty)
|
|
148
145
|
milestones/ ✓ (create empty)
|
|
149
146
|
codebase/ ✓ (create empty)
|
|
@@ -15,13 +15,24 @@ L0-L3 progressive layers: Static Analysis -> Unit -> Integration -> E2E
|
|
|
15
15
|
| Input | Result |
|
|
16
16
|
|-------|--------|
|
|
17
17
|
| No arguments | Error E001 |
|
|
18
|
-
| Phase number | Resolve
|
|
18
|
+
| Phase number | Resolve phase dir from artifact registry |
|
|
19
19
|
| `--max-iter N` | Set MAX_ITER = N (default 5) |
|
|
20
20
|
| `--layer L2` | Start from L2 layer |
|
|
21
21
|
|
|
22
|
+
**Resolve phase dir:**
|
|
23
|
+
```
|
|
24
|
+
Read .workflow/state.json → state
|
|
25
|
+
artifacts = state.artifacts ?? []
|
|
26
|
+
art = artifacts.find(a => a.type === 'execute' && a.phase === phaseNum)
|
|
27
|
+
IF art:
|
|
28
|
+
PHASE_DIR = ".workflow/" + art.path
|
|
29
|
+
ELSE:
|
|
30
|
+
ERROR "Phase {phaseNum} not found in artifact registry"
|
|
31
|
+
```
|
|
32
|
+
|
|
22
33
|
Check for existing integration test session:
|
|
23
34
|
```bash
|
|
24
|
-
ls
|
|
35
|
+
ls ${PHASE_DIR}/.tests/integration/state.json 2>/dev/null
|
|
25
36
|
```
|
|
26
37
|
|
|
27
38
|
If session exists: offer resume or restart.
|
package/workflows/issue.md
CHANGED
|
@@ -178,8 +178,10 @@ Cross-milestone conflict check (for supplement issues):
|
|
|
178
178
|
6. IF source == "supplement" AND milestone_ref is not null:
|
|
179
179
|
a. Read .workflow/roadmap.md
|
|
180
180
|
b. Identify phases belonging to OTHER milestones (not milestone_ref)
|
|
181
|
-
c. For each other-milestone phase, check if plan.json exists:
|
|
182
|
-
Read .workflow/
|
|
181
|
+
c. For each other-milestone phase, resolve phase dir and check if plan.json exists:
|
|
182
|
+
Read .workflow/state.json → state; artifacts = state.artifacts ?? []
|
|
183
|
+
art = artifacts.find(a => a.type === 'plan' && a.phase === phaseNum)
|
|
184
|
+
IF art: Read .workflow/{art.path}/plan.json (if exists)
|
|
183
185
|
Collect files_to_create[] as planned_files
|
|
184
186
|
d. IF affected_components in the new issue overlap with planned_files:
|
|
185
187
|
WARNING: "Conflict detected: this supplement issue affects components planned in milestone {other_milestone}"
|
|
@@ -449,8 +451,10 @@ Process bidirectional link:
|
|
|
449
451
|
If not found → error: "Issue {ID} not found"
|
|
450
452
|
|
|
451
453
|
2. Locate task file:
|
|
452
|
-
-
|
|
453
|
-
-
|
|
454
|
+
- Read .workflow/state.json → state
|
|
455
|
+
- artifacts = state.artifacts ?? []
|
|
456
|
+
- Search artifact registry paths: .workflow/{artifact.path}/.task/{TASK_ID}.json
|
|
457
|
+
- Also search .workflow/scratch/*/.task/{TASK_ID}.json (standalone scratch tasks)
|
|
454
458
|
- If still not found → error: "Task {TASK_ID} not found"
|
|
455
459
|
|
|
456
460
|
3. Update issue record:
|
package/workflows/learn.md
CHANGED
|
@@ -4,7 +4,7 @@ Atomic insight capture, search, and retrieval. Lightweight gstack-style "eureka
|
|
|
4
4
|
|
|
5
5
|
Storage:
|
|
6
6
|
- `.workflow/learning/lessons.jsonl` — append-only JSONL row per insight (shared with retrospective output)
|
|
7
|
-
- `.workflow/learning/learning-index.json` — searchable index (
|
|
7
|
+
- `.workflow/learning/learning-index.json` — searchable index (searchable index)
|
|
8
8
|
|
|
9
9
|
This workflow does NOT spawn agents or call CLI tools. It is a thin file operation: parse → infer → append → confirm.
|
|
10
10
|
|
|
@@ -83,12 +83,21 @@ phase_slug = null
|
|
|
83
83
|
|
|
84
84
|
IF .workflow/state.json exists:
|
|
85
85
|
state = read JSON
|
|
86
|
-
|
|
87
|
-
phase = state.current_phase
|
|
86
|
+
artifacts = state.artifacts ?? []
|
|
88
87
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
# Derive current phase from artifacts (first phase with in_progress, or first without completed execute)
|
|
89
|
+
phase = null
|
|
90
|
+
inProgressArt = artifacts.find(a => a.type === 'execute' && a.status === 'in_progress')
|
|
91
|
+
IF inProgressArt:
|
|
92
|
+
phase = inProgressArt.phase
|
|
93
|
+
ELSE:
|
|
94
|
+
phaseNums = [...new Set(artifacts.map(a => a.phase).filter(Boolean))].sort()
|
|
95
|
+
phase = phaseNums.find(p => !artifacts.some(a => a.phase === p && a.type === 'execute' && a.status === 'completed'))
|
|
96
|
+
|
|
97
|
+
IF phase is not null:
|
|
98
|
+
# Resolve slug from artifact registry
|
|
99
|
+
art = artifacts.find(a => a.phase === phase)
|
|
100
|
+
phase_slug = art?.slug ?? "phase-" + phase
|
|
92
101
|
```
|
|
93
102
|
|
|
94
103
|
If `--phase 0` is passed, force `phase = null, phase_slug = null` regardless.
|
|
@@ -299,8 +308,14 @@ IF row is null → error E004: "Insight {target_id} not found"
|
|
|
299
308
|
```
|
|
300
309
|
phase_context = null
|
|
301
310
|
IF row.phase_slug is not null:
|
|
302
|
-
|
|
303
|
-
|
|
311
|
+
// Resolve phase dir from artifact registry
|
|
312
|
+
Read .workflow/state.json → state
|
|
313
|
+
artifacts = state.artifacts ?? []
|
|
314
|
+
phase_dir = null
|
|
315
|
+
art = artifacts.find(a => a.phase === row.phase && a.path)
|
|
316
|
+
IF art: phase_dir = ".workflow/" + art.path
|
|
317
|
+
|
|
318
|
+
IF phase_dir AND directory exists:
|
|
304
319
|
phase_context = {
|
|
305
320
|
title: read index.json.title from phase_dir,
|
|
306
321
|
status: read index.json.status,
|
|
@@ -368,7 +383,7 @@ PHASE CONTEXT:
|
|
|
368
383
|
| E002 | error | Unknown `--category` (allowed: pattern, antipattern, decision, tool, gotcha, technique) |
|
|
369
384
|
| E003 | error | `show` mode requires an INS-id argument |
|
|
370
385
|
| E004 | error | Insight id not found in lessons.jsonl |
|
|
371
|
-
| W001 | warning | Auto-phase detection found
|
|
386
|
+
| W001 | warning | Auto-phase detection found no matching artifact in registry; phase set to null |
|
|
372
387
|
| W002 | warning | learning-index.json out of sync with lessons.jsonl (different row count); offer to rebuild |
|
|
373
388
|
|
|
374
389
|
---
|
|
@@ -378,7 +393,7 @@ PHASE CONTEXT:
|
|
|
378
393
|
- [ ] Mode correctly routed (capture / list / search / show)
|
|
379
394
|
- [ ] Capture mode: `lessons.jsonl` row appended, valid JSON, all required fields present
|
|
380
395
|
- [ ] Capture mode: `learning-index.json` updated with matching entry
|
|
381
|
-
- [ ] Capture mode: phase auto-link resolves correctly
|
|
396
|
+
- [ ] Capture mode: phase auto-link resolves correctly from artifact registry
|
|
382
397
|
- [ ] Capture mode: category inference produces a sensible default when --category absent
|
|
383
398
|
- [ ] List mode: filters apply; output sorted newest-first
|
|
384
399
|
- [ ] Search mode: results ranked by title > tags > summary match
|
|
@@ -37,7 +37,14 @@ if (fileExists(stateFile)) {
|
|
|
37
37
|
const raw = JSON.parse(Read(stateFile));
|
|
38
38
|
projectState = {
|
|
39
39
|
initialized: true,
|
|
40
|
-
current_phase
|
|
40
|
+
// Derive current_phase from artifacts (first in_progress execute, or first without completed execute)
|
|
41
|
+
current_phase: (() => {
|
|
42
|
+
const arts = raw.artifacts ?? [];
|
|
43
|
+
const ip = arts.find(a => a.type === 'execute' && a.status === 'in_progress');
|
|
44
|
+
if (ip) return ip.phase;
|
|
45
|
+
const phases = [...new Set(arts.map(a => a.phase).filter(Boolean))].sort((a,b) => a - b);
|
|
46
|
+
return phases.find(p => !arts.some(a => a.phase === p && a.type === 'execute' && a.status === 'completed')) ?? raw.current_phase ?? null;
|
|
47
|
+
})(),
|
|
41
48
|
phase_slug: raw.phase_slug,
|
|
42
49
|
phase_status: raw.phase_status, // pending|exploring|planning|executing|verifying|testing|completed|blocked
|
|
43
50
|
phase_artifacts: raw.phase_artifacts ?? {},
|
package/workflows/maestro.md
CHANGED
|
@@ -661,8 +661,17 @@ function resolvePhase(intent_analysis, project_state) {
|
|
|
661
661
|
const phaseMatch = intent.match(/phase\s*(\d+)|^(\d+)$/);
|
|
662
662
|
if (phaseMatch) return phaseMatch[1] || phaseMatch[2];
|
|
663
663
|
|
|
664
|
-
// 3. From project state
|
|
665
|
-
if (project_state.initialized)
|
|
664
|
+
// 3. From project state — derive from artifacts
|
|
665
|
+
if (project_state.initialized) {
|
|
666
|
+
// Derive current phase: first phase with in_progress execute, or first without completed execute
|
|
667
|
+
const arts = project_state.artifacts ?? [];
|
|
668
|
+
const inProgress = arts.find(a => a.type === 'execute' && a.status === 'in_progress');
|
|
669
|
+
if (inProgress) return inProgress.phase;
|
|
670
|
+
const phases = [...new Set(arts.map(a => a.phase).filter(Boolean))].sort((a,b) => a - b);
|
|
671
|
+
const current = phases.find(p => !arts.some(a => a.phase === p && a.type === 'execute' && a.status === 'completed'));
|
|
672
|
+
if (current) return current;
|
|
673
|
+
return project_state.latest_artifact?.phase ?? null;
|
|
674
|
+
}
|
|
666
675
|
|
|
667
676
|
// 4. Scratch mode chains use {scratch_dir} instead of {phase}
|
|
668
677
|
if (chainName === 'analyze-plan-execute') return null;
|
|
@@ -775,7 +784,7 @@ mkdir -p "${SESSION_DIR}"
|
|
|
775
784
|
**Initialize execution context:**
|
|
776
785
|
```javascript
|
|
777
786
|
const context = {
|
|
778
|
-
current_phase: resolvedPhase,
|
|
787
|
+
current_phase: resolvedPhase, // derived from artifacts
|
|
779
788
|
user_intent: intent,
|
|
780
789
|
issue_id: resolvedIssueId,
|
|
781
790
|
spec_session_id: null,
|
|
@@ -789,6 +798,7 @@ const context = {
|
|
|
789
798
|
const AUTO_FLAG_MAP = {
|
|
790
799
|
'maestro-analyze': '-y',
|
|
791
800
|
'maestro-brainstorm': '-y',
|
|
801
|
+
'maestro-roadmap': '-y',
|
|
792
802
|
'maestro-ui-design': '-y',
|
|
793
803
|
'maestro-plan': '--auto',
|
|
794
804
|
'maestro-spec-generate': '-y',
|