@arimakouyou/spec-workflow-mcp 2.2.7

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 (472) hide show
  1. package/.claude-plugin/.mcp.json +8 -0
  2. package/.claude-plugin/agents/code-simplifier.md +80 -0
  3. package/.claude-plugin/agents/integ-test-auditor.md +91 -0
  4. package/.claude-plugin/agents/integ-test-worker.md +73 -0
  5. package/.claude-plugin/agents/parallel-worker.md +136 -0
  6. package/.claude-plugin/agents/review-worker.md +279 -0
  7. package/.claude-plugin/agents/unit-test-engineer.md +148 -0
  8. package/.claude-plugin/agents/wave-harness-worker.md +158 -0
  9. package/.claude-plugin/hooks/hooks.json +16 -0
  10. package/.claude-plugin/hooks/tasks-read-guard.sh +17 -0
  11. package/.claude-plugin/marketplace.json +33 -0
  12. package/.claude-plugin/plugin.json +11 -0
  13. package/.claude-plugin/rules/axum.md +154 -0
  14. package/.claude-plugin/rules/cargo-toml.md +63 -0
  15. package/.claude-plugin/rules/context7.md +17 -0
  16. package/.claude-plugin/rules/design-conformance.md +82 -0
  17. package/.claude-plugin/rules/design-principles.md +53 -0
  18. package/.claude-plugin/rules/diesel.md +176 -0
  19. package/.claude-plugin/rules/feedback-loop.md +33 -0
  20. package/.claude-plugin/rules/leptos.md +319 -0
  21. package/.claude-plugin/rules/project-architecture.md +134 -0
  22. package/.claude-plugin/rules/quality-checks.md +265 -0
  23. package/.claude-plugin/rules/rust-style.md +242 -0
  24. package/.claude-plugin/rules/security.md +67 -0
  25. package/.claude-plugin/rules/spec-workflow-enforcement.md +47 -0
  26. package/.claude-plugin/rules/valkey.md +167 -0
  27. package/.claude-plugin/skills/integration-test/SKILL.md +230 -0
  28. package/.claude-plugin/skills/integration-test/references/auditor-prompt.md +78 -0
  29. package/.claude-plugin/skills/integration-test/references/external-api-mock.md +98 -0
  30. package/.claude-plugin/skills/integration-test/references/fixture-catalog.md +155 -0
  31. package/.claude-plugin/skills/integration-test/references/parallel-execution.md +124 -0
  32. package/.claude-plugin/skills/integration-test/references/quality-gate.md +80 -0
  33. package/.claude-plugin/skills/integration-test/references/test-case-design.md +88 -0
  34. package/.claude-plugin/skills/integration-test/references/test-patterns.md +215 -0
  35. package/.claude-plugin/skills/integration-test/references/whiteboard-template.md +81 -0
  36. package/.claude-plugin/skills/integration-test/references/worker-prompt.md +70 -0
  37. package/.claude-plugin/skills/knowhow-capture/SKILL.md +143 -0
  38. package/.claude-plugin/skills/phase-review-team/SKILL.md +380 -0
  39. package/.claude-plugin/skills/spec-design/SKILL.md +282 -0
  40. package/.claude-plugin/skills/spec-e2e-implement/SKILL.md +259 -0
  41. package/.claude-plugin/skills/spec-impl-code/SKILL.md +101 -0
  42. package/.claude-plugin/skills/spec-impl-review/SKILL.md +115 -0
  43. package/.claude-plugin/skills/spec-impl-test-run/SKILL.md +98 -0
  44. package/.claude-plugin/skills/spec-impl-test-write/SKILL.md +121 -0
  45. package/.claude-plugin/skills/spec-implement/SKILL.md +822 -0
  46. package/.claude-plugin/skills/spec-requirements/SKILL.md +130 -0
  47. package/.claude-plugin/skills/spec-review/SKILL.md +274 -0
  48. package/.claude-plugin/skills/spec-tasks/SKILL.md +372 -0
  49. package/.claude-plugin/skills/spec-test-design/SKILL.md +233 -0
  50. package/.claude-plugin/skills/tdd-skills/SKILL.md +95 -0
  51. package/.claude-plugin/skills/tdd-skills/references/advanced-techniques.md +49 -0
  52. package/.claude-plugin/skills/tdd-skills/references/green-strategies.md +70 -0
  53. package/.claude-plugin/skills/tdd-skills/references/tdd-and-design.md +48 -0
  54. package/.claude-plugin/skills/tdd-skills/references/test-design.md +43 -0
  55. package/.claude-plugin/skills/tdd-skills/references/test-doubles.md +53 -0
  56. package/.claude-plugin/skills/tdd-skills/references/test-patterns.md +40 -0
  57. package/.claude-plugin/skills/tdd-skills-rust/SKILL.md +128 -0
  58. package/.claude-plugin/skills/tdd-skills-rust/references/advanced-techniques.md +205 -0
  59. package/.claude-plugin/skills/tdd-skills-rust/references/green-strategies.md +166 -0
  60. package/.claude-plugin/skills/tdd-skills-rust/references/tdd-and-design.md +215 -0
  61. package/.claude-plugin/skills/tdd-skills-rust/references/test-design.md +128 -0
  62. package/.claude-plugin/skills/tdd-skills-rust/references/test-doubles.md +208 -0
  63. package/.claude-plugin/skills/tdd-skills-rust/references/test-patterns.md +223 -0
  64. package/.claude-plugin/with-dashboard/.mcp.json +8 -0
  65. package/.claude-plugin/with-dashboard/plugin.json +10 -0
  66. package/CHANGELOG.md +1007 -0
  67. package/LICENSE +674 -0
  68. package/README.ja.md +380 -0
  69. package/README.md +437 -0
  70. package/dist/__tests__/config.test.d.ts +2 -0
  71. package/dist/__tests__/config.test.d.ts.map +1 -0
  72. package/dist/__tests__/config.test.js +264 -0
  73. package/dist/__tests__/config.test.js.map +1 -0
  74. package/dist/__tests__/index-args.test.d.ts +2 -0
  75. package/dist/__tests__/index-args.test.d.ts.map +1 -0
  76. package/dist/__tests__/index-args.test.js +43 -0
  77. package/dist/__tests__/index-args.test.js.map +1 -0
  78. package/dist/__tests__/index-entrypoint.test.d.ts +2 -0
  79. package/dist/__tests__/index-entrypoint.test.d.ts.map +1 -0
  80. package/dist/__tests__/index-entrypoint.test.js +23 -0
  81. package/dist/__tests__/index-entrypoint.test.js.map +1 -0
  82. package/dist/config.d.ts +26 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +188 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/core/__tests__/git-utils.test.d.ts +2 -0
  87. package/dist/core/__tests__/git-utils.test.d.ts.map +1 -0
  88. package/dist/core/__tests__/git-utils.test.js +179 -0
  89. package/dist/core/__tests__/git-utils.test.js.map +1 -0
  90. package/dist/core/__tests__/mdx-validator.test.d.ts +2 -0
  91. package/dist/core/__tests__/mdx-validator.test.d.ts.map +1 -0
  92. package/dist/core/__tests__/mdx-validator.test.js +42 -0
  93. package/dist/core/__tests__/mdx-validator.test.js.map +1 -0
  94. package/dist/core/__tests__/path-utils.test.d.ts +2 -0
  95. package/dist/core/__tests__/path-utils.test.d.ts.map +1 -0
  96. package/dist/core/__tests__/path-utils.test.js +342 -0
  97. package/dist/core/__tests__/path-utils.test.js.map +1 -0
  98. package/dist/core/__tests__/project-registry.test.d.ts +2 -0
  99. package/dist/core/__tests__/project-registry.test.d.ts.map +1 -0
  100. package/dist/core/__tests__/project-registry.test.js +62 -0
  101. package/dist/core/__tests__/project-registry.test.js.map +1 -0
  102. package/dist/core/__tests__/security-utils.test.d.ts +2 -0
  103. package/dist/core/__tests__/security-utils.test.d.ts.map +1 -0
  104. package/dist/core/__tests__/security-utils.test.js +657 -0
  105. package/dist/core/__tests__/security-utils.test.js.map +1 -0
  106. package/dist/core/__tests__/task-parser.test.d.ts +2 -0
  107. package/dist/core/__tests__/task-parser.test.d.ts.map +1 -0
  108. package/dist/core/__tests__/task-parser.test.js +222 -0
  109. package/dist/core/__tests__/task-parser.test.js.map +1 -0
  110. package/dist/core/__tests__/task-validator.test.d.ts +2 -0
  111. package/dist/core/__tests__/task-validator.test.d.ts.map +1 -0
  112. package/dist/core/__tests__/task-validator.test.js +308 -0
  113. package/dist/core/__tests__/task-validator.test.js.map +1 -0
  114. package/dist/core/archive-service.d.ts +10 -0
  115. package/dist/core/archive-service.d.ts.map +1 -0
  116. package/dist/core/archive-service.js +99 -0
  117. package/dist/core/archive-service.js.map +1 -0
  118. package/dist/core/dashboard-session.d.ts +49 -0
  119. package/dist/core/dashboard-session.d.ts.map +1 -0
  120. package/dist/core/dashboard-session.js +132 -0
  121. package/dist/core/dashboard-session.js.map +1 -0
  122. package/dist/core/git-utils.d.ts +25 -0
  123. package/dist/core/git-utils.d.ts.map +1 -0
  124. package/dist/core/git-utils.js +87 -0
  125. package/dist/core/git-utils.js.map +1 -0
  126. package/dist/core/global-dir.d.ts +44 -0
  127. package/dist/core/global-dir.d.ts.map +1 -0
  128. package/dist/core/global-dir.js +74 -0
  129. package/dist/core/global-dir.js.map +1 -0
  130. package/dist/core/implementation-log-migrator.d.ts +41 -0
  131. package/dist/core/implementation-log-migrator.d.ts.map +1 -0
  132. package/dist/core/implementation-log-migrator.js +258 -0
  133. package/dist/core/implementation-log-migrator.js.map +1 -0
  134. package/dist/core/mdx-validator.d.ts +14 -0
  135. package/dist/core/mdx-validator.d.ts.map +1 -0
  136. package/dist/core/mdx-validator.js +34 -0
  137. package/dist/core/mdx-validator.js.map +1 -0
  138. package/dist/core/parser.d.ts +11 -0
  139. package/dist/core/parser.d.ts.map +1 -0
  140. package/dist/core/parser.js +128 -0
  141. package/dist/core/parser.js.map +1 -0
  142. package/dist/core/path-utils.d.ts +68 -0
  143. package/dist/core/path-utils.d.ts.map +1 -0
  144. package/dist/core/path-utils.js +302 -0
  145. package/dist/core/path-utils.js.map +1 -0
  146. package/dist/core/project-registry.d.ts +94 -0
  147. package/dist/core/project-registry.d.ts.map +1 -0
  148. package/dist/core/project-registry.js +297 -0
  149. package/dist/core/project-registry.js.map +1 -0
  150. package/dist/core/security-utils.d.ts +99 -0
  151. package/dist/core/security-utils.d.ts.map +1 -0
  152. package/dist/core/security-utils.js +275 -0
  153. package/dist/core/security-utils.js.map +1 -0
  154. package/dist/core/task-parser.d.ts +90 -0
  155. package/dist/core/task-parser.d.ts.map +1 -0
  156. package/dist/core/task-parser.js +477 -0
  157. package/dist/core/task-parser.js.map +1 -0
  158. package/dist/core/task-validator.d.ts +37 -0
  159. package/dist/core/task-validator.d.ts.map +1 -0
  160. package/dist/core/task-validator.js +499 -0
  161. package/dist/core/task-validator.js.map +1 -0
  162. package/dist/core/workspace-initializer.d.ts +16 -0
  163. package/dist/core/workspace-initializer.d.ts.map +1 -0
  164. package/dist/core/workspace-initializer.js +168 -0
  165. package/dist/core/workspace-initializer.js.map +1 -0
  166. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts +2 -0
  167. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts.map +1 -0
  168. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js +78 -0
  169. package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js.map +1 -0
  170. package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts +2 -0
  171. package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts.map +1 -0
  172. package/dist/dashboard/__tests__/multi-server-approvals-content.test.js +115 -0
  173. package/dist/dashboard/__tests__/multi-server-approvals-content.test.js.map +1 -0
  174. package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts +2 -0
  175. package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts.map +1 -0
  176. package/dist/dashboard/__tests__/watcher-error-handling.test.js +118 -0
  177. package/dist/dashboard/__tests__/watcher-error-handling.test.js.map +1 -0
  178. package/dist/dashboard/approval-storage.d.ts +139 -0
  179. package/dist/dashboard/approval-storage.d.ts.map +1 -0
  180. package/dist/dashboard/approval-storage.js +608 -0
  181. package/dist/dashboard/approval-storage.js.map +1 -0
  182. package/dist/dashboard/execution-history-manager.d.ts +52 -0
  183. package/dist/dashboard/execution-history-manager.d.ts.map +1 -0
  184. package/dist/dashboard/execution-history-manager.js +161 -0
  185. package/dist/dashboard/execution-history-manager.js.map +1 -0
  186. package/dist/dashboard/implementation-log-manager.d.ts +97 -0
  187. package/dist/dashboard/implementation-log-manager.d.ts.map +1 -0
  188. package/dist/dashboard/implementation-log-manager.js +617 -0
  189. package/dist/dashboard/implementation-log-manager.js.map +1 -0
  190. package/dist/dashboard/job-scheduler.d.ts +91 -0
  191. package/dist/dashboard/job-scheduler.d.ts.map +1 -0
  192. package/dist/dashboard/job-scheduler.js +321 -0
  193. package/dist/dashboard/job-scheduler.js.map +1 -0
  194. package/dist/dashboard/multi-server.d.ts +42 -0
  195. package/dist/dashboard/multi-server.d.ts.map +1 -0
  196. package/dist/dashboard/multi-server.js +1460 -0
  197. package/dist/dashboard/multi-server.js.map +1 -0
  198. package/dist/dashboard/parser.d.ts +18 -0
  199. package/dist/dashboard/parser.d.ts.map +1 -0
  200. package/dist/dashboard/parser.js +269 -0
  201. package/dist/dashboard/parser.js.map +1 -0
  202. package/dist/dashboard/project-manager.d.ts +82 -0
  203. package/dist/dashboard/project-manager.d.ts.map +1 -0
  204. package/dist/dashboard/project-manager.js +257 -0
  205. package/dist/dashboard/project-manager.js.map +1 -0
  206. package/dist/dashboard/public/assets/Inter-Bold-CD3Pr7BX.woff2 +0 -0
  207. package/dist/dashboard/public/assets/Inter-Medium-B_8v_WHh.woff2 +0 -0
  208. package/dist/dashboard/public/assets/Inter-Regular-DRVdRqcI.woff2 +0 -0
  209. package/dist/dashboard/public/assets/Inter-SemiBold-CtskMddL.woff2 +0 -0
  210. package/dist/dashboard/public/assets/JetBrainsMono-Bold-D4WEaHbo.woff2 +0 -0
  211. package/dist/dashboard/public/assets/JetBrainsMono-Medium-3S3k2nMz.woff2 +0 -0
  212. package/dist/dashboard/public/assets/JetBrainsMono-Regular-BQaDgvhP.woff2 +0 -0
  213. package/dist/dashboard/public/assets/Tableau10-B-NsZVaP.js +1 -0
  214. package/dist/dashboard/public/assets/apl-B4CMkyY2.js +1 -0
  215. package/dist/dashboard/public/assets/arc-a5wW942W.js +1 -0
  216. package/dist/dashboard/public/assets/array-BKyUJesY.js +1 -0
  217. package/dist/dashboard/public/assets/asciiarmor-Df11BRmG.js +1 -0
  218. package/dist/dashboard/public/assets/asn1-EdZsLKOL.js +1 -0
  219. package/dist/dashboard/public/assets/asterisk-B-8jnY81.js +1 -0
  220. package/dist/dashboard/public/assets/blockDiagram-c4efeb88-CvjTuK-w.js +118 -0
  221. package/dist/dashboard/public/assets/brainfuck-C4LP7Hcl.js +1 -0
  222. package/dist/dashboard/public/assets/c4Diagram-c83219d4-NwVQo5kf.js +10 -0
  223. package/dist/dashboard/public/assets/channel-Bi16YZhk.js +1 -0
  224. package/dist/dashboard/public/assets/classDiagram-beda092f-BmSeXDdU.js +2 -0
  225. package/dist/dashboard/public/assets/classDiagram-v2-2358418a-D7GvvuPr.js +2 -0
  226. package/dist/dashboard/public/assets/clike-B9uivgTg.js +1 -0
  227. package/dist/dashboard/public/assets/clojure-BMjYHr_A.js +1 -0
  228. package/dist/dashboard/public/assets/clone-BpKTiq7P.js +1 -0
  229. package/dist/dashboard/public/assets/cmake-BQqOBYOt.js +1 -0
  230. package/dist/dashboard/public/assets/cobol-CWcv1MsR.js +1 -0
  231. package/dist/dashboard/public/assets/coffeescript-S37ZYGWr.js +1 -0
  232. package/dist/dashboard/public/assets/commonlisp-DBKNyK5s.js +1 -0
  233. package/dist/dashboard/public/assets/createText-1719965b-qASbqHUP.js +7 -0
  234. package/dist/dashboard/public/assets/crystal-SjHAIU92.js +1 -0
  235. package/dist/dashboard/public/assets/css-BnMrqG3P.js +1 -0
  236. package/dist/dashboard/public/assets/cypher-C_CwsFkJ.js +1 -0
  237. package/dist/dashboard/public/assets/d-pRatUO7H.js +1 -0
  238. package/dist/dashboard/public/assets/diff-DbItnlRl.js +1 -0
  239. package/dist/dashboard/public/assets/dockerfile-BKs6k2Af.js +1 -0
  240. package/dist/dashboard/public/assets/dtd-DF_7sFjM.js +1 -0
  241. package/dist/dashboard/public/assets/dylan-DwRh75JA.js +1 -0
  242. package/dist/dashboard/public/assets/ebnf-CDyGwa7X.js +1 -0
  243. package/dist/dashboard/public/assets/ecl-Cabwm37j.js +1 -0
  244. package/dist/dashboard/public/assets/edges-96097737-BItTSnH7.js +4 -0
  245. package/dist/dashboard/public/assets/eiffel-CnydiIhH.js +1 -0
  246. package/dist/dashboard/public/assets/elm-vLlmbW-K.js +1 -0
  247. package/dist/dashboard/public/assets/erDiagram-0228fc6a-DT224olg.js +51 -0
  248. package/dist/dashboard/public/assets/erlang-BNw1qcRV.js +1 -0
  249. package/dist/dashboard/public/assets/factor-kuTfRLto.js +1 -0
  250. package/dist/dashboard/public/assets/fcl-Kvtd6kyn.js +1 -0
  251. package/dist/dashboard/public/assets/flowDb-c6c81e3f-D9_ukKtv.js +10 -0
  252. package/dist/dashboard/public/assets/flowDiagram-50d868cf-CylE8siG.js +4 -0
  253. package/dist/dashboard/public/assets/flowDiagram-v2-4f6560a1-B2O3JN7Y.js +1 -0
  254. package/dist/dashboard/public/assets/flowchart-elk-definition-6af322e1-BCaqFKf3.js +139 -0
  255. package/dist/dashboard/public/assets/forth-Ffai-XNe.js +1 -0
  256. package/dist/dashboard/public/assets/fortran-DYz_wnZ1.js +1 -0
  257. package/dist/dashboard/public/assets/ganttDiagram-a2739b55-WQUL1QW_.js +257 -0
  258. package/dist/dashboard/public/assets/gas-Bneqetm1.js +1 -0
  259. package/dist/dashboard/public/assets/gherkin-heZmZLOM.js +1 -0
  260. package/dist/dashboard/public/assets/gitGraphDiagram-82fe8481-CttZrdmr.js +70 -0
  261. package/dist/dashboard/public/assets/graph-Ch-rVueN.js +1 -0
  262. package/dist/dashboard/public/assets/groovy-D9Dt4D0W.js +1 -0
  263. package/dist/dashboard/public/assets/haskell-Cw1EW3IL.js +1 -0
  264. package/dist/dashboard/public/assets/haxe-H-WmDvRZ.js +1 -0
  265. package/dist/dashboard/public/assets/http-DBlCnlav.js +1 -0
  266. package/dist/dashboard/public/assets/idl-BEugSyMb.js +1 -0
  267. package/dist/dashboard/public/assets/index--kbPpDKv.js +1 -0
  268. package/dist/dashboard/public/assets/index-3scDwWm6.js +1 -0
  269. package/dist/dashboard/public/assets/index-5325376f-BL2zVOJU.js +1 -0
  270. package/dist/dashboard/public/assets/index-BZdjbO25.js +1 -0
  271. package/dist/dashboard/public/assets/index-BmA_batZ.js +1 -0
  272. package/dist/dashboard/public/assets/index-Bu0u99kF.js +2 -0
  273. package/dist/dashboard/public/assets/index-Ch-lr7F4.js +1 -0
  274. package/dist/dashboard/public/assets/index-ClgWbdoq.js +1 -0
  275. package/dist/dashboard/public/assets/index-CzLwOMQ_.js +3 -0
  276. package/dist/dashboard/public/assets/index-DAOEjGO7.js +1 -0
  277. package/dist/dashboard/public/assets/index-DXqf0B9c.js +1 -0
  278. package/dist/dashboard/public/assets/index-DegWdR16.js +1 -0
  279. package/dist/dashboard/public/assets/index-DiHyYGim.js +1 -0
  280. package/dist/dashboard/public/assets/index-DlZtG7I5.js +1 -0
  281. package/dist/dashboard/public/assets/index-DmhGE2M8.js +1 -0
  282. package/dist/dashboard/public/assets/index-QEGvld4x.js +1 -0
  283. package/dist/dashboard/public/assets/index-RfZPGAJu.js +1 -0
  284. package/dist/dashboard/public/assets/index-UybBj_7u.js +319 -0
  285. package/dist/dashboard/public/assets/index-bVekzPnl.js +7 -0
  286. package/dist/dashboard/public/assets/index-f5bysQzW.css +1 -0
  287. package/dist/dashboard/public/assets/infoDiagram-8eee0895-DjzkkE3o.js +7 -0
  288. package/dist/dashboard/public/assets/init-Gi6I4Gst.js +1 -0
  289. package/dist/dashboard/public/assets/javascript-iXu5QeM3.js +1 -0
  290. package/dist/dashboard/public/assets/journeyDiagram-c64418c1-CxPZkNdB.js +139 -0
  291. package/dist/dashboard/public/assets/julia-DuME0IfC.js +1 -0
  292. package/dist/dashboard/public/assets/katex-XbL3y5x-.js +261 -0
  293. package/dist/dashboard/public/assets/layout-DX7DNTRm.js +1 -0
  294. package/dist/dashboard/public/assets/line-DfvpmKOn.js +1 -0
  295. package/dist/dashboard/public/assets/linear-gQbBPHO5.js +1 -0
  296. package/dist/dashboard/public/assets/livescript-BwQOo05w.js +1 -0
  297. package/dist/dashboard/public/assets/lua-BgMRiT3U.js +1 -0
  298. package/dist/dashboard/public/assets/mathematica-DTrFuWx2.js +1 -0
  299. package/dist/dashboard/public/assets/mbox-CNhZ1qSd.js +1 -0
  300. package/dist/dashboard/public/assets/mindmap-definition-8da855dc-CNxmpyG6.js +415 -0
  301. package/dist/dashboard/public/assets/mirc-CjQqDB4T.js +1 -0
  302. package/dist/dashboard/public/assets/mllike-CXdrOF99.js +1 -0
  303. package/dist/dashboard/public/assets/modelica-Dc1JOy9r.js +1 -0
  304. package/dist/dashboard/public/assets/mscgen-BA5vi2Kp.js +1 -0
  305. package/dist/dashboard/public/assets/mumps-BT43cFF4.js +1 -0
  306. package/dist/dashboard/public/assets/nginx-DdIZxoE0.js +1 -0
  307. package/dist/dashboard/public/assets/nsis-LdVXkNf5.js +1 -0
  308. package/dist/dashboard/public/assets/ntriples-BfvgReVJ.js +1 -0
  309. package/dist/dashboard/public/assets/octave-Ck1zUtKM.js +1 -0
  310. package/dist/dashboard/public/assets/ordinal-Cboi1Yqb.js +1 -0
  311. package/dist/dashboard/public/assets/oz-BzwKVEFT.js +1 -0
  312. package/dist/dashboard/public/assets/pascal--L3eBynH.js +1 -0
  313. package/dist/dashboard/public/assets/path-CbwjOpE9.js +1 -0
  314. package/dist/dashboard/public/assets/perl-CdXCOZ3F.js +1 -0
  315. package/dist/dashboard/public/assets/pieDiagram-a8764435-D-xy_NSA.js +35 -0
  316. package/dist/dashboard/public/assets/pig-CevX1Tat.js +1 -0
  317. package/dist/dashboard/public/assets/powershell-CFHJl5sT.js +1 -0
  318. package/dist/dashboard/public/assets/properties-C78fOPTZ.js +1 -0
  319. package/dist/dashboard/public/assets/protobuf-ChK-085T.js +1 -0
  320. package/dist/dashboard/public/assets/pug-DeIclll2.js +1 -0
  321. package/dist/dashboard/public/assets/puppet-DMA9R1ak.js +1 -0
  322. package/dist/dashboard/public/assets/python-BuPzkPfP.js +1 -0
  323. package/dist/dashboard/public/assets/q-pXgVlZs6.js +1 -0
  324. package/dist/dashboard/public/assets/quadrantDiagram-1e28029f-BoL2wzz0.js +7 -0
  325. package/dist/dashboard/public/assets/r-B6wPVr8A.js +1 -0
  326. package/dist/dashboard/public/assets/requirementDiagram-08caed73-BujFz0q1.js +52 -0
  327. package/dist/dashboard/public/assets/rpm-CTu-6PCP.js +1 -0
  328. package/dist/dashboard/public/assets/ruby-B2Rjki9n.js +1 -0
  329. package/dist/dashboard/public/assets/sankeyDiagram-a04cb91d-D03_NARm.js +8 -0
  330. package/dist/dashboard/public/assets/sas-B4kiWyti.js +1 -0
  331. package/dist/dashboard/public/assets/scheme-C41bIUwD.js +1 -0
  332. package/dist/dashboard/public/assets/sequenceDiagram-c5b8d532-B65eFcaT.js +122 -0
  333. package/dist/dashboard/public/assets/shell-CjFT_Tl9.js +1 -0
  334. package/dist/dashboard/public/assets/sieve-C3Gn_uJK.js +1 -0
  335. package/dist/dashboard/public/assets/simple-mode-GW_nhZxv.js +1 -0
  336. package/dist/dashboard/public/assets/smalltalk-CnHTOXQT.js +1 -0
  337. package/dist/dashboard/public/assets/solr-DehyRSwq.js +1 -0
  338. package/dist/dashboard/public/assets/sparql-DkYu6x3z.js +1 -0
  339. package/dist/dashboard/public/assets/spreadsheet-BCZA_wO0.js +1 -0
  340. package/dist/dashboard/public/assets/sql-D0XecflT.js +1 -0
  341. package/dist/dashboard/public/assets/stateDiagram-1ecb1508-BDbqu0Vl.js +1 -0
  342. package/dist/dashboard/public/assets/stateDiagram-v2-c2b004d7-CBHvk4b8.js +1 -0
  343. package/dist/dashboard/public/assets/stex-C3f8Ysf7.js +1 -0
  344. package/dist/dashboard/public/assets/styles-b4e223ce-CELsPqaO.js +160 -0
  345. package/dist/dashboard/public/assets/styles-ca3715f6-BRqMqT6F.js +207 -0
  346. package/dist/dashboard/public/assets/styles-d45a18b0-e8N-oLPy.js +116 -0
  347. package/dist/dashboard/public/assets/stylus-B533Al4x.js +1 -0
  348. package/dist/dashboard/public/assets/svgDrawCommon-b86b1483-vNDtmQc-.js +1 -0
  349. package/dist/dashboard/public/assets/swift-BzpIVaGY.js +1 -0
  350. package/dist/dashboard/public/assets/tcl-DVfN8rqt.js +1 -0
  351. package/dist/dashboard/public/assets/textile-CnDTJFAw.js +1 -0
  352. package/dist/dashboard/public/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  353. package/dist/dashboard/public/assets/tiki-DGYXhP31.js +1 -0
  354. package/dist/dashboard/public/assets/timeline-definition-faaaa080-Dh2_A5VU.js +61 -0
  355. package/dist/dashboard/public/assets/toml-Bm5Em-hy.js +1 -0
  356. package/dist/dashboard/public/assets/troff-wAsdV37c.js +1 -0
  357. package/dist/dashboard/public/assets/ttcn-CfJYG6tj.js +1 -0
  358. package/dist/dashboard/public/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  359. package/dist/dashboard/public/assets/turtle-B1tBg_DP.js +1 -0
  360. package/dist/dashboard/public/assets/vb-CmGdzxic.js +1 -0
  361. package/dist/dashboard/public/assets/vbscript-BuJXcnF6.js +1 -0
  362. package/dist/dashboard/public/assets/velocity-D8B20fx6.js +1 -0
  363. package/dist/dashboard/public/assets/verilog-C6RDOZhf.js +1 -0
  364. package/dist/dashboard/public/assets/vhdl-lSbBsy5d.js +1 -0
  365. package/dist/dashboard/public/assets/webidl-ZXfAyPTL.js +1 -0
  366. package/dist/dashboard/public/assets/xquery-DzFWVndE.js +1 -0
  367. package/dist/dashboard/public/assets/xychartDiagram-f5964ef8-B76v1AVF.js +7 -0
  368. package/dist/dashboard/public/assets/yacas-BJ4BC0dw.js +1 -0
  369. package/dist/dashboard/public/assets/z80-Hz9HOZM7.js +1 -0
  370. package/dist/dashboard/public/claude-icon-dark.svg +1 -0
  371. package/dist/dashboard/public/claude-icon.svg +1 -0
  372. package/dist/dashboard/public/index.html +16 -0
  373. package/dist/dashboard/settings-manager.d.ts +47 -0
  374. package/dist/dashboard/settings-manager.d.ts.map +1 -0
  375. package/dist/dashboard/settings-manager.js +180 -0
  376. package/dist/dashboard/settings-manager.js.map +1 -0
  377. package/dist/dashboard/utils.d.ts +31 -0
  378. package/dist/dashboard/utils.d.ts.map +1 -0
  379. package/dist/dashboard/utils.js +102 -0
  380. package/dist/dashboard/utils.js.map +1 -0
  381. package/dist/dashboard/watcher.d.ts +32 -0
  382. package/dist/dashboard/watcher.d.ts.map +1 -0
  383. package/dist/dashboard/watcher.js +173 -0
  384. package/dist/dashboard/watcher.js.map +1 -0
  385. package/dist/index.d.ts +13 -0
  386. package/dist/index.d.ts.map +1 -0
  387. package/dist/index.js +380 -0
  388. package/dist/index.js.map +1 -0
  389. package/dist/markdown/templates/design-template.md +126 -0
  390. package/dist/markdown/templates/product-template.md +51 -0
  391. package/dist/markdown/templates/requirements-template.md +50 -0
  392. package/dist/markdown/templates/structure-template.md +145 -0
  393. package/dist/markdown/templates/tasks-template.md +100 -0
  394. package/dist/markdown/templates/tech-template.md +99 -0
  395. package/dist/markdown/templates/test-design-template.md +221 -0
  396. package/dist/prompts/create-spec.d.ts +3 -0
  397. package/dist/prompts/create-spec.d.ts.map +1 -0
  398. package/dist/prompts/create-spec.js +97 -0
  399. package/dist/prompts/create-spec.js.map +1 -0
  400. package/dist/prompts/create-steering-doc.d.ts +3 -0
  401. package/dist/prompts/create-steering-doc.d.ts.map +1 -0
  402. package/dist/prompts/create-steering-doc.js +75 -0
  403. package/dist/prompts/create-steering-doc.js.map +1 -0
  404. package/dist/prompts/implement-task.d.ts +3 -0
  405. package/dist/prompts/implement-task.d.ts.map +1 -0
  406. package/dist/prompts/implement-task.js +174 -0
  407. package/dist/prompts/implement-task.js.map +1 -0
  408. package/dist/prompts/index.d.ts +20 -0
  409. package/dist/prompts/index.d.ts.map +1 -0
  410. package/dist/prompts/index.js +103 -0
  411. package/dist/prompts/index.js.map +1 -0
  412. package/dist/prompts/inject-spec-workflow-guide.d.ts +3 -0
  413. package/dist/prompts/inject-spec-workflow-guide.d.ts.map +1 -0
  414. package/dist/prompts/inject-spec-workflow-guide.js +60 -0
  415. package/dist/prompts/inject-spec-workflow-guide.js.map +1 -0
  416. package/dist/prompts/inject-steering-guide.d.ts +3 -0
  417. package/dist/prompts/inject-steering-guide.d.ts.map +1 -0
  418. package/dist/prompts/inject-steering-guide.js +64 -0
  419. package/dist/prompts/inject-steering-guide.js.map +1 -0
  420. package/dist/prompts/refresh-tasks.d.ts +3 -0
  421. package/dist/prompts/refresh-tasks.d.ts.map +1 -0
  422. package/dist/prompts/refresh-tasks.js +237 -0
  423. package/dist/prompts/refresh-tasks.js.map +1 -0
  424. package/dist/prompts/spec-status.d.ts +3 -0
  425. package/dist/prompts/spec-status.d.ts.map +1 -0
  426. package/dist/prompts/spec-status.js +77 -0
  427. package/dist/prompts/spec-status.js.map +1 -0
  428. package/dist/prompts/types.d.ts +13 -0
  429. package/dist/prompts/types.d.ts.map +1 -0
  430. package/dist/prompts/types.js +2 -0
  431. package/dist/prompts/types.js.map +1 -0
  432. package/dist/server.d.ts +17 -0
  433. package/dist/server.d.ts.map +1 -0
  434. package/dist/server.js +175 -0
  435. package/dist/server.js.map +1 -0
  436. package/dist/tools/__tests__/log-implementation-review-process.test.d.ts +2 -0
  437. package/dist/tools/__tests__/log-implementation-review-process.test.d.ts.map +1 -0
  438. package/dist/tools/__tests__/log-implementation-review-process.test.js +190 -0
  439. package/dist/tools/__tests__/log-implementation-review-process.test.js.map +1 -0
  440. package/dist/tools/__tests__/projectPath.test.d.ts +2 -0
  441. package/dist/tools/__tests__/projectPath.test.d.ts.map +1 -0
  442. package/dist/tools/__tests__/projectPath.test.js +187 -0
  443. package/dist/tools/__tests__/projectPath.test.js.map +1 -0
  444. package/dist/tools/approvals.d.ts +14 -0
  445. package/dist/tools/approvals.d.ts.map +1 -0
  446. package/dist/tools/approvals.js +505 -0
  447. package/dist/tools/approvals.js.map +1 -0
  448. package/dist/tools/index.d.ts +5 -0
  449. package/dist/tools/index.d.ts.map +1 -0
  450. package/dist/tools/index.js +52 -0
  451. package/dist/tools/index.js.map +1 -0
  452. package/dist/tools/log-implementation.d.ts +5 -0
  453. package/dist/tools/log-implementation.d.ts.map +1 -0
  454. package/dist/tools/log-implementation.js +498 -0
  455. package/dist/tools/log-implementation.js.map +1 -0
  456. package/dist/tools/spec-status.d.ts +5 -0
  457. package/dist/tools/spec-status.d.ts.map +1 -0
  458. package/dist/tools/spec-status.js +192 -0
  459. package/dist/tools/spec-status.js.map +1 -0
  460. package/dist/tools/spec-workflow-guide.d.ts +5 -0
  461. package/dist/tools/spec-workflow-guide.d.ts.map +1 -0
  462. package/dist/tools/spec-workflow-guide.js +116 -0
  463. package/dist/tools/spec-workflow-guide.js.map +1 -0
  464. package/dist/tools/steering-guide.d.ts +5 -0
  465. package/dist/tools/steering-guide.d.ts.map +1 -0
  466. package/dist/tools/steering-guide.js +192 -0
  467. package/dist/tools/steering-guide.js.map +1 -0
  468. package/dist/types.d.ts +183 -0
  469. package/dist/types.d.ts.map +1 -0
  470. package/dist/types.js +13 -0
  471. package/dist/types.js.map +1 -0
  472. package/package.json +106 -0
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: unit-test-engineer
3
+ description: Rust unit testing specialist. Designs and implements tests based on Design by Contract.
4
+ tools: Read, Write, Edit, Bash, Grep, Glob
5
+ color: green
6
+ ---
7
+
8
+ # Unit Test Engineer
9
+
10
+ > A unit testing specialist who expresses specifications (contracts) as executable tests at the unit level and contains defects early.
11
+
12
+ ---
13
+
14
+ # Role
15
+ Act as a specialist in the following areas:
16
+ - Rust test code design and implementation
17
+ - Design by Contract (preconditions, postconditions, invariants)
18
+ - Trait-based test double design
19
+
20
+ # Purpose
21
+ - Implement test code
22
+ - When `Test design doc path` is provided, verify coverage against test-design.md UT specifications and add any missing test cases defined there
23
+
24
+ # Constraints
25
+ - Tests must verify the preconditions, postconditions, and invariants of methods
26
+ - Implement following the Given-When-Then pattern
27
+ - Do not modify the production code under test
28
+
29
+ ---
30
+
31
+ ## Triggers
32
+ - Requests to define unit test policies or design test cases
33
+ - Requirements to guarantee preconditions/postconditions/invariants through tests
34
+ - Requests to create or expand test skeletons for new functions/methods
35
+ - Improving the readability, maintainability, or reliability of existing unit tests
36
+ - Test double (Mock/Stub/Fake) design or dependency isolation
37
+
38
+ ## Approach
39
+ - **Think in terms of contracts**: Clarify specifications through pre/post/invariant conditions and make them visible in tests
40
+ - **Strong against failure modes outside the happy path**: Deliberately probe boundary values, errors, None/Some, and empty collections
41
+ - **Fast feedback at the smallest unit**: Keep feedback loops short at the unit granularity and detect regressions immediately
42
+ - **Tests as documentation**: Readable via GWT, with naming and structure that makes intent clear at a glance
43
+
44
+ ## Focus Areas
45
+ - **Design by Contract verification**: Documenting and testing preconditions, postconditions, and invariants
46
+ - **Test design techniques**: Equivalence partitioning, boundary value analysis, state transition testing
47
+ - **Implementation via GWT**: Strict adherence to the Given/When/Then structure
48
+ - **Test doubles**: Trait-based DI + `mockall` to isolate side effects
49
+ - **Maintainability**: Test naming conventions, data builders, `rstest` parameterization, deduplication
50
+
51
+ ## Primary Actions
52
+ 1. **Extract contracts**: Clarify preconditions, postconditions, and invariants of the target function/method
53
+ 2. **Test design**: Draft cases that cover all categories in the "Required Test Aspects" below without omission
54
+ 3. **GWT implementation**: Implement each case with GWT and enforce contracts with `assert_eq!` / `assert!` / `matches!`
55
+ 4. **Dependency isolation**: Make tests deterministic with trait + `mockall` / manual Stub / Fake
56
+ 5. **Refactoring**: Improve readability and reusability (naming, data builders, helpers)
57
+
58
+ ## Required Test Aspects
59
+
60
+ Cover all of the following aspects without omission. Items that do not apply to the target code may be skipped, but leave a comment explaining why.
61
+
62
+ ### 1. Happy Path Tests
63
+ - Verify behavior with representative valid inputs
64
+ - If multiple valid patterns exist, cover each one
65
+
66
+ ### 2. Boundary Value Tests
67
+ Identify the following boundaries and create a test case for each:
68
+ - **Minimum / Maximum**: Values exactly at the lower and upper limits of the allowed range
69
+ - **Just before / just after the boundary**: lower-1, lower, lower+1 / upper-1, upper, upper+1
70
+ - **Zero boundary**: The transition between 0, negative numbers, and positive numbers
71
+ - **Empty vs. non-empty boundary**: Empty string ↔ 1 character, empty array ↔ 1 element
72
+ - **Type boundaries**: Integer overflow, floating-point precision limits (where applicable)
73
+ - **String length boundaries**: Minimum length, maximum length, exceeding maximum (where applicable)
74
+
75
+ ### 3. Exception Handling Tests
76
+ Create test cases for each of the following categories:
77
+ - **None / uninitialized input**: Passing `None` for each argument (`Option<T>` parameters)
78
+ - **Wrong types**: Values of a different type than expected (for deserialization paths)
79
+ - **Out-of-range values**: Inputs that exceed the allowed range
80
+ - **Invalid formats**: Invalid date, email, URL, and similar formats (where applicable)
81
+ - **Empty input**: Empty strings, empty `Vec`, empty structs
82
+ - **External dependency failures**: DB connection errors, API communication errors, missing files, etc. (where applicable)
83
+ - **Verification of error type and content**: Confirm that the returned `Err` type and message are correct using `matches!` or similar
84
+
85
+ ### 4. Edge Case Tests
86
+ - When there is only one element
87
+ - When duplicate values exist
88
+ - Special characters and multibyte character input
89
+ - Very large or very long input (performance boundary)
90
+
91
+ ## Rust-Specific Test Structure
92
+
93
+ ```rust
94
+ #[cfg(test)]
95
+ mod tests {
96
+ use super::*;
97
+
98
+ // Given-When-Then structure
99
+ #[test]
100
+ fn returns_error_when_invalid_input() {
101
+ // Given: invalid input
102
+ let input = CreateUserRequest { name: "".into(), email: "invalid".into() };
103
+
104
+ // When: run validation
105
+ let result = validate_user(&input);
106
+
107
+ // Then: an error is returned (postcondition)
108
+ assert!(result.is_err());
109
+ assert!(matches!(result.unwrap_err(), ValidationError::EmptyName));
110
+ }
111
+
112
+ // Dependency isolation with mockall
113
+ #[test]
114
+ fn service_calls_repository() {
115
+ // Given
116
+ let mut mock_repo = MockUserRepository::new();
117
+ mock_repo.expect_save()
118
+ .times(1)
119
+ .returning(|u| Ok(User { id: 1, ..u }));
120
+ let service = UserService::new(Box::new(mock_repo));
121
+
122
+ // When
123
+ let result = service.create_user(&new_user);
124
+
125
+ // Then
126
+ assert!(result.is_ok());
127
+ }
128
+ }
129
+ ```
130
+
131
+ ## Guidelines
132
+ - **Naming**: `{behavior}_when_{condition}` (e.g., `returns_error_when_empty_name`)
133
+ - **One concept per test**: Multiple asserts are fine as long as they verify "one concept"
134
+ - **State verification**: Verify postconditions/invariants through behavior observable from the public API
135
+ - **Error verification**: Verify using `Result` patterns. Use `#[should_panic]` only when a panic is the intended behavior
136
+ - **Determinism**: Fix time with a Clock trait, randomness with a Generator trait
137
+
138
+ ## Boundaries
139
+
140
+ ### Will Do
141
+ - Design, implementation, and refactoring specialized for unit tests
142
+ - Documenting contracts (pre/post/invariants) and verifying them through tests
143
+ - Test double design, visibility of quality metrics, and improvement suggestions
144
+
145
+ ### Will Not Do
146
+ - Implementing business logic in production features
147
+ - Implementing integration/system/load tests (advisory input is acceptable when needed)
148
+ - Unilaterally deciding architecture without impact analysis on quality
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: wave-harness-worker
3
+ description: Implementation worker dedicated to wave-harness. Executes implementation and verification per Task unit, and returns schema-compliant JSON.
4
+ tools: Read, Edit, Write, Bash, Grep, Glob, Skill
5
+ skills:
6
+ - tdd-skills
7
+ memory: project
8
+ permissionMode: bypassPermissions
9
+ ---
10
+
11
+ # wave-harness-worker
12
+
13
+ ## Role
14
+
15
+ - Implement 1 work_item.
16
+ - Run verification.
17
+ - Return schema-compliant JSON.
18
+
19
+ ## Input
20
+
21
+ - `session_id`
22
+ - `attempt`
23
+ - `retry_mode` (optional, default: false)
24
+ - `work_item_id`
25
+ - `worktree_path` (required)
26
+ - `whiteboard_path` (required) — path to the shared whiteboard file
27
+ - `title`, `description`, `plan`
28
+ - `affected_files`
29
+ - `test_targets` (optional)
30
+ - `previous_error` (optional)
31
+
32
+ ## Rules
33
+
34
+ - All work must be done inside the specified `worktree_path`.
35
+ - Do not run git add / commit / checkout -b. File editing only.
36
+ - If there are no changes, use `status="no_op"`.
37
+ - `started_at` / `ended_at` must be in RFC3339 UTC format.
38
+
39
+ ## Deterministic checks
40
+
41
+ When `test_targets` is provided:
42
+
43
+ ```bash
44
+ cargo test ${test_targets} -- --nocapture
45
+ ```
46
+
47
+ When `test_targets` is not provided:
48
+
49
+ ```bash
50
+ # Infer and run the tests corresponding to affected_files
51
+ # Example: src/handlers/users.rs → tests/unit/test_users.rs
52
+ # If no corresponding test is found, run only cargo test --lib
53
+ cargo test --lib --quiet
54
+ ```
55
+
56
+ > **Note:** Running all tests without `test_targets` risks timeout, so avoid it.
57
+ > Running all tests is the orchestrator's responsibility in Phase 4 (final quality gate).
58
+
59
+ Common:
60
+
61
+ > **Intentional deviation from quality-checks.md**: wave-harness-worker uses scoped checks (affected files only) for performance. `--all-targets` is omitted because full-project checks are the orchestrator's responsibility at Phase Review. Similarly, `rustfmt --check ${affected_files}` targets only changed files instead of `cargo fmt --all -- --check`.
62
+
63
+ ```bash
64
+ cargo clippy --quiet -- -D warnings
65
+ rustfmt --check ${affected_files}
66
+ ```
67
+
68
+ ## Procedure
69
+
70
+ 1. `cd {worktree_path}` (do not create the worktree).
71
+ 2. Read `whiteboard_path` and obtain shared context from Goal, How Our Work Connects, and Key Questions.
72
+ 3. Implement (file editing only).
73
+ 4. Verify (run clippy/rustfmt scoped to affected_files; run cargo test only if test_targets is provided).
74
+ 5. Edit the `### {work_item_id}: ...` section of the whiteboard with implementation insights, decisions, and impacts. Edit only your own section.
75
+ 6. Return the `changed_files` list (do not commit). Do not include `whiteboard_path` in `changed_files`.
76
+ 7. If there are no changes, return `no_op`.
77
+ 8. Return JSON.
78
+
79
+ ## Output schema (v3)
80
+
81
+ ```json
82
+ {
83
+ "schema_version": "taskflow-worker.v3",
84
+ "worker": "wave-harness-worker",
85
+ "session_id": "wh-20260226T190000",
86
+ "attempt": 1,
87
+ "work_item_id": "issue-123",
88
+ "status": "completed",
89
+ "changed_files": ["src/handlers/users.rs"],
90
+ "checks": {
91
+ "clippy": "pass",
92
+ "rustfmt": "pass",
93
+ "cargo_test": "pass"
94
+ },
95
+ "no_op_reason": null,
96
+ "started_at": "2026-02-26T19:00:00Z",
97
+ "ended_at": "2026-02-26T19:10:00Z",
98
+ "error": null
99
+ }
100
+ ```
101
+
102
+ ## no_op schema
103
+
104
+ ```json
105
+ {
106
+ "schema_version": "taskflow-worker.v3",
107
+ "worker": "wave-harness-worker",
108
+ "session_id": "wh-20260226T190000",
109
+ "attempt": 1,
110
+ "work_item_id": "issue-123",
111
+ "status": "no_op",
112
+ "changed_files": [],
113
+ "checks": {
114
+ "clippy": "pass",
115
+ "rustfmt": "pass",
116
+ "cargo_test": "pass"
117
+ },
118
+ "no_op_reason": "No code changes were required",
119
+ "started_at": "2026-02-26T19:00:00Z",
120
+ "ended_at": "2026-02-26T19:03:00Z",
121
+ "error": null
122
+ }
123
+ ```
124
+
125
+ ## Failure schema
126
+
127
+ ```json
128
+ {
129
+ "schema_version": "taskflow-worker.v3",
130
+ "worker": "wave-harness-worker",
131
+ "session_id": "wh-20260226T190000",
132
+ "attempt": 1,
133
+ "work_item_id": "issue-123",
134
+ "status": "failed",
135
+ "changed_files": [],
136
+ "checks": {
137
+ "clippy": "not_run",
138
+ "rustfmt": "not_run",
139
+ "cargo_test": "not_run"
140
+ },
141
+ "no_op_reason": null,
142
+ "started_at": "2026-02-26T19:00:00Z",
143
+ "ended_at": "2026-02-26T19:01:00Z",
144
+ "error": {
145
+ "code": "CHECK_FAILED",
146
+ "message": "cargo test failed",
147
+ "details": "..."
148
+ }
149
+ }
150
+ ```
151
+
152
+ ## Error codes
153
+
154
+ - `INPUT_INVALID`
155
+ - `IMPLEMENTATION_FAILED`
156
+ - `CHECK_FAILED`
157
+ - `SCHEMA_VIOLATION`
158
+ - `TIMEOUT`
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "PostToolUse": [
4
+ {
5
+ "matcher": "Read",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/tasks-read-guard.sh\"",
10
+ "timeout": 10
11
+ }
12
+ ]
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # spec-workflow: guardrail triggered after reading tasks.md
3
+ # Called from the PostToolUse(Read) hook
4
+
5
+ FILE_PATH=$(jq -r '.tool_input.file_path // .tool_response.filePath // empty' 2>/dev/null || echo '')
6
+
7
+ if echo "$FILE_PATH" | grep -qE '[.]spec-workflow/specs/[^/]+/tasks[.]md$'; then
8
+ echo "⛔ [spec-workflow] STOP — tasks.md has been read."
9
+ echo ""
10
+ echo "You must not write code directly for any reason after this point."
11
+ echo "Next action: Guide the user with 'Please run /spec-implement' and stop immediately."
12
+ echo ""
13
+ echo "Prohibited (no exceptions):"
14
+ echo " - Writing code via Edit / Write / Bash"
15
+ echo " - Launching /spec-implement yourself"
16
+ echo " - Starting implementation in response to 'yes', 'go ahead', 'OK', etc."
17
+ fi
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "spec-workflow-mcp-marketplace",
3
+ "owner": {
4
+ "name": "arimakouyou"
5
+ },
6
+ "metadata": {
7
+ "description": "Spec Workflow MCP provides structured spec-driven development with a sequential workflow (Requirements → Design → Tasks), real-time web dashboard, and VSCode extension support. Includes human approval gates at each stage and project steering guidance."
8
+ },
9
+ "plugins": [
10
+ {
11
+ "name": "spec-workflow-mcp",
12
+ "version": "2.2.7",
13
+ "description": "MCP server for structured spec-driven development with real-time web dashboard and VSCode extension.",
14
+ "author": {
15
+ "name": "arimakouyou"
16
+ },
17
+ "license": "GPL-3.0",
18
+ "homepage": "https://github.com/arimakouyou/spec-workflow-mcp",
19
+ "source": "./.claude-plugin"
20
+ },
21
+ {
22
+ "name": "spec-workflow-mcp-with-dashboard",
23
+ "version": "2.2.7",
24
+ "description": "Lightweight MCP server for structured spec-driven development (no skills/agents/rules/hooks). Start the dashboard separately with --dashboard.",
25
+ "author": {
26
+ "name": "arimakouyou"
27
+ },
28
+ "license": "GPL-3.0",
29
+ "homepage": "https://github.com/arimakouyou/spec-workflow-mcp",
30
+ "source": "./.claude-plugin/with-dashboard"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "spec-workflow-mcp",
3
+ "version": "2.2.7",
4
+ "description": "MCP server for structured spec-driven development with real-time web dashboard and VSCode extension.",
5
+ "author": {
6
+ "name": "arimakouyou"
7
+ },
8
+ "homepage": "https://github.com/arimakouyou/spec-workflow-mcp",
9
+ "license": "GPL-3.0",
10
+ "hooks": "./hooks/hooks.json"
11
+ }
@@ -0,0 +1,154 @@
1
+ ---
2
+ paths:
3
+ - "**/*.rs"
4
+ globs:
5
+ - "**/Cargo.toml"
6
+ ---
7
+
8
+ # Axum Best Practices
9
+
10
+ ## Router Configuration
11
+
12
+ - Create routers with `Router::new()` and register routes with `route()`
13
+ - Split related routes into separate `Router` modules and combine them with `merge()` or `nest()`
14
+ - Use `nest("/api/v1", api_routes())` to group routes under a common prefix
15
+ - Keep route definition files and handler implementation files separate
16
+
17
+ ```rust
18
+ // routes/mod.rs
19
+ pub fn routes() -> Router<AppState> {
20
+ Router::new()
21
+ .merge(users::routes())
22
+ .merge(posts::routes())
23
+ }
24
+
25
+ // routes/users.rs
26
+ pub fn routes() -> Router<AppState> {
27
+ Router::new()
28
+ .route("/users", get(list_users).post(create_user))
29
+ .route("/users/{id}", get(get_user).put(update_user).delete(delete_user))
30
+ }
31
+ ```
32
+
33
+ ## State Management
34
+
35
+ - Define application state as a `#[derive(Clone)]` struct and pass it with `Router::with_state()`
36
+ - Consolidate shared resources such as DB pools and configuration values into `AppState`
37
+ - Use `Arc<RwLock<T>>` or `Arc<Mutex<T>>` when mutable shared state is required
38
+ - Retrieve state in handlers via the `State` extractor
39
+
40
+ ```rust
41
+ #[derive(Clone)]
42
+ struct AppState {
43
+ db_pool: Pool<AsyncPgConnection>,
44
+ valkey_pool: redis::aio::MultiplexedConnection,
45
+ config: Arc<AppConfig>,
46
+ }
47
+
48
+ async fn handler(State(state): State<AppState>) -> impl IntoResponse {
49
+ // use state.db_pool, state.valkey_pool
50
+ }
51
+ ```
52
+
53
+ ## Extractors
54
+
55
+ - Extractor argument order matters. Place extractors that consume the request body (`Json`, `Form`, etc.) last
56
+ - Place `Path`, `Query`, and `State` first since they do not consume the body
57
+ - Implement `FromRequest` / `FromRequestParts` when creating custom extractors
58
+ - Perform validation at the extractor level
59
+
60
+ ```rust
61
+ async fn update_user(
62
+ State(state): State<AppState>,
63
+ Path(user_id): Path<i64>,
64
+ Json(payload): Json<UpdateUserRequest>, // body-consuming extractor goes last
65
+ ) -> Result<Json<User>, AppError> {
66
+ // ...
67
+ }
68
+ ```
69
+
70
+ ## Error Handling
71
+
72
+ - Define an application-wide error type that implements `IntoResponse`
73
+ - Use `Result<T, AppError>` as the return type of handlers
74
+ - Implement `From` conversions from each error type (diesel, redis, etc.) to `AppError`
75
+ - Manage the mapping between HTTP status codes and error messages in a single place
76
+
77
+ ```rust
78
+ enum AppError {
79
+ NotFound,
80
+ BadRequest(String),
81
+ Internal(anyhow::Error),
82
+ }
83
+
84
+ impl IntoResponse for AppError {
85
+ fn into_response(self) -> Response {
86
+ let (status, message) = match self {
87
+ AppError::NotFound => (StatusCode::NOT_FOUND, "Not found".to_string()),
88
+ AppError::BadRequest(msg) => (StatusCode::BAD_REQUEST, msg),
89
+ AppError::Internal(err) => {
90
+ tracing::error!(%err, "Internal error");
91
+ (StatusCode::INTERNAL_SERVER_ERROR, "Internal server error".to_string())
92
+ }
93
+ };
94
+ (status, Json(json!({ "error": message }))).into_response()
95
+ }
96
+ }
97
+ ```
98
+
99
+ ## Middleware
100
+
101
+ - Use `tower::ServiceBuilder` to apply middleware in bulk (executed top to bottom)
102
+ - Implement authentication and authorization with `middleware::from_fn` or `middleware::from_fn_with_state`
103
+ - Use `TraceLayer` (tower-http) for request logging
104
+ - Configure timeouts with `HandleErrorLayer` + `tower::timeout`
105
+ - Apply middleware to all routes with `.layer()`, and only to authenticated routes with `.route_layer()`
106
+
107
+ ```rust
108
+ let app = Router::new()
109
+ .route("/protected", get(protected_handler))
110
+ .route_layer(middleware::from_fn_with_state(state.clone(), auth))
111
+ .route("/public", get(public_handler))
112
+ .layer(
113
+ ServiceBuilder::new()
114
+ .layer(TraceLayer::new_for_http())
115
+ .layer(HandleErrorLayer::new(handle_timeout))
116
+ .timeout(Duration::from_secs(30))
117
+ .layer(
118
+ CorsLayer::new()
119
+ .allow_origin("https://example.com".parse::<HeaderValue>().unwrap())
120
+ .allow_methods([Method::GET, Method::POST])
121
+ .allow_headers([AUTHORIZATION, CONTENT_TYPE]),
122
+ )
123
+ )
124
+ .with_state(state);
125
+ ```
126
+
127
+ ## Responses
128
+
129
+ - Return successful responses as `Json<T>` (where `T: Serialize`)
130
+ - Use a tuple `(StatusCode, Json<T>)` when an explicit status code is needed
131
+ - Return `StatusCode::NO_CONTENT` for empty responses
132
+ - Use `axum::body::Body` for streaming responses
133
+
134
+ ## Graceful Shutdown
135
+
136
+ - Configure `with_graceful_shutdown` on `axum::serve`
137
+ - Handle SIGTERM/SIGINT with `tokio::signal`
138
+
139
+ ```rust
140
+ let listener = TcpListener::bind("0.0.0.0:3000").await?;
141
+ axum::serve(listener, app)
142
+ .with_graceful_shutdown(shutdown_signal())
143
+ .await?;
144
+
145
+ async fn shutdown_signal() {
146
+ tokio::signal::ctrl_c().await.expect("failed to listen for ctrl_c");
147
+ }
148
+ ```
149
+
150
+ ## Testing
151
+
152
+ - Test handlers directly using `axum::body::Body` and `tower::ServiceExt`
153
+ - Construct a test `AppState` to inject test DBs or mocks
154
+ - Send actual HTTP requests in integration tests
@@ -0,0 +1,63 @@
1
+ ---
2
+ paths:
3
+ - "**/Cargo.toml"
4
+ ---
5
+
6
+ # Cargo.toml Style Rules
7
+
8
+ Follow the official Rust Style Guide conventions for Cargo.toml.
9
+
10
+ ## Formatting
11
+
12
+ - Indentation: 4 spaces (same as Rust code)
13
+ - Max line width: 100 characters
14
+ - One blank line between sections (no blank line between a section header and its key-value pairs)
15
+
16
+ ## Section Order
17
+
18
+ - Place `[package]` at the top of the file
19
+ - Within `[package]`: `name` → `version` → other keys → `description` (last)
20
+ - Within other sections: sort key names alphabetically (version sort)
21
+
22
+ ## Key-Value Pairs
23
+
24
+ - Use bare keys for standard key names (no quotes)
25
+ - Single space around `=`: `name = "my-crate"`
26
+ - No indentation on key names (start at the beginning of the line)
27
+
28
+ ## Array Values
29
+
30
+ ```toml
31
+ # Fits on one line
32
+ default = ["feature1", "feature2"]
33
+
34
+ # Does not fit: block indent + trailing comma
35
+ some_feature = [
36
+ "another_feature",
37
+ "yet_another_feature",
38
+ "some_dependency?/some_feature",
39
+ ]
40
+ ```
41
+
42
+ ## Table Values
43
+
44
+ ```toml
45
+ # Fits on one line: inline
46
+ [dependencies]
47
+ crate1 = { path = "crate1", version = "1.2.3" }
48
+
49
+ # Does not fit: expanded form
50
+ [dependencies.long_crate_name]
51
+ path = "long_path_name"
52
+ version = "4.5.6"
53
+ ```
54
+
55
+ ## Strings
56
+
57
+ - Use multi-line strings for values containing newlines (not `\n` escapes)
58
+
59
+ ## Metadata
60
+
61
+ - `authors`: use `Full Name <email@address>` format
62
+ - `license`: use valid SPDX expressions (e.g., `MIT OR Apache-2.0`)
63
+ - `description`: wrap at 80 columns, do not start with the crate name
@@ -0,0 +1,17 @@
1
+ ---
2
+ description: Rules for using Context7 MCP to retrieve up-to-date information about libraries and tools. Applies when using libraries, configuring external tools, and handling errors.
3
+ ---
4
+
5
+ # Context7 MCP Usage Rules
6
+
7
+ ## When Using Libraries
8
+
9
+ When using APIs from libraries or frameworks, always fetch the latest documentation and code examples via Context7 MCP before implementing. Avoid writing code based on memory of older usage patterns; always base your implementation on the latest correct usage.
10
+
11
+ ## External Tool Configuration and Syntax
12
+
13
+ When writing configuration files (tsconfig, vite.config, eslint, etc.) or CLI tool syntax, verify the correct options and format in advance using Context7 MCP. Do not write configurations based on guesswork.
14
+
15
+ ## When Handling Errors
16
+
17
+ When an error caused by a library or tool occurs, immediately check the correct usage via Context7 MCP and fix it based on the official documentation. Avoid fixes based on outdated Stack Overflow answers or memory-based guesswork.