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,570 +1,570 @@
1
- # Business Test Workflow (PRD-Forward)
2
-
3
- Validate built features against PRD acceptance criteria through automated multi-layer business testing with requirement traceability, fixture generation, and feedback loop.
4
-
5
- PRD-forward: starts from REQ-*.md acceptance criteria, not from code coverage gaps.
6
- Progressive layers: L1 Interface Contract -> L2 Business Rule -> L3 Business Scenario (E2E).
7
- Generator-Critic loop: max 3 iterations per layer to distinguish test defects from code defects.
8
-
9
- **Philosophy: Business rules are the source of truth. Code must satisfy them, not the other way around.**
10
-
11
- ---
12
-
13
- ### Step 1: Resolve Target & Load Spec Package
14
-
15
- **Parse arguments:**
16
-
17
- | Input | Result |
18
- |-------|--------|
19
- | No arguments | Error E001 |
20
- | Phase number | Resolve `.workflow/phases/{NN}-{slug}/` |
21
- | `--spec SPEC-xxx` | Explicit spec reference |
22
- | `--layer L1\|L2\|L3` | Run only specific layer |
23
- | `--gen-code` | Generate framework-specific test classes |
24
- | `--dry-run` | Extract scenarios only, don't execute |
25
- | `--re-run` | Re-run only previously failed scenarios |
26
- | `--auto` | Skip interactive confirmations |
27
-
28
- **Load spec package:**
29
-
30
- ```
31
- 1. Read ${PHASE_DIR}/index.json -> extract blueprint_ref (if present)
32
- 2. IF --spec provided: SPEC_DIR = .workflow/blueprint/{blueprint_ref}/
33
- ELSE IF index.json.blueprint_ref: SPEC_DIR = .workflow/blueprint/{blueprint_ref}/
34
- ELSE: try .workflow/blueprint/SPEC-*/ (most recent)
35
-
36
- 3. IF SPEC_DIR found:
37
- - Read requirements/_index.md (requirement summary + traceability matrix)
38
- - Read all requirements/REQ-*.md (functional requirements with acceptance criteria)
39
- - Read all requirements/NFR-*.md (non-functional requirements)
40
- - Read architecture/_index.md (API endpoints, data model, state machines)
41
- - Read epics/EPIC-*.md (user stories -> E2E scenario source)
42
- SPEC_MODE = "full"
43
-
44
- 4. IF no spec package found (DEGRADED MODE):
45
- - Read index.json.success_criteria
46
- - Read plan.json tasks with convergence.criteria
47
- - Read .summaries/TASK-*-summary.md for implemented behavior
48
- SPEC_MODE = "degraded"
49
- Display: "No spec package found. Using success_criteria + plan.json for scenario extraction (degraded mode)."
50
- ```
51
-
52
- Check for existing business test session:
53
- ```bash
54
- ls ${PHASE_DIR}/.tests/business/business-test-report.json 2>/dev/null
55
- ```
56
-
57
- If session exists AND `--re-run`: load previous report, filter to failed/blocked scenarios only.
58
- If session exists AND no `--re-run`: offer resume or restart.
59
-
60
- ---
61
-
62
- ### Step 2: Extract Business Test Scenarios from PRD
63
-
64
- **Full mode (SPEC_MODE = "full"):**
65
-
66
- For each `REQ-NNN-{slug}.md`:
67
-
68
- 1. Parse `## Acceptance Criteria` section
69
- 2. Extract each numbered criterion as a test scenario seed
70
- 3. Map RFC 2119 keywords to test priority:
71
-
72
- | Keyword | Priority | Failure Severity |
73
- |---------|----------|-----------------|
74
- | MUST / MUST NOT / SHALL / SHALL NOT | critical | blocker |
75
- | SHOULD / SHOULD NOT / RECOMMENDED | high | major |
76
- | MAY / OPTIONAL | medium | minor |
77
-
78
- 4. Classify scenario into layer:
79
-
80
- | Source | Layer | Category |
81
- |--------|-------|----------|
82
- | Architecture API endpoints + REQ AC about request/response | L1 | api_contract |
83
- | REQ AC about business logic, validation, state changes | L2 | business_rule |
84
- | REQ AC about state transitions (from architecture state machines) | L2 | state_transition |
85
- | Epic user stories (multi-step flows) | L3 | user_flow |
86
- | NFR performance/security constraints | L2 | non_functional |
87
-
88
- 5. Generate scenario:
89
- ```json
90
- {
91
- "id": "BT-{NNN}",
92
- "req_ref": "REQ-{NNN}:AC-{N}",
93
- "layer": "L1|L2|L3",
94
- "priority": "critical|high|medium",
95
- "name": "descriptive name derived from AC text",
96
- "category": "api_contract|business_rule|state_transition|user_flow|non_functional",
97
- "endpoint": "METHOD /path (if L1)",
98
- "input": { "$fixture_ref": "REQ-{NNN}/valid|invalid|boundary/name" },
99
- "expected": {
100
- "status": 200,
101
- "body_contains": [],
102
- "behavior": "description of expected outcome"
103
- },
104
- "preconditions": ["list of required state"],
105
- "postconditions": ["list of expected state changes"],
106
- "mock_services": ["list of services to mock for isolation"]
107
- }
108
- ```
109
-
110
- **Degraded mode (SPEC_MODE = "degraded"):**
111
-
112
- - Extract scenarios from `index.json.success_criteria` (each criterion -> one L2 scenario)
113
- - Extract from `plan.json` task convergence criteria (each criterion -> one L1 or L2 scenario)
114
- - Extract from summaries (each implemented behavior -> one L1 scenario)
115
- - All scenarios default to priority: "high"
116
- - No L3 scenarios in degraded mode (no Epic stories available)
117
-
118
- ---
119
-
120
- ### Step 3: Generate Test Data (Fixtures)
121
-
122
- For each REQ with data model definitions:
123
-
124
- **Tier 1: Schema-derived fixtures**
125
- ```
126
- FOR each entity in REQ data model:
127
- valid: object satisfying all field constraints
128
- invalid: one variant per constraint violation:
129
- - null_required: set required field to null
130
- - empty_string: set string field to ""
131
- - overflow: exceed max length or max value
132
- - wrong_type: provide string where number expected, etc.
133
- boundary: edge value variants:
134
- - min_value: exact minimum
135
- - max_value: exact maximum
136
- - min_minus_one: minimum - 1
137
- - max_plus_one: maximum + 1
138
- ```
139
-
140
- **Tier 2: Acceptance-criteria-derived expectations**
141
- ```
142
- FOR each "MUST return X when Y" in acceptance criteria:
143
- fixture: { input: Y, expected: X }
144
- FOR each "MUST validate Z":
145
- fixture: { input: invalid_Z, expected: validation_error }
146
- FOR each "SHOULD support W":
147
- fixture: { input: W_params, expected: W_result }
148
- ```
149
-
150
- **Tier 3: Business-scenario-derived data sets (L3 only)**
151
- ```
152
- FOR each Epic user story:
153
- scenario_pack: coordinated data set across story steps
154
- Example: { user: registered_user, order: valid_order, payment: valid_card }
155
- Entity IDs and relationships pre-coordinated across steps
156
- ```
157
-
158
- **Microservice mock data:**
159
- ```
160
- FOR each API endpoint in architecture/_index.md:
161
- mock_contract: { request_pattern, response_fixture }
162
- Used for: L2 WireMock stubs, L3 service isolation
163
- ```
164
-
165
- Organize fixtures by REQ:
166
- ```json
167
- {
168
- "REQ-001": {
169
- "valid": [{ "name": "standard_user", "data": {...} }],
170
- "invalid": [{ "name": "missing_email", "data": {...}, "expected_error": "email is required" }],
171
- "boundary": [{ "name": "max_length_name", "data": {...} }]
172
- }
173
- }
174
- ```
175
-
176
- ---
177
-
178
- ### Step 4: Write Test Plan & Confirm
179
-
180
- **Archive previous business test artifacts** before writing:
181
- ```
182
- IF file exists "${PHASE_DIR}/.tests/business/business-test-plan.json":
183
- mkdir -p "${PHASE_DIR}/.history"
184
- TIMESTAMP = format(now(), "YYYY-MM-DDTHH-mm-ss")
185
- mv "${PHASE_DIR}/.tests/business/business-test-plan.json" "${PHASE_DIR}/.history/business-test-plan-${TIMESTAMP}.json"
186
- ```
187
-
188
- Write `business-test-plan.json` to `.tests/business/`:
189
- ```json
190
- {
191
- "phase": "{phase}",
192
- "blueprint_ref": "{SPEC_DIR name or 'degraded'}",
193
- "spec_mode": "full|degraded",
194
- "generated_at": "{ISO timestamp}",
195
- "layers": {
196
- "L1": { "scenario_count": N, "priority_distribution": { "critical": X, "high": Y, "medium": Z } },
197
- "L2": { "scenario_count": N, "priority_distribution": {...} },
198
- "L3": { "scenario_count": N, "priority_distribution": {...} }
199
- },
200
- "scenarios": [ ... ],
201
- "fixtures": { ... },
202
- "mock_contracts": [ ... ],
203
- "requirement_coverage_plan": {
204
- "requirements_targeted": ["REQ-001", "REQ-002"],
205
- "requirements_skipped": [],
206
- "skip_reasons": {}
207
- }
208
- }
209
- ```
210
-
211
- **If not `--auto`:**
212
-
213
- Display plan summary:
214
- ```
215
- === BUSINESS TEST PLAN ===
216
- Spec mode: {full|degraded}
217
- Requirements: {N} targeted, {M} skipped
218
-
219
- Layer Distribution:
220
- L1 Interface: {N} scenarios ({X} critical, {Y} high)
221
- L2 Business: {N} scenarios ({X} critical, {Y} high)
222
- L3 E2E: {N} scenarios ({X} critical, {Y} high)
223
-
224
- Fixtures: {N} REQs × {avg} variants = {total} data sets
225
-
226
- Proceed? (yes/edit/cancel)
227
- ```
228
-
229
- Wait for user confirmation. If "edit": let user modify plan interactively.
230
-
231
- **If `--dry-run`:** Stop here, report plan.
232
-
233
- ---
234
-
235
- ### Step 5: Generate Test Code (if --gen-code)
236
-
237
- **Detect project tech stack:**
238
- ```
239
- IF file exists ".workflow/project.md":
240
- tech = parse Tech Stack section from project.md
241
- ELSE:
242
- Scan project for indicators (pom.xml -> Java, package.json -> Node, etc.)
243
- ```
244
-
245
- **Generate framework-specific test classes:**
246
-
247
- | Stack | L1 | L2 | L3 |
248
- |-------|----|----|-----|
249
- | Java/Spring Boot | RestAssured + MockMvc | JUnit 5 Parameterized + WireMock | TestContainers |
250
- | TypeScript/Node | supertest + vitest | vitest + nock | playwright/cypress |
251
- | Python | httpx + pytest | pytest + responses | pytest + selenium |
252
-
253
- **Generation rules:**
254
- - Follow existing test patterns (discover from codebase, same as test-gen Step 1)
255
- - Each test method has `@DisplayName` (or equivalent) with REQ-NNN:AC-N reference
256
- - Each test class has layer marker (`@Tag("business-L1")` or equivalent)
257
- - Test files placed in `.tests/business/{layer}/` directory
258
-
259
- **If no `--gen-code`:** Scenarios remain as structured JSON for AI agent execution mode (Step 6).
260
-
261
- ---
262
-
263
- ### Step 6: Execute Tests (Progressive L1 -> L2 -> L3)
264
-
265
- **Fail-fast rule:**
266
- - If L1 has ANY "critical" priority failure -> STOP. Do not proceed to L2.
267
- - If L2 has ANY "critical" priority failure -> STOP. Do not proceed to L3.
268
- - "high" and "medium" failures do NOT block next layer.
269
-
270
- **For each layer (starting from `--layer` if specified, else L1):**
271
-
272
- Run Generator-Critic loop (max 3 iterations):
273
-
274
- **Iteration 1: Execute all scenarios**
275
-
276
- `--gen-code` mode:
277
- ```bash
278
- # Run generated test classes for current layer
279
- {test_command} --testPathPattern="business-{layer}" 2>&1 | tail -50
280
- ```
281
-
282
- Agent execution mode:
283
- ```
284
- FOR each scenario in current layer:
285
- Execute scenario against running application
286
- Record: { status, actual_response, duration_ms, error_detail }
287
- ```
288
-
289
- **Critic phase: Classify failures**
290
-
291
- For each failed scenario:
292
- ```
293
- Analyze failure evidence -> classify as:
294
-
295
- | Classification | Meaning | Action |
296
- |---------------|---------|--------|
297
- | test_defect | Test itself is wrong (wrong endpoint, bad fixture) | Auto-fix test in next iteration |
298
- | code_defect | Business rule violated (actual != expected per REQ) | Record as failure |
299
- | env_issue | Service down, config missing, timeout | Record as blocked |
300
- ```
301
-
302
- **Iteration 2: Re-run with fixed tests**
303
- - Fix test_defects from iteration 1
304
- - Re-run ALL scenarios (not just failed ones — catch regressions)
305
-
306
- **Iteration 3: Final confirmation**
307
- - Remaining failures = confirmed code_defects
308
- - All test_defects should be resolved
309
- - Blocked scenarios marked with env_issue reason
310
-
311
- Record results per iteration in `.tests/business/test-results-iter-{N}.json`.
312
-
313
- ---
314
-
315
- ### Step 7: Build Traceability Matrix
316
-
317
- Map each scenario result back to requirement:
318
-
319
- ```
320
- FOR each REQ in requirements targeted:
321
- req_results = {
322
- req_id: "REQ-NNN",
323
- title: REQ.title,
324
- total_criteria: count of AC in REQ,
325
- criteria_results: []
326
- }
327
-
328
- FOR each AC in REQ:
329
- scenarios_for_ac = filter scenarios where req_ref == "REQ-NNN:AC-{N}"
330
- ac_status = "passed" if ALL scenarios passed
331
- "failed" if ANY scenario failed
332
- "blocked" if ANY blocked and none failed
333
- "untested" if no scenarios mapped
334
-
335
- req_results.criteria_results.push({
336
- ac_id: "AC-{N}",
337
- description: AC text,
338
- priority: mapped from RFC 2119 keyword,
339
- status: ac_status,
340
- tests: [scenario IDs],
341
- failure: { expected, actual, evidence } if failed
342
- })
343
-
344
- req_results.coverage_pct = passed_criteria / total_criteria * 100
345
- req_results.verdict = "verified" if all MUST+SHOULD passed
346
- "partial" if some failed
347
- "unverified" if all failed or untested
348
- ```
349
-
350
- ---
351
-
352
- ### Step 8: Generate Reports
353
-
354
- **Archive previous reports:**
355
- ```
356
- IF file exists "${PHASE_DIR}/.tests/business/business-test-report.json":
357
- mkdir -p "${PHASE_DIR}/.history"
358
- TIMESTAMP = format(now(), "YYYY-MM-DDTHH-mm-ss")
359
- mv report and summary to .history/
360
- ```
361
-
362
- Write `.tests/business/business-test-report.json`:
363
- ```json
364
- {
365
- "phase": "{phase}",
366
- "blueprint_ref": "{spec reference}",
367
- "spec_mode": "full|degraded",
368
- "completed_at": "{ISO timestamp}",
369
- "execution_mode": "gen-code|agent",
370
- "iterations": {
371
- "L1": { "count": N, "converged": true },
372
- "L2": { "count": N, "converged": true },
373
- "L3": { "count": N, "converged": false }
374
- },
375
- "layers": {
376
- "L1": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 95.0 },
377
- "L2": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 87.5 },
378
- "L3": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 100.0 }
379
- },
380
- "requirement_coverage": [
381
- {
382
- "req_id": "REQ-001",
383
- "title": "...",
384
- "total_criteria": 5,
385
- "criteria_results": [
386
- {
387
- "ac_id": "AC-1",
388
- "description": "...",
389
- "priority": "critical",
390
- "status": "passed|failed|blocked|untested",
391
- "tests": ["BT-001", "BT-002"],
392
- "failure": null
393
- }
394
- ],
395
- "coverage_pct": 80.0,
396
- "verdict": "verified|partial|unverified"
397
- }
398
- ],
399
- "failures": [
400
- {
401
- "id": "BF-001",
402
- "test_id": "BT-005",
403
- "req_ref": "REQ-001:AC-3",
404
- "layer": "L1",
405
- "severity": "critical",
406
- "classification": "code_defect",
407
- "description": "...",
408
- "expected": "...",
409
- "actual": "...",
410
- "fix_suggestion": {
411
- "file": "src/...",
412
- "line": 42,
413
- "direction": "Add null guard for..."
414
- }
415
- }
416
- ],
417
- "summary": {
418
- "total_requirements": 10,
419
- "fully_verified": 8,
420
- "partially_verified": 1,
421
- "unverified": 1,
422
- "coverage_pct": 85.0,
423
- "total_scenarios": 30,
424
- "total_passed": 26,
425
- "total_failed": 3,
426
- "total_blocked": 1
427
- }
428
- }
429
- ```
430
-
431
- Write `.tests/business/business-test-summary.md`:
432
- ```markdown
433
- ---
434
- phase: {phase}
435
- blueprint_ref: {spec reference}
436
- completed_at: {ISO timestamp}
437
- verdict: passed|gaps_found
438
- ---
439
-
440
- # Business Test Results
441
-
442
- ## Requirement Coverage
443
-
444
- | REQ | Title | AC Total | Passed | Failed | Coverage | Verdict |
445
- |-----|-------|----------|--------|--------|----------|---------|
446
- | REQ-001 | ... | 5 | 4 | 1 | 80% | partial |
447
- | REQ-002 | ... | 3 | 3 | 0 | 100% | verified |
448
-
449
- ## Layer Results
450
-
451
- | Layer | Total | Passed | Failed | Blocked | Pass Rate |
452
- |-------|-------|--------|--------|---------|-----------|
453
- | L1 Interface | 10 | 9 | 1 | 0 | 90.0% |
454
- | L2 Business | 15 | 13 | 1 | 1 | 86.7% |
455
- | L3 E2E | 5 | 5 | 0 | 0 | 100.0% |
456
-
457
- ## Failures
458
-
459
- ### BF-001: REQ-001:AC-3 (critical)
460
- - Layer: L1
461
- - Expected: 201 Created with user object
462
- - Actual: 400 Bad Request
463
- - Fix: Add email validation bypass for internal accounts (src/auth.ts:42)
464
-
465
- ## Next Steps
466
- {routing suggestion}
467
- ```
468
-
469
- Update `index.json` with business_test section:
470
- ```json
471
- {
472
- "business_test": {
473
- "status": "passed|gaps_found",
474
- "spec_mode": "full|degraded",
475
- "req_coverage_pct": 85.0,
476
- "layers": {
477
- "L1": { "pass_rate": 90.0 },
478
- "L2": { "pass_rate": 86.7 },
479
- "L3": { "pass_rate": 100.0 }
480
- },
481
- "failures": [
482
- { "id": "BF-001", "req_ref": "REQ-001:AC-3", "severity": "critical" }
483
- ]
484
- }
485
- }
486
- ```
487
-
488
- ---
489
-
490
- ### Step 9: Feedback Loop
491
-
492
- **Auto-create issues from failures:**
493
- ```
494
- FOR each failure in report.failures:
495
- mkdir -p ".workflow/issues"
496
-
497
- today = format(now(), "YYYYMMDD")
498
- counter = next available sequence for today
499
-
500
- issue = {
501
- id: "ISS-{today}-{counter:03d}",
502
- title: "Business Test: " + failure.req_ref + " - " + failure.description (truncated 100 chars),
503
- status: "registered",
504
- priority: severity_to_priority(failure.severity),
505
- severity: failure.severity,
506
- source: "business-test",
507
- phase_ref: PHASE_NUM,
508
- gap_ref: failure.id,
509
- description: "Business test failed for " + failure.req_ref + ". Expected: " + failure.expected + ". Actual: " + failure.actual,
510
- fix_direction: failure.fix_suggestion.direction,
511
- context: {
512
- location: failure.fix_suggestion.file + ":" + failure.fix_suggestion.line,
513
- suggested_fix: failure.fix_suggestion.direction,
514
- notes: "req_ref: " + failure.req_ref + ", layer: " + failure.layer
515
- },
516
- tags: ["business-test", failure.layer],
517
- affected_components: [failure.fix_suggestion.file],
518
- feedback: [],
519
- issue_history: [],
520
- created_at: now(),
521
- updated_at: now(),
522
- resolved_at: null,
523
- resolution: null
524
- }
525
- Append JSON line to .workflow/issues/issues.jsonl
526
- ```
527
-
528
- **Report:**
529
- ```
530
- === BUSINESS TEST RESULTS ===
531
- Phase: {phase_name}
532
- Spec mode: {full|degraded}
533
-
534
- Requirement Coverage: {coverage_pct}%
535
- Verified: {fully_verified}/{total_requirements}
536
- Partial: {partially_verified}
537
- Unverified: {unverified}
538
-
539
- Layer Results:
540
- L1 Interface: {pass_rate}% ({passed}/{total})
541
- L2 Business: {pass_rate}% ({passed}/{total})
542
- L3 E2E: {pass_rate}% ({passed}/{total})
543
-
544
- Failures: {failure_count} ({blocker_count} blockers)
545
- Issues: {issue_count} auto-created
546
-
547
- Files:
548
- {PHASE_DIR}/.tests/business/business-test-plan.json
549
- {PHASE_DIR}/.tests/business/business-test-report.json
550
- {PHASE_DIR}/.tests/business/business-test-summary.md
551
-
552
- Next steps:
553
- {suggested_next_command}
554
- ```
555
-
556
- **Next step routing:**
557
-
558
- | Result | Suggestion |
559
- |--------|------------|
560
- | All requirements verified | Skill({ skill: "maestro-phase-transition", args: "{phase}" }) |
561
- | Failures found | Skill({ skill: "quality-debug", args: "--from-business-test {phase}" }) |
562
- | `--re-run` all pass after fix | Skill({ skill: "maestro-execute", args: "{phase}" }) |
563
- | Low coverage (< 60%) | Skill({ skill: "quality-auto-test", args: "{phase}" }) |
564
- | Need integration tests | Skill({ skill: "quality-auto-test", args: "{phase}" }) |
565
-
566
- **Closure criteria:**
567
- A requirement is marked "verified" ONLY when:
568
- - ALL acceptance criteria with MUST/SHALL keywords: passed
569
- - ALL acceptance criteria with SHOULD keywords: passed
570
- - No blocker-severity failures remain for this requirement
1
+ # Business Test Workflow (PRD-Forward)
2
+
3
+ Validate built features against PRD acceptance criteria through automated multi-layer business testing with requirement traceability, fixture generation, and feedback loop.
4
+
5
+ PRD-forward: starts from REQ-*.md acceptance criteria, not from code coverage gaps.
6
+ Progressive layers: L1 Interface Contract -> L2 Business Rule -> L3 Business Scenario (E2E).
7
+ Generator-Critic loop: max 3 iterations per layer to distinguish test defects from code defects.
8
+
9
+ **Philosophy: Business rules are the source of truth. Code must satisfy them, not the other way around.**
10
+
11
+ ---
12
+
13
+ ### Step 1: Resolve Target & Load Spec Package
14
+
15
+ **Parse arguments:**
16
+
17
+ | Input | Result |
18
+ |-------|--------|
19
+ | No arguments | Error E001 |
20
+ | Phase number | Resolve `.workflow/phases/{NN}-{slug}/` |
21
+ | `--spec SPEC-xxx` | Explicit spec reference |
22
+ | `--layer L1\|L2\|L3` | Run only specific layer |
23
+ | `--gen-code` | Generate framework-specific test classes |
24
+ | `--dry-run` | Extract scenarios only, don't execute |
25
+ | `--re-run` | Re-run only previously failed scenarios |
26
+ | `--auto` | Skip interactive confirmations |
27
+
28
+ **Load spec package:**
29
+
30
+ ```
31
+ 1. Read ${PHASE_DIR}/index.json -> extract blueprint_ref (if present)
32
+ 2. IF --spec provided: SPEC_DIR = .workflow/blueprint/{blueprint_ref}/
33
+ ELSE IF index.json.blueprint_ref: SPEC_DIR = .workflow/blueprint/{blueprint_ref}/
34
+ ELSE: try .workflow/blueprint/SPEC-*/ (most recent)
35
+
36
+ 3. IF SPEC_DIR found:
37
+ - Read requirements/_index.md (requirement summary + traceability matrix)
38
+ - Read all requirements/REQ-*.md (functional requirements with acceptance criteria)
39
+ - Read all requirements/NFR-*.md (non-functional requirements)
40
+ - Read architecture/_index.md (API endpoints, data model, state machines)
41
+ - Read epics/EPIC-*.md (user stories -> E2E scenario source)
42
+ SPEC_MODE = "full"
43
+
44
+ 4. IF no spec package found (DEGRADED MODE):
45
+ - Read index.json.success_criteria
46
+ - Read plan.json tasks with convergence.criteria
47
+ - Read .summaries/TASK-*-summary.md for implemented behavior
48
+ SPEC_MODE = "degraded"
49
+ Display: "No spec package found. Using success_criteria + plan.json for scenario extraction (degraded mode)."
50
+ ```
51
+
52
+ Check for existing business test session:
53
+ ```bash
54
+ ls ${PHASE_DIR}/.tests/business/business-test-report.json 2>/dev/null
55
+ ```
56
+
57
+ If session exists AND `--re-run`: load previous report, filter to failed/blocked scenarios only.
58
+ If session exists AND no `--re-run`: offer resume or restart.
59
+
60
+ ---
61
+
62
+ ### Step 2: Extract Business Test Scenarios from PRD
63
+
64
+ **Full mode (SPEC_MODE = "full"):**
65
+
66
+ For each `REQ-NNN-{slug}.md`:
67
+
68
+ 1. Parse `## Acceptance Criteria` section
69
+ 2. Extract each numbered criterion as a test scenario seed
70
+ 3. Map RFC 2119 keywords to test priority:
71
+
72
+ | Keyword | Priority | Failure Severity |
73
+ |---------|----------|-----------------|
74
+ | MUST / MUST NOT / SHALL / SHALL NOT | critical | blocker |
75
+ | SHOULD / SHOULD NOT / RECOMMENDED | high | major |
76
+ | MAY / OPTIONAL | medium | minor |
77
+
78
+ 4. Classify scenario into layer:
79
+
80
+ | Source | Layer | Category |
81
+ |--------|-------|----------|
82
+ | Architecture API endpoints + REQ AC about request/response | L1 | api_contract |
83
+ | REQ AC about business logic, validation, state changes | L2 | business_rule |
84
+ | REQ AC about state transitions (from architecture state machines) | L2 | state_transition |
85
+ | Epic user stories (multi-step flows) | L3 | user_flow |
86
+ | NFR performance/security constraints | L2 | non_functional |
87
+
88
+ 5. Generate scenario:
89
+ ```json
90
+ {
91
+ "id": "BT-{NNN}",
92
+ "req_ref": "REQ-{NNN}:AC-{N}",
93
+ "layer": "L1|L2|L3",
94
+ "priority": "critical|high|medium",
95
+ "name": "descriptive name derived from AC text",
96
+ "category": "api_contract|business_rule|state_transition|user_flow|non_functional",
97
+ "endpoint": "METHOD /path (if L1)",
98
+ "input": { "$fixture_ref": "REQ-{NNN}/valid|invalid|boundary/name" },
99
+ "expected": {
100
+ "status": 200,
101
+ "body_contains": [],
102
+ "behavior": "description of expected outcome"
103
+ },
104
+ "preconditions": ["list of required state"],
105
+ "postconditions": ["list of expected state changes"],
106
+ "mock_services": ["list of services to mock for isolation"]
107
+ }
108
+ ```
109
+
110
+ **Degraded mode (SPEC_MODE = "degraded"):**
111
+
112
+ - Extract scenarios from `index.json.success_criteria` (each criterion -> one L2 scenario)
113
+ - Extract from `plan.json` task convergence criteria (each criterion -> one L1 or L2 scenario)
114
+ - Extract from summaries (each implemented behavior -> one L1 scenario)
115
+ - All scenarios default to priority: "high"
116
+ - No L3 scenarios in degraded mode (no Epic stories available)
117
+
118
+ ---
119
+
120
+ ### Step 3: Generate Test Data (Fixtures)
121
+
122
+ For each REQ with data model definitions:
123
+
124
+ **Tier 1: Schema-derived fixtures**
125
+ ```
126
+ FOR each entity in REQ data model:
127
+ valid: object satisfying all field constraints
128
+ invalid: one variant per constraint violation:
129
+ - null_required: set required field to null
130
+ - empty_string: set string field to ""
131
+ - overflow: exceed max length or max value
132
+ - wrong_type: provide string where number expected, etc.
133
+ boundary: edge value variants:
134
+ - min_value: exact minimum
135
+ - max_value: exact maximum
136
+ - min_minus_one: minimum - 1
137
+ - max_plus_one: maximum + 1
138
+ ```
139
+
140
+ **Tier 2: Acceptance-criteria-derived expectations**
141
+ ```
142
+ FOR each "MUST return X when Y" in acceptance criteria:
143
+ fixture: { input: Y, expected: X }
144
+ FOR each "MUST validate Z":
145
+ fixture: { input: invalid_Z, expected: validation_error }
146
+ FOR each "SHOULD support W":
147
+ fixture: { input: W_params, expected: W_result }
148
+ ```
149
+
150
+ **Tier 3: Business-scenario-derived data sets (L3 only)**
151
+ ```
152
+ FOR each Epic user story:
153
+ scenario_pack: coordinated data set across story steps
154
+ Example: { user: registered_user, order: valid_order, payment: valid_card }
155
+ Entity IDs and relationships pre-coordinated across steps
156
+ ```
157
+
158
+ **Microservice mock data:**
159
+ ```
160
+ FOR each API endpoint in architecture/_index.md:
161
+ mock_contract: { request_pattern, response_fixture }
162
+ Used for: L2 WireMock stubs, L3 service isolation
163
+ ```
164
+
165
+ Organize fixtures by REQ:
166
+ ```json
167
+ {
168
+ "REQ-001": {
169
+ "valid": [{ "name": "standard_user", "data": {...} }],
170
+ "invalid": [{ "name": "missing_email", "data": {...}, "expected_error": "email is required" }],
171
+ "boundary": [{ "name": "max_length_name", "data": {...} }]
172
+ }
173
+ }
174
+ ```
175
+
176
+ ---
177
+
178
+ ### Step 4: Write Test Plan & Confirm
179
+
180
+ **Archive previous business test artifacts** before writing:
181
+ ```
182
+ IF file exists "${PHASE_DIR}/.tests/business/business-test-plan.json":
183
+ mkdir -p "${PHASE_DIR}/.history"
184
+ TIMESTAMP = format(now(), "YYYY-MM-DDTHH-mm-ss")
185
+ mv "${PHASE_DIR}/.tests/business/business-test-plan.json" "${PHASE_DIR}/.history/business-test-plan-${TIMESTAMP}.json"
186
+ ```
187
+
188
+ Write `business-test-plan.json` to `.tests/business/`:
189
+ ```json
190
+ {
191
+ "phase": "{phase}",
192
+ "blueprint_ref": "{SPEC_DIR name or 'degraded'}",
193
+ "spec_mode": "full|degraded",
194
+ "generated_at": "{ISO timestamp}",
195
+ "layers": {
196
+ "L1": { "scenario_count": N, "priority_distribution": { "critical": X, "high": Y, "medium": Z } },
197
+ "L2": { "scenario_count": N, "priority_distribution": {...} },
198
+ "L3": { "scenario_count": N, "priority_distribution": {...} }
199
+ },
200
+ "scenarios": [ ... ],
201
+ "fixtures": { ... },
202
+ "mock_contracts": [ ... ],
203
+ "requirement_coverage_plan": {
204
+ "requirements_targeted": ["REQ-001", "REQ-002"],
205
+ "requirements_skipped": [],
206
+ "skip_reasons": {}
207
+ }
208
+ }
209
+ ```
210
+
211
+ **If not `--auto`:**
212
+
213
+ Display plan summary:
214
+ ```
215
+ === BUSINESS TEST PLAN ===
216
+ Spec mode: {full|degraded}
217
+ Requirements: {N} targeted, {M} skipped
218
+
219
+ Layer Distribution:
220
+ L1 Interface: {N} scenarios ({X} critical, {Y} high)
221
+ L2 Business: {N} scenarios ({X} critical, {Y} high)
222
+ L3 E2E: {N} scenarios ({X} critical, {Y} high)
223
+
224
+ Fixtures: {N} REQs × {avg} variants = {total} data sets
225
+
226
+ Proceed? (yes/edit/cancel)
227
+ ```
228
+
229
+ Wait for user confirmation. If "edit": let user modify plan interactively.
230
+
231
+ **If `--dry-run`:** Stop here, report plan.
232
+
233
+ ---
234
+
235
+ ### Step 5: Generate Test Code (if --gen-code)
236
+
237
+ **Detect project tech stack:**
238
+ ```
239
+ IF file exists ".workflow/project.md":
240
+ tech = parse Tech Stack section from project.md
241
+ ELSE:
242
+ Scan project for indicators (pom.xml -> Java, package.json -> Node, etc.)
243
+ ```
244
+
245
+ **Generate framework-specific test classes:**
246
+
247
+ | Stack | L1 | L2 | L3 |
248
+ |-------|----|----|-----|
249
+ | Java/Spring Boot | RestAssured + MockMvc | JUnit 5 Parameterized + WireMock | TestContainers |
250
+ | TypeScript/Node | supertest + vitest | vitest + nock | playwright/cypress |
251
+ | Python | httpx + pytest | pytest + responses | pytest + selenium |
252
+
253
+ **Generation rules:**
254
+ - Follow existing test patterns (discover from codebase, same as test-gen Step 1)
255
+ - Each test method has `@DisplayName` (or equivalent) with REQ-NNN:AC-N reference
256
+ - Each test class has layer marker (`@Tag("business-L1")` or equivalent)
257
+ - Test files placed in `.tests/business/{layer}/` directory
258
+
259
+ **If no `--gen-code`:** Scenarios remain as structured JSON for AI agent execution mode (Step 6).
260
+
261
+ ---
262
+
263
+ ### Step 6: Execute Tests (Progressive L1 -> L2 -> L3)
264
+
265
+ **Fail-fast rule:**
266
+ - If L1 has ANY "critical" priority failure -> STOP. Do not proceed to L2.
267
+ - If L2 has ANY "critical" priority failure -> STOP. Do not proceed to L3.
268
+ - "high" and "medium" failures do NOT block next layer.
269
+
270
+ **For each layer (starting from `--layer` if specified, else L1):**
271
+
272
+ Run Generator-Critic loop (max 3 iterations):
273
+
274
+ **Iteration 1: Execute all scenarios**
275
+
276
+ `--gen-code` mode:
277
+ ```bash
278
+ # Run generated test classes for current layer
279
+ {test_command} --testPathPattern="business-{layer}" 2>&1 | tail -50
280
+ ```
281
+
282
+ Agent execution mode:
283
+ ```
284
+ FOR each scenario in current layer:
285
+ Execute scenario against running application
286
+ Record: { status, actual_response, duration_ms, error_detail }
287
+ ```
288
+
289
+ **Critic phase: Classify failures**
290
+
291
+ For each failed scenario:
292
+ ```
293
+ Analyze failure evidence -> classify as:
294
+
295
+ | Classification | Meaning | Action |
296
+ |---------------|---------|--------|
297
+ | test_defect | Test itself is wrong (wrong endpoint, bad fixture) | Auto-fix test in next iteration |
298
+ | code_defect | Business rule violated (actual != expected per REQ) | Record as failure |
299
+ | env_issue | Service down, config missing, timeout | Record as blocked |
300
+ ```
301
+
302
+ **Iteration 2: Re-run with fixed tests**
303
+ - Fix test_defects from iteration 1
304
+ - Re-run ALL scenarios (not just failed ones — catch regressions)
305
+
306
+ **Iteration 3: Final confirmation**
307
+ - Remaining failures = confirmed code_defects
308
+ - All test_defects should be resolved
309
+ - Blocked scenarios marked with env_issue reason
310
+
311
+ Record results per iteration in `.tests/business/test-results-iter-{N}.json`.
312
+
313
+ ---
314
+
315
+ ### Step 7: Build Traceability Matrix
316
+
317
+ Map each scenario result back to requirement:
318
+
319
+ ```
320
+ FOR each REQ in requirements targeted:
321
+ req_results = {
322
+ req_id: "REQ-NNN",
323
+ title: REQ.title,
324
+ total_criteria: count of AC in REQ,
325
+ criteria_results: []
326
+ }
327
+
328
+ FOR each AC in REQ:
329
+ scenarios_for_ac = filter scenarios where req_ref == "REQ-NNN:AC-{N}"
330
+ ac_status = "passed" if ALL scenarios passed
331
+ "failed" if ANY scenario failed
332
+ "blocked" if ANY blocked and none failed
333
+ "untested" if no scenarios mapped
334
+
335
+ req_results.criteria_results.push({
336
+ ac_id: "AC-{N}",
337
+ description: AC text,
338
+ priority: mapped from RFC 2119 keyword,
339
+ status: ac_status,
340
+ tests: [scenario IDs],
341
+ failure: { expected, actual, evidence } if failed
342
+ })
343
+
344
+ req_results.coverage_pct = passed_criteria / total_criteria * 100
345
+ req_results.verdict = "verified" if all MUST+SHOULD passed
346
+ "partial" if some failed
347
+ "unverified" if all failed or untested
348
+ ```
349
+
350
+ ---
351
+
352
+ ### Step 8: Generate Reports
353
+
354
+ **Archive previous reports:**
355
+ ```
356
+ IF file exists "${PHASE_DIR}/.tests/business/business-test-report.json":
357
+ mkdir -p "${PHASE_DIR}/.history"
358
+ TIMESTAMP = format(now(), "YYYY-MM-DDTHH-mm-ss")
359
+ mv report and summary to .history/
360
+ ```
361
+
362
+ Write `.tests/business/business-test-report.json`:
363
+ ```json
364
+ {
365
+ "phase": "{phase}",
366
+ "blueprint_ref": "{spec reference}",
367
+ "spec_mode": "full|degraded",
368
+ "completed_at": "{ISO timestamp}",
369
+ "execution_mode": "gen-code|agent",
370
+ "iterations": {
371
+ "L1": { "count": N, "converged": true },
372
+ "L2": { "count": N, "converged": true },
373
+ "L3": { "count": N, "converged": false }
374
+ },
375
+ "layers": {
376
+ "L1": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 95.0 },
377
+ "L2": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 87.5 },
378
+ "L3": { "total": N, "passed": P, "failed": F, "blocked": B, "pass_rate": 100.0 }
379
+ },
380
+ "requirement_coverage": [
381
+ {
382
+ "req_id": "REQ-001",
383
+ "title": "...",
384
+ "total_criteria": 5,
385
+ "criteria_results": [
386
+ {
387
+ "ac_id": "AC-1",
388
+ "description": "...",
389
+ "priority": "critical",
390
+ "status": "passed|failed|blocked|untested",
391
+ "tests": ["BT-001", "BT-002"],
392
+ "failure": null
393
+ }
394
+ ],
395
+ "coverage_pct": 80.0,
396
+ "verdict": "verified|partial|unverified"
397
+ }
398
+ ],
399
+ "failures": [
400
+ {
401
+ "id": "BF-001",
402
+ "test_id": "BT-005",
403
+ "req_ref": "REQ-001:AC-3",
404
+ "layer": "L1",
405
+ "severity": "critical",
406
+ "classification": "code_defect",
407
+ "description": "...",
408
+ "expected": "...",
409
+ "actual": "...",
410
+ "fix_suggestion": {
411
+ "file": "src/...",
412
+ "line": 42,
413
+ "direction": "Add null guard for..."
414
+ }
415
+ }
416
+ ],
417
+ "summary": {
418
+ "total_requirements": 10,
419
+ "fully_verified": 8,
420
+ "partially_verified": 1,
421
+ "unverified": 1,
422
+ "coverage_pct": 85.0,
423
+ "total_scenarios": 30,
424
+ "total_passed": 26,
425
+ "total_failed": 3,
426
+ "total_blocked": 1
427
+ }
428
+ }
429
+ ```
430
+
431
+ Write `.tests/business/business-test-summary.md`:
432
+ ```markdown
433
+ ---
434
+ phase: {phase}
435
+ blueprint_ref: {spec reference}
436
+ completed_at: {ISO timestamp}
437
+ verdict: passed|gaps_found
438
+ ---
439
+
440
+ # Business Test Results
441
+
442
+ ## Requirement Coverage
443
+
444
+ | REQ | Title | AC Total | Passed | Failed | Coverage | Verdict |
445
+ |-----|-------|----------|--------|--------|----------|---------|
446
+ | REQ-001 | ... | 5 | 4 | 1 | 80% | partial |
447
+ | REQ-002 | ... | 3 | 3 | 0 | 100% | verified |
448
+
449
+ ## Layer Results
450
+
451
+ | Layer | Total | Passed | Failed | Blocked | Pass Rate |
452
+ |-------|-------|--------|--------|---------|-----------|
453
+ | L1 Interface | 10 | 9 | 1 | 0 | 90.0% |
454
+ | L2 Business | 15 | 13 | 1 | 1 | 86.7% |
455
+ | L3 E2E | 5 | 5 | 0 | 0 | 100.0% |
456
+
457
+ ## Failures
458
+
459
+ ### BF-001: REQ-001:AC-3 (critical)
460
+ - Layer: L1
461
+ - Expected: 201 Created with user object
462
+ - Actual: 400 Bad Request
463
+ - Fix: Add email validation bypass for internal accounts (src/auth.ts:42)
464
+
465
+ ## Next Steps
466
+ {routing suggestion}
467
+ ```
468
+
469
+ Update `index.json` with business_test section:
470
+ ```json
471
+ {
472
+ "business_test": {
473
+ "status": "passed|gaps_found",
474
+ "spec_mode": "full|degraded",
475
+ "req_coverage_pct": 85.0,
476
+ "layers": {
477
+ "L1": { "pass_rate": 90.0 },
478
+ "L2": { "pass_rate": 86.7 },
479
+ "L3": { "pass_rate": 100.0 }
480
+ },
481
+ "failures": [
482
+ { "id": "BF-001", "req_ref": "REQ-001:AC-3", "severity": "critical" }
483
+ ]
484
+ }
485
+ }
486
+ ```
487
+
488
+ ---
489
+
490
+ ### Step 9: Feedback Loop
491
+
492
+ **Auto-create issues from failures:**
493
+ ```
494
+ FOR each failure in report.failures:
495
+ mkdir -p ".workflow/issues"
496
+
497
+ today = format(now(), "YYYYMMDD")
498
+ counter = next available sequence for today
499
+
500
+ issue = {
501
+ id: "ISS-{today}-{counter:03d}",
502
+ title: "Business Test: " + failure.req_ref + " - " + failure.description (truncated 100 chars),
503
+ status: "registered",
504
+ priority: severity_to_priority(failure.severity),
505
+ severity: failure.severity,
506
+ source: "business-test",
507
+ phase_ref: PHASE_NUM,
508
+ gap_ref: failure.id,
509
+ description: "Business test failed for " + failure.req_ref + ". Expected: " + failure.expected + ". Actual: " + failure.actual,
510
+ fix_direction: failure.fix_suggestion.direction,
511
+ context: {
512
+ location: failure.fix_suggestion.file + ":" + failure.fix_suggestion.line,
513
+ suggested_fix: failure.fix_suggestion.direction,
514
+ notes: "req_ref: " + failure.req_ref + ", layer: " + failure.layer
515
+ },
516
+ tags: ["business-test", failure.layer],
517
+ affected_components: [failure.fix_suggestion.file],
518
+ feedback: [],
519
+ issue_history: [],
520
+ created_at: now(),
521
+ updated_at: now(),
522
+ resolved_at: null,
523
+ resolution: null
524
+ }
525
+ Append JSON line to .workflow/issues/issues.jsonl
526
+ ```
527
+
528
+ **Report:**
529
+ ```
530
+ === BUSINESS TEST RESULTS ===
531
+ Phase: {phase_name}
532
+ Spec mode: {full|degraded}
533
+
534
+ Requirement Coverage: {coverage_pct}%
535
+ Verified: {fully_verified}/{total_requirements}
536
+ Partial: {partially_verified}
537
+ Unverified: {unverified}
538
+
539
+ Layer Results:
540
+ L1 Interface: {pass_rate}% ({passed}/{total})
541
+ L2 Business: {pass_rate}% ({passed}/{total})
542
+ L3 E2E: {pass_rate}% ({passed}/{total})
543
+
544
+ Failures: {failure_count} ({blocker_count} blockers)
545
+ Issues: {issue_count} auto-created
546
+
547
+ Files:
548
+ {PHASE_DIR}/.tests/business/business-test-plan.json
549
+ {PHASE_DIR}/.tests/business/business-test-report.json
550
+ {PHASE_DIR}/.tests/business/business-test-summary.md
551
+
552
+ Next steps:
553
+ {suggested_next_command}
554
+ ```
555
+
556
+ **Next step routing:**
557
+
558
+ | Result | Suggestion |
559
+ |--------|------------|
560
+ | All requirements verified | Skill({ skill: "maestro-phase-transition", args: "{phase}" }) |
561
+ | Failures found | Skill({ skill: "quality-debug", args: "--from-business-test {phase}" }) |
562
+ | `--re-run` all pass after fix | Skill({ skill: "maestro-execute", args: "{phase}" }) |
563
+ | Low coverage (< 60%) | Skill({ skill: "quality-auto-test", args: "{phase}" }) |
564
+ | Need integration tests | Skill({ skill: "quality-auto-test", args: "{phase}" }) |
565
+
566
+ **Closure criteria:**
567
+ A requirement is marked "verified" ONLY when:
568
+ - ALL acceptance criteria with MUST/SHALL keywords: passed
569
+ - ALL acceptance criteria with SHOULD keywords: passed
570
+ - No blocker-severity failures remain for this requirement