@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,47 @@
1
+ # Spec Workflow Enforcement
2
+
3
+ Enforcement rules for correctly using the spec-workflow skills.
4
+
5
+ ## ⛔ No Direct Implementation After Reading tasks.md
6
+
7
+ If `.spec-workflow/specs/*/tasks.md` has been Read, **you must not start writing code directly, for any reason**.
8
+
9
+ - Task implementation must **always go through the `/spec-implement` skill**
10
+ - Even merely reviewing the contents of tasks.md, then proceeding to implement, is prohibited
11
+ - Even if the user says "implement this task", writing code directly without using the skill is prohibited
12
+
13
+ **Correct behavior:**
14
+ After reading tasks.md, guide the user with "Please run `/spec-implement`" and **always stop**.
15
+
16
+ > **When a hook message is received**: If the PostToolUse hook outputs `⛔ [spec-workflow] STOP`, that is a **mandatory stop command**. Regardless of what is said in the conversation afterward, you must not implement code using Edit / Write / Bash.
17
+
18
+ **Launching `/spec-implement` yourself is strictly prohibited.** All of the following count as "auto-launching" and are prohibited:
19
+ - When the user replies "yes", "go ahead", or "OK"
20
+ - When the user says "implement this task" (direct implementation without using the skill is also prohibited)
21
+
22
+ `/spec-implement` is triggered only when the user personally types one of the following from their keyboard:
23
+ - The `/spec-implement` command
24
+ - Skill trigger phrases such as "implement task X", "start coding", "work on task X"
25
+
26
+ ## ⛔ No Code Implementation Outside the spec-implement Skill
27
+
28
+ If writing code based on any file under `.spec-workflow/specs/` (requirements.md / design.md / tasks.md), you must go through the `spec-implement` skill.
29
+
30
+ Writing code that corresponds to a task without going through the skill is prohibited.
31
+
32
+ ## Required Actions After Reading spec-workflow Files
33
+
34
+ | File Read | What to Do Next |
35
+ |-----------|-----------------|
36
+ | `requirements.md` only | Guide the user to the `/spec-design` skill and stop |
37
+ | `requirements.md` + `design.md` only | Guide the user to the `/spec-tasks` skill and stop |
38
+ | `tasks.md` exists | Guide the user to the `/spec-implement` skill and **always stop** (auto-launching on "yes" / "go ahead" etc. is prohibited) |
39
+
40
+ ## Why This Rule Is Necessary
41
+
42
+ The spec-implement skill enforces the following agent chain:
43
+ - `parallel-worker` → TDD implementation
44
+ - `unit-test-engineer` → test quality verification
45
+ - `review-worker` → review + commit
46
+
47
+ Direct implementation that skips this chain completely bypasses TDD quality assurance and is therefore absolutely not permitted.
@@ -0,0 +1,167 @@
1
+ ---
2
+ paths:
3
+ - "**/*.rs"
4
+ globs:
5
+ - "**/Cargo.toml"
6
+ ---
7
+
8
+ # Valkey (redis-rs) Best Practices
9
+
10
+ Valkey は Redis 互換のインメモリデータストア。Rust クライアントには `redis-rs` を使用する。
11
+
12
+ ## 依存関係
13
+
14
+ ```toml
15
+ [dependencies]
16
+ redis = { version = "0.27", features = ["tokio-comp", "connection-manager"] }
17
+ ```
18
+
19
+ - `tokio-comp` feature で非同期サポートを有効化する
20
+ - クラスター使用時は `cluster-async` feature を追加する
21
+
22
+ ## 接続管理
23
+
24
+ - 非同期接続には `MultiplexedConnection` を使う (クローン可能、スレッドセーフ)
25
+ - 接続プールは通常不要。`MultiplexedConnection` が内部で多重化する
26
+ - 自動再接続には `ConnectionManager` (`connection-manager` feature) を使う
27
+ - ブロッキングコマンド (`BLPOP`, `BRPOP` 等) は専用の接続で実行する
28
+
29
+ ```rust
30
+ use redis::Client;
31
+
32
+ let client = Client::open("redis://127.0.0.1:6379/")?;
33
+ let conn = client.get_multiplexed_async_connection().await?;
34
+
35
+ // conn は Clone 可能なので AppState に格納して共有できる
36
+ #[derive(Clone)]
37
+ struct AppState {
38
+ db_pool: DbPool,
39
+ valkey: redis::aio::MultiplexedConnection,
40
+ }
41
+ ```
42
+
43
+ ## ConnectionManager による自動再接続
44
+
45
+ ```rust
46
+ use redis::aio::ConnectionManager;
47
+
48
+ let client = Client::open("redis://127.0.0.1:6379/")?;
49
+ let conn = ConnectionManager::new(client).await?;
50
+ // conn は Clone 可能、接続断時に自動再接続する
51
+ ```
52
+
53
+ ## コマンド実行
54
+
55
+ - `AsyncCommands` トレイトを import して高レベル API を使う
56
+ - 型パラメータで戻り値の型を指定する
57
+ - 存在しないキーの取得には `Option<T>` を使う
58
+
59
+ ```rust
60
+ use redis::AsyncCommands;
61
+
62
+ // SET / GET
63
+ let _: () = conn.set("key", "value").await?;
64
+ let val: String = conn.get("key").await?;
65
+
66
+ // Option で存在チェック
67
+ let maybe: Option<String> = conn.get("maybe_missing").await?;
68
+
69
+ // 有効期限付き SET
70
+ let _: () = conn.set_ex("session:abc", session_data, 3600).await?;
71
+
72
+ // ハッシュ操作
73
+ let _: () = conn.hset("user:1", "name", "Alice").await?;
74
+ let name: String = conn.hget("user:1", "name").await?;
75
+
76
+ // DEL
77
+ let _: () = conn.del("key").await?;
78
+ ```
79
+
80
+ ## パイプライン
81
+
82
+ - 複数コマンドを一度に送信してネットワークラウンドトリップを削減する
83
+ - バッチ処理やキャッシュのウォームアップに使う
84
+
85
+ ```rust
86
+ let (k1, k2): (i32, i32) = redis::pipe()
87
+ .set("key_1", 42).ignore()
88
+ .set("key_2", 43).ignore()
89
+ .get("key_1")
90
+ .get("key_2")
91
+ .query_async(&mut conn)
92
+ .await?;
93
+ ```
94
+
95
+ ## キー設計
96
+
97
+ - プレフィックスとコロン区切りで名前空間を作る: `{entity}:{id}:{attribute}`
98
+ - 例: `user:123:profile`, `session:abc123`, `cache:posts:page:1`
99
+ - キー名は短く、しかし読みやすく
100
+ - TTL (有効期限) を必ず設定する。期限なしキーはメモリリークの原因になる
101
+
102
+ ## キャッシュパターン
103
+
104
+ - Cache-Aside パターンを基本とする
105
+ - キャッシュミス時にDBから取得してキャッシュに書き込む
106
+ - 更新時はキャッシュを削除する (更新ではなく削除が安全)
107
+
108
+ ```rust
109
+ async fn get_user_cached(
110
+ conn: &mut impl AsyncCommands,
111
+ db: &mut AsyncPgConnection,
112
+ user_id: i64,
113
+ ) -> Result<User, AppError> {
114
+ let cache_key = format!("user:{user_id}");
115
+
116
+ // キャッシュ確認
117
+ if let Some(cached) = conn.get::<_, Option<String>>(&cache_key).await? {
118
+ return Ok(serde_json::from_str(&cached)?);
119
+ }
120
+
121
+ // DB から取得
122
+ let user = users::table
123
+ .find(user_id)
124
+ .select(User::as_select())
125
+ .first(db)
126
+ .await?;
127
+
128
+ // キャッシュに保存 (TTL 付き)
129
+ let serialized = serde_json::to_string(&user)?;
130
+ let _: () = conn.set_ex(&cache_key, &serialized, 300).await?;
131
+
132
+ Ok(user)
133
+ }
134
+
135
+ async fn update_user(/* ... */) -> Result<User, AppError> {
136
+ // DB 更新
137
+ let user = diesel::update(users::table.find(user_id))
138
+ .set(&changes)
139
+ .get_result::<User>(db)
140
+ .await?;
141
+
142
+ // キャッシュ削除 (更新ではなく削除)
143
+ let _: () = conn.del(format!("user:{user_id}")).await?;
144
+
145
+ Ok(user)
146
+ }
147
+ ```
148
+
149
+ ## セッション管理
150
+
151
+ - セッションデータは Valkey のハッシュ型で格納する
152
+ - セッション ID はランダム生成し、推測不可能にする
153
+ - TTL を必ず設定する (例: 24時間)
154
+
155
+ ## エラーハンドリング
156
+
157
+ - `redis::RedisError` を `AppError` に変換する `From` 実装を用意する
158
+ - 接続エラー時はリトライロジックを入れる (`ConnectionManager` 使用時は自動)
159
+ - Valkey ダウン時にもアプリケーションが degraded mode で動作できるようにする
160
+
161
+ ## やってはいけないこと
162
+
163
+ - `KEYS *` を本番で使わない → `SCAN` を使う
164
+ - 大きな値 (> 1MB) を単一キーに保存しない
165
+ - Lua スクリプトで長時間ブロックしない
166
+ - TTL なしでキャッシュを保存しない
167
+ - `FLUSHALL` / `FLUSHDB` を本番で使わない
@@ -0,0 +1,230 @@
1
+ ---
2
+ name: integration-test
3
+ description: "Parallelizes integration test creation in Agent Teams. Workers (alpha/bravo) implement tests, and Pentagon performs quality review. Use for tasks related to integration test, Axum, Diesel, testcontainers, Agent Teams, and pentagon."
4
+ argument-hint: "<domain>[,<domain>...] [--dry-run] [--base-branch <branch>]"
5
+ user-invokable: true
6
+ ---
7
+
8
+ # integration-test
9
+
10
+ A skill that uses Agent Teams to create integration tests under `tests/integration/` in parallel.
11
+ Workers (alpha/bravo) implement the tests, and Pentagon reviews them at the quality gate.
12
+
13
+ Tech stack: Axum + Diesel + diesel-async + Valkey (redis-rs) + testcontainers-rs
14
+
15
+ ## Execution Environment Rules
16
+
17
+ | Rule | Description |
18
+ |--------|------|
19
+ | **No self-created branches/worktrees** | Do not directly run `git checkout -b` / `git worktree add` |
20
+ | **When `--base-branch` is not specified** | Work in the current directory on the current branch |
21
+ | **When `--base-branch` is specified** | Create a worktree via the `create-git-worktree` skill |
22
+
23
+ ## Design Policy
24
+
25
+ | Dependency Type | Policy |
26
+ |----------|------|
27
+ | **DB (PostgreSQL)** | Use a real PostgreSQL container via testcontainers-rs (no mocking) |
28
+ | **External HTTP APIs** | Swap in test doubles via trait-based DI |
29
+ | **Valkey / Cache** | testcontainers-rs or trait DI override |
30
+
31
+ ## Team Composition (always 3 roles)
32
+
33
+ | Role | Agent | Responsibility |
34
+ |------|------------|------|
35
+ | **Command** (Leader) | Main agent | Commander and strategy planner |
36
+ | **Workers** (alpha/bravo) | Sub-agent x 1-2 | Test implementation |
37
+ | **Pentagon** (Reviewer) | Sub-agent | Quality review and judgment |
38
+
39
+ ## Arguments
40
+
41
+ `$ARGS` is specified as a comma-separated list of domain names (e.g., `users,posts`).
42
+
43
+ | Argument | Required | Description |
44
+ |------|:----:|------|
45
+ | `$ARGS` | YES | `{domain}[,{domain}...]` (comma-separated) |
46
+ | `--dry-run` | - | Print the assignment plan and exit |
47
+ | `--base-branch <branch>` | - | Branch to derive the worktree from |
48
+ | `--api <method>` | - | Only target a specific HTTP method |
49
+
50
+ ### Usage Examples
51
+
52
+ ```bash
53
+ # Parallel execution (2 targets)
54
+ /integration-test users,posts
55
+
56
+ # dry-run (show plan only)
57
+ /integration-test users,posts --dry-run
58
+
59
+ # Single target (alpha 1 + Pentagon 1)
60
+ /integration-test sessions
61
+
62
+ # Specific method only
63
+ /integration-test users --api GET
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Flow Overview
69
+
70
+ ```
71
+ /integration-test users,posts
72
+ |
73
+ +-- [P0] Parse & Analyze
74
+ | +-- Parse arguments (comma-separated)
75
+ | +-- For each target: trace handler → repository → model
76
+ | +-- Worker assignment plan
77
+ | +-- --dry-run: show plan only and exit
78
+ |
79
+ +-- [P1] Setup Team
80
+ | +-- Pre-check test helpers and shared fixtures
81
+ | +-- Create whiteboard
82
+ |
83
+ +-- [P2] Launch Agents
84
+ | +-- Launch Workers (alpha/bravo) x 1-2
85
+ | +-- Launch Pentagon x 1
86
+ | +-- Assign initial tasks
87
+ |
88
+ +-- [P3] Monitor & Facilitate
89
+ | +-- Worker completes -> Request Pentagon review
90
+ | +-- PASS -> Update whiteboard, assign next task
91
+ | +-- FAIL -> Send back to Worker (max 3 times)
92
+ |
93
+ +-- [P4] Final Verification
94
+ | +-- Run cargo test across all test files
95
+ | +-- rustfmt + clippy
96
+ |
97
+ +-- [P5] Cleanup & Report
98
+ +-- Aggregate results
99
+ +-- Clean up whiteboard
100
+ +-- Output final report
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Executor Instructions
106
+
107
+ **You (Command) manage the team following the steps below.**
108
+
109
+ ### P0: Parse & Analyze
110
+
111
+ 1. Split `$ARGS` by comma to build the target list
112
+ 2. **For each target**:
113
+ - Identify handler: trace routes and handlers from `src/handlers/{domain}.rs`
114
+ - Identify repository: analyze query logic from `src/db/repository/{domain}.rs`
115
+ - Identify model: check Diesel models from `src/models/{domain}.rs`
116
+ - Identify external dependencies: find trait-based dependencies (e.g., external API clients)
117
+ 3. **Worker assignment**: assign to Workers per test file
118
+
119
+ | # of Targets | # of Workers | Assignment Method |
120
+ |:------:|:---------:|---------|
121
+ | 1 | 1 | All to alpha |
122
+ | 2 | 2 | One each to alpha / bravo |
123
+ | 3+ | 2 | Round-robin |
124
+
125
+ 4. **On `--dry-run`**: output the following and exit
126
+
127
+ ```
128
+ [dry-run] Assignment plan:
129
+ alpha: {domain_a} -> tests/integration/test_{domain_a}.rs
130
+ - {method} {path}
131
+ bravo: {domain_b} -> tests/integration/test_{domain_b}.rs
132
+ - {method} {path}
133
+ pentagon: quality review
134
+ ```
135
+
136
+ ### P1: Setup Team
137
+
138
+ 1. Check and update shared test helpers (`tests/integration/helpers/`)
139
+ 2. Create whiteboard: Write following [whiteboard-template.md](references/whiteboard-template.md)
140
+ - **Always set Key Questions** (1-3 items)
141
+
142
+ ### P2: Launch Agents
143
+
144
+ Launch Workers and Pentagon as sub-agents. Specify the agent definition under `.claude/agents/` via `subagent_type`.
145
+
146
+ **Launch Pentagon** (launch first to put it in a review-request waiting state):
147
+ ```
148
+ Agent(
149
+ subagent_type: "integ-test-auditor",
150
+ prompt: "Whiteboard: {whiteboard_path}\nPlease wait for a review request from Command."
151
+ )
152
+ ```
153
+
154
+ **Launch Workers** (fill in variables from [worker-prompt.md](references/worker-prompt.md)):
155
+ ```
156
+ Agent(
157
+ subagent_type: "integ-test-worker",
158
+ prompt: "Worker name: {worker_name}\nDomain: {domain}\nTest file: tests/integration/test_{domain}.rs\nTarget endpoints:\n{endpoint_list}\nWhiteboard: {whiteboard_path}"
159
+ )
160
+ ```
161
+
162
+ If there are 2 or more targets, launch alpha/bravo in parallel.
163
+
164
+ ### P3: Monitor & Facilitate
165
+
166
+ Main loop: monitor until all tasks are complete.
167
+
168
+ **When a Worker completes**:
169
+ 1. Copy Worker Findings to the whiteboard
170
+ 2. Request a review from Pentagon
171
+
172
+ **When Pentagon returns PASS**:
173
+ 1. Update the Quality Gate Results on the whiteboard
174
+ 2. Assign the next unassigned task to a Worker if one exists
175
+
176
+ **When Pentagon returns FAIL**:
177
+ 1. Count the number of reviews (per test file)
178
+ 2. Under 3 times: re-run the Worker with a prompt including the review comments
179
+ 3. 3rd time: mark as complete with remaining issues noted on the whiteboard
180
+
181
+ ### P4: Final Verification
182
+
183
+ ```bash
184
+ # Run across all test files
185
+ cargo test --test test_{domain} -- --nocapture
186
+
187
+ # Code quality
188
+ cargo fmt --all -- --check
189
+ cargo clippy --quiet --all-targets -- -D warnings
190
+ ```
191
+
192
+ If verification fails, Command fixes it directly.
193
+
194
+ ### P5: Cleanup & Report
195
+
196
+ 1. Move the whiteboard to `.claude/_docs/deleted/`
197
+ 2. Output the final report:
198
+
199
+ ```
200
+ integration-test parallel implementation complete
201
+
202
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
203
+ Targets: {targets}
204
+
205
+ Generated files:
206
+ {file_list}
207
+
208
+ Test results:
209
+ {test_summary}
210
+
211
+ Quality gate:
212
+ {quality_gate_results}
213
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
214
+ ```
215
+
216
+ ---
217
+
218
+ ## References
219
+
220
+ | Document | Purpose |
221
+ |------------|------|
222
+ | [quality-gate.md](references/quality-gate.md) | Pentagon's judgment criteria |
223
+ | [test-case-design.md](references/test-case-design.md) | 5 test case classifications |
224
+ | [test-patterns.md](references/test-patterns.md) | Test implementation patterns |
225
+ | [fixture-catalog.md](references/fixture-catalog.md) | Shared helpers and fixture catalog |
226
+ | [external-api-mock.md](references/external-api-mock.md) | External API mock patterns |
227
+ | [worker-prompt.md](references/worker-prompt.md) | Worker prompt template |
228
+ | [auditor-prompt.md](references/auditor-prompt.md) | Pentagon prompt template |
229
+ | [whiteboard-template.md](references/whiteboard-template.md) | Whiteboard template |
230
+ | [parallel-execution.md](references/parallel-execution.md) | Parallel execution flow details |
@@ -0,0 +1,78 @@
1
+ # Pentagon プロンプトテンプレート
2
+
3
+ Pentagon(Reviewer)起動時に展開するプロンプト。
4
+ `{変数}` は Command が起動時に埋め込む。
5
+
6
+ ---
7
+
8
+ ```
9
+ あなたは integration-test の品質レビュアー「Pentagon」です。
10
+
11
+ ## 役割
12
+ Worker が作成したインテグレーションテストの品質を判定する。
13
+ 判定基準は references/quality-gate.md に従う。
14
+
15
+ ## 事前読み込み
16
+ 以下のファイルを起動時に Read する:
17
+ 1. references/quality-gate.md(判定基準)
18
+ 2. references/test-case-design.md(5 分類体系)
19
+ 3. {whiteboard_path}(ホワイトボード)
20
+
21
+ ## レビュー依頼の受信
22
+
23
+ Command からレビュー依頼を受け取ったら以下の手順で審査する:
24
+
25
+ ### 1. テストファイルを Read
26
+ 対象のテストファイルと、関連する本番コード(handler, repository, model, dto)を Read する。
27
+
28
+ ### 2. 判定基準に従いチェック
29
+
30
+ A. 5 分類カバレッジ
31
+ - 各エンドポイントに対して 5 分類が網羅されているか
32
+ - test-case-design.md の必須テストケースが含まれているか
33
+
34
+ B. 振る舞い契約の検証
35
+ - HTTP ステータスコード、レスポンスボディ、DB 状態変更が検証されているか
36
+
37
+ C. コード品質
38
+ - Given-When-Then 構造、命名、独立性
39
+
40
+ D. Hermetic & Deterministic
41
+ - testcontainers or トランザクション分離、trait DI、時刻制御
42
+
43
+ E. Rust 固有
44
+ - #[tokio::test]、clippy、rustfmt
45
+
46
+ ### 3. 判定結果を報告
47
+
48
+ 以下のフォーマットで報告する:
49
+
50
+ ```
51
+ [Pentagon Review] {test_file}
52
+
53
+ 判定: PASS / FAIL
54
+
55
+ A. 5分類カバレッジ: PASS / FAIL
56
+ {詳細}
57
+
58
+ B. 振る舞い契約: PASS / FAIL
59
+ {詳細}
60
+
61
+ C. コード品質: PASS / FAIL
62
+ {詳細}
63
+
64
+ D. Hermetic: PASS / FAIL
65
+ {詳細}
66
+
67
+ E. Rust 固有: PASS / FAIL
68
+ {詳細}
69
+
70
+ 修正指示:(FAIL の場合のみ)
71
+ 1. {具体的な修正内容}
72
+ ```
73
+
74
+ ## レビューサイクル
75
+ - 最大 3 回のレビューサイクル
76
+ - 3 回目で FAIL の場合は残存指摘付きで完了扱いとし、Command に報告する
77
+ - PASS の場合はホワイトボードの Quality Gate Results 更新を Command に依頼する
78
+ ```
@@ -0,0 +1,98 @@
1
+ # 外部 API モックパターン
2
+
3
+ trait ベースの DI で外部 API クライアントをテストダブルに差し替えるパターン。
4
+
5
+ ## 推奨パターン: trait DI override
6
+
7
+ ```rust
8
+ // 本番コード: trait 定義
9
+ #[async_trait]
10
+ pub trait PaymentGateway: Send + Sync {
11
+ async fn charge(&self, amount: u64) -> Result<PaymentResult, PaymentError>;
12
+ }
13
+
14
+ // 本番実装
15
+ pub struct StripeGateway { /* ... */ }
16
+
17
+ #[async_trait]
18
+ impl PaymentGateway for StripeGateway {
19
+ async fn charge(&self, amount: u64) -> Result<PaymentResult, PaymentError> {
20
+ // 実際の API 呼び出し
21
+ }
22
+ }
23
+ ```
24
+
25
+ ## テスト用テストダブル
26
+
27
+ ### Stub(固定値を返す)
28
+
29
+ ```rust
30
+ pub struct StubPaymentGateway {
31
+ pub result: Result<PaymentResult, PaymentError>,
32
+ }
33
+
34
+ #[async_trait]
35
+ impl PaymentGateway for StubPaymentGateway {
36
+ async fn charge(&self, _amount: u64) -> Result<PaymentResult, PaymentError> {
37
+ self.result.clone()
38
+ }
39
+ }
40
+ ```
41
+
42
+ ### Spy(呼び出し記録 + 固定値)
43
+
44
+ ```rust
45
+ pub struct SpyPaymentGateway {
46
+ pub calls: Arc<Mutex<Vec<u64>>>,
47
+ pub result: Result<PaymentResult, PaymentError>,
48
+ }
49
+
50
+ #[async_trait]
51
+ impl PaymentGateway for SpyPaymentGateway {
52
+ async fn charge(&self, amount: u64) -> Result<PaymentResult, PaymentError> {
53
+ self.calls.lock().unwrap().push(amount);
54
+ self.result.clone()
55
+ }
56
+ }
57
+ ```
58
+
59
+ ### 失敗する外部 API
60
+
61
+ ```rust
62
+ pub struct FailingPaymentGateway;
63
+
64
+ #[async_trait]
65
+ impl PaymentGateway for FailingPaymentGateway {
66
+ async fn charge(&self, _amount: u64) -> Result<PaymentResult, PaymentError> {
67
+ Err(PaymentError::ServiceUnavailable)
68
+ }
69
+ }
70
+ ```
71
+
72
+ ## TestContext への組み込み
73
+
74
+ ```rust
75
+ impl TestContext {
76
+ pub async fn with_failing_external_api() -> Self {
77
+ let (container, url) = create_pg_container().await;
78
+ run_migrations(&url).await;
79
+ let db_pool = create_pool(&url);
80
+
81
+ // 失敗する外部 API を注入
82
+ let state = AppState {
83
+ db_pool: db_pool.clone(),
84
+ payment: Arc::new(FailingPaymentGateway) as Arc<dyn PaymentGateway>,
85
+ // ...
86
+ };
87
+
88
+ let app = routes().with_state(state);
89
+ Self { app, db_pool, _pg_container: container, /* ... */ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ ## 禁止事項
95
+
96
+ - `#[cfg(test)]` で本番コードの振る舞いを変えない
97
+ - mockall で具象型を直接 mock しない → 必ず trait を経由する
98
+ - テスト内で `std::env::set_var` で環境変数を書き換えない(テスト間で干渉する)