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
@@ -1,699 +1,699 @@
1
- # Auto-Test Workflow (Unified)
2
-
3
- Unified automated testing with intelligent state-based routing. Merges test generation (gap-forward), business testing (PRD-forward), and integration testing (code-forward) into a single pipeline.
4
-
5
- **Core idea: read project state → auto-select scenario source → shared pipeline from plan through iteration.**
6
-
7
- Pipeline: Parse → Route → Source Scenarios → Discover Infrastructure → Plan → Write Tests → Execute → Iterate → Report
8
- Only Step 2 diverges (scenario source). Everything else is shared.
9
-
10
- ---
11
-
12
- ### Step 0: Parse Input & Load Specs
13
-
14
- **Parse arguments:**
15
-
16
- | Input | Result |
17
- |-------|--------|
18
- | No arguments | Error E001 |
19
- | Phase number | Resolve phase dir from artifact registry |
20
- | `--max-iter N` | Set MAX_ITER = N (default 5). **1 = single-pass** (no iteration loop) |
21
- | `--layer L` | Start from / restrict to specific layer (L0\|L1\|L2\|L3) |
22
- | `--dry-run` | Generate plan only, do not execute |
23
- | `--re-run` | Re-run only previously failed scenarios |
24
-
25
- **Resolve phase dir:** from `state.json` artifact registry (`type='execute'`, matching phase). Error E002 if not found.
26
-
27
- **Load specs:**
28
- ```
29
- specs_test = maestro spec load --category test
30
- specs_arch = maestro spec load --category arch
31
- ```
32
-
33
- `specs_test` for test conventions (Steps 3-5); `specs_arch` for module boundaries (Step 2).
34
-
35
- ---
36
-
37
- ### Step 1: Read State & Route
38
-
39
- Read project state signals and auto-select scenario source. This is the **primary branch point, with Route-specific extraction in Step 2** (after Step 2 normalization, the downstream pipeline is identical).
40
-
41
- ```
42
- Priority: Resume > Re-run > Spec > Gap > Code
43
-
44
- 1. RESUME:
45
- Check: ${PHASE_DIR}/.tests/auto-test/state.json exists AND status == "running"
46
- Compat: also check ${PHASE_DIR}/.tests/integration/state.json (old format)
47
- Action: offer resume or restart
48
- If resume: restore session, jump to Step 6 at saved iteration/layer
49
- If restart: archive to .history/, continue as new
50
-
51
- 2. RE-RUN:
52
- Check: --re-run flag AND .tests/auto-test/report.json has failed/blocked scenarios
53
- Compat: also check .tests/business/business-test-report.json (old format)
54
- Action: load failed/blocked scenarios with status reset to pending
55
- Skip to Step 4 (scenarios pre-loaded, plan confirmation)
56
-
57
- # Note: `integration/state.json` and `business/business-test-report.json` are
58
- # legacy compat paths read for backward compatibility only. The new pipeline
59
- # writes exclusively to `.tests/auto-test/state.json` and `.tests/auto-test/report.json`
60
- # (these legacy paths are superseded; see migration table at end of file).
61
-
62
- 3. SPEC:
63
- Check: .workflow/blueprint/BLP-*/requirements/REQ-*.md exists
64
- Resolve: SPEC_DIR from index.json.blueprint_ref or most recent BLP-*/
65
- If SPEC_DIR found: set ROUTE = "spec", SPEC_MODE = "full"
66
- If no spec but has success_criteria: set ROUTE = "spec", SPEC_MODE = "degraded"
67
-
68
- 4. GAP:
69
- Check: ${PHASE_DIR}/verification.json has gaps[] with status MISSING or PARTIAL
70
- OR: ${PHASE_DIR}/.tests/coverage-report.json has requirements_uncovered[]
71
- Action: set ROUTE = "gap"
72
-
73
- 5. CODE:
74
- Default fallback when no spec package and no gaps detected.
75
- Action: set ROUTE = "code"
76
- ```
77
-
78
- **Display route selection:**
79
- ```
80
- === AUTO-TEST ===
81
- 来源: {ROUTE} ({reason})
82
- 阶段: {phase_name}
83
- {IF spec: "Spec: {SPEC_DIR} (mode: {SPEC_MODE})"}
84
- ```
85
-
86
- ---
87
-
88
- ### Step 2: Source Scenarios
89
-
90
- Execute the route-specific scenario extraction, then normalize ALL scenarios into the unified format. **After this step, the pipeline is identical regardless of source.**
91
-
92
- #### Route A: `spec` source (PRD-forward)
93
-
94
- 1. Load spec package:
95
- - `requirements/REQ-*.md` — functional requirements with acceptance criteria
96
- - `requirements/NFR-*.md` — non-functional requirements
97
- - `architecture/_index.md` — API endpoints, data model, state machines
98
- - `epics/EPIC-*.md` — user stories for E2E scenarios
99
-
100
- 2. For each `REQ-NNN-{slug}.md`, parse `## Acceptance Criteria`:
101
- - Extract each numbered criterion as a scenario seed
102
- - Map RFC 2119 keywords to priority:
103
-
104
- | Keyword | Priority | Failure Severity |
105
- |---------|----------|-----------------|
106
- | MUST / MUST NOT / SHALL / SHALL NOT | critical | blocker |
107
- | SHOULD / SHOULD NOT / RECOMMENDED | high | major |
108
- | MAY / OPTIONAL | medium | minor |
109
-
110
- 3. Classify scenario into layer:
111
-
112
- | Source | Layer | Category |
113
- |--------|-------|----------|
114
- | Architecture API endpoints + REQ AC about request/response | L1 | api_contract |
115
- | REQ AC about business logic, validation, state changes | L2 | business_rule |
116
- | REQ AC about state transitions (from architecture state machines) | L2 | state_transition |
117
- | Epic user stories (multi-step flows) | L3 | user_flow |
118
- | NFR performance/security constraints | L2 | non_functional |
119
-
120
- 4. **Generate Fixtures** (conditional sub-step):
121
-
122
- **Tier 1: Schema-derived fixtures**
123
- ```
124
- FOR each entity in REQ data model:
125
- valid: object satisfying all field constraints
126
- invalid: one variant per constraint violation (null_required, empty_string, overflow, wrong_type)
127
- boundary: edge value variants (min_value, max_value, min_minus_one, max_plus_one)
128
- ```
129
-
130
- **Tier 2: Acceptance-criteria-derived expectations**
131
- ```
132
- FOR each "MUST return X when Y": fixture { input: Y, expected: X }
133
- FOR each "MUST validate Z": fixture { input: invalid_Z, expected: validation_error }
134
- ```
135
-
136
- **Tier 3: Business-scenario-derived data sets (L3 only)**
137
- ```
138
- FOR each Epic user story:
139
- scenario_pack: coordinated data set across story steps
140
- ```
141
-
142
- **Mock contracts:**
143
- ```
144
- FOR each API endpoint in architecture/_index.md:
145
- mock_contract: { request_pattern, response_fixture }
146
- ```
147
-
148
- 5. **Degraded mode** (SPEC_MODE = "degraded"):
149
- - Extract from `index.json.success_criteria` (each → one L2 scenario)
150
- - Extract from `plan.json` task convergence criteria (each → one L1/L2 scenario)
151
- - Extract from `.summaries/TASK-*-summary.md` (each → one L1 scenario)
152
- - All default to priority: "high". No L3 in degraded mode.
153
-
154
- 6. Convert to unified scenario format.
155
-
156
- #### Route B: `gap` source (coverage-forward)
157
-
158
- 1. Read gap sources:
159
- - `verification.json` → `gaps[]` with status MISSING or PARTIAL
160
- - `coverage-report.json` → `requirements_uncovered[]`
161
- - Task summaries → modified files list
162
-
163
- 2. Priority: MISSING or uncovered → HIGH; PARTIAL → MEDIUM.
164
-
165
- 3. Classify each changed file:
166
-
167
- | File Type | Category | Layer |
168
- |-----------|----------|-------|
169
- | Pure function / utility | unit | L1 |
170
- | React component | unit + e2e | L1 + L3 |
171
- | API route / handler | integration | L2 |
172
- | Database model / query | integration | L2 |
173
- | CLI command | e2e | L3 |
174
- | Config / types / constants / CSS / test files | skip | — |
175
-
176
- 4. **Optional: CLI supplementary analysis** (skip if no CLI tools enabled or all files "skip"):
177
- ```
178
- Bash({
179
- command: 'maestro delegate "PURPOSE: Analyze source files for test-worthy edge cases
180
- TASK: Identify error handling | boundary conditions | state transitions | external dependencies
181
- MODE: analysis
182
- CONTEXT: @${target_files}
183
- EXPECTED: JSON array of { file, edge_cases: [{ description, type, priority }] }
184
- CONSTRAINTS: Non-obvious cases only | Max 5 per file
185
- " --role analyze --mode analysis',
186
- run_in_background: true
187
- })
188
- ```
189
- On callback: merge edge_cases into scenarios, mark `source: "cli-analysis"`.
190
-
191
- 5. Convert to unified scenario format.
192
-
193
- #### Route C: `code` source (exploration-forward)
194
-
195
- 1. Explore codebase for testable integration points:
196
- - Module boundaries and cross-module calls
197
- - API endpoints and their handlers
198
- - Database interactions and queries
199
- - External service integrations
200
- - Event flows and message passing
201
-
202
- 2. Scan for cross-module imports, API route definitions, database calls.
203
-
204
- 3. Map integration points: which modules communicate through what interfaces.
205
-
206
- 4. Infer layer from integration type:
207
- - Isolated function → L1
208
- - Cross-module call / API handler → L2
209
- - Full user flow → L3
210
-
211
- 5. Convert to unified scenario format.
212
-
213
- #### Unified Scenario Format
214
-
215
- All routes produce this identical structure:
216
-
217
- ```json
218
- {
219
- "id": "AT-{NNN}",
220
- "source": "spec|gap|code|re-run",
221
- "layer": "L0|L1|L2|L3",
222
- "priority": "critical|high|medium",
223
- "category": "api_contract|business_rule|state_transition|user_flow|non_functional|unit|integration|e2e|static",
224
- "name": "descriptive scenario name",
225
- "target_file": "src/path/to/file.ts",
226
- "test_file": "src/path/__tests__/file.test.ts",
227
- "req_ref": "REQ-NNN:AC-N | gap-id | null",
228
- "description": "what this scenario validates",
229
- "test_cases": ["case 1", "case 2"],
230
- "input": { "$fixture_ref": "..." },
231
- "expected": {
232
- "status": 200,
233
- "behavior": "description of expected outcome"
234
- },
235
- "preconditions": [],
236
- "postconditions": [],
237
- "mock_services": [],
238
- "fixtures": {}
239
- }
240
- ```
241
-
242
- **Field population by route:**
243
-
244
- | Field | spec | gap | code |
245
- |-------|------|-----|------|
246
- | `req_ref` | REQ-NNN:AC-N | gap ID from verification.json | null |
247
- | `fixtures` | Tier 1-3 generated | empty (inferred in Step 5) | empty (inferred in Step 5) |
248
- | `mock_services` | from architecture/_index.md | empty | discovered from imports |
249
- | `preconditions` | from REQ AC text | empty | empty |
250
-
251
- ---
252
-
253
- ### Step 3: Discover Test Infrastructure
254
-
255
- Detect existing test framework and patterns:
256
-
257
- 1. **Config files**: `jest.config.*`, `vitest.config.*`, `pytest.ini`, `pyproject.toml`, `.mocharc.*`
258
- 2. **Existing tests**: `*.test.*`, `*.spec.*`, `test_*` (exclude node_modules, .git)
259
- 3. **Utilities**: `test-utils.*`, `testHelper*`, `conftest.py`, `setup.*`
260
-
261
- Extract: framework, directory structure, naming convention, test utilities, run command.
262
-
263
- Read 2-3 existing test files to learn: import style, describe/it nesting, assertion library, mock patterns, setup/teardown.
264
-
265
- **Detect tech stack for generation:**
266
-
267
- | Stack | L1 | L2 | L3 |
268
- |-------|----|----|-----|
269
- | Java/Spring Boot | MockMvc | JUnit 5 + WireMock | TestContainers |
270
- | TypeScript/Node | vitest | supertest + nock | playwright/cypress |
271
- | Python | pytest | httpx + responses | selenium |
272
-
273
- If no test framework detected: Error E003.
274
-
275
- Output: `infrastructure` object passed to Steps 5-6.
276
-
277
- ---
278
-
279
- ### Step 4: Generate Test Plan & Confirm
280
-
281
- 1. **Merge pre-existing tests** from `.tests/test-gen-report.json` (if exists):
282
- - Mark as "pre-existing" so Step 5 skips writing them
283
- - Step 6 includes them in execution
284
-
285
- 2. Apply `--layer` filter if specified.
286
-
287
- 3. **Archive previous plan** to `.history/` if exists.
288
-
289
- 4. Write `.tests/auto-test/test-plan.json`:
290
- ```json
291
- {
292
- "phase": "{phase}",
293
- "source_route": "{ROUTE}",
294
- "blueprint_ref": "{SPEC_DIR name or null}",
295
- "spec_mode": "full|degraded|null",
296
- "generated_at": "{ISO timestamp}",
297
- "infrastructure": { "framework": "...", "run_command": "..." },
298
- "layers": {
299
- "L0": { "scenario_count": N, "commands": ["tsc --noEmit", "eslint src/"] },
300
- "L1": { "scenario_count": N, "priority_distribution": { "critical": X, "high": Y, "medium": Z } },
301
- "L2": { "scenario_count": N, "priority_distribution": { ... } },
302
- "L3": { "scenario_count": N, "priority_distribution": { ... } }
303
- },
304
- "scenarios": [ "...unified format..." ],
305
- "fixtures": { "...if spec source..." },
306
- "requirement_coverage_plan": { "requirements_targeted": [], "requirements_skipped": [] }
307
- }
308
- ```
309
-
310
- 5. Display and confirm:
311
- ```
312
- === AUTO-TEST PLAN ===
313
- 来源: {ROUTE}
314
- 阶段: {phase_name}
315
- Blueprint: {blueprint_ref or "N/A"}
316
-
317
- 层级分布:
318
- L0 Static: {N} checks
319
- L1 Unit/API: {N} scenarios ({X} critical, {Y} high)
320
- L2 Integration: {N} scenarios ({X} critical, {Y} high)
321
- L3 E2E: {N} scenarios ({X} critical, {Y} high)
322
-
323
- Total: {N} scenarios, {M} test cases
324
- Max iterations: {max_iter}
325
-
326
- Proceed? (yes/edit/cancel)
327
- ```
328
-
329
- - `--dry-run`: stop here, report plan
330
- - User "edit": modify plan interactively
331
- - User "cancel": abort
332
-
333
- ---
334
-
335
- ### Step 5: Write Tests (RED-GREEN) via CSV Parallel
336
-
337
- **Parallel strategy**: Build `layer-L{N}-write.csv` per layer, execute via `spawn_agents_on_csv`. Each agent writes one test file independently.
338
-
339
- #### 5a. Build Write CSV
340
-
341
- For each layer (L1, L2, L3 — sequential):
342
-
343
- ```
344
- Extract pending scenarios for this layer from test-plan.json
345
- Build layer-L{N}-write.csv:
346
- Columns: id, name, target_file, test_file, description, test_cases, fixtures, req_ref, infrastructure_hints, prev_context
347
-
348
- prev_context = findings from completed prior-layer scenarios (cross-layer propagation)
349
- ```
350
-
351
- #### 5b. Parallel Test Writing via spawn_agents_on_csv
352
-
353
- ```javascript
354
- spawn_agents_on_csv({
355
- csv_path: `.tests/auto-test/.csv-session/layer-L${N}-write.csv`,
356
- id_column: "id",
357
- instruction: `
358
- Write ONE test file for the given scenario using RED-GREEN methodology.
359
-
360
- Rules:
361
- - Read target_file to understand module under test
362
- - Write test at test_file path following infrastructure_hints patterns
363
- - Each test_case → one it() block, include id in describe("AT-NNN: {name}")
364
- - Use fixtures column (infer from source if empty)
365
- - Run test once after writing: report red_result
366
- - NEVER modify source code — only write/fix test files
367
-
368
- RED results:
369
- - pass: test passes immediately (may need strengthening)
370
- - expected_fail: test correctly targets real behavior
371
- - unexpected_fail: setup/import error — fix test, re-run
372
-
373
- Read discoveries.ndjson for shared patterns. Append if you find reusable ones.
374
- `,
375
- max_concurrency: 5,
376
- max_runtime_seconds: 1800,
377
- output_csv_path: `.tests/auto-test/.csv-session/layer-L${N}-write-results.csv`,
378
- output_schema: { id, status: [written|failed], red_result: [expected_fail|unexpected_fail|pass], findings, error }
379
- })
380
- ```
381
-
382
- #### 5c. Merge & Continue
383
-
384
- Merge write-results into master state. Delete temp CSV. Proceed to next layer or Step 6.
385
-
386
- **If `--max-iter 1`:** After all layers written and run once, jump directly to Step 8 (single-pass mode, replaces test-gen behavior). Skip Steps 6-7.
387
-
388
- ---
389
-
390
- ### Step 6: Execute (Progressive Layers)
391
-
392
- Run tests progressively through layers with fail-fast on critical:
393
-
394
- - L0: `tsc --noEmit` + `eslint src/` (static analysis)
395
- - L1: unit tests (`--testPathPattern="unit|__tests__"`)
396
- - L2: integration tests (`--testPathPattern="integration"`)
397
- - L3: E2E tests (`--testPathPattern="e2e"`)
398
-
399
- **Fail-fast rule:**
400
- - L0 must pass before L1
401
- - If ANY "critical" priority failure in L1 → do NOT proceed to L2
402
- - If ANY "critical" priority failure in L2 → do NOT proceed to L3
403
- - "high" and "medium" failures do NOT block next layer
404
-
405
- Record per-scenario results: `{ status, actual_response, duration_ms, error_detail, classification: null }`.
406
-
407
- Write iteration results to `.tests/auto-test/results-iter-{N}.json`.
408
-
409
- ---
410
-
411
- ### Step 7: Reflect & Adjust (Unified Iteration Engine)
412
-
413
- Single engine that subsumes both Generator-Critic (per-layer inner) and Reflect-Adjust (global outer). Uses `spawn_agents_on_csv` for parallel failure diagnosis.
414
-
415
- ```
416
- OUTER LOOP (max_iter iterations):
417
-
418
- FOR each active layer (L0 through current):
419
-
420
- INNER LOOP (max 3 iterations per layer — Generator-Critic):
421
-
422
- 1. Build diagnosis CSV from failed scenarios:
423
-
424
- Build diagnosis-iter-{N}.csv:
425
- Columns: id, scenario_id, layer, test_file, error_detail, expected, actual, target_file, source_context
426
-
427
- spawn_agents_on_csv({
428
- csv_path: `.tests/auto-test/.csv-session/diagnosis-iter-${iter}.csv`,
429
- id_column: "id",
430
- instruction: `
431
- Classify ONE test failure and provide fix if applicable.
432
-
433
- Classifications:
434
- - test_defect: Test wrong (bad import, endpoint, fixture, assertion)
435
- - code_defect: Source violates business rule (actual != expected)
436
- - env_issue: Environment problem (service down, config missing)
437
-
438
- If test_defect: provide fix_code (old → new)
439
- If code_defect/env_issue: leave fix_code empty, provide evidence
440
-
441
- Rules:
442
- - NEVER suggest source code changes
443
- - A test correctly catching a real bug = code_defect, not test_defect
444
- - When uncertain: prefer code_defect (conservative)
445
- `,
446
- max_concurrency: 5,
447
- max_runtime_seconds: 1200,
448
- output_csv_path: `.tests/auto-test/.csv-session/diagnosis-iter-${iter}-results.csv`,
449
- output_schema: { id, classification, fix_code, evidence, error }
450
- })
451
-
452
- 2. Merge diagnosis results:
453
- - test_defect with fix_code → apply fix to test file
454
- - code_defect → mark as confirmed failure (stop retrying)
455
- - env_issue → mark as blocked
456
-
457
- 3. IF test_defects found:
458
- Re-run ALL scenarios in this layer (catch regressions)
459
-
460
- 4. IF no test_defects remain: break inner loop
461
-
462
- END INNER
463
-
464
- Record final layer results
465
- IF critical code_defects in this layer: stop layer progression (fail-fast)
466
-
467
- END FOR
468
-
469
- REFLECT:
470
- Analyze: which tests failed, pass rate improving/plateauing/regressing,
471
- failures clustered by component, strategy effectiveness.
472
- Append to reflection-log.md:
473
- iteration, strategy, pass_rate delta, what worked/failed,
474
- detected patterns, strategy assessment (effective/ineffective + recommendation)
475
-
476
- ADJUST (Adaptive Strategy Engine):
477
-
478
- | Condition | Strategy | Behavior |
479
- |-----------|----------|----------|
480
- | Iteration 1-2 | Conservative | Fix obvious test_defects only, don't refactor |
481
- | Pass rate >80% AND failures similar | Aggressive | Batch-fix related failures together |
482
- | New regressions appeared | Surgical | Revert last changes, fix regression only |
483
- | Stuck 3+ iterations (rate not improving) | Reflective | Step back, re-analyze root cause pattern |
484
-
485
- Transitions:
486
- Conservative --(>80%)--> Aggressive
487
- Aggressive --(regression)--> Surgical --(fixed)--> Aggressive
488
- Any --(stuck 3+ iters)--> Reflective --(insight)--> Conservative
489
-
490
- CONVERGENCE CHECK:
491
- pass_rate >= threshold (95%) → Step 8 (converged)
492
- iteration >= max_iter → Step 8 (max_iter_reached)
493
- all remaining failures = code_defect → Step 8 (confirmed_defects)
494
- ELSE → next outer iteration (back to Execute)
495
-
496
- END OUTER
497
- ```
498
-
499
- **Degenerate cases:**
500
- - `max_iter=1`: Step 5 writes tests, Step 6 executes once, Step 7 runs Reflect only (log results), no Adjust, no loop → Step 8. Equivalent to test-gen single pass.
501
- - `max_iter=3`: Inner loop cleans test_defects. Up to 3 outer passes. Similar to business-test.
502
- - `max_iter=5`: Full adaptive strategy progression. Similar to integration-test.
503
-
504
- ---
505
-
506
- ### Step 7.5: Test Confidence Scoring
507
-
508
- Scored after each REFLECT step. Dimensions (5): scenario_coverage, test_quality, diagnostic_accuracy, strategy_effectiveness, infrastructure_fitness. Factors (weights): completeness(.30), pass_rate_trend(.25), classification_accuracy(.20), coverage_breadth(.15), consistency(.10). Append confidence table to reflection-log.md.
509
-
510
- **Enhanced Convergence**: pass_rate ≥ 95% AND confidence ≥ 60% → converged. pass_rate ≥ 95% BUT confidence < 60% → continue (tests may be weak). max_iter reached or all failures = code_defect → Step 8.
511
-
512
- **Quality mechanisms**: Pressure Pass (before Step 8) — select 2-3 passing tests from highest-pass-rate layer, verify they exercise real behavior (not mock-only, non-trivial assertions). Devil's Advocate — pass_rate > 80% → challenge assertion specificity, error path coverage, mock over-reliance. Stall Detection — delta < 5% for 2 iterations + pass_rate flat → force Reflective strategy.
513
-
514
- **Readiness Gate** (before Step 8, skip if max_iter=1): scenario_coverage < 40% | no pressure pass | diagnostic_accuracy < 40% | unclassified failures. If blocked → force one additional iteration. Add confidence section to report.json.
515
-
516
- ---
517
-
518
- ### Step 8: Complete & Write Artifacts
519
-
520
- 1. Update session state:
521
- ```json
522
- // .tests/auto-test/state.json
523
- {
524
- "session_id": "auto-test-{YYYYMMDD-HHmmss}",
525
- "phase": "{phase}",
526
- "phase_dir": "{PHASE_DIR}",
527
- "source_route": "spec|gap|code|re-run",
528
- "blueprint_ref": "SPEC-001 | null",
529
- "spec_mode": "full|degraded|null",
530
- "status": "converged|max_iter_reached|confirmed_defects|single_pass",
531
- "flags": { "max_iter": 5, "layer": null, "dry_run": false, "re_run": false },
532
- "iteration": 2,
533
- "strategy": "conservative",
534
- "strategy_history": ["conservative", "aggressive"],
535
- "threshold": 95,
536
- "current_layer": "L2",
537
- "layer_state": {
538
- "L0": { "inner_iter": 1, "pass_rate": 100.0, "status": "passed" },
539
- "L1": { "inner_iter": 2, "pass_rate": 95.0, "status": "passed" },
540
- "L2": { "inner_iter": 1, "pass_rate": 87.5, "status": "completed" },
541
- "L3": { "inner_iter": 0, "pass_rate": 0, "status": "pending" }
542
- },
543
- "pass_rate_history": [72.0, 85.0, 95.0],
544
- "scenario_count": 30,
545
- "infrastructure": { "framework": "vitest", "run_command": "npm test" },
546
- "started_at": "{ISO}",
547
- "updated_at": "{ISO}"
548
- }
549
- ```
550
-
551
- 2. Archive previous report to `.history/` if exists.
552
-
553
- 3. Write `.tests/auto-test/report.json`:
554
- ```json
555
- {
556
- "phase": "{phase}",
557
- "source_route": "{ROUTE}",
558
- "blueprint_ref": "{spec ref or null}",
559
- "spec_mode": "full|degraded|null",
560
- "completed_at": "{ISO timestamp}",
561
- "convergence": {
562
- "status": "converged|max_iter_reached|confirmed_defects|single_pass",
563
- "iterations": N,
564
- "final_pass_rate": 95.0,
565
- "threshold": 95,
566
- "strategy_history": ["conservative", "aggressive"]
567
- },
568
- "infrastructure": { "framework": "vitest", "test_dir": "__tests__/", "run_command": "npm test" },
569
- "layers": {
570
- "L0": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 100.0 },
571
- "L1": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 95.0 },
572
- "L2": { ... },
573
- "L3": { ... }
574
- },
575
- "scenarios": [
576
- {
577
- "id": "AT-001", "source": "spec", "layer": "L1", "name": "...",
578
- "test_file": "...", "req_ref": "REQ-001:AC-1",
579
- "status": "passed|failed|blocked",
580
- "classification": "null|test_defect|code_defect|env_issue",
581
- "iterations_to_pass": 2
582
- }
583
- ],
584
- "failures": [
585
- {
586
- "id": "AF-001", "scenario_id": "AT-005", "req_ref": "REQ-001:AC-3",
587
- "layer": "L1", "severity": "critical", "classification": "code_defect",
588
- "description": "...", "expected": "...", "actual": "...",
589
- "fix_suggestion": { "file": "src/...", "line": 42, "direction": "..." }
590
- }
591
- ],
592
- "requirement_coverage": [],
593
- "summary": {
594
- "source_route": "{ROUTE}",
595
- "total_scenarios": 30, "total_passed": 26, "total_failed": 3, "total_blocked": 1,
596
- "bugs_discovered": 3, "test_defects_fixed": 5, "coverage_pct": 85.0
597
- }
598
- }
599
- ```
600
-
601
- 4. Update `validation.json`: if gap source, change MISSING → COVERED for passing tests.
602
- 5. Update `index.json` with `auto_test` section.
603
-
604
- **Artifact file mapping (old → new):**
605
-
606
- | Old file | New file |
607
- |----------|----------|
608
- | `.tests/test-gen-report.json` | `.tests/auto-test/report.json` (source_route: "gap") |
609
- | `.tests/integration/state.json` | `.tests/auto-test/state.json` |
610
- | `.tests/integration/summary.json` | Merged into report.json |
611
- | `.tests/integration/reflection-log.md` | `.tests/auto-test/reflection-log.md` |
612
- | `.tests/business/business-test-report.json` | `.tests/auto-test/report.json` (source_route: "spec") |
613
- | `.tests/business/business-test-summary.md` | `.tests/auto-test/traceability.md` (conditional) |
614
-
615
- ---
616
-
617
- ### Step 9: Post-Processing & Routing
618
-
619
- #### Conditional: Traceability Matrix (spec source only)
620
-
621
- Build REQ → AC → scenario → result mapping:
622
-
623
- ```
624
- FOR each REQ in requirements targeted:
625
- FOR each AC in REQ:
626
- scenarios_for_ac = filter scenarios where req_ref == "REQ-NNN:AC-{N}"
627
- ac_status = "passed" if ALL passed
628
- "failed" if ANY failed
629
- "blocked" if ANY blocked and none failed
630
- "untested" if no scenarios mapped
631
-
632
- req.coverage_pct = passed_criteria / total_criteria * 100
633
- req.verdict = "verified" if all MUST+SHOULD passed
634
- "partial" if some failed
635
- "unverified" if all failed or untested
636
- ```
637
-
638
- Populate `requirement_coverage[]` in report.json.
639
- Write `.tests/auto-test/traceability.md` (human-readable table).
640
-
641
- #### Conditional: Issue Creation (when failures exist)
642
-
643
- ```
644
- FOR each failure in report.failures WHERE classification == "code_defect":
645
- issue = {
646
- id: "ISS-{YYYYMMDD}-{counter:03d}",
647
- title: "Auto-Test: " + failure.req_ref + " - " + failure.description,
648
- status: "registered",
649
- priority: severity_to_priority(failure.severity),
650
- source: "auto-test",
651
- phase_ref: PHASE_NUM,
652
- description: "Expected: " + failure.expected + ". Actual: " + failure.actual,
653
- fix_direction: failure.fix_suggestion.direction,
654
- context: { location: failure.fix_suggestion.file + ":" + failure.fix_suggestion.line },
655
- tags: ["auto-test", failure.layer]
656
- }
657
- Append to .workflow/issues/issues.jsonl
658
- ```
659
-
660
- #### Report Display
661
-
662
- ```
663
- === AUTO-TEST RESULTS ===
664
- 阶段: {phase_name}
665
- 来源: {ROUTE}
666
- 迭代: {N} (策略: {strategy_history})
667
- 收敛: {status} ({final_pass_rate}%)
668
-
669
- 层级结果:
670
- L0 Static: {pass_rate}% ({passed}/{total})
671
- L1 Unit/API: {pass_rate}% ({passed}/{total})
672
- L2 Integration: {pass_rate}% ({passed}/{total})
673
- L3 E2E: {pass_rate}% ({passed}/{total})
674
-
675
- 场景: {passed} passed, {failed} failed, {blocked} blocked
676
- Bugs: {N} discovered
677
- {IF spec: "需求覆盖: {pct}% | 已验证: {n}/{total}"}
678
-
679
- Files:
680
- .tests/auto-test/state.json
681
- .tests/auto-test/test-plan.json
682
- .tests/auto-test/report.json
683
- .tests/auto-test/reflection-log.md
684
- {IF spec: ".tests/auto-test/traceability.md"}
685
- ```
686
-
687
- #### Next-step routing
688
-
689
- | Result | Suggestion |
690
- |--------|------------|
691
- | Converged (>=threshold) | `/quality-review {phase}` to update validation |
692
- | All requirements verified (spec) | `/maestro-milestone-audit` |
693
- | Bugs discovered (code_defects) | `/quality-debug --from-auto-test {phase}` |
694
- | Max iter, >80% | `/quality-test {phase}` for manual UAT on remaining gaps |
695
- | Max iter, <80% | `/quality-debug {phase}` for deep investigation |
696
- | Coverage still low | `/quality-auto-test {phase} --layer {missing}` |
697
- | Re-run all pass | `/quality-review {phase}` |
698
- | Single pass (max_iter=1), bugs found | `/quality-debug --from-auto-test {phase}` |
699
- | Single pass, all pass | `/quality-test {phase}` |
1
+ # Auto-Test Workflow (Unified)
2
+
3
+ Unified automated testing with intelligent state-based routing. Merges test generation (gap-forward), business testing (PRD-forward), and integration testing (code-forward) into a single pipeline.
4
+
5
+ **Core idea: read project state → auto-select scenario source → shared pipeline from plan through iteration.**
6
+
7
+ Pipeline: Parse → Route → Source Scenarios → Discover Infrastructure → Plan → Write Tests → Execute → Iterate → Report
8
+ Only Step 2 diverges (scenario source). Everything else is shared.
9
+
10
+ ---
11
+
12
+ ### Step 0: Parse Input & Load Specs
13
+
14
+ **Parse arguments:**
15
+
16
+ | Input | Result |
17
+ |-------|--------|
18
+ | No arguments | Error E001 |
19
+ | Phase number | Resolve phase dir from artifact registry |
20
+ | `--max-iter N` | Set MAX_ITER = N (default 5). **1 = single-pass** (no iteration loop) |
21
+ | `--layer L` | Start from / restrict to specific layer (L0\|L1\|L2\|L3) |
22
+ | `--dry-run` | Generate plan only, do not execute |
23
+ | `--re-run` | Re-run only previously failed scenarios |
24
+
25
+ **Resolve phase dir:** from `state.json` artifact registry (`type='execute'`, matching phase). Error E002 if not found.
26
+
27
+ **Load specs:**
28
+ ```
29
+ specs_test = maestro spec load --category test
30
+ specs_arch = maestro spec load --category arch
31
+ ```
32
+
33
+ `specs_test` for test conventions (Steps 3-5); `specs_arch` for module boundaries (Step 2).
34
+
35
+ ---
36
+
37
+ ### Step 1: Read State & Route
38
+
39
+ Read project state signals and auto-select scenario source. This is the **primary branch point, with Route-specific extraction in Step 2** (after Step 2 normalization, the downstream pipeline is identical).
40
+
41
+ ```
42
+ Priority: Resume > Re-run > Spec > Gap > Code
43
+
44
+ 1. RESUME:
45
+ Check: ${PHASE_DIR}/.tests/auto-test/state.json exists AND status == "running"
46
+ Compat: also check ${PHASE_DIR}/.tests/integration/state.json (old format)
47
+ Action: offer resume or restart
48
+ If resume: restore session, jump to Step 6 at saved iteration/layer
49
+ If restart: archive to .history/, continue as new
50
+
51
+ 2. RE-RUN:
52
+ Check: --re-run flag AND .tests/auto-test/report.json has failed/blocked scenarios
53
+ Compat: also check .tests/business/business-test-report.json (old format)
54
+ Action: load failed/blocked scenarios with status reset to pending
55
+ Skip to Step 4 (scenarios pre-loaded, plan confirmation)
56
+
57
+ # Note: `integration/state.json` and `business/business-test-report.json` are
58
+ # legacy compat paths read for backward compatibility only. The new pipeline
59
+ # writes exclusively to `.tests/auto-test/state.json` and `.tests/auto-test/report.json`
60
+ # (these legacy paths are superseded; see migration table at end of file).
61
+
62
+ 3. SPEC:
63
+ Check: .workflow/blueprint/BLP-*/requirements/REQ-*.md exists
64
+ Resolve: SPEC_DIR from index.json.blueprint_ref or most recent BLP-*/
65
+ If SPEC_DIR found: set ROUTE = "spec", SPEC_MODE = "full"
66
+ If no spec but has success_criteria: set ROUTE = "spec", SPEC_MODE = "degraded"
67
+
68
+ 4. GAP:
69
+ Check: ${PHASE_DIR}/verification.json has gaps[] with status MISSING or PARTIAL
70
+ OR: ${PHASE_DIR}/.tests/coverage-report.json has requirements_uncovered[]
71
+ Action: set ROUTE = "gap"
72
+
73
+ 5. CODE:
74
+ Default fallback when no spec package and no gaps detected.
75
+ Action: set ROUTE = "code"
76
+ ```
77
+
78
+ **Display route selection:**
79
+ ```
80
+ === AUTO-TEST ===
81
+ 来源: {ROUTE} ({reason})
82
+ 阶段: {phase_name}
83
+ {IF spec: "Spec: {SPEC_DIR} (mode: {SPEC_MODE})"}
84
+ ```
85
+
86
+ ---
87
+
88
+ ### Step 2: Source Scenarios
89
+
90
+ Execute the route-specific scenario extraction, then normalize ALL scenarios into the unified format. **After this step, the pipeline is identical regardless of source.**
91
+
92
+ #### Route A: `spec` source (PRD-forward)
93
+
94
+ 1. Load spec package:
95
+ - `requirements/REQ-*.md` — functional requirements with acceptance criteria
96
+ - `requirements/NFR-*.md` — non-functional requirements
97
+ - `architecture/_index.md` — API endpoints, data model, state machines
98
+ - `epics/EPIC-*.md` — user stories for E2E scenarios
99
+
100
+ 2. For each `REQ-NNN-{slug}.md`, parse `## Acceptance Criteria`:
101
+ - Extract each numbered criterion as a scenario seed
102
+ - Map RFC 2119 keywords to priority:
103
+
104
+ | Keyword | Priority | Failure Severity |
105
+ |---------|----------|-----------------|
106
+ | MUST / MUST NOT / SHALL / SHALL NOT | critical | blocker |
107
+ | SHOULD / SHOULD NOT / RECOMMENDED | high | major |
108
+ | MAY / OPTIONAL | medium | minor |
109
+
110
+ 3. Classify scenario into layer:
111
+
112
+ | Source | Layer | Category |
113
+ |--------|-------|----------|
114
+ | Architecture API endpoints + REQ AC about request/response | L1 | api_contract |
115
+ | REQ AC about business logic, validation, state changes | L2 | business_rule |
116
+ | REQ AC about state transitions (from architecture state machines) | L2 | state_transition |
117
+ | Epic user stories (multi-step flows) | L3 | user_flow |
118
+ | NFR performance/security constraints | L2 | non_functional |
119
+
120
+ 4. **Generate Fixtures** (conditional sub-step):
121
+
122
+ **Tier 1: Schema-derived fixtures**
123
+ ```
124
+ FOR each entity in REQ data model:
125
+ valid: object satisfying all field constraints
126
+ invalid: one variant per constraint violation (null_required, empty_string, overflow, wrong_type)
127
+ boundary: edge value variants (min_value, max_value, min_minus_one, max_plus_one)
128
+ ```
129
+
130
+ **Tier 2: Acceptance-criteria-derived expectations**
131
+ ```
132
+ FOR each "MUST return X when Y": fixture { input: Y, expected: X }
133
+ FOR each "MUST validate Z": fixture { input: invalid_Z, expected: validation_error }
134
+ ```
135
+
136
+ **Tier 3: Business-scenario-derived data sets (L3 only)**
137
+ ```
138
+ FOR each Epic user story:
139
+ scenario_pack: coordinated data set across story steps
140
+ ```
141
+
142
+ **Mock contracts:**
143
+ ```
144
+ FOR each API endpoint in architecture/_index.md:
145
+ mock_contract: { request_pattern, response_fixture }
146
+ ```
147
+
148
+ 5. **Degraded mode** (SPEC_MODE = "degraded"):
149
+ - Extract from `index.json.success_criteria` (each → one L2 scenario)
150
+ - Extract from `plan.json` task convergence criteria (each → one L1/L2 scenario)
151
+ - Extract from `.summaries/TASK-*-summary.md` (each → one L1 scenario)
152
+ - All default to priority: "high". No L3 in degraded mode.
153
+
154
+ 6. Convert to unified scenario format.
155
+
156
+ #### Route B: `gap` source (coverage-forward)
157
+
158
+ 1. Read gap sources:
159
+ - `verification.json` → `gaps[]` with status MISSING or PARTIAL
160
+ - `coverage-report.json` → `requirements_uncovered[]`
161
+ - Task summaries → modified files list
162
+
163
+ 2. Priority: MISSING or uncovered → HIGH; PARTIAL → MEDIUM.
164
+
165
+ 3. Classify each changed file:
166
+
167
+ | File Type | Category | Layer |
168
+ |-----------|----------|-------|
169
+ | Pure function / utility | unit | L1 |
170
+ | React component | unit + e2e | L1 + L3 |
171
+ | API route / handler | integration | L2 |
172
+ | Database model / query | integration | L2 |
173
+ | CLI command | e2e | L3 |
174
+ | Config / types / constants / CSS / test files | skip | — |
175
+
176
+ 4. **Optional: CLI supplementary analysis** (skip if no CLI tools enabled or all files "skip"):
177
+ ```
178
+ Bash({
179
+ command: 'maestro delegate "PURPOSE: Analyze source files for test-worthy edge cases
180
+ TASK: Identify error handling | boundary conditions | state transitions | external dependencies
181
+ MODE: analysis
182
+ CONTEXT: @${target_files}
183
+ EXPECTED: JSON array of { file, edge_cases: [{ description, type, priority }] }
184
+ CONSTRAINTS: Non-obvious cases only | Max 5 per file
185
+ " --role analyze --mode analysis',
186
+ run_in_background: true
187
+ })
188
+ ```
189
+ On callback: merge edge_cases into scenarios, mark `source: "cli-analysis"`.
190
+
191
+ 5. Convert to unified scenario format.
192
+
193
+ #### Route C: `code` source (exploration-forward)
194
+
195
+ 1. Explore codebase for testable integration points:
196
+ - Module boundaries and cross-module calls
197
+ - API endpoints and their handlers
198
+ - Database interactions and queries
199
+ - External service integrations
200
+ - Event flows and message passing
201
+
202
+ 2. Scan for cross-module imports, API route definitions, database calls.
203
+
204
+ 3. Map integration points: which modules communicate through what interfaces.
205
+
206
+ 4. Infer layer from integration type:
207
+ - Isolated function → L1
208
+ - Cross-module call / API handler → L2
209
+ - Full user flow → L3
210
+
211
+ 5. Convert to unified scenario format.
212
+
213
+ #### Unified Scenario Format
214
+
215
+ All routes produce this identical structure:
216
+
217
+ ```json
218
+ {
219
+ "id": "AT-{NNN}",
220
+ "source": "spec|gap|code|re-run",
221
+ "layer": "L0|L1|L2|L3",
222
+ "priority": "critical|high|medium",
223
+ "category": "api_contract|business_rule|state_transition|user_flow|non_functional|unit|integration|e2e|static",
224
+ "name": "descriptive scenario name",
225
+ "target_file": "src/path/to/file.ts",
226
+ "test_file": "src/path/__tests__/file.test.ts",
227
+ "req_ref": "REQ-NNN:AC-N | gap-id | null",
228
+ "description": "what this scenario validates",
229
+ "test_cases": ["case 1", "case 2"],
230
+ "input": { "$fixture_ref": "..." },
231
+ "expected": {
232
+ "status": 200,
233
+ "behavior": "description of expected outcome"
234
+ },
235
+ "preconditions": [],
236
+ "postconditions": [],
237
+ "mock_services": [],
238
+ "fixtures": {}
239
+ }
240
+ ```
241
+
242
+ **Field population by route:**
243
+
244
+ | Field | spec | gap | code |
245
+ |-------|------|-----|------|
246
+ | `req_ref` | REQ-NNN:AC-N | gap ID from verification.json | null |
247
+ | `fixtures` | Tier 1-3 generated | empty (inferred in Step 5) | empty (inferred in Step 5) |
248
+ | `mock_services` | from architecture/_index.md | empty | discovered from imports |
249
+ | `preconditions` | from REQ AC text | empty | empty |
250
+
251
+ ---
252
+
253
+ ### Step 3: Discover Test Infrastructure
254
+
255
+ Detect existing test framework and patterns:
256
+
257
+ 1. **Config files**: `jest.config.*`, `vitest.config.*`, `pytest.ini`, `pyproject.toml`, `.mocharc.*`
258
+ 2. **Existing tests**: `*.test.*`, `*.spec.*`, `test_*` (exclude node_modules, .git)
259
+ 3. **Utilities**: `test-utils.*`, `testHelper*`, `conftest.py`, `setup.*`
260
+
261
+ Extract: framework, directory structure, naming convention, test utilities, run command.
262
+
263
+ Read 2-3 existing test files to learn: import style, describe/it nesting, assertion library, mock patterns, setup/teardown.
264
+
265
+ **Detect tech stack for generation:**
266
+
267
+ | Stack | L1 | L2 | L3 |
268
+ |-------|----|----|-----|
269
+ | Java/Spring Boot | MockMvc | JUnit 5 + WireMock | TestContainers |
270
+ | TypeScript/Node | vitest | supertest + nock | playwright/cypress |
271
+ | Python | pytest | httpx + responses | selenium |
272
+
273
+ If no test framework detected: Error E003.
274
+
275
+ Output: `infrastructure` object passed to Steps 5-6.
276
+
277
+ ---
278
+
279
+ ### Step 4: Generate Test Plan & Confirm
280
+
281
+ 1. **Merge pre-existing tests** from `.tests/test-gen-report.json` (if exists):
282
+ - Mark as "pre-existing" so Step 5 skips writing them
283
+ - Step 6 includes them in execution
284
+
285
+ 2. Apply `--layer` filter if specified.
286
+
287
+ 3. **Archive previous plan** to `.history/` if exists.
288
+
289
+ 4. Write `.tests/auto-test/test-plan.json`:
290
+ ```json
291
+ {
292
+ "phase": "{phase}",
293
+ "source_route": "{ROUTE}",
294
+ "blueprint_ref": "{SPEC_DIR name or null}",
295
+ "spec_mode": "full|degraded|null",
296
+ "generated_at": "{ISO timestamp}",
297
+ "infrastructure": { "framework": "...", "run_command": "..." },
298
+ "layers": {
299
+ "L0": { "scenario_count": N, "commands": ["tsc --noEmit", "eslint src/"] },
300
+ "L1": { "scenario_count": N, "priority_distribution": { "critical": X, "high": Y, "medium": Z } },
301
+ "L2": { "scenario_count": N, "priority_distribution": { ... } },
302
+ "L3": { "scenario_count": N, "priority_distribution": { ... } }
303
+ },
304
+ "scenarios": [ "...unified format..." ],
305
+ "fixtures": { "...if spec source..." },
306
+ "requirement_coverage_plan": { "requirements_targeted": [], "requirements_skipped": [] }
307
+ }
308
+ ```
309
+
310
+ 5. Display and confirm:
311
+ ```
312
+ === AUTO-TEST PLAN ===
313
+ 来源: {ROUTE}
314
+ 阶段: {phase_name}
315
+ Blueprint: {blueprint_ref or "N/A"}
316
+
317
+ 层级分布:
318
+ L0 Static: {N} checks
319
+ L1 Unit/API: {N} scenarios ({X} critical, {Y} high)
320
+ L2 Integration: {N} scenarios ({X} critical, {Y} high)
321
+ L3 E2E: {N} scenarios ({X} critical, {Y} high)
322
+
323
+ Total: {N} scenarios, {M} test cases
324
+ Max iterations: {max_iter}
325
+
326
+ Proceed? (yes/edit/cancel)
327
+ ```
328
+
329
+ - `--dry-run`: stop here, report plan
330
+ - User "edit": modify plan interactively
331
+ - User "cancel": abort
332
+
333
+ ---
334
+
335
+ ### Step 5: Write Tests (RED-GREEN) via CSV Parallel
336
+
337
+ **Parallel strategy**: Build `layer-L{N}-write.csv` per layer, execute via `spawn_agents_on_csv`. Each agent writes one test file independently.
338
+
339
+ #### 5a. Build Write CSV
340
+
341
+ For each layer (L1, L2, L3 — sequential):
342
+
343
+ ```
344
+ Extract pending scenarios for this layer from test-plan.json
345
+ Build layer-L{N}-write.csv:
346
+ Columns: id, name, target_file, test_file, description, test_cases, fixtures, req_ref, infrastructure_hints, prev_context
347
+
348
+ prev_context = findings from completed prior-layer scenarios (cross-layer propagation)
349
+ ```
350
+
351
+ #### 5b. Parallel Test Writing via spawn_agents_on_csv
352
+
353
+ ```javascript
354
+ spawn_agents_on_csv({
355
+ csv_path: `.tests/auto-test/.csv-session/layer-L${N}-write.csv`,
356
+ id_column: "id",
357
+ instruction: `
358
+ Write ONE test file for the given scenario using RED-GREEN methodology.
359
+
360
+ Rules:
361
+ - Read target_file to understand module under test
362
+ - Write test at test_file path following infrastructure_hints patterns
363
+ - Each test_case → one it() block, include id in describe("AT-NNN: {name}")
364
+ - Use fixtures column (infer from source if empty)
365
+ - Run test once after writing: report red_result
366
+ - NEVER modify source code — only write/fix test files
367
+
368
+ RED results:
369
+ - pass: test passes immediately (may need strengthening)
370
+ - expected_fail: test correctly targets real behavior
371
+ - unexpected_fail: setup/import error — fix test, re-run
372
+
373
+ Read discoveries.ndjson for shared patterns. Append if you find reusable ones.
374
+ `,
375
+ max_concurrency: 5,
376
+ max_runtime_seconds: 1800,
377
+ output_csv_path: `.tests/auto-test/.csv-session/layer-L${N}-write-results.csv`,
378
+ output_schema: { id, status: [written|failed], red_result: [expected_fail|unexpected_fail|pass], findings, error }
379
+ })
380
+ ```
381
+
382
+ #### 5c. Merge & Continue
383
+
384
+ Merge write-results into master state. Delete temp CSV. Proceed to next layer or Step 6.
385
+
386
+ **If `--max-iter 1`:** After all layers written and run once, jump directly to Step 8 (single-pass mode, replaces test-gen behavior). Skip Steps 6-7.
387
+
388
+ ---
389
+
390
+ ### Step 6: Execute (Progressive Layers)
391
+
392
+ Run tests progressively through layers with fail-fast on critical:
393
+
394
+ - L0: `tsc --noEmit` + `eslint src/` (static analysis)
395
+ - L1: unit tests (`--testPathPattern="unit|__tests__"`)
396
+ - L2: integration tests (`--testPathPattern="integration"`)
397
+ - L3: E2E tests (`--testPathPattern="e2e"`)
398
+
399
+ **Fail-fast rule:**
400
+ - L0 must pass before L1
401
+ - If ANY "critical" priority failure in L1 → do NOT proceed to L2
402
+ - If ANY "critical" priority failure in L2 → do NOT proceed to L3
403
+ - "high" and "medium" failures do NOT block next layer
404
+
405
+ Record per-scenario results: `{ status, actual_response, duration_ms, error_detail, classification: null }`.
406
+
407
+ Write iteration results to `.tests/auto-test/results-iter-{N}.json`.
408
+
409
+ ---
410
+
411
+ ### Step 7: Reflect & Adjust (Unified Iteration Engine)
412
+
413
+ Single engine that subsumes both Generator-Critic (per-layer inner) and Reflect-Adjust (global outer). Uses `spawn_agents_on_csv` for parallel failure diagnosis.
414
+
415
+ ```
416
+ OUTER LOOP (max_iter iterations):
417
+
418
+ FOR each active layer (L0 through current):
419
+
420
+ INNER LOOP (max 3 iterations per layer — Generator-Critic):
421
+
422
+ 1. Build diagnosis CSV from failed scenarios:
423
+
424
+ Build diagnosis-iter-{N}.csv:
425
+ Columns: id, scenario_id, layer, test_file, error_detail, expected, actual, target_file, source_context
426
+
427
+ spawn_agents_on_csv({
428
+ csv_path: `.tests/auto-test/.csv-session/diagnosis-iter-${iter}.csv`,
429
+ id_column: "id",
430
+ instruction: `
431
+ Classify ONE test failure and provide fix if applicable.
432
+
433
+ Classifications:
434
+ - test_defect: Test wrong (bad import, endpoint, fixture, assertion)
435
+ - code_defect: Source violates business rule (actual != expected)
436
+ - env_issue: Environment problem (service down, config missing)
437
+
438
+ If test_defect: provide fix_code (old → new)
439
+ If code_defect/env_issue: leave fix_code empty, provide evidence
440
+
441
+ Rules:
442
+ - NEVER suggest source code changes
443
+ - A test correctly catching a real bug = code_defect, not test_defect
444
+ - When uncertain: prefer code_defect (conservative)
445
+ `,
446
+ max_concurrency: 5,
447
+ max_runtime_seconds: 1200,
448
+ output_csv_path: `.tests/auto-test/.csv-session/diagnosis-iter-${iter}-results.csv`,
449
+ output_schema: { id, classification, fix_code, evidence, error }
450
+ })
451
+
452
+ 2. Merge diagnosis results:
453
+ - test_defect with fix_code → apply fix to test file
454
+ - code_defect → mark as confirmed failure (stop retrying)
455
+ - env_issue → mark as blocked
456
+
457
+ 3. IF test_defects found:
458
+ Re-run ALL scenarios in this layer (catch regressions)
459
+
460
+ 4. IF no test_defects remain: break inner loop
461
+
462
+ END INNER
463
+
464
+ Record final layer results
465
+ IF critical code_defects in this layer: stop layer progression (fail-fast)
466
+
467
+ END FOR
468
+
469
+ REFLECT:
470
+ Analyze: which tests failed, pass rate improving/plateauing/regressing,
471
+ failures clustered by component, strategy effectiveness.
472
+ Append to reflection-log.md:
473
+ iteration, strategy, pass_rate delta, what worked/failed,
474
+ detected patterns, strategy assessment (effective/ineffective + recommendation)
475
+
476
+ ADJUST (Adaptive Strategy Engine):
477
+
478
+ | Condition | Strategy | Behavior |
479
+ |-----------|----------|----------|
480
+ | Iteration 1-2 | Conservative | Fix obvious test_defects only, don't refactor |
481
+ | Pass rate >80% AND failures similar | Aggressive | Batch-fix related failures together |
482
+ | New regressions appeared | Surgical | Revert last changes, fix regression only |
483
+ | Stuck 3+ iterations (rate not improving) | Reflective | Step back, re-analyze root cause pattern |
484
+
485
+ Transitions:
486
+ Conservative --(>80%)--> Aggressive
487
+ Aggressive --(regression)--> Surgical --(fixed)--> Aggressive
488
+ Any --(stuck 3+ iters)--> Reflective --(insight)--> Conservative
489
+
490
+ CONVERGENCE CHECK:
491
+ pass_rate >= threshold (95%) → Step 8 (converged)
492
+ iteration >= max_iter → Step 8 (max_iter_reached)
493
+ all remaining failures = code_defect → Step 8 (confirmed_defects)
494
+ ELSE → next outer iteration (back to Execute)
495
+
496
+ END OUTER
497
+ ```
498
+
499
+ **Degenerate cases:**
500
+ - `max_iter=1`: Step 5 writes tests, Step 6 executes once, Step 7 runs Reflect only (log results), no Adjust, no loop → Step 8. Equivalent to test-gen single pass.
501
+ - `max_iter=3`: Inner loop cleans test_defects. Up to 3 outer passes. Similar to business-test.
502
+ - `max_iter=5`: Full adaptive strategy progression. Similar to integration-test.
503
+
504
+ ---
505
+
506
+ ### Step 7.5: Test Confidence Scoring
507
+
508
+ Scored after each REFLECT step. Dimensions (5): scenario_coverage, test_quality, diagnostic_accuracy, strategy_effectiveness, infrastructure_fitness. Factors (weights): completeness(.30), pass_rate_trend(.25), classification_accuracy(.20), coverage_breadth(.15), consistency(.10). Append confidence table to reflection-log.md.
509
+
510
+ **Enhanced Convergence**: pass_rate ≥ 95% AND confidence ≥ 60% → converged. pass_rate ≥ 95% BUT confidence < 60% → continue (tests may be weak). max_iter reached or all failures = code_defect → Step 8.
511
+
512
+ **Quality mechanisms**: Pressure Pass (before Step 8) — select 2-3 passing tests from highest-pass-rate layer, verify they exercise real behavior (not mock-only, non-trivial assertions). Devil's Advocate — pass_rate > 80% → challenge assertion specificity, error path coverage, mock over-reliance. Stall Detection — delta < 5% for 2 iterations + pass_rate flat → force Reflective strategy.
513
+
514
+ **Readiness Gate** (before Step 8, skip if max_iter=1): scenario_coverage < 40% | no pressure pass | diagnostic_accuracy < 40% | unclassified failures. If blocked → force one additional iteration. Add confidence section to report.json.
515
+
516
+ ---
517
+
518
+ ### Step 8: Complete & Write Artifacts
519
+
520
+ 1. Update session state:
521
+ ```json
522
+ // .tests/auto-test/state.json
523
+ {
524
+ "session_id": "auto-test-{YYYYMMDD-HHmmss}",
525
+ "phase": "{phase}",
526
+ "phase_dir": "{PHASE_DIR}",
527
+ "source_route": "spec|gap|code|re-run",
528
+ "blueprint_ref": "SPEC-001 | null",
529
+ "spec_mode": "full|degraded|null",
530
+ "status": "converged|max_iter_reached|confirmed_defects|single_pass",
531
+ "flags": { "max_iter": 5, "layer": null, "dry_run": false, "re_run": false },
532
+ "iteration": 2,
533
+ "strategy": "conservative",
534
+ "strategy_history": ["conservative", "aggressive"],
535
+ "threshold": 95,
536
+ "current_layer": "L2",
537
+ "layer_state": {
538
+ "L0": { "inner_iter": 1, "pass_rate": 100.0, "status": "passed" },
539
+ "L1": { "inner_iter": 2, "pass_rate": 95.0, "status": "passed" },
540
+ "L2": { "inner_iter": 1, "pass_rate": 87.5, "status": "completed" },
541
+ "L3": { "inner_iter": 0, "pass_rate": 0, "status": "pending" }
542
+ },
543
+ "pass_rate_history": [72.0, 85.0, 95.0],
544
+ "scenario_count": 30,
545
+ "infrastructure": { "framework": "vitest", "run_command": "npm test" },
546
+ "started_at": "{ISO}",
547
+ "updated_at": "{ISO}"
548
+ }
549
+ ```
550
+
551
+ 2. Archive previous report to `.history/` if exists.
552
+
553
+ 3. Write `.tests/auto-test/report.json`:
554
+ ```json
555
+ {
556
+ "phase": "{phase}",
557
+ "source_route": "{ROUTE}",
558
+ "blueprint_ref": "{spec ref or null}",
559
+ "spec_mode": "full|degraded|null",
560
+ "completed_at": "{ISO timestamp}",
561
+ "convergence": {
562
+ "status": "converged|max_iter_reached|confirmed_defects|single_pass",
563
+ "iterations": N,
564
+ "final_pass_rate": 95.0,
565
+ "threshold": 95,
566
+ "strategy_history": ["conservative", "aggressive"]
567
+ },
568
+ "infrastructure": { "framework": "vitest", "test_dir": "__tests__/", "run_command": "npm test" },
569
+ "layers": {
570
+ "L0": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 100.0 },
571
+ "L1": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 95.0 },
572
+ "L2": { ... },
573
+ "L3": { ... }
574
+ },
575
+ "scenarios": [
576
+ {
577
+ "id": "AT-001", "source": "spec", "layer": "L1", "name": "...",
578
+ "test_file": "...", "req_ref": "REQ-001:AC-1",
579
+ "status": "passed|failed|blocked",
580
+ "classification": "null|test_defect|code_defect|env_issue",
581
+ "iterations_to_pass": 2
582
+ }
583
+ ],
584
+ "failures": [
585
+ {
586
+ "id": "AF-001", "scenario_id": "AT-005", "req_ref": "REQ-001:AC-3",
587
+ "layer": "L1", "severity": "critical", "classification": "code_defect",
588
+ "description": "...", "expected": "...", "actual": "...",
589
+ "fix_suggestion": { "file": "src/...", "line": 42, "direction": "..." }
590
+ }
591
+ ],
592
+ "requirement_coverage": [],
593
+ "summary": {
594
+ "source_route": "{ROUTE}",
595
+ "total_scenarios": 30, "total_passed": 26, "total_failed": 3, "total_blocked": 1,
596
+ "bugs_discovered": 3, "test_defects_fixed": 5, "coverage_pct": 85.0
597
+ }
598
+ }
599
+ ```
600
+
601
+ 4. Update `validation.json`: if gap source, change MISSING → COVERED for passing tests.
602
+ 5. Update `index.json` with `auto_test` section.
603
+
604
+ **Artifact file mapping (old → new):**
605
+
606
+ | Old file | New file |
607
+ |----------|----------|
608
+ | `.tests/test-gen-report.json` | `.tests/auto-test/report.json` (source_route: "gap") |
609
+ | `.tests/integration/state.json` | `.tests/auto-test/state.json` |
610
+ | `.tests/integration/summary.json` | Merged into report.json |
611
+ | `.tests/integration/reflection-log.md` | `.tests/auto-test/reflection-log.md` |
612
+ | `.tests/business/business-test-report.json` | `.tests/auto-test/report.json` (source_route: "spec") |
613
+ | `.tests/business/business-test-summary.md` | `.tests/auto-test/traceability.md` (conditional) |
614
+
615
+ ---
616
+
617
+ ### Step 9: Post-Processing & Routing
618
+
619
+ #### Conditional: Traceability Matrix (spec source only)
620
+
621
+ Build REQ → AC → scenario → result mapping:
622
+
623
+ ```
624
+ FOR each REQ in requirements targeted:
625
+ FOR each AC in REQ:
626
+ scenarios_for_ac = filter scenarios where req_ref == "REQ-NNN:AC-{N}"
627
+ ac_status = "passed" if ALL passed
628
+ "failed" if ANY failed
629
+ "blocked" if ANY blocked and none failed
630
+ "untested" if no scenarios mapped
631
+
632
+ req.coverage_pct = passed_criteria / total_criteria * 100
633
+ req.verdict = "verified" if all MUST+SHOULD passed
634
+ "partial" if some failed
635
+ "unverified" if all failed or untested
636
+ ```
637
+
638
+ Populate `requirement_coverage[]` in report.json.
639
+ Write `.tests/auto-test/traceability.md` (human-readable table).
640
+
641
+ #### Conditional: Issue Creation (when failures exist)
642
+
643
+ ```
644
+ FOR each failure in report.failures WHERE classification == "code_defect":
645
+ issue = {
646
+ id: "ISS-{YYYYMMDD}-{counter:03d}",
647
+ title: "Auto-Test: " + failure.req_ref + " - " + failure.description,
648
+ status: "registered",
649
+ priority: severity_to_priority(failure.severity),
650
+ source: "auto-test",
651
+ phase_ref: PHASE_NUM,
652
+ description: "Expected: " + failure.expected + ". Actual: " + failure.actual,
653
+ fix_direction: failure.fix_suggestion.direction,
654
+ context: { location: failure.fix_suggestion.file + ":" + failure.fix_suggestion.line },
655
+ tags: ["auto-test", failure.layer]
656
+ }
657
+ Append to .workflow/issues/issues.jsonl
658
+ ```
659
+
660
+ #### Report Display
661
+
662
+ ```
663
+ === AUTO-TEST RESULTS ===
664
+ 阶段: {phase_name}
665
+ 来源: {ROUTE}
666
+ 迭代: {N} (策略: {strategy_history})
667
+ 收敛: {status} ({final_pass_rate}%)
668
+
669
+ 层级结果:
670
+ L0 Static: {pass_rate}% ({passed}/{total})
671
+ L1 Unit/API: {pass_rate}% ({passed}/{total})
672
+ L2 Integration: {pass_rate}% ({passed}/{total})
673
+ L3 E2E: {pass_rate}% ({passed}/{total})
674
+
675
+ 场景: {passed} passed, {failed} failed, {blocked} blocked
676
+ Bugs: {N} discovered
677
+ {IF spec: "需求覆盖: {pct}% | 已验证: {n}/{total}"}
678
+
679
+ Files:
680
+ .tests/auto-test/state.json
681
+ .tests/auto-test/test-plan.json
682
+ .tests/auto-test/report.json
683
+ .tests/auto-test/reflection-log.md
684
+ {IF spec: ".tests/auto-test/traceability.md"}
685
+ ```
686
+
687
+ #### Next-step routing
688
+
689
+ | Result | Suggestion |
690
+ |--------|------------|
691
+ | Converged (>=threshold) | `/quality-review {phase}` to update validation |
692
+ | All requirements verified (spec) | `/maestro-milestone-audit` |
693
+ | Bugs discovered (code_defects) | `/quality-debug --from-auto-test {phase}` |
694
+ | Max iter, >80% | `/quality-test {phase}` for manual UAT on remaining gaps |
695
+ | Max iter, <80% | `/quality-debug {phase}` for deep investigation |
696
+ | Coverage still low | `/quality-auto-test {phase} --layer {missing}` |
697
+ | Re-run all pass | `/quality-review {phase}` |
698
+ | Single pass (max_iter=1), bugs found | `/quality-debug --from-auto-test {phase}` |
699
+ | Single pass, all pass | `/quality-test {phase}` |