maestro-flow 0.5.34 → 0.5.35
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/workflow-collab-planner.md +1 -0
- package/.agents/agents/workflow-planner.md +2 -0
- 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-plan/SKILL.md +3 -1
- package/.agents/skills/maestro-ralph/SKILL.md +46 -17
- package/.agents/skills/maestro-ralph-execute/SKILL.md +51 -10
- package/.agents/skills/quality-test/SKILL.md +27 -1
- package/.agy/agents/workflow-collab-planner.md +1 -0
- package/.agy/agents/workflow-planner.md +2 -0
- 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-plan/SKILL.md +3 -1
- package/.agy/skills/maestro-ralph/SKILL.md +46 -17
- package/.agy/skills/maestro-ralph-execute/SKILL.md +51 -10
- package/.agy/skills/quality-test/SKILL.md +27 -1
- package/.claude/agents/workflow-collab-planner.md +1 -0
- package/.claude/agents/workflow-planner.md +2 -0
- package/.claude/commands/maestro-plan.md +3 -1
- package/.claude/commands/maestro-ralph-execute.md +51 -10
- package/.claude/commands/maestro-ralph.md +46 -17
- package/.claude/commands/quality-test.md +27 -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/.codex/skills/maestro/SKILL.md +17 -2
- package/.codex/skills/maestro-analyze/SKILL.md +20 -3
- package/.codex/skills/maestro-brainstorm/SKILL.md +30 -4
- package/.codex/skills/maestro-execute/SKILL.md +25 -3
- package/.codex/skills/maestro-grill/SKILL.md +9 -0
- package/.codex/skills/maestro-plan/SKILL.md +26 -3
- package/.codex/skills/maestro-ralph/SKILL.md +6 -0
- package/.codex/skills/maestro-ralph-execute/SKILL.md +51 -10
- package/.codex/skills/maestro-roadmap/SKILL.md +30 -1
- package/.codex/skills/quality-review/SKILL.md +9 -0
- package/README.md +28 -5
- package/README.zh-CN.md +28 -5
- 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 +46 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +413 -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/wiki-indexer.d.ts +13 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +102 -7
- 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/src/commands/hooks.d.ts +3 -0
- package/dashboard/dist-server/src/commands/hooks.js +11 -8
- 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/orchestrator.js +2 -6
- package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js.map +1 -1
- package/dist/src/cli.js +1 -0
- package/dist/src/cli.js.map +1 -1
- 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 +11 -8
- 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 +5 -0
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.js +81 -11
- 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/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/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/ralph/cmd-next.d.ts.map +1 -1
- package/dist/src/ralph/cmd-next.js +2 -3
- package/dist/src/ralph/cmd-next.js.map +1 -1
- package/package.json +4 -2
- package/workflows/claude-instructions.md +17 -2
- package/workflows/codex-instructions.md +85 -14
- package/workflows/command-authoring.md +1 -1
- package/workflows/plan.md +2 -1
- 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
|
@@ -119,6 +119,7 @@ You are a collaborative planner that works within a pre-allocated task ID range.
|
|
|
119
119
|
- Task files must use `convergence.criteria` (array of testable strings), not `done_when`
|
|
120
120
|
- files must use `[{path, action, target, change}]` format, not `["path"]`
|
|
121
121
|
- Each task must have convergence.criteria with min 2 testable conditions
|
|
122
|
+
- Vertical slice for UI features: deliver backend + frontend + integration as one end-to-end capability per wave (no backend-only/frontend-only split); each UI delivery wave needs ≥1 task with a `[UI-observable]` convergence criterion (verifiable user-facing flow)
|
|
122
123
|
- Each task must have `read_first[]` — files the executor MUST read before implementation
|
|
123
124
|
- `action` must contain concrete values (function signatures, config keys, import paths), not just a verb
|
|
124
125
|
- Task definitions follow the same schema as workflow-planner output
|
|
@@ -162,11 +162,13 @@ These rules prevent over-splitting that wastes tokens on unnecessary agent spawn
|
|
|
162
162
|
- **Low** (single file, single concern, zero cross-module): **1 task**
|
|
163
163
|
- **Medium** (multiple files OR integration point): **1-4 tasks**
|
|
164
164
|
- **High** (cross-module, architectural, new subsystem): **4-10 tasks**
|
|
165
|
+
8. **Vertical slice for UI features (MANDATORY)** — 含用户界面的功能必须作为端到端纵向切片交付一个用户可观测能力(后端 endpoint + 前端 wiring + 集成同属一个交付波次),**禁止**拆成 backend-only / frontend-only 任务或按层切波。每个交付波次须闭合一个可用能力,而非一层。
|
|
165
166
|
|
|
166
167
|
## Constraints
|
|
167
168
|
- Each task must be substantial (15-60 min of work); group related changes, avoid file-per-task
|
|
168
169
|
- Each task must have convergence.criteria (min 2 testable conditions)
|
|
169
170
|
- convergence.criteria must be specific and testable (not "works correctly")
|
|
171
|
+
- For UI features, each delivery wave MUST have ≥1 task with a `[UI-observable]` convergence criterion — a verifiable user-facing flow (e.g. `[UI-observable] User can create a Note in the UI and see it in the list`). Backend-only criteria do NOT satisfy this; the runtime check is enforced by ralph's frontend-verify gate.
|
|
170
172
|
- Each task must have `read_first[]` — files the executor MUST read before implementation (the file being modified + source-of-truth files)
|
|
171
173
|
- `action` must contain concrete values (function signatures, config keys, import paths), not just a verb like "Implement"
|
|
172
174
|
- files must use array format `[{path, action, target, change}]`
|
|
@@ -68,7 +68,6 @@
|
|
|
68
68
|
|
|
69
69
|
{"name": "maestro-ralph", "command": "/maestro-ralph", "category": "ralph", "description": "Ralph 引擎 — 自适应生命周期决策节点管理", "source": "../../commands/maestro-ralph.md"},
|
|
70
70
|
{"name": "maestro-ralph-execute", "command": "/maestro-ralph-execute", "category": "ralph", "description": "Ralph 执行 — 运行自适应决策链", "source": "../../commands/maestro-ralph-execute.md"},
|
|
71
|
-
{"name": "maestro-ralph-beta", "command": "/maestro-ralph-beta", "category": "ralph", "description": "Ralph Beta — 自运行循环控制器,单 skill 完成 build/tick/decide", "source": "../../commands/maestro-ralph-beta.md"},
|
|
72
71
|
|
|
73
72
|
{"name": "maestro-impeccable", "command": "/maestro-impeccable", "category": "ui", "description": "UI 生产 — 设计系统生成 + impeccable 链式编排 + 质量门控", "source": "../../commands/maestro-impeccable.md"},
|
|
74
73
|
{"name": "maestro-ui-codify", "command": "/maestro-ui-codify", "category": "ui", "description": "UI 固化 — 将设计产出转化为知识资产", "source": "../../commands/maestro-ui-codify.md"},
|
|
@@ -61,7 +61,7 @@ const knownCommands = [
|
|
|
61
61
|
"maestro", "analyze", "plan", "execute", "init", "roadmap",
|
|
62
62
|
"brainstorm", "blueprint", "quick", "overlay", "amend", "fork", "merge", "collab",
|
|
63
63
|
"milestone-audit", "milestone-complete", "milestone-release",
|
|
64
|
-
"composer", "guard", "player", "ralph", "ralph-execute",
|
|
64
|
+
"composer", "guard", "player", "ralph", "ralph-execute",
|
|
65
65
|
"grill", "next", "swarm-workflow", "universal-workflow", "companion",
|
|
66
66
|
"impeccable", "ui-codify", "update",
|
|
67
67
|
"tools-register", "tools-execute",
|
|
@@ -90,7 +90,8 @@ Follow '~/.maestro/workflows/plan.md' completely.
|
|
|
90
90
|
- REQUIRED: Plan-checker passed (or minor issues acknowledged).
|
|
91
91
|
- REQUIRED: Confidence scored with 5-dimension factor model.
|
|
92
92
|
- REQUIRED: Pressure pass completed on highest-complexity task.
|
|
93
|
-
-
|
|
93
|
+
- 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).
|
|
94
|
+
- BLOCKED if: plan-checker found critical issues, OR UI plan missing `[UI-observable]` coverage — fix plan before presenting to user.
|
|
94
95
|
|
|
95
96
|
**GATE P5 → Completion: User Confirmation → Done**
|
|
96
97
|
- REQUIRED: User confirmation captured (execute/modify/cancel).
|
|
@@ -215,6 +216,7 @@ Status verdicts:
|
|
|
215
216
|
- [ ] .task/TASK-*.json files created for each task
|
|
216
217
|
- [ ] Every task has `read_first[]` with at least the file being modified + source of truth files
|
|
217
218
|
- [ ] Every task has `convergence.criteria[]` with grep-verifiable conditions (no subjective language)
|
|
219
|
+
- [ ] UI plans: each delivery wave has ≥1 `[UI-observable]` convergence criterion (vertical slice; verified at runtime by ralph frontend-verify gate)
|
|
218
220
|
- [ ] Every task `action` and `implementation` contain concrete values (no "align X with Y")
|
|
219
221
|
- [ ] Plan confidence scored in P4 with 5-dimension factor model
|
|
220
222
|
- [ ] Plan readiness gate checked before P4.5 collision detection
|
|
@@ -25,6 +25,7 @@ $ARGUMENTS — intent text, flags, or keywords.
|
|
|
25
25
|
**Parse:**
|
|
26
26
|
```
|
|
27
27
|
-y flag → auto_confirm = true
|
|
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
|
```
|
|
@@ -58,7 +59,7 @@ S_PARSE_ROUTE — 解析参数、路由入口 PERSIST: —
|
|
|
58
59
|
S_STATUS — 显示 session 进度 PERSIST: —
|
|
59
60
|
S_CONTINUE — 恢复执行 PERSIST: —
|
|
60
61
|
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
|
|
62
|
+
S_INFER — 基于已解析 phase 推断 lifecycle_position PERSIST: session.lifecycle_position, session.wants_roadmap
|
|
62
63
|
S_RESOLVE_SCOPE — 读 macro analyze conclusions.scope_verdict PERSIST: session.scope_verdict, session.analyze_macro_id
|
|
63
64
|
S_QUALITY_MODE — 决定质量管线模式 PERSIST: session.quality_mode
|
|
64
65
|
S_PLANNING_MODE — 决定统一/独立规划模式 PERSIST: session.planning_mode
|
|
@@ -130,7 +131,7 @@ S_DISPATCH:
|
|
|
130
131
|
→ END DO: invoke_skill({ skill: "maestro-ralph-execute" })
|
|
131
132
|
|
|
132
133
|
S_DECISION_EVAL: (decision 节点 == `step.decision` 非空,下述 gate 名取自该字段)
|
|
133
|
-
→ S_APPLY_VERDICT WHEN: quality-gate (post-execute, post-business-test, post-review, post-test)
|
|
134
|
+
→ S_APPLY_VERDICT WHEN: quality-gate (post-execute, post-business-test, post-review, post-test, post-frontend-verify)
|
|
134
135
|
DO: A_DELEGATE_EVALUATE
|
|
135
136
|
→ S_APPLY_VERDICT WHEN: goal-gate (post-goal-audit)
|
|
136
137
|
DO: A_GOAL_AUDIT_EVALUATE
|
|
@@ -217,6 +218,14 @@ resolve_milestone(phase_number):
|
|
|
217
218
|
| blueprint / 规格 / 正式文档 / spec-generate / 7-phase | `blueprint` |
|
|
218
219
|
| broad/medium intent 无数字 phase (重构/全面/重写/迁移/新功能 X) | `analyze-macro` |
|
|
219
220
|
|
|
221
|
+
**Roadmap opt-in detection** (设 `session.wants_roadmap`,缺省 `false`):
|
|
222
|
+
```
|
|
223
|
+
wants_roadmap = (--roadmap flag)
|
|
224
|
+
OR (intent 含多发布信号: 多发布|多版本|分阶段交付|按里程碑发布|v1.*v2|multi-release|roadmap)
|
|
225
|
+
OR (.workflow/roadmap.md 已存在) ← 向后兼容:既有 roadmap 项目行为不变
|
|
226
|
+
```
|
|
227
|
+
默认 `false` → large 项目走单一多波次 `plan --from analyze`,不引入 roadmap 横切层;roadmap 仅多发布场景 opt-in。
|
|
228
|
+
|
|
220
229
|
**Bootstrap detection:**
|
|
221
230
|
|
|
222
231
|
| Condition | Position |
|
|
@@ -231,7 +240,7 @@ resolve_milestone(phase_number):
|
|
|
231
240
|
| Condition | Position |
|
|
232
241
|
|-----------|----------|
|
|
233
242
|
| `phase_is_new == true` (新 phase) | `analyze` |
|
|
234
|
-
| no milestones AND no roadmap.md AND has analyze macro artifact | `roadmap` |
|
|
243
|
+
| no milestones AND no roadmap.md AND has analyze macro artifact | `roadmap` if `wants_roadmap` else `plan` (--from analyze) |
|
|
235
244
|
| no milestones AND no roadmap.md AND no analyze artifact | `analyze-macro` |
|
|
236
245
|
| `phase == null` (grill/brainstorm/blueprint/init/roadmap/analyze-macro override 已定) | n/a |
|
|
237
246
|
| phase 已存在 + 无任何 artifact | `analyze` |
|
|
@@ -252,9 +261,9 @@ resolve_milestone(phase_number):
|
|
|
252
261
|
|
|
253
262
|
| scope_verdict | 链路 |
|
|
254
263
|
|---------------|------|
|
|
255
|
-
| `large` | analyze-macro → roadmap → analyze → plan → execute →
|
|
256
|
-
| `medium` / `small` | analyze-macro → plan --from analyze:{ANL_ID} → execute → ...(跳过 roadmap + analyze-phase
|
|
257
|
-
| `unknown` | 默认走
|
|
264
|
+
| `large` + `wants_roadmap` | analyze-macro → roadmap → analyze → plan → execute → ...(多发布 opt-in) |
|
|
265
|
+
| `large`(默认)/ `medium` / `small` | analyze-macro → plan --from analyze:{ANL_ID} → execute → ...(跳过 roadmap + analyze-phase;单一多波次计划) |
|
|
266
|
+
| `unknown` | 默认走 standalone(plan --from analyze)路径,post-analyze-scope 决策节点再纠正 |
|
|
258
267
|
|
|
259
268
|
**Refine from post-execute results:**
|
|
260
269
|
|
|
@@ -337,10 +346,10 @@ narrow → derive defaults from intent + codebase, skip questions.
|
|
|
337
346
|
```json
|
|
338
347
|
{ "id": "G1", "goal": "<deliverable>", "boundary": "<in/out note>",
|
|
339
348
|
"done_when": "<objectively checkable condition>",
|
|
340
|
-
"evidence": "verification.json|review.json|uat.md|<test path>",
|
|
349
|
+
"evidence": "verification.json|review.json|uat.md|e2e-results.json|<test path>",
|
|
341
350
|
"lifecycle": ["analyze","execute"], "status": "pending" }
|
|
342
351
|
```
|
|
343
|
-
`done_when` 必须客观可验证,且引用 ralph 已产出的 artifact;`lifecycle` 字段映射到产出 evidence 的生命周期 stage
|
|
352
|
+
`done_when` 必须客观可验证,且引用 ralph 已产出的 artifact;`lifecycle` 字段映射到产出 evidence 的生命周期 stage。涉及前端可用性的子目标,`done_when` 应引用 `e2e-results.json`(frontend-verify 门产出),不得仅以后端 API/build 证据判定可用。
|
|
344
353
|
|
|
345
354
|
**5. Persist** (additive): `boundary_contract`, `execution_criteria`, `task_decomposition`。每个 sub-goal 含 `status: "pending"` + `completion_confirmed: false`。
|
|
346
355
|
|
|
@@ -366,6 +375,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
366
375
|
| review | `quality-review {phase}` | `quality-review` | `post-review` | all (quick: append `--tier quick`) |
|
|
367
376
|
| test-gen | `quality-auto-test {phase}` | `quality-auto-test` | — | full / standard if coverage<80% |
|
|
368
377
|
| test | `quality-test {phase}` | `quality-test` | `post-test` | full, standard |
|
|
378
|
+
| 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
379
|
| milestone-audit | `maestro-milestone-audit` | *(same)* | — | all |
|
|
370
380
|
| goal-audit | *(decision-only)* | *(same)* | `post-goal-audit` | all (only if decomposed) |
|
|
371
381
|
| milestone-complete | `maestro-milestone-complete` | *(same)* | `post-milestone` | all |
|
|
@@ -380,6 +390,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
380
390
|
2. **跳过已完成**:跳过当前 milestone+phase 下已有 completed artifact 的 stage(按 `session.phase` 过滤);unified 按 milestone 过滤
|
|
381
391
|
3. **quality_mode 过滤**:按 `session.quality_mode` 排除不匹配 stage
|
|
382
392
|
3.5. **grill auto_confirm 跳过**:`auto_confirm == true` 时删除 `grill` stage(grill 为交互式苏格拉底拷问,不支持自动模式);brainstorm args 不含 `--from grill:*`
|
|
393
|
+
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
394
|
4. **决策节点**:每个 Decision after 非空的 stage 之后插入 `{ decision: "<gate>", retry_count: 0, max_retries: 2, command_scope: null, command_path: null }`
|
|
384
395
|
5. **goal-audit 插入**:`task_decomposition` 存在时,在最后一个 evidence-producing stage(execute/review/test)之后、`milestone-complete` 之前插入 `decision:post-goal-audit`
|
|
385
396
|
6. **终点硬约束**:chain 以 `milestone-complete` 结尾
|
|
@@ -394,13 +405,16 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
394
405
|
- **不在 build 阶段读取 .md 内容**;`<required_reading>` / `<deferred_reading>` 解析与加载由 `maestro ralph next` CLI 在执行期完成
|
|
395
406
|
10. **每个 step 初始化** `completion_confirmed: false`, `completion_status: null`, `completion_evidence: null`, `deferred_reads: []`, `load: null`(由 `ralph next` 写入)
|
|
396
407
|
11. **scope_verdict gating**(仅当 chain 起点 = `analyze-macro`):
|
|
397
|
-
- `scope_verdict
|
|
398
|
-
- `
|
|
399
|
-
- `scope_verdict == unknown` → 默认
|
|
408
|
+
- `scope_verdict == large` **且** `wants_roadmap` → 保留 `roadmap` + `analyze`;`plan` 选 phase 列(`{phase}`)
|
|
409
|
+
- 其余(`medium` / `small`,或 `large` 但非 `wants_roadmap`)→ 跳过 `roadmap` + `analyze` 两 stage;`plan` 选 standalone 列(`--from analyze:{analyze_macro_id}`),不带 `{phase}`
|
|
410
|
+
- `scope_verdict == unknown` → 默认 standalone(非 roadmap)路径;由 `post-analyze-scope` 决策节点在 macro analyze 完成后纠正(A_APPLY_SCOPE_VERDICT)
|
|
400
411
|
12. **--from 自动注入**:
|
|
401
412
|
- `analyze_macro_id` 存在且当前 step 是 `roadmap` → args 改为 `--from analyze:{analyze_macro_id}`
|
|
402
|
-
- `analyze_macro_id`
|
|
413
|
+
- `analyze_macro_id` 存在且当前 `plan` step 处于 standalone 列(即非 wants_roadmap 路径:`medium`/`small`,或 `large` 但非 `wants_roadmap`)→ args 改为 `--from analyze:{analyze_macro_id}`
|
|
403
414
|
- `blueprint_id` 存在 → 当前 step 是 `plan` → args 改为 `--from blueprint:{blueprint_id}`(优先级低于 phase 数字参数)
|
|
415
|
+
- **phase-level deferred chaining**(独立模式,step 含 `{phase}` 占位符):build 阶段前序 artifact 尚未产出,由 A_RESOLVE_ARGS(ralph-execute)运行时从 state.json 查找同 phase+milestone 最新 completed artifact 注入:
|
|
416
|
+
- `plan` step → `--from analyze:{phase_analyze_id}`,写 `source_artifact_ref`
|
|
417
|
+
- `execute` step → `--dir {plan_path}`(现有逻辑),写 `source_artifact_ref = "plan:{id}"`
|
|
404
418
|
- 写入 `step.source_artifact_ref` 以便审计
|
|
405
419
|
13. **D-007 Milestone-ref 标注**:每个含 `{phase}` 占位符的 step → `step.milestone_id = session.milestone`(由 A_RESOLVE_PHASE 反查得出),禁止读 `current_milestone`
|
|
406
420
|
14. **动态插入步骤**(A_APPLY_*)同样应用规则 7-13
|
|
@@ -423,6 +437,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
|
|
|
423
437
|
| post-business-test | .tests/auto-test/report.json |
|
|
424
438
|
| post-review | review.json |
|
|
425
439
|
| post-test | uat.md, .tests/test-results.json |
|
|
440
|
+
| post-frontend-verify | e2e-results.json |
|
|
426
441
|
4. Check artifact for confidence section → include as signal
|
|
427
442
|
5. Execute delegate (run_in_background, STOP, wait for callback):
|
|
428
443
|
```
|
|
@@ -524,14 +539,14 @@ Runs only when `task_decomposition` present.
|
|
|
524
539
|
|
|
525
540
|
由 `post-analyze-scope` 触发,依据 `session.scope_verdict` 重塑下游链路。
|
|
526
541
|
|
|
527
|
-
1. 读 `session.scope_verdict`
|
|
528
|
-
2. 路径 A(`large
|
|
529
|
-
3. 路径 B(`medium` / `small`):
|
|
542
|
+
1. 读 `session.scope_verdict` + `session.wants_roadmap`
|
|
543
|
+
2. 路径 A(`large` 且 `wants_roadmap`):保持当前链(roadmap+analyze);为后续 `roadmap` step 注入 `--from analyze:{analyze_macro_id}`;为后续 `plan` step 选 phase 列;继续推进
|
|
544
|
+
3. 路径 B(`medium` / `small`,或 `large` 但非 `wants_roadmap`):
|
|
530
545
|
- 删除 `goal-audit` 之前所有未完成的 `roadmap` + `analyze` (phase) step
|
|
531
546
|
- 把下一个未完成的 `plan` step 改为 `maestro-plan --from analyze:{analyze_macro_id}`,去掉 `{phase}`,`source_artifact_ref = analyze:{analyze_macro_id}`
|
|
532
547
|
- 后续 `execute` 等沿用同一 standalone scope(不带 `{phase}`,由 plan 写出的 task 列表驱动)
|
|
533
548
|
4. 路径 C(`unknown`):
|
|
534
|
-
- 非 auto_confirm → ask_user 二选一(
|
|
549
|
+
- 非 auto_confirm → ask_user 二选一(roadmap 多发布 / 单一计划);auto_confirm → 默认路径 B(单一计划,不引入 roadmap)
|
|
535
550
|
5. Reindex steps,标 decision completed,write status.json
|
|
536
551
|
6. Display: ◆ Scope verdict: {verdict} → {kept|collapsed to standalone via analyze:{ANL_ID}}
|
|
537
552
|
|
|
@@ -581,6 +596,7 @@ Runs only when `task_decomposition` present.
|
|
|
581
596
|
"quality_mode": "standard", // "full" | "standard" | "quick"
|
|
582
597
|
"planning_mode": "independent", // "unified" | "independent"
|
|
583
598
|
"scope_verdict": null, // "large" | "medium" | "small" | "unknown" | null
|
|
599
|
+
"wants_roadmap": false, // roadmap opt-in:--roadmap | 多发布 intent | roadmap.md 已存在
|
|
584
600
|
"analyze_macro_id": null, // "ANL-xxx" 来自最新 macro analyze
|
|
585
601
|
"blueprint_id": null, // "BLP-xxx" 若存在
|
|
586
602
|
"cli_tool": "claude", "passed_gates": [],
|
|
@@ -672,6 +688,15 @@ quality-test {phase}
|
|
|
672
688
|
decision:post-test {retry+1}
|
|
673
689
|
```
|
|
674
690
|
|
|
691
|
+
**post-frontend-verify:** (UI 写端点未接线/不可用时)
|
|
692
|
+
```
|
|
693
|
+
quality-debug --from-frontend-verify "{gap_summary}"
|
|
694
|
+
maestro-plan --gaps {phase}
|
|
695
|
+
maestro-execute {phase}
|
|
696
|
+
quality-test {phase} --frontend-verify
|
|
697
|
+
decision:post-frontend-verify {retry+1}
|
|
698
|
+
```
|
|
699
|
+
|
|
675
700
|
**post-goal-audit:** (per unmet sub-goal group)
|
|
676
701
|
```
|
|
677
702
|
# for each unmet sub-goal G{n}, scoped to target_phase:
|
|
@@ -720,12 +745,13 @@ decision:post-goal-audit {retry+1}
|
|
|
720
745
|
- [ ] Intent overrides 识别 grill / brainstorm / blueprint / analyze-macro
|
|
721
746
|
- [ ] auto_confirm=true 时 grill stage 跳过(交互式拷问不支持自动模式)
|
|
722
747
|
- [ ] A_RESOLVE_SCOPE_VERDICT 读 macro analyze conclusions.scope_verdict,写入 session.scope_verdict + analyze_macro_id
|
|
723
|
-
- [ ] 链路起点 = analyze-macro 时:large→roadmap+analyze+plan(phase)
|
|
748
|
+
- [ ] 链路起点 = analyze-macro 时:large+wants_roadmap→roadmap+analyze+plan(phase);其余(含 large 默认/medium/small)→直跳 plan --from analyze:{ANL_ID}(跳过 roadmap+analyze)
|
|
724
749
|
- [ ] post-analyze-scope decision 节点在 macro analyze 之后插入;A_SCOPE_EVALUATE/A_APPLY_SCOPE_VERDICT 重塑链路
|
|
725
750
|
- [ ] plan step args 支持三路径:`{phase}` / `--from analyze:{ANL_ID}` / `--from blueprint:{BLP_ID}`,写入 step.source_artifact_ref
|
|
726
751
|
- [ ] roadmap step args 自动注入 `--from analyze:{analyze_macro_id}`(若存在)
|
|
727
752
|
- [ ] artifact 过滤按 session.phase;unified 按 milestone
|
|
728
753
|
- [ ] quality_mode 由 A_DETERMINE_QUALITY_MODE 决定,过滤 build steps
|
|
754
|
+
- [ ] frontend-verify stage 仅在 phase 交付 UI 时插入(test 后、milestone-audit 前);post-frontend-verify 走 quality-gate 评估,evidence=e2e-results.json
|
|
729
755
|
- [ ] Decomposition: broad intent ≤3 question clarify;narrow auto-derive
|
|
730
756
|
- [ ] status.json 唯一真源:boundary_contract + execution_criteria + task_decomposition;无外部清单
|
|
731
757
|
- [ ] 执行 step 含 `command_scope` + `command_path`(通过 `maestro ralph skills --platform agent --json --quiet` 预校验,project 覆盖 global);decision step 通过 `step.decision` 字段标识
|
|
@@ -739,5 +765,8 @@ decision:post-goal-audit {retry+1}
|
|
|
739
765
|
- [ ] Chain 必须以 `milestone-complete` 结尾
|
|
740
766
|
- [ ] Decision nodes 由 maestro delegate --role analyze 评估
|
|
741
767
|
- [ ] Ralph 不执行 step,只 evaluate;invoke_skill("maestro-ralph-execute") handoff
|
|
768
|
+
- [ ] Phase-level deferred chaining:plan/execute step 的 `--from`/`--dir` 注入由 A_RESOLVE_ARGS(ralph-execute)运行时完成;build 阶段标记意图,不预知 artifact ID
|
|
769
|
+
- [ ] Phase-level plan step 运行时获得 `--from analyze:{phase_analyze_id}`(由 ralph-execute 从 state.json 查找注入)
|
|
770
|
+
- [ ] Phase-level execute step 运行时获得 `source_artifact_ref = "plan:{id}"`
|
|
742
771
|
|
|
743
772
|
</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>
|
|
@@ -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,31 @@ 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
|
+
补 ralph 链路缺失的运行时可用性门:确定性验证每个用户可观测能力真正经 UI 可触发,避免"后端绿灯=完成"。
|
|
37
|
+
|
|
38
|
+
1. **Resolve targets**: 读 phase 的 `plan.json` / `.task/TASK-*.json`,提取所有 `[UI-observable]` convergence.criteria(plan 阶段产出);缺失则枚举后端写端点(POST/PUT/PATCH/DELETE)作为待验证清单。
|
|
39
|
+
2. **Start app**: `next start`(或从 dashboard/package.json 解析的既有启动脚本);启动失败 → E003。
|
|
40
|
+
3. **Drive browser**: 用 chrome-devtools MCP(`mcp__claude_dms3-chrome-devtools__*`:navigate / click / fill / take_snapshot / list_network_requests)逐条执行每个 `[UI-observable]` 流程,断言:UI 入口存在且可触发 → 对应写请求返回 2xx → DOM 出现预期结果。
|
|
41
|
+
4. **Write evidence**: 产出 `e2e-results.json`(结构见下),逐条记 pass/fail + 证据(网络状态码、快照引用)。**确定性断言,禁止"无人应答=全过"**。
|
|
42
|
+
5. **Verdict**: 任一 `[UI-observable]` fail 或写端点无 UI 入口 → STATUS=NEEDS_RETRY(ralph 经 post-frontend-verify 触发 Fix-Loop);全过 → DONE。
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
// e2e-results.json
|
|
46
|
+
{ "phase": "{phase}", "app_url": "http://localhost:3000",
|
|
47
|
+
"checks": [ { "criterion": "[UI-observable] ...", "ui_entry": "<selector/route>",
|
|
48
|
+
"request": "POST /api/notes", "status": 201, "dom_assert": "list shows new item",
|
|
49
|
+
"passed": true } ],
|
|
50
|
+
"summary": { "total": 0, "passed": 0, "failed": 0 }, "verdict": "pass|fail" }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Ralph-invoked 完成:`maestro ralph complete <idx> --status {STATUS} --evidence e2e-results.json`。
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
32
57
|
Follow '~/.maestro/workflows/test.md' completely.
|
|
33
58
|
|
|
34
59
|
### Phase Gates (MANDATORY, BLOCKING)
|
|
@@ -146,4 +171,5 @@ maestro ralph complete <idx> --status {STATUS} [--evidence {path}]
|
|
|
146
171
|
- [ ] Gaps updated with root_cause, fix_direction, affected_files
|
|
147
172
|
- [ ] Gap-fix loop triggered if --auto-fix (max 2 iterations)
|
|
148
173
|
- [ ] Next step routed (phase-transition if pass, verify if auto-fix success, debug --from-uat if issues, test-gen if low coverage)
|
|
174
|
+
- [ ] `--frontend-verify`: 每条 [UI-observable] criterion 经真实浏览器断言,产出 e2e-results.json;任一 fail → NEEDS_RETRY(不放行)
|
|
149
175
|
</success_criteria>
|
|
@@ -116,6 +116,7 @@ You are a collaborative planner that works within a pre-allocated task ID range.
|
|
|
116
116
|
- Task files must use `convergence.criteria` (array of testable strings), not `done_when`
|
|
117
117
|
- files must use `[{path, action, target, change}]` format, not `["path"]`
|
|
118
118
|
- Each task must have convergence.criteria with min 2 testable conditions
|
|
119
|
+
- Vertical slice for UI features: deliver backend + frontend + integration as one end-to-end capability per wave (no backend-only/frontend-only split); each UI delivery wave needs ≥1 task with a `[UI-observable]` convergence criterion (verifiable user-facing flow)
|
|
119
120
|
- Each task must have `read_first[]` — files the executor MUST read before implementation
|
|
120
121
|
- `action` must contain concrete values (function signatures, config keys, import paths), not just a verb
|
|
121
122
|
- Task definitions follow the same schema as workflow-planner output
|
|
@@ -159,11 +159,13 @@ These rules prevent over-splitting that wastes tokens on unnecessary agent spawn
|
|
|
159
159
|
- **Low** (single file, single concern, zero cross-module): **1 task**
|
|
160
160
|
- **Medium** (multiple files OR integration point): **1-4 tasks**
|
|
161
161
|
- **High** (cross-module, architectural, new subsystem): **4-10 tasks**
|
|
162
|
+
8. **Vertical slice for UI features (MANDATORY)** — 含用户界面的功能必须作为端到端纵向切片交付一个用户可观测能力(后端 endpoint + 前端 wiring + 集成同属一个交付波次),**禁止**拆成 backend-only / frontend-only 任务或按层切波。每个交付波次须闭合一个可用能力,而非一层。
|
|
162
163
|
|
|
163
164
|
## Constraints
|
|
164
165
|
- Each task must be substantial (15-60 min of work); group related changes, avoid file-per-task
|
|
165
166
|
- Each task must have convergence.criteria (min 2 testable conditions)
|
|
166
167
|
- convergence.criteria must be specific and testable (not "works correctly")
|
|
168
|
+
- For UI features, each delivery wave MUST have ≥1 task with a `[UI-observable]` convergence criterion — a verifiable user-facing flow (e.g. `[UI-observable] User can create a Note in the UI and see it in the list`). Backend-only criteria do NOT satisfy this; the runtime check is enforced by ralph's frontend-verify gate.
|
|
167
169
|
- Each task must have `read_first[]` — files the executor MUST read before implementation (the file being modified + source-of-truth files)
|
|
168
170
|
- `action` must contain concrete values (function signatures, config keys, import paths), not just a verb like "Implement"
|
|
169
171
|
- files must use array format `[{path, action, target, change}]`
|
|
@@ -68,7 +68,6 @@
|
|
|
68
68
|
|
|
69
69
|
{"name": "maestro-ralph", "command": "/maestro-ralph", "category": "ralph", "description": "Ralph 引擎 — 自适应生命周期决策节点管理", "source": "../../commands/maestro-ralph.md"},
|
|
70
70
|
{"name": "maestro-ralph-execute", "command": "/maestro-ralph-execute", "category": "ralph", "description": "Ralph 执行 — 运行自适应决策链", "source": "../../commands/maestro-ralph-execute.md"},
|
|
71
|
-
{"name": "maestro-ralph-beta", "command": "/maestro-ralph-beta", "category": "ralph", "description": "Ralph Beta — 自运行循环控制器,单 skill 完成 build/tick/decide", "source": "../../commands/maestro-ralph-beta.md"},
|
|
72
71
|
|
|
73
72
|
{"name": "maestro-impeccable", "command": "/maestro-impeccable", "category": "ui", "description": "UI 生产 — 设计系统生成 + impeccable 链式编排 + 质量门控", "source": "../../commands/maestro-impeccable.md"},
|
|
74
73
|
{"name": "maestro-ui-codify", "command": "/maestro-ui-codify", "category": "ui", "description": "UI 固化 — 将设计产出转化为知识资产", "source": "../../commands/maestro-ui-codify.md"},
|
|
@@ -61,7 +61,7 @@ const knownCommands = [
|
|
|
61
61
|
"maestro", "analyze", "plan", "execute", "init", "roadmap",
|
|
62
62
|
"brainstorm", "blueprint", "quick", "overlay", "amend", "fork", "merge", "collab",
|
|
63
63
|
"milestone-audit", "milestone-complete", "milestone-release",
|
|
64
|
-
"composer", "guard", "player", "ralph", "ralph-execute",
|
|
64
|
+
"composer", "guard", "player", "ralph", "ralph-execute",
|
|
65
65
|
"grill", "next", "swarm-workflow", "universal-workflow", "companion",
|
|
66
66
|
"impeccable", "ui-codify", "update",
|
|
67
67
|
"tools-register", "tools-execute",
|
|
@@ -90,7 +90,8 @@ Follow '~/.maestro/workflows/plan.md' completely.
|
|
|
90
90
|
- REQUIRED: Plan-checker passed (or minor issues acknowledged).
|
|
91
91
|
- REQUIRED: Confidence scored with 5-dimension factor model.
|
|
92
92
|
- REQUIRED: Pressure pass completed on highest-complexity task.
|
|
93
|
-
-
|
|
93
|
+
- 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).
|
|
94
|
+
- BLOCKED if: plan-checker found critical issues, OR UI plan missing `[UI-observable]` coverage — fix plan before presenting to user.
|
|
94
95
|
|
|
95
96
|
**GATE P5 → Completion: User Confirmation → Done**
|
|
96
97
|
- REQUIRED: User confirmation captured (execute/modify/cancel).
|
|
@@ -215,6 +216,7 @@ Status verdicts:
|
|
|
215
216
|
- [ ] .task/TASK-*.json files created for each task
|
|
216
217
|
- [ ] Every task has `read_first[]` with at least the file being modified + source of truth files
|
|
217
218
|
- [ ] Every task has `convergence.criteria[]` with grep-verifiable conditions (no subjective language)
|
|
219
|
+
- [ ] UI plans: each delivery wave has ≥1 `[UI-observable]` convergence criterion (vertical slice; verified at runtime by ralph frontend-verify gate)
|
|
218
220
|
- [ ] Every task `action` and `implementation` contain concrete values (no "align X with Y")
|
|
219
221
|
- [ ] Plan confidence scored in P4 with 5-dimension factor model
|
|
220
222
|
- [ ] Plan readiness gate checked before P4.5 collision detection
|