@sureshdsk/devflow-mcp 3.0.0 → 3.0.1

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 (504) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +4 -4
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  6. package/.next/standalone/.next/server/app/_global-error/page.js +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  9. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  16. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.rsc +14 -13
  21. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -13
  22. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +5 -4
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/.next/standalone/.next/server/app/api/projects/[id]/route.js +2 -2
  28. package/.next/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/projects/route.js +2 -2
  30. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/approve/route.js +2 -2
  32. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/approve/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/route.js +2 -2
  34. package/.next/standalone/.next/server/app/api/specs/[name]/artifacts/[artifactType]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/specs/[name]/promote/route.js +2 -2
  36. package/.next/standalone/.next/server/app/api/specs/[name]/promote/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/specs/[name]/route.js +2 -2
  38. package/.next/standalone/.next/server/app/api/specs/[name]/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/specs/route.js +2 -2
  40. package/.next/standalone/.next/server/app/api/specs/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/tasks/[id]/route.js +2 -2
  42. package/.next/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/tasks/route.js +2 -2
  44. package/.next/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/index.html +1 -1
  46. package/.next/standalone/.next/server/app/index.rsc +15 -14
  47. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -14
  49. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  50. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +5 -4
  51. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  53. package/.next/standalone/.next/server/app/page.js +2 -2
  54. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/specs/[name]/page/build-manifest.json +2 -2
  57. package/.next/standalone/.next/server/app/specs/[name]/page.js +2 -2
  58. package/.next/standalone/.next/server/app/specs/[name]/page.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/specs/[name]/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0be0eb8b._.js +3 -0
  61. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a9d478ee._.js → [root-of-the-server]__160c54ca._.js} +2 -2
  62. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17ac51e3._.js +3 -0
  63. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bb083e9._.js +3 -0
  64. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1dc1e944._.js +3 -0
  65. package/.next/standalone/.next/server/chunks/[root-of-the-server]__22ecfa2c._.js +3 -0
  66. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__13a93eb6._.js → [root-of-the-server]__64710c0d._.js} +2 -2
  67. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a2b7e5f2._.js +3 -0
  68. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf302bda._.js +3 -0
  69. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d85482cd._.js +3 -0
  70. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dfa21757._.js +3 -0
  71. package/.next/standalone/.next/server/chunks/_3f452afe._.js +2 -2
  72. package/.next/standalone/.next/server/chunks/src_db_index_ts_a71f50f0._.js +3 -0
  73. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__023e2c69._.js +3 -0
  74. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0a1a1435._.js +3 -0
  75. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0c49a387._.js +3 -0
  76. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1be1fc5f._.js +3 -0
  77. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3a2f2efb._.js +3 -0
  78. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4693399c._.js +3 -0
  79. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__937c9212._.js → [root-of-the-server]__72a14301._.js} +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8064ca06._.js +3 -0
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8b786d48._.js +3 -0
  82. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8c052461._.js +3 -0
  83. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__8d306066._.js +3 -0
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9532fd59._.js +3 -0
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a119dd75._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__7fb6ef14._.js → [root-of-the-server]__a57b312b._.js} +2 -2
  87. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a80bd0ea._.js +3 -0
  88. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__abe095b3._.js +3 -0
  89. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ad3bd783._.js +3 -0
  90. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1e05fe0e._.js → [root-of-the-server]__ae9f05d6._.js} +2 -2
  91. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__c8781469._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__c8a25070._.js +3 -0
  93. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e8c1e595._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/ssr/_0ff3de19._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/node_modules_01a5cd4b._.js +3 -0
  96. package/.next/standalone/.next/server/chunks/ssr/node_modules_05c6819f._.js +31 -0
  97. package/.next/standalone/.next/server/chunks/ssr/node_modules_06c2c30a._.js +3 -0
  98. package/.next/standalone/.next/server/chunks/ssr/node_modules_09efe605._.js +3 -0
  99. package/.next/standalone/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_ef601841._.js → node_modules_0a439e3b._.js} +2 -2
  100. package/.next/standalone/.next/server/chunks/ssr/{node_modules_3507b41a._.js → node_modules_0e73ad6c._.js} +3 -3
  101. package/.next/standalone/.next/server/chunks/ssr/node_modules_0e7ff06d._.js +3 -0
  102. package/.next/standalone/.next/server/chunks/ssr/node_modules_0f73e25c._.js +3 -0
  103. package/.next/standalone/.next/server/chunks/ssr/node_modules_14cf9cea._.js +3 -0
  104. package/.next/standalone/.next/server/chunks/ssr/node_modules_19801f01._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/ssr/node_modules_2235b8cf._.js +17 -0
  106. package/.next/standalone/.next/server/chunks/ssr/node_modules_23096c6d._.js +3 -0
  107. package/.next/standalone/.next/server/chunks/ssr/node_modules_23db4cf7._.js +17 -0
  108. package/.next/standalone/.next/server/chunks/ssr/node_modules_24381e95._.js +3 -0
  109. package/.next/standalone/.next/server/chunks/ssr/node_modules_24ca0eb6._.js +17 -0
  110. package/.next/standalone/.next/server/chunks/ssr/node_modules_27525793._.js +17 -0
  111. package/.next/standalone/.next/server/chunks/ssr/{node_modules_mermaid_dist_chunks_mermaid_core_4cfa6360._.js → node_modules_27c20382._.js} +2 -2
  112. package/.next/standalone/.next/server/chunks/ssr/node_modules_2c901b92._.js +3 -0
  113. package/.next/standalone/.next/server/chunks/ssr/node_modules_33b818b7._.js +45 -0
  114. package/.next/standalone/.next/server/chunks/ssr/node_modules_345d7791._.js +3 -0
  115. package/.next/standalone/.next/server/chunks/ssr/node_modules_36185c24._.js +45 -0
  116. package/.next/standalone/.next/server/chunks/ssr/node_modules_3ac7ce09._.js +3 -0
  117. package/.next/standalone/.next/server/chunks/ssr/node_modules_41b77cc7._.js +3 -0
  118. package/.next/standalone/.next/server/chunks/ssr/{node_modules_ed317ff6._.js → node_modules_42acd8db._.js} +2 -2
  119. package/.next/standalone/.next/server/chunks/ssr/node_modules_434aa5ec._.js +3 -0
  120. package/.next/standalone/.next/server/chunks/ssr/node_modules_54a9e72d._.js +17 -0
  121. package/.next/standalone/.next/server/chunks/ssr/node_modules_54f1273a._.js +26 -0
  122. package/.next/standalone/.next/server/chunks/ssr/node_modules_58d64491._.js +3 -0
  123. package/.next/standalone/.next/server/chunks/ssr/node_modules_5e012e3d._.js +3 -0
  124. package/.next/standalone/.next/server/chunks/ssr/node_modules_5ea9e4cf._.js +3 -0
  125. package/.next/standalone/.next/server/chunks/ssr/node_modules_5ecf8270._.js +26 -0
  126. package/.next/standalone/.next/server/chunks/ssr/node_modules_611c99b5._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/ssr/{node_modules_d3-scale_src_e02ef77f._.js → node_modules_6629853d._.js} +2 -2
  128. package/.next/standalone/.next/server/chunks/ssr/node_modules_6fe2661c._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/ssr/node_modules_7fe65a84._.js +3 -0
  130. package/.next/standalone/.next/server/chunks/ssr/node_modules_860f971a._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/ssr/node_modules_882f3743._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/ssr/node_modules_8e047938._.js +3 -0
  133. package/.next/standalone/.next/server/chunks/ssr/node_modules_9268cdc4._.js +3 -0
  134. package/.next/standalone/.next/server/chunks/ssr/node_modules_942541c9._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/ssr/node_modules_9d52c0d6._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/ssr/node_modules_@tanstack_query-core_build_modern_21ece5ea._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/ssr/node_modules_ae6841d2._.js +17 -0
  138. package/.next/standalone/.next/server/chunks/ssr/node_modules_ba280bb0._.js +31 -0
  139. package/.next/standalone/.next/server/chunks/ssr/node_modules_bffdb8ec._.js +3 -0
  140. package/.next/standalone/.next/server/chunks/ssr/node_modules_c00f1821._.js +17 -0
  141. package/.next/standalone/.next/server/chunks/ssr/node_modules_c142ba86._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/node_modules_d1a47cde._.js +17 -0
  143. package/.next/standalone/.next/server/chunks/ssr/node_modules_d9b454fe._.js +3 -0
  144. package/.next/standalone/.next/server/chunks/ssr/node_modules_dbe36b1d._.js +3 -0
  145. package/.next/standalone/.next/server/chunks/ssr/node_modules_ddbe26b7._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/ssr/node_modules_e76b8bf2._.js +3 -0
  147. package/.next/standalone/.next/server/chunks/ssr/node_modules_e945b74d._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/ssr/node_modules_fbd8a2ee._.js +17 -0
  149. package/.next/standalone/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_31d456ba._.js +3 -0
  150. package/.next/standalone/.next/server/chunks/ssr/node_modules_katex_dist_katex_mjs_e1edc676._.js +3 -0
  151. package/.next/standalone/.next/server/chunks/ssr/node_modules_lodash-es_33e24dce._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-QXUST7PY_mjs_159fba97._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-S3R3BYOJ_mjs_dbeeb277._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_mermaid_core_mjs_a11916de._.js +9 -0
  155. package/.next/standalone/.next/server/chunks/ssr/src_66a70595._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/ssr/src_components_kanban-board_tsx_7b875e8e._.js +1 -1
  157. package/.next/standalone/.next/server/middleware-build-manifest.js +2 -2
  158. package/.next/standalone/.next/server/pages/404.html +1 -1
  159. package/.next/standalone/.next/server/pages/500.html +2 -2
  160. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  162. package/.next/standalone/AGENTS.md +13 -7
  163. package/.next/standalone/CONTRIBUTING.md +42 -26
  164. package/.next/standalone/README.md +166 -25
  165. package/.next/standalone/bin/devflow.js +12 -5
  166. package/.next/standalone/bun.lock +78 -24
  167. package/.next/standalone/devflow/project-config.json +4 -0
  168. package/.next/standalone/devflow/schemas/api-first/schema.yaml +39 -0
  169. package/.next/standalone/devflow/schemas/api-first/templates/api-design.md +41 -0
  170. package/.next/standalone/devflow/schemas/api-first/templates/db-design.md +28 -0
  171. package/.next/standalone/devflow/schemas/api-first/templates/final-architecture.md +31 -0
  172. package/.next/standalone/devflow/schemas/api-first/templates/proposal.md +22 -0
  173. package/.next/standalone/devflow/schemas/api-first/templates/tasks.md +16 -0
  174. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/.approvals.json +1 -1
  175. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/.meta.json +1 -1
  176. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/design.md +11 -0
  177. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/proposal.md +3 -0
  178. package/.next/standalone/devflow/specs/autodetect-skill-and-slash-command-installation/tasks.md +34 -2
  179. package/.next/standalone/devflow/specs/precommit/.approvals.json +26 -0
  180. package/.next/standalone/devflow/specs/precommit/.meta.json +7 -0
  181. package/.next/standalone/devflow/specs/precommit/design.md +105 -0
  182. package/.next/standalone/devflow/specs/precommit/proposal.md +43 -0
  183. package/.next/standalone/devflow/specs/precommit/specs.md +89 -0
  184. package/.next/standalone/devflow/specs/precommit/tasks.md +283 -0
  185. package/.next/standalone/docs/custom-schemas.md +117 -0
  186. package/.next/standalone/docs/local-dev-guide.md +73 -0
  187. package/.next/standalone/drizzle.config.ts +7 -7
  188. package/.next/standalone/eslint.config.mjs +2 -2
  189. package/.next/standalone/instrumentation.ts +3 -5
  190. package/.next/standalone/next.config.ts +11 -2
  191. package/.next/standalone/node_modules/{sharp → libsql}/node_modules/detect-libc/package.json +4 -8
  192. package/.next/standalone/package-lock.json +5257 -2085
  193. package/.next/standalone/package.json +16 -7
  194. package/.next/standalone/postcss.config.mjs +1 -1
  195. package/.next/standalone/scripts/init-db.js +3 -5
  196. package/.next/standalone/scripts/init-db.test.js +6 -6
  197. package/.next/standalone/scripts/init-schema.js +22 -22
  198. package/.next/standalone/scripts/init-schema.test.js +45 -45
  199. package/.next/standalone/scripts/install-environments.js +27 -8
  200. package/.next/standalone/scripts/install-environments.test.js +19 -10
  201. package/.next/standalone/scripts/install-skills.js +104 -31
  202. package/.next/standalone/scripts/install-skills.test.js +6 -6
  203. package/.next/standalone/server.js +1 -1
  204. package/.next/standalone/src/app/api/agents/route.ts +2 -2
  205. package/.next/standalone/src/app/api/projects/[id]/route.ts +10 -19
  206. package/.next/standalone/src/app/api/projects/route.ts +4 -10
  207. package/.next/standalone/src/app/api/specs/[name]/artifacts/[artifactType]/approve/route.ts +8 -8
  208. package/.next/standalone/src/app/api/specs/[name]/artifacts/[artifactType]/route.ts +14 -14
  209. package/.next/standalone/src/app/api/specs/[name]/promote/route.ts +17 -23
  210. package/.next/standalone/src/app/api/specs/[name]/route.ts +34 -36
  211. package/.next/standalone/src/app/api/specs/route.ts +10 -10
  212. package/.next/standalone/src/app/api/tasks/[id]/route.ts +11 -33
  213. package/.next/standalone/src/app/api/tasks/route.ts +3 -6
  214. package/.next/standalone/src/app/globals.css +3 -3
  215. package/.next/standalone/src/app/layout.tsx +9 -5
  216. package/.next/standalone/src/app/page.tsx +1 -1
  217. package/.next/standalone/src/app/specs/[name]/page.tsx +26 -68
  218. package/.next/standalone/src/components/kanban-board.tsx +78 -157
  219. package/.next/standalone/src/components/kanban-column.tsx +10 -12
  220. package/.next/standalone/src/components/markdown-preview.tsx +36 -19
  221. package/.next/standalone/src/components/providers.tsx +20 -0
  222. package/.next/standalone/src/components/specs/artifact-dag-status.tsx +12 -14
  223. package/.next/standalone/src/components/specs/artifact-editor.tsx +55 -26
  224. package/.next/standalone/src/components/specs/spec-detail.tsx +48 -40
  225. package/.next/standalone/src/components/specs/spec-kanban-column.tsx +49 -68
  226. package/.next/standalone/src/components/specs/spec-modal.tsx +119 -83
  227. package/.next/standalone/src/components/task-card.tsx +34 -38
  228. package/.next/standalone/src/components/task-dialog.tsx +16 -31
  229. package/.next/standalone/src/components/ui/badge.tsx +12 -18
  230. package/.next/standalone/src/components/ui/button.tsx +23 -28
  231. package/.next/standalone/src/components/ui/card.tsx +42 -62
  232. package/.next/standalone/src/components/ui/dialog.tsx +17 -35
  233. package/.next/standalone/src/db/index.ts +10 -10
  234. package/.next/standalone/src/db/schema.ts +37 -37
  235. package/.next/standalone/src/hooks/use-queries.ts +81 -0
  236. package/.next/standalone/src/hooks/use-websocket.ts +74 -0
  237. package/.next/standalone/src/lib/schema.test.ts +37 -37
  238. package/.next/standalone/src/lib/schema.ts +77 -31
  239. package/.next/standalone/src/lib/specs-dir.ts +8 -8
  240. package/.next/standalone/src/lib/specs.ts +98 -92
  241. package/.next/standalone/src/lib/utils.ts +2 -2
  242. package/.next/standalone/src/mcp/server.ts +556 -349
  243. package/.next/standalone/src/mcp/websocket.ts +26 -23
  244. package/.next/standalone/src/schemas/backend-api/templates/proposal.md +6 -4
  245. package/.next/standalone/src/schemas/backend-api/templates/tasks.md +6 -0
  246. package/.next/standalone/src/schemas/data-engineering/templates/proposal.md +6 -4
  247. package/.next/standalone/src/schemas/data-engineering/templates/tasks.md +6 -0
  248. package/.next/standalone/src/schemas/devops-platform/templates/proposal.md +6 -4
  249. package/.next/standalone/src/schemas/devops-platform/templates/tasks.md +6 -0
  250. package/.next/standalone/src/schemas/frontend-product/templates/proposal.md +6 -4
  251. package/.next/standalone/src/schemas/frontend-product/templates/tasks.md +6 -0
  252. package/.next/standalone/src/schemas/spec-driven/templates/proposal.md +6 -4
  253. package/.next/standalone/src/schemas/spec-driven/templates/tasks.md +26 -0
  254. package/.next/standalone/src/websocket/server.ts +20 -18
  255. package/.next/standalone/tsconfig.json +3 -12
  256. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  257. package/.next/static/chunks/4f23f64d46848f57.js +1 -0
  258. package/.next/static/chunks/53081dcdcad4f31e.js +1 -0
  259. package/.next/static/chunks/{6a3d582315f1c214.js → 701cfcbb41e0ab47.js} +1 -1
  260. package/.next/static/chunks/ac4b6b4d5b7e486e.css +1 -0
  261. package/.next/static/chunks/d0309ea872db5d9f.js +1 -0
  262. package/.next/static/chunks/d4cf8893a018e965.js +1 -0
  263. package/.next/static/chunks/e6c0233269a4bd69.js +13 -0
  264. package/.next/static/chunks/{7e65cfa9841f66a5.js → e7d83ce855afe416.js} +2 -2
  265. package/.next/static/chunks/ee7035560fc9e5e9.js +1 -0
  266. package/.next/static/chunks/{turbopack-f4d3806ab575051d.js → turbopack-8b3b66a22a5e0fb4.js} +2 -2
  267. package/README.md +166 -25
  268. package/bin/devflow.js +12 -5
  269. package/drizzle.config.ts +7 -7
  270. package/next.config.ts +11 -2
  271. package/package.json +16 -7
  272. package/scripts/init-db.js +3 -5
  273. package/scripts/init-db.test.js +6 -6
  274. package/scripts/init-schema.js +22 -22
  275. package/scripts/init-schema.test.js +45 -45
  276. package/scripts/install-environments.js +27 -8
  277. package/scripts/install-environments.test.js +19 -10
  278. package/scripts/install-skills.js +104 -31
  279. package/scripts/install-skills.test.js +6 -6
  280. package/src/app/api/agents/route.ts +2 -2
  281. package/src/app/api/projects/[id]/route.ts +10 -19
  282. package/src/app/api/projects/route.ts +4 -10
  283. package/src/app/api/specs/[name]/artifacts/[artifactType]/approve/route.ts +8 -8
  284. package/src/app/api/specs/[name]/artifacts/[artifactType]/route.ts +14 -14
  285. package/src/app/api/specs/[name]/promote/route.ts +17 -23
  286. package/src/app/api/specs/[name]/route.ts +34 -36
  287. package/src/app/api/specs/route.ts +10 -10
  288. package/src/app/api/tasks/[id]/route.ts +11 -33
  289. package/src/app/api/tasks/route.ts +3 -6
  290. package/src/app/globals.css +3 -3
  291. package/src/app/layout.tsx +9 -5
  292. package/src/app/page.tsx +1 -1
  293. package/src/app/specs/[name]/page.tsx +26 -68
  294. package/src/components/kanban-board.tsx +78 -157
  295. package/src/components/kanban-column.tsx +10 -12
  296. package/src/components/markdown-preview.tsx +36 -19
  297. package/src/components/providers.tsx +20 -0
  298. package/src/components/specs/artifact-dag-status.tsx +12 -14
  299. package/src/components/specs/artifact-editor.tsx +55 -26
  300. package/src/components/specs/spec-detail.tsx +48 -40
  301. package/src/components/specs/spec-kanban-column.tsx +49 -68
  302. package/src/components/specs/spec-modal.tsx +119 -83
  303. package/src/components/task-card.tsx +34 -38
  304. package/src/components/task-dialog.tsx +16 -31
  305. package/src/components/ui/badge.tsx +12 -18
  306. package/src/components/ui/button.tsx +23 -28
  307. package/src/components/ui/card.tsx +42 -62
  308. package/src/components/ui/dialog.tsx +17 -35
  309. package/src/db/index.ts +10 -10
  310. package/src/db/schema.ts +37 -37
  311. package/src/hooks/use-queries.ts +81 -0
  312. package/src/hooks/use-websocket.ts +74 -0
  313. package/src/lib/schema.test.ts +37 -37
  314. package/src/lib/schema.ts +77 -31
  315. package/src/lib/specs-dir.ts +8 -8
  316. package/src/lib/specs.ts +98 -92
  317. package/src/lib/utils.ts +2 -2
  318. package/src/mcp/server.ts +556 -349
  319. package/src/mcp/websocket.ts +26 -23
  320. package/src/schemas/backend-api/templates/proposal.md +6 -4
  321. package/src/schemas/backend-api/templates/tasks.md +6 -0
  322. package/src/schemas/data-engineering/templates/proposal.md +6 -4
  323. package/src/schemas/data-engineering/templates/tasks.md +6 -0
  324. package/src/schemas/devops-platform/templates/proposal.md +6 -4
  325. package/src/schemas/devops-platform/templates/tasks.md +6 -0
  326. package/src/schemas/frontend-product/templates/proposal.md +6 -4
  327. package/src/schemas/frontend-product/templates/tasks.md +6 -0
  328. package/src/schemas/spec-driven/templates/proposal.md +6 -4
  329. package/src/schemas/spec-driven/templates/tasks.md +26 -0
  330. package/src/types/bun-sqlite.d.ts +1 -1
  331. package/src/websocket/server.ts +20 -18
  332. package/tsconfig.json +3 -12
  333. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1be4e4b6._.js +0 -3
  334. package/.next/standalone/.next/server/chunks/[root-of-the-server]__492a4a24._.js +0 -3
  335. package/.next/standalone/.next/server/chunks/[root-of-the-server]__67c59ae1._.js +0 -3
  336. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6cc7aecd._.js +0 -3
  337. package/.next/standalone/.next/server/chunks/[root-of-the-server]__83a77b07._.js +0 -3
  338. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88d91cb5._.js +0 -3
  339. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9e095e8._.js +0 -3
  340. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b367d327._.js +0 -3
  341. package/.next/standalone/.next/server/chunks/[root-of-the-server]__eb413bbc._.js +0 -3
  342. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b8c072a._.js +0 -3
  343. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12b2191f._.js +0 -3
  344. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15316462._.js +0 -3
  345. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19c9c409._.js +0 -3
  346. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19e5e22f._.js +0 -3
  347. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__25b5ccb3._.js +0 -3
  348. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2f78c3da._.js +0 -3
  349. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3160b3f4._.js +0 -9
  350. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__319559be._.js +0 -3
  351. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__34f7cbcb._.js +0 -31
  352. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3abab94b._.js +0 -3
  353. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__3b3d8930._.js +0 -3
  354. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4250799b._.js +0 -3
  355. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4c29cbc3._.js +0 -26
  356. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4e0bb6eb._.js +0 -9
  357. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__5678d2e3._.js +0 -3
  358. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__673445e0._.js +0 -31
  359. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__934de06b._.js +0 -3
  360. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9b6c6f09._.js +0 -3
  361. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a1b83a98._.js +0 -3
  362. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b00a15c5._.js +0 -3
  363. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b8567be3._.js +0 -26
  364. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ce64536e._.js +0 -45
  365. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e96d33d2._.js +0 -45
  366. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__fd7ec054._.js +0 -3
  367. package/.next/standalone/.next/server/chunks/ssr/node_modules_16a3f9e7._.js +0 -17
  368. package/.next/standalone/.next/server/chunks/ssr/node_modules_45bce0e1._.js +0 -3
  369. package/.next/standalone/.next/server/chunks/ssr/node_modules_5e5a372d._.js +0 -17
  370. package/.next/standalone/.next/server/chunks/ssr/node_modules_6ece6f1e._.js +0 -3
  371. package/.next/standalone/.next/server/chunks/ssr/node_modules_d173e749._.js +0 -3
  372. package/.next/standalone/.next/server/chunks/ssr/node_modules_d3-shape_src_arc_fb1ac087.js +0 -3
  373. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1f73a830._.js +0 -3
  374. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_663ac803._.js +0 -3
  375. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-FMBD7UC4_mjs_4f485529._.js +0 -17
  376. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-TZMSLE5B_mjs_8436a62a._.js +0 -3
  377. package/.next/standalone/.next/server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_f78d2dc4._.js +0 -3
  378. package/.next/standalone/.next/server/chunks/ssr/src_app_layout_tsx_cc8184fa._.js +0 -3
  379. package/.next/standalone/devflow/specs/add-default-schema-template-selection/.approvals.json +0 -26
  380. package/.next/standalone/devflow/specs/add-default-schema-template-selection/.meta.json +0 -8
  381. package/.next/standalone/devflow/specs/add-default-schema-template-selection/design.md +0 -126
  382. package/.next/standalone/devflow/specs/add-default-schema-template-selection/proposal.md +0 -65
  383. package/.next/standalone/devflow/specs/add-default-schema-template-selection/specs.md +0 -107
  384. package/.next/standalone/devflow/specs/add-default-schema-template-selection/tasks.md +0 -235
  385. package/.next/standalone/devflow/specs/test-no-project/.approvals.json +0 -17
  386. package/.next/standalone/devflow/specs/test-no-project/.meta.json +0 -6
  387. package/.next/standalone/devflow/specs/ui-cleanup/.approvals.json +0 -29
  388. package/.next/standalone/devflow/specs/ui-cleanup/.meta.json +0 -6
  389. package/.next/standalone/devflow/specs/ui-cleanup/design.md +0 -49
  390. package/.next/standalone/devflow/specs/ui-cleanup/proposal.md +0 -34
  391. package/.next/standalone/devflow/specs/ui-cleanup/specs.md +0 -55
  392. package/.next/standalone/devflow/specs/ui-cleanup/tasks.md +0 -28
  393. package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1594
  394. package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
  395. package/.next/standalone/node_modules/@img/colour/package.json +0 -45
  396. package/.next/standalone/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
  397. package/.next/standalone/node_modules/@img/sharp-darwin-arm64/package.json +0 -40
  398. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/README.md +0 -46
  399. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h +0 -220
  400. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/lib/index.js +0 -1
  401. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib +0 -0
  402. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/package.json +0 -36
  403. package/.next/standalone/node_modules/@img/sharp-libvips-darwin-arm64/versions.json +0 -30
  404. package/.next/standalone/node_modules/buffer-from/index.js +0 -72
  405. package/.next/standalone/node_modules/buffer-from/package.json +0 -19
  406. package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
  407. package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
  408. package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
  409. package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
  410. package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
  411. package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
  412. package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
  413. package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
  414. package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
  415. package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
  416. package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
  417. package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
  418. package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
  419. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/detect-libc.js +0 -313
  420. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/elf.js +0 -39
  421. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/filesystem.js +0 -51
  422. package/.next/standalone/node_modules/sharp/node_modules/detect-libc/lib/process.js +0 -24
  423. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
  424. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
  425. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
  426. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
  427. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
  428. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
  429. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
  430. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
  431. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
  432. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
  433. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
  434. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
  435. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
  436. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
  437. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
  438. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
  439. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
  440. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
  441. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
  442. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
  443. package/.next/standalone/node_modules/sharp/node_modules/semver/package.json +0 -78
  444. package/.next/standalone/node_modules/sharp/package.json +0 -202
  445. package/.next/standalone/node_modules/source-map/lib/array-set.js +0 -121
  446. package/.next/standalone/node_modules/source-map/lib/base64-vlq.js +0 -140
  447. package/.next/standalone/node_modules/source-map/lib/base64.js +0 -67
  448. package/.next/standalone/node_modules/source-map/lib/binary-search.js +0 -111
  449. package/.next/standalone/node_modules/source-map/lib/mapping-list.js +0 -79
  450. package/.next/standalone/node_modules/source-map/lib/quick-sort.js +0 -114
  451. package/.next/standalone/node_modules/source-map/lib/source-map-consumer.js +0 -1145
  452. package/.next/standalone/node_modules/source-map/lib/source-map-generator.js +0 -425
  453. package/.next/standalone/node_modules/source-map/lib/source-node.js +0 -413
  454. package/.next/standalone/node_modules/source-map/lib/util.js +0 -488
  455. package/.next/standalone/node_modules/source-map/package.json +0 -73
  456. package/.next/standalone/node_modules/source-map/source-map.js +0 -8
  457. package/.next/standalone/node_modules/source-map-support/LICENSE.md +0 -21
  458. package/.next/standalone/node_modules/source-map-support/README.md +0 -284
  459. package/.next/standalone/node_modules/source-map-support/browser-source-map-support.js +0 -114
  460. package/.next/standalone/node_modules/source-map-support/package.json +0 -31
  461. package/.next/standalone/node_modules/source-map-support/register-hook-require.js +0 -1
  462. package/.next/standalone/node_modules/source-map-support/register.js +0 -1
  463. package/.next/standalone/node_modules/source-map-support/source-map-support.js +0 -625
  464. package/.next/standalone/node_modules/typescript/lib/_tsc.js +0 -133818
  465. package/.next/standalone/node_modules/typescript/lib/_tsserver.js +0 -659
  466. package/.next/standalone/node_modules/typescript/lib/_typingsInstaller.js +0 -222
  467. package/.next/standalone/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
  468. package/.next/standalone/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
  469. package/.next/standalone/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
  470. package/.next/standalone/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
  471. package/.next/standalone/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
  472. package/.next/standalone/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
  473. package/.next/standalone/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
  474. package/.next/standalone/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
  475. package/.next/standalone/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
  476. package/.next/standalone/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
  477. package/.next/standalone/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
  478. package/.next/standalone/node_modules/typescript/lib/tsc.js +0 -8
  479. package/.next/standalone/node_modules/typescript/lib/tsserver.js +0 -8
  480. package/.next/standalone/node_modules/typescript/lib/tsserverlibrary.js +0 -21
  481. package/.next/standalone/node_modules/typescript/lib/typesMap.json +0 -497
  482. package/.next/standalone/node_modules/typescript/lib/typescript.js +0 -200276
  483. package/.next/standalone/node_modules/typescript/lib/typingsInstaller.js +0 -8
  484. package/.next/standalone/node_modules/typescript/lib/watchGuard.js +0 -53
  485. package/.next/standalone/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -2122
  486. package/.next/standalone/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -2122
  487. package/.next/standalone/node_modules/typescript/package.json +0 -120
  488. package/.next/standalone/src/components/ui/collapsible.tsx +0 -12
  489. package/.next/standalone/src/components/ui/sheet.tsx +0 -130
  490. package/.next/standalone/src/components/ui/tabs.tsx +0 -58
  491. package/.next/static/chunks/0177331b8adf7346.js +0 -7
  492. package/.next/static/chunks/06af74e2f3e207c5.js +0 -7
  493. package/.next/static/chunks/1748d5cd2443723b.css +0 -1
  494. package/.next/static/chunks/7ae917cb100be2b9.js +0 -7
  495. package/.next/static/chunks/7c4b901b394c3a8c.js +0 -7
  496. package/src/components/ui/collapsible.tsx +0 -12
  497. package/src/components/ui/sheet.tsx +0 -130
  498. package/src/components/ui/tabs.tsx +0 -58
  499. /package/.next/standalone/node_modules/{detect-libc → libsql/node_modules/detect-libc}/lib/detect-libc.js +0 -0
  500. /package/.next/standalone/node_modules/{detect-libc → libsql/node_modules/detect-libc}/lib/filesystem.js +0 -0
  501. /package/.next/standalone/node_modules/{detect-libc → libsql/node_modules/detect-libc}/lib/process.js +0 -0
  502. /package/.next/static/{5YFrdIQd1UU2IxLxekrU9 → Ql6qo0GYLL23WRu6ec4N5}/_buildManifest.js +0 -0
  503. /package/.next/static/{5YFrdIQd1UU2IxLxekrU9 → Ql6qo0GYLL23WRu6ec4N5}/_clientMiddlewareManifest.json +0 -0
  504. /package/.next/static/{5YFrdIQd1UU2IxLxekrU9 → Ql6qo0GYLL23WRu6ec4N5}/_ssgManifest.js +0 -0
@@ -11,17 +11,20 @@ The design isolates environment-specific logic behind adapters so support can be
11
11
  ### Components
12
12
 
13
13
  1. Installer Orchestrator
14
+
14
15
  - Entry point for install flow.
15
16
  - Coordinates `detect -> resolve targets -> install -> summarize`.
16
17
  - Aggregates per-environment results and exit status.
17
18
 
18
19
  2. Environment Detectors
20
+
19
21
  - `ClaudeCodeDetector`
20
22
  - `CodexDetector`
21
23
  - Each detector determines availability using tool-specific signals (binary presence, expected config directory, or both).
22
24
  - Output is normalized into a common `DetectedEnvironment` model.
23
25
 
24
26
  3. Environment Adapters
27
+
25
28
  - `ClaudeCodeAdapter`
26
29
  - `CodexAdapter`
27
30
  - Each adapter resolves destination paths for:
@@ -30,6 +33,7 @@ The design isolates environment-specific logic behind adapters so support can be
30
33
  - Encapsulates environment-specific path rules and platform handling.
31
34
 
32
35
  4. Asset Installer
36
+
33
37
  - Copies DevFlow-managed assets (skills and commands) into resolved targets.
34
38
  - Uses safe write strategy:
35
39
  - create temp file/dir
@@ -38,6 +42,7 @@ The design isolates environment-specific logic behind adapters so support can be
38
42
  - Tracks installed/updated/skipped operations.
39
43
 
40
44
  5. Summary Reporter
45
+
41
46
  - Emits per-environment outcome with:
42
47
  - detected status
43
48
  - target paths
@@ -65,6 +70,7 @@ The design isolates environment-specific logic behind adapters so support can be
65
70
  No persistent database schema changes are required.
66
71
 
67
72
  In-memory models introduced:
73
+
68
74
  - `DetectedEnvironment`
69
75
  - `id` (`claude-code` | `codex`)
70
76
  - `version?`
@@ -85,6 +91,7 @@ In-memory models introduced:
85
91
  No external network API changes.
86
92
 
87
93
  CLI/installer behavior changes:
94
+
88
95
  - Existing install command performs auto-detection by default.
89
96
  - Optional flags:
90
97
  - `--no-autodetect` to disable environment detection and preserve manual behavior.
@@ -112,12 +119,14 @@ CLI/installer behavior changes:
112
119
  ## Testing Strategy
113
120
 
114
121
  1. Unit tests
122
+
115
123
  - Detector tests for present/absent/malformed signals.
116
124
  - Adapter path resolution tests across OS path variants.
117
125
  - Asset installer idempotency and safe-write tests.
118
126
  - Summary reporter formatting and status mapping tests.
119
127
 
120
128
  2. Integration tests
129
+
121
130
  - Simulated filesystem environments for:
122
131
  - Claude Code only
123
132
  - Codex only
@@ -127,6 +136,7 @@ CLI/installer behavior changes:
127
136
  - Partial failure scenario (one env succeeds, one fails).
128
137
 
129
138
  3. End-to-end installer tests
139
+
130
140
  - Run installer with fixtures and verify:
131
141
  - expected files created/updated
132
142
  - unrelated files unchanged
@@ -134,4 +144,5 @@ CLI/installer behavior changes:
134
144
  - exit code behavior
135
145
 
136
146
  4. Regression coverage
147
+
137
148
  - Existing manual install flows remain functional when autodetect disabled or unavailable.
@@ -9,6 +9,7 @@ DevFlow installation currently requires manual setup steps for AI coding environ
9
9
  Add an installation flow that automatically detects supported AI coding environments (Claude Code and Codex) and installs compatible skills and slash commands without requiring manual environment-specific steps.
10
10
 
11
11
  The installer will:
12
+
12
13
  - Detect which supported tools are present on the host.
13
14
  - Determine install targets and paths for each detected tool.
14
15
  - Install DevFlow skills and slash commands into the detected environment(s).
@@ -18,6 +19,7 @@ The installer will:
18
19
  ## Scope
19
20
 
20
21
  ### In Scope
22
+
21
23
  - Detection logic for Claude Code and Codex presence.
22
24
  - Mapping from detected tool to install locations for skills and slash commands.
23
25
  - Automatic installation of DevFlow-provided skills and slash commands.
@@ -25,6 +27,7 @@ The installer will:
25
27
  - Safe handling for partial support cases (e.g., only one tool detected).
26
28
 
27
29
  ### Out of Scope
30
+
28
31
  - Supporting additional AI coding tools beyond Claude Code and Codex.
29
32
  - Migration of existing user-customized skills/commands.
30
33
  - Cloud-based environment discovery.
@@ -1,6 +1,7 @@
1
1
  # Tasks: Auto-Detect and Install Skills and Slash Commands
2
2
 
3
3
  ## How To Use This File
4
+
4
5
  - Create one task card per meaningful unit of delivery.
5
6
  - Keep tasks dependency-ordered and independently executable where possible.
6
7
  - Every task card must include enough context that a new agent can execute it without re-discovery work.
@@ -9,23 +10,28 @@
9
10
  ## 1. Delivery Overview
10
11
 
11
12
  ### 1.1 Objective
13
+
12
14
  Deliver an installation flow that auto-detects Claude Code and Codex, resolves environment-specific install targets, installs DevFlow skills and slash commands idempotently, and reports clear per-environment outcomes with safe failure behavior.
13
15
 
14
16
  ### 1.2 In-Scope Outcomes
17
+
15
18
  - Automatic detection and install target resolution for Claude Code and Codex.
16
19
  - Automatic installation of DevFlow-managed skills and slash commands for each detected environment.
17
20
  - Clear summary output and robust failure isolation.
18
21
 
19
22
  ### 1.3 Non-Goals
23
+
20
24
  - Support for additional AI coding environments beyond Claude Code and Codex.
21
25
  - Migration tooling for arbitrary user-managed custom skills/commands.
22
26
 
23
27
  ### 1.4 Global Constraints
28
+
24
29
  - Preserve existing manual flow via explicit opt-out/override flags.
25
30
  - Only modify DevFlow-managed files; never modify unrelated user files.
26
31
  - Installer must remain idempotent and safe on repeated runs.
27
32
 
28
33
  ### 1.5 Shared References
34
+
29
35
  - Proposal: `devflow/specs/autodetect-skill-and-slash-command-installation/proposal.md`
30
36
  - Design: `devflow/specs/autodetect-skill-and-slash-command-installation/design.md`
31
37
  - Specs: `devflow/specs/autodetect-skill-and-slash-command-installation/specs.md`
@@ -40,6 +46,7 @@ Deliver an installation flow that auto-detects Claude Code and Codex, resolves e
40
46
  Inspect existing install pipeline, add environment detection contracts and registry, implement Claude Code and Codex detectors, add unit tests for detection scenarios, run tests, then update task summary and check out.
41
47
 
42
48
  ### 2.1 Task: Add environment detection and adapter contracts
49
+
43
50
  - [ ] **Status**
44
51
  - **Task ID:** `T1`
45
52
  - **Owner Type:** `agent`
@@ -53,6 +60,7 @@ Create a shared detector/adapter contract and implement Claude Code and Codex de
53
60
  Detection must be environment-specific but consumed by common orchestration logic. This is foundational for all later tasks.
54
61
 
55
62
  **Scope**
63
+
56
64
  - In scope:
57
65
  - Define `DetectedEnvironment` and adapter interfaces.
58
66
  - Implement `ClaudeCodeDetector` and `CodexDetector`.
@@ -61,6 +69,7 @@ Detection must be environment-specific but consumed by common orchestration logi
61
69
  - Actual file installation writes.
62
70
 
63
71
  **Implementation Targets**
72
+
64
73
  - Files to create/update:
65
74
  - installer detection and adapter modules
66
75
  - shared types/contracts for detection results
@@ -69,11 +78,13 @@ Detection must be environment-specific but consumed by common orchestration logi
69
78
  - environment identifier enum/string union
70
79
 
71
80
  **Execution Steps**
81
+
72
82
  1. Define detector result and environment ID contracts.
73
83
  2. Implement tool-specific detection logic for Claude Code and Codex.
74
84
  3. Add registry wiring and unit tests for detection permutations.
75
85
 
76
86
  **Validation**
87
+
77
88
  - Automated tests to add/update:
78
89
  - detection unit test suite covering present/absent/both/none
79
90
  - Commands to run:
@@ -83,10 +94,12 @@ Detection must be environment-specific but consumed by common orchestration logi
83
94
  - verify detector debug output is understandable in verbose mode
84
95
 
85
96
  **Acceptance Criteria**
97
+
86
98
  - Detection returns correct environment set for all four core scenarios.
87
99
  - Contracts are stable and reusable by orchestration layer.
88
100
 
89
101
  **Risks and Mitigations**
102
+
90
103
  - Risk: false positives from weak detection signals.
91
104
  - Mitigation: require at least one strong signal or multi-signal confirmation per environment.
92
105
 
@@ -94,16 +107,18 @@ Detection must be environment-specific but consumed by common orchestration logi
94
107
  Provide detector contract docs and examples so next task can integrate target resolution without re-discovery.
95
108
 
96
109
  **Task Summary**
110
+
97
111
  - Completed: no
98
112
  - What was done: N/A
99
113
  - Files changed: N/A
100
114
  - Issues encountered: N/A
101
115
  - Follow-ups: N/A
102
- **Execution Plan**
116
+ **Execution Plan**
103
117
 
104
118
  Refactor install-skills to use adapter-resolved targets with safe write semantics, enforce DevFlow-managed ownership checks, isolate failures per environment/asset, and expand tests for no-op re-run and partial failure scenarios before checking out.
105
119
 
106
120
  ### 2.2 Task: Implement install target resolution and idempotent asset installer
121
+
107
122
  - [ ] **Status**
108
123
  - **Task ID:** `T2`
109
124
  - **Owner Type:** `agent`
@@ -117,6 +132,7 @@ Resolve per-environment install paths and implement safe, idempotent installatio
117
132
  Path resolution and write behavior are environment-dependent and must be failure-isolated per environment.
118
133
 
119
134
  **Scope**
135
+
120
136
  - In scope:
121
137
  - Implement `ClaudeCodeAdapter` and `CodexAdapter` path resolution.
122
138
  - Build asset installer with safe writes and ownership checks.
@@ -125,6 +141,7 @@ Path resolution and write behavior are environment-dependent and must be failure
125
141
  - CLI flags and final summary UX polish.
126
142
 
127
143
  **Implementation Targets**
144
+
128
145
  - Files to create/update:
129
146
  - adapter implementations
130
147
  - install/write utility modules
@@ -134,11 +151,13 @@ Path resolution and write behavior are environment-dependent and must be failure
134
151
  - install operation result model
135
152
 
136
153
  **Execution Steps**
154
+
137
155
  1. Implement adapter path resolution for both environments.
138
156
  2. Add idempotent copy/update logic for skills and slash commands.
139
157
  3. Add tests for permission errors, partial failures, and no-op re-run behavior.
140
158
 
141
159
  **Validation**
160
+
142
161
  - Automated tests to add/update:
143
162
  - adapter resolution tests
144
163
  - installer idempotency and failure isolation tests
@@ -149,11 +168,13 @@ Path resolution and write behavior are environment-dependent and must be failure
149
168
  - run installer twice against fixture dirs and confirm second run is no-op
150
169
 
151
170
  **Acceptance Criteria**
171
+
152
172
  - Installer writes expected assets for each resolved environment.
153
173
  - Re-running installer does not duplicate files and only updates changed DevFlow-managed assets.
154
174
  - Failure in one environment does not prevent install in another.
155
175
 
156
176
  **Risks and Mitigations**
177
+
157
178
  - Risk: accidental overwrite of user-managed files.
158
179
  - Mitigation: strict ownership markers and deny-write for unmanaged files.
159
180
 
@@ -161,16 +182,18 @@ Path resolution and write behavior are environment-dependent and must be failure
161
182
  Document adapter path assumptions by OS so CLI integration task can surface helpful diagnostics.
162
183
 
163
184
  **Task Summary**
185
+
164
186
  - Completed: no
165
187
  - What was done: N/A
166
188
  - Files changed: N/A
167
189
  - Issues encountered: N/A
168
190
  - Follow-ups: N/A
169
- **Execution Plan**
191
+ **Execution Plan**
170
192
 
171
193
  Integrate autodetect pipeline into install-skills and devflow CLI, add --no-autodetect/--only/--dry-run flags, include per-environment summary output, add tests for flag behavior and dry-run, update task summary, then check out.
172
194
 
173
195
  ### 2.3 Task: Integrate pipeline into installer CLI and add summary reporting
196
+
174
197
  - [ ] **Status**
175
198
  - **Task ID:** `T3`
176
199
  - **Owner Type:** `agent`
@@ -184,6 +207,7 @@ Connect detect/resolve/install pipeline to the installer command and provide cle
184
207
  This task makes the behavior user-visible and keeps backward compatibility for manual flow via flags.
185
208
 
186
209
  **Scope**
210
+
187
211
  - In scope:
188
212
  - Wire orchestrator into install command.
189
213
  - Add `--no-autodetect`, `--only=<env>`, and `--dry-run` (or equivalent naming per CLI conventions).
@@ -192,6 +216,7 @@ This task makes the behavior user-visible and keeps backward compatibility for m
192
216
  - New environment support beyond Claude Code/Codex.
193
217
 
194
218
  **Implementation Targets**
219
+
195
220
  - Files to create/update:
196
221
  - installer CLI entrypoint and option parsing
197
222
  - orchestrator module
@@ -200,11 +225,13 @@ This task makes the behavior user-visible and keeps backward compatibility for m
200
225
  - install command behavior and flags
201
226
 
202
227
  **Execution Steps**
228
+
203
229
  1. Add orchestration pipeline invocation to install command.
204
230
  2. Implement flags and execution branches (autodetect/default, restricted env, dry-run).
205
231
  3. Add integration/e2e tests for summary output and exit code behavior.
206
232
 
207
233
  **Validation**
234
+
208
235
  - Automated tests to add/update:
209
236
  - CLI integration tests for core scenarios and flags
210
237
  - Commands to run:
@@ -214,11 +241,13 @@ This task makes the behavior user-visible and keeps backward compatibility for m
214
241
  - run installer in fixture setups for Claude-only, Codex-only, both, and none
215
242
 
216
243
  **Acceptance Criteria**
244
+
217
245
  - Default install auto-detects and installs for supported detected environments.
218
246
  - Summary output clearly reports installed/skipped/failed per environment with reasons.
219
247
  - Flags work as documented and preserve manual behavior when requested.
220
248
 
221
249
  **Risks and Mitigations**
250
+
222
251
  - Risk: confusing CLI output in partial-failure cases.
223
252
  - Mitigation: structured per-environment summary with explicit reason and suggested remediation.
224
253
 
@@ -226,6 +255,7 @@ This task makes the behavior user-visible and keeps backward compatibility for m
226
255
  Include before/after CLI output examples in docs for release notes and support.
227
256
 
228
257
  **Task Summary**
258
+
229
259
  - Completed: no
230
260
  - What was done: N/A
231
261
  - Files changed: N/A
@@ -233,12 +263,14 @@ Include before/after CLI output examples in docs for release notes and support.
233
263
  - Follow-ups: N/A
234
264
 
235
265
  ## 3. Cross-Task Verification
266
+
236
267
  - [ ] End-to-end behavior matches `specs.md` requirements and scenarios.
237
268
  - [ ] All affected tests are updated and passing.
238
269
  - [ ] User-facing docs and command help are updated where behavior changed.
239
270
  - [ ] Rollback path is documented for risky changes.
240
271
 
241
272
  ## 4. Completion Gate
273
+
242
274
  - [ ] All task cards are checked complete.
243
275
  - [ ] Spec validation command passes for `autodetect-skill-and-slash-command-installation`.
244
276
  - [ ] Implementation summary and follow-up items are recorded in handoff notes.
@@ -0,0 +1,26 @@
1
+ {
2
+ "version": 1,
3
+ "artifacts": {
4
+ "proposal": {
5
+ "state": "approved",
6
+ "approvedAt": "2026-02-27T12:20:51.946Z",
7
+ "contentHash": "4c009bda20fed6264ed0b3db42790f875c54889b5f64de30f0592402ffb150a1",
8
+ "approvedBy": "human"
9
+ },
10
+ "specs": {
11
+ "state": "approved",
12
+ "approvedAt": "2026-02-27T12:47:30.347Z",
13
+ "contentHash": "daab8a3eb6cdd62994319eb3924ccc4a3c6abba1fe172baf65deb77f0898b673",
14
+ "approvedBy": "human"
15
+ },
16
+ "design": {
17
+ "state": "approved",
18
+ "approvedAt": "2026-02-27T12:47:30.355Z",
19
+ "contentHash": "a99715ba724aebf55aee18340effd33a321c041859d9d50f9d5c313be5b3d882",
20
+ "approvedBy": "human"
21
+ },
22
+ "tasks": {
23
+ "state": "draft"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "precommit",
3
+ "title": "Setup automatic linting formatting on git commit",
4
+ "projectId": "6e86100c-1ce0-4177-abba-f74082db5f05",
5
+ "schema": "spec-driven",
6
+ "createdAt": "2026-02-27T12:13:06.878Z"
7
+ }
@@ -0,0 +1,105 @@
1
+ # Design: Setup automatic linting & formatting on git commit
2
+
3
+ ## Overview
4
+
5
+ Add a pre-commit hook pipeline using husky (v9) and lint-staged (v15) that runs ESLint and Prettier on staged files. No architecture or data model changes — this is purely a developer tooling addition.
6
+
7
+ ## Architecture
8
+
9
+ ```mermaid
10
+ flowchart TD
11
+ A[git commit] --> B[.husky/pre-commit]
12
+ B --> C[npx lint-staged]
13
+ C --> D{File type?}
14
+ D -->|*.ts, *.tsx| E[eslint --fix]
15
+ E --> F[prettier --write]
16
+ D -->|*.js, *.json, *.css, *.md| F
17
+ D -->|other files| G[skip]
18
+ F --> H{Errors?}
19
+ H -->|No| I[Re-stage fixed files]
20
+ I --> J[Commit succeeds]
21
+ H -->|Yes| K[Commit blocked]
22
+ G --> J
23
+ ```
24
+
25
+ All configuration lives in the project root:
26
+
27
+ - `.husky/pre-commit` — shell script that runs `npx lint-staged`
28
+ - `package.json` — `lint-staged` config block and `prepare` script
29
+ - `.prettierrc` — Prettier options
30
+ - `.prettierignore` — files/dirs to skip (node_modules, .next, dist)
31
+
32
+ ## Data Model Changes
33
+
34
+ None.
35
+
36
+ ## API Changes
37
+
38
+ None.
39
+
40
+ ## Implementation Notes
41
+
42
+ ### Package versions
43
+
44
+ - `husky@^9` — uses the simplified `husky init` setup (no `husky install`)
45
+ - `lint-staged@^15` — latest stable
46
+ - `prettier@^3` — latest stable
47
+
48
+ ### package.json changes
49
+
50
+ Add to `scripts`:
51
+
52
+ ```json
53
+ "prepare": "husky"
54
+ ```
55
+
56
+ The existing `postinstall` script is unaffected — `prepare` runs after `install` and before `prepublishOnly`.
57
+
58
+ Add `lint-staged` config block:
59
+
60
+ ```json
61
+ "lint-staged": {
62
+ "*.{ts,tsx}": ["eslint --fix", "prettier --write"],
63
+ "*.{js,json,css,md}": ["prettier --write"]
64
+ }
65
+ ```
66
+
67
+ ### .prettierrc
68
+
69
+ ```json
70
+ {
71
+ "semi": true,
72
+ "singleQuote": true,
73
+ "trailingComma": "all",
74
+ "tabWidth": 2,
75
+ "printWidth": 100
76
+ }
77
+ ```
78
+
79
+ ### .prettierignore
80
+
81
+ ```
82
+ node_modules
83
+ .next
84
+ dist
85
+ drizzle
86
+ ```
87
+
88
+ ### Husky setup
89
+
90
+ Run `npx husky init` which creates `.husky/pre-commit`. Replace its contents with:
91
+
92
+ ```sh
93
+ npx lint-staged
94
+ ```
95
+
96
+ ### Baseline formatting commit
97
+
98
+ After setup, run `npx prettier --write .` across the codebase and commit as a single formatting commit before the hook is active for other developers.
99
+
100
+ ## Testing Strategy
101
+
102
+ - **Manual**: Stage a file with a formatting issue, run `git commit`, verify it gets auto-fixed
103
+ - **Manual**: Stage a file with a non-fixable ESLint error, run `git commit`, verify it's blocked
104
+ - **Manual**: Run `npm install` in a fresh clone, verify `.husky/` hooks are installed
105
+ - **CI**: No changes needed — CI doesn't use git hooks
@@ -0,0 +1,43 @@
1
+ # Proposal: Setup automatic linting & formatting on git commit
2
+
3
+ ## Problem Statement
4
+
5
+ There is no automated code quality gate on commit. Developers (and AI agents) can commit code with lint errors, inconsistent formatting, or type issues. This leads to noisy diffs, broken CI, and wasted review cycles.
6
+
7
+ ## Proposed Solution
8
+
9
+ Add **lint-staged** + **husky** to run ESLint and Prettier automatically on staged files during `git commit`. This ensures every commit passes linting and formatting checks before it lands.
10
+
11
+ - **Husky** — manages the git `pre-commit` hook
12
+ - **lint-staged** — runs linters only on staged files for speed
13
+ - **Prettier** — formats `.ts`, `.tsx`, `.js`, `.json`, `.css`, `.md` files
14
+ - ESLint (already installed) — lints `.ts` and `.tsx` files
15
+
16
+ ## Scope
17
+
18
+ ### In Scope
19
+
20
+ - Install husky, lint-staged, and prettier as devDependencies
21
+ - Configure husky pre-commit hook to run lint-staged
22
+ - Configure lint-staged to run `eslint --fix` on `.ts/.tsx` files and `prettier --write` on all supported files
23
+ - Add a `.prettierrc` with sensible defaults (single quotes, trailing commas, 2-space indent)
24
+ - Add `prepare` script (`husky`) to package.json so hooks install automatically on `npm install`
25
+
26
+ ### Out of Scope
27
+
28
+ - CI pipeline changes
29
+ - Commit message linting (commitlint)
30
+ - Pre-push hooks (e.g. running tests or typecheck)
31
+ - Changing existing ESLint rules
32
+
33
+ ## Success Criteria
34
+
35
+ - Running `git commit` on files with formatting issues auto-fixes them before committing
36
+ - Running `git commit` on files with lint errors blocks the commit with a clear error message
37
+ - Hooks install automatically when a new contributor runs `npm install`
38
+
39
+ ## Risks & Assumptions
40
+
41
+ - **Assumption**: The team is fine with Prettier's opinionated defaults; first commit may touch many files if existing code doesn't match
42
+ - **Risk**: The `postinstall` script already exists — the `prepare` script for husky must coexist without conflict
43
+ - **Mitigation**: Run Prettier on the full codebase in a single formatting commit before enabling the hook, to avoid noisy diffs on subsequent commits
@@ -0,0 +1,89 @@
1
+ # Specifications: Setup automatic linting & formatting on git commit
2
+
3
+ ## Overview
4
+
5
+ This spec defines the requirements for integrating pre-commit hooks that automatically lint and format staged files before each git commit.
6
+
7
+ ### Requirement: Husky Git Hook Installation
8
+
9
+ **SHALL** install husky and configure it to run a pre-commit hook automatically when contributors run `npm install`.
10
+
11
+ #### Scenario: Fresh clone and install
12
+
13
+ **Given** a developer clones the repository for the first time
14
+ **When** they run `npm install`
15
+ **Then** husky installs git hooks into `.husky/` and the pre-commit hook is active
16
+
17
+ #### Scenario: CI environment
18
+
19
+ **Given** the project is installed in a CI environment where `CI=true`
20
+ **When** `npm install` runs
21
+ **Then** husky skips hook installation gracefully (no errors)
22
+
23
+ ### Requirement: Lint-Staged Configuration
24
+
25
+ **SHALL** configure lint-staged to run the appropriate tool on each staged file type.
26
+
27
+ #### Scenario: TypeScript/TSX files staged
28
+
29
+ **Given** a developer stages `.ts` or `.tsx` files
30
+ **When** they run `git commit`
31
+ **Then** lint-staged runs `eslint --fix` followed by `prettier --write` on those files
32
+
33
+ #### Scenario: Non-TypeScript files staged
34
+
35
+ **Given** a developer stages `.json`, `.css`, `.md`, or `.js` files
36
+ **When** they run `git commit`
37
+ **Then** lint-staged runs `prettier --write` on those files
38
+
39
+ #### Scenario: No matching files staged
40
+
41
+ **Given** a developer stages only files not matched by lint-staged (e.g. images, `.gitignore`)
42
+ **When** they run `git commit`
43
+ **Then** the commit proceeds without running any linters
44
+
45
+ ### Requirement: ESLint Auto-Fix on Commit
46
+
47
+ **SHALL** run `eslint --fix` on staged TypeScript files to auto-fix resolvable issues.
48
+
49
+ #### Scenario: Auto-fixable lint error
50
+
51
+ **Given** a staged `.ts` file has an auto-fixable ESLint error (e.g. unused import)
52
+ **When** the pre-commit hook runs
53
+ **Then** ESLint fixes the issue, the fixed file is re-staged, and the commit succeeds
54
+
55
+ #### Scenario: Non-fixable lint error
56
+
57
+ **Given** a staged `.ts` file has a lint error that cannot be auto-fixed
58
+ **When** the pre-commit hook runs
59
+ **Then** the commit is blocked and the error is printed to the terminal
60
+
61
+ ### Requirement: Prettier Formatting on Commit
62
+
63
+ **SHALL** run `prettier --write` on staged files to enforce consistent formatting.
64
+
65
+ #### Scenario: Unformatted file
66
+
67
+ **Given** a staged file has inconsistent formatting (wrong indentation, missing trailing comma)
68
+ **When** the pre-commit hook runs
69
+ **Then** Prettier reformats the file, the formatted file is re-staged, and the commit succeeds
70
+
71
+ ### Requirement: Prettier Configuration
72
+
73
+ **SHALL** provide a `.prettierrc` configuration file with project defaults.
74
+
75
+ #### Scenario: Prettier config is respected
76
+
77
+ **Given** a `.prettierrc` file exists in the project root
78
+ **When** Prettier runs on any file
79
+ **Then** it uses the settings from `.prettierrc` (single quotes, trailing commas, 2-space indent, 100 char print width)
80
+
81
+ ### Requirement: Baseline Formatting Commit
82
+
83
+ **SHALL** run Prettier on the entire codebase in a single commit before enabling the hook, to avoid noisy diffs in subsequent commits.
84
+
85
+ #### Scenario: Initial formatting pass
86
+
87
+ **Given** the pre-commit hook setup is complete
88
+ **When** Prettier is run across the full codebase
89
+ **Then** all supported files are formatted and committed in a single "chore: format codebase" commit