maestro-flow 0.5.2 → 0.5.31

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 (701) hide show
  1. package/.agents/skills/insight-challenge/SKILL.md +228 -0
  2. package/.agents/skills/insight-challenge/specs/challenge-protocol.md +154 -0
  3. package/.agents/skills/insight-challenge/specs/verdict-schema.md +239 -0
  4. package/.agents/skills/learn-follow/SKILL.md +114 -114
  5. package/.agents/skills/learn-investigate/SKILL.md +138 -139
  6. package/.agents/skills/learn-second-opinion/SKILL.md +105 -109
  7. package/.agents/skills/maestro/SKILL.md +8 -16
  8. package/.agents/skills/maestro-amend/SKILL.md +152 -152
  9. package/.agents/skills/maestro-analyze/SKILL.md +201 -252
  10. package/.agents/skills/maestro-blueprint/SKILL.md +175 -190
  11. package/.agents/skills/maestro-brainstorm/SKILL.md +196 -200
  12. package/.agents/skills/maestro-collab/SKILL.md +159 -159
  13. package/.agents/skills/maestro-companion/SKILL.md +517 -517
  14. package/.agents/skills/maestro-composer/SKILL.md +173 -164
  15. package/.agents/skills/maestro-execute/SKILL.md +169 -170
  16. package/.agents/skills/maestro-fork/SKILL.md +97 -96
  17. package/.agents/skills/maestro-grill/SKILL.md +161 -162
  18. package/.agents/skills/maestro-guard/SKILL.md +93 -92
  19. package/.agents/skills/maestro-help/SKILL.md +1 -1
  20. package/.agents/skills/maestro-help/index/catalog.json +3 -2
  21. package/.agents/skills/maestro-impeccable/SKILL.md +296 -253
  22. package/.agents/skills/maestro-init/SKILL.md +117 -118
  23. package/.agents/skills/maestro-merge/SKILL.md +73 -66
  24. package/.agents/skills/maestro-milestone-audit/SKILL.md +4 -10
  25. package/.agents/skills/maestro-milestone-complete/SKILL.md +6 -7
  26. package/.agents/skills/maestro-milestone-release/SKILL.md +122 -131
  27. package/.agents/skills/maestro-next/SKILL.md +241 -245
  28. package/.agents/skills/maestro-overlay/SKILL.md +176 -166
  29. package/.agents/skills/maestro-plan/SKILL.md +211 -197
  30. package/.agents/skills/maestro-player/SKILL.md +167 -167
  31. package/.agents/skills/maestro-quick/SKILL.md +69 -63
  32. package/.agents/skills/maestro-ralph/SKILL.md +13 -46
  33. package/.agents/skills/maestro-ralph-beta/SKILL.md +861 -871
  34. package/.agents/skills/maestro-ralph-execute/SKILL.md +234 -234
  35. package/.agents/skills/maestro-roadmap/SKILL.md +159 -172
  36. package/.agents/skills/maestro-swarm-workflow/SKILL.md +229 -250
  37. package/.agents/skills/maestro-tools-execute/SKILL.md +108 -103
  38. package/.agents/skills/maestro-tools-register/SKILL.md +148 -143
  39. package/.agents/skills/maestro-ui-codify/SKILL.md +103 -86
  40. package/.agents/skills/maestro-universal-workflow/SKILL.md +534 -547
  41. package/.agents/skills/maestro-update/SKILL.md +109 -106
  42. package/.agents/skills/manage-codebase-rebuild/SKILL.md +73 -71
  43. package/.agents/skills/manage-harvest/SKILL.md +83 -81
  44. package/.agents/skills/manage-issue/SKILL.md +59 -60
  45. package/.agents/skills/manage-issue-discover/SKILL.md +70 -68
  46. package/.agents/skills/manage-kg-extractors/SKILL.md +130 -0
  47. package/.agents/skills/manage-knowhow/SKILL.md +70 -66
  48. package/.agents/skills/manage-knowhow-capture/SKILL.md +79 -69
  49. package/.agents/skills/manage-knowledge-audit/SKILL.md +91 -74
  50. package/.agents/skills/manage-status/SKILL.md +52 -42
  51. package/.agents/skills/manage-wiki/SKILL.md +69 -58
  52. package/.agents/skills/odyssey-debug/SKILL.md +461 -0
  53. package/.agents/skills/odyssey-improve/SKILL.md +493 -0
  54. package/.agents/skills/odyssey-planex/SKILL.md +592 -0
  55. package/.agents/skills/odyssey-review-test-fix/SKILL.md +416 -0
  56. package/.agents/skills/odyssey-ui/SKILL.md +447 -0
  57. package/.agents/skills/quality-auto-test/SKILL.md +140 -123
  58. package/.agents/skills/quality-debug/SKILL.md +145 -106
  59. package/.agents/skills/quality-refactor/SKILL.md +91 -53
  60. package/.agents/skills/quality-retrospective/SKILL.md +109 -63
  61. package/.agents/skills/quality-review/SKILL.md +141 -114
  62. package/.agents/skills/quality-sync/SKILL.md +74 -38
  63. package/.agents/skills/quality-test/SKILL.md +133 -103
  64. package/.agents/skills/security-audit/SKILL.md +217 -166
  65. package/.agents/skills/spec-add/SKILL.md +66 -59
  66. package/.agents/skills/spec-load/SKILL.md +68 -68
  67. package/.agents/skills/spec-remove/SKILL.md +42 -42
  68. package/.agents/skills/spec-setup/SKILL.md +38 -41
  69. package/.agy/skills/insight-challenge/SKILL.md +230 -0
  70. package/.agy/skills/insight-challenge/specs/challenge-protocol.md +154 -0
  71. package/.agy/skills/insight-challenge/specs/verdict-schema.md +239 -0
  72. package/.agy/skills/learn-follow/SKILL.md +114 -114
  73. package/.agy/skills/learn-investigate/SKILL.md +138 -139
  74. package/.agy/skills/learn-second-opinion/SKILL.md +105 -109
  75. package/.agy/skills/maestro/SKILL.md +8 -16
  76. package/.agy/skills/maestro-amend/SKILL.md +152 -152
  77. package/.agy/skills/maestro-analyze/SKILL.md +201 -252
  78. package/.agy/skills/maestro-blueprint/SKILL.md +175 -190
  79. package/.agy/skills/maestro-brainstorm/SKILL.md +196 -200
  80. package/.agy/skills/maestro-collab/SKILL.md +159 -159
  81. package/.agy/skills/maestro-companion/SKILL.md +517 -517
  82. package/.agy/skills/maestro-composer/SKILL.md +173 -164
  83. package/.agy/skills/maestro-execute/SKILL.md +169 -170
  84. package/.agy/skills/maestro-fork/SKILL.md +97 -96
  85. package/.agy/skills/maestro-grill/SKILL.md +161 -162
  86. package/.agy/skills/maestro-guard/SKILL.md +93 -92
  87. package/.agy/skills/maestro-help/SKILL.md +1 -1
  88. package/.agy/skills/maestro-help/index/catalog.json +3 -2
  89. package/.agy/skills/maestro-impeccable/SKILL.md +296 -253
  90. package/.agy/skills/maestro-init/SKILL.md +117 -118
  91. package/.agy/skills/maestro-merge/SKILL.md +73 -66
  92. package/.agy/skills/maestro-milestone-audit/SKILL.md +4 -10
  93. package/.agy/skills/maestro-milestone-complete/SKILL.md +6 -7
  94. package/.agy/skills/maestro-milestone-release/SKILL.md +122 -131
  95. package/.agy/skills/maestro-next/SKILL.md +241 -245
  96. package/.agy/skills/maestro-overlay/SKILL.md +176 -166
  97. package/.agy/skills/maestro-plan/SKILL.md +211 -197
  98. package/.agy/skills/maestro-player/SKILL.md +167 -167
  99. package/.agy/skills/maestro-quick/SKILL.md +69 -63
  100. package/.agy/skills/maestro-ralph/SKILL.md +13 -46
  101. package/.agy/skills/maestro-ralph-beta/SKILL.md +861 -871
  102. package/.agy/skills/maestro-ralph-execute/SKILL.md +234 -234
  103. package/.agy/skills/maestro-roadmap/SKILL.md +159 -172
  104. package/.agy/skills/maestro-swarm-workflow/SKILL.md +229 -250
  105. package/.agy/skills/maestro-tools-execute/SKILL.md +108 -103
  106. package/.agy/skills/maestro-tools-register/SKILL.md +148 -143
  107. package/.agy/skills/maestro-ui-codify/SKILL.md +103 -86
  108. package/.agy/skills/maestro-universal-workflow/SKILL.md +534 -547
  109. package/.agy/skills/maestro-update/SKILL.md +109 -106
  110. package/.agy/skills/manage-codebase-rebuild/SKILL.md +73 -71
  111. package/.agy/skills/manage-harvest/SKILL.md +83 -81
  112. package/.agy/skills/manage-issue/SKILL.md +59 -60
  113. package/.agy/skills/manage-issue-discover/SKILL.md +70 -68
  114. package/.agy/skills/manage-kg-extractors/SKILL.md +130 -0
  115. package/.agy/skills/manage-knowhow/SKILL.md +70 -66
  116. package/.agy/skills/manage-knowhow-capture/SKILL.md +79 -69
  117. package/.agy/skills/manage-knowledge-audit/SKILL.md +91 -74
  118. package/.agy/skills/manage-status/SKILL.md +52 -42
  119. package/.agy/skills/manage-wiki/SKILL.md +69 -58
  120. package/.agy/skills/odyssey-debug/SKILL.md +461 -0
  121. package/.agy/skills/odyssey-improve/SKILL.md +493 -0
  122. package/.agy/skills/odyssey-planex/SKILL.md +592 -0
  123. package/.agy/skills/odyssey-review-test-fix/SKILL.md +416 -0
  124. package/.agy/skills/odyssey-ui/SKILL.md +447 -0
  125. package/.agy/skills/quality-auto-test/SKILL.md +140 -123
  126. package/.agy/skills/quality-debug/SKILL.md +145 -106
  127. package/.agy/skills/quality-refactor/SKILL.md +91 -53
  128. package/.agy/skills/quality-retrospective/SKILL.md +109 -63
  129. package/.agy/skills/quality-review/SKILL.md +141 -114
  130. package/.agy/skills/quality-sync/SKILL.md +74 -38
  131. package/.agy/skills/quality-test/SKILL.md +133 -103
  132. package/.agy/skills/security-audit/SKILL.md +217 -166
  133. package/.agy/skills/spec-add/SKILL.md +66 -59
  134. package/.agy/skills/spec-load/SKILL.md +68 -68
  135. package/.agy/skills/spec-remove/SKILL.md +42 -42
  136. package/.agy/skills/spec-setup/SKILL.md +38 -41
  137. package/.claude/commands/learn-follow.md +127 -127
  138. package/.claude/commands/learn-investigate.md +151 -152
  139. package/.claude/commands/learn-second-opinion.md +118 -122
  140. package/.claude/commands/maestro-amend.md +164 -164
  141. package/.claude/commands/maestro-analyze.md +215 -266
  142. package/.claude/commands/maestro-blueprint.md +189 -204
  143. package/.claude/commands/maestro-brainstorm.md +209 -213
  144. package/.claude/commands/maestro-collab.md +172 -172
  145. package/.claude/commands/maestro-companion.md +531 -531
  146. package/.claude/commands/maestro-composer.md +188 -179
  147. package/.claude/commands/maestro-execute.md +183 -184
  148. package/.claude/commands/maestro-fork.md +111 -110
  149. package/.claude/commands/maestro-grill.md +175 -176
  150. package/.claude/commands/maestro-guard.md +103 -102
  151. package/.claude/commands/maestro-impeccable.md +311 -268
  152. package/.claude/commands/maestro-init.md +130 -131
  153. package/.claude/commands/maestro-merge.md +87 -80
  154. package/.claude/commands/maestro-milestone-audit.md +4 -10
  155. package/.claude/commands/maestro-milestone-complete.md +6 -7
  156. package/.claude/commands/maestro-milestone-release.md +136 -145
  157. package/.claude/commands/maestro-next.md +253 -257
  158. package/.claude/commands/maestro-overlay.md +188 -178
  159. package/.claude/commands/maestro-plan.md +225 -211
  160. package/.claude/commands/maestro-player.md +182 -182
  161. package/.claude/commands/maestro-quick.md +83 -77
  162. package/.claude/commands/maestro-ralph-beta.md +875 -885
  163. package/.claude/commands/maestro-ralph-execute.md +247 -247
  164. package/.claude/commands/maestro-ralph.md +13 -46
  165. package/.claude/commands/maestro-roadmap.md +173 -186
  166. package/.claude/commands/maestro-swarm-workflow.md +243 -264
  167. package/.claude/commands/maestro-tools-execute.md +122 -117
  168. package/.claude/commands/maestro-tools-register.md +162 -157
  169. package/.claude/commands/maestro-ui-codify.md +117 -100
  170. package/.claude/commands/maestro-universal-workflow.md +548 -561
  171. package/.claude/commands/maestro-update.md +122 -119
  172. package/.claude/commands/maestro.md +8 -16
  173. package/.claude/commands/manage-codebase-rebuild.md +87 -85
  174. package/.claude/commands/manage-harvest.md +97 -95
  175. package/.claude/commands/manage-issue-discover.md +83 -81
  176. package/.claude/commands/manage-issue.md +72 -73
  177. package/.claude/commands/manage-kg-extractors.md +128 -0
  178. package/.claude/commands/manage-knowhow-capture.md +92 -82
  179. package/.claude/commands/manage-knowhow.md +83 -79
  180. package/.claude/commands/manage-knowledge-audit.md +105 -88
  181. package/.claude/commands/manage-status.md +62 -52
  182. package/.claude/commands/manage-wiki.md +82 -71
  183. package/.claude/commands/odyssey-debug.md +459 -0
  184. package/.claude/commands/odyssey-improve.md +491 -0
  185. package/.claude/commands/odyssey-planex.md +590 -0
  186. package/.claude/commands/odyssey-review-test-fix.md +414 -0
  187. package/.claude/commands/odyssey-ui.md +445 -0
  188. package/.claude/commands/quality-auto-test.md +153 -136
  189. package/.claude/commands/quality-debug.md +159 -120
  190. package/.claude/commands/quality-refactor.md +105 -67
  191. package/.claude/commands/quality-retrospective.md +123 -77
  192. package/.claude/commands/quality-review.md +155 -128
  193. package/.claude/commands/quality-sync.md +88 -52
  194. package/.claude/commands/quality-test.md +147 -117
  195. package/.claude/commands/security-audit.md +230 -179
  196. package/.claude/commands/spec-add.md +77 -70
  197. package/.claude/commands/spec-load.md +78 -78
  198. package/.claude/commands/spec-remove.md +55 -55
  199. package/.claude/commands/spec-setup.md +49 -52
  200. package/.claude/skills/insight-challenge/SKILL.md +226 -0
  201. package/.claude/skills/insight-challenge/specs/challenge-protocol.md +154 -0
  202. package/.claude/skills/insight-challenge/specs/verdict-schema.md +239 -0
  203. package/.claude/skills/maestro-help/SKILL.md +1 -1
  204. package/.claude/skills/maestro-help/index/catalog.json +3 -2
  205. package/.codex/skills/codify-to-knowhow/SKILL.md +1 -1
  206. package/.codex/skills/maestro-companion/SKILL.md +1 -1
  207. package/.codex/skills/maestro-help/SKILL.md +1 -1
  208. package/.codex/skills/maestro-impeccable/SKILL.md +1 -1
  209. package/.codex/skills/maestro-next/SKILL.md +1 -1
  210. package/.codex/skills/maestro-ralph-beta/SKILL.md +1 -1
  211. package/.codex/skills/odyssey-debug/SKILL.md +456 -0
  212. package/.codex/skills/odyssey-improve/SKILL.md +466 -0
  213. package/.codex/skills/odyssey-planex/SKILL.md +409 -0
  214. package/.codex/skills/odyssey-review-test-fix/SKILL.md +377 -0
  215. package/.codex/skills/odyssey-ui/SKILL.md +411 -0
  216. package/dashboard/dist/assets/{ArtifactsPage-BLvAqQlQ.js → ArtifactsPage-B6z23DfG.js} +2 -2
  217. package/dashboard/dist/assets/{ChatInput-DU9YGZKX.js → ChatInput-tBtGKV2i.js} +1 -1
  218. package/dashboard/dist/assets/{ChatPage-DYHfheXC.js → ChatPage-CcggDVs4.js} +2 -2
  219. package/dashboard/dist/assets/{CollabPage-CSlmvEa-.js → CollabPage-FaZeqqeS.js} +1 -1
  220. package/dashboard/dist/assets/{ExecutionPanel-RYWf0dYC.js → ExecutionPanel-DNRwYDXp.js} +1 -1
  221. package/dashboard/dist/assets/{KanbanPage-N55Iv0-X.js → KanbanPage-B2xh2s_N.js} +1 -1
  222. package/dashboard/dist/assets/{MaestroCoordinatePage-BxwZ6yy5.js → MaestroCoordinatePage-DCMGHDAL.js} +1 -1
  223. package/dashboard/dist/assets/{MarkdownRenderer-ZGtOY7Ti.js → MarkdownRenderer-C3FvTqVe.js} +1 -1
  224. package/dashboard/dist/assets/McpPage-HKaJ8cQP.js +16 -0
  225. package/dashboard/dist/assets/{MeetingRoomPage-CxHRn1xx.js → MeetingRoomPage-DGN5oUXH.js} +1 -1
  226. package/dashboard/dist/assets/{OutputPanel-DaL8c1i5.js → OutputPanel-BiCteH5k.js} +1 -1
  227. package/dashboard/dist/assets/{ProblemsPanel-BQTd5812.js → ProblemsPanel-Dk4v9tol.js} +1 -1
  228. package/dashboard/dist/assets/{RequirementBoardPage-22y9u1qh.js → RequirementBoardPage-D10A26gi.js} +1 -1
  229. package/dashboard/dist/assets/{RequirementPage-_mO743Xm.js → RequirementPage-Cs-2omLz.js} +1 -1
  230. package/dashboard/dist/assets/{RoomsPage-CExTbOGr.js → RoomsPage-tKQQhw1W.js} +1 -1
  231. package/dashboard/dist/assets/SpecsPage-LK1QCtcg.js +36 -0
  232. package/dashboard/dist/assets/{TeamsPage-BxEXLb5g.js → TeamsPage-C-bEwB8E.js} +1 -1
  233. package/dashboard/dist/assets/{TreeBrowser-CVtPF5C9.js → TreeBrowser-1YP-DfTY.js} +2 -2
  234. package/dashboard/dist/assets/{WorkflowPage-BoN18Lhs.js → WorkflowPage-dGHPsDDr.js} +2 -2
  235. package/dashboard/dist/assets/{arrow-left-C5ROg97G.js → arrow-left-BPFSEpfO.js} +1 -1
  236. package/dashboard/dist/assets/{check-Bs8PM0tQ.js → check-D5hOViiQ.js} +1 -1
  237. package/dashboard/dist/assets/{chevron-right-SmErd_1F.js → chevron-right-D9BsXrIg.js} +1 -1
  238. package/dashboard/dist/assets/{circle-CjpslL_D.js → circle-Cn5fNpmp.js} +1 -1
  239. package/dashboard/dist/assets/{circle-alert-CuzAg2fd.js → circle-alert-CZvK3B1K.js} +1 -1
  240. package/dashboard/dist/assets/{circle-check-BIkDU5D5.js → circle-check-DApOBP0J.js} +1 -1
  241. package/dashboard/dist/assets/{circle-check-big-CYctV8bK.js → circle-check-big-Cd9ztJpl.js} +1 -1
  242. package/dashboard/dist/assets/{code-DoB7rfxt.js → code-C3TuHjMs.js} +1 -1
  243. package/dashboard/dist/assets/{columns-3-Ch5KIyRa.js → columns-3-CO2SvNJb.js} +1 -1
  244. package/dashboard/dist/assets/{download-DadtG2Nr.js → download-BuKGI7KX.js} +1 -1
  245. package/dashboard/dist/assets/{en-2h6fD0j8.js → en-BmpYsIfb.js} +1 -1
  246. package/dashboard/dist/assets/folder-Chwj_P4A.js +11 -0
  247. package/dashboard/dist/assets/folder-open-S72FbKvn.js +6 -0
  248. package/dashboard/dist/assets/{index-BL4h1OKY.js → index-CN0YdC9M.js} +1 -1
  249. package/dashboard/dist/assets/{index-DQIlX2w_.js → index-Cbs79erW.js} +5 -5
  250. package/dashboard/dist/assets/{index-DaFwSmVJ.js → index-CdT1WNND.js} +1 -1
  251. package/dashboard/dist/assets/index-DEvP8cgc.css +1 -0
  252. package/dashboard/dist/assets/{list-CI-XIPZh.js → list-Dg_ojUpi.js} +1 -1
  253. package/dashboard/dist/assets/{loader-DpdMoQvh.js → loader-CMcc73C_.js} +1 -1
  254. package/dashboard/dist/assets/{minus-BVbfXGrC.js → minus-KxmVOIB7.js} +1 -1
  255. package/dashboard/dist/assets/pen-line-D1YTNDPw.js +11 -0
  256. package/dashboard/dist/assets/{pencil-I7GE0y29.js → pencil-BAjxSHuh.js} +1 -1
  257. package/dashboard/dist/assets/{proxy-CcYyZZWI.js → proxy-BewnIei6.js} +1 -1
  258. package/dashboard/dist/assets/{refresh-cw-BG9V_T4R.js → refresh-cw-Chc0RcRY.js} +1 -1
  259. package/dashboard/dist/assets/{rows-2-DP6NjQFk.js → rows-2-DWJuw8OM.js} +1 -1
  260. package/dashboard/dist/assets/{search-b78eLlw2.js → search-CPGb2sEw.js} +1 -1
  261. package/dashboard/dist/assets/{shallow-CJEesgtu.js → shallow-Dy0-7n5s.js} +1 -1
  262. package/dashboard/dist/assets/{table-B_lk-a1d.js → table-VI5scWpO.js} +1 -1
  263. package/dashboard/dist/assets/{team-types-Se7f9LfJ.js → team-types-Cu8zCPN3.js} +1 -1
  264. package/dashboard/dist/assets/{terminal-DXx4tvzq.js → terminal-Bqt5c6Ny.js} +1 -1
  265. package/dashboard/dist/assets/{trash-2-CVh9mnRj.js → trash-2-BcTVifbw.js} +1 -1
  266. package/dashboard/dist/assets/{users-Da9zGME5.js → users-BhFAHz4H.js} +1 -1
  267. package/dashboard/dist/assets/{zap-C0zaC7gJ.js → zap-BWbLhgr6.js} +1 -1
  268. package/dashboard/dist/assets/{zh-CN-r3AvxxOL.js → zh-CN-BIRiTdAD.js} +1 -1
  269. package/dashboard/dist/index.html +2 -2
  270. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -0
  271. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  272. package/dashboard/dist-server/dashboard/src/server/wiki/search.d.ts +14 -14
  273. package/dashboard/dist-server/dashboard/src/server/wiki/search.js +188 -56
  274. package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
  275. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -0
  276. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  277. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +37 -0
  278. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +560 -22
  279. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  280. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +6 -2
  281. package/dashboard/dist-server/src/types/index.d.ts +9 -0
  282. package/dist/src/cli.js +4 -1
  283. package/dist/src/cli.js.map +1 -1
  284. package/dist/src/commands/delegate.d.ts.map +1 -1
  285. package/dist/src/commands/delegate.js +50 -8
  286. package/dist/src/commands/delegate.js.map +1 -1
  287. package/dist/src/commands/domain.d.ts +9 -0
  288. package/dist/src/commands/domain.d.ts.map +1 -0
  289. package/dist/src/commands/domain.js +445 -0
  290. package/dist/src/commands/domain.js.map +1 -0
  291. package/dist/src/commands/hooks.d.ts +10 -0
  292. package/dist/src/commands/hooks.d.ts.map +1 -1
  293. package/dist/src/commands/hooks.js +132 -22
  294. package/dist/src/commands/hooks.js.map +1 -1
  295. package/dist/src/commands/install.d.ts.map +1 -1
  296. package/dist/src/commands/install.js +82 -204
  297. package/dist/src/commands/install.js.map +1 -1
  298. package/dist/src/commands/kg.d.ts.map +1 -1
  299. package/dist/src/commands/kg.js +189 -90
  300. package/dist/src/commands/kg.js.map +1 -1
  301. package/dist/src/commands/search.d.ts +15 -8
  302. package/dist/src/commands/search.d.ts.map +1 -1
  303. package/dist/src/commands/search.js +205 -59
  304. package/dist/src/commands/search.js.map +1 -1
  305. package/dist/src/commands/spec.d.ts.map +1 -1
  306. package/dist/src/commands/spec.js +9 -1
  307. package/dist/src/commands/spec.js.map +1 -1
  308. package/dist/src/commands/update.d.ts.map +1 -1
  309. package/dist/src/commands/update.js +0 -7
  310. package/dist/src/commands/update.js.map +1 -1
  311. package/dist/src/commands/wiki.d.ts.map +1 -1
  312. package/dist/src/commands/wiki.js +8 -1
  313. package/dist/src/commands/wiki.js.map +1 -1
  314. package/dist/src/commands/workspace.d.ts +12 -0
  315. package/dist/src/commands/workspace.d.ts.map +1 -0
  316. package/dist/src/commands/workspace.js +230 -0
  317. package/dist/src/commands/workspace.js.map +1 -0
  318. package/dist/src/config/cli-tools-config.d.ts +5 -0
  319. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  320. package/dist/src/config/cli-tools-config.js +31 -0
  321. package/dist/src/config/cli-tools-config.js.map +1 -1
  322. package/dist/src/config/index.d.ts +9 -1
  323. package/dist/src/config/index.d.ts.map +1 -1
  324. package/dist/src/config/index.js +35 -1
  325. package/dist/src/config/index.js.map +1 -1
  326. package/dist/src/core/install-executor.d.ts +31 -0
  327. package/dist/src/core/install-executor.d.ts.map +1 -0
  328. package/dist/src/core/install-executor.js +231 -0
  329. package/dist/src/core/install-executor.js.map +1 -0
  330. package/dist/src/core/install-profile.d.ts +103 -0
  331. package/dist/src/core/install-profile.d.ts.map +1 -0
  332. package/dist/src/core/install-profile.js +225 -0
  333. package/dist/src/core/install-profile.js.map +1 -0
  334. package/dist/src/graph/kg/credibility.d.ts +37 -0
  335. package/dist/src/graph/kg/credibility.d.ts.map +1 -0
  336. package/dist/src/graph/kg/credibility.js +141 -0
  337. package/dist/src/graph/kg/credibility.js.map +1 -0
  338. package/dist/src/graph/kg/db/connection.d.ts +28 -0
  339. package/dist/src/graph/kg/db/connection.d.ts.map +1 -0
  340. package/dist/src/graph/kg/db/connection.js +142 -0
  341. package/dist/src/graph/kg/db/connection.js.map +1 -0
  342. package/dist/src/graph/kg/db/index.d.ts +5 -0
  343. package/dist/src/graph/kg/db/index.d.ts.map +1 -0
  344. package/dist/src/graph/kg/db/index.js +6 -0
  345. package/dist/src/graph/kg/db/index.js.map +1 -0
  346. package/dist/src/graph/kg/db/migrations.d.ts +8 -0
  347. package/dist/src/graph/kg/db/migrations.d.ts.map +1 -0
  348. package/dist/src/graph/kg/db/migrations.js +88 -0
  349. package/dist/src/graph/kg/db/migrations.js.map +1 -0
  350. package/dist/src/graph/kg/db/queries.d.ts +84 -0
  351. package/dist/src/graph/kg/db/queries.d.ts.map +1 -0
  352. package/dist/src/graph/kg/db/queries.js +471 -0
  353. package/dist/src/graph/kg/db/queries.js.map +1 -0
  354. package/dist/src/graph/kg/db/types.d.ts +123 -0
  355. package/dist/src/graph/kg/db/types.d.ts.map +1 -0
  356. package/dist/src/graph/kg/db/types.js +75 -0
  357. package/dist/src/graph/kg/db/types.js.map +1 -0
  358. package/dist/src/graph/kg/engine.d.ts +87 -0
  359. package/dist/src/graph/kg/engine.d.ts.map +1 -0
  360. package/dist/src/graph/kg/engine.js +247 -0
  361. package/dist/src/graph/kg/engine.js.map +1 -0
  362. package/dist/src/graph/kg/extraction/code/code-extractor.d.ts +42 -0
  363. package/dist/src/graph/kg/extraction/code/code-extractor.d.ts.map +1 -0
  364. package/dist/src/graph/kg/extraction/code/code-extractor.js +325 -0
  365. package/dist/src/graph/kg/extraction/code/code-extractor.js.map +1 -0
  366. package/dist/src/graph/kg/extraction/code/dfm-extractor.d.ts +3 -0
  367. package/dist/src/graph/kg/extraction/code/dfm-extractor.d.ts.map +1 -0
  368. package/dist/src/graph/kg/extraction/code/dfm-extractor.js +122 -0
  369. package/dist/src/graph/kg/extraction/code/dfm-extractor.js.map +1 -0
  370. package/dist/src/graph/kg/extraction/code/generated-detection.d.ts +14 -0
  371. package/dist/src/graph/kg/extraction/code/generated-detection.d.ts.map +1 -0
  372. package/dist/src/graph/kg/extraction/code/generated-detection.js +65 -0
  373. package/dist/src/graph/kg/extraction/code/generated-detection.js.map +1 -0
  374. package/dist/src/graph/kg/extraction/code/languages/index.d.ts +9 -0
  375. package/dist/src/graph/kg/extraction/code/languages/index.d.ts.map +1 -0
  376. package/dist/src/graph/kg/extraction/code/languages/index.js +2119 -0
  377. package/dist/src/graph/kg/extraction/code/languages/index.js.map +1 -0
  378. package/dist/src/graph/kg/extraction/code/languages/typescript.d.ts +5 -0
  379. package/dist/src/graph/kg/extraction/code/languages/typescript.d.ts.map +1 -0
  380. package/dist/src/graph/kg/extraction/code/languages/typescript.js +191 -0
  381. package/dist/src/graph/kg/extraction/code/languages/typescript.js.map +1 -0
  382. package/dist/src/graph/kg/extraction/code/liquid-extractor.d.ts +3 -0
  383. package/dist/src/graph/kg/extraction/code/liquid-extractor.d.ts.map +1 -0
  384. package/dist/src/graph/kg/extraction/code/liquid-extractor.js +117 -0
  385. package/dist/src/graph/kg/extraction/code/liquid-extractor.js.map +1 -0
  386. package/dist/src/graph/kg/extraction/code/mybatis-extractor.d.ts +3 -0
  387. package/dist/src/graph/kg/extraction/code/mybatis-extractor.d.ts.map +1 -0
  388. package/dist/src/graph/kg/extraction/code/mybatis-extractor.js +84 -0
  389. package/dist/src/graph/kg/extraction/code/mybatis-extractor.js.map +1 -0
  390. package/dist/src/graph/kg/extraction/code/plugin-engine.d.ts +35 -0
  391. package/dist/src/graph/kg/extraction/code/plugin-engine.d.ts.map +1 -0
  392. package/dist/src/graph/kg/extraction/code/plugin-engine.js +573 -0
  393. package/dist/src/graph/kg/extraction/code/plugin-engine.js.map +1 -0
  394. package/dist/src/graph/kg/extraction/code/plugin-types.d.ts +95 -0
  395. package/dist/src/graph/kg/extraction/code/plugin-types.d.ts.map +1 -0
  396. package/dist/src/graph/kg/extraction/code/plugin-types.js +5 -0
  397. package/dist/src/graph/kg/extraction/code/plugin-types.js.map +1 -0
  398. package/dist/src/graph/kg/extraction/code/svelte-extractor.d.ts +3 -0
  399. package/dist/src/graph/kg/extraction/code/svelte-extractor.d.ts.map +1 -0
  400. package/dist/src/graph/kg/extraction/code/svelte-extractor.js +92 -0
  401. package/dist/src/graph/kg/extraction/code/svelte-extractor.js.map +1 -0
  402. package/dist/src/graph/kg/extraction/code/tree-sitter-types.d.ts +61 -0
  403. package/dist/src/graph/kg/extraction/code/tree-sitter-types.d.ts.map +1 -0
  404. package/dist/src/graph/kg/extraction/code/tree-sitter-types.js +53 -0
  405. package/dist/src/graph/kg/extraction/code/tree-sitter-types.js.map +1 -0
  406. package/dist/src/graph/kg/extraction/code/tree-sitter.d.ts +55 -0
  407. package/dist/src/graph/kg/extraction/code/tree-sitter.d.ts.map +1 -0
  408. package/dist/src/graph/kg/extraction/code/tree-sitter.js +227 -0
  409. package/dist/src/graph/kg/extraction/code/tree-sitter.js.map +1 -0
  410. package/dist/src/graph/kg/extraction/code/vue-extractor.d.ts +6 -0
  411. package/dist/src/graph/kg/extraction/code/vue-extractor.d.ts.map +1 -0
  412. package/dist/src/graph/kg/extraction/code/vue-extractor.js +109 -0
  413. package/dist/src/graph/kg/extraction/code/vue-extractor.js.map +1 -0
  414. package/dist/src/graph/kg/extraction/code/wasm-stability.d.ts +44 -0
  415. package/dist/src/graph/kg/extraction/code/wasm-stability.d.ts.map +1 -0
  416. package/dist/src/graph/kg/extraction/code/wasm-stability.js +140 -0
  417. package/dist/src/graph/kg/extraction/code/wasm-stability.js.map +1 -0
  418. package/dist/src/graph/kg/extraction/knowledge/codebase-extractor.d.ts +3 -0
  419. package/dist/src/graph/kg/extraction/knowledge/codebase-extractor.d.ts.map +1 -0
  420. package/dist/src/graph/kg/extraction/knowledge/codebase-extractor.js +149 -0
  421. package/dist/src/graph/kg/extraction/knowledge/codebase-extractor.js.map +1 -0
  422. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts +4 -0
  423. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts.map +1 -0
  424. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js +114 -0
  425. package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -0
  426. package/dist/src/graph/kg/extraction/knowledge/issue-extractor.d.ts +3 -0
  427. package/dist/src/graph/kg/extraction/knowledge/issue-extractor.d.ts.map +1 -0
  428. package/dist/src/graph/kg/extraction/knowledge/issue-extractor.js +84 -0
  429. package/dist/src/graph/kg/extraction/knowledge/issue-extractor.js.map +1 -0
  430. package/dist/src/graph/kg/extraction/knowledge/spec-extractor.d.ts +3 -0
  431. package/dist/src/graph/kg/extraction/knowledge/spec-extractor.d.ts.map +1 -0
  432. package/dist/src/graph/kg/extraction/knowledge/spec-extractor.js +173 -0
  433. package/dist/src/graph/kg/extraction/knowledge/spec-extractor.js.map +1 -0
  434. package/dist/src/graph/kg/extraction/knowledge/wiki-extractor.d.ts +3 -0
  435. package/dist/src/graph/kg/extraction/knowledge/wiki-extractor.d.ts.map +1 -0
  436. package/dist/src/graph/kg/extraction/knowledge/wiki-extractor.js +165 -0
  437. package/dist/src/graph/kg/extraction/knowledge/wiki-extractor.js.map +1 -0
  438. package/dist/src/graph/kg/extraction/orchestrator.d.ts +6 -0
  439. package/dist/src/graph/kg/extraction/orchestrator.d.ts.map +1 -0
  440. package/dist/src/graph/kg/extraction/orchestrator.js +220 -0
  441. package/dist/src/graph/kg/extraction/orchestrator.js.map +1 -0
  442. package/dist/src/graph/kg/index.d.ts +29 -0
  443. package/dist/src/graph/kg/index.d.ts.map +1 -0
  444. package/dist/src/graph/kg/index.js +35 -0
  445. package/dist/src/graph/kg/index.js.map +1 -0
  446. package/dist/src/graph/kg/query/context-builder.d.ts +38 -0
  447. package/dist/src/graph/kg/query/context-builder.d.ts.map +1 -0
  448. package/dist/src/graph/kg/query/context-builder.js +184 -0
  449. package/dist/src/graph/kg/query/context-builder.js.map +1 -0
  450. package/dist/src/graph/kg/query/index.d.ts +8 -0
  451. package/dist/src/graph/kg/query/index.d.ts.map +1 -0
  452. package/dist/src/graph/kg/query/index.js +6 -0
  453. package/dist/src/graph/kg/query/index.js.map +1 -0
  454. package/dist/src/graph/kg/query/scoring.d.ts +19 -0
  455. package/dist/src/graph/kg/query/scoring.d.ts.map +1 -0
  456. package/dist/src/graph/kg/query/scoring.js +158 -0
  457. package/dist/src/graph/kg/query/scoring.js.map +1 -0
  458. package/dist/src/graph/kg/query/search.d.ts +59 -0
  459. package/dist/src/graph/kg/query/search.d.ts.map +1 -0
  460. package/dist/src/graph/kg/query/search.js +158 -0
  461. package/dist/src/graph/kg/query/search.js.map +1 -0
  462. package/dist/src/graph/kg/query/traversal.d.ts +75 -0
  463. package/dist/src/graph/kg/query/traversal.d.ts.map +1 -0
  464. package/dist/src/graph/kg/query/traversal.js +420 -0
  465. package/dist/src/graph/kg/query/traversal.js.map +1 -0
  466. package/dist/src/graph/kg/resolution/callback-synthesizer.d.ts +41 -0
  467. package/dist/src/graph/kg/resolution/callback-synthesizer.d.ts.map +1 -0
  468. package/dist/src/graph/kg/resolution/callback-synthesizer.js +450 -0
  469. package/dist/src/graph/kg/resolution/callback-synthesizer.js.map +1 -0
  470. package/dist/src/graph/kg/resolution/frameworks/index.d.ts +18 -0
  471. package/dist/src/graph/kg/resolution/frameworks/index.d.ts.map +1 -0
  472. package/dist/src/graph/kg/resolution/frameworks/index.js +632 -0
  473. package/dist/src/graph/kg/resolution/frameworks/index.js.map +1 -0
  474. package/dist/src/graph/kg/resolution/import-resolver.d.ts +73 -0
  475. package/dist/src/graph/kg/resolution/import-resolver.d.ts.map +1 -0
  476. package/dist/src/graph/kg/resolution/import-resolver.js +257 -0
  477. package/dist/src/graph/kg/resolution/import-resolver.js.map +1 -0
  478. package/dist/src/graph/kg/resolution/index.d.ts +11 -0
  479. package/dist/src/graph/kg/resolution/index.d.ts.map +1 -0
  480. package/dist/src/graph/kg/resolution/index.js +7 -0
  481. package/dist/src/graph/kg/resolution/index.js.map +1 -0
  482. package/dist/src/graph/kg/resolution/knowledge-resolver.d.ts +22 -0
  483. package/dist/src/graph/kg/resolution/knowledge-resolver.d.ts.map +1 -0
  484. package/dist/src/graph/kg/resolution/knowledge-resolver.js +288 -0
  485. package/dist/src/graph/kg/resolution/knowledge-resolver.js.map +1 -0
  486. package/dist/src/graph/kg/resolution/name-matcher.d.ts +25 -0
  487. package/dist/src/graph/kg/resolution/name-matcher.d.ts.map +1 -0
  488. package/dist/src/graph/kg/resolution/name-matcher.js +162 -0
  489. package/dist/src/graph/kg/resolution/name-matcher.js.map +1 -0
  490. package/dist/src/graph/kg/schema.sql +215 -0
  491. package/dist/src/graph/kg/surface/cli.d.ts +3 -0
  492. package/dist/src/graph/kg/surface/cli.d.ts.map +1 -0
  493. package/dist/src/graph/kg/surface/cli.js +597 -0
  494. package/dist/src/graph/kg/surface/cli.js.map +1 -0
  495. package/dist/src/graph/kg/surface/hook-injector.d.ts +33 -0
  496. package/dist/src/graph/kg/surface/hook-injector.d.ts.map +1 -0
  497. package/dist/src/graph/kg/surface/hook-injector.js +172 -0
  498. package/dist/src/graph/kg/surface/hook-injector.js.map +1 -0
  499. package/dist/src/graph/kg/surface/index.d.ts +6 -0
  500. package/dist/src/graph/kg/surface/index.d.ts.map +1 -0
  501. package/dist/src/graph/kg/surface/index.js +5 -0
  502. package/dist/src/graph/kg/surface/index.js.map +1 -0
  503. package/dist/src/graph/kg/surface/mcp-tools.d.ts +20 -0
  504. package/dist/src/graph/kg/surface/mcp-tools.d.ts.map +1 -0
  505. package/dist/src/graph/kg/surface/mcp-tools.js +253 -0
  506. package/dist/src/graph/kg/surface/mcp-tools.js.map +1 -0
  507. package/dist/src/graph/kg/sync/incremental-sync.d.ts +24 -0
  508. package/dist/src/graph/kg/sync/incremental-sync.d.ts.map +1 -0
  509. package/dist/src/graph/kg/sync/incremental-sync.js +71 -0
  510. package/dist/src/graph/kg/sync/incremental-sync.js.map +1 -0
  511. package/dist/src/graph/kg/sync/index.d.ts +5 -0
  512. package/dist/src/graph/kg/sync/index.d.ts.map +1 -0
  513. package/dist/src/graph/kg/sync/index.js +4 -0
  514. package/dist/src/graph/kg/sync/index.js.map +1 -0
  515. package/dist/src/graph/kg/sync/watch-policy.d.ts +33 -0
  516. package/dist/src/graph/kg/sync/watch-policy.d.ts.map +1 -0
  517. package/dist/src/graph/kg/sync/watch-policy.js +90 -0
  518. package/dist/src/graph/kg/sync/watch-policy.js.map +1 -0
  519. package/dist/src/hooks/constants.d.ts +0 -2
  520. package/dist/src/hooks/constants.d.ts.map +1 -1
  521. package/dist/src/hooks/constants.js +0 -2
  522. package/dist/src/hooks/constants.js.map +1 -1
  523. package/dist/src/hooks/keyword-spec-injector.d.ts +6 -0
  524. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -1
  525. package/dist/src/hooks/keyword-spec-injector.js +157 -81
  526. package/dist/src/hooks/keyword-spec-injector.js.map +1 -1
  527. package/dist/src/hooks/kg-auto-init.d.ts +13 -0
  528. package/dist/src/hooks/kg-auto-init.d.ts.map +1 -0
  529. package/dist/src/hooks/kg-auto-init.js +38 -0
  530. package/dist/src/hooks/kg-auto-init.js.map +1 -0
  531. package/dist/src/hooks/kg-context-injector.d.ts +1 -3
  532. package/dist/src/hooks/kg-context-injector.d.ts.map +1 -1
  533. package/dist/src/hooks/kg-context-injector.js +12 -17
  534. package/dist/src/hooks/kg-context-injector.js.map +1 -1
  535. package/dist/src/hooks/kg-sync-hook.d.ts +1 -9
  536. package/dist/src/hooks/kg-sync-hook.d.ts.map +1 -1
  537. package/dist/src/hooks/kg-sync-hook.js +21 -90
  538. package/dist/src/hooks/kg-sync-hook.js.map +1 -1
  539. package/dist/src/hooks/spec-analytics.d.ts +1 -0
  540. package/dist/src/hooks/spec-analytics.d.ts.map +1 -1
  541. package/dist/src/hooks/spec-analytics.js +1 -3
  542. package/dist/src/hooks/spec-analytics.js.map +1 -1
  543. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  544. package/dist/src/hooks/spec-injector.js +65 -1
  545. package/dist/src/hooks/spec-injector.js.map +1 -1
  546. package/dist/src/hooks/workspace.d.ts +4 -2
  547. package/dist/src/hooks/workspace.d.ts.map +1 -1
  548. package/dist/src/hooks/workspace.js +6 -2
  549. package/dist/src/hooks/workspace.js.map +1 -1
  550. package/dist/src/i18n/locales/en.d.ts.map +1 -1
  551. package/dist/src/i18n/locales/en.js +52 -9
  552. package/dist/src/i18n/locales/en.js.map +1 -1
  553. package/dist/src/i18n/locales/zh.d.ts.map +1 -1
  554. package/dist/src/i18n/locales/zh.js +52 -9
  555. package/dist/src/i18n/locales/zh.js.map +1 -1
  556. package/dist/src/i18n/types.d.ts +40 -4
  557. package/dist/src/i18n/types.d.ts.map +1 -1
  558. package/dist/src/tools/__tests__/domain-search-debug.d.ts +2 -0
  559. package/dist/src/tools/__tests__/domain-search-debug.d.ts.map +1 -0
  560. package/dist/src/tools/__tests__/domain-search-debug.js +32 -0
  561. package/dist/src/tools/__tests__/domain-search-debug.js.map +1 -0
  562. package/dist/src/tools/domain-loader.d.ts +63 -0
  563. package/dist/src/tools/domain-loader.d.ts.map +1 -0
  564. package/dist/src/tools/domain-loader.js +295 -0
  565. package/dist/src/tools/domain-loader.js.map +1 -0
  566. package/dist/src/tools/domain-matcher.d.ts +24 -0
  567. package/dist/src/tools/domain-matcher.d.ts.map +1 -0
  568. package/dist/src/tools/domain-matcher.js +117 -0
  569. package/dist/src/tools/domain-matcher.js.map +1 -0
  570. package/dist/src/tools/domain-scanner.d.ts +32 -0
  571. package/dist/src/tools/domain-scanner.d.ts.map +1 -0
  572. package/dist/src/tools/domain-scanner.js +263 -0
  573. package/dist/src/tools/domain-scanner.js.map +1 -0
  574. package/dist/src/tools/domain-schema.d.ts +18 -0
  575. package/dist/src/tools/domain-schema.d.ts.map +1 -0
  576. package/dist/src/tools/domain-schema.js +104 -0
  577. package/dist/src/tools/domain-schema.js.map +1 -0
  578. package/dist/src/tools/spec-entry-parser.d.ts +1 -0
  579. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
  580. package/dist/src/tools/spec-entry-parser.js +1 -0
  581. package/dist/src/tools/spec-entry-parser.js.map +1 -1
  582. package/dist/src/tools/spec-loader.d.ts +5 -0
  583. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  584. package/dist/src/tools/spec-loader.js +10 -2
  585. package/dist/src/tools/spec-loader.js.map +1 -1
  586. package/dist/src/tui/install-ui/ConfigPanel.d.ts.map +1 -1
  587. package/dist/src/tui/install-ui/ConfigPanel.js +9 -1
  588. package/dist/src/tui/install-ui/ConfigPanel.js.map +1 -1
  589. package/dist/src/tui/install-ui/GroupedHub.d.ts +55 -0
  590. package/dist/src/tui/install-ui/GroupedHub.d.ts.map +1 -0
  591. package/dist/src/tui/install-ui/GroupedHub.js +210 -0
  592. package/dist/src/tui/install-ui/GroupedHub.js.map +1 -0
  593. package/dist/src/tui/install-ui/HooksConfig.d.ts +10 -5
  594. package/dist/src/tui/install-ui/HooksConfig.d.ts.map +1 -1
  595. package/dist/src/tui/install-ui/HooksConfig.js +83 -18
  596. package/dist/src/tui/install-ui/HooksConfig.js.map +1 -1
  597. package/dist/src/tui/install-ui/InstallConfirm.d.ts +1 -30
  598. package/dist/src/tui/install-ui/InstallConfirm.d.ts.map +1 -1
  599. package/dist/src/tui/install-ui/InstallConfirm.js +72 -12
  600. package/dist/src/tui/install-ui/InstallConfirm.js.map +1 -1
  601. package/dist/src/tui/install-ui/InstallExecution.d.ts +4 -21
  602. package/dist/src/tui/install-ui/InstallExecution.d.ts.map +1 -1
  603. package/dist/src/tui/install-ui/InstallExecution.js +89 -260
  604. package/dist/src/tui/install-ui/InstallExecution.js.map +1 -1
  605. package/dist/src/tui/install-ui/InstallFlow.d.ts +3 -7
  606. package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
  607. package/dist/src/tui/install-ui/InstallFlow.js +45 -267
  608. package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
  609. package/dist/src/tui/install-ui/InstallHub.d.ts.map +1 -1
  610. package/dist/src/tui/install-ui/InstallHub.js +2 -4
  611. package/dist/src/tui/install-ui/InstallHub.js.map +1 -1
  612. package/dist/src/tui/install-ui/InstallResult.d.ts.map +1 -1
  613. package/dist/src/tui/install-ui/InstallResult.js +1 -5
  614. package/dist/src/tui/install-ui/InstallResult.js.map +1 -1
  615. package/dist/src/tui/install-ui/index.d.ts +5 -1
  616. package/dist/src/tui/install-ui/index.d.ts.map +1 -1
  617. package/dist/src/tui/install-ui/index.js +1 -0
  618. package/dist/src/tui/install-ui/index.js.map +1 -1
  619. package/dist/src/tui/install-ui/types.d.ts +39 -0
  620. package/dist/src/tui/install-ui/types.d.ts.map +1 -1
  621. package/dist/src/tui/install-ui/types.js +1 -1
  622. package/dist/src/tui/install-ui/types.js.map +1 -1
  623. package/dist/src/tui/install-ui/useInstallFlowState.d.ts +69 -0
  624. package/dist/src/tui/install-ui/useInstallFlowState.d.ts.map +1 -0
  625. package/dist/src/tui/install-ui/useInstallFlowState.js +288 -0
  626. package/dist/src/tui/install-ui/useInstallFlowState.js.map +1 -0
  627. package/dist/src/tui/shared/components.d.ts +4 -0
  628. package/dist/src/tui/shared/components.d.ts.map +1 -1
  629. package/dist/src/tui/shared/components.js +4 -0
  630. package/dist/src/tui/shared/components.js.map +1 -1
  631. package/dist/src/tui/shared/index.d.ts +1 -1
  632. package/dist/src/tui/shared/index.d.ts.map +1 -1
  633. package/dist/src/tui/shared/index.js +1 -1
  634. package/dist/src/tui/shared/index.js.map +1 -1
  635. package/dist/src/tui/shared/tokens.d.ts +5 -5
  636. package/dist/src/tui/shared/tokens.js +5 -5
  637. package/dist/src/tui/shared/tokens.js.map +1 -1
  638. package/dist/src/types/index.d.ts +9 -0
  639. package/dist/src/types/index.d.ts.map +1 -1
  640. package/dist/src/utils/cli-format.d.ts +2 -1
  641. package/dist/src/utils/cli-format.d.ts.map +1 -1
  642. package/dist/src/utils/cli-format.js +14 -3
  643. package/dist/src/utils/cli-format.js.map +1 -1
  644. package/dist/src/utils/cooldown-guard.d.ts +17 -0
  645. package/dist/src/utils/cooldown-guard.d.ts.map +1 -0
  646. package/dist/src/utils/cooldown-guard.js +59 -0
  647. package/dist/src/utils/cooldown-guard.js.map +1 -0
  648. package/dist/src/utils/jsonl-log.d.ts.map +1 -1
  649. package/dist/src/utils/jsonl-log.js +2 -1
  650. package/dist/src/utils/jsonl-log.js.map +1 -1
  651. package/dist/src/utils/update-notices.js +17 -4
  652. package/dist/src/utils/update-notices.js.map +1 -1
  653. package/package.json +91 -92
  654. package/workflows/analyze.md +25 -49
  655. package/workflows/auto-test.md +699 -699
  656. package/workflows/blueprint.md +403 -431
  657. package/workflows/brainstorm.md +54 -195
  658. package/workflows/business-test.md +570 -570
  659. package/workflows/claude-instructions.md +23 -28
  660. package/workflows/codex-instructions.md +30 -58
  661. package/workflows/coding-philosophy.md +69 -69
  662. package/workflows/command-authoring.md +823 -823
  663. package/workflows/debug.md +43 -98
  664. package/workflows/delegate-usage.md +39 -241
  665. package/workflows/execute.md +4 -53
  666. package/workflows/finish-work.md +25 -0
  667. package/workflows/grill.md +12 -56
  668. package/workflows/harvest.md +22 -68
  669. package/workflows/init.md +148 -148
  670. package/workflows/instruction-authoring-guide.md +97 -0
  671. package/workflows/issue-execute.md +110 -110
  672. package/workflows/issue-gaps-analyze.codex.md +260 -260
  673. package/workflows/issue-gaps-analyze.md +216 -216
  674. package/workflows/issue-plan.md +110 -110
  675. package/workflows/issue.md +338 -346
  676. package/workflows/knowhow.md +0 -32
  677. package/workflows/learn.md +277 -277
  678. package/workflows/maestro-chain-execute.md +20 -20
  679. package/workflows/refactor.md +22 -44
  680. package/workflows/retrospective.md +16 -65
  681. package/workflows/review.md +446 -486
  682. package/workflows/roadmap.md +35 -132
  683. package/workflows/skill-authoring.md +265 -265
  684. package/workflows/spec-generate.md +470 -470
  685. package/workflows/specs-remove.md +104 -104
  686. package/workflows/sync.md +11 -41
  687. package/workflows/test-gen.md +226 -226
  688. package/workflows/test.md +385 -475
  689. package/workflows/ui-design.md +391 -391
  690. package/workflows/ui-style.md +199 -199
  691. package/workflows/updates/update-v3-setup.md +7 -15
  692. package/workflows/wiki-connect.md +151 -151
  693. package/workflows/wiki-digest.md +178 -178
  694. package/workflows/wiki-manage.md +109 -109
  695. package/dashboard/dist/assets/McpPage-Im6s4pGR.js +0 -21
  696. package/dashboard/dist/assets/SpecsPage-gr4KX51-.js +0 -36
  697. package/dashboard/dist/assets/folder-B8ODoZfb.js +0 -16
  698. package/dashboard/dist/assets/index-6-yE5Yl9.css +0 -1
  699. package/dashboard/dist/assets/pen-line-CR8GaHt-.js +0 -6
  700. package/workflows/cli-tools-usage.md +0 -252
  701. package/workflows/delegate-protocol.codex.md +0 -65
@@ -14,874 +14,864 @@ allowed-tools:
14
14
  ---
15
15
  <!-- Open-standard mirror generated by scripts/build-agents-standard.mjs — do not edit; re-run after editing .claude/ source. -->
16
16
 
17
- <purpose>
18
- Closed-loop runner for the maestro workflow lifecycle.
19
- Single skill every invocation routes by session state, executes one tick, and self-invokes `invoke_skill("maestro-ralph-beta")` until all `completion_confirmed` or paused.
20
-
21
- Entry points:
22
- - **`/maestro-ralph-beta "intent"`** — New session: infer → decompose → build → tick
23
- - **`/maestro-ralph-beta continue`** Resume: locate session tick
24
- - **`/maestro-ralph-beta status`** — Display session progress
25
-
26
- Tick kinds:
27
- - **执行 step** (`step.decision == null`): `maestro ralph next` inline `maestro ralph complete` → self-invoke
28
- - **decision step** (`step.decision != null`): inline evaluate apply verdict → self-invoke
29
-
30
- Session: `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json`
31
- </purpose>
32
-
33
- <context>
34
- $ARGUMENTS — intent text, flags, or keywords.
35
-
36
- **Parse:**
37
- ```
38
- -y flag → auto_confirm = true
39
- .md/.txt path → input_doc (supplementary context only, NEVER substitutes lifecycle stages)
40
- "status" → status mode
41
- "continue" resume mode
42
- Remaining → intent (new session)
43
- ```
44
-
45
- **State files:**
46
- - `.workflow/state.json`artifact registry, milestones, phases
47
- - `.workflow/roadmap.md` — milestone/phase structure
48
- - `.workflow/.maestro/ralph-*/status.json` ralph session state
49
- </context>
50
-
51
- <invariants>
52
- 1. **Self-invocation = `invoke_skill("maestro-ralph-beta")`**每次 tick 末尾强制自调用;除非 router 命中终止条件
53
- 2. **status.json 是唯一真源;写入权限分层**:
54
- - **Step 级字段**(`step.completion_*`, `step.status` 执行 step running↔completed, `step.load.*`, `step.retried`,以及执行 step 的 `active_step_index` 占用/释放)→ 由 `maestro ralph next/complete/retry` CLI 写入
55
- - **会话级结构**(`session.status`, `passed_gates`, `steps[]` 增删/reindex, `task_decomposition[*]`, `boundary_contract`, `context.*`, `scope_verdict`, `consec_exit2_count`, decision step 的 `status`/`retry_count`/`active_step_index` 占用与释放)→ 由 maestro-ralph-beta 写入
56
- 3. **执行 step 通过 `maestro ralph next` 加载** — CLI 解析 frontmatter + `<required_reading>` + `<deferred_reading>`、读 required 全文、拼 prompt、写 `step.load.*` + `active_step_index` + `step.status="running"`
57
- 4. **decision step 内联评估** — 不 handoff、不调 ralph next;按 `step.decision` 分派 A_DECISION_*
58
- 5. **每个 step 必须 `completion_confirmed: true`** — 由 `maestro ralph complete N --status DONE|DONE_WITH_CONCERNS` 写入;STATUS 仅 `DONE | DONE_WITH_CONCERNS | NEEDS_RETRY | BLOCKED`
59
- 6. **command_path A_BUILD_STEPS 解析** — 通过 `maestro ralph skills --platform agent --json --quiet` 预校验(project 覆盖 global,只扫描 `.claude/commands/`);未命中标 `command_scope = "missing"`
60
- 7. **required reading CLI 加载** — 缺失 → 退出码 1(E007)→ pause session;ralph build 阶段不读 .md 内容
61
- 8. **active_step_index 一致性由 CLI 维护** — 同一 session 同时最多一个 step 持有;E008/E009 直接退出
62
- 9. **Decomposition is outcome-oriented** — sub-goals 为可观测交付,禁止 lifecycle 复刻;`/goal` 由用户输入
63
- 10. **planning_mode governs arg granularity** — `unified` → skill args 无 `{phase}`;`independent` → 含 `{phase}`
64
- 11. **task_decomposition 驱动 steps[] 动态生长** — `post-goal-audit` 按 unmet 子目标插入 scoped mini-loop;字段累加,既有字段不删不改
65
- </invariants>
66
-
67
- <router>
68
-
69
- 每次进入 skill 先执行 router,按顺序匹配,先命中先用。术语:
70
- - **active session** = `.workflow/.maestro/ralph-*/status.json` 中 `status ∈ {running, paused}` 的最新会话
71
- - **live session** = active session `status == "running"`
72
- - **active_step** = `session.steps[session.active_step_index]`
73
-
74
- ```
75
- 1. intent == "status" → S_STATUS END
76
- 2. intent == "continue" AND active session exists A_RESUME_SESSION S_TICK_LOCATE
77
- 3. intent non-empty AND intent ∉ {"continue","status"} AND active session exists
78
- → S_FALLBACK → END
79
- display "已有 active session {id};先 /maestro-ralph-beta continue 续跑或显式 abandon"
80
- 4. live session AND active_step.status == "running" AND active_step.decision != null
81
- → S_TICK_LOCATE → S_TICK_DECISION
82
- 5. live session AND has pending step → S_TICK_LOCATE
83
- 6. live session AND all completion_confirmed → S_COMPLETE → END
84
- 7. active session AND session.status == "paused" AND no intent → S_FALLBACK → END
85
- display "Session {id} paused;输入 /maestro-ralph-beta continue 显式恢复"
86
- 8. no active session AND intent non-empty → S_BUILD_PHASE
87
- 9. no active session AND no intent → S_FALLBACK → END
88
- ```
89
-
90
- </router>
91
-
92
- <state_machine>
93
-
94
- <states>
95
- # Build phase (one-time per session)
96
- S_RESOLVE_PHASE 解析 phase + phase_is_new + D-007 milestone PERSIST: session.phase, session.phase_is_new, session.milestone
97
- S_INFER 推断 lifecycle_position PERSIST: session.lifecycle_position
98
- S_RESOLVE_SCOPE macro analyze conclusions.scope_verdict PERSIST: session.scope_verdict, session.analyze_macro_id
99
- S_QUALITY_MODE 决定质量管线模式 PERSIST: session.quality_mode
100
- S_PLANNING_MODE 决定统一/独立规划模式 PERSIST: session.planning_mode
101
- S_DECOMPOSE — 边界澄清、写执行准则+子目标清单 PERSIST: session.boundary_contract, .execution_criteria, .task_decomposition
102
- S_BUILD_CHAIN — 构建步骤链 PERSIST: session.steps[]
103
- S_CREATE_SESSION status.json PERSIST: session (全量)
104
- S_CONFIRM 用户确认 PERSIST:
105
-
106
- # Tick phase (per step)
107
- S_TICK_LOCATE — 定位 session + 找 active step PERSIST: —
108
- S_TICK — 分派执行 step 或 decision step PERSIST: step.status, active_step_index
109
- S_TICK_EXEC — 执行 step:ralph next → inline → ralph complete PERSIST: via CLI
110
- S_TICK_DECISION — decision step:内联评估 + 应用裁决 PERSIST: session.steps[], passed_gates, decisions.ndjson
111
- S_HANDLE_FAIL — 处理执行失败 PERSIST: step.status, session.status
112
-
113
- # Terminal
114
- S_STATUS — 显示 session 进度 PERSIST: —
115
- S_COMPLETE — 收尾 PERSIST: session.status = "completed"
116
- S_FALLBACK — 引导用户输入或退出 PERSIST:
117
- </states>
118
-
119
- <transitions>
120
-
121
- # === Build phase ===
122
-
123
- S_BUILD_PHASE (entry):
124
- → S_RESOLVE_PHASE
125
-
126
- S_RESOLVE_PHASE:
127
- → S_INFER WHEN: phase resolved or null DO: A_RESOLVE_PHASE
128
- → S_FALLBACK WHEN: ambiguous
129
- GUARD: auto_confirm does NOT skip phase ambiguity
130
-
131
- S_INFER:
132
- S_RESOLVE_SCOPE WHEN: position resolved DO: A_INFER_POSITION
133
- S_FALLBACK WHEN: cannot infer
134
-
135
- S_RESOLVE_SCOPE:
136
- S_QUALITY_MODE DO: A_RESOLVE_SCOPE_VERDICT
137
- GUARD: position {brainstorm, blueprint, init} skip (scope_verdict = null)
138
-
139
- S_QUALITY_MODE:
140
- → S_PLANNING_MODE DO: A_DETERMINE_QUALITY_MODE
141
-
142
- S_PLANNING_MODE:
143
- → S_DECOMPOSE DO: A_DETERMINE_PLANNING_MODE
144
- GUARD: lifecycle_position ∈ {brainstorm, blueprint, init, analyze-macro, roadmap} → skip (force independent)
145
-
146
- S_DECOMPOSE:
147
- → S_BUILD_CHAIN DO: A_DECOMPOSE_TASKS
148
- GUARD: broad intent → MUST clarify boundary even if auto_confirm
149
- GUARD: narrow intent auto-derive, skip questions
150
- GUARD: position {brainstorm, blueprint, init} → skip decomposition
151
-
152
- S_BUILD_CHAIN:
153
- S_CREATE_SESSION DO: A_BUILD_STEPS
154
-
155
- S_CREATE_SESSION:
156
- S_CONFIRM WHEN: not auto_confirm DO: A_CREATE_SESSION
157
- S_TICK_LOCATE WHEN: auto_confirm DO: A_CREATE_SESSION + invoke_skill("maestro-ralph-beta")
158
-
159
- S_CONFIRM:
160
- → S_TICK_LOCATE WHEN: user selects "Proceed" DO: invoke_skill("maestro-ralph-beta")
161
- S_BUILD_CHAIN WHEN: user selects "Edit"
162
- END WHEN: user selects "Cancel"
163
-
164
- # === Tick phase ===
165
-
166
- S_TICK_LOCATE: Entry: A_LOCATE_SESSION
167
- S_TICK WHEN: next_pending_step != null
168
- S_COMPLETE WHEN: next_pending_step == null
169
- → S_FALLBACK WHEN: no active session
170
-
171
- S_TICK:
172
- → S_TICK_DECISION WHEN: next_pending_step.decision != null DO: A_CLAIM_DECISION
173
- S_TICK_EXEC WHEN: next_pending_step.decision == null DO: A_RESOLVE_ARGS
174
-
175
- S_TICK_EXEC: Entry: A_EXEC_STEP
176
- → S_TICK_LOCATE WHEN: ralph complete with DONE|DONE_WITH_CONCERNS DO: invoke_skill("maestro-ralph-beta")
177
- S_TICK_LOCATE WHEN: ralph next exit == 2 DO: invoke_skill("maestro-ralph-beta")
178
- → S_HANDLE_FAIL WHEN: ralph next exit == 1 OR exit >= 3
179
- → S_HANDLE_FAIL WHEN: ralph complete with NEEDS_RETRY|BLOCKED
180
-
181
- S_TICK_DECISION: (gate 名取自 `step.decision`)
182
- S_TICK_APPLY WHEN: quality-gate (post-execute, post-business-test, post-review, post-test)
183
- DO: A_DELEGATE_EVALUATE
184
- S_TICK_APPLY WHEN: goal-gate (post-goal-audit)
185
- DO: A_GOAL_AUDIT_EVALUATE
186
- S_TICK_APPLY WHEN: scope-gate (post-analyze-scope)
187
- DO: A_SCOPE_EVALUATE
188
- S_TICK_APPLY WHEN: structural (post-milestone, post-debug-escalate)
189
- DO: A_STRUCTURAL_EVALUATE
190
-
191
- S_TICK_APPLY:
192
- → S_TICK_LOCATE WHEN: verdict == "proceed" DO: A_APPLY_PROCEED + invoke_skill("maestro-ralph-beta")
193
- → S_TICK_LOCATE WHEN: post-goal-audit + unmet sub-goals DO: A_APPLY_GOAL_FIX + invoke_skill("maestro-ralph-beta")
194
- → S_TICK_LOCATE WHEN: post-goal-audit + all sub-goals met DO: A_APPLY_GOAL_DONE + invoke_skill("maestro-ralph-beta")
195
- S_TICK_LOCATE WHEN: post-analyze-scope DO: A_APPLY_SCOPE_VERDICT + invoke_skill("maestro-ralph-beta")
196
- → S_TICK_LOCATE WHEN: verdict == "fix" DO: A_APPLY_FIX + invoke_skill("maestro-ralph-beta")
197
- → S_TICK_LOCATE WHEN: verdict == "escalate" DO: A_APPLY_ESCALATE + invoke_skill("maestro-ralph-beta")
198
- → S_TICK_LOCATE WHEN: post-milestone + standard + next milestone DO: A_ADVANCE_MILESTONE + invoke_skill("maestro-ralph-beta")
199
- → END WHEN: post-milestone + standard + no next milestone DO: mark completed
200
- END WHEN: post-milestone + adhoc DO: mark completed (adhoc self-contained)
201
- END WHEN: post-debug-escalate (always STOP) DO: A_PAUSE_ESCALATE
202
- GUARD: retry_count >= max_retries force escalate
203
- GUARD: confidence_score < 60 AND proceed → override to fix
204
- GUARD: confidence_score > 95 AND fix AND retry > 0 → suggest proceed
205
- GUARD: auto_confirm → skip user prompt, apply adjusted verdict
206
- GUARD: not auto_confirm → ask_user with override options
207
-
208
- S_HANDLE_FAIL:
209
- → S_TICK_LOCATE WHEN: auto + not retried DO: A_RETRY + invoke_skill("maestro-ralph-beta")
210
- → END WHEN: auto + retried DO: A_PAUSE_SESSION
211
- → S_TICK_LOCATE WHEN: interactive + user selects retry DO: A_RETRY + invoke_skill("maestro-ralph-beta")
212
- → S_TICK_LOCATE WHEN: interactive + user selects skip DO: A_SKIP_STEP + invoke_skill("maestro-ralph-beta")
213
- END WHEN: interactive + user selects abort DO: A_PAUSE_SESSION
214
-
215
- # === Terminal ===
216
-
217
- S_STATUS:
218
- → END DO: A_SHOW_STATUS
219
-
220
- S_COMPLETE:
221
- END DO: A_COMPLETE_SESSION
222
-
223
- S_FALLBACK:
224
- S_BUILD_PHASE WHEN: user provides intent (no active session) DO: ask_user
225
- S_TICK_LOCATE WHEN: user selects "continue active session" DO: A_RESUME_SESSION + invoke_skill("maestro-ralph-beta")
226
- END WHEN: user cancels OR no active session for resume
227
-
228
- </transitions>
229
-
230
- <actions>
231
-
232
- ### A_SHOW_STATUS
233
-
234
- 1. Find latest ralph session (by created_at)
235
- 2. Display: Session, Status, Position, Progress, Current step
236
- 3. List steps: [✓] completion_confirmed, [▸] current, [ ] pending, [◆] decision(`step.decision` 非空);执行 step 附 `command_scope`(global/project) + `command_path`
237
- 4. If `task_decomposition` present (absent → skip):
238
- ```
239
- Sub-goals ({done}/{total}) source: {session_dir}/status.json#/task_decomposition
240
- [x] G1 done_when={done_when} evidence={evidence} confirmed={completion_confirmed}
241
- [ ] G2 done_when={done_when} evidence={evidence} confirmed=false ◀ unmet
242
- ```
243
-
244
- ### A_RESOLVE_PHASE
245
-
246
- 产出 `phase` + `phase_is_new` + `milestone`(D-007 反查)。
247
-
248
- **Priority:**
249
-
250
- | Step | 行为 | phase_is_new |
251
- |------|------|--------------|
252
- | 1 | intent 匹配 `phase\s*(\d+)` 取 state.json 对应 phase | false |
253
- | 2 | intent 派生短语 → 在 `state.json.milestones[*].phase_slugs` / `artifacts[*].path` 查找 | false (匹配) / true (无匹配) |
254
- | 3 | 未派生 → 取最新 in-progress artifact 的 phase | false |
255
- | 4 | 仍无 → state.json 首个 incomplete phase | false |
256
- | 5 | position 将是 brainstorm/blueprint/init/roadmap/analyze-macro → phase = null | n/a |
257
- | 6 | 仍模糊 `ask_user` | 由用户回答确定 |
258
-
259
- **D-007 Phase→Milestone 反查**(数字 phase 已解析时):
260
- ```
261
- resolve_milestone(phase_number):
262
- for ms in state.json.milestones:
263
- if str(phase_number) in ms.phase_slugs: return ms.id
264
- return state.json.current_milestone # fallback
265
- ```
266
- 写入 `session.milestone`。
267
-
268
- **写入 session**: `phase`, `phase_is_new`, `milestone`。
269
-
270
- **新派生 phase milestone 处理**:
271
- - state.json 当前 milestone active 沿用,新增 phase
272
- - intent 派生新 milestone 名 → 写入 session 仅作标签;`state.json.milestones` 由 `maestro-roadmap` / `maestro-milestone-release` 创建
273
-
274
- ### A_INFER_POSITION
275
-
276
- **Intent-based overrides** (按顺序匹配,先命中先用):
277
-
278
- | Pattern | Position |
279
- |---------|----------|
280
- | brainstorm / 头脑风暴 / 探索 / ideate / 设计思路 | `brainstorm` |
281
- | blueprint / 规格 / 正式文档 / spec-generate / 7-phase | `blueprint` |
282
- | broad/medium intent 无数字 phase (重构/全面/重写/迁移/新功能 X) | `analyze-macro` |
283
-
284
- **Bootstrap detection:**
285
-
286
- | Condition | Position |
287
- |-----------|----------|
288
- | No `.workflow/` + no source files | `brainstorm` |
289
- | No `.workflow/` + has source files | `init` |
290
- | Has `.workflow/` but no state.json | `init` |
291
- | Has state.json | phase-aware artifact inference |
292
-
293
- **Phase-aware artifact inference**(基于 `session.phase` + `session.phase_is_new`,artifact `session.phase` 过滤):
294
-
295
- | Condition | Position |
296
- |-----------|----------|
297
- | `phase_is_new == true` | `analyze` |
298
- | no milestones AND no roadmap.md AND has analyze macro artifact | `roadmap` |
299
- | no milestones AND no roadmap.md AND no analyze artifact | `analyze-macro` |
300
- | `phase == null` | n/a |
301
- | phase 已存在 + 无任何 artifact | `analyze` |
302
- | phase 已存在 + 最新 artifact = analyze | `plan` |
303
- | phase 已存在 + 最新 artifact = plan | `execute` |
304
- | phase 已存在 + 最新 artifact = execute | `verify` |
305
- | phase 已存在 + 最新 artifact = verify | refine from result files |
306
-
307
- **Refine from verify results:**
308
-
309
- | Condition | Position |
310
- |-----------|----------|
311
- | verification.json: passed==false or gaps[] | `verify-failed` |
312
- | passed==true, no review.json | `business-test` |
313
- | review.json: verdict=="BLOCK" | `review-failed` |
314
- | review.json: verdict!="BLOCK" | `test` |
315
- | uat.md: all passed | `milestone-audit` |
316
- | uat.md: has failures | `test-failed` |
317
-
318
- ### A_RESOLVE_SCOPE_VERDICT
319
-
320
- 仅当 `lifecycle_position {analyze-macro, roadmap, plan}` 且存在最新 analyze artifact 时执行。
321
-
322
- 1. 定位最新 macro analyze artifact(`type=="analyze"` 且 `scope=="macro"`,按 created_at DESC)→ `session.analyze_macro_id = ANL-xxx`
323
- 2. 读 `{artifact_path}/conclusions.json` 的 `scope_verdict` 字段(`large | medium | small`)
324
- 3. 写入 `session.scope_verdict`;缺失 → `unknown`
325
- 4. 路由建议:
326
-
327
- | scope_verdict | 链路 |
328
- |---------------|------|
329
- | `large` | analyze-macro roadmap analyzeplanexecute... |
330
- | `medium` / `small` | analyze-macroplan --from analyze:{ANL_ID}execute → ... |
331
- | `unknown` | 默认 large;post-analyze-scope 节点再纠正 |
332
-
333
- ### A_DETERMINE_QUALITY_MODE
334
-
335
- `session.quality_mode_override`(CLI `--quality`),无则按规则推断:
336
-
337
- | Condition | Mode | Pipeline (verify 之后) |
338
- |-----------|------|-------------------------|
339
- | Has `specs/REQ-*.md` + 当前 phase 业务范围明确 | `full` | business-test → review → test-gen → test |
340
- | Default | `standard` | review → test-gen (当 coverage<80%) → test |
341
- | `--quality quick` | `quick` | review --tier quick |
342
-
343
- 写入 `session.quality_mode`。
344
-
345
- ### A_DETERMINE_PLANNING_MODE
346
-
347
- **Auto-resolve rules (按优先级):**
348
-
349
- | Condition | Mode |
350
- |-----------|------|
351
- | lifecycle_position {brainstorm, init, roadmap} | `independent` |
352
- | `phase_is_new == true` | `independent` |
353
- | intent 显式指定 phase 编号(如 "phase 2"、"P3") | `independent` |
354
- | milestone 仅含 1 phase | `independent` |
355
- | milestone 含多个 phase + `auto_confirm` | `unified` |
356
- | milestone 含多个 phase + 非 `auto_confirm` | ask_user |
357
-
358
- **ask_user** (仅当 milestone 含 ≥2 phase 且非 auto_confirm):
359
-
360
- ```
361
- question: "当前里程碑含 {N} 个 phase,选择规划模式?"
362
- options:
363
- - label: "统一规划 (Recommended)"
364
- description: "一次性分析+规划整个里程碑所有 phase,analyze/plan 走里程碑级,适合 phase 间关联紧密"
365
- - label: "独立规划"
366
- description: "逐个 phase 走完整生命周期(analyze→plan→execute→verify→...),适合 phase 间独立性高"
367
- ```
368
-
369
- 写入 `session.planning_mode`(`"unified"` `"independent"`)。
370
-
371
- ### A_DECOMPOSE_TASKS
372
-
373
- **1. Classify intent breadth:**
374
-
375
- | Pattern | Breadth | Clarify? |
376
- |---------|---------|----------|
377
- | 重构/全面/重写/重做/整体/迁移 · overhaul/migrate/rewrite/revamp | broad | MUST (ignores auto_confirm) |
378
- | named single file/function/bug, "fix X", "add Y to Z" | narrow | skip — auto-derive |
379
- | otherwise | medium | clarify unless auto_confirm |
380
-
381
- **2. Clarify boundary** (broad/medium) — `ask_user`, ≤3 rounds, options pre-filled from intent + a quick Glob/Grep scan of the target module:
382
-
383
- | Round | Question | Drives |
384
- |-------|----------|--------|
385
- | Scope | 哪些目录/文件/层在范围内?明确排除什么? | boundary_contract.in_scope / out_of_scope |
386
- | Constraints | 必须向后兼容?公共 API 冻结?行为/性能预算?测试门槛? | boundary_contract.constraints + execution_criteria |
387
- | Done | 什么可观测结果算"完成"?(如:测试全绿 + 行为零变更 + X 指标) | boundary_contract.definition_of_done |
388
-
389
- narrow → derive defaults from intent + codebase, skip questions.
390
-
391
- **3. Derive `execution_criteria`**: backward-compat、scope-freeze、test/coverage bar、fix-don't-hide、incremental commit。
392
-
393
- **4. Derive `task_decomposition`** (子目标清单 — outcome-oriented, NOT lifecycle stages). Each entry:
394
- ```json
395
- { "id": "G1", "goal": "<deliverable>", "boundary": "<in/out note>",
396
- "done_when": "<objectively checkable condition>",
397
- "evidence": "verification.json|review.json|uat.md|<test path>",
398
- "lifecycle": ["analyze","execute","verify"], "status": "pending" }
399
- ```
400
- `done_when` 必须客观可验证,且引用 ralph 已产出的 artifact;`lifecycle` 字段映射到产出 evidence 的生命周期 stage。
401
-
402
- **5. Persist**: `boundary_contract`, `execution_criteria`, `task_decomposition`。每个 sub-goal 初始化 `status: "pending"` + `completion_confirmed: false`。
403
-
404
- **6. Stage** the Goal Prompt (Appendix) for A_CREATE_SESSION to emit.
405
-
406
- ### A_BUILD_STEPS
407
-
408
- `session.lifecycle_position` 生成 steps `milestone-complete`。
409
-
410
- | Stage | invoke_skill(independent) | invoke_skill(unified) | Decision after | quality_mode |
411
- |-------|---------------------|-----------------|----------------|--------------|
412
- | brainstorm | `maestro-brainstorm "{intent}"` | *(same)* | — | all |
413
- | blueprint | `maestro-blueprint "{intent}"` | *(same)* | | all |
414
- | init | `maestro-init` | *(same)* | — | all |
415
- | analyze-macro | `maestro-analyze "{intent}"` | *(same)* | `post-analyze-scope` | all |
416
- | roadmap | `maestro-roadmap --from analyze:{analyze_macro_id}` | *(same)* | | all |
417
- | analyze | `maestro-analyze {phase}` | `maestro-analyze` | — | all |
418
- | plan | `maestro-plan {phase}` *(scope=phase)* / `maestro-plan --from analyze:{analyze_macro_id}` *(scope=standalone)* / `maestro-plan --from blueprint:{blueprint_id}` *(scope=standalone)* | `maestro-plan` | — | all |
419
- | execute | `maestro-execute {phase}` | `maestro-execute` | `post-execute` | all |
420
- | business-test | `quality-auto-test {phase}` | `quality-auto-test` | `post-business-test` | full only |
421
- | review | `quality-review {phase}` | `quality-review` | `post-review` | all (quick: append `--tier quick`) |
422
- | test-gen | `quality-auto-test {phase}` | `quality-auto-test` | | full / standard if coverage<80% |
423
- | test | `quality-test {phase}` | `quality-test` | `post-test` | full, standard |
424
- | milestone-audit | `maestro-milestone-audit` | *(same)* | | all |
425
- | goal-audit | *(decision-only)* | *(same)* | `post-goal-audit` | all (only if decomposed) |
426
- | milestone-complete | `maestro-milestone-complete` | *(same)* | `post-milestone` | all |
427
-
428
- **Build rules (按顺序应用):**
429
-
430
- 0. **planning_mode 选列**:`unified` invoke_skill(unified) 列;`independent` → invoke_skill(independent) 列
431
- 1. **起点**:从 `session.lifecycle_position` 开始
432
- 2. **跳过已完成**:跳过当前 milestone+phase 下已有 completed artifact stage(按 `session.phase` 过滤);unified 按 milestone 过滤
433
- 3. **quality_mode 过滤**:按 `session.quality_mode` 排除不匹配 stage
434
- 4. **决策节点**:每个 Decision after 非空的 stage 之后插入 `{ decision: "<gate>", retry_count: 0, max_retries: 2, command_scope: null, command_path: null }`
435
- 5. **goal-audit 插入**:`task_decomposition` 存在时,在最后一个 evidence-producing stage(verify/review/test)之后、`milestone-complete` 之前插入 `decision:post-goal-audit`
436
- 6. **终点硬约束**:chain `milestone-complete` 结尾
437
- 7. **goal_ref 传播**:`task_decomposition` 存在时,每个 step `step.stage ∈ g.lifecycle` 匹配 `step.goal_ref = g.id`(多匹配取字典序最小);decision 节点不打 goal_ref
438
- 8. **占位符**:independent 保留 `{phase}` `{intent}`;unified 不带 `{phase}`
439
- 9. **command_path 解析**(执行 step):
440
- - skill = args 前的第一个 token
441
- - `shell("maestro ralph skills --platform agent --json --quiet")` 拉取 global + project(project 覆盖 global),匹配 skill 名:
442
- - 命中 → `command_scope = "global" | "project"`,`command_path = <绝对路径>`
443
- - 未命中 `command_scope = "missing"`, `command_path = null` → A_CREATE_SESSION raise E006
444
- 10. **每个 step 初始化** `completion_confirmed: false`, `completion_status: null`, `completion_evidence: null`, `deferred_reads: []`, `load: null`
445
- 11. **scope_verdict gating**(仅当 chain 起点 = `analyze-macro`):
446
- - `scope_verdict ∈ {medium, small}` → 跳过 `roadmap` + `analyze` 两 stage;`plan` 选 standalone 列(`--from analyze:{analyze_macro_id}`),不带 `{phase}`
447
- - `scope_verdict == large` → 保留 `roadmap` + `analyze`;`plan` 选 phase 列(`{phase}`)
448
- - `scope_verdict == unknown` → 默认 large 路径;由 `post-analyze-scope` 决策节点在 macro analyze 完成后纠正(A_APPLY_SCOPE_VERDICT)
449
- 12. **--from 自动注入**:
450
- - `analyze_macro_id` 存在且当前 step 是 `roadmap` → args 改为 `--from analyze:{analyze_macro_id}`
451
- - `analyze_macro_id` 存在且 `scope_verdict {medium, small}` 且当前 step 是 `plan` → args 改为 `--from analyze:{analyze_macro_id}`
452
- - `blueprint_id` 存在 → 当前 step `plan` → args 改为 `--from blueprint:{blueprint_id}`(优先级低于 phase 数字参数)
453
- - 写入 `step.source_artifact_ref` 以便审计
454
- 13. **Milestone-ref**:含 `{phase}` 占位符的 step → `step.milestone_id = session.milestone`
455
- 14. **动态插入步骤**(A_APPLY_*)同样应用规则 7-13
456
-
457
- ### A_CREATE_SESSION
458
-
459
- 1. 校验所有 step 的 `command_scope != "missing"`;否则 raise E006 + 列出缺失 skill
460
- 2. Write `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json`
461
- 3. Display chain overview:每步显示 `{index}. {skill} [{command_scope}]`
462
- 4. `task_decomposition` 存在 display Goal Prompt block,继续进入 tick
463
-
464
- ### A_LOCATE_SESSION
465
-
466
- 1. If session_id provided → load `.workflow/.maestro/{session_id}/status.json`
467
- 2. Else: scan `.workflow/.maestro/*/status.json`, filter `status ∈ {"running","paused"}`, sort DESC by created_at, take first
468
- 3. Extract: session_id, source, steps[], phase, milestone, intent, auto_mode, context, cli_tool, active_step_index, status
469
- 4. 预探测 `next_pending_step`(瞬态,不持久化):
470
- - 若 `active_step_index != null` 且 `steps[active_step_index].status == "running"` `steps[active_step_index]`
471
- - 否则 `steps[]` 中 `status == "pending"` 的最小 index
472
- - 都无 → `null`
473
-
474
- ### A_RESUME_SESSION
475
-
476
- 1. A_LOCATE_SESSION 加载 active session
477
- 2. 清理 active_step_index:若 `active_step_index != null` 且 `steps[active_step_index].status {"completed","skipped","failed"}` `active_step_index = null`;其余保留
478
- 3. If `session.status == "paused"` → `session.status = "running"`
479
- 4. `session.consec_exit2_count = 0`
480
- 5. Display: `↻ Resume {session_id}`
481
-
482
- ### A_CLAIM_DECISION
483
-
484
- 1. 校验 `session.active_step_index ∈ {null, next_pending_step.index}`,否则 raise E008
485
- 2. `session.active_step_index = next_pending_step.index`
486
- 3. `steps[next_pending_step.index].status = "running"`
487
- 4. Display: `[{index}/{total}] {step.decision} Retry: {retry}/{max}`
488
-
489
- ### A_RESOLVE_ARGS
490
-
491
- **Placeholder substitution:**
492
-
493
- | Placeholder | Source |
494
- |-------------|--------|
495
- | `{phase}` | session.phase |
496
- | `{milestone}` | session.milestone |
497
- | `{intent}` | session.intent |
498
- | `{description}` | session.intent (alias) |
499
- | `{scratch_dir}` | session.context.scratch_dir or latest artifact path |
500
- | `{plan_dir}` | session.context.plan_dir |
501
- | `{analysis_dir}` | session.context.analysis_dir |
502
- | `{issue_id}` | session.context.issue_id |
503
- | `{milestone_num}` | session.context.milestone_num |
504
-
505
- **Per-skill enrichment** (when args empty or minimal):
506
-
507
- | Skill | Required context | Source |
508
- |-------|-----------------|--------|
509
- | maestro-brainstorm | topic | `"{intent}"` |
510
- | maestro-roadmap | description | `"{intent}"` |
511
- | maestro-analyze | phase or topic | `{phase}` or `"{intent}"` |
512
- | maestro-plan | phase or --dir | `{phase}`, or `--dir {scratch_dir}` |
513
- | maestro-execute | phase or --dir | `{phase}`, or `--dir {scratch_dir}` |
514
- | quality-debug | gap context | Read previous step's error/gap |
515
- | quality-* | phase | `{phase}` |
516
-
517
- **Artifact dir resolution for --dir:**
518
- ```
519
- Read state.jsonfilter artifacts by milestone + phase
520
- plan commands: latest type=="analyze"--dir .workflow/scratch/{path}
521
- execute commands: latest type=="plan"--dir .workflow/scratch/{path}
522
- ```
523
-
524
- Write enriched args back to status.json.
525
-
526
- ### A_EXEC_STEP
527
-
528
- 1. **Load** — `shell("maestro ralph next")`
529
- - exit 0 `session.consec_exit2_count = 0`,按 stdout 内联执行(进入步骤 2)
530
- - exit 2 → `session.consec_exit2_count += 1`;≥ 2 时抛 E010 → S_HANDLE_FAIL;否则 → S_TICK_LOCATE
531
- - exit 1 → E007 → S_HANDLE_FAIL
532
- - exit ≥ 3 → E008 → S_HANDLE_FAIL
533
- 2. **Inline execution** stdout 执行;deferred_reading 按需 Read
534
- 3. **Complete**:
535
- - `shell("maestro ralph complete N --status DONE [--evidence <path>]")`
536
- - `shell("maestro ralph complete N --status DONE_WITH_CONCERNS --concerns \"...\"")`
537
- - `shell("maestro ralph retry N")`
538
- - `shell("maestro ralph complete N --status BLOCKED --reason \"...\"")`
539
- 4. **Propagate context signals** — `PHASE: N` / `scratch_dir: path` / `BLP-xxx` 写入 `status.json.context`
540
-
541
- ### A_DELEGATE_EVALUATE
542
-
543
- 1. Resolve artifact dir: `.workflow/scratch/{artifact.path}/` with fallback glob
544
- 2. Parse decision metadata: `{ decision, retry_count, max_retries }`
545
- 3. Map result files:
546
- | Decision | Files |
547
- |----------|-------|
548
- | post-execute | verification.json |
549
- | post-business-test | .tests/auto-test/report.json |
550
- | post-review | review.json |
551
- | post-test | uat.md, .tests/test-results.json |
552
- 4. Check artifact for confidence sectioninclude as signal
553
- 5. Execute delegate (run_in_background, STOP, wait for callback):
554
- ```
555
- maestro delegate "PURPOSE: 评估 {decision} 质量门结果
556
- TASK: 读取结果 | 分析状态 | 评估严重性 | 给出建议
557
- EXPECTED: ---VERDICT--- STATUS/REASON/GAP_SUMMARY/CONFIDENCE(high|medium|low)/CONFIDENCE_SCORE(0-100)/WEAKEST_DIMENSION ---END---
558
- CONSTRAINTS: 只评估 | 置信度<60% 倾向 fix | retry {n}/{max} 达上限必须 escalate"
559
- --role analyze --mode analysis
560
- ```
561
- 6. On callback: parse verdict; if parse fails → fallback STATUS="fix"
562
- 7. Confidence adjustment: <60 + proceed → fix; >95 + fix + retry>0 → suggest proceed
563
- 8. **Decision log**: Append to `{session_dir}/decisions.ndjson`:
564
- ```json
565
- { "id": "DEC-{timestamp}", "timestamp": "{ISO}", "source": "ralph",
566
- "node_id": "{step.decision}", "type": "quality-gate",
567
- "verdict": "{adjusted_verdict}", "confidence_score": {N},
568
- "close_call": {N>=50 && N<=70}, "summary": "{REASON}" }
569
- ```
570
-
571
- ### A_STRUCTURAL_EVALUATE
572
-
573
- **post-milestone:**
574
- 1. Read state.json → 取已完成 milestone 对象
575
- 2. `milestone_obj.type` (default `"standard"`)
576
- 3. `type == "standard"`:next milestone 存在insert lifecycle steps;否则 → END
577
- 4. `type == "adhoc"`:END,`current_milestone = null`
578
-
579
- **post-debug-escalate:** STOP → paused,display "请人工介入"
580
-
581
- ### A_SCOPE_EVALUATE
582
-
583
- 由 `post-analyze-scope` 触发。
584
-
585
- 1. 定位刚完成的 macro analyze artifact → `analyze_macro_id`, `conclusions_path = {artifact_path}/conclusions.json`
586
- 2. 读取 `conclusions.scope_verdict`(`large | medium | small`),缺失 → `unknown`
587
- 3. 写入 `session.scope_verdict` + `session.analyze_macro_id`
588
- 4. Append `{session_dir}/decisions.ndjson`:
589
- ```json
590
- { "id": "DEC-{timestamp}", "type": "scope-gate",
591
- "source": "ralph", "node_id": "post-analyze-scope",
592
- "verdict": "{scope_verdict}", "analyze_macro_id": "{ANL_ID}" }
593
- ```
594
- 5. A_APPLY_SCOPE_VERDICT
595
-
596
- ### A_GOAL_AUDIT_EVALUATE
597
-
598
- 仅当 `task_decomposition` 存在。
599
-
600
- 1. Read `session.task_decomposition`
601
- 2. For each sub-goal `status != "done"`:resolve `evidence` artifact
602
- 3. Delegate read-only audit (run_in_background, STOP, wait):
603
- ```
604
- maestro delegate "PURPOSE: 审计未完成子目标,判定 met / unmet
605
- TASK:
606
- 1. 读取 status.json.task_decomposition 中 status!=done 的子目标
607
- 2. 打开 evidence 产物,对照 done_when 严格判定
608
- 3. 输出 met / unmet,unmet 给出 gap + target_phase
609
- CONTEXT:
610
- status.json = {session_dir}/status.json
611
- evidence = {evidence artifacts}
612
- execution_criteria = {execution_criteria}
613
- boundary_contract = {boundary_contract}
614
- EXPECTED:
615
- ---VERDICT---
616
- STATUS=all_met|has_unmet
617
- UNMET=[{id:G2,gap:'...',target_phase:execute}, ...]
618
- CONFIDENCE_SCORE=0-100
619
- ---END---
620
- CONSTRAINTS:
621
- - 只评估,不修改文件
622
- - 严格按 done_when 判定;evidence 缺失 → unmet
623
- - 不得建议超出 boundary_contract 的修改
624
- "
625
- --role analyze --mode analysis
626
- ```
627
- 4. On callback: 对每个 met 子目标,set `task_decomposition[i].status="done"` + `completion_confirmed=true` + `completed_at=now`
628
- 5. Append `{session_dir}/decisions.ndjson` with `"type": "goal-gate"`, `unmet_count`, `unmet_ids`
629
- 6. Verdict: `all_met` A_APPLY_GOAL_DONE; `has_unmet` → A_APPLY_GOAL_FIX
630
- GUARD: retry_count >= max_retries AND still unmet → A_APPLY_ESCALATE
631
-
632
- > **A_APPLY_\* release 协议**(所有 A_APPLY_* 末尾统一应用):
633
- > - 完成分支(proceed / goal-done / scope applied / structural advanced):`step.status = "completed"`, `step.completion_confirmed = true`, `session.active_step_index = null`
634
- > - 重评分支(fix / escalate / goal-fix):`step.status = "pending"`, `step.completion_confirmed = false`, `session.active_step_index = null`, `step.retry_count += 1`
635
-
636
- ### A_APPLY_PROCEED
637
-
638
- 1. release 协议 — 完成分支
639
- 2. Append decisions.ndjson with verdict
640
- 3. Display: Decision: {type} → proceed ({reason})
641
-
642
- ### A_APPLY_FIX
643
-
644
- 1. Insert fix-loop commands after current step (Appendix: Fix-Loop Templates)
645
- 2. release 协议 — 重评分支;reindex steps
646
- 3. Display: ◆ Decision: {type} → fix, +{N} commands inserted
647
-
648
- ### A_APPLY_ESCALATE
649
-
650
- 1. Insert `[quality-debug "{gap_summary}", decision:post-debug-escalate]`
651
- 2. release 协议 重评分支;reindex
652
-
653
- ### A_APPLY_SCOPE_VERDICT
654
-
655
- `post-analyze-scope` 触发。
656
-
657
- 1. 读 `session.scope_verdict`
658
- 2. `large`:为后续 `roadmap` step 注入 `--from analyze:{analyze_macro_id}`;后续 `plan` step 选 phase 列
659
- 3. `medium` / `small`:
660
- - 删除 `goal-audit` 之前未完成的 `roadmap` + `analyze` (phase) step
661
- - 下一个未完成的 `plan` step → `maestro-plan --from analyze:{analyze_macro_id}`,去掉 `{phase}`,`source_artifact_ref = analyze:{analyze_macro_id}`
662
- - 后续 `execute` / `verify` standalone scope
663
- 4. `unknown`:非 auto_confirm → ask_user 二选一(large / medium-small);auto_confirm → 默认 large
664
- 5. release 协议 — 完成分支;reindex
665
- 6. Display: ◆ Scope verdict: {verdict} → {kept|collapsed to standalone via analyze:{ANL_ID}}
666
-
667
- ### A_APPLY_GOAL_FIX
668
-
669
- 1. 对每个 unmet 子目标 `G{n}`(按 `target_phase` 分组去重):在 `goal-audit` 节点前插入 scoped mini-loop(Appendix: post-goal-audit),每条 step `goal_ref: "G{n}"`
670
- 2. 追加 `decision:post-goal-audit {retry+1}`
671
- 3. release 协议 — 重评分支;reindex
672
- 4. Display: ◆ Goal audit: {k} unmet → +{N} steps inserted (G{ids}), retry {r}/{max}
673
-
674
- ### A_APPLY_GOAL_DONE
675
-
676
- 1. 每个 `task_decomposition[*]` → `status="done"`, `completion_confirmed=true`, `completed_at=now`;顶层 `task_decomposition_all_done=true`
677
- 2. release 协议 — 完成分支;proceed to `milestone-complete`
678
- 3. Display: Goal audit: all met ✓
679
-
680
- ### A_ADVANCE_MILESTONE
681
-
682
- 1. Update session: milestone, phase, reset passed_gates
683
- 2. Insert full lifecycle steps for next milestone
684
- 3. release 协议 — 完成分支;reindex
685
-
686
- ### A_RETRY
687
-
688
- 1. `shell("maestro ralph retry N")`
689
- 2. Display: `[{index}/{total}] ↻ {step.skill} retry`
690
-
691
- ### A_SKIP_STEP
692
-
693
- 手动编辑 status.json:`step.status = "skipped"`, `step.completion_confirmed = false`,若 `active_step_index == step.index` 则置 null。
694
-
695
- ### A_PAUSE_SESSION
696
-
697
- `session.status = "paused"` (CLI 通过 `ralph complete N --status BLOCKED` 自动写;手动场景直接编辑)
698
- Display: `[{index}/{total}] {step.skill} 失败,会话已暂停。/maestro-ralph-beta continue 恢复。`
699
-
700
- ### A_PAUSE_ESCALATE
701
-
702
- 1. `session.status = "paused"`
703
- 2. Display: ◆ 已达最大重试次数,debug 已执行。请人工介入。
704
- 3. Display: /maestro-ralph-beta continue 恢复
705
-
706
- ### A_COMPLETE_SESSION
707
-
708
- 1. 校验:所有 step `completion_confirmed == true`(除 skipped);task_decomposition 存在时校验 `task_decomposition_all_done == true`
709
- 2. 任一校验失败 → 不标 completed,回 S_TICK_LOCATE 或 pause
710
- 3. `session.status = "completed"`, write status.json
711
- 4. Display completion report:
712
- ```
713
- ============================================================
714
- SESSION COMPLETE
715
- ============================================================
716
- Session: {session_id} [{source}]
717
- Steps: {completed}/{total} confirmed: {confirmed}/{completed}
718
-
719
- [✓] 0. maestro-plan 1 [global]
720
- [✓] 1. maestro-execute 1 [project]
721
- [✓] 2. ◆ post-execute [decision]
722
- ...
723
- ============================================================
724
- ```
725
- Icons: `✓` confirmed, `—` skipped, `✗` failed, `◆` decision
726
-
727
- </actions>
728
-
729
- </state_machine>
730
-
731
- <appendix>
732
-
733
- ### Session Schema
734
-
735
- ```json
736
- {
737
- "session_id": "ralph-{YYYYMMDD-HHmmss}",
738
- "source": "ralph", "status": "running",
739
- "ralph_protocol_version": "2",
740
- "active_step_index": null,
741
- "intent": "", "lifecycle_position": "",
742
- "phase": null, "phase_is_new": false,
743
- "milestone": "", // D-007 反查结果
744
- "auto_mode": false,
745
- "quality_mode": "standard", // "full" | "standard" | "quick"
746
- "planning_mode": "independent", // "unified" | "independent"
747
- "scope_verdict": null, // "large" | "medium" | "small" | "unknown" | null
748
- "analyze_macro_id": null, // "ANL-xxx"
749
- "blueprint_id": null, // "BLP-xxx"
750
- "cli_tool": "claude", "passed_gates": [],
751
- "consec_exit2_count": 0,
752
-
753
- "context": { "issue_id": null, "scratch_dir": null, "plan_dir": null,
754
- "analysis_dir": null, "brainstorm_dir": null, "blueprint_dir": null },
755
- "steps": [{
756
- "index": 0,
757
- "skill": "", // 执行 step 有值;decision 节点为空字符串/null
758
- "args": "",
759
- "stage": "", // brainstorm|blueprint|init|analyze-macro|roadmap|analyze|plan|execute|verify|...
760
- "scope": null, // "phase"|"standalone"|"milestone"|null(plan 等需要)
761
- "decision": null, // null = 执行 step;非 null = decision step (值为 gate 名)
762
- "retry_count": 0, // decision step
763
- "max_retries": 2, // decision step
764
- "command_scope": "global|project|missing|null",
765
- "command_path": "<absolute path> | null",
766
- "milestone_id": null, // 仅含 {phase} 占位符的 step
767
- "source_artifact_ref": null, // "analyze:ANL-xxx" | "blueprint:BLP-xxx" | null
768
- "status": "pending|running|completed|skipped|failed",
769
- "goal_ref": null,
770
- "completion_confirmed": false,
771
- "completion_status": null,
772
- "completion_evidence": null,
773
- "completed_at": null,
774
- "deferred_reads": [],
775
- "load": null // { loaded_at, required_files[], deferred_files[], resolve_version }
776
- }],
777
- "current_step": 0,
778
-
779
- "boundary_contract": {
780
- "in_scope": [], "out_of_scope": [], "constraints": [], "definition_of_done": ""
781
- },
782
- "execution_criteria": [],
783
- "task_decomposition": [
784
- { "id": "G1", "goal": "", "boundary": "", "done_when": "",
785
- "evidence": "", "lifecycle": [], "status": "pending|done",
786
- "completion_confirmed": false, "completed_at": null }
787
- ],
788
- "task_decomposition_all_done": false
789
- }
790
- ```
791
-
792
- ### Fix-Loop Templates
793
-
794
- 插入的执行 step 按 A_BUILD_STEPS 规则 9 解析 `command_path` + `command_scope`;`decision:*` 条目为 decision 节点。
795
-
796
- **post-execute:**
797
- ```
798
- quality-debug "{gap_summary}"
799
- maestro-plan --gaps {phase}
800
- maestro-execute {phase}
801
- decision:post-execute {retry+1}
802
- ```
803
-
804
- **post-business-test:**
805
- ```
806
- quality-debug --from-business-test "{gap_summary}"
807
- maestro-plan --gaps {phase}
808
- maestro-execute {phase}
809
- decision:post-execute {retry: 0}
810
- quality-auto-test {phase}
811
- decision:post-business-test {retry+1}
812
- ```
813
-
814
- **post-review:**
815
- ```
816
- quality-debug "{gap_summary}"
817
- maestro-plan --gaps {phase}
818
- maestro-execute {phase}
819
- quality-review {phase}
820
- decision:post-review {retry+1}
821
- ```
822
-
823
- **post-test:**
824
- ```
825
- quality-debug --from-uat "{gap_summary}"
826
- maestro-plan --gaps {phase}
827
- maestro-execute {phase}
828
- decision:post-execute {retry: 0}
829
- quality-auto-test {phase}
830
- decision:post-business-test {retry: 0}
831
- quality-review {phase}
832
- decision:post-review {retry: 0}
833
- quality-auto-test {phase}
834
- quality-test {phase}
835
- decision:post-test {retry+1}
836
- ```
837
-
838
- **post-goal-audit:** (per unmet sub-goal group)
839
- ```
840
- # for each unmet sub-goal G{n}, scoped to target_phase:
841
- maestro-plan --gaps {target_phase} "G{n}: {gap}" [goal_ref: G{n}]
842
- maestro-execute {target_phase} [goal_ref: G{n}]
843
- # after all unmet groups inserted:
844
- decision:post-goal-audit {retry+1}
845
- ```
846
-
847
- ### Goal Prompt Template
848
-
849
- decomposition 产出后,链路概览之后逐字显示:
850
-
851
- ```
852
- 📋 任务分解完成。可随时复制以下 /goal 设定终止条件:
853
-
854
- /goal 直到 {session_dir}/status.json task_decomposition[*] steps[*] 全部 completion_confirmed=true 才停。每轮以 status.json 为唯一行动手册,通过 /maestro-ralph-beta 推进 tick;decision 节点由 ralph 内联评估。禁止手动执行 skill 或修改 boundary_contract.out_of_scope。
855
- ```
856
-
857
- ### Error Codes
858
-
859
- | Code | Severity | Description | Recovery |
860
- |------|----------|-------------|----------|
861
- | E001 | error | No intent and no running session | Prompt for intent |
862
- | E002 | error | Cannot infer lifecycle position | Show raw state, ask |
863
- | E003 | error | Artifact dir not found for decision | Show glob, ask |
864
- | E004 | error | Delegate verdict parse failed | Fallback: "fix" |
865
- | E005 | error | Delegate execution failed | Fallback: "fix" |
866
- | E006 | error | command_scope == "missing" for one or more steps | List missing skills, abort build |
867
- | E007 | error | required_reading 引用文件缺失 | `ralph next` 拒绝;CLI stderr 列出缺失路径 |
868
- | E008 | error | `ralph complete` idx ≠ active_step_index | 编辑 status.json 修正一致性 |
869
- | E009 | error | `ralph complete` step.status ≠ running | 重复 complete 或非法跳跃;编辑 status.json |
870
- | E010 | error | status.json schema 损坏 OR A_EXEC_STEP exit=2 熔断(连续 ≥2 次空转) | `ralph check` 显示损坏字段;熔断需人工核对 next_pending_step 与 router 路由是否一致 |
871
- | W001 | warning | Decision expanded chain | Auto-handled |
872
- | W002 | warning | Max retries, escalating | Auto-handled |
873
- | W003 | warning | Multiple running sessions | Use latest, warn |
874
- | W004 | warning | Low delegate confidence | Show warning |
875
- | W005 | warning | active_step_index 指向已 completed step | `ralph next` 自动清理后继续 |
876
- | W007 | warning | step.skill ≠ command .md frontmatter.name | 提示但不阻塞 |
877
-
878
- ### Success Criteria
879
-
880
- - [ ] Tick 末尾自调用 `invoke_skill("maestro-ralph-beta")`,直到全部 `completion_confirmed` 或 paused
881
- - [ ] 同一 session 同时仅一个 step 持 `active_step_index`;切换前必经 release
882
- - [ ] Decision step 全程不调 `maestro ralph next` / `complete`,由 maestro-ralph-beta 内联评估并 release
883
- - [ ] `task_decomposition` 存在时,chain 含 `decision:post-goal-audit`,且最终 `task_decomposition_all_done == true` 才允许 S_COMPLETE
884
- - [ ] Chain 以 `milestone-complete` 结尾;A_APPLY_* 修改 steps[] 后均 reindex
885
- - [ ] 连续 2 次 `ralph next` exit=2 → E010 pause(防 router 错路由空转)
886
-
887
- </appendix>
17
+ <purpose>
18
+ Self-running closed-loop: routes by session state, executes one tick, self-invokes until done or paused.
19
+ Single skill handles build + execute + decision evaluation. Session: `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json`.
20
+ </purpose>
21
+
22
+ <context>
23
+ $ARGUMENTSintent text, flags, or keywords.
24
+
25
+ **Parse:**
26
+ ```
27
+ -y flag auto_confirm = true
28
+ .md/.txt path input_doc (supplementary context only, NEVER substitutes lifecycle stages)
29
+ "status" → status mode
30
+ "continue" → resume mode
31
+ Remaining → intent (new session)
32
+ ```
33
+
34
+ **State files:**
35
+ - `.workflow/state.json` — artifact registry, milestones, phases
36
+ - `.workflow/roadmap.md` — milestone/phase structure
37
+ - `.workflow/.maestro/ralph-*/status.json` — ralph session state
38
+ </context>
39
+
40
+ <invariants>
41
+ 1. **Self-invocation = `invoke_skill("maestro-ralph-beta")`** 每次 tick 末尾强制自调用;除非 router 命中终止条件
42
+ 2. **status.json 是唯一真源;写入权限分层**:
43
+ - **Step 级字段**(`step.completion_*`, `step.status` 执行 step running↔completed, `step.load.*`, `step.retried`,以及执行 step 的 `active_step_index` 占用/释放)→ 由 `maestro ralph next/complete/retry` CLI 写入
44
+ - **会话级结构**(`session.status`, `passed_gates`, `steps[]` 增删/reindex, `task_decomposition[*]`, `boundary_contract`, `context.*`, `scope_verdict`, `consec_exit2_count`, decision step 的 `status`/`retry_count`/`active_step_index` 占用与释放)→ 由 maestro-ralph-beta 写入
45
+ 3. **执行 step 通过 `maestro ralph next` 加载** — CLI 解析 frontmatter + `<required_reading>` + `<deferred_reading>`、读 required 全文、拼 prompt、写 `step.load.*` + `active_step_index` + `step.status="running"`
46
+ 4. **decision step 内联评估** handoff、不调 ralph next;按 `step.decision` 分派 A_DECISION_*
47
+ 5. **每个 step 必须 `completion_confirmed: true`** `maestro ralph complete N --status DONE|DONE_WITH_CONCERNS` 写入;STATUS 仅 `DONE | DONE_WITH_CONCERNS | NEEDS_RETRY | BLOCKED`
48
+ 6. **command_path 在 A_BUILD_STEPS 解析** — 通过 `maestro ralph skills --platform agent --json --quiet` 预校验(project 覆盖 global,只扫描 `.claude/commands/`);未命中标 `command_scope = "missing"`
49
+ 7. **required reading 由 CLI 加载** — 缺失 → 退出码 1(E007)→ pause session;ralph build 阶段不读 .md 内容
50
+ 8. **active_step_index 一致性由 CLI 维护** — 同一 session 同时最多一个 step 持有;E008/E009 直接退出
51
+ 9. **Decomposition is outcome-oriented** — sub-goals 为可观测交付,禁止 lifecycle 复刻;`/goal` 由用户输入
52
+ 10. **planning_mode governs arg granularity** `unified` skill args 无 `{phase}`;`independent` → 含 `{phase}`
53
+ 11. **task_decomposition 驱动 steps[] 动态生长** — `post-goal-audit` 按 unmet 子目标插入 scoped mini-loop;字段累加,既有字段不删不改
54
+ </invariants>
55
+
56
+ <router>
57
+
58
+ 每次进入 skill 先执行 router,按顺序匹配,先命中先用。术语:
59
+ - **active session** = `.workflow/.maestro/ralph-*/status.json` `status {running, paused}` 的最新会话
60
+ - **live session** = active session `status == "running"`
61
+ - **active_step** = `session.steps[session.active_step_index]`
62
+
63
+ ```
64
+ 1. intent == "status" → S_STATUS → END
65
+ 2. intent == "continue" AND active session exists → A_RESUME_SESSION → S_TICK_LOCATE
66
+ 3. intent non-empty AND intent ∉ {"continue","status"} AND active session exists
67
+ → S_FALLBACK → END
68
+ display "已有 active session {id};先 /maestro-ralph-beta continue 续跑或显式 abandon"
69
+ 4. live session AND active_step.status == "running" AND active_step.decision != null
70
+ S_TICK_LOCATE S_TICK_DECISION
71
+ 5. live session AND has pending step → S_TICK_LOCATE
72
+ 6. live session AND all completion_confirmed → S_COMPLETE → END
73
+ 7. active session AND session.status == "paused" AND no intent → S_FALLBACK → END
74
+ display "Session {id} paused;输入 /maestro-ralph-beta continue 显式恢复"
75
+ 8. no active session AND intent non-empty S_BUILD_PHASE
76
+ 9. no active session AND no intent S_FALLBACK END
77
+ ```
78
+
79
+ </router>
80
+
81
+ <state_machine>
82
+
83
+ <states>
84
+ # Build phase (one-time per session)
85
+ S_RESOLVE_PHASE 解析 phase + phase_is_new + D-007 milestone PERSIST: session.phase, session.phase_is_new, session.milestone
86
+ S_INFER — 推断 lifecycle_position PERSIST: session.lifecycle_position
87
+ S_RESOLVE_SCOPE — macro analyze conclusions.scope_verdict PERSIST: session.scope_verdict, session.analyze_macro_id
88
+ S_QUALITY_MODE — 决定质量管线模式 PERSIST: session.quality_mode
89
+ S_PLANNING_MODE — 决定统一/独立规划模式 PERSIST: session.planning_mode
90
+ S_DECOMPOSE — 边界澄清、写执行准则+子目标清单 PERSIST: session.boundary_contract, .execution_criteria, .task_decomposition
91
+ S_BUILD_CHAIN — 构建步骤链 PERSIST: session.steps[]
92
+ S_CREATE_SESSION — 写 status.json PERSIST: session (全量)
93
+ S_CONFIRM — 用户确认 PERSIST: —
94
+
95
+ # Tick phase (per step)
96
+ S_TICK_LOCATE 定位 session + active step PERSIST:
97
+ S_TICK 分派执行 step 或 decision step PERSIST: step.status, active_step_index
98
+ S_TICK_EXEC 执行 step:ralph next → inline → ralph complete PERSIST: via CLI
99
+ S_TICK_DECISION decision step:内联评估 + 应用裁决 PERSIST: session.steps[], passed_gates, decisions.ndjson
100
+ S_HANDLE_FAIL 处理执行失败 PERSIST: step.status, session.status
101
+
102
+ # Terminal
103
+ S_STATUS 显示 session 进度 PERSIST:
104
+ S_COMPLETE 收尾 PERSIST: session.status = "completed"
105
+ S_FALLBACK — 引导用户输入或退出 PERSIST: —
106
+ </states>
107
+
108
+ <transitions>
109
+
110
+ # === Build phase ===
111
+
112
+ S_BUILD_PHASE (entry):
113
+ S_RESOLVE_PHASE
114
+
115
+ S_RESOLVE_PHASE:
116
+ S_INFER WHEN: phase resolved or null DO: A_RESOLVE_PHASE
117
+ → S_FALLBACK WHEN: ambiguous
118
+ GUARD: auto_confirm does NOT skip phase ambiguity
119
+
120
+ S_INFER:
121
+ S_RESOLVE_SCOPE WHEN: position resolved DO: A_INFER_POSITION
122
+ → S_FALLBACK WHEN: cannot infer
123
+
124
+ S_RESOLVE_SCOPE:
125
+ → S_QUALITY_MODE DO: A_RESOLVE_SCOPE_VERDICT
126
+ GUARD: position ∈ {brainstorm, blueprint, init} → skip (scope_verdict = null)
127
+
128
+ S_QUALITY_MODE:
129
+ S_PLANNING_MODE DO: A_DETERMINE_QUALITY_MODE
130
+
131
+ S_PLANNING_MODE:
132
+ S_DECOMPOSE DO: A_DETERMINE_PLANNING_MODE
133
+ GUARD: lifecycle_position ∈ {brainstorm, blueprint, init, analyze-macro, roadmap} skip (force independent)
134
+
135
+ S_DECOMPOSE:
136
+ S_BUILD_CHAIN DO: A_DECOMPOSE_TASKS
137
+ GUARD: broad intent MUST clarify boundary even if auto_confirm
138
+ GUARD: narrow intent → auto-derive, skip questions
139
+ GUARD: position ∈ {brainstorm, blueprint, init} → skip decomposition
140
+
141
+ S_BUILD_CHAIN:
142
+ → S_CREATE_SESSION DO: A_BUILD_STEPS
143
+
144
+ S_CREATE_SESSION:
145
+ → S_CONFIRM WHEN: not auto_confirm DO: A_CREATE_SESSION
146
+ → S_TICK_LOCATE WHEN: auto_confirm DO: A_CREATE_SESSION + invoke_skill("maestro-ralph-beta")
147
+
148
+ S_CONFIRM:
149
+ → S_TICK_LOCATE WHEN: user selects "Proceed" DO: invoke_skill("maestro-ralph-beta")
150
+ → S_BUILD_CHAIN WHEN: user selects "Edit"
151
+ → END WHEN: user selects "Cancel"
152
+
153
+ # === Tick phase ===
154
+
155
+ S_TICK_LOCATE: Entry: A_LOCATE_SESSION
156
+ S_TICK WHEN: next_pending_step != null
157
+ S_COMPLETE WHEN: next_pending_step == null
158
+ → S_FALLBACK WHEN: no active session
159
+
160
+ S_TICK:
161
+ S_TICK_DECISION WHEN: next_pending_step.decision != null DO: A_CLAIM_DECISION
162
+ S_TICK_EXEC WHEN: next_pending_step.decision == null DO: A_RESOLVE_ARGS
163
+
164
+ S_TICK_EXEC: Entry: A_EXEC_STEP
165
+ → S_TICK_LOCATE WHEN: ralph complete with DONE|DONE_WITH_CONCERNS DO: invoke_skill("maestro-ralph-beta")
166
+ S_TICK_LOCATE WHEN: ralph next exit == 2 DO: invoke_skill("maestro-ralph-beta")
167
+ S_HANDLE_FAIL WHEN: ralph next exit == 1 OR exit >= 3
168
+ S_HANDLE_FAIL WHEN: ralph complete with NEEDS_RETRY|BLOCKED
169
+
170
+ S_TICK_DECISION: (gate 名取自 `step.decision`)
171
+ → S_TICK_APPLY WHEN: quality-gate (post-execute, post-business-test, post-review, post-test)
172
+ DO: A_DELEGATE_EVALUATE
173
+ S_TICK_APPLY WHEN: goal-gate (post-goal-audit)
174
+ DO: A_GOAL_AUDIT_EVALUATE
175
+ S_TICK_APPLY WHEN: scope-gate (post-analyze-scope)
176
+ DO: A_SCOPE_EVALUATE
177
+ S_TICK_APPLY WHEN: structural (post-milestone, post-debug-escalate)
178
+ DO: A_STRUCTURAL_EVALUATE
179
+
180
+ S_TICK_APPLY:
181
+ → S_TICK_LOCATE WHEN: verdict == "proceed" DO: A_APPLY_PROCEED + invoke_skill("maestro-ralph-beta")
182
+ S_TICK_LOCATE WHEN: post-goal-audit + unmet sub-goals DO: A_APPLY_GOAL_FIX + invoke_skill("maestro-ralph-beta")
183
+ → S_TICK_LOCATE WHEN: post-goal-audit + all sub-goals met DO: A_APPLY_GOAL_DONE + invoke_skill("maestro-ralph-beta")
184
+ S_TICK_LOCATE WHEN: post-analyze-scope DO: A_APPLY_SCOPE_VERDICT + invoke_skill("maestro-ralph-beta")
185
+ → S_TICK_LOCATE WHEN: verdict == "fix" DO: A_APPLY_FIX + invoke_skill("maestro-ralph-beta")
186
+ S_TICK_LOCATE WHEN: verdict == "escalate" DO: A_APPLY_ESCALATE + invoke_skill("maestro-ralph-beta")
187
+ → S_TICK_LOCATE WHEN: post-milestone + standard + next milestone DO: A_ADVANCE_MILESTONE + invoke_skill("maestro-ralph-beta")
188
+ END WHEN: post-milestone + standard + no next milestone DO: mark completed
189
+ → END WHEN: post-milestone + adhoc DO: mark completed (adhoc self-contained)
190
+ → END WHEN: post-debug-escalate (always STOP) DO: A_PAUSE_ESCALATE
191
+ GUARD: retry_count >= max_retries → force escalate
192
+ GUARD: confidence_score < 60 AND proceed override to fix
193
+ GUARD: confidence_score > 95 AND fix AND retry > 0 → suggest proceed
194
+ GUARD: auto_confirm skip user prompt, apply adjusted verdict
195
+ GUARD: not auto_confirm ask_user with override options
196
+
197
+ S_HANDLE_FAIL:
198
+ → S_TICK_LOCATE WHEN: auto + not retried DO: A_RETRY + invoke_skill("maestro-ralph-beta")
199
+ → END WHEN: auto + retried DO: A_PAUSE_SESSION
200
+ S_TICK_LOCATE WHEN: interactive + user selects retry DO: A_RETRY + invoke_skill("maestro-ralph-beta")
201
+ S_TICK_LOCATE WHEN: interactive + user selects skip DO: A_SKIP_STEP + invoke_skill("maestro-ralph-beta")
202
+ → END WHEN: interactive + user selects abort DO: A_PAUSE_SESSION
203
+
204
+ # === Terminal ===
205
+
206
+ S_STATUS:
207
+ → END DO: A_SHOW_STATUS
208
+
209
+ S_COMPLETE:
210
+ → END DO: A_COMPLETE_SESSION
211
+
212
+ S_FALLBACK:
213
+ S_BUILD_PHASE WHEN: user provides intent (no active session) DO: ask_user
214
+ → S_TICK_LOCATE WHEN: user selects "continue active session" DO: A_RESUME_SESSION + invoke_skill("maestro-ralph-beta")
215
+ END WHEN: user cancels OR no active session for resume
216
+
217
+ </transitions>
218
+
219
+ <actions>
220
+
221
+ ### A_SHOW_STATUS
222
+
223
+ 1. Find latest ralph session (by created_at)
224
+ 2. Display: Session, Status, Position, Progress, Current step
225
+ 3. List steps: [✓] completion_confirmed, [▸] current, [ ] pending, [◆] decision(`step.decision` 非空);执行 step 附 `command_scope`(global/project) + `command_path`
226
+ 4. If `task_decomposition` present (absent skip):
227
+ ```
228
+ Sub-goals ({done}/{total}) source: {session_dir}/status.json#/task_decomposition
229
+ [x] G1 done_when={done_when} evidence={evidence} confirmed={completion_confirmed}
230
+ [ ] G2 done_when={done_when} evidence={evidence} confirmed=false ◀ unmet
231
+ ```
232
+
233
+ ### A_RESOLVE_PHASE
234
+
235
+ 产出 `phase` + `phase_is_new` + `milestone`(D-007 反查)。
236
+
237
+ **Priority:**
238
+
239
+ | Step | 行为 | phase_is_new |
240
+ |------|------|--------------|
241
+ | 1 | intent 匹配 `phase\s*(\d+)` → 取 state.json 对应 phase | false |
242
+ | 2 | intent 派生短语 → 在 `state.json.milestones[*].phase_slugs` / `artifacts[*].path` 查找 | false (匹配) / true (无匹配) |
243
+ | 3 | 未派生 → 取最新 in-progress artifact 的 phase | false |
244
+ | 4 | 仍无 → state.json 首个 incomplete phase | false |
245
+ | 5 | position 将是 brainstorm/blueprint/init/roadmap/analyze-macro → phase = null | n/a |
246
+ | 6 | 仍模糊 → `ask_user` | 由用户回答确定 |
247
+
248
+ **D-007 Phase→Milestone 反查**(数字 phase 已解析时):
249
+ ```
250
+ resolve_milestone(phase_number):
251
+ for ms in state.json.milestones:
252
+ if str(phase_number) in ms.phase_slugs: return ms.id
253
+ return state.json.current_milestone # fallback
254
+ ```
255
+ 写入 `session.milestone`。
256
+
257
+ **写入 session**: `phase`, `phase_is_new`, `milestone`。
258
+
259
+ **新派生 phase milestone 处理**:
260
+ - state.json 当前 milestone 仍 active → 沿用,新增 phase
261
+ - intent 派生新 milestone 名 → 写入 session 仅作标签;`state.json.milestones` 由 `maestro-roadmap` / `maestro-milestone-release` 创建
262
+
263
+ ### A_INFER_POSITION
264
+
265
+ **Intent-based overrides** (按顺序匹配,先命中先用):
266
+
267
+ | Pattern | Position |
268
+ |---------|----------|
269
+ | brainstorm / 头脑风暴 / 探索 / ideate / 设计思路 | `brainstorm` |
270
+ | blueprint / 规格 / 正式文档 / spec-generate / 7-phase | `blueprint` |
271
+ | broad/medium intent 无数字 phase (重构/全面/重写/迁移/新功能 X) | `analyze-macro` |
272
+
273
+ **Bootstrap detection:**
274
+
275
+ | Condition | Position |
276
+ |-----------|----------|
277
+ | No `.workflow/` + no source files | `brainstorm` |
278
+ | No `.workflow/` + has source files | `init` |
279
+ | Has `.workflow/` but no state.json | `init` |
280
+ | Has state.json | phase-aware artifact inference |
281
+
282
+ **Phase-aware artifact inference**(基于 `session.phase` + `session.phase_is_new`,artifact `session.phase` 过滤):
283
+
284
+ | Condition | Position |
285
+ |-----------|----------|
286
+ | `phase_is_new == true` | `analyze` |
287
+ | no milestones AND no roadmap.md AND has analyze macro artifact | `roadmap` |
288
+ | no milestones AND no roadmap.md AND no analyze artifact | `analyze-macro` |
289
+ | `phase == null` | n/a |
290
+ | phase 已存在 + 无任何 artifact | `analyze` |
291
+ | phase 已存在 + 最新 artifact = analyze | `plan` |
292
+ | phase 已存在 + 最新 artifact = plan | `execute` |
293
+ | phase 已存在 + 最新 artifact = execute | → refine from post-execute results |
294
+
295
+ **Refine from post-execute results:**
296
+
297
+ execute artifact scratch dir 中检查结果文件(verification.json 由 execute 内置 gate 产出):
298
+
299
+ | Condition | Position |
300
+ |-----------|----------|
301
+ | verification.json passed==false gaps[] | `execute` (触发 post-execute fix loop) |
302
+ | passed==true, no review.json | `business-test` |
303
+ | review.json: verdict=="BLOCK" | `review-failed` |
304
+ | review.json: verdict!="BLOCK" | `test` |
305
+ | uat.md: all passed | `milestone-audit` |
306
+ | uat.md: has failures | `test-failed` |
307
+
308
+ ### A_RESOLVE_SCOPE_VERDICT
309
+
310
+ 仅当 `lifecycle_position ∈ {analyze-macro, roadmap, plan}` 且存在最新 analyze artifact 时执行。
311
+
312
+ 1. 定位最新 macro analyze artifact(`type=="analyze"` `scope=="macro"`,按 created_at DESC)→ `session.analyze_macro_id = ANL-xxx`
313
+ 2. 读 `{artifact_path}/conclusions.json` `scope_verdict` 字段(`large | medium | small`)
314
+ 3. 写入 `session.scope_verdict`;缺失 `unknown`
315
+ 4. 路由建议:
316
+
317
+ | scope_verdict | 链路 |
318
+ |---------------|------|
319
+ | `large` | analyze-macro → roadmap → analyze → plan → execute → ... |
320
+ | `medium` / `small` | analyze-macro plan --from analyze:{ANL_ID} execute → ... |
321
+ | `unknown` | 默认 large;post-analyze-scope 节点再纠正 |
322
+
323
+ ### A_DETERMINE_QUALITY_MODE
324
+
325
+ 读 `session.quality_mode_override`(CLI `--quality`),无则按规则推断:
326
+
327
+ | Condition | Mode | Pipeline (execute 之后) |
328
+ |-----------|------|-------------------------|
329
+ | Has `specs/REQ-*.md` + 当前 phase 业务范围明确 | `full` | business-test reviewtest-gentest |
330
+ | Default | `standard` | reviewtest-gen (当 coverage<80%)test |
331
+ | `--quality quick` | `quick` | review --tier quick |
332
+
333
+ 写入 `session.quality_mode`。
334
+
335
+ ### A_DETERMINE_PLANNING_MODE
336
+
337
+ **Auto-resolve rules (按优先级):**
338
+
339
+ | Condition | Mode |
340
+ |-----------|------|
341
+ | lifecycle_position {brainstorm, init, roadmap} | `independent` |
342
+ | `phase_is_new == true` | `independent` |
343
+ | intent 显式指定 phase 编号(如 "phase 2"、"P3") | `independent` |
344
+ | milestone 仅含 1 个 phase | `independent` |
345
+ | milestone 含多个 phase + `auto_confirm` | `unified` |
346
+ | milestone 含多个 phase + 非 `auto_confirm` | → ask_user |
347
+
348
+ **ask_user** (仅当 milestone 含 ≥2 phase 且非 auto_confirm):
349
+
350
+ ```
351
+ question: "当前里程碑含 {N} phase,选择规划模式?"
352
+ options:
353
+ - label: "统一规划 (Recommended)"
354
+ description: "一次性分析+规划整个里程碑所有 phase,analyze/plan 走里程碑级,适合 phase 间关联紧密"
355
+ - label: "独立规划"
356
+ description: "逐个 phase 走完整生命周期(analyzeplan→execute→...),适合 phase 间独立性高"
357
+ ```
358
+
359
+ 写入 `session.planning_mode`(`"unified"` 或 `"independent"`)。
360
+
361
+ ### A_DECOMPOSE_TASKS
362
+
363
+ **1. Classify intent breadth:**
364
+
365
+ | Pattern | Breadth | Clarify? |
366
+ |---------|---------|----------|
367
+ | 重构/全面/重写/重做/整体/迁移 · overhaul/migrate/rewrite/revamp | broad | MUST (ignores auto_confirm) |
368
+ | named single file/function/bug, "fix X", "add Y to Z" | narrow | skip — auto-derive |
369
+ | otherwise | medium | clarify unless auto_confirm |
370
+
371
+ **2. Clarify boundary** (broad/medium) — `ask_user`, ≤3 rounds, options pre-filled from intent + a quick Glob/Grep scan of the target module:
372
+
373
+ | Round | Question | Drives |
374
+ |-------|----------|--------|
375
+ | Scope | 哪些目录/文件/层在范围内?明确排除什么? | boundary_contract.in_scope / out_of_scope |
376
+ | Constraints | 必须向后兼容?公共 API 冻结?行为/性能预算?测试门槛? | boundary_contract.constraints + execution_criteria |
377
+ | Done | 什么可观测结果算"完成"?(如:测试全绿 + 行为零变更 + X 指标) | boundary_contract.definition_of_done |
378
+
379
+ narrow derive defaults from intent + codebase, skip questions.
380
+
381
+ **3. Derive `execution_criteria`**: backward-compat、scope-freeze、test/coverage bar、fix-don't-hide、incremental commit。
382
+
383
+ **4. Derive `task_decomposition`** (子目标清单 outcome-oriented, NOT lifecycle stages). Each entry:
384
+ ```json
385
+ { "id": "G1", "goal": "<deliverable>", "boundary": "<in/out note>",
386
+ "done_when": "<objectively checkable condition>",
387
+ "evidence": "verification.json|review.json|uat.md|<test path>",
388
+ "lifecycle": ["analyze","execute"], "status": "pending" }
389
+ ```
390
+ `done_when` 必须客观可验证,且引用 ralph 已产出的 artifact;`lifecycle` 字段映射到产出 evidence 的生命周期 stage。
391
+
392
+ **5. Persist**: `boundary_contract`, `execution_criteria`, `task_decomposition`。每个 sub-goal 初始化 `status: "pending"` + `completion_confirmed: false`。
393
+
394
+ **6. Stage** the Goal Prompt (Appendix) for A_CREATE_SESSION to emit.
395
+
396
+ ### A_BUILD_STEPS
397
+
398
+ `session.lifecycle_position` 生成 steps 到 `milestone-complete`。
399
+
400
+ | Stage | invoke_skill(independent) | invoke_skill(unified) | Decision after | quality_mode |
401
+ |-------|---------------------|-----------------|----------------|--------------|
402
+ | brainstorm | `maestro-brainstorm "{intent}"` | *(same)* | | all |
403
+ | blueprint | `maestro-blueprint "{intent}"` | *(same)* | — | all |
404
+ | init | `maestro-init` | *(same)* | | all |
405
+ | analyze-macro | `maestro-analyze "{intent}"` | *(same)* | `post-analyze-scope` | all |
406
+ | roadmap | `maestro-roadmap --from analyze:{analyze_macro_id}` | *(same)* | — | all |
407
+ | analyze | `maestro-analyze {phase}` | `maestro-analyze` | — | all |
408
+ | plan | `maestro-plan {phase}` *(scope=phase)* / `maestro-plan --from analyze:{analyze_macro_id}` *(scope=standalone)* / `maestro-plan --from blueprint:{blueprint_id}` *(scope=standalone)* | `maestro-plan` | — | all |
409
+ | execute | `maestro-execute {phase}` | `maestro-execute` | `post-execute` | all |
410
+ | business-test | `quality-auto-test {phase}` | `quality-auto-test` | `post-business-test` | full only |
411
+ | review | `quality-review {phase}` | `quality-review` | `post-review` | all (quick: append `--tier quick`) |
412
+ | test-gen | `quality-auto-test {phase}` | `quality-auto-test` | — | full / standard if coverage<80% |
413
+ | test | `quality-test {phase}` | `quality-test` | `post-test` | full, standard |
414
+ | milestone-audit | `maestro-milestone-audit` | *(same)* | — | all |
415
+ | goal-audit | *(decision-only)* | *(same)* | `post-goal-audit` | all (only if decomposed) |
416
+ | milestone-complete | `maestro-milestone-complete` | *(same)* | `post-milestone` | all |
417
+
418
+ **Build rules (按顺序应用):**
419
+
420
+ 0. **planning_mode 选列**:`unified` invoke_skill(unified) 列;`independent` invoke_skill(independent)
421
+ 1. **起点**:从 `session.lifecycle_position` 开始
422
+ 2. **跳过已完成**:跳过当前 milestone+phase 下已有 completed artifact stage(按 `session.phase` 过滤);unified milestone 过滤
423
+ 3. **quality_mode 过滤**:按 `session.quality_mode` 排除不匹配 stage
424
+ 4. **决策节点**:每个 Decision after 非空的 stage 之后插入 `{ decision: "<gate>", retry_count: 0, max_retries: 2, command_scope: null, command_path: null }`
425
+ 5. **goal-audit 插入**:`task_decomposition` 存在时,在最后一个 evidence-producing stage(execute/review/test)之后、`milestone-complete` 之前插入 `decision:post-goal-audit`
426
+ 6. **终点硬约束**:chain `milestone-complete` 结尾
427
+ 7. **goal_ref 传播**:`task_decomposition` 存在时,每个 step 按 `step.stage ∈ g.lifecycle` 匹配 `step.goal_ref = g.id`(多匹配取字典序最小);decision 节点不打 goal_ref
428
+ 8. **占位符**:independent 保留 `{phase}` `{intent}`;unified 不带 `{phase}`
429
+ 9. **command_path 解析**(执行 step):
430
+ - skill = args 前的第一个 token
431
+ - `shell("maestro ralph skills --platform agent --json --quiet")` 拉取 global + project(project 覆盖 global),匹配 skill 名:
432
+ - 命中 `command_scope = "global" | "project"`,`command_path = <绝对路径>`
433
+ - 未命中 `command_scope = "missing"`, `command_path = null` → A_CREATE_SESSION raise E006
434
+ 10. **每个 step 初始化** `completion_confirmed: false`, `completion_status: null`, `completion_evidence: null`, `deferred_reads: []`, `load: null`
435
+ 11. **scope_verdict gating**(仅当 chain 起点 = `analyze-macro`):
436
+ - `scope_verdict {medium, small}` → 跳过 `roadmap` + `analyze` 两 stage;`plan` 选 standalone 列(`--from analyze:{analyze_macro_id}`),不带 `{phase}`
437
+ - `scope_verdict == large` 保留 `roadmap` + `analyze`;`plan` phase 列(`{phase}`)
438
+ - `scope_verdict == unknown` 默认 large 路径;由 `post-analyze-scope` 决策节点在 macro analyze 完成后纠正(A_APPLY_SCOPE_VERDICT)
439
+ 12. **--from 自动注入**:
440
+ - `analyze_macro_id` 存在且当前 step 是 `roadmap` → args 改为 `--from analyze:{analyze_macro_id}`
441
+ - `analyze_macro_id` 存在且 `scope_verdict {medium, small}` 且当前 step `plan` args 改为 `--from analyze:{analyze_macro_id}`
442
+ - `blueprint_id` 存在 当前 step 是 `plan` args 改为 `--from blueprint:{blueprint_id}`(优先级低于 phase 数字参数)
443
+ - 写入 `step.source_artifact_ref` 以便审计
444
+ 13. **Milestone-ref**:含 `{phase}` 占位符的 step `step.milestone_id = session.milestone`
445
+ 14. **动态插入步骤**(A_APPLY_*)同样应用规则 7-13
446
+
447
+ ### A_CREATE_SESSION
448
+
449
+ 1. 校验所有 step 的 `command_scope != "missing"`;否则 raise E006 + 列出缺失 skill
450
+ 2. Write `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json`
451
+ 3. Display chain overview:每步显示 `{index}. {skill} [{command_scope}]`
452
+ 4. `task_decomposition` 存在 → display Goal Prompt block,继续进入 tick
453
+
454
+ ### A_LOCATE_SESSION
455
+
456
+ 1. If session_id provided → load `.workflow/.maestro/{session_id}/status.json`
457
+ 2. Else: scan `.workflow/.maestro/*/status.json`, filter `status ∈ {"running","paused"}`, sort DESC by created_at, take first
458
+ 3. Extract: session_id, source, steps[], phase, milestone, intent, auto_mode, context, cli_tool, active_step_index, status
459
+ 4. 预探测 `next_pending_step`(瞬态,不持久化):
460
+ - 若 `active_step_index != null` 且 `steps[active_step_index].status == "running"` → `steps[active_step_index]`
461
+ - 否则 `steps[]` `status == "pending"` 的最小 index
462
+ - 都无`null`
463
+
464
+ ### A_RESUME_SESSION
465
+
466
+ 1. A_LOCATE_SESSION 加载 active session
467
+ 2. 清理 active_step_index:若 `active_step_index != null` 且 `steps[active_step_index].status ∈ {"completed","skipped","failed"}` `active_step_index = null`;其余保留
468
+ 3. If `session.status == "paused"` `session.status = "running"`
469
+ 4. `session.consec_exit2_count = 0`
470
+ 5. Display: `↻ Resume {session_id}`
471
+
472
+ ### A_CLAIM_DECISION
473
+
474
+ 1. 校验 `session.active_step_index ∈ {null, next_pending_step.index}`,否则 raise E008
475
+ 2. `session.active_step_index = next_pending_step.index`
476
+ 3. `steps[next_pending_step.index].status = "running"`
477
+ 4. Display: `[{index}/{total}] {step.decision} Retry: {retry}/{max}`
478
+
479
+ ### A_RESOLVE_ARGS
480
+
481
+ **Placeholder substitution:**
482
+
483
+ | Placeholder | Source |
484
+ |-------------|--------|
485
+ | `{phase}` | session.phase |
486
+ | `{milestone}` | session.milestone |
487
+ | `{intent}` | session.intent |
488
+ | `{description}` | session.intent (alias) |
489
+ | `{scratch_dir}` | session.context.scratch_dir or latest artifact path |
490
+ | `{plan_dir}` | session.context.plan_dir |
491
+ | `{analysis_dir}` | session.context.analysis_dir |
492
+ | `{issue_id}` | session.context.issue_id |
493
+ | `{milestone_num}` | session.context.milestone_num |
494
+
495
+ **Per-skill enrichment** (when args empty or minimal):
496
+
497
+ | Skill | Required context | Source |
498
+ |-------|-----------------|--------|
499
+ | maestro-brainstorm | topic | `"{intent}"` |
500
+ | maestro-roadmap | description | `"{intent}"` |
501
+ | maestro-analyze | phase or topic | `{phase}` or `"{intent}"` |
502
+ | maestro-plan | phase or --dir | `{phase}`, or `--dir {scratch_dir}` |
503
+ | maestro-execute | phase or --dir | `{phase}`, or `--dir {scratch_dir}` |
504
+ | quality-debug | gap context | Read previous step's error/gap |
505
+ | quality-* | phase | `{phase}` |
506
+
507
+ **Artifact dir resolution for --dir:**
508
+ ```
509
+ Read state.json filter artifacts by milestone + phase
510
+ plan commands: latest type=="analyze" --dir .workflow/scratch/{path}
511
+ execute commands: latest type=="plan" --dir .workflow/scratch/{path}
512
+ ```
513
+
514
+ Write enriched args back to status.json.
515
+
516
+ ### A_EXEC_STEP
517
+
518
+ 1. **Load** — `shell("maestro ralph next")`
519
+ - exit 0 `session.consec_exit2_count = 0`,按 stdout 内联执行(进入步骤 2)
520
+ - exit 2 `session.consec_exit2_count += 1`;≥ 2 时抛 E010 S_HANDLE_FAIL;否则 → S_TICK_LOCATE
521
+ - exit 1 E007 S_HANDLE_FAIL
522
+ - exit ≥ 3 → E008 → S_HANDLE_FAIL
523
+ 2. **Inline execution** — 按 stdout 执行;deferred_reading 按需 Read
524
+ 3. **Complete**:
525
+ - `shell("maestro ralph complete N --status DONE [--evidence <path>]")`
526
+ - `shell("maestro ralph complete N --status DONE_WITH_CONCERNS --concerns \"...\"")`
527
+ - `shell("maestro ralph retry N")`
528
+ - `shell("maestro ralph complete N --status BLOCKED --reason \"...\"")`
529
+ 4. **Propagate context signals** `PHASE: N` / `scratch_dir: path` / `BLP-xxx` 写入 `status.json.context`
530
+
531
+ ### A_DELEGATE_EVALUATE
532
+
533
+ 1. Resolve artifact dir: `.workflow/scratch/{artifact.path}/` with fallback glob
534
+ 2. Parse decision metadata: `{ decision, retry_count, max_retries }`
535
+ 3. Map result files:
536
+ | Decision | Files |
537
+ |----------|-------|
538
+ | post-execute | verification.json |
539
+ | post-business-test | .tests/auto-test/report.json |
540
+ | post-review | review.json |
541
+ | post-test | uat.md, .tests/test-results.json |
542
+ 4. Check artifact for confidence section → include as signal
543
+ 5. Execute delegate (run_in_background, STOP, wait for callback):
544
+ ```
545
+ maestro delegate "PURPOSE: 评估 {decision} 质量门结果
546
+ TASK: 读取结果 | 分析状态 | 评估严重性 | 给出建议
547
+ EXPECTED: ---VERDICT--- STATUS/REASON/GAP_SUMMARY/CONFIDENCE(high|medium|low)/CONFIDENCE_SCORE(0-100)/WEAKEST_DIMENSION ---END---
548
+ CONSTRAINTS: 只评估 | 置信度<60% 倾向 fix | retry {n}/{max} 达上限必须 escalate"
549
+ --role analyze --mode analysis
550
+ ```
551
+ 6. On callback: parse verdict; if parse fails → fallback STATUS="fix"
552
+ 7. Confidence adjustment: <60 + proceedfix; >95 + fix + retry>0 → suggest proceed
553
+ 8. **Decision log**: Append to `{session_dir}/decisions.ndjson`:
554
+ ```json
555
+ { "id": "DEC-{timestamp}", "timestamp": "{ISO}", "source": "ralph",
556
+ "node_id": "{step.decision}", "type": "quality-gate",
557
+ "verdict": "{adjusted_verdict}", "confidence_score": {N},
558
+ "close_call": {N>=50 && N<=70}, "summary": "{REASON}" }
559
+ ```
560
+
561
+ ### A_STRUCTURAL_EVALUATE
562
+
563
+ **post-milestone:**
564
+ 1. Read state.json → 取已完成 milestone 对象
565
+ 2. `milestone_obj.type` (default `"standard"`)
566
+ 3. `type == "standard"`:next milestone 存在 → insert lifecycle steps;否则 → END
567
+ 4. `type == "adhoc"`:END,`current_milestone = null`
568
+
569
+ **post-debug-escalate:** STOP → paused,display "请人工介入"
570
+
571
+ ### A_SCOPE_EVALUATE
572
+
573
+ 由 `post-analyze-scope` 触发。
574
+
575
+ 1. 定位刚完成的 macro analyze artifact → `analyze_macro_id`, `conclusions_path = {artifact_path}/conclusions.json`
576
+ 2. 读取 `conclusions.scope_verdict`(`large | medium | small`),缺失`unknown`
577
+ 3. 写入 `session.scope_verdict` + `session.analyze_macro_id`
578
+ 4. Append `{session_dir}/decisions.ndjson`:
579
+ ```json
580
+ { "id": "DEC-{timestamp}", "type": "scope-gate",
581
+ "source": "ralph", "node_id": "post-analyze-scope",
582
+ "verdict": "{scope_verdict}", "analyze_macro_id": "{ANL_ID}" }
583
+ ```
584
+ 5. → A_APPLY_SCOPE_VERDICT
585
+
586
+ ### A_GOAL_AUDIT_EVALUATE
587
+
588
+ 仅当 `task_decomposition` 存在。
589
+
590
+ 1. Read `session.task_decomposition`
591
+ 2. For each sub-goal `status != "done"`:resolve `evidence` artifact
592
+ 3. Delegate read-only audit (run_in_background, STOP, wait):
593
+ ```
594
+ maestro delegate "PURPOSE: 审计未完成子目标,判定 met / unmet
595
+ TASK:
596
+ 1. 读取 status.json.task_decomposition 中 status!=done 的子目标
597
+ 2. 打开 evidence 产物,对照 done_when 严格判定
598
+ 3. 输出 met / unmet,unmet 给出 gap + target_phase
599
+ CONTEXT:
600
+ status.json = {session_dir}/status.json
601
+ evidence = {evidence artifacts}
602
+ execution_criteria = {execution_criteria}
603
+ boundary_contract = {boundary_contract}
604
+ EXPECTED:
605
+ ---VERDICT---
606
+ STATUS=all_met|has_unmet
607
+ UNMET=[{id:G2,gap:'...',target_phase:execute}, ...]
608
+ CONFIDENCE_SCORE=0-100
609
+ ---END---
610
+ CONSTRAINTS:
611
+ - 只评估,不修改文件
612
+ - 严格按 done_when 判定;evidence 缺失 → unmet
613
+ - 不得建议超出 boundary_contract 的修改
614
+ "
615
+ --role analyze --mode analysis
616
+ ```
617
+ 4. On callback: 对每个 met 子目标,set `task_decomposition[i].status="done"` + `completion_confirmed=true` + `completed_at=now`
618
+ 5. Append `{session_dir}/decisions.ndjson` with `"type": "goal-gate"`, `unmet_count`, `unmet_ids`
619
+ 6. Verdict: `all_met` → A_APPLY_GOAL_DONE; `has_unmet` → A_APPLY_GOAL_FIX
620
+ GUARD: retry_count >= max_retries AND still unmet → A_APPLY_ESCALATE
621
+
622
+ > **A_APPLY_\* release 协议**(所有 A_APPLY_* 末尾统一应用):
623
+ > - 完成分支(proceed / goal-done / scope applied / structural advanced):`step.status = "completed"`, `step.completion_confirmed = true`, `session.active_step_index = null`
624
+ > - 重评分支(fix / escalate / goal-fix):`step.status = "pending"`, `step.completion_confirmed = false`, `session.active_step_index = null`, `step.retry_count += 1`
625
+
626
+ ### A_APPLY_PROCEED
627
+
628
+ 1. release 协议 完成分支
629
+ 2. Append decisions.ndjson with verdict
630
+ 3. Display: Decision: {type} proceed ({reason})
631
+
632
+ ### A_APPLY_FIX
633
+
634
+ 1. Insert fix-loop commands after current step (Appendix: Fix-Loop Templates)
635
+ 2. release 协议 — 重评分支;reindex steps
636
+ 3. Display: ◆ Decision: {type} → fix, +{N} commands inserted
637
+
638
+ ### A_APPLY_ESCALATE
639
+
640
+ 1. Insert `[quality-debug "{gap_summary}", decision:post-debug-escalate]`
641
+ 2. release 协议 — 重评分支;reindex
642
+
643
+ ### A_APPLY_SCOPE_VERDICT
644
+
645
+ `post-analyze-scope` 触发。
646
+
647
+ 1. 读 `session.scope_verdict`
648
+ 2. `large`:为后续 `roadmap` step 注入 `--from analyze:{analyze_macro_id}`;后续 `plan` step 选 phase 列
649
+ 3. `medium` / `small`:
650
+ - 删除 `goal-audit` 之前未完成的 `roadmap` + `analyze` (phase) step
651
+ - 下一个未完成的 `plan` step → `maestro-plan --from analyze:{analyze_macro_id}`,去掉 `{phase}`,`source_artifact_ref = analyze:{analyze_macro_id}`
652
+ - 后续 `execute` 等沿用同一 standalone scope
653
+ 4. `unknown`:非 auto_confirm → ask_user 二选一(large / medium-small);auto_confirm → 默认 large
654
+ 5. release 协议 — 完成分支;reindex
655
+ 6. Display: ◆ Scope verdict: {verdict} → {kept|collapsed to standalone via analyze:{ANL_ID}}
656
+
657
+ ### A_APPLY_GOAL_FIX
658
+
659
+ 1. 对每个 unmet 子目标 `G{n}`(按 `target_phase` 分组去重):在 `goal-audit` 节点前插入 scoped mini-loop(Appendix: post-goal-audit),每条 step `goal_ref: "G{n}"`
660
+ 2. 追加 `decision:post-goal-audit {retry+1}`
661
+ 3. release 协议 重评分支;reindex
662
+ 4. Display: Goal audit: {k} unmet → +{N} steps inserted (G{ids}), retry {r}/{max}
663
+
664
+ ### A_APPLY_GOAL_DONE
665
+
666
+ 1. 每个 `task_decomposition[*]` → `status="done"`, `completion_confirmed=true`, `completed_at=now`;顶层 `task_decomposition_all_done=true`
667
+ 2. release 协议 — 完成分支;proceed to `milestone-complete`
668
+ 3. Display: ◆ Goal audit: all met ✓
669
+
670
+ ### A_ADVANCE_MILESTONE
671
+
672
+ 1. Update session: milestone, phase, reset passed_gates
673
+ 2. Insert full lifecycle steps for next milestone
674
+ 3. release 协议 — 完成分支;reindex
675
+
676
+ ### A_RETRY
677
+
678
+ 1. `shell("maestro ralph retry N")`
679
+ 2. Display: `[{index}/{total}] ↻ {step.skill} retry`
680
+
681
+ ### A_SKIP_STEP
682
+
683
+ 手动编辑 status.json:`step.status = "skipped"`, `step.completion_confirmed = false`,若 `active_step_index == step.index` 则置 null。
684
+
685
+ ### A_PAUSE_SESSION
686
+
687
+ `session.status = "paused"` (CLI 通过 `ralph complete N --status BLOCKED` 自动写;手动场景直接编辑)
688
+ Display: `[{index}/{total}] ✗ {step.skill} 失败,会话已暂停。/maestro-ralph-beta continue 恢复。`
689
+
690
+ ### A_PAUSE_ESCALATE
691
+
692
+ 1. `session.status = "paused"`
693
+ 2. Display: 已达最大重试次数,debug 已执行。请人工介入。
694
+ 3. Display: /maestro-ralph-beta continue 恢复
695
+
696
+ ### A_COMPLETE_SESSION
697
+
698
+ 1. 校验:所有 step `completion_confirmed == true`(除 skipped);task_decomposition 存在时校验 `task_decomposition_all_done == true`
699
+ 2. 任一校验失败 → 不标 completed,回 S_TICK_LOCATE 或 pause
700
+ 3. `session.status = "completed"`, write status.json
701
+ 4. Display completion report:
702
+ ```
703
+ ============================================================
704
+ SESSION COMPLETE
705
+ ============================================================
706
+ Session: {session_id} [{source}]
707
+ Steps: {completed}/{total} confirmed: {confirmed}/{completed}
708
+
709
+ [✓] 0. maestro-plan 1 [global]
710
+ [✓] 1. maestro-execute 1 [project]
711
+ [✓] 2. post-execute [decision]
712
+ ...
713
+ ============================================================
714
+ ```
715
+ Icons: `✓` confirmed, `—` skipped, `✗` failed, `◆` decision
716
+
717
+ </actions>
718
+
719
+ </state_machine>
720
+
721
+ <appendix>
722
+
723
+ ### Session Schema
724
+
725
+ ```json
726
+ {
727
+ "session_id": "ralph-{YYYYMMDD-HHmmss}",
728
+ "source": "ralph", "status": "running",
729
+ "ralph_protocol_version": "2",
730
+ "active_step_index": null,
731
+ "intent": "", "lifecycle_position": "",
732
+ "phase": null, "phase_is_new": false,
733
+ "milestone": "", // D-007 反查结果
734
+ "auto_mode": false,
735
+ "quality_mode": "standard", // "full" | "standard" | "quick"
736
+ "planning_mode": "independent", // "unified" | "independent"
737
+ "scope_verdict": null, // "large" | "medium" | "small" | "unknown" | null
738
+ "analyze_macro_id": null, // "ANL-xxx"
739
+ "blueprint_id": null, // "BLP-xxx"
740
+ "cli_tool": "claude", "passed_gates": [],
741
+ "consec_exit2_count": 0,
742
+
743
+ "context": { "issue_id": null, "scratch_dir": null, "plan_dir": null,
744
+ "analysis_dir": null, "brainstorm_dir": null, "blueprint_dir": null },
745
+ "steps": [{
746
+ "index": 0,
747
+ "skill": "", // 执行 step 有值;decision 节点为空字符串/null
748
+ "args": "",
749
+ "stage": "", // brainstorm|blueprint|init|analyze-macro|roadmap|analyze|plan|execute|...
750
+ "scope": null, // "phase"|"standalone"|"milestone"|null(plan 等需要)
751
+ "decision": null, // null = 执行 step;非 null = decision step (值为 gate 名)
752
+ "retry_count": 0, // decision step
753
+ "max_retries": 2, // decision step
754
+ "command_scope": "global|project|missing|null",
755
+ "command_path": "<absolute path> | null",
756
+ "milestone_id": null, // 仅含 {phase} 占位符的 step
757
+ "source_artifact_ref": null, // "analyze:ANL-xxx" | "blueprint:BLP-xxx" | null
758
+ "status": "pending|running|completed|skipped|failed",
759
+ "goal_ref": null,
760
+ "completion_confirmed": false,
761
+ "completion_status": null,
762
+ "completion_evidence": null,
763
+ "completed_at": null,
764
+ "deferred_reads": [],
765
+ "load": null // { loaded_at, required_files[], deferred_files[], resolve_version }
766
+ }],
767
+ "current_step": 0,
768
+
769
+ "boundary_contract": {
770
+ "in_scope": [], "out_of_scope": [], "constraints": [], "definition_of_done": ""
771
+ },
772
+ "execution_criteria": [],
773
+ "task_decomposition": [
774
+ { "id": "G1", "goal": "", "boundary": "", "done_when": "",
775
+ "evidence": "", "lifecycle": [], "status": "pending|done",
776
+ "completion_confirmed": false, "completed_at": null }
777
+ ],
778
+ "task_decomposition_all_done": false
779
+ }
780
+ ```
781
+
782
+ ### Fix-Loop Templates
783
+
784
+ 插入的执行 step A_BUILD_STEPS 规则 9 解析 `command_path` + `command_scope`;`decision:*` 条目为 decision 节点。
785
+
786
+ **post-execute:**
787
+ ```
788
+ quality-debug "{gap_summary}"
789
+ maestro-plan --gaps {phase}
790
+ maestro-execute {phase}
791
+ decision:post-execute {retry+1}
792
+ ```
793
+
794
+ **post-business-test:**
795
+ ```
796
+ quality-debug --from-business-test "{gap_summary}"
797
+ maestro-plan --gaps {phase}
798
+ maestro-execute {phase}
799
+ decision:post-execute {retry: 0}
800
+ quality-auto-test {phase}
801
+ decision:post-business-test {retry+1}
802
+ ```
803
+
804
+ **post-review:**
805
+ ```
806
+ quality-debug "{gap_summary}"
807
+ maestro-plan --gaps {phase}
808
+ maestro-execute {phase}
809
+ quality-review {phase}
810
+ decision:post-review {retry+1}
811
+ ```
812
+
813
+ **post-test:**
814
+ ```
815
+ quality-debug --from-uat "{gap_summary}"
816
+ maestro-plan --gaps {phase}
817
+ maestro-execute {phase}
818
+ decision:post-execute {retry: 0}
819
+ quality-auto-test {phase}
820
+ decision:post-business-test {retry: 0}
821
+ quality-review {phase}
822
+ decision:post-review {retry: 0}
823
+ quality-auto-test {phase}
824
+ quality-test {phase}
825
+ decision:post-test {retry+1}
826
+ ```
827
+
828
+ **post-goal-audit:** (per unmet sub-goal group)
829
+ ```
830
+ # for each unmet sub-goal G{n}, scoped to target_phase:
831
+ maestro-plan --gaps {target_phase} "G{n}: {gap}" [goal_ref: G{n}]
832
+ maestro-execute {target_phase} [goal_ref: G{n}]
833
+ # after all unmet groups inserted:
834
+ decision:post-goal-audit {retry+1}
835
+ ```
836
+
837
+ ### Goal Prompt Template
838
+
839
+ decomposition 产出后,链路概览之后逐字显示:
840
+
841
+ ```
842
+ 📋 任务分解完成。可随时复制以下 /goal 设定终止条件:
843
+
844
+ /goal 直到 {session_dir}/status.json 的 task_decomposition[*] 与 steps[*] 全部 completion_confirmed=true 才停。每轮以 status.json 为唯一行动手册,通过 /maestro-ralph-beta 推进 tick;decision 节点由 ralph 内联评估。禁止手动执行 skill 或修改 boundary_contract.out_of_scope。
845
+ ```
846
+
847
+ ### Error Codes
848
+
849
+ | Code | Severity | Description | Recovery |
850
+ |------|----------|-------------|----------|
851
+ | E001 | error | No intent and no running session | Prompt for intent |
852
+ | E002 | error | Cannot infer lifecycle position | Show raw state, ask |
853
+ | E003 | error | Artifact dir not found for decision | Show glob, ask |
854
+ | E004 | error | Delegate verdict parse failed | Fallback: "fix" |
855
+ | E005 | error | Delegate execution failed | Fallback: "fix" |
856
+ | E006 | error | command_scope == "missing" for one or more steps | List missing skills, abort build |
857
+ | E007 | error | required_reading 引用文件缺失 | `ralph next` 拒绝;CLI stderr 列出缺失路径 |
858
+ | E008 | error | `ralph complete` idx ≠ active_step_index | 编辑 status.json 修正一致性 |
859
+ | E009 | error | `ralph complete` step.status ≠ running | 重复 complete 或非法跳跃;编辑 status.json |
860
+ | E010 | error | status.json schema 损坏 OR A_EXEC_STEP exit=2 熔断(连续 ≥2 次空转) | `ralph check` 显示损坏字段;熔断需人工核对 next_pending_step 与 router 路由是否一致 |
861
+ | W001 | warning | Decision expanded chain | Auto-handled |
862
+ | W002 | warning | Max retries, escalating | Auto-handled |
863
+ | W003 | warning | Multiple running sessions | Use latest, warn |
864
+ | W004 | warning | Low delegate confidence | Show warning |
865
+ | W005 | warning | active_step_index 指向已 completed step | `ralph next` 自动清理后继续 |
866
+ | W007 | warning | step.skill command .md frontmatter.name | 提示但不阻塞 |
867
+
868
+ ### Success Criteria
869
+
870
+ - [ ] Tick 末尾自调用 `invoke_skill("maestro-ralph-beta")`,直到全部 `completion_confirmed` paused
871
+ - [ ] 同一 session 同时仅一个 step `active_step_index`;切换前必经 release
872
+ - [ ] Decision step 全程不调 `maestro ralph next` / `complete`,由 maestro-ralph-beta 内联评估并 release
873
+ - [ ] `task_decomposition` 存在时,chain `decision:post-goal-audit`,且最终 `task_decomposition_all_done == true` 才允许 S_COMPLETE
874
+ - [ ] Chain `milestone-complete` 结尾;A_APPLY_* 修改 steps[] 后均 reindex
875
+ - [ ] 连续 2 `ralph next` exit=2 → E010 pause(防 router 错路由空转)
876
+
877
+ </appendix>