maestro-flow 0.5.34 → 0.5.36
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/.agents/agents/cli-explore-agent.md +71 -68
- package/.agents/agents/workflow-analyzer.md +1 -0
- package/.agents/agents/workflow-collab-planner.md +1 -0
- package/.agents/agents/workflow-debugger.md +1 -0
- package/.agents/agents/workflow-executor.md +1 -0
- package/.agents/agents/workflow-planner.md +2 -0
- package/.agents/skills/domain-add/SKILL.md +71 -0
- package/.agents/skills/maestro/SKILL.md +7 -6
- package/.agents/skills/maestro-amend/SKILL.md +0 -2
- package/.agents/skills/maestro-analyze/SKILL.md +9 -0
- package/.agents/skills/maestro-brainstorm/SKILL.md +10 -1
- package/.agents/skills/maestro-collab/SKILL.md +14 -1
- package/.agents/skills/maestro-help/SKILL.md +1 -1
- package/.agents/skills/maestro-help/index/catalog.json +0 -1
- package/.agents/skills/maestro-help/phases/01-parse-intent.md +1 -1
- package/.agents/skills/maestro-next/SKILL.md +15 -4
- package/.agents/skills/maestro-overlay/SKILL.md +4 -3
- package/.agents/skills/maestro-plan/SKILL.md +15 -4
- package/.agents/skills/maestro-ralph/SKILL.md +135 -31
- package/.agents/skills/maestro-ralph-execute/SKILL.md +51 -10
- package/.agents/skills/maestro-tools-register/SKILL.md +0 -6
- package/.agents/skills/maestro-ui-codify/SKILL.md +0 -2
- package/.agents/skills/manage-kg-extractors/SKILL.md +0 -2
- package/.agents/skills/quality-test/SKILL.md +25 -1
- package/.agents/skills/spec-load/SKILL.md +0 -1
- package/.agents/skills/spec-setup/SKILL.md +0 -1
- package/.agents/skills/team-lifecycle-v4/roles/analyst/role.md +13 -7
- package/.agents/skills/team-quality-assurance/roles/scout/role.md +15 -11
- package/.agents/skills/team-tech-debt/roles/scanner/role.md +1 -1
- package/.agents/skills/team-ultra-analyze/roles/explorer/role.md +23 -16
- package/.agy/agents/cli-explore-agent.md +71 -68
- package/.agy/agents/workflow-analyzer.md +1 -0
- package/.agy/agents/workflow-collab-planner.md +1 -0
- package/.agy/agents/workflow-debugger.md +1 -0
- package/.agy/agents/workflow-executor.md +1 -0
- package/.agy/agents/workflow-planner.md +2 -0
- package/.agy/skills/domain-add/SKILL.md +68 -0
- package/.agy/skills/maestro/SKILL.md +7 -6
- package/.agy/skills/maestro-amend/SKILL.md +0 -2
- package/.agy/skills/maestro-analyze/SKILL.md +9 -0
- package/.agy/skills/maestro-brainstorm/SKILL.md +10 -1
- package/.agy/skills/maestro-collab/SKILL.md +14 -1
- package/.agy/skills/maestro-help/SKILL.md +1 -1
- package/.agy/skills/maestro-help/index/catalog.json +0 -1
- package/.agy/skills/maestro-help/phases/01-parse-intent.md +1 -1
- package/.agy/skills/maestro-next/SKILL.md +15 -4
- package/.agy/skills/maestro-overlay/SKILL.md +4 -3
- package/.agy/skills/maestro-plan/SKILL.md +15 -4
- package/.agy/skills/maestro-ralph/SKILL.md +135 -31
- package/.agy/skills/maestro-ralph-execute/SKILL.md +51 -10
- package/.agy/skills/maestro-tools-register/SKILL.md +0 -6
- package/.agy/skills/maestro-ui-codify/SKILL.md +0 -2
- package/.agy/skills/manage-kg-extractors/SKILL.md +0 -2
- package/.agy/skills/quality-test/SKILL.md +25 -1
- package/.agy/skills/spec-load/SKILL.md +0 -1
- package/.agy/skills/spec-setup/SKILL.md +0 -1
- package/.agy/skills/team-lifecycle-v4/roles/analyst/role.md +13 -7
- package/.agy/skills/team-quality-assurance/roles/scout/role.md +15 -11
- package/.agy/skills/team-tech-debt/roles/scanner/role.md +1 -1
- package/.agy/skills/team-ultra-analyze/roles/explorer/role.md +23 -16
- package/.claude/agents/cli-explore-agent.md +71 -68
- package/.claude/agents/workflow-analyzer.md +1 -0
- package/.claude/agents/workflow-collab-planner.md +1 -0
- package/.claude/agents/workflow-debugger.md +1 -0
- package/.claude/agents/workflow-executor.md +1 -0
- package/.claude/agents/workflow-planner.md +2 -0
- package/.claude/commands/domain-add.md +69 -0
- package/.claude/commands/maestro-amend.md +0 -2
- package/.claude/commands/maestro-analyze.md +9 -0
- package/.claude/commands/maestro-brainstorm.md +10 -1
- package/.claude/commands/maestro-collab.md +14 -1
- package/.claude/commands/maestro-next.md +15 -4
- package/.claude/commands/maestro-overlay.md +4 -3
- package/.claude/commands/maestro-plan.md +15 -4
- package/.claude/commands/maestro-ralph-execute.md +51 -10
- package/.claude/commands/maestro-ralph.md +135 -31
- package/.claude/commands/maestro-tools-register.md +0 -6
- package/.claude/commands/maestro-ui-codify.md +0 -2
- package/.claude/commands/maestro.md +7 -6
- package/.claude/commands/manage-kg-extractors.md +0 -2
- package/.claude/commands/quality-test.md +25 -1
- package/.claude/commands/spec-load.md +0 -1
- package/.claude/commands/spec-setup.md +0 -1
- package/.claude/skills/maestro-help/SKILL.md +1 -1
- package/.claude/skills/maestro-help/index/catalog.json +0 -1
- package/.claude/skills/maestro-help/phases/01-parse-intent.md +1 -1
- package/.claude/skills/team-lifecycle-v4/roles/analyst/role.md +13 -7
- package/.claude/skills/team-quality-assurance/roles/scout/role.md +15 -11
- package/.claude/skills/team-tech-debt/roles/scanner/role.md +1 -1
- package/.claude/skills/team-ultra-analyze/roles/explorer/role.md +23 -16
- package/.codex/skills/domain-add/SKILL.md +79 -0
- package/.codex/skills/domain-discover/SKILL.md +43 -0
- package/.codex/skills/domain-list/SKILL.md +38 -0
- package/.codex/skills/learn-follow/SKILL.md +0 -3
- package/.codex/skills/learn-investigate/SKILL.md +0 -3
- package/.codex/skills/learn-retro/SKILL.md +0 -2
- package/.codex/skills/maestro/SKILL.md +34 -13
- package/.codex/skills/maestro-amend/SKILL.md +0 -2
- package/.codex/skills/maestro-analyze/SKILL.md +36 -6
- package/.codex/skills/maestro-blueprint/SKILL.md +0 -4
- package/.codex/skills/maestro-brainstorm/SKILL.md +46 -6
- package/.codex/skills/maestro-collab/SKILL.md +14 -1
- package/.codex/skills/maestro-companion/SKILL.md +0 -2
- package/.codex/skills/maestro-execute/SKILL.md +25 -3
- package/.codex/skills/maestro-fork/SKILL.md +0 -2
- package/.codex/skills/maestro-grill/SKILL.md +9 -1
- package/.codex/skills/maestro-next/SKILL.md +12 -5
- package/.codex/skills/maestro-plan/SKILL.md +43 -5
- package/.codex/skills/maestro-ralph/SKILL.md +10 -3
- package/.codex/skills/maestro-ralph-execute/SKILL.md +51 -10
- package/.codex/skills/maestro-roadmap/SKILL.md +30 -3
- package/.codex/skills/manage-wiki/SKILL.md +0 -2
- package/.codex/skills/odyssey-debug/SKILL.md +0 -2
- package/.codex/skills/odyssey-improve/SKILL.md +0 -6
- package/.codex/skills/odyssey-review-test-fix/SKILL.md +0 -3
- package/.codex/skills/odyssey-ui/SKILL.md +0 -3
- package/.codex/skills/quality-review/SKILL.md +9 -0
- package/.codex/skills/spec-setup/SKILL.md +0 -2
- package/.codex/skills/team-coordinate/SKILL.md +0 -3
- package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +0 -2
- package/README.md +28 -5
- package/README.zh-CN.md +28 -5
- package/chains/_intent-map.json +36 -0
- package/chains/blueprint-driven.json +49 -0
- package/chains/grill-driven.json +51 -0
- package/dashboard/dist-server/dashboard/src/server/agents/adapter-factory.js +4 -0
- package/dashboard/dist-server/dashboard/src/server/agents/adapter-factory.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/api-explore-adapter.d.ts +6 -0
- package/dashboard/dist-server/dashboard/src/server/agents/api-explore-adapter.js +36 -0
- package/dashboard/dist-server/dashboard/src/server/agents/api-explore-adapter.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/embedding.d.ts +82 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js +444 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/search.d.ts +47 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +426 -19
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +16 -0
- 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.d.ts +11 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +492 -1
- 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 +18 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +192 -9
- 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 +42 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -0
- package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
- package/dashboard/dist-server/shared/agent-types.d.ts +1 -1
- package/dashboard/dist-server/src/commands/hooks.d.ts +3 -0
- package/dashboard/dist-server/src/commands/hooks.js +60 -9
- package/dashboard/dist-server/src/commands/hooks.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/code/code-extractor.js +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/code/code-extractor.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.js +4 -2
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.js +6 -1
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js +2 -6
- package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js.map +1 -1
- package/dashboard/dist-server/src/hooks/session-context.js +37 -1
- package/dashboard/dist-server/src/hooks/session-context.js.map +1 -1
- package/dashboard/dist-server/src/search/daemon.d.ts +42 -0
- package/dashboard/dist-server/src/search/daemon.js +180 -0
- package/dashboard/dist-server/src/search/daemon.js.map +1 -0
- package/dashboard/dist-server/src/tools/domain-loader.d.ts +4 -1
- package/dashboard/dist-server/src/tools/domain-loader.js +56 -25
- package/dashboard/dist-server/src/tools/domain-loader.js.map +1 -1
- package/dashboard/dist-server/src/tools/domain-schema.d.ts +1 -1
- package/dashboard/dist-server/src/tools/domain-schema.js +1 -1
- package/dist/shared/agent-types.d.ts +1 -1
- package/dist/shared/agent-types.d.ts.map +1 -1
- package/dist/src/agents/api-explore/agent-loop.d.ts +14 -0
- package/dist/src/agents/api-explore/agent-loop.d.ts.map +1 -0
- package/dist/src/agents/api-explore/agent-loop.js +86 -0
- package/dist/src/agents/api-explore/agent-loop.js.map +1 -0
- package/dist/src/agents/api-explore/config.d.ts +42 -0
- package/dist/src/agents/api-explore/config.d.ts.map +1 -0
- package/dist/src/agents/api-explore/config.js +99 -0
- package/dist/src/agents/api-explore/config.js.map +1 -0
- package/dist/src/agents/api-explore/index.d.ts +2 -0
- package/dist/src/agents/api-explore/index.d.ts.map +1 -0
- package/dist/src/agents/api-explore/index.js +102 -0
- package/dist/src/agents/api-explore/index.js.map +1 -0
- package/dist/src/agents/api-explore/llm.d.ts +28 -0
- package/dist/src/agents/api-explore/llm.d.ts.map +1 -0
- package/dist/src/agents/api-explore/llm.js +48 -0
- package/dist/src/agents/api-explore/llm.js.map +1 -0
- package/dist/src/agents/api-explore/prompt-parser.d.ts +23 -0
- package/dist/src/agents/api-explore/prompt-parser.d.ts.map +1 -0
- package/dist/src/agents/api-explore/prompt-parser.js +73 -0
- package/dist/src/agents/api-explore/prompt-parser.js.map +1 -0
- package/dist/src/agents/api-explore/runner.d.ts +65 -0
- package/dist/src/agents/api-explore/runner.d.ts.map +1 -0
- package/dist/src/agents/api-explore/runner.js +196 -0
- package/dist/src/agents/api-explore/runner.js.map +1 -0
- package/dist/src/agents/api-explore/session.d.ts +23 -0
- package/dist/src/agents/api-explore/session.d.ts.map +1 -0
- package/dist/src/agents/api-explore/session.js +57 -0
- package/dist/src/agents/api-explore/session.js.map +1 -0
- package/dist/src/agents/api-explore/stream-json-emitter.d.ts +10 -0
- package/dist/src/agents/api-explore/stream-json-emitter.d.ts.map +1 -0
- package/dist/src/agents/api-explore/stream-json-emitter.js +19 -0
- package/dist/src/agents/api-explore/stream-json-emitter.js.map +1 -0
- package/dist/src/agents/api-explore/system-prompt.d.ts +2 -0
- package/dist/src/agents/api-explore/system-prompt.d.ts.map +1 -0
- package/dist/src/agents/api-explore/system-prompt.js +31 -0
- package/dist/src/agents/api-explore/system-prompt.js.map +1 -0
- package/dist/src/agents/api-explore/tools.d.ts +11 -0
- package/dist/src/agents/api-explore/tools.d.ts.map +1 -0
- package/dist/src/agents/api-explore/tools.js +168 -0
- package/dist/src/agents/api-explore/tools.js.map +1 -0
- package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
- package/dist/src/agents/cli-agent-runner.js +3 -0
- package/dist/src/agents/cli-agent-runner.js.map +1 -1
- package/dist/src/cli.js +4 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/domain.d.ts.map +1 -1
- package/dist/src/commands/domain.js +5 -4
- package/dist/src/commands/domain.js.map +1 -1
- package/dist/src/commands/explore.d.ts +7 -0
- package/dist/src/commands/explore.d.ts.map +1 -0
- package/dist/src/commands/explore.js +201 -0
- package/dist/src/commands/explore.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +3 -0
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +60 -9
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +42 -9
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/search.d.ts +26 -4
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.js +359 -93
- package/dist/src/commands/search.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +37 -21
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workspace.d.ts.map +1 -1
- package/dist/src/commands/workspace.js +9 -3
- package/dist/src/commands/workspace.js.map +1 -1
- package/dist/src/config/cli-tools-defaults.json +2 -1
- package/dist/src/core/install-executor.d.ts.map +1 -1
- package/dist/src/core/install-executor.js +6 -3
- package/dist/src/core/install-executor.js.map +1 -1
- package/dist/src/graph/kg/extraction/code/code-extractor.js +1 -1
- package/dist/src/graph/kg/extraction/code/code-extractor.js.map +1 -1
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts.map +1 -1
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js +4 -2
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -1
- package/dist/src/graph/kg/extraction/knowledge-extractor-registry.d.ts.map +1 -1
- package/dist/src/graph/kg/extraction/knowledge-extractor-registry.js +6 -1
- package/dist/src/graph/kg/extraction/knowledge-extractor-registry.js.map +1 -1
- package/dist/src/graph/kg/extraction/orchestrator.d.ts.map +1 -1
- package/dist/src/graph/kg/extraction/orchestrator.js +2 -6
- package/dist/src/graph/kg/extraction/orchestrator.js.map +1 -1
- package/dist/src/graph/kg/surface/cli.d.ts.map +1 -1
- package/dist/src/graph/kg/surface/cli.js +5 -2
- package/dist/src/graph/kg/surface/cli.js.map +1 -1
- package/dist/src/hooks/session-context.d.ts.map +1 -1
- package/dist/src/hooks/session-context.js +37 -1
- package/dist/src/hooks/session-context.js.map +1 -1
- package/dist/src/ralph/cmd-next.d.ts.map +1 -1
- package/dist/src/ralph/cmd-next.js +66 -4
- package/dist/src/ralph/cmd-next.js.map +1 -1
- package/dist/src/ralph/status-schema.d.ts +1 -0
- package/dist/src/ralph/status-schema.d.ts.map +1 -1
- package/dist/src/search/daemon.d.ts +43 -0
- package/dist/src/search/daemon.d.ts.map +1 -0
- package/dist/src/search/daemon.js +180 -0
- package/dist/src/search/daemon.js.map +1 -0
- package/dist/src/tools/__tests__/domain-search-debug.js +3 -1
- package/dist/src/tools/__tests__/domain-search-debug.js.map +1 -1
- package/dist/src/tools/domain-loader.d.ts +4 -1
- package/dist/src/tools/domain-loader.d.ts.map +1 -1
- package/dist/src/tools/domain-loader.js +56 -25
- package/dist/src/tools/domain-loader.js.map +1 -1
- package/dist/src/tools/domain-schema.d.ts +1 -1
- package/dist/src/tools/domain-schema.js +1 -1
- package/dist/src/utils/update-notices.js +12 -0
- package/dist/src/utils/update-notices.js.map +1 -1
- package/package.json +5 -1
- package/shared/agent-types.ts +1 -1
- package/templates/search-tools.md +22 -6
- package/workflows/agy-instructions.md +0 -4
- package/workflows/analyze.md +2 -2
- package/workflows/boundary-grill.md +50 -0
- package/workflows/brainstorm.md +6 -5
- package/workflows/claude-instructions.md +29 -2
- package/workflows/codebase-rebuild.md +0 -1
- package/workflows/codex-instructions.md +97 -14
- package/workflows/command-authoring.md +1 -1
- package/workflows/debug.md +0 -4
- package/workflows/domain-add.md +115 -0
- package/workflows/execute.md +7 -0
- package/workflows/explore-usage.md +128 -0
- package/workflows/finish-work.md +2 -6
- package/workflows/fork.md +0 -4
- package/workflows/grill.md +14 -1
- package/workflows/harvest.md +0 -3
- package/workflows/impeccable/audit.md +0 -2
- package/workflows/impeccable/codex.md +0 -4
- package/workflows/init.md +9 -0
- package/workflows/interview-mechanics.md +3 -2
- package/workflows/issue-analyze.md +0 -5
- package/workflows/issue-gaps-analyze.codex.md +0 -6
- package/workflows/knowledge-audit.md +0 -4
- package/workflows/learn.md +0 -6
- package/workflows/maestro.codex.md +0 -4
- package/workflows/maestro.md +31 -18
- package/workflows/merge.md +0 -4
- package/workflows/milestone-complete.md +0 -4
- package/workflows/overlays.md +0 -10
- package/workflows/plan.md +2 -3
- package/workflows/roadmap-common.md +0 -4
- package/workflows/tdd.md +0 -2
- package/workflows/tools-spec.md +1 -7
- package/workflows/ui-codify-extract.md +0 -2
- package/workflows/ui-codify-package.md +0 -2
- package/.agents/skills/maestro-ralph-beta/SKILL.md +0 -882
- package/.agy/skills/maestro-ralph-beta/SKILL.md +0 -878
- package/.claude/commands/maestro-ralph-beta.md +0 -880
- package/.codex/skills/maestro-ralph-beta/SKILL.md +0 -883
|
@@ -27,6 +27,7 @@ Produces plan.json + TASK files; registers PLN artifact in state.json.
|
|
|
27
27
|
- [plan.json](~/.maestro/templates/plan.json) — read when generating plan output
|
|
28
28
|
- [task.json](~/.maestro/templates/task.json) — read when generating task files
|
|
29
29
|
- [state.json](~/.maestro/templates/state.json) — read when registering artifact
|
|
30
|
+
- [boundary-grill.md](~/.maestro/workflows/boundary-grill.md) — read when boundary conflicts detected (in P4)
|
|
30
31
|
</deferred_reading>
|
|
31
32
|
|
|
32
33
|
<context>
|
|
@@ -52,7 +53,7 @@ Scope routing, base flags (`--collab`, `--spec`, `-y`, `--gaps`, `--dir`), outpu
|
|
|
52
53
|
|
|
53
54
|
**Ad-hoc milestone (D-008):** When scope resolves to "standalone" via the standard standalone resolution (no `--from` source), and `current_milestone == null`, plan auto-creates an adhoc milestone (`type: "adhoc"`) in state.json before proceeding. This ensures downstream milestone-audit/complete have a valid milestone context. See workflow plan.md § "Ad-hoc Milestone Auto-Creation".
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
**`--from analyze:*` / `blueprint:*`**: scope=standalone → skip adhoc milestone auto-creation.
|
|
56
57
|
|
|
57
58
|
### Role Knowledge
|
|
58
59
|
`maestro search --category arch` → select relevant → `maestro wiki load`
|
|
@@ -86,11 +87,19 @@ Follow '~/.maestro/workflows/plan.md' completely.
|
|
|
86
87
|
- REQUIRED: Main flow inline planning is FORBIDDEN (see P3 Agent Constraint below).
|
|
87
88
|
- BLOCKED if missing: plan.json or TASK files not produced by planner agent — do not proceed to checking.
|
|
88
89
|
|
|
90
|
+
**GATE P3.5 → P4: Boundary Grill → Plan Check**
|
|
91
|
+
Run boundary grill per `~/.maestro/workflows/boundary-grill.md`.
|
|
92
|
+
Input: plan.json tasks + convergence criteria + upstream context. Scope guard: "only plan scope; do not re-analyze or re-scope".
|
|
93
|
+
IF conflicts → results to plan.json `boundary_grill` section + affected TASK files. DEC conflicts add `boundary_warning` to confidence.
|
|
94
|
+
NON-BLOCKING: warnings, not hard stops.
|
|
95
|
+
|
|
89
96
|
**GATE P4 → P5: Plan Check → User Confirmation**
|
|
90
97
|
- REQUIRED: Plan-checker passed (or minor issues acknowledged).
|
|
98
|
+
- REQUIRED: Boundary grill completed (conflicts resolved or accepted as risks).
|
|
91
99
|
- REQUIRED: Confidence scored with 5-dimension factor model.
|
|
92
100
|
- REQUIRED: Pressure pass completed on highest-complexity task.
|
|
93
|
-
-
|
|
101
|
+
- REQUIRED: If plan touches UI (检出 `dashboard/` 或 UI 关键词 `landing|page|dashboard|frontend|UI|component|界面`), each delivery wave has ≥1 `[UI-observable]` convergence criterion (vertical-slice delivery, not backend-only).
|
|
102
|
+
- BLOCKED if: plan-checker found critical issues, OR UI plan missing `[UI-observable]` coverage — fix plan before presenting to user.
|
|
94
103
|
|
|
95
104
|
**GATE P5 → Completion: User Confirmation → Done**
|
|
96
105
|
- REQUIRED: User confirmation captured (execute/modify/cancel).
|
|
@@ -152,8 +161,6 @@ For each created TASK-{NNN}.json that has issue_id:
|
|
|
152
161
|
Append history entry: { action: "planned", at: <ISO>, by: "maestro-plan", summary: "Linked to TASK-{NNN}" }
|
|
153
162
|
```
|
|
154
163
|
|
|
155
|
-
This ensures issue → TASK traceability. The `task_refs[]` and `task_plan_dir` fields on the issue allow the dashboard to resolve and display associated TASK details.
|
|
156
|
-
|
|
157
164
|
### Mode: Revise / Check
|
|
158
165
|
|
|
159
166
|
Follow workflow plan.md § "Revise Mode" and § "Check Mode" respectively. These modes bypass the standard P1-P5 create pipeline.
|
|
@@ -215,7 +222,11 @@ Status verdicts:
|
|
|
215
222
|
- [ ] .task/TASK-*.json files created for each task
|
|
216
223
|
- [ ] Every task has `read_first[]` with at least the file being modified + source of truth files
|
|
217
224
|
- [ ] Every task has `convergence.criteria[]` with grep-verifiable conditions (no subjective language)
|
|
225
|
+
- [ ] UI plans: each delivery wave has ≥1 `[UI-observable]` convergence criterion (vertical slice; verified at runtime by ralph frontend-verify gate)
|
|
218
226
|
- [ ] Every task `action` and `implementation` contain concrete values (no "align X with Y")
|
|
227
|
+
- [ ] Boundary grill executed in P3.5 (skip if no conflicts detected)
|
|
228
|
+
- [ ] Boundary grill results written to plan.json `boundary_grill` section (if conflicts found)
|
|
229
|
+
- [ ] DEC conflicts reflected in confidence `boundary_warning` factor
|
|
219
230
|
- [ ] Plan confidence scored in P4 with 5-dimension factor model
|
|
220
231
|
- [ ] Plan readiness gate checked before P4.5 collision detection
|
|
221
232
|
- [ ] Pressure pass completed on highest-complexity task
|
|
@@ -24,7 +24,8 @@ $ARGUMENTS — intent text, flags, or keywords.
|
|
|
24
24
|
|
|
25
25
|
**Parse:**
|
|
26
26
|
```
|
|
27
|
-
-y flag → auto_confirm = true
|
|
27
|
+
-y flag → auto_confirm = true # 唯一来源:用户显式传入;ralph 不内部推断(invariant 14)
|
|
28
|
+
--roadmap → wants_roadmap = true (强制多发布 roadmap 路径;roadmap 默认 opt-in)
|
|
28
29
|
.md/.txt path → input_doc (supplementary context only, NEVER substitutes lifecycle stages)
|
|
29
30
|
Remaining → intent
|
|
30
31
|
```
|
|
@@ -49,6 +50,9 @@ Remaining → intent
|
|
|
49
50
|
11. **task_decomposition 驱动 steps[] 动态生长** — `post-goal-audit` 按 unmet 子目标插入 scoped mini-loop;字段可选/累加,既有字段不删不改
|
|
50
51
|
12. **Invariant violation = BLOCK** — 违反上述任一 invariant 即阻断当前操作。不得以 "效率" 或 "意图明确" 为由绕过。特别是 invariant 1(ralph 不执行 step)和 invariant 6(completion_confirmed 由 CLI 写入)不可隐性违反。
|
|
51
52
|
13. **Delegate fallback 必须标记** — A_DELEGATE_EVALUATE 解析 verdict 失败时 fallback 为 "fix",但 MUST 在 decisions.ndjson 记录 `"parse_failed": true, "confidence_score": 0`,后续 step 继承 LOW CONFIDENCE 标记。
|
|
53
|
+
14. **auto_confirm 单一来源** — `auto_confirm` 仅由用户 `-y` 标志设定;ralph 不得内部推断。`session.auto_mode` 仅反映用户输入。
|
|
54
|
+
15. **分解契约单一所有者** — `boundary_contract` / `task_decomposition` 由 session 创建者拥有(`source=="ralph"` → `decomposition_owner="ralph"`;`source=="maestro"` → `"maestro"`)。contract 已存在时,后续 S_DECOMPOSE MUST 跳过 ask_user,仅做 shape 校验 + 缺省补齐;goal-audit 只更新 `task_decomposition[*].status/completion_confirmed/completed_at`,禁止改 `goal/done_when/boundary`。
|
|
55
|
+
16. **控制权优先级(范式治理)** — FSM 独占 session 生命周期 + step 排序 + retry/fix/escalate + cross-step decision 节点;Pipeline 命令只拥有自身 artifact GATE(GATE 失败 → `maestro ralph complete <idx> --status BLOCKED|NEEDS_RETRY`,自身 GATE 全过 → DONE);Router 命令不得出现在 FSM step 内。
|
|
52
56
|
</invariants>
|
|
53
57
|
|
|
54
58
|
<state_machine>
|
|
@@ -58,7 +62,7 @@ S_PARSE_ROUTE — 解析参数、路由入口 PERSIST: —
|
|
|
58
62
|
S_STATUS — 显示 session 进度 PERSIST: —
|
|
59
63
|
S_CONTINUE — 恢复执行 PERSIST: —
|
|
60
64
|
S_RESOLVE_PHASE — 解析 phase + phase_is_new + D-007 milestone PERSIST: session.phase, session.phase_is_new, session.milestone
|
|
61
|
-
S_INFER — 基于已解析 phase 推断 lifecycle_position PERSIST: session.lifecycle_position
|
|
65
|
+
S_INFER — 基于已解析 phase 推断 lifecycle_position PERSIST: session.lifecycle_position, session.wants_roadmap
|
|
62
66
|
S_RESOLVE_SCOPE — 读 macro analyze conclusions.scope_verdict PERSIST: session.scope_verdict, session.analyze_macro_id
|
|
63
67
|
S_QUALITY_MODE — 决定质量管线模式 PERSIST: session.quality_mode
|
|
64
68
|
S_PLANNING_MODE — 决定统一/独立规划模式 PERSIST: session.planning_mode
|
|
@@ -130,7 +134,7 @@ S_DISPATCH:
|
|
|
130
134
|
→ END DO: invoke_skill({ skill: "maestro-ralph-execute" })
|
|
131
135
|
|
|
132
136
|
S_DECISION_EVAL: (decision 节点 == `step.decision` 非空,下述 gate 名取自该字段)
|
|
133
|
-
→ S_APPLY_VERDICT WHEN: quality-gate (post-execute, post-business-test, post-review, post-test)
|
|
137
|
+
→ S_APPLY_VERDICT WHEN: quality-gate (post-execute, post-business-test, post-review, post-test, post-frontend-verify)
|
|
134
138
|
DO: A_DELEGATE_EVALUATE
|
|
135
139
|
→ S_APPLY_VERDICT WHEN: goal-gate (post-goal-audit)
|
|
136
140
|
DO: A_GOAL_AUDIT_EVALUATE
|
|
@@ -138,11 +142,14 @@ S_DECISION_EVAL: (decision 节点 == `step.decision` 非空,下述 gate 名取
|
|
|
138
142
|
DO: A_SCOPE_EVALUATE
|
|
139
143
|
→ S_APPLY_VERDICT WHEN: structural (post-milestone, post-debug-escalate)
|
|
140
144
|
DO: A_STRUCTURAL_EVALUATE
|
|
145
|
+
→ S_APPLY_VERDICT WHEN: reground-gate (post-reground)
|
|
146
|
+
DO: A_REGROUND_EVALUATE
|
|
141
147
|
|
|
142
148
|
S_APPLY_VERDICT:
|
|
143
149
|
→ S_DISPATCH WHEN: verdict == "proceed" DO: A_APPLY_PROCEED
|
|
144
|
-
→ S_DISPATCH WHEN: post-goal-audit +
|
|
145
|
-
→ S_DISPATCH WHEN: post-goal-audit +
|
|
150
|
+
→ S_DISPATCH WHEN: post-goal-audit + has_unmet DO: A_APPLY_GOAL_FIX
|
|
151
|
+
→ S_DISPATCH WHEN: post-goal-audit + all_met + INTENT_ALIGNED=true DO: A_APPLY_GOAL_DONE
|
|
152
|
+
→ END WHEN: post-goal-audit + all_met + INTENT_ALIGNED=false DO: A_REGROUND_HALT(尾部漂移熔断)
|
|
146
153
|
→ S_DISPATCH WHEN: post-analyze-scope DO: A_APPLY_SCOPE_VERDICT
|
|
147
154
|
→ S_DISPATCH WHEN: verdict == "fix" DO: A_APPLY_FIX
|
|
148
155
|
→ S_DISPATCH WHEN: verdict == "escalate" DO: A_APPLY_ESCALATE
|
|
@@ -150,11 +157,15 @@ S_APPLY_VERDICT:
|
|
|
150
157
|
→ END WHEN: post-milestone + standard + no next milestone DO: mark completed
|
|
151
158
|
→ END WHEN: post-milestone + adhoc DO: mark completed (adhoc self-contained)
|
|
152
159
|
→ END WHEN: post-debug-escalate (always STOP) DO: A_PAUSE_ESCALATE
|
|
160
|
+
→ END WHEN: post-reground + drifted + confidence_score >= 60 DO: A_REGROUND_HALT
|
|
161
|
+
→ S_DISPATCH WHEN: post-reground + aligned DO: A_APPLY_PROCEED
|
|
162
|
+
→ S_DISPATCH WHEN: post-reground + drifted + confidence_score < 60 DO: A_APPLY_PROCEED (标 LOW CONFIDENCE)
|
|
153
163
|
GUARD: retry_count >= max_retries → force escalate
|
|
154
164
|
GUARD: confidence_score < 60 AND proceed → override to fix
|
|
155
165
|
GUARD: confidence_score > 95 AND fix AND retry > 0 → suggest proceed
|
|
156
166
|
GUARD: auto_confirm → skip user prompt, apply adjusted verdict
|
|
157
167
|
GUARD: not auto_confirm → ask_user with override options
|
|
168
|
+
GUARD: post-reground + drifted + confidence_score >= 60 → A_REGROUND_HALT(漂移熔断为安全门,auto_confirm 不跳过)
|
|
158
169
|
|
|
159
170
|
S_FALLBACK:
|
|
160
171
|
→ S_PARSE_ROUTE WHEN: user provides input DO: ask_user
|
|
@@ -212,11 +223,19 @@ resolve_milestone(phase_number):
|
|
|
212
223
|
|
|
213
224
|
| Pattern | Position |
|
|
214
225
|
|---------|----------|
|
|
215
|
-
| 压力测试 / 拷问 / 验证假设 / grill / stress-test | `grill`(**auto_confirm=true
|
|
226
|
+
| 压力测试 / 拷问 / 验证假设 / grill / stress-test | `grill`(**auto_confirm=true 时透传 `-y`,grill 以 Auto mode 代码代答,不跳过**) |
|
|
216
227
|
| brainstorm / 头脑风暴 / 探索 / ideate / 设计思路 | `brainstorm` |
|
|
217
228
|
| blueprint / 规格 / 正式文档 / spec-generate / 7-phase | `blueprint` |
|
|
218
229
|
| broad/medium intent 无数字 phase (重构/全面/重写/迁移/新功能 X) | `analyze-macro` |
|
|
219
230
|
|
|
231
|
+
**Roadmap opt-in detection** (设 `session.wants_roadmap`,缺省 `false`):
|
|
232
|
+
```
|
|
233
|
+
wants_roadmap = (--roadmap flag)
|
|
234
|
+
OR (intent 含多发布信号: 多发布|多版本|分阶段交付|按里程碑发布|v1.*v2|multi-release|roadmap)
|
|
235
|
+
OR (.workflow/roadmap.md 已存在) ← 向后兼容:既有 roadmap 项目行为不变
|
|
236
|
+
```
|
|
237
|
+
默认 `false` → large 项目走单一多波次 `plan --from analyze`,不引入 roadmap 横切层;roadmap 仅多发布场景 opt-in。
|
|
238
|
+
|
|
220
239
|
**Bootstrap detection:**
|
|
221
240
|
|
|
222
241
|
| Condition | Position |
|
|
@@ -231,7 +250,7 @@ resolve_milestone(phase_number):
|
|
|
231
250
|
| Condition | Position |
|
|
232
251
|
|-----------|----------|
|
|
233
252
|
| `phase_is_new == true` (新 phase) | `analyze` |
|
|
234
|
-
| no milestones AND no roadmap.md AND has analyze macro artifact | `roadmap` |
|
|
253
|
+
| no milestones AND no roadmap.md AND has analyze macro artifact | `roadmap` if `wants_roadmap` else `plan` (--from analyze) |
|
|
235
254
|
| no milestones AND no roadmap.md AND no analyze artifact | `analyze-macro` |
|
|
236
255
|
| `phase == null` (grill/brainstorm/blueprint/init/roadmap/analyze-macro override 已定) | n/a |
|
|
237
256
|
| phase 已存在 + 无任何 artifact | `analyze` |
|
|
@@ -252,9 +271,9 @@ resolve_milestone(phase_number):
|
|
|
252
271
|
|
|
253
272
|
| scope_verdict | 链路 |
|
|
254
273
|
|---------------|------|
|
|
255
|
-
| `large` | analyze-macro → roadmap → analyze → plan → execute →
|
|
256
|
-
| `medium` / `small` | analyze-macro → plan --from analyze:{ANL_ID} → execute → ...(跳过 roadmap + analyze-phase
|
|
257
|
-
| `unknown` | 默认走
|
|
274
|
+
| `large` + `wants_roadmap` | analyze-macro → roadmap → analyze → plan → execute → ...(多发布 opt-in) |
|
|
275
|
+
| `large`(默认)/ `medium` / `small` | analyze-macro → plan --from analyze:{ANL_ID} → execute → ...(跳过 roadmap + analyze-phase;单一多波次计划) |
|
|
276
|
+
| `unknown` | 默认走 standalone(plan --from analyze)路径,post-analyze-scope 决策节点再纠正 |
|
|
258
277
|
|
|
259
278
|
**Refine from post-execute results:**
|
|
260
279
|
|
|
@@ -266,7 +285,8 @@ resolve_milestone(phase_number):
|
|
|
266
285
|
| passed==true, no review.json | `business-test` |
|
|
267
286
|
| review.json: verdict=="BLOCK" | `review-failed` |
|
|
268
287
|
| review.json: verdict!="BLOCK" | `test` |
|
|
269
|
-
| uat.md: all passed | `milestone-audit` |
|
|
288
|
+
| uat.md: all passed + `session.milestone` 存在 | `milestone-audit` |
|
|
289
|
+
| uat.md: all passed + `session.milestone=null` (standalone) | 标记 session completed(无 milestone 可审计) |
|
|
270
290
|
| uat.md: has failures | `test-failed` |
|
|
271
291
|
|
|
272
292
|
### A_DETERMINE_QUALITY_MODE
|
|
@@ -311,7 +331,9 @@ options:
|
|
|
311
331
|
|
|
312
332
|
### A_DECOMPOSE_TASKS
|
|
313
333
|
|
|
314
|
-
Runs once before chain build; additive to status.json.
|
|
334
|
+
Runs once before chain build; additive to status.json. 设 `session.decomposition_owner = "ralph"`。
|
|
335
|
+
|
|
336
|
+
**0. Ownership guard** (invariant 15): 若 `session.boundary_contract` 或 `session.task_decomposition` 已非空(上游 maestro 已写入,`decomposition_owner == "maestro"`)→ MUST 跳过下述提问,仅做 shape 校验 + 缺省字段补齐,直接进入步骤 6。
|
|
315
337
|
|
|
316
338
|
**1. Classify intent breadth:**
|
|
317
339
|
|
|
@@ -337,10 +359,10 @@ narrow → derive defaults from intent + codebase, skip questions.
|
|
|
337
359
|
```json
|
|
338
360
|
{ "id": "G1", "goal": "<deliverable>", "boundary": "<in/out note>",
|
|
339
361
|
"done_when": "<objectively checkable condition>",
|
|
340
|
-
"evidence": "verification.json|review.json|uat.md|<test path>",
|
|
362
|
+
"evidence": "verification.json|review.json|uat.md|e2e-results.json|<test path>",
|
|
341
363
|
"lifecycle": ["analyze","execute"], "status": "pending" }
|
|
342
364
|
```
|
|
343
|
-
`done_when` 必须客观可验证,且引用 ralph 已产出的 artifact;`lifecycle` 字段映射到产出 evidence 的生命周期 stage
|
|
365
|
+
`done_when` 必须客观可验证,且引用 ralph 已产出的 artifact;`lifecycle` 字段映射到产出 evidence 的生命周期 stage。涉及前端可用性的子目标,`done_when` 应引用 `e2e-results.json`(frontend-verify 门产出),不得仅以后端 API/build 证据判定可用。
|
|
344
366
|
|
|
345
367
|
**5. Persist** (additive): `boundary_contract`, `execution_criteria`, `task_decomposition`。每个 sub-goal 含 `status: "pending"` + `completion_confirmed: false`。
|
|
346
368
|
|
|
@@ -348,11 +370,11 @@ narrow → derive defaults from intent + codebase, skip questions.
|
|
|
348
370
|
|
|
349
371
|
### A_BUILD_STEPS
|
|
350
372
|
|
|
351
|
-
Generate steps from `session.lifecycle_position` to `milestone-complete
|
|
373
|
+
Generate steps from `session.lifecycle_position` to `milestone-complete`(`session.milestone` 存在时)或最后一个质量门(standalone 时)。
|
|
352
374
|
|
|
353
375
|
| Stage | invoke_skill(independent) | invoke_skill(unified) | Decision after | quality_mode |
|
|
354
376
|
|-------|---------------------|-----------------|----------------|--------------|
|
|
355
|
-
| grill | `maestro-grill "{intent}"` | *(same)* | — | all (**
|
|
377
|
+
| grill | `maestro-grill "{intent}"` | *(same)* | — | all (**auto_confirm → 透传 `-y` 到 grill args,不删除 stage**) |
|
|
356
378
|
| brainstorm | `maestro-brainstorm "{intent}" --from grill:{grill_id}` *(if grill ran)* / `maestro-brainstorm "{intent}"` *(otherwise)* | *(same)* | — | all |
|
|
357
379
|
| blueprint | `maestro-blueprint "{intent}"` | *(same)* | — | all |
|
|
358
380
|
| init | `maestro-init` | *(same)* | — | all |
|
|
@@ -366,6 +388,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
366
388
|
| review | `quality-review {phase}` | `quality-review` | `post-review` | all (quick: append `--tier quick`) |
|
|
367
389
|
| test-gen | `quality-auto-test {phase}` | `quality-auto-test` | — | full / standard if coverage<80% |
|
|
368
390
|
| test | `quality-test {phase}` | `quality-test` | `post-test` | full, standard |
|
|
391
|
+
| frontend-verify | `quality-test {phase} --frontend-verify` | `quality-test --frontend-verify` | `post-frontend-verify` | all(**仅当 phase 交付 UI 时插入**:检出 `dashboard/` 或 UI 关键词 `landing\|page\|dashboard\|frontend\|UI\|component\|界面`) |
|
|
369
392
|
| milestone-audit | `maestro-milestone-audit` | *(same)* | — | all |
|
|
370
393
|
| goal-audit | *(decision-only)* | *(same)* | `post-goal-audit` | all (only if decomposed) |
|
|
371
394
|
| milestone-complete | `maestro-milestone-complete` | *(same)* | `post-milestone` | all |
|
|
@@ -379,10 +402,12 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
379
402
|
1. **起点**:从 `session.lifecycle_position` 开始
|
|
380
403
|
2. **跳过已完成**:跳过当前 milestone+phase 下已有 completed artifact 的 stage(按 `session.phase` 过滤);unified 按 milestone 过滤
|
|
381
404
|
3. **quality_mode 过滤**:按 `session.quality_mode` 排除不匹配 stage
|
|
382
|
-
3.5. **grill auto_confirm
|
|
405
|
+
3.5. **grill auto_confirm 透传**:`auto_confirm == true` 时为 `grill` step args 追加 `-y`(grill 自身 Auto mode 用代码代答,见 maestro-grill `<context>` Mode selection);保留 `grill` stage 与 brainstorm 的 `--from grill:*`(grill 仍产出 grill-report/terminology/context-package)
|
|
406
|
+
3.6. **frontend-verify UI 门控**:仅当当前 phase 交付前端(检出 `dashboard/` 目录,或 phase 目标/计划含 UI 关键词 `landing|page|dashboard|frontend|UI|component|界面`)时保留 `frontend-verify` stage + `post-frontend-verify` decision;纯后端 phase 删除该 stage
|
|
383
407
|
4. **决策节点**:每个 Decision after 非空的 stage 之后插入 `{ decision: "<gate>", retry_count: 0, max_retries: 2, command_scope: null, command_path: null }`
|
|
384
408
|
5. **goal-audit 插入**:`task_decomposition` 存在时,在最后一个 evidence-producing stage(execute/review/test)之后、`milestone-complete` 之前插入 `decision:post-goal-audit`
|
|
385
|
-
|
|
409
|
+
5.5. **re-grounding 插入**:当 `task_decomposition` 存在 **且** 链路含 ≥3 个执行 step(不含 decision 节点)时,从第 3 个执行 step 起每隔 3 个执行 step 后插入 `{ decision: "post-reground", retry_count: 0, max_retries: 0, command_scope: null, command_path: null }`。不在最后一个执行 step 之后插入(由 goal-audit 覆盖);不与已有 quality-gate decision 节点相邻(顺延到下一个 3-step 边界);fix-loop 动态插入的 step(index > 原始 chain 长度)不纳入计数
|
|
410
|
+
6. **终点硬约束**:`session.milestone` 存在时 chain 以 `milestone-complete` 结尾;`session.milestone=null`(standalone)时跳过 `milestone-audit` + `milestone-complete` stage,chain 以最后一个质量门 stage 结尾
|
|
386
411
|
7. **goal_ref 传播**:`task_decomposition` 存在时,每个 step 按 `step.stage ∈ g.lifecycle` 匹配 `step.goal_ref = g.id`(多匹配取字典序最小);decision 节点不打 goal_ref
|
|
387
412
|
8. **占位符**:independent 保留 `{phase}` `{intent}`;unified 不带 `{phase}`
|
|
388
413
|
9. **command_path 解析**(每个执行 step,decision 节点跳过):
|
|
@@ -394,13 +419,16 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
394
419
|
- **不在 build 阶段读取 .md 内容**;`<required_reading>` / `<deferred_reading>` 解析与加载由 `maestro ralph next` CLI 在执行期完成
|
|
395
420
|
10. **每个 step 初始化** `completion_confirmed: false`, `completion_status: null`, `completion_evidence: null`, `deferred_reads: []`, `load: null`(由 `ralph next` 写入)
|
|
396
421
|
11. **scope_verdict gating**(仅当 chain 起点 = `analyze-macro`):
|
|
397
|
-
- `scope_verdict
|
|
398
|
-
- `
|
|
399
|
-
- `scope_verdict == unknown` → 默认
|
|
422
|
+
- `scope_verdict == large` **且** `wants_roadmap` → 保留 `roadmap` + `analyze`;`plan` 选 phase 列(`{phase}`)
|
|
423
|
+
- 其余(`medium` / `small`,或 `large` 但非 `wants_roadmap`)→ 跳过 `roadmap` + `analyze` 两 stage;`plan` 选 standalone 列(`--from analyze:{analyze_macro_id}`),不带 `{phase}`
|
|
424
|
+
- `scope_verdict == unknown` → 默认 standalone(非 roadmap)路径;由 `post-analyze-scope` 决策节点在 macro analyze 完成后纠正(A_APPLY_SCOPE_VERDICT)
|
|
400
425
|
12. **--from 自动注入**:
|
|
401
426
|
- `analyze_macro_id` 存在且当前 step 是 `roadmap` → args 改为 `--from analyze:{analyze_macro_id}`
|
|
402
|
-
- `analyze_macro_id`
|
|
427
|
+
- `analyze_macro_id` 存在且当前 `plan` step 处于 standalone 列(即非 wants_roadmap 路径:`medium`/`small`,或 `large` 但非 `wants_roadmap`)→ args 改为 `--from analyze:{analyze_macro_id}`
|
|
403
428
|
- `blueprint_id` 存在 → 当前 step 是 `plan` → args 改为 `--from blueprint:{blueprint_id}`(优先级低于 phase 数字参数)
|
|
429
|
+
- **phase-level deferred chaining**(独立模式,step 含 `{phase}` 占位符):build 阶段前序 artifact 尚未产出,由 A_RESOLVE_ARGS(ralph-execute)运行时从 state.json 查找同 phase+milestone 最新 completed artifact 注入:
|
|
430
|
+
- `plan` step → `--from analyze:{phase_analyze_id}`,写 `source_artifact_ref`
|
|
431
|
+
- `execute` step → `--dir {plan_path}`(现有逻辑),写 `source_artifact_ref = "plan:{id}"`
|
|
404
432
|
- 写入 `step.source_artifact_ref` 以便审计
|
|
405
433
|
13. **D-007 Milestone-ref 标注**:每个含 `{phase}` 占位符的 step → `step.milestone_id = session.milestone`(由 A_RESOLVE_PHASE 反查得出),禁止读 `current_milestone`
|
|
406
434
|
14. **动态插入步骤**(A_APPLY_*)同样应用规则 7-13
|
|
@@ -423,6 +451,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
423
451
|
| post-business-test | .tests/auto-test/report.json |
|
|
424
452
|
| post-review | review.json |
|
|
425
453
|
| post-test | uat.md, .tests/test-results.json |
|
|
454
|
+
| post-frontend-verify | e2e-results.json |
|
|
426
455
|
4. Check artifact for confidence section → include as signal
|
|
427
456
|
5. Execute delegate (run_in_background, STOP, wait for callback):
|
|
428
457
|
```
|
|
@@ -481,14 +510,18 @@ Runs only when `task_decomposition` present.
|
|
|
481
510
|
1. 读取 status.json.task_decomposition 中 status!=done 的子目标
|
|
482
511
|
2. 打开 evidence 产物,对照 done_when 严格判定
|
|
483
512
|
3. 输出 met / unmet,unmet 给出 gap + target_phase
|
|
513
|
+
4. 对照 intent + definition_of_done 判定累积产出是否仍服务原始意图(意图保真检查)
|
|
484
514
|
CONTEXT:
|
|
485
|
-
status.json
|
|
486
|
-
|
|
515
|
+
status.json = {session_dir}/status.json
|
|
516
|
+
intent = {session.intent}
|
|
517
|
+
definition_of_done = {boundary_contract.definition_of_done}
|
|
518
|
+
evidence = {evidence artifacts}
|
|
487
519
|
execution_criteria = {execution_criteria}
|
|
488
520
|
boundary_contract = {boundary_contract}
|
|
489
521
|
EXPECTED:
|
|
490
522
|
---VERDICT---
|
|
491
523
|
STATUS=all_met|has_unmet
|
|
524
|
+
INTENT_ALIGNED=true|false
|
|
492
525
|
UNMET=[{id:G2,gap:'...',target_phase:execute}, ...]
|
|
493
526
|
CONFIDENCE_SCORE=0-100
|
|
494
527
|
---END---
|
|
@@ -501,9 +534,64 @@ Runs only when `task_decomposition` present.
|
|
|
501
534
|
```
|
|
502
535
|
4. On callback: 对每个 met 子目标,set `task_decomposition[i].status="done"` + `completion_confirmed=true` + `completed_at=now`
|
|
503
536
|
5. Append `{session_dir}/decisions.ndjson` with `"type": "goal-gate"`, `unmet_count`, `unmet_ids`
|
|
504
|
-
6. Verdict:
|
|
537
|
+
6. Verdict routing:
|
|
538
|
+
- `all_met` + `INTENT_ALIGNED=true` → A_APPLY_GOAL_DONE
|
|
539
|
+
- `all_met` + `INTENT_ALIGNED=false` → A_REGROUND_HALT(尾部漂移熔断,auto_confirm 不跳过)
|
|
540
|
+
- `has_unmet` → A_APPLY_GOAL_FIX
|
|
505
541
|
GUARD: retry_count >= max_retries AND still unmet → A_APPLY_ESCALATE
|
|
506
542
|
|
|
543
|
+
### A_REGROUND_EVALUATE
|
|
544
|
+
|
|
545
|
+
仅当 `task_decomposition` 存在。周期触发(build rule 5.5)。
|
|
546
|
+
|
|
547
|
+
1. 从 status.json 读取:`session.intent`、`session.boundary_contract`、`steps[]` 中 `status=="completed"` 的 step + `completion_evidence`、`task_decomposition` 中已 done 子目标的 `goal` + `done_when`
|
|
548
|
+
2. Delegate read-only audit (run_in_background, STOP, wait):
|
|
549
|
+
```
|
|
550
|
+
maestro delegate "PURPOSE: 意图保真检查 — 对照 intent 验证累积执行是否漂移
|
|
551
|
+
TASK:
|
|
552
|
+
1. 读取 intent + boundary_contract.definition_of_done
|
|
553
|
+
2. 读取已完成 steps 的 completion_evidence + 已 done 子目标 done_when
|
|
554
|
+
3. 判定累积产出是否仍服务 intent;是否有 step 产出超出 in_scope 或触碰 out_of_scope
|
|
555
|
+
4. 输出 aligned / drifted,drifted 给出 drift_description + corrective_action
|
|
556
|
+
CONTEXT:
|
|
557
|
+
intent = {session.intent}
|
|
558
|
+
definition_of_done = {boundary_contract.definition_of_done}
|
|
559
|
+
in_scope = {boundary_contract.in_scope}
|
|
560
|
+
out_of_scope = {boundary_contract.out_of_scope}
|
|
561
|
+
completed_steps = [{index, skill, stage, completion_evidence}, ...]
|
|
562
|
+
done_goals = [{id, goal, done_when}, ...]
|
|
563
|
+
EXPECTED:
|
|
564
|
+
---VERDICT---
|
|
565
|
+
STATUS=aligned|drifted
|
|
566
|
+
DRIFT_DESCRIPTION=<空或具体描述>
|
|
567
|
+
CORRECTIVE_ACTION=<空或建议>
|
|
568
|
+
CONFIDENCE_SCORE=0-100
|
|
569
|
+
---END---
|
|
570
|
+
CONSTRAINTS:
|
|
571
|
+
- 只评估,不修改文件
|
|
572
|
+
- aligned 阈值:≥80% 已完成产出直接服务 intent
|
|
573
|
+
- 单个 step 触碰 out_of_scope → 直接判 drifted"
|
|
574
|
+
--role analyze --mode analysis
|
|
575
|
+
```
|
|
576
|
+
3. On callback: parse verdict
|
|
577
|
+
4. Append `{session_dir}/decisions.ndjson`:`{ "id": "DEC-{ts}", "type": "reground-gate", "source": "ralph", "node_id": "post-reground", "verdict": "{aligned|drifted}", "confidence_score": {N}, "drift_description": "...", "corrective_action": "..." }`
|
|
578
|
+
5. Verdict routing:`aligned` → A_APPLY_PROCEED;`drifted` + `confidence_score >= 60` → A_REGROUND_HALT;`drifted` + `confidence_score < 60` → A_APPLY_PROCEED(标 LOW CONFIDENCE)
|
|
579
|
+
|
|
580
|
+
### A_REGROUND_HALT
|
|
581
|
+
|
|
582
|
+
漂移熔断(安全门,auto_confirm 不跳过)。
|
|
583
|
+
|
|
584
|
+
1. Set `session.status = "paused"`,write status.json
|
|
585
|
+
2. Display:
|
|
586
|
+
```
|
|
587
|
+
⚠️ Re-grounding 检测失败 — 执行已偏离 intent。
|
|
588
|
+
Intent: {session.intent}
|
|
589
|
+
Drift: {drift_description}
|
|
590
|
+
建议回归: {corrective_action}
|
|
591
|
+
选项:1) /maestro-ralph continue 忽略漂移继续 2) 手动修正后 continue 3) /maestro-ralph status 查看后决定
|
|
592
|
+
```
|
|
593
|
+
3. GUARD: auto_confirm 对本动作无效——漂移熔断不可自动跳过
|
|
594
|
+
|
|
507
595
|
### A_APPLY_PROCEED
|
|
508
596
|
|
|
509
597
|
1. Mark decision completed, write status.json
|
|
@@ -524,14 +612,14 @@ Runs only when `task_decomposition` present.
|
|
|
524
612
|
|
|
525
613
|
由 `post-analyze-scope` 触发,依据 `session.scope_verdict` 重塑下游链路。
|
|
526
614
|
|
|
527
|
-
1. 读 `session.scope_verdict`
|
|
528
|
-
2. 路径 A(`large
|
|
529
|
-
3. 路径 B(`medium` / `small`):
|
|
615
|
+
1. 读 `session.scope_verdict` + `session.wants_roadmap`
|
|
616
|
+
2. 路径 A(`large` 且 `wants_roadmap`):保持当前链(roadmap+analyze);为后续 `roadmap` step 注入 `--from analyze:{analyze_macro_id}`;为后续 `plan` step 选 phase 列;继续推进
|
|
617
|
+
3. 路径 B(`medium` / `small`,或 `large` 但非 `wants_roadmap`):
|
|
530
618
|
- 删除 `goal-audit` 之前所有未完成的 `roadmap` + `analyze` (phase) step
|
|
531
619
|
- 把下一个未完成的 `plan` step 改为 `maestro-plan --from analyze:{analyze_macro_id}`,去掉 `{phase}`,`source_artifact_ref = analyze:{analyze_macro_id}`
|
|
532
620
|
- 后续 `execute` 等沿用同一 standalone scope(不带 `{phase}`,由 plan 写出的 task 列表驱动)
|
|
533
621
|
4. 路径 C(`unknown`):
|
|
534
|
-
- 非 auto_confirm → ask_user 二选一(
|
|
622
|
+
- 非 auto_confirm → ask_user 二选一(roadmap 多发布 / 单一计划);auto_confirm → 默认路径 B(单一计划,不引入 roadmap)
|
|
535
623
|
5. Reindex steps,标 decision completed,write status.json
|
|
536
624
|
6. Display: ◆ Scope verdict: {verdict} → {kept|collapsed to standalone via analyze:{ANL_ID}}
|
|
537
625
|
|
|
@@ -578,9 +666,12 @@ Runs only when `task_decomposition` present.
|
|
|
578
666
|
"phase": null, "phase_is_new": false,
|
|
579
667
|
"milestone": "", // D-007 反查结果,禁止读 current_milestone
|
|
580
668
|
"auto_mode": false,
|
|
669
|
+
"decomposition_owner": "ralph", // 分解契约所有者(invariant 15);缺省按 source 推断
|
|
670
|
+
|
|
581
671
|
"quality_mode": "standard", // "full" | "standard" | "quick"
|
|
582
672
|
"planning_mode": "independent", // "unified" | "independent"
|
|
583
673
|
"scope_verdict": null, // "large" | "medium" | "small" | "unknown" | null
|
|
674
|
+
"wants_roadmap": false, // roadmap opt-in:--roadmap | 多发布 intent | roadmap.md 已存在
|
|
584
675
|
"analyze_macro_id": null, // "ANL-xxx" 来自最新 macro analyze
|
|
585
676
|
"blueprint_id": null, // "BLP-xxx" 若存在
|
|
586
677
|
"cli_tool": "claude", "passed_gates": [],
|
|
@@ -672,6 +763,15 @@ quality-test {phase}
|
|
|
672
763
|
decision:post-test {retry+1}
|
|
673
764
|
```
|
|
674
765
|
|
|
766
|
+
**post-frontend-verify:** (UI 写端点未接线/不可用时)
|
|
767
|
+
```
|
|
768
|
+
quality-debug --from-frontend-verify "{gap_summary}"
|
|
769
|
+
maestro-plan --gaps {phase}
|
|
770
|
+
maestro-execute {phase}
|
|
771
|
+
quality-test {phase} --frontend-verify
|
|
772
|
+
decision:post-frontend-verify {retry+1}
|
|
773
|
+
```
|
|
774
|
+
|
|
675
775
|
**post-goal-audit:** (per unmet sub-goal group)
|
|
676
776
|
```
|
|
677
777
|
# for each unmet sub-goal G{n}, scoped to target_phase:
|
|
@@ -718,14 +818,15 @@ decision:post-goal-audit {retry+1}
|
|
|
718
818
|
- [ ] D-007 反查:phase 数字 → `session.milestone`,禁止读 current_milestone;写入 step.milestone_id
|
|
719
819
|
- [ ] phase_is_new=true → lifecycle_position 强制 `analyze`
|
|
720
820
|
- [ ] Intent overrides 识别 grill / brainstorm / blueprint / analyze-macro
|
|
721
|
-
- [ ] auto_confirm=true 时 grill stage
|
|
821
|
+
- [ ] auto_confirm=true 时 grill step args 追加 `-y`(grill 以 Auto mode 执行,stage 不跳过,产出 grill-report/terminology/context-package)
|
|
722
822
|
- [ ] A_RESOLVE_SCOPE_VERDICT 读 macro analyze conclusions.scope_verdict,写入 session.scope_verdict + analyze_macro_id
|
|
723
|
-
- [ ] 链路起点 = analyze-macro 时:large→roadmap+analyze+plan(phase)
|
|
823
|
+
- [ ] 链路起点 = analyze-macro 时:large+wants_roadmap→roadmap+analyze+plan(phase);其余(含 large 默认/medium/small)→直跳 plan --from analyze:{ANL_ID}(跳过 roadmap+analyze)
|
|
724
824
|
- [ ] post-analyze-scope decision 节点在 macro analyze 之后插入;A_SCOPE_EVALUATE/A_APPLY_SCOPE_VERDICT 重塑链路
|
|
725
825
|
- [ ] plan step args 支持三路径:`{phase}` / `--from analyze:{ANL_ID}` / `--from blueprint:{BLP_ID}`,写入 step.source_artifact_ref
|
|
726
826
|
- [ ] roadmap step args 自动注入 `--from analyze:{analyze_macro_id}`(若存在)
|
|
727
827
|
- [ ] artifact 过滤按 session.phase;unified 按 milestone
|
|
728
828
|
- [ ] quality_mode 由 A_DETERMINE_QUALITY_MODE 决定,过滤 build steps
|
|
829
|
+
- [ ] frontend-verify stage 仅在 phase 交付 UI 时插入(test 后、milestone-audit 前);post-frontend-verify 走 quality-gate 评估,evidence=e2e-results.json
|
|
729
830
|
- [ ] Decomposition: broad intent ≤3 question clarify;narrow auto-derive
|
|
730
831
|
- [ ] status.json 唯一真源:boundary_contract + execution_criteria + task_decomposition;无外部清单
|
|
731
832
|
- [ ] 执行 step 含 `command_scope` + `command_path`(通过 `maestro ralph skills --platform agent --json --quiet` 预校验,project 覆盖 global);decision step 通过 `step.decision` 字段标识
|
|
@@ -739,5 +840,8 @@ decision:post-goal-audit {retry+1}
|
|
|
739
840
|
- [ ] Chain 必须以 `milestone-complete` 结尾
|
|
740
841
|
- [ ] Decision nodes 由 maestro delegate --role analyze 评估
|
|
741
842
|
- [ ] Ralph 不执行 step,只 evaluate;invoke_skill("maestro-ralph-execute") handoff
|
|
843
|
+
- [ ] Phase-level deferred chaining:plan/execute step 的 `--from`/`--dir` 注入由 A_RESOLVE_ARGS(ralph-execute)运行时完成;build 阶段标记意图,不预知 artifact ID
|
|
844
|
+
- [ ] Phase-level plan step 运行时获得 `--from analyze:{phase_analyze_id}`(由 ralph-execute 从 state.json 查找注入)
|
|
845
|
+
- [ ] Phase-level execute step 运行时获得 `source_artifact_ref = "plan:{id}"`
|
|
742
846
|
|
|
743
847
|
</appendix>
|
|
@@ -136,19 +136,44 @@ S_FALLBACK:
|
|
|
136
136
|
| maestro-brainstorm | topic | `"{intent}"` |
|
|
137
137
|
| maestro-roadmap | description | `"{intent}"` |
|
|
138
138
|
| maestro-analyze | phase or topic | `{phase}` or `"{intent}"` |
|
|
139
|
-
| maestro-plan | phase or --dir |
|
|
140
|
-
| maestro-execute | phase or --dir |
|
|
139
|
+
| maestro-plan | phase, --from, or --dir | see --from auto-injection below |
|
|
140
|
+
| maestro-execute | phase or --dir | see --from auto-injection below |
|
|
141
141
|
| quality-debug | gap context | Read previous step's error/gap |
|
|
142
142
|
| quality-* | phase | `{phase}` |
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
**--from auto-injection (phase-level artifact chaining):**
|
|
145
|
+
|
|
146
|
+
Phase-level steps 在 build 阶段无法预知前序 artifact ID。A_RESOLVE_ARGS 运行时从 state.json 查找并注入显式引用,打通 analyze→plan→execute 数据管道:
|
|
147
|
+
|
|
145
148
|
```
|
|
146
|
-
Read state.json
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
Read state.json.artifacts(含 milestone_history 内归档 artifacts)
|
|
150
|
+
→ filter by milestone={session.milestone} + phase={session.phase} + status=="completed"
|
|
151
|
+
|
|
152
|
+
plan step(含 {phase} 占位符,args 无 --from 且无 --dir):
|
|
153
|
+
1. 查同 phase+milestone 最新 completed type=="analyze" artifact → id = ANL-xxx
|
|
154
|
+
2. 命中 → args 追加 --from analyze:{id}
|
|
155
|
+
3. 写 step.source_artifact_ref = "analyze:{id}"
|
|
156
|
+
|
|
157
|
+
execute step(含 {phase} 占位符,args 无 --dir):
|
|
158
|
+
1. 查同 phase+milestone 最新 completed type=="plan" artifact → id = PLN-xxx, path = scratch/...
|
|
159
|
+
2. 命中 → args 追加 --dir .workflow/scratch/{path}
|
|
160
|
+
3. 写 step.source_artifact_ref = "plan:{id}"
|
|
149
161
|
```
|
|
150
162
|
|
|
151
|
-
|
|
163
|
+
兜底:查询无结果 → 不注入,由命令自身 discovery 逻辑处理。已有 `--from` 或 `--dir` 的 step 不覆盖。
|
|
164
|
+
|
|
165
|
+
**Goal context injection:**
|
|
166
|
+
|
|
167
|
+
当 step.goal_ref 非空且 session.task_decomposition 存在时:
|
|
168
|
+
```
|
|
169
|
+
goal = session.task_decomposition.find(g => g.id == step.goal_ref)
|
|
170
|
+
if goal:
|
|
171
|
+
goal_snippet = { id: goal.id, goal: goal.goal, done_when: goal.done_when,
|
|
172
|
+
boundary: goal.boundary, evidence: goal.evidence }
|
|
173
|
+
→ 传递给 A_EXEC_STEP 用于 inline execution 前注入(见 step 2 goal context pre-injection)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Write enriched args + source_artifact_ref back to status.json.
|
|
152
177
|
|
|
153
178
|
### A_EXEC_DECISION
|
|
154
179
|
|
|
@@ -164,13 +189,24 @@ Write enriched args back to status.json.
|
|
|
164
189
|
- 退出码 2 → 交给 S_LOCATE
|
|
165
190
|
- 退出码 3 → active_step_index 已被占用
|
|
166
191
|
- 退出码 1 → pause session
|
|
167
|
-
2. **
|
|
168
|
-
|
|
192
|
+
2. **Goal context pre-injection** — 若 A_RESOLVE_ARGS 产出了 `goal_snippet`(step.goal_ref 非空),在 ralph next stdout prompt **顶部前置**以下 block,使执行命令感知当前子目标和执行约束:
|
|
193
|
+
```
|
|
194
|
+
<goal_context>
|
|
195
|
+
Sub-goal: {goal.id} — {goal.goal}
|
|
196
|
+
Done when: {goal.done_when}
|
|
197
|
+
Boundary: {goal.boundary}
|
|
198
|
+
Evidence target: {goal.evidence}
|
|
199
|
+
Execution criteria: {session.execution_criteria joined by '; '}
|
|
200
|
+
</goal_context>
|
|
201
|
+
```
|
|
202
|
+
无 goal_snippet 时跳过此步。goal_context block 不替换 ralph next 的 stdout 内容,仅在其前方拼接。
|
|
203
|
+
3. **Inline execution** — 按 stdout(含 goal_context 前置)执行;deferred_reading 按需 Read
|
|
204
|
+
4. **Complete**:
|
|
169
205
|
- `shell("maestro ralph complete N --status DONE [--evidence <path>]")`
|
|
170
206
|
- `shell("maestro ralph complete N --status DONE_WITH_CONCERNS --concerns \"...\"")`
|
|
171
207
|
- `shell("maestro ralph retry N")`
|
|
172
208
|
- `shell("maestro ralph complete N --status BLOCKED --reason \"...\"")`
|
|
173
|
-
|
|
209
|
+
5. **Propagate context signals** — 关键信号 (`PHASE: N` / `scratch_dir: path` / `BLP-xxx`) 写入 `status.json.context`
|
|
174
210
|
|
|
175
211
|
完成后 S_LOCATE 触发 `invoke_skill({ skill: "maestro-ralph-execute" })` 自调用。
|
|
176
212
|
|
|
@@ -246,5 +282,10 @@ Display: `[{index}/{total}] ✗ {step.skill} 失败,会话已暂停。/maestro
|
|
|
246
282
|
- [ ] Context signals 由执行 step 显式写回 status.json.context(非 ralph-execute 内嵌扫描)
|
|
247
283
|
- [ ] Auto mode: retry 一次后 pause;interactive 提供 retry/skip/abort
|
|
248
284
|
- [ ] 自调用持续到全部 completion_confirmed 或 paused
|
|
285
|
+
- [ ] --from auto-injection:phase-level plan step 运行时从 state.json 查找同 phase+milestone 最新 completed analyze artifact → 注入 `--from analyze:{id}`,写 `source_artifact_ref`
|
|
286
|
+
- [ ] --from auto-injection:phase-level execute step 运行时查找同 phase+milestone 最新 completed plan artifact → 注入 `--dir`,写 `source_artifact_ref`
|
|
287
|
+
- [ ] Goal context injection:step.goal_ref 非空时从 task_decomposition 提取 goal_snippet,A_EXEC_STEP 在 ralph next stdout 顶部前置 `<goal_context>` block
|
|
288
|
+
- [ ] Goal context 包含 sub-goal description、done_when、boundary、evidence、execution_criteria
|
|
289
|
+
- [ ] 已有 `--from` 或 `--dir` 的 step 不被 auto-injection 覆盖
|
|
249
290
|
|
|
250
291
|
</appendix>
|
|
@@ -70,12 +70,8 @@ Parse $ARGUMENTS to determine mode:
|
|
|
70
70
|
- Update frontmatter via: `maestro wiki update <id> --frontmatter '{"tool": true, "category": "<cat>", "summary": "<summary>"}'`
|
|
71
71
|
- Do NOT recreate the document — modify in place
|
|
72
72
|
|
|
73
|
-
**For all modes** — identify the usage timing: when should an agent or user invoke this tool? This becomes the first line of the entry description (see Step 5).
|
|
74
|
-
|
|
75
73
|
### Step 3: Determine Category
|
|
76
74
|
|
|
77
|
-
**Core principle**: `category` = **who consumes this tool** (which agent type discovers and uses it), not what the content is about.
|
|
78
|
-
|
|
79
75
|
| Category | Consumer Agent | Decision Question | Signal Words |
|
|
80
76
|
|---|---|---|---|
|
|
81
77
|
| `coding` | code-developer, workflow-executor | 开发者实现时需要这个流程吗? | build, deploy, integrate, configure, setup, migrate, api-contract |
|
|
@@ -89,8 +85,6 @@ Parse $ARGUMENTS to determine mode:
|
|
|
89
85
|
- API verification steps (how to test) → `category: test` (RCP-*, tool: true)
|
|
90
86
|
- Ask user when ambiguous: "This tool content serves both developers and testers. Split into separate documents?"
|
|
91
87
|
|
|
92
|
-
**Ambiguous cases**: Choose the **primary consumer** — the agent that would fail without this knowledge.
|
|
93
|
-
|
|
94
88
|
### Step 4: Decide Inline vs Ref
|
|
95
89
|
|
|
96
90
|
- Steps <10 and no code blocks → **inline mode**
|
|
@@ -45,8 +45,6 @@ Load project UI conventions before extracting design system:
|
|
|
45
45
|
maestro spec load --category ui
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
If specs not initialized, continue without — the workflow still produces valid output.
|
|
49
|
-
|
|
50
48
|
## 2. Execute Workflow
|
|
51
49
|
|
|
52
50
|
Route to `~/.maestro/workflows/ui-codify.md` and follow completely.
|
|
@@ -17,8 +17,6 @@ allowed-tools:
|
|
|
17
17
|
|
|
18
18
|
<purpose>
|
|
19
19
|
Analyze current repository's code patterns to auto-generate `.workflow/kg/extractors.yaml` — a declarative config that teaches MaestroGraph's codegraph extractor to recognize project-specific symbols beyond standard function/class/method declarations.
|
|
20
|
-
|
|
21
|
-
Detects: builder/factory API registrations, domain constant patterns, custom decorator conventions, framework-specific patterns, module-level constants.
|
|
22
20
|
</purpose>
|
|
23
21
|
|
|
24
22
|
<context>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quality-test
|
|
3
3
|
description: Use when implementation needs user acceptance testing with interactive verification and gap closure
|
|
4
|
-
argument-hint: "[phase] [--smoke] [--auto-fix]"
|
|
4
|
+
argument-hint: "[phase] [--smoke] [--auto-fix] [--frontend-verify]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- read_file
|
|
7
7
|
- write_file
|
|
@@ -29,6 +29,29 @@ Flags, artifact context resolution, and output directory format defined in workf
|
|
|
29
29
|
</context>
|
|
30
30
|
|
|
31
31
|
<execution>
|
|
32
|
+
**Mode select:** `--frontend-verify` → 走下方 **Frontend Verify Mode**(确定性浏览器 smoke,**不是**对话式 UAT);否则 Follow '~/.maestro/workflows/test.md' completely.
|
|
33
|
+
|
|
34
|
+
### Frontend Verify Mode (`--frontend-verify`)
|
|
35
|
+
|
|
36
|
+
1. **Resolve targets**: 读 phase 的 `plan.json` / `.task/TASK-*.json`,提取所有 `[UI-observable]` convergence.criteria(plan 阶段产出);缺失则枚举后端写端点(POST/PUT/PATCH/DELETE)作为待验证清单。
|
|
37
|
+
2. **Start app**: `next start`(或从 dashboard/package.json 解析的既有启动脚本);启动失败 → E003。
|
|
38
|
+
3. **Drive browser**: 用 chrome-devtools MCP(`mcp__claude_dms3-chrome-devtools__*`:navigate / click / fill / take_snapshot / list_network_requests)逐条执行每个 `[UI-observable]` 流程,断言:UI 入口存在且可触发 → 对应写请求返回 2xx → DOM 出现预期结果。
|
|
39
|
+
4. **Write evidence**: 产出 `e2e-results.json`(结构见下),逐条记 pass/fail + 证据(网络状态码、快照引用)。**确定性断言,禁止"无人应答=全过"**。
|
|
40
|
+
5. **Verdict**: 任一 `[UI-observable]` fail 或写端点无 UI 入口 → STATUS=NEEDS_RETRY(ralph 经 post-frontend-verify 触发 Fix-Loop);全过 → DONE。
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
// e2e-results.json
|
|
44
|
+
{ "phase": "{phase}", "app_url": "http://localhost:3000",
|
|
45
|
+
"checks": [ { "criterion": "[UI-observable] ...", "ui_entry": "<selector/route>",
|
|
46
|
+
"request": "POST /api/notes", "status": 201, "dom_assert": "list shows new item",
|
|
47
|
+
"passed": true } ],
|
|
48
|
+
"summary": { "total": 0, "passed": 0, "failed": 0 }, "verdict": "pass|fail" }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Ralph-invoked 完成:`maestro ralph complete <idx> --status {STATUS} --evidence e2e-results.json`。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
32
55
|
Follow '~/.maestro/workflows/test.md' completely.
|
|
33
56
|
|
|
34
57
|
### Phase Gates (MANDATORY, BLOCKING)
|
|
@@ -146,4 +169,5 @@ maestro ralph complete <idx> --status {STATUS} [--evidence {path}]
|
|
|
146
169
|
- [ ] Gaps updated with root_cause, fix_direction, affected_files
|
|
147
170
|
- [ ] Gap-fix loop triggered if --auto-fix (max 2 iterations)
|
|
148
171
|
- [ ] Next step routed (phase-transition if pass, verify if auto-fix success, debug --from-uat if issues, test-gen if low coverage)
|
|
172
|
+
- [ ] `--frontend-verify`: 每条 [UI-observable] criterion 经真实浏览器断言,产出 e2e-results.json;任一 fail → NEEDS_RETRY(不放行)
|
|
149
173
|
</success_criteria>
|
|
@@ -48,4 +48,3 @@ Follow '~/.maestro/workflows/specs-setup.md' completely.
|
|
|
48
48
|
- [ ] Workflow recipe knowhow created in `.workflow/knowhow/` for each detected operational workflow (test / debug / build / dev / lint). Each recipe matches the `recipe` schema in `~/.maestro/workflows/knowhow.md` Part B and contains at least one runnable command.
|
|
49
49
|
- [ ] Report displayed grouped by destination (specs / recipes / skipped / deferred), with `.proposed.md` files surfaced when an existing recipe slug was preserved.
|
|
50
50
|
</success_criteria>
|
|
51
|
-
</output>
|