maestro-flow 0.5.43 → 0.5.44

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.
Files changed (100) hide show
  1. package/.agents/skills/maestro-ralph-agent/SKILL.md +697 -0
  2. package/.agents/skills/maestro-ralph-agent-execute/SKILL.md +461 -0
  3. package/.agy/skills/maestro-ralph-agent/SKILL.md +696 -0
  4. package/.agy/skills/maestro-ralph-agent-execute/SKILL.md +457 -0
  5. package/.claude/commands/maestro-ralph-agent-execute.md +459 -0
  6. package/.claude/commands/maestro-ralph-agent.md +695 -0
  7. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +7 -7
  8. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  9. package/dashboard/dist-server/src/graph/kg/credibility.d.ts +2 -2
  10. package/dashboard/dist-server/src/graph/kg/credibility.js +10 -5
  11. package/dashboard/dist-server/src/graph/kg/credibility.js.map +1 -1
  12. package/dashboard/dist-server/src/graph/kg/db/connection.d.ts +3 -2
  13. package/dashboard/dist-server/src/graph/kg/db/connection.js +28 -16
  14. package/dashboard/dist-server/src/graph/kg/db/connection.js.map +1 -1
  15. package/dashboard/dist-server/src/graph/kg/db/queries.js +4 -4
  16. package/dashboard/dist-server/src/graph/kg/db/queries.js.map +1 -1
  17. package/dashboard/dist-server/src/graph/kg/engine.d.ts +1 -1
  18. package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.d.ts +1 -1
  19. package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.js +8 -4
  20. package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -1
  21. package/dashboard/dist-server/src/graph/kg/resolution/knowledge-resolver.d.ts +3 -3
  22. package/dashboard/dist-server/src/graph/kg/resolution/knowledge-resolver.js +3 -2
  23. package/dashboard/dist-server/src/graph/kg/resolution/knowledge-resolver.js.map +1 -1
  24. package/dashboard/dist-server/src/graph/kg/surface/hook-injector.js +2 -4
  25. package/dashboard/dist-server/src/graph/kg/surface/hook-injector.js.map +1 -1
  26. package/dashboard/dist-server/src/search/daemon-client.d.ts +3 -25
  27. package/dashboard/dist-server/src/search/daemon-client.js +3 -25
  28. package/dashboard/dist-server/src/search/daemon-client.js.map +1 -1
  29. package/dashboard/dist-server/src/search/daemon-types.d.ts +29 -0
  30. package/dashboard/dist-server/src/search/daemon-types.js +31 -0
  31. package/dashboard/dist-server/src/search/daemon-types.js.map +1 -0
  32. package/dist/src/agents/api-explore/agent-loop.d.ts +1 -1
  33. package/dist/src/agents/api-explore/agent-loop.d.ts.map +1 -1
  34. package/dist/src/agents/api-explore/agent-loop.js +32 -17
  35. package/dist/src/agents/api-explore/agent-loop.js.map +1 -1
  36. package/dist/src/agents/api-explore/prompt-parser.js +5 -5
  37. package/dist/src/agents/api-explore/prompt-parser.js.map +1 -1
  38. package/dist/src/agents/api-explore/runner.d.ts.map +1 -1
  39. package/dist/src/agents/api-explore/runner.js +0 -2
  40. package/dist/src/agents/api-explore/runner.js.map +1 -1
  41. package/dist/src/agents/api-explore/system-prompt.d.ts.map +1 -1
  42. package/dist/src/agents/api-explore/system-prompt.js +30 -22
  43. package/dist/src/agents/api-explore/system-prompt.js.map +1 -1
  44. package/dist/src/agents/api-explore/tools.d.ts +1 -0
  45. package/dist/src/agents/api-explore/tools.d.ts.map +1 -1
  46. package/dist/src/agents/api-explore/tools.js +219 -50
  47. package/dist/src/agents/api-explore/tools.js.map +1 -1
  48. package/dist/src/commands/search.d.ts.map +1 -1
  49. package/dist/src/commands/search.js +10 -4
  50. package/dist/src/commands/search.js.map +1 -1
  51. package/dist/src/commands/update.d.ts.map +1 -1
  52. package/dist/src/commands/update.js +89 -21
  53. package/dist/src/commands/update.js.map +1 -1
  54. package/dist/src/graph/db/connection.d.ts +3 -2
  55. package/dist/src/graph/db/connection.d.ts.map +1 -1
  56. package/dist/src/graph/db/connection.js +28 -16
  57. package/dist/src/graph/db/connection.js.map +1 -1
  58. package/dist/src/graph/db/queries.d.ts.map +1 -1
  59. package/dist/src/graph/db/queries.js.map +1 -1
  60. package/dist/src/graph/kg/credibility.d.ts +2 -2
  61. package/dist/src/graph/kg/credibility.d.ts.map +1 -1
  62. package/dist/src/graph/kg/credibility.js +10 -5
  63. package/dist/src/graph/kg/credibility.js.map +1 -1
  64. package/dist/src/graph/kg/db/connection.d.ts +3 -2
  65. package/dist/src/graph/kg/db/connection.d.ts.map +1 -1
  66. package/dist/src/graph/kg/db/connection.js +28 -16
  67. package/dist/src/graph/kg/db/connection.js.map +1 -1
  68. package/dist/src/graph/kg/db/queries.js +4 -4
  69. package/dist/src/graph/kg/db/queries.js.map +1 -1
  70. package/dist/src/graph/kg/engine.d.ts +1 -1
  71. package/dist/src/graph/kg/engine.d.ts.map +1 -1
  72. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts +1 -1
  73. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts.map +1 -1
  74. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js +8 -4
  75. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -1
  76. package/dist/src/graph/kg/resolution/knowledge-resolver.d.ts +3 -3
  77. package/dist/src/graph/kg/resolution/knowledge-resolver.d.ts.map +1 -1
  78. package/dist/src/graph/kg/resolution/knowledge-resolver.js +3 -2
  79. package/dist/src/graph/kg/resolution/knowledge-resolver.js.map +1 -1
  80. package/dist/src/graph/kg/surface/hook-injector.d.ts.map +1 -1
  81. package/dist/src/graph/kg/surface/hook-injector.js +2 -4
  82. package/dist/src/graph/kg/surface/hook-injector.js.map +1 -1
  83. package/dist/src/search/daemon-client.d.ts +3 -25
  84. package/dist/src/search/daemon-client.d.ts.map +1 -1
  85. package/dist/src/search/daemon-client.js +3 -25
  86. package/dist/src/search/daemon-client.js.map +1 -1
  87. package/dist/src/search/daemon-types.d.ts +30 -0
  88. package/dist/src/search/daemon-types.d.ts.map +1 -0
  89. package/dist/src/search/daemon-types.js +31 -0
  90. package/dist/src/search/daemon-types.js.map +1 -0
  91. package/dist/src/search/daemon.d.ts +2 -27
  92. package/dist/src/search/daemon.d.ts.map +1 -1
  93. package/dist/src/search/daemon.js +4 -60
  94. package/dist/src/search/daemon.js.map +1 -1
  95. package/dist/src/tools/wiki-search.d.ts.map +1 -1
  96. package/dist/src/tools/wiki-search.js +8 -2
  97. package/dist/src/tools/wiki-search.js.map +1 -1
  98. package/dist/src/utils/update-notices.js +12 -0
  99. package/dist/src/utils/update-notices.js.map +1 -1
  100. package/package.json +1 -3
@@ -0,0 +1,695 @@
1
+ ---
2
+ name: maestro-ralph-agent
3
+ description: Agent-orchestrated lifecycle — compose, dispatch Agent, evaluate decision, loop
4
+ argument-hint: "<intent> [-y] [--amend [change]] [--roadmap] | status | continue"
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - Bash
10
+ - Glob
11
+ - Grep
12
+ - Skill
13
+ - AskUserQuestion
14
+ - Agent
15
+ ---
16
+ <purpose>
17
+ Agent-orchestrated variant of maestro-ralph. Same chain-building logic — but execution via Claude Agent instead of CLI delegation: compose prompt → dispatch Agent(maestro-ralph-agent-execute) → agent runs step loop → returns on decision/complete/fail → evaluate decision inline via Agent → re-dispatch → loop.
18
+
19
+ Session: `.workflow/.maestro/ralph-agent-{YYYYMMDD-HHmmss}/status.json`
20
+
21
+ Chain building(A_RESOLVE_PHASE → A_INFER_POSITION → A_BUILD_STEPS)、session schema、decomposition(A_DECOMPOSE_TASKS)逻辑同 ralph。
22
+ </purpose>
23
+
24
+ <deferred_reading>
25
+ - [ralph-amend-goal.md](~/.maestro/workflows/ralph-amend-goal.md) — read when `--amend` flag active for goal amendment flow
26
+ </deferred_reading>
27
+
28
+ <context>
29
+ $ARGUMENTS — intent text, flags, or keywords.
30
+
31
+ **Parse:**
32
+ ```
33
+ -y flag → auto_confirm = true
34
+ --roadmap → wants_roadmap = true
35
+ --amend / -a → amend_mode = true
36
+ .md/.txt path → input_doc
37
+ status|continue → route keyword
38
+ Remaining → intent (amend_mode 时为 change_request)
39
+ ```
40
+
41
+ **State files**:
42
+ - `.workflow/state.json` — artifact registry
43
+ - `.workflow/.maestro/ralph-agent-*/status.json` — session state
44
+ </context>
45
+
46
+ <invariants>
47
+ All ralph invariants (1-16) apply, with the following overrides:
48
+
49
+ - **Invariant 1 Agent 语义**: ralph-agent 不直接执行 step 内容;执行由 Agent(maestro-ralph-agent-execute) 完成
50
+ - **Invariant 2 覆盖**: ralph-agent 不调用 `Skill("maestro-ralph-execute")`;invariant 17-24 替代 handoff 机制,ralph-agent 持有完整循环
51
+
52
+ Additionally:
53
+
54
+ 17. **ralph-agent owns the loop** — dispatch Agent → wait → verify → decide → re-dispatch 全部在本命令内完成;execute Agent 是被委派的执行者
55
+ 18. **Dispatch via Agent()** — 使用 `Agent({ name, description, prompt })` 启动执行 Agent,Agent 内部调用 `Skill("maestro-ralph-agent-execute", "--session {session_id}")` 加载执行命令
56
+ 19. **Synchronous dispatch** — Agent() 调用是同步的(等待返回),不需要 STOP/callback 模式
57
+ 20. **Execute Agent 自治执行** — 执行 Agent 自主循环处理所有 pending 执行 step,遇到 decision 节点时停止并返回;执行 Agent 内部调用 `maestro ralph complete` 上报(agent 上报)
58
+ 21. **Decision evaluation inline** — decision 节点不 handoff,通过 `Agent()` 启动分析 Agent 在本循环内评估
59
+ 22. **Agent return 解析** — 从 Agent 返回文本中解析执行结果(`---AGENT-STATUS---` 块),替代 `---RESULT---` 解析
60
+ 23. **No CLI delegation** — 本命令不使用 `maestro delegate`;执行和评估均通过 Agent() 完成
61
+ 24. **No inline skill execution** — 本命令不执行 skill 逻辑;执行由 Agent(maestro-ralph-agent-execute) 完成
62
+ </invariants>
63
+
64
+ <state_machine>
65
+
66
+ Chain-building states + 执行循环 states:
67
+
68
+ <states>
69
+ S_PARSE_ROUTE — 解析参数、路由入口
70
+ S_STATUS — 显示 session 进度
71
+ S_CONTINUE — 恢复执行
72
+ S_RESOLVE_PHASE — 解析 phase + phase_is_new + milestone PERSIST: session.phase, session.phase_is_new, session.milestone
73
+ S_INFER — 推断 lifecycle_position PERSIST: session.lifecycle_position, session.wants_roadmap
74
+ S_RESOLVE_SCOPE — 读 macro analyze conclusions.scope_verdict PERSIST: session.scope_verdict, session.analyze_macro_id
75
+ S_QUALITY_MODE — 决定质量管线模式 PERSIST: session.quality_mode
76
+ S_PLANNING_MODE — 决定统一/独立规划模式 PERSIST: session.planning_mode
77
+ S_DECOMPOSE — 边界澄清 + 执行准则 + 子目标清单 PERSIST: session.boundary_contract, .execution_criteria, .task_decomposition
78
+ S_BUILD_CHAIN — 构建步骤链(build rules 0-14) PERSIST: session.steps[]
79
+ S_CREATE_SESSION — 写 status.json PERSIST: session (全量)
80
+ S_CONFIRM — 用户确认
81
+
82
+ S_AGENT_DISPATCH — 启动执行 Agent PERSIST: session.active_agent_name
83
+ S_AGENT_RECEIVE — 接收 Agent 返回、解析状态 PERSIST: —
84
+ S_DECISION_EVAL — 启动分析 Agent 评估质量门 PERSIST: —
85
+ S_APPLY_VERDICT — 应用裁决 PERSIST: session.steps[]
86
+ S_SESSION_DONE — 所有 step 完成 PERSIST: session.status
87
+ S_HANDLE_FAIL — 处理失败 PERSIST: step.status
88
+ S_AMEND_GOAL — 修改 running session 目标 PERSIST: session.task_decomposition, .boundary_contract, .goal_changelog, .steps[]
89
+ S_FALLBACK — 请求用户输入 PERSIST: —
90
+ </states>
91
+
92
+ <transitions>
93
+
94
+ S_PARSE_ROUTE:
95
+ → S_STATUS WHEN: intent == "status"
96
+ → S_CONTINUE WHEN: intent == "continue"
97
+ → S_AMEND_GOAL WHEN: amend_mode == true AND running session exists
98
+ → S_FALLBACK WHEN: amend_mode == true AND no running session
99
+ → S_DECISION_EVAL WHEN: running session with decision step in "running" status
100
+ → S_RESOLVE_PHASE WHEN: intent is non-empty
101
+ → S_FALLBACK WHEN: no intent AND no running session
102
+
103
+ S_STATUS:
104
+ → END DO: A_SHOW_STATUS
105
+
106
+ S_CONTINUE:
107
+ → S_AGENT_DISPATCH WHEN: running session found
108
+ → S_FALLBACK WHEN: no running session
109
+
110
+ S_AMEND_GOAL:
111
+ → S_AGENT_DISPATCH WHEN: change applied + user confirmed DO: A_AMEND_GOAL
112
+ → END WHEN: user cancels
113
+ GUARD: RISK_LEVEL=high → auto_confirm 无效
114
+
115
+ S_CREATE_SESSION:
116
+ → S_CONFIRM WHEN: not auto_confirm
117
+ → S_AGENT_DISPATCH WHEN: auto_confirm
118
+
119
+ S_CONFIRM:
120
+ → S_AGENT_DISPATCH WHEN: user confirms
121
+ → S_BUILD_CHAIN WHEN: user edits
122
+ → END WHEN: user cancels
123
+
124
+ S_AGENT_DISPATCH:
125
+ → S_AGENT_RECEIVE DO: A_DISPATCH_EXECUTE_AGENT
126
+
127
+ S_AGENT_RECEIVE:
128
+ → S_DECISION_EVAL WHEN: Agent returned "decision_pending" DO: A_PARSE_AGENT_RETURN
129
+ → S_SESSION_DONE WHEN: Agent returned "session_complete" DO: A_PARSE_AGENT_RETURN
130
+ → S_HANDLE_FAIL WHEN: Agent returned "step_failed" DO: A_PARSE_AGENT_RETURN
131
+ → S_HANDLE_FAIL WHEN: Agent returned null (agent error) DO: A_PARSE_AGENT_RETURN
132
+
133
+ S_DECISION_EVAL: (decision 节点 == `step.decision` 非空)
134
+ → S_APPLY_VERDICT WHEN: quality-gate (post-execute, post-business-test, post-review, post-test, post-frontend-verify)
135
+ DO: A_AGENT_EVALUATE
136
+ → S_APPLY_VERDICT WHEN: goal-gate (post-goal-audit)
137
+ DO: A_AGENT_GOAL_AUDIT
138
+ → S_APPLY_VERDICT WHEN: scope-gate (post-analyze-scope)
139
+ DO: A_SCOPE_EVALUATE
140
+ → S_APPLY_VERDICT WHEN: reground-gate (post-reground)
141
+ DO: A_AGENT_REGROUND
142
+ → S_APPLY_VERDICT WHEN: structural (post-milestone, post-debug-escalate)
143
+ DO: A_STRUCTURAL_EVALUATE
144
+
145
+ S_APPLY_VERDICT:
146
+ → S_AGENT_DISPATCH WHEN: verdict == "proceed" DO: A_APPLY_PROCEED
147
+ → S_AGENT_DISPATCH WHEN: post-goal-audit + has_unmet DO: A_APPLY_GOAL_FIX
148
+ → S_AGENT_DISPATCH WHEN: post-goal-audit + all_met + INTENT_ALIGNED=true DO: A_APPLY_GOAL_DONE
149
+ → END WHEN: post-goal-audit + all_met + INTENT_ALIGNED=false DO: A_REGROUND_HALT
150
+ → S_AGENT_DISPATCH WHEN: post-analyze-scope DO: A_APPLY_SCOPE_VERDICT
151
+ → S_AGENT_DISPATCH WHEN: verdict == "fix" DO: A_APPLY_FIX
152
+ → S_AGENT_DISPATCH WHEN: verdict == "escalate" DO: A_APPLY_ESCALATE
153
+ → S_AGENT_DISPATCH WHEN: post-milestone + standard + next milestone DO: A_ADVANCE_MILESTONE
154
+ → END WHEN: post-milestone + standard + no next milestone
155
+ → END WHEN: post-milestone + adhoc DO: mark completed (set current_milestone = null)
156
+ → END WHEN: post-debug-escalate DO: A_PAUSE_ESCALATE
157
+ → END WHEN: post-reground + drifted + confidence >= 60 DO: A_REGROUND_HALT
158
+ → S_AGENT_DISPATCH WHEN: post-reground + aligned DO: A_APPLY_PROCEED
159
+ → S_AGENT_DISPATCH WHEN: post-reground + drifted + confidence < 60 DO: A_APPLY_PROCEED (标 LOW CONFIDENCE)
160
+ GUARD: retry_count >= max_retries → force escalate
161
+ GUARD: confidence_score < 60 AND proceed → override to fix
162
+ GUARD: confidence_score > 95 AND fix AND retry > 0 → suggest proceed
163
+ GUARD: auto_confirm → skip user prompt, apply adjusted verdict
164
+ GUARD: not auto_confirm → AskUserQuestion with override options
165
+ GUARD: post-reground + drifted + confidence >= 60 → A_REGROUND_HALT(auto_confirm 不跳过)
166
+
167
+ S_HANDLE_FAIL:
168
+ → S_AGENT_DISPATCH WHEN: auto + not retried DO: A_RETRY
169
+ → END WHEN: auto + retried DO: A_PAUSE_SESSION
170
+ → S_AGENT_DISPATCH WHEN: interactive + retry
171
+ → S_AGENT_DISPATCH WHEN: interactive + skip
172
+ → END WHEN: interactive + abort
173
+
174
+ S_SESSION_DONE:
175
+ → END DO: A_COMPLETE_SESSION
176
+
177
+ </transitions>
178
+
179
+ <actions>
180
+
181
+ ### A_CREATE_SESSION
182
+ 1. `session_id` format: `ralph-agent-{YYYYMMDD-HHmmss}`
183
+ 2. Additional fields: `execution_mode: "agent"`,无 `cli_tool` 字段
184
+ 3. Each step: `agent_exec_name: null`(替代 `delegate_exec_id`)
185
+ 4. Step mode/role/rule assigned per stage (see Stage Mapping table)
186
+
187
+ ### A_DISPATCH_EXECUTE_AGENT
188
+
189
+ 启动执行 Agent 处理 pending 执行 step。Agent 自主循环直到遇到 decision/完成/失败。
190
+
191
+ 1. Read status.json → 确认有 pending step
192
+ 2. Resolve agent name: `{stage_prefix}-{session_id_short}-{HHmmss}`
193
+
194
+ **Agent Name Prefix (by stage):**
195
+
196
+ | Stage | Prefix |
197
+ |-------|--------|
198
+ | grill | `grl` |
199
+ | brainstorm | `brn` |
200
+ | analyze-macro | `anm` |
201
+ | analyze | `ana` |
202
+ | plan | `pln` |
203
+ | execute | `exe` |
204
+ | review | `rev` |
205
+ | test | `tst` |
206
+ | debug | `dbg` |
207
+ | Other | `run` |
208
+
209
+ 3. Compose `<execution_context>` block:
210
+
211
+ ```xml
212
+ <execution_context>
213
+ <intent>{session.intent}</intent>
214
+ <phase>{session.phase}</phase>
215
+ <milestone>{session.milestone}</milestone>
216
+ <boundary_contract>
217
+ <in_scope>{boundary_contract.in_scope}</in_scope>
218
+ <out_of_scope>{boundary_contract.out_of_scope}</out_of_scope>
219
+ <definition_of_done>{boundary_contract.definition_of_done}</definition_of_done>
220
+ </boundary_contract>
221
+ <execution_criteria>{session.execution_criteria}</execution_criteria>
222
+ <active_goals>{task_decomposition WHERE status != "superseded"; superseded 目标仅一行标注}</active_goals>
223
+ <prior_step_context>
224
+ {最近 5 个已完成 step 的 completion_summary + completion_caveats}
225
+ </prior_step_context>
226
+ <accumulated_signals>
227
+ {聚合所有已完成 step 的 caveats + deferred}
228
+ </accumulated_signals>
229
+ <stage_context>
230
+ {按下一个 pending step 的目标 skill 类型选择性注入,见下表;仅在有实际内容时加入}
231
+ </stage_context>
232
+ </execution_context>
233
+ ```
234
+
235
+ **Stage-specific `<stage_context>` injection:**
236
+
237
+ | 目标 skill 类型 | 注入重点 |
238
+ |----------------|---------|
239
+ | analyze | intent + scope + boundary |
240
+ | plan | analysis findings + scope_verdict + recommendations |
241
+ | execute | task list + dependencies + wave + caveats from plan |
242
+ | review | changed files + verification results + execution decisions |
243
+ | test | review findings + execution artifacts + coverage data |
244
+ | debug | error details + failing tests + execution trace |
245
+ | brainstorm/grill | challenged assumptions + risks + prior findings |
246
+
247
+ 4. Dispatch Agent:
248
+
249
+ ```
250
+ Agent({
251
+ name: "{resolved_agent_name}",
252
+ description: "执行 ralph session steps",
253
+ prompt: `执行 ralph-agent session {session_id} 的 pending steps。
254
+
255
+ 调用 Skill("maestro-ralph-agent-execute", "--session {session_id}") 执行步骤。
256
+ maestro-ralph-agent-execute 会自动循环执行 pending 执行 step,遇到 decision/完成/失败时返回。
257
+
258
+ {execution_context}
259
+
260
+ 执行 Agent 内部调用 maestro ralph complete 上报。你只需确保 Skill 调用完成后输出 ---AGENT-STATUS--- 块。
261
+
262
+ 最后必须输出以下状态块:
263
+
264
+ ---AGENT-STATUS---
265
+ RESULT: decision_pending|session_complete|step_failed|steps_completed
266
+ LAST_STEP_INDEX: {N}
267
+ DECISION_NODE: {gate name, 仅 decision_pending 时}
268
+ COMPLETED_STEPS: {本次完成的 step 数量}
269
+ FAILURE_REASON: {仅 step_failed 时}
270
+ ---END---`
271
+ })
272
+ ```
273
+
274
+ 5. Write `session.active_agent_name` to status.json
275
+ 6. Display: `⟶ Agent:{name} dispatched for session {session_id}`
276
+
277
+ ### A_PARSE_AGENT_RETURN
278
+
279
+ 从 Agent 返回文本中解析 `---AGENT-STATUS---` 块,并验证 session 状态一致性。
280
+
281
+ 1. Extract RESULT field → route to next state
282
+ 2. Extract metadata: LAST_STEP_INDEX, DECISION_NODE, COMPLETED_STEPS, FAILURE_REASON
283
+ 3. If no `---AGENT-STATUS---` block → fallback: re-read status.json 推断状态
284
+ - 有 pending decision step → `decision_pending`
285
+ - 全部 completed → `session_complete`
286
+ - 有 failed step → `step_failed`
287
+ 4. **Verify agent reporting** — re-read status.json 验证 agent 上报是否成功写入:
288
+ - 检查 LAST_STEP_INDEX 对应的 step 是否 `completion_confirmed == true`
289
+ - 若 Agent 返回 COMPLETED_STEPS > 0 但 status.json 中对应 step 未 completed → 标记 `agent_report_mismatch = true`,RESULT 降级为 `step_failed`,FAILURE_REASON = "agent 上报未写入 status.json"
290
+ - 检查 `session.status` 是否仍为 "running"(agent 崩溃可能导致 paused)
291
+ 5. Display: `[Agent返回] {RESULT} — 完成 {COMPLETED_STEPS} 步`
292
+
293
+ ### A_AGENT_EVALUATE
294
+
295
+ 通过 Agent 在本循环内评估质量门。替代 `maestro delegate --mode analysis`。
296
+
297
+ 1. Resolve artifact dir: `.workflow/scratch/{artifact.path}/` with fallback glob
298
+ 2. Parse decision metadata: `{ decision, retry_count, max_retries }`
299
+ 3. Map result files(同 ralph A_DELEGATE_EVALUATE):
300
+
301
+ | Decision | Files |
302
+ |----------|-------|
303
+ | post-execute | verification.json |
304
+ | post-business-test | .tests/auto-test/report.json |
305
+ | post-review | review.json |
306
+ | post-test | uat.md, .tests/test-results.json |
307
+ | post-frontend-verify | e2e-results.json |
308
+
309
+ 4. Dispatch evaluation Agent:
310
+ ```
311
+ Agent({
312
+ name: "eval-{decision}-{timestamp}",
313
+ description: "评估 {decision} 质量门",
314
+ prompt: "PURPOSE: 评估 {decision} 质量门结果
315
+ TASK: 读取以下结果文件 | 分析状态 | 评估严重性 | 给出建议
316
+ FILES: {result_file_paths}
317
+ SESSION: {session_dir}/status.json
318
+ EXPECTED: 输出以下格式:
319
+ ---VERDICT---
320
+ STATUS: PASS|FAIL|PARTIAL|BLOCKED
321
+ REASON: <一句话原因>
322
+ GAP_SUMMARY: <差距摘要>
323
+ CONFIDENCE: high|medium|low
324
+ CONFIDENCE_SCORE: 0-100
325
+ WEAKEST_DIMENSION: <最弱维度>
326
+ ---END---
327
+ CONSTRAINTS: 只评估不修改文件 | 置信度<60%倾向 fix | retry {n}/{max} 达上限必须 escalate"
328
+ })
329
+ ```
330
+ 5. On return: parse `---VERDICT---` block — STATUS must match strict enum `PASS|FAIL|PARTIAL|BLOCKED`; parse failure → fallback STATUS="fix", `parse_failed: true`, `confidence_score: 0` (invariant 13)
331
+ 6. Confidence adjustment: <60 + proceed → fix; >95 + fix + retry>0 → suggest proceed
332
+ 7. **Decision log**: Append to `{session_dir}/decisions.ndjson`:
333
+ ```json
334
+ { "id": "DEC-{timestamp}", "timestamp": "{ISO}", "source": "ralph-agent",
335
+ "node_id": "{step.decision}", "type": "quality-gate",
336
+ "verdict": "{adjusted_verdict}", "confidence_score": {N},
337
+ "parse_failed": false,
338
+ "close_call": {N>=50 && N<=70}, "summary": "{REASON}" }
339
+ ```
340
+
341
+ ### A_AGENT_GOAL_AUDIT
342
+
343
+ 通过 Agent 审计子目标完成情况。替代 `maestro delegate --mode analysis` 的 goal audit。
344
+
345
+ 1. Read `session.task_decomposition` from status.json
346
+ 2. Dispatch audit Agent:
347
+ ```
348
+ Agent({
349
+ name: "goal-audit-{timestamp}",
350
+ description: "审计子目标完成情况",
351
+ prompt: "PURPOSE: 审计未完成子目标,判定 met / unmet
352
+ TASK:
353
+ 1. 读取 {session_dir}/status.json 中 task_decomposition 的 status!=done 子目标
354
+ 2. 打开 evidence 产物,对照 done_when 严格判定
355
+ 3. 输出 met / unmet,unmet 给出 gap + target_phase
356
+ 4. 对照 intent + definition_of_done 判定意图保真
357
+ CONTEXT:
358
+ status.json = {session_dir}/status.json
359
+ intent = {session.intent}
360
+ definition_of_done = {boundary_contract.definition_of_done}
361
+ execution_criteria = {execution_criteria}
362
+ boundary_contract = {boundary_contract}
363
+ EXPECTED:
364
+ ---VERDICT---
365
+ STATUS: all_met|has_unmet
366
+ INTENT_ALIGNED: true|false
367
+ UNMET: [{id:G2,gap:'...',target_phase:execute}, ...]
368
+ CONFIDENCE_SCORE: 0-100
369
+ ---END---
370
+ CONSTRAINTS: 只评估不修改文件 | 严格按 done_when 判定 | evidence 缺失→unmet"
371
+ })
372
+ ```
373
+ 3. On return: parse verdict, update task_decomposition status
374
+ 4. Append `{session_dir}/decisions.ndjson`:`{ "type": "goal-gate", "unmet_count": N, "unmet_ids": [...] }`
375
+ 5. Verdict routing: `all_met` + `INTENT_ALIGNED=true` → A_APPLY_GOAL_DONE;`all_met` + `INTENT_ALIGNED=false` → A_REGROUND_HALT;`has_unmet` → A_APPLY_GOAL_FIX
376
+ GUARD: retry_count >= max_retries AND still unmet → A_APPLY_ESCALATE
377
+
378
+ ### A_AGENT_REGROUND
379
+
380
+ 通过 Agent 执行意图保真检查。替代 `maestro delegate --mode analysis` 的 reground。
381
+
382
+ 1. Read status.json:intent, boundary_contract, completed steps, done goals
383
+ 2. Dispatch reground Agent:
384
+ ```
385
+ Agent({
386
+ name: "reground-{timestamp}",
387
+ description: "意图保真检查",
388
+ prompt: "PURPOSE: 意图保真检查 — 对照 intent 验证累积执行是否漂移
389
+ TASK:
390
+ 1. 读取 intent + boundary_contract.definition_of_done
391
+ 2. 读取已完成 steps 的 completion_evidence + 已 done 子目标
392
+ 3. 判定累积产出是否仍服务 intent
393
+ 4. 输出 aligned / drifted + drift_description + corrective_action
394
+ CONTEXT:
395
+ status.json = {session_dir}/status.json
396
+ intent = {session.intent}
397
+ definition_of_done = {boundary_contract.definition_of_done}
398
+ in_scope = {boundary_contract.in_scope}
399
+ out_of_scope = {boundary_contract.out_of_scope}
400
+ goal_changelog = {session.goal_changelog ?? []}
401
+ EXPECTED:
402
+ ---VERDICT---
403
+ STATUS: aligned|drifted
404
+ DRIFT_DESCRIPTION: <空或具体描述>
405
+ CORRECTIVE_ACTION: <空或建议>
406
+ CONFIDENCE_SCORE: 0-100
407
+ ---END---
408
+ CONSTRAINTS: 只评估不修改文件 | aligned 阈值≥80% | 单个 step 触碰 out_of_scope→直接 drifted"
409
+ })
410
+ ```
411
+ 3. On return: parse verdict
412
+ 4. Append `{session_dir}/decisions.ndjson`
413
+ 5. Verdict routing:aligned → A_APPLY_PROCEED;drifted + confidence >= 60 → A_REGROUND_HALT;drifted + confidence < 60 → A_APPLY_PROCEED (LOW CONFIDENCE)
414
+
415
+ ### A_SCOPE_EVALUATE
416
+
417
+ 仅由 `post-analyze-scope` 决策节点触发。
418
+
419
+ 1. 定位刚完成的 macro analyze artifact → `analyze_macro_id`, `conclusions_path`
420
+ 2. 读取 `conclusions.scope_verdict`(`large | medium | small`),缺失 → `unknown`
421
+ 3. 写入 `session.scope_verdict` + `session.analyze_macro_id`
422
+ 4. Append `{session_dir}/decisions.ndjson`:`{ "type": "scope-gate", "source": "ralph-agent", "verdict": "{scope_verdict}", "analyze_macro_id": "{ANL_ID}" }`
423
+
424
+ ### A_STRUCTURAL_EVALUATE
425
+
426
+ **post-milestone:**
427
+ 1. Read state.json → resolve milestone type(default `"standard"`)
428
+ 2. Standard milestone:next milestone exists → insert lifecycle steps / complete
429
+ 3. Adhoc milestone(`type == "adhoc"`):always END,set `current_milestone = null`
430
+
431
+ **post-debug-escalate:** always → A_PAUSE_ESCALATE
432
+
433
+ ### A_SHOW_STATUS
434
+
435
+ 1. Find latest `ralph-agent-*` session(by created_at)
436
+ 2. Display: Session, Status, Position, Progress, Current step
437
+ 3. List steps: [✓] confirmed, [▸] current, [ ] pending, [◆] decision;执行 step 附 `command_scope` + `command_path`
438
+ 4. If `task_decomposition` present → 显示 sub-goals 进度(done/total)
439
+
440
+ ### A_APPLY_PROCEED / A_APPLY_FIX / A_APPLY_ESCALATE
441
+
442
+ - **A_APPLY_PROCEED**: Mark decision completed, write status.json
443
+ - **A_APPLY_FIX**: Insert fix-loop steps after current step(见 Fix-Loop Templates),reindex,increment retry_count
444
+ - **A_APPLY_ESCALATE**: Insert `[quality-debug "{gap_summary}", decision:post-debug-escalate]`,reindex
445
+
446
+ ### A_APPLY_SCOPE_VERDICT
447
+
448
+ 依据 `session.scope_verdict` + `session.wants_roadmap` 重塑下游链路:
449
+
450
+ 1. 路径 A(`large` 且 `wants_roadmap`):保持 roadmap+analyze,`plan` 选 phase 列
451
+ 2. 路径 B(`medium`/`small`,或 `large` 非 `wants_roadmap`):删除未完成的 `roadmap` + `analyze` step,`plan` 改为 `--from analyze:{ANL_ID}`
452
+ 3. 路径 C(`unknown`):非 auto_confirm → AskUserQuestion;auto_confirm → 默认路径 B
453
+ 4. Reindex steps,标 decision completed
454
+
455
+ ### A_APPLY_GOAL_FIX / A_APPLY_GOAL_DONE
456
+
457
+ - **A_APPLY_GOAL_FIX**: 对每个 unmet 子目标插入 scoped mini-loop(plan --gaps + execute),`goal_ref` 标注,重新追加 `decision:post-goal-audit {retry+1}`
458
+ - **A_APPLY_GOAL_DONE**: set `task_decomposition[*].status="done"`, `completion_confirmed=true`, `task_decomposition_all_done=true`
459
+
460
+ ### A_ADVANCE_MILESTONE
461
+
462
+ 1. Update session: milestone, phase, reset passed_gates
463
+ 2. Insert full lifecycle steps for next milestone
464
+ 3. Reindex, write status.json
465
+
466
+ ### A_REGROUND_HALT / A_PAUSE_ESCALATE
467
+
468
+ - **A_REGROUND_HALT**: set `session.status = "paused"`,display drift warning + 恢复选项。auto_confirm 不跳过
469
+ - **A_PAUSE_ESCALATE**: set session paused,display "请人工介入",suggest continue
470
+
471
+ ### A_AMEND_GOAL
472
+
473
+ 运行中 session 的目标热修改。详细流程由 `<deferred_reading>` 加载 `ralph-amend-goal.md`。
474
+
475
+ | Phase | 行为 | 产出 |
476
+ |-------|------|------|
477
+ | 1. 快照 | 读 `task_decomposition` + `boundary_contract` + 已完成 steps 的 `completion_summary` | Display: 目标列表 + 进度 |
478
+ | 2. 解析 | `change_request` 非空 → 直接用;为空 → AskUserQuestion(修改/新增/移除/调整边界) | `change_type` + `change_request` |
479
+ | 3. Mini Grill | Agent 评估影响(替代 maestro delegate) | RISK_LEVEL + AFFECTED_GOALS + INVALIDATED_STEPS + NEW_GAPS |
480
+ | 4. 确认 | AskUserQuestion:应用并继续 / 仅改目标 / 取消 | 用户选择 |
481
+ | 5. 应用 | 归档旧目标(`superseded`)→ 写入新目标(`origin: CHG-xxx`)→ 重建链路 → write status.json | re-dispatch |
482
+
483
+ **Phase 3 Agent prompt:**
484
+ ```
485
+ Agent({
486
+ name: "amend-grill-{timestamp}",
487
+ description: "Amend impact analysis",
488
+ prompt: "PURPOSE: 评估目标修改对 running session 的影响
489
+ TASK:
490
+ 1. 读取 {session_dir}/status.json 的 task_decomposition + boundary_contract + 已完成 steps
491
+ 2. 分析 change_request 对既有目标/步骤的影响
492
+ 3. 判定 RISK_LEVEL (low/medium/high)
493
+ 4. 列出 AFFECTED_GOALS / INVALIDATED_STEPS / NEW_GAPS
494
+ CONTEXT:
495
+ change_request = {change_request}
496
+ change_type = {change_type}
497
+ session = {session_dir}/status.json
498
+ EXPECTED:
499
+ ---AMEND-VERDICT---
500
+ RISK_LEVEL: low|medium|high
501
+ AFFECTED_GOALS: [G1, G2, ...]
502
+ INVALIDATED_STEPS: [step indices]
503
+ NEW_GAPS: [gap descriptions]
504
+ RECOMMENDATION: <建议>
505
+ ---END---
506
+ CONSTRAINTS: 只评估不修改文件"
507
+ })
508
+ ```
509
+
510
+ GUARD: `RISK_LEVEL == high` → AskUserQuestion 不跳过(auto_confirm 无效)
511
+ GUARD: 已完成(`status: "done"`)的目标不可 supersede(skip + warn)
512
+ 旧目标标 `superseded`(`superseded_by` + `superseded_at`),新目标标 `origin: "CHG-xxx"`。`goal_changelog` 含完整 `before/after` + `impact_assessment`。
513
+
514
+ ### A_RETRY / A_PAUSE_SESSION / A_COMPLETE_SESSION
515
+
516
+ - **A_RETRY**: `Bash("maestro ralph retry {index}")` — 同 ralph
517
+ - **A_PAUSE_SESSION**: `ralph complete N --status BLOCKED --reason "..."` — 同 ralph
518
+ - **A_COMPLETE_SESSION**: 校验所有 step `completion_confirmed == true` + `task_decomposition_all_done == true`,写 `session.status = "completed"` — 同 ralph
519
+
520
+ </actions>
521
+
522
+ </state_machine>
523
+
524
+ <appendix>
525
+
526
+ ### Agent vs CLI-Delegate 对照
527
+
528
+ | 维度 | ralph-cli (CLI-delegate) | ralph-agent (Agent) |
529
+ |------|-------------------------|---------------------|
530
+ | 执行分发 | `maestro delegate` (Bash bg) | `Agent()` (同步) |
531
+ | 执行包装器 | `maestro-ralph-cli-execute` (delegate 加载) | `maestro-ralph-agent-execute` (Agent 内 Skill 加载) |
532
+ | 结果通信 | `---RESULT---` 文本块 (从 delegate output 解析) | Agent 返回文本 + `---AGENT-STATUS---` 块 |
533
+ | 回调模式 | STOP → re-invocation callback | 同步等待 Agent 返回(无 STOP) |
534
+ | 决策评估 | `maestro delegate --mode analysis` (Bash bg + STOP) | `Agent()` 同步分析(无 STOP) |
535
+ | 完成上报 | 编排器调 `ralph complete`(解析 RESULT 后) | 执行 Agent 内调 `ralph complete`(agent 上报) |
536
+ | session 字段 | `execution_mode: "cli-delegate"`, `cli_tool`, `delegate_exec_id` | `execution_mode: "agent"`, `agent_exec_name` |
537
+
538
+ ### Stage Mapping
539
+
540
+ Agent 版无 `delegate_mode`/`delegate_rule` 字段。执行 Agent 始终拥有完整工具集(read + write),由 skill 自身约束行为。Decision 评估 Agent 通过 prompt 中的 CONSTRAINTS 约束为只读。
541
+
542
+ | Stage | Skill (independent) | Skill (unified) | Decision after | quality_mode |
543
+ |-------|---------------------|-----------------|----------------|--------------|
544
+ | grill | `maestro-grill "{intent}"` | *(same)* | — | all |
545
+ | brainstorm | `maestro-brainstorm "{intent}"` | *(same)* | — | all |
546
+ | blueprint | `maestro-blueprint "{intent}"` | *(same)* | — | all |
547
+ | init | `maestro-init` | *(same)* | — | all |
548
+ | spec-setup | `spec-setup` | *(same)* | — | all |
549
+ | analyze-macro | `maestro-analyze "{intent}"` | *(same)* | `post-analyze-scope` | all |
550
+ | roadmap | `maestro-roadmap --from analyze:{id}` | *(same)* | — | all |
551
+ | analyze | `maestro-analyze {phase}` | `maestro-analyze` | — | all |
552
+ | plan | `maestro-plan {phase}` | `maestro-plan` | — | all |
553
+ | execute | `maestro-execute {phase}` | `maestro-execute` | `post-execute` | all |
554
+ | business-test | `quality-auto-test {phase}` | `quality-auto-test` | `post-business-test` | full only |
555
+ | review | `quality-review {phase}` | `quality-review` | `post-review` | all |
556
+ | test-gen | `quality-auto-test {phase}` | `quality-auto-test` | — | full / standard |
557
+ | test | `quality-test {phase}` | `quality-test` | `post-test` | full, standard |
558
+ | frontend-verify | `quality-test {phase} --frontend-verify` | `quality-test --frontend-verify` | `post-frontend-verify` | all (UI only) |
559
+ | milestone-audit | `maestro-milestone-audit` | *(same)* | — | all |
560
+ | goal-audit | *(decision-only)* | *(same)* | `post-goal-audit` | all |
561
+ | milestone-complete | `maestro-milestone-complete` | *(same)* | `post-milestone` | all |
562
+
563
+ Build rules 0-14 全部适用,包括 spec-setup 预检(rule 0.5)、grill auto_confirm 透传(rule 3.5)、frontend-verify UI 门控(rule 3.6)、re-grounding 插入(rule 5.5)等。
564
+
565
+ ### Session Schema
566
+
567
+ ```json
568
+ {
569
+ "session_id": "ralph-agent-{YYYYMMDD-HHmmss}",
570
+ "source": "ralph", "status": "running",
571
+ "execution_mode": "agent",
572
+ "ralph_protocol_version": "2",
573
+ "active_step_index": null,
574
+ "active_agent_name": null,
575
+ "intent": "", "lifecycle_position": "",
576
+ "phase": null, "phase_is_new": false,
577
+ "milestone": "",
578
+ "auto_mode": false,
579
+ "decomposition_owner": "ralph",
580
+
581
+ "quality_mode": "standard",
582
+ "planning_mode": "independent",
583
+ "scope_verdict": null,
584
+ "wants_roadmap": false,
585
+ "analyze_macro_id": null,
586
+ "blueprint_id": null,
587
+ "passed_gates": [],
588
+ "context": { "issue_id": null, "scratch_dir": null, "plan_dir": null,
589
+ "analysis_dir": null, "brainstorm_dir": null, "blueprint_dir": null },
590
+ "steps": [{
591
+ "index": 0,
592
+ "skill": "",
593
+ "args": "",
594
+ "stage": "",
595
+ "scope": null,
596
+ "decision": null,
597
+ "retry_count": 0,
598
+ "max_retries": 2,
599
+ "command_scope": "global|project|missing|null",
600
+ "command_path": "<absolute path> | null",
601
+ "milestone_id": null,
602
+ "source_artifact_ref": null,
603
+ "status": "pending|running|completed|skipped|failed",
604
+ "goal_ref": null,
605
+ "completion_confirmed": false,
606
+ "completion_status": null,
607
+ "completion_evidence": null,
608
+ "completion_summary": null,
609
+ "completion_decisions": null,
610
+ "completion_caveats": null,
611
+ "completion_deferred": null,
612
+ "completed_at": null,
613
+ "deferred_reads": [],
614
+ "load": null,
615
+ "agent_exec_name": null,
616
+ "artifacts_produced": [],
617
+ "drift_score": null,
618
+ "drift_correction": null
619
+ }],
620
+ "waves": [], "current_step": 0,
621
+
622
+ "boundary_contract": {
623
+ "in_scope": [], "out_of_scope": [], "constraints": [], "definition_of_done": ""
624
+ },
625
+ "execution_criteria": [],
626
+ "task_decomposition": [
627
+ { "id": "G1", "goal": "", "boundary": "", "done_when": "",
628
+ "evidence": "", "lifecycle": [], "status": "pending|done|superseded",
629
+ "completion_confirmed": false, "completed_at": null,
630
+ "superseded_by": null, "superseded_at": null, "origin": null }
631
+ ],
632
+ "task_decomposition_all_done": false,
633
+
634
+ "goal_changelog": [
635
+ { "id": "CHG-001", "timestamp": "{ISO}",
636
+ "change_type": "modify|add|remove|boundary",
637
+ "reason": "",
638
+ "impact_assessment": { "risk_level": "low|medium|high",
639
+ "invalidated_steps": [], "new_steps_inserted": 0 },
640
+ "before": { "goals": [{"id":"G1","goal":"...","done_when":"..."}] },
641
+ "after": { "goals": [{"id":"G1v2","goal":"...","done_when":"..."}] } }
642
+ ]
643
+ }
644
+ ```
645
+
646
+ ### Fix-Loop Templates
647
+
648
+ 6 套 fix-loop templates(post-execute / post-business-test / post-review / post-test / post-frontend-verify / post-goal-audit),结构同 ralph。插入的 step 通过 Agent dispatch 执行,由 execute Agent 内调 `ralph complete` 上报。
649
+
650
+ ### Error Codes
651
+
652
+ E001–E006, W001–W004 适用。Agent 新增:
653
+
654
+ | Code | Severity | Description | Recovery |
655
+ |------|----------|-------------|----------|
656
+ | E014 | error | Agent execution failed (Agent returned null) | Retry once, then BLOCKED |
657
+ | E015 | error | `---AGENT-STATUS---` block not found | Fallback: re-read status.json 推断 |
658
+ | E016 | error | Evaluation Agent verdict parse failed | Fallback fix + parse_failed: true |
659
+
660
+ ### Success Criteria
661
+
662
+ - [ ] ralph-agent owns full loop: dispatch Agent → wait → verify → decide → re-dispatch
663
+ - [ ] 执行通过 `Agent()` 分发,Agent 内调 `Skill("maestro-ralph-agent-execute", "--session {id}")` 执行
664
+ - [ ] Agent 返回文本含 `---AGENT-STATUS---` 块(RESULT/LAST_STEP_INDEX/DECISION_NODE/COMPLETED_STEPS/FAILURE_REASON)
665
+ - [ ] 无 STOP/callback 模式 — Agent() 同步等待返回
666
+ - [ ] 执行 Agent 自主循环执行 step,遇 decision 停止返回
667
+ - [ ] 执行 Agent 内部调 `maestro ralph complete` 上报(agent 上报,非编排器上报)
668
+ - [ ] A_PARSE_AGENT_RETURN 验证 status.json:agent 上报写入确认 + session.status 一致性
669
+ - [ ] Decision evaluation 通过 Agent() 同步完成(非 maestro delegate)
670
+ - [ ] Verdict 解析保持 `---VERDICT---` 格式,parse 失败 → fallback fix + parse_failed: true
671
+ - [ ] decisions.ndjson 追加:source 字段为 `"ralph-agent"`
672
+ - [ ] Session schema: `execution_mode: "agent"`,`agent_exec_name` 替代 `delegate_exec_id`,含 `artifacts_produced`
673
+ - [ ] Chain building(S_RESOLVE_PHASE through S_BUILD_CHAIN)逻辑同 ralph,本文件自包含执行
674
+ - [ ] execution_context 块含 prior_step_context(滑动窗口 5 step)+ accumulated_signals + stage_context
675
+ - [ ] execution_context 中 boundary_contract 不截断;superseded 目标仅一行标注
676
+ - [ ] Agent name 含 stage prefix(grl/brn/anm/ana/pln/exe/rev/tst/dbg)
677
+ - [ ] Stage Mapping 表内联适配(无 delegate_mode/delegate_rule,Agent 始终 read+write,评估 Agent prompt 约束只读)
678
+ - [ ] completion_summary 在 DONE/DONE_WITH_CONCERNS 时为 MUST(由 execute Agent 的 ralph complete --summary 写入)
679
+ - [ ] CAVEATS 在 DONE_WITH_CONCERNS 时同时映射 --concerns(execute Agent 负责)
680
+ - [ ] A_AMEND_GOAL:完整 5 步流程 + deferred_reading ralph-amend-goal.md + Agent mini grill 含完整 prompt
681
+ - [ ] 旧目标标 superseded(superseded_by + superseded_at),新目标 origin: "CHG-xxx"
682
+ - [ ] goal_changelog 含完整 before/after + impact_assessment
683
+ - [ ] blueprint_id session 字段支持 --from blueprint:{BLP_ID} 路径
684
+ - [ ] spec-setup 预检(build rule 0.5)
685
+ - [ ] post-milestone adhoc 分支:mark completed + set current_milestone = null
686
+ - [ ] post-reground + drifted + confidence < 60 → A_APPLY_PROCEED (LOW CONFIDENCE)
687
+ - [ ] Fix-loop 插入的 step 通过 Agent dispatch 执行,`agent_exec_name` 初始化为 null
688
+ - [ ] re-grounding 3-step 插入规则(build rule 5.5)不变
689
+ - [ ] A_REGROUND_HALT 漂移熔断(auto_confirm 不跳过)不变
690
+ - [ ] `---AGENT-STATUS---` 块缺失时 fallback:re-read status.json 推断状态
691
+ - [ ] Agent 超时/崩溃 → A_PARSE_AGENT_RETURN fallback 推断 + S_HANDLE_FAIL 路径
692
+
693
+ </appendix>
694
+ </output>
695
+ </output>