@zigrivers/scaffold 2.1.0

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 (657) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/commands/adopt.d.ts +12 -0
  4. package/dist/cli/commands/adopt.d.ts.map +1 -0
  5. package/dist/cli/commands/adopt.js +107 -0
  6. package/dist/cli/commands/adopt.js.map +1 -0
  7. package/dist/cli/commands/adopt.test.d.ts +2 -0
  8. package/dist/cli/commands/adopt.test.d.ts.map +1 -0
  9. package/dist/cli/commands/adopt.test.js +277 -0
  10. package/dist/cli/commands/adopt.test.js.map +1 -0
  11. package/dist/cli/commands/build.d.ts +12 -0
  12. package/dist/cli/commands/build.d.ts.map +1 -0
  13. package/dist/cli/commands/build.js +105 -0
  14. package/dist/cli/commands/build.js.map +1 -0
  15. package/dist/cli/commands/build.test.d.ts +2 -0
  16. package/dist/cli/commands/build.test.d.ts.map +1 -0
  17. package/dist/cli/commands/build.test.js +272 -0
  18. package/dist/cli/commands/build.test.js.map +1 -0
  19. package/dist/cli/commands/dashboard.d.ts +14 -0
  20. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  21. package/dist/cli/commands/dashboard.js +102 -0
  22. package/dist/cli/commands/dashboard.js.map +1 -0
  23. package/dist/cli/commands/dashboard.test.d.ts +2 -0
  24. package/dist/cli/commands/dashboard.test.d.ts.map +1 -0
  25. package/dist/cli/commands/dashboard.test.js +142 -0
  26. package/dist/cli/commands/dashboard.test.js.map +1 -0
  27. package/dist/cli/commands/decisions.d.ts +13 -0
  28. package/dist/cli/commands/decisions.d.ts.map +1 -0
  29. package/dist/cli/commands/decisions.js +62 -0
  30. package/dist/cli/commands/decisions.js.map +1 -0
  31. package/dist/cli/commands/decisions.test.d.ts +2 -0
  32. package/dist/cli/commands/decisions.test.d.ts.map +1 -0
  33. package/dist/cli/commands/decisions.test.js +154 -0
  34. package/dist/cli/commands/decisions.test.js.map +1 -0
  35. package/dist/cli/commands/info.d.ts +12 -0
  36. package/dist/cli/commands/info.d.ts.map +1 -0
  37. package/dist/cli/commands/info.js +110 -0
  38. package/dist/cli/commands/info.js.map +1 -0
  39. package/dist/cli/commands/info.test.d.ts +2 -0
  40. package/dist/cli/commands/info.test.d.ts.map +1 -0
  41. package/dist/cli/commands/info.test.js +392 -0
  42. package/dist/cli/commands/info.test.js.map +1 -0
  43. package/dist/cli/commands/init.d.ts +13 -0
  44. package/dist/cli/commands/init.d.ts.map +1 -0
  45. package/dist/cli/commands/init.js +46 -0
  46. package/dist/cli/commands/init.js.map +1 -0
  47. package/dist/cli/commands/init.test.d.ts +2 -0
  48. package/dist/cli/commands/init.test.d.ts.map +1 -0
  49. package/dist/cli/commands/init.test.js +156 -0
  50. package/dist/cli/commands/init.test.js.map +1 -0
  51. package/dist/cli/commands/knowledge.d.ts +4 -0
  52. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  53. package/dist/cli/commands/knowledge.js +346 -0
  54. package/dist/cli/commands/knowledge.js.map +1 -0
  55. package/dist/cli/commands/knowledge.test.d.ts +2 -0
  56. package/dist/cli/commands/knowledge.test.d.ts.map +1 -0
  57. package/dist/cli/commands/knowledge.test.js +293 -0
  58. package/dist/cli/commands/knowledge.test.js.map +1 -0
  59. package/dist/cli/commands/list.d.ts +12 -0
  60. package/dist/cli/commands/list.d.ts.map +1 -0
  61. package/dist/cli/commands/list.js +73 -0
  62. package/dist/cli/commands/list.js.map +1 -0
  63. package/dist/cli/commands/list.test.d.ts +2 -0
  64. package/dist/cli/commands/list.test.d.ts.map +1 -0
  65. package/dist/cli/commands/list.test.js +166 -0
  66. package/dist/cli/commands/list.test.js.map +1 -0
  67. package/dist/cli/commands/next.d.ts +12 -0
  68. package/dist/cli/commands/next.d.ts.map +1 -0
  69. package/dist/cli/commands/next.js +75 -0
  70. package/dist/cli/commands/next.js.map +1 -0
  71. package/dist/cli/commands/next.test.d.ts +2 -0
  72. package/dist/cli/commands/next.test.d.ts.map +1 -0
  73. package/dist/cli/commands/next.test.js +236 -0
  74. package/dist/cli/commands/next.test.js.map +1 -0
  75. package/dist/cli/commands/reset.d.ts +13 -0
  76. package/dist/cli/commands/reset.d.ts.map +1 -0
  77. package/dist/cli/commands/reset.js +105 -0
  78. package/dist/cli/commands/reset.js.map +1 -0
  79. package/dist/cli/commands/reset.test.d.ts +2 -0
  80. package/dist/cli/commands/reset.test.d.ts.map +1 -0
  81. package/dist/cli/commands/reset.test.js +211 -0
  82. package/dist/cli/commands/reset.test.js.map +1 -0
  83. package/dist/cli/commands/run.d.ts +14 -0
  84. package/dist/cli/commands/run.d.ts.map +1 -0
  85. package/dist/cli/commands/run.js +379 -0
  86. package/dist/cli/commands/run.js.map +1 -0
  87. package/dist/cli/commands/run.test.d.ts +2 -0
  88. package/dist/cli/commands/run.test.d.ts.map +1 -0
  89. package/dist/cli/commands/run.test.js +535 -0
  90. package/dist/cli/commands/run.test.js.map +1 -0
  91. package/dist/cli/commands/skip.d.ts +13 -0
  92. package/dist/cli/commands/skip.d.ts.map +1 -0
  93. package/dist/cli/commands/skip.js +123 -0
  94. package/dist/cli/commands/skip.js.map +1 -0
  95. package/dist/cli/commands/skip.test.d.ts +2 -0
  96. package/dist/cli/commands/skip.test.d.ts.map +1 -0
  97. package/dist/cli/commands/skip.test.js +339 -0
  98. package/dist/cli/commands/skip.test.js.map +1 -0
  99. package/dist/cli/commands/status.d.ts +12 -0
  100. package/dist/cli/commands/status.d.ts.map +1 -0
  101. package/dist/cli/commands/status.js +79 -0
  102. package/dist/cli/commands/status.js.map +1 -0
  103. package/dist/cli/commands/status.test.d.ts +2 -0
  104. package/dist/cli/commands/status.test.d.ts.map +1 -0
  105. package/dist/cli/commands/status.test.js +245 -0
  106. package/dist/cli/commands/status.test.js.map +1 -0
  107. package/dist/cli/commands/update.d.ts +11 -0
  108. package/dist/cli/commands/update.d.ts.map +1 -0
  109. package/dist/cli/commands/update.js +159 -0
  110. package/dist/cli/commands/update.js.map +1 -0
  111. package/dist/cli/commands/update.test.d.ts +2 -0
  112. package/dist/cli/commands/update.test.d.ts.map +1 -0
  113. package/dist/cli/commands/update.test.js +140 -0
  114. package/dist/cli/commands/update.test.js.map +1 -0
  115. package/dist/cli/commands/validate.d.ts +12 -0
  116. package/dist/cli/commands/validate.d.ts.map +1 -0
  117. package/dist/cli/commands/validate.js +65 -0
  118. package/dist/cli/commands/validate.js.map +1 -0
  119. package/dist/cli/commands/validate.test.d.ts +2 -0
  120. package/dist/cli/commands/validate.test.d.ts.map +1 -0
  121. package/dist/cli/commands/validate.test.js +159 -0
  122. package/dist/cli/commands/validate.test.js.map +1 -0
  123. package/dist/cli/commands/version.d.ts +13 -0
  124. package/dist/cli/commands/version.d.ts.map +1 -0
  125. package/dist/cli/commands/version.js +89 -0
  126. package/dist/cli/commands/version.js.map +1 -0
  127. package/dist/cli/commands/version.test.d.ts +2 -0
  128. package/dist/cli/commands/version.test.d.ts.map +1 -0
  129. package/dist/cli/commands/version.test.js +63 -0
  130. package/dist/cli/commands/version.test.js.map +1 -0
  131. package/dist/cli/index.d.ts +4 -0
  132. package/dist/cli/index.d.ts.map +1 -0
  133. package/dist/cli/index.js +72 -0
  134. package/dist/cli/index.js.map +1 -0
  135. package/dist/cli/index.test.d.ts +2 -0
  136. package/dist/cli/index.test.d.ts.map +1 -0
  137. package/dist/cli/index.test.js +8 -0
  138. package/dist/cli/index.test.js.map +1 -0
  139. package/dist/cli/middleware/output-mode.d.ts +21 -0
  140. package/dist/cli/middleware/output-mode.d.ts.map +1 -0
  141. package/dist/cli/middleware/output-mode.js +27 -0
  142. package/dist/cli/middleware/output-mode.js.map +1 -0
  143. package/dist/cli/middleware/output-mode.test.d.ts +2 -0
  144. package/dist/cli/middleware/output-mode.test.d.ts.map +1 -0
  145. package/dist/cli/middleware/output-mode.test.js +41 -0
  146. package/dist/cli/middleware/output-mode.test.js.map +1 -0
  147. package/dist/cli/middleware/project-root.d.ts +21 -0
  148. package/dist/cli/middleware/project-root.d.ts.map +1 -0
  149. package/dist/cli/middleware/project-root.js +54 -0
  150. package/dist/cli/middleware/project-root.js.map +1 -0
  151. package/dist/cli/middleware/project-root.test.d.ts +2 -0
  152. package/dist/cli/middleware/project-root.test.d.ts.map +1 -0
  153. package/dist/cli/middleware/project-root.test.js +112 -0
  154. package/dist/cli/middleware/project-root.test.js.map +1 -0
  155. package/dist/cli/output/auto.d.ts +18 -0
  156. package/dist/cli/output/auto.d.ts.map +1 -0
  157. package/dist/cli/output/auto.js +43 -0
  158. package/dist/cli/output/auto.js.map +1 -0
  159. package/dist/cli/output/context.d.ts +19 -0
  160. package/dist/cli/output/context.d.ts.map +1 -0
  161. package/dist/cli/output/context.js +15 -0
  162. package/dist/cli/output/context.js.map +1 -0
  163. package/dist/cli/output/context.test.d.ts +2 -0
  164. package/dist/cli/output/context.test.d.ts.map +1 -0
  165. package/dist/cli/output/context.test.js +335 -0
  166. package/dist/cli/output/context.test.js.map +1 -0
  167. package/dist/cli/output/error-display.d.ts +31 -0
  168. package/dist/cli/output/error-display.d.ts.map +1 -0
  169. package/dist/cli/output/error-display.js +79 -0
  170. package/dist/cli/output/error-display.js.map +1 -0
  171. package/dist/cli/output/error-display.test.d.ts +2 -0
  172. package/dist/cli/output/error-display.test.d.ts.map +1 -0
  173. package/dist/cli/output/error-display.test.js +230 -0
  174. package/dist/cli/output/error-display.test.js.map +1 -0
  175. package/dist/cli/output/interactive.d.ts +22 -0
  176. package/dist/cli/output/interactive.d.ts.map +1 -0
  177. package/dist/cli/output/interactive.js +126 -0
  178. package/dist/cli/output/interactive.js.map +1 -0
  179. package/dist/cli/output/json.d.ts +17 -0
  180. package/dist/cli/output/json.d.ts.map +1 -0
  181. package/dist/cli/output/json.js +62 -0
  182. package/dist/cli/output/json.js.map +1 -0
  183. package/dist/cli/types.d.ts +11 -0
  184. package/dist/cli/types.d.ts.map +1 -0
  185. package/dist/cli/types.js +2 -0
  186. package/dist/cli/types.js.map +1 -0
  187. package/dist/config/loader.d.ts +22 -0
  188. package/dist/config/loader.d.ts.map +1 -0
  189. package/dist/config/loader.js +159 -0
  190. package/dist/config/loader.js.map +1 -0
  191. package/dist/config/loader.test.d.ts +2 -0
  192. package/dist/config/loader.test.d.ts.map +1 -0
  193. package/dist/config/loader.test.js +226 -0
  194. package/dist/config/loader.test.js.map +1 -0
  195. package/dist/config/migration.d.ts +15 -0
  196. package/dist/config/migration.d.ts.map +1 -0
  197. package/dist/config/migration.js +39 -0
  198. package/dist/config/migration.js.map +1 -0
  199. package/dist/config/migration.test.d.ts +2 -0
  200. package/dist/config/migration.test.d.ts.map +1 -0
  201. package/dist/config/migration.test.js +44 -0
  202. package/dist/config/migration.test.js.map +1 -0
  203. package/dist/config/schema.d.ts +121 -0
  204. package/dist/config/schema.d.ts.map +1 -0
  205. package/dist/config/schema.js +22 -0
  206. package/dist/config/schema.js.map +1 -0
  207. package/dist/config/schema.test.d.ts +2 -0
  208. package/dist/config/schema.test.d.ts.map +1 -0
  209. package/dist/config/schema.test.js +126 -0
  210. package/dist/config/schema.test.js.map +1 -0
  211. package/dist/core/adapters/adapter.d.ts +64 -0
  212. package/dist/core/adapters/adapter.d.ts.map +1 -0
  213. package/dist/core/adapters/adapter.js +25 -0
  214. package/dist/core/adapters/adapter.js.map +1 -0
  215. package/dist/core/adapters/adapter.test.d.ts +2 -0
  216. package/dist/core/adapters/adapter.test.d.ts.map +1 -0
  217. package/dist/core/adapters/adapter.test.js +175 -0
  218. package/dist/core/adapters/adapter.test.js.map +1 -0
  219. package/dist/core/adapters/claude-code.d.ts +9 -0
  220. package/dist/core/adapters/claude-code.d.ts.map +1 -0
  221. package/dist/core/adapters/claude-code.js +34 -0
  222. package/dist/core/adapters/claude-code.js.map +1 -0
  223. package/dist/core/adapters/claude-code.test.d.ts +2 -0
  224. package/dist/core/adapters/claude-code.test.d.ts.map +1 -0
  225. package/dist/core/adapters/claude-code.test.js +100 -0
  226. package/dist/core/adapters/claude-code.test.js.map +1 -0
  227. package/dist/core/adapters/codex.d.ts +10 -0
  228. package/dist/core/adapters/codex.d.ts.map +1 -0
  229. package/dist/core/adapters/codex.js +61 -0
  230. package/dist/core/adapters/codex.js.map +1 -0
  231. package/dist/core/adapters/codex.test.d.ts +2 -0
  232. package/dist/core/adapters/codex.test.d.ts.map +1 -0
  233. package/dist/core/adapters/codex.test.js +122 -0
  234. package/dist/core/adapters/codex.test.js.map +1 -0
  235. package/dist/core/adapters/universal.d.ts +10 -0
  236. package/dist/core/adapters/universal.d.ts.map +1 -0
  237. package/dist/core/adapters/universal.js +45 -0
  238. package/dist/core/adapters/universal.js.map +1 -0
  239. package/dist/core/adapters/universal.test.d.ts +2 -0
  240. package/dist/core/adapters/universal.test.d.ts.map +1 -0
  241. package/dist/core/adapters/universal.test.js +121 -0
  242. package/dist/core/adapters/universal.test.js.map +1 -0
  243. package/dist/core/assembly/context-gatherer.d.ts +17 -0
  244. package/dist/core/assembly/context-gatherer.d.ts.map +1 -0
  245. package/dist/core/assembly/context-gatherer.js +49 -0
  246. package/dist/core/assembly/context-gatherer.js.map +1 -0
  247. package/dist/core/assembly/context-gatherer.test.d.ts +2 -0
  248. package/dist/core/assembly/context-gatherer.test.d.ts.map +1 -0
  249. package/dist/core/assembly/context-gatherer.test.js +252 -0
  250. package/dist/core/assembly/context-gatherer.test.js.map +1 -0
  251. package/dist/core/assembly/depth-resolver.d.ts +11 -0
  252. package/dist/core/assembly/depth-resolver.d.ts.map +1 -0
  253. package/dist/core/assembly/depth-resolver.js +23 -0
  254. package/dist/core/assembly/depth-resolver.js.map +1 -0
  255. package/dist/core/assembly/depth-resolver.test.d.ts +2 -0
  256. package/dist/core/assembly/depth-resolver.test.d.ts.map +1 -0
  257. package/dist/core/assembly/depth-resolver.test.js +100 -0
  258. package/dist/core/assembly/depth-resolver.test.js.map +1 -0
  259. package/dist/core/assembly/engine.d.ts +22 -0
  260. package/dist/core/assembly/engine.d.ts.map +1 -0
  261. package/dist/core/assembly/engine.js +215 -0
  262. package/dist/core/assembly/engine.js.map +1 -0
  263. package/dist/core/assembly/engine.test.d.ts +2 -0
  264. package/dist/core/assembly/engine.test.d.ts.map +1 -0
  265. package/dist/core/assembly/engine.test.js +462 -0
  266. package/dist/core/assembly/engine.test.js.map +1 -0
  267. package/dist/core/assembly/instruction-loader.d.ts +16 -0
  268. package/dist/core/assembly/instruction-loader.d.ts.map +1 -0
  269. package/dist/core/assembly/instruction-loader.js +40 -0
  270. package/dist/core/assembly/instruction-loader.js.map +1 -0
  271. package/dist/core/assembly/instruction-loader.test.d.ts +2 -0
  272. package/dist/core/assembly/instruction-loader.test.d.ts.map +1 -0
  273. package/dist/core/assembly/instruction-loader.test.js +109 -0
  274. package/dist/core/assembly/instruction-loader.test.js.map +1 -0
  275. package/dist/core/assembly/knowledge-loader.d.ts +34 -0
  276. package/dist/core/assembly/knowledge-loader.d.ts.map +1 -0
  277. package/dist/core/assembly/knowledge-loader.js +204 -0
  278. package/dist/core/assembly/knowledge-loader.js.map +1 -0
  279. package/dist/core/assembly/knowledge-loader.test.d.ts +2 -0
  280. package/dist/core/assembly/knowledge-loader.test.d.ts.map +1 -0
  281. package/dist/core/assembly/knowledge-loader.test.js +205 -0
  282. package/dist/core/assembly/knowledge-loader.test.js.map +1 -0
  283. package/dist/core/assembly/meta-prompt-loader.d.ts +13 -0
  284. package/dist/core/assembly/meta-prompt-loader.d.ts.map +1 -0
  285. package/dist/core/assembly/meta-prompt-loader.js +91 -0
  286. package/dist/core/assembly/meta-prompt-loader.js.map +1 -0
  287. package/dist/core/assembly/meta-prompt-loader.test.d.ts +2 -0
  288. package/dist/core/assembly/meta-prompt-loader.test.d.ts.map +1 -0
  289. package/dist/core/assembly/meta-prompt-loader.test.js +232 -0
  290. package/dist/core/assembly/meta-prompt-loader.test.js.map +1 -0
  291. package/dist/core/assembly/methodology-change.d.ts +27 -0
  292. package/dist/core/assembly/methodology-change.d.ts.map +1 -0
  293. package/dist/core/assembly/methodology-change.js +41 -0
  294. package/dist/core/assembly/methodology-change.js.map +1 -0
  295. package/dist/core/assembly/methodology-change.test.d.ts +2 -0
  296. package/dist/core/assembly/methodology-change.test.d.ts.map +1 -0
  297. package/dist/core/assembly/methodology-change.test.js +145 -0
  298. package/dist/core/assembly/methodology-change.test.js.map +1 -0
  299. package/dist/core/assembly/methodology-resolver.d.ts +11 -0
  300. package/dist/core/assembly/methodology-resolver.d.ts.map +1 -0
  301. package/dist/core/assembly/methodology-resolver.js +19 -0
  302. package/dist/core/assembly/methodology-resolver.js.map +1 -0
  303. package/dist/core/assembly/methodology-resolver.test.d.ts +2 -0
  304. package/dist/core/assembly/methodology-resolver.test.d.ts.map +1 -0
  305. package/dist/core/assembly/methodology-resolver.test.js +87 -0
  306. package/dist/core/assembly/methodology-resolver.test.js.map +1 -0
  307. package/dist/core/assembly/preset-loader.d.ts +26 -0
  308. package/dist/core/assembly/preset-loader.d.ts.map +1 -0
  309. package/dist/core/assembly/preset-loader.js +146 -0
  310. package/dist/core/assembly/preset-loader.js.map +1 -0
  311. package/dist/core/assembly/preset-loader.test.d.ts +2 -0
  312. package/dist/core/assembly/preset-loader.test.d.ts.map +1 -0
  313. package/dist/core/assembly/preset-loader.test.js +107 -0
  314. package/dist/core/assembly/preset-loader.test.js.map +1 -0
  315. package/dist/core/assembly/update-mode.d.ts +25 -0
  316. package/dist/core/assembly/update-mode.d.ts.map +1 -0
  317. package/dist/core/assembly/update-mode.js +70 -0
  318. package/dist/core/assembly/update-mode.js.map +1 -0
  319. package/dist/core/assembly/update-mode.test.d.ts +2 -0
  320. package/dist/core/assembly/update-mode.test.d.ts.map +1 -0
  321. package/dist/core/assembly/update-mode.test.js +235 -0
  322. package/dist/core/assembly/update-mode.test.js.map +1 -0
  323. package/dist/core/dependency/dependency.d.ts +20 -0
  324. package/dist/core/dependency/dependency.d.ts.map +1 -0
  325. package/dist/core/dependency/dependency.js +104 -0
  326. package/dist/core/dependency/dependency.js.map +1 -0
  327. package/dist/core/dependency/dependency.test.d.ts +2 -0
  328. package/dist/core/dependency/dependency.test.d.ts.map +1 -0
  329. package/dist/core/dependency/dependency.test.js +166 -0
  330. package/dist/core/dependency/dependency.test.js.map +1 -0
  331. package/dist/core/dependency/eligibility.d.ts +17 -0
  332. package/dist/core/dependency/eligibility.d.ts.map +1 -0
  333. package/dist/core/dependency/eligibility.js +60 -0
  334. package/dist/core/dependency/eligibility.js.map +1 -0
  335. package/dist/core/dependency/eligibility.test.d.ts +2 -0
  336. package/dist/core/dependency/eligibility.test.d.ts.map +1 -0
  337. package/dist/core/dependency/eligibility.test.js +198 -0
  338. package/dist/core/dependency/eligibility.test.js.map +1 -0
  339. package/dist/core/dependency/graph.d.ts +12 -0
  340. package/dist/core/dependency/graph.d.ts.map +1 -0
  341. package/dist/core/dependency/graph.js +34 -0
  342. package/dist/core/dependency/graph.js.map +1 -0
  343. package/dist/core/knowledge/knowledge-update-assembler.d.ts +24 -0
  344. package/dist/core/knowledge/knowledge-update-assembler.d.ts.map +1 -0
  345. package/dist/core/knowledge/knowledge-update-assembler.js +46 -0
  346. package/dist/core/knowledge/knowledge-update-assembler.js.map +1 -0
  347. package/dist/core/knowledge/knowledge-update-assembler.test.d.ts +2 -0
  348. package/dist/core/knowledge/knowledge-update-assembler.test.d.ts.map +1 -0
  349. package/dist/core/knowledge/knowledge-update-assembler.test.js +93 -0
  350. package/dist/core/knowledge/knowledge-update-assembler.test.js.map +1 -0
  351. package/dist/core/knowledge/knowledge-update-template.md +55 -0
  352. package/dist/dashboard/generator.d.ts +37 -0
  353. package/dist/dashboard/generator.d.ts.map +1 -0
  354. package/dist/dashboard/generator.js +42 -0
  355. package/dist/dashboard/generator.js.map +1 -0
  356. package/dist/dashboard/generator.test.d.ts +2 -0
  357. package/dist/dashboard/generator.test.d.ts.map +1 -0
  358. package/dist/dashboard/generator.test.js +186 -0
  359. package/dist/dashboard/generator.test.js.map +1 -0
  360. package/dist/dashboard/template.d.ts +4 -0
  361. package/dist/dashboard/template.d.ts.map +1 -0
  362. package/dist/dashboard/template.js +190 -0
  363. package/dist/dashboard/template.js.map +1 -0
  364. package/dist/e2e/commands.test.d.ts +9 -0
  365. package/dist/e2e/commands.test.d.ts.map +1 -0
  366. package/dist/e2e/commands.test.js +499 -0
  367. package/dist/e2e/commands.test.js.map +1 -0
  368. package/dist/e2e/init.test.d.ts +10 -0
  369. package/dist/e2e/init.test.d.ts.map +1 -0
  370. package/dist/e2e/init.test.js +180 -0
  371. package/dist/e2e/init.test.js.map +1 -0
  372. package/dist/e2e/knowledge.test.d.ts +2 -0
  373. package/dist/e2e/knowledge.test.d.ts.map +1 -0
  374. package/dist/e2e/knowledge.test.js +103 -0
  375. package/dist/e2e/knowledge.test.js.map +1 -0
  376. package/dist/e2e/pipeline.test.d.ts +8 -0
  377. package/dist/e2e/pipeline.test.d.ts.map +1 -0
  378. package/dist/e2e/pipeline.test.js +295 -0
  379. package/dist/e2e/pipeline.test.js.map +1 -0
  380. package/dist/index.d.ts +3 -0
  381. package/dist/index.d.ts.map +1 -0
  382. package/dist/index.js +7 -0
  383. package/dist/index.js.map +1 -0
  384. package/dist/project/adopt.d.ts +28 -0
  385. package/dist/project/adopt.d.ts.map +1 -0
  386. package/dist/project/adopt.js +49 -0
  387. package/dist/project/adopt.js.map +1 -0
  388. package/dist/project/adopt.test.d.ts +2 -0
  389. package/dist/project/adopt.test.d.ts.map +1 -0
  390. package/dist/project/adopt.test.js +220 -0
  391. package/dist/project/adopt.test.js.map +1 -0
  392. package/dist/project/claude-md.d.ts +33 -0
  393. package/dist/project/claude-md.d.ts.map +1 -0
  394. package/dist/project/claude-md.js +112 -0
  395. package/dist/project/claude-md.js.map +1 -0
  396. package/dist/project/claude-md.test.d.ts +2 -0
  397. package/dist/project/claude-md.test.d.ts.map +1 -0
  398. package/dist/project/claude-md.test.js +151 -0
  399. package/dist/project/claude-md.test.js.map +1 -0
  400. package/dist/project/detector.d.ts +7 -0
  401. package/dist/project/detector.d.ts.map +1 -0
  402. package/dist/project/detector.js +78 -0
  403. package/dist/project/detector.js.map +1 -0
  404. package/dist/project/detector.test.d.ts +2 -0
  405. package/dist/project/detector.test.d.ts.map +1 -0
  406. package/dist/project/detector.test.js +137 -0
  407. package/dist/project/detector.test.js.map +1 -0
  408. package/dist/project/frontmatter.d.ts +17 -0
  409. package/dist/project/frontmatter.d.ts.map +1 -0
  410. package/dist/project/frontmatter.js +236 -0
  411. package/dist/project/frontmatter.js.map +1 -0
  412. package/dist/project/frontmatter.test.d.ts +2 -0
  413. package/dist/project/frontmatter.test.d.ts.map +1 -0
  414. package/dist/project/frontmatter.test.js +218 -0
  415. package/dist/project/frontmatter.test.js.map +1 -0
  416. package/dist/project/signals.d.ts +12 -0
  417. package/dist/project/signals.d.ts.map +1 -0
  418. package/dist/project/signals.js +2 -0
  419. package/dist/project/signals.js.map +1 -0
  420. package/dist/state/completion.d.ts +22 -0
  421. package/dist/state/completion.d.ts.map +1 -0
  422. package/dist/state/completion.js +82 -0
  423. package/dist/state/completion.js.map +1 -0
  424. package/dist/state/completion.test.d.ts +2 -0
  425. package/dist/state/completion.test.d.ts.map +1 -0
  426. package/dist/state/completion.test.js +246 -0
  427. package/dist/state/completion.test.js.map +1 -0
  428. package/dist/state/decision-logger.d.ts +16 -0
  429. package/dist/state/decision-logger.d.ts.map +1 -0
  430. package/dist/state/decision-logger.js +80 -0
  431. package/dist/state/decision-logger.js.map +1 -0
  432. package/dist/state/decision-logger.test.d.ts +2 -0
  433. package/dist/state/decision-logger.test.d.ts.map +1 -0
  434. package/dist/state/decision-logger.test.js +182 -0
  435. package/dist/state/decision-logger.test.js.map +1 -0
  436. package/dist/state/lock-manager.d.ts +18 -0
  437. package/dist/state/lock-manager.d.ts.map +1 -0
  438. package/dist/state/lock-manager.js +134 -0
  439. package/dist/state/lock-manager.js.map +1 -0
  440. package/dist/state/lock-manager.test.d.ts +2 -0
  441. package/dist/state/lock-manager.test.d.ts.map +1 -0
  442. package/dist/state/lock-manager.test.js +190 -0
  443. package/dist/state/lock-manager.test.js.map +1 -0
  444. package/dist/state/state-manager.d.ts +37 -0
  445. package/dist/state/state-manager.d.ts.map +1 -0
  446. package/dist/state/state-manager.js +125 -0
  447. package/dist/state/state-manager.js.map +1 -0
  448. package/dist/state/state-manager.test.d.ts +2 -0
  449. package/dist/state/state-manager.test.d.ts.map +1 -0
  450. package/dist/state/state-manager.test.js +240 -0
  451. package/dist/state/state-manager.test.js.map +1 -0
  452. package/dist/types/adapter.d.ts +24 -0
  453. package/dist/types/adapter.d.ts.map +1 -0
  454. package/dist/types/adapter.js +2 -0
  455. package/dist/types/adapter.js.map +1 -0
  456. package/dist/types/assembly.d.ts +89 -0
  457. package/dist/types/assembly.d.ts.map +1 -0
  458. package/dist/types/assembly.js +2 -0
  459. package/dist/types/assembly.js.map +1 -0
  460. package/dist/types/claude-md.d.ts +11 -0
  461. package/dist/types/claude-md.d.ts.map +1 -0
  462. package/dist/types/claude-md.js +2 -0
  463. package/dist/types/claude-md.js.map +1 -0
  464. package/dist/types/cli.d.ts +15 -0
  465. package/dist/types/cli.d.ts.map +1 -0
  466. package/dist/types/cli.js +2 -0
  467. package/dist/types/cli.js.map +1 -0
  468. package/dist/types/config.d.ts +40 -0
  469. package/dist/types/config.d.ts.map +1 -0
  470. package/dist/types/config.js +2 -0
  471. package/dist/types/config.js.map +1 -0
  472. package/dist/types/decision.d.ts +14 -0
  473. package/dist/types/decision.d.ts.map +1 -0
  474. package/dist/types/decision.js +2 -0
  475. package/dist/types/decision.js.map +1 -0
  476. package/dist/types/dependency.d.ts +12 -0
  477. package/dist/types/dependency.d.ts.map +1 -0
  478. package/dist/types/dependency.js +2 -0
  479. package/dist/types/dependency.js.map +1 -0
  480. package/dist/types/enums.d.ts +23 -0
  481. package/dist/types/enums.d.ts.map +1 -0
  482. package/dist/types/enums.js +11 -0
  483. package/dist/types/enums.js.map +1 -0
  484. package/dist/types/enums.test.d.ts +2 -0
  485. package/dist/types/enums.test.d.ts.map +1 -0
  486. package/dist/types/enums.test.js +13 -0
  487. package/dist/types/enums.test.js.map +1 -0
  488. package/dist/types/errors.d.ts +24 -0
  489. package/dist/types/errors.d.ts.map +1 -0
  490. package/dist/types/errors.js +2 -0
  491. package/dist/types/errors.js.map +1 -0
  492. package/dist/types/frontmatter.d.ts +43 -0
  493. package/dist/types/frontmatter.d.ts.map +1 -0
  494. package/dist/types/frontmatter.js +2 -0
  495. package/dist/types/frontmatter.js.map +1 -0
  496. package/dist/types/index.d.ts +14 -0
  497. package/dist/types/index.d.ts.map +1 -0
  498. package/dist/types/index.js +14 -0
  499. package/dist/types/index.js.map +1 -0
  500. package/dist/types/lock.d.ts +10 -0
  501. package/dist/types/lock.d.ts.map +1 -0
  502. package/dist/types/lock.js +2 -0
  503. package/dist/types/lock.js.map +1 -0
  504. package/dist/types/state.d.ts +49 -0
  505. package/dist/types/state.d.ts.map +1 -0
  506. package/dist/types/state.js +2 -0
  507. package/dist/types/state.js.map +1 -0
  508. package/dist/types/wizard.d.ts +14 -0
  509. package/dist/types/wizard.d.ts.map +1 -0
  510. package/dist/types/wizard.js +2 -0
  511. package/dist/types/wizard.js.map +1 -0
  512. package/dist/utils/errors.d.ts +42 -0
  513. package/dist/utils/errors.d.ts.map +1 -0
  514. package/dist/utils/errors.js +232 -0
  515. package/dist/utils/errors.js.map +1 -0
  516. package/dist/utils/errors.test.d.ts +2 -0
  517. package/dist/utils/errors.test.d.ts.map +1 -0
  518. package/dist/utils/errors.test.js +91 -0
  519. package/dist/utils/errors.test.js.map +1 -0
  520. package/dist/utils/fs.d.ts +11 -0
  521. package/dist/utils/fs.d.ts.map +1 -0
  522. package/dist/utils/fs.js +20 -0
  523. package/dist/utils/fs.js.map +1 -0
  524. package/dist/utils/fs.test.d.ts +2 -0
  525. package/dist/utils/fs.test.d.ts.map +1 -0
  526. package/dist/utils/fs.test.js +93 -0
  527. package/dist/utils/fs.test.js.map +1 -0
  528. package/dist/utils/index.d.ts +4 -0
  529. package/dist/utils/index.d.ts.map +1 -0
  530. package/dist/utils/index.js +4 -0
  531. package/dist/utils/index.js.map +1 -0
  532. package/dist/utils/levenshtein.d.ts +11 -0
  533. package/dist/utils/levenshtein.d.ts.map +1 -0
  534. package/dist/utils/levenshtein.js +37 -0
  535. package/dist/utils/levenshtein.js.map +1 -0
  536. package/dist/utils/levenshtein.test.d.ts +2 -0
  537. package/dist/utils/levenshtein.test.d.ts.map +1 -0
  538. package/dist/utils/levenshtein.test.js +34 -0
  539. package/dist/utils/levenshtein.test.js.map +1 -0
  540. package/dist/validation/config-validator.d.ts +10 -0
  541. package/dist/validation/config-validator.d.ts.map +1 -0
  542. package/dist/validation/config-validator.js +11 -0
  543. package/dist/validation/config-validator.js.map +1 -0
  544. package/dist/validation/dependency-validator.d.ts +10 -0
  545. package/dist/validation/dependency-validator.d.ts.map +1 -0
  546. package/dist/validation/dependency-validator.js +34 -0
  547. package/dist/validation/dependency-validator.js.map +1 -0
  548. package/dist/validation/frontmatter-validator.d.ts +12 -0
  549. package/dist/validation/frontmatter-validator.d.ts.map +1 -0
  550. package/dist/validation/frontmatter-validator.js +50 -0
  551. package/dist/validation/frontmatter-validator.js.map +1 -0
  552. package/dist/validation/index.d.ts +19 -0
  553. package/dist/validation/index.d.ts.map +1 -0
  554. package/dist/validation/index.js +64 -0
  555. package/dist/validation/index.js.map +1 -0
  556. package/dist/validation/index.test.d.ts +2 -0
  557. package/dist/validation/index.test.d.ts.map +1 -0
  558. package/dist/validation/index.test.js +241 -0
  559. package/dist/validation/index.test.js.map +1 -0
  560. package/dist/validation/state-validator.d.ts +15 -0
  561. package/dist/validation/state-validator.d.ts.map +1 -0
  562. package/dist/validation/state-validator.js +104 -0
  563. package/dist/validation/state-validator.js.map +1 -0
  564. package/dist/wizard/questions.d.ts +18 -0
  565. package/dist/wizard/questions.d.ts.map +1 -0
  566. package/dist/wizard/questions.js +46 -0
  567. package/dist/wizard/questions.js.map +1 -0
  568. package/dist/wizard/suggestion.d.ts +10 -0
  569. package/dist/wizard/suggestion.d.ts.map +1 -0
  570. package/dist/wizard/suggestion.js +17 -0
  571. package/dist/wizard/suggestion.js.map +1 -0
  572. package/dist/wizard/wizard.d.ts +19 -0
  573. package/dist/wizard/wizard.d.ts.map +1 -0
  574. package/dist/wizard/wizard.js +104 -0
  575. package/dist/wizard/wizard.js.map +1 -0
  576. package/dist/wizard/wizard.test.d.ts +2 -0
  577. package/dist/wizard/wizard.test.d.ts.map +1 -0
  578. package/dist/wizard/wizard.test.js +167 -0
  579. package/dist/wizard/wizard.test.js.map +1 -0
  580. package/knowledge/core/adr-craft.md +281 -0
  581. package/knowledge/core/api-design.md +501 -0
  582. package/knowledge/core/database-design.md +380 -0
  583. package/knowledge/core/domain-modeling.md +317 -0
  584. package/knowledge/core/operations-runbook.md +513 -0
  585. package/knowledge/core/security-review.md +523 -0
  586. package/knowledge/core/system-architecture.md +402 -0
  587. package/knowledge/core/task-decomposition.md +372 -0
  588. package/knowledge/core/testing-strategy.md +409 -0
  589. package/knowledge/core/user-stories.md +337 -0
  590. package/knowledge/core/user-story-innovation.md +171 -0
  591. package/knowledge/core/ux-specification.md +380 -0
  592. package/knowledge/finalization/apply-fixes-and-freeze.md +93 -0
  593. package/knowledge/finalization/developer-onboarding.md +376 -0
  594. package/knowledge/finalization/implementation-playbook.md +404 -0
  595. package/knowledge/product/gap-analysis.md +305 -0
  596. package/knowledge/product/prd-craft.md +324 -0
  597. package/knowledge/product/prd-innovation.md +204 -0
  598. package/knowledge/review/review-adr.md +203 -0
  599. package/knowledge/review/review-api-contracts.md +233 -0
  600. package/knowledge/review/review-database-schema.md +229 -0
  601. package/knowledge/review/review-domain-modeling.md +288 -0
  602. package/knowledge/review/review-implementation-tasks.md +202 -0
  603. package/knowledge/review/review-methodology.md +215 -0
  604. package/knowledge/review/review-operations.md +212 -0
  605. package/knowledge/review/review-prd.md +235 -0
  606. package/knowledge/review/review-security.md +213 -0
  607. package/knowledge/review/review-system-architecture.md +296 -0
  608. package/knowledge/review/review-testing-strategy.md +176 -0
  609. package/knowledge/review/review-user-stories.md +172 -0
  610. package/knowledge/review/review-ux-spec.md +208 -0
  611. package/knowledge/validation/critical-path-analysis.md +203 -0
  612. package/knowledge/validation/cross-phase-consistency.md +181 -0
  613. package/knowledge/validation/decision-completeness.md +218 -0
  614. package/knowledge/validation/dependency-validation.md +233 -0
  615. package/knowledge/validation/implementability-review.md +252 -0
  616. package/knowledge/validation/scope-management.md +223 -0
  617. package/knowledge/validation/traceability.md +198 -0
  618. package/methodology/custom-defaults.yml +43 -0
  619. package/methodology/deep.yml +42 -0
  620. package/methodology/mvp.yml +42 -0
  621. package/package.json +58 -0
  622. package/pipeline/architecture/review-architecture.md +44 -0
  623. package/pipeline/architecture/system-architecture.md +45 -0
  624. package/pipeline/decisions/adrs.md +45 -0
  625. package/pipeline/decisions/review-adrs.md +39 -0
  626. package/pipeline/finalization/apply-fixes-and-freeze.md +39 -0
  627. package/pipeline/finalization/developer-onboarding-guide.md +36 -0
  628. package/pipeline/finalization/implementation-playbook.md +45 -0
  629. package/pipeline/modeling/domain-modeling.md +57 -0
  630. package/pipeline/modeling/review-domain-modeling.md +41 -0
  631. package/pipeline/planning/implementation-tasks.md +57 -0
  632. package/pipeline/planning/review-tasks.md +38 -0
  633. package/pipeline/pre/create-prd.md +45 -0
  634. package/pipeline/pre/innovate-prd.md +47 -0
  635. package/pipeline/pre/innovate-user-stories.md +47 -0
  636. package/pipeline/pre/review-prd.md +44 -0
  637. package/pipeline/pre/review-user-stories.md +43 -0
  638. package/pipeline/pre/user-stories.md +48 -0
  639. package/pipeline/quality/operations.md +42 -0
  640. package/pipeline/quality/review-operations.md +37 -0
  641. package/pipeline/quality/review-security.md +40 -0
  642. package/pipeline/quality/review-testing.md +39 -0
  643. package/pipeline/quality/security.md +44 -0
  644. package/pipeline/quality/testing-strategy.md +42 -0
  645. package/pipeline/specification/api-contracts.md +44 -0
  646. package/pipeline/specification/database-schema.md +41 -0
  647. package/pipeline/specification/review-api.md +40 -0
  648. package/pipeline/specification/review-database.md +39 -0
  649. package/pipeline/specification/review-ux.md +38 -0
  650. package/pipeline/specification/ux-spec.md +43 -0
  651. package/pipeline/validation/critical-path-walkthrough.md +37 -0
  652. package/pipeline/validation/cross-phase-consistency.md +35 -0
  653. package/pipeline/validation/decision-completeness.md +36 -0
  654. package/pipeline/validation/dependency-graph-validation.md +36 -0
  655. package/pipeline/validation/implementability-dry-run.md +36 -0
  656. package/pipeline/validation/scope-creep-check.md +38 -0
  657. package/pipeline/validation/traceability-matrix.md +36 -0
@@ -0,0 +1,241 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import crypto from 'node:crypto';
5
+ import { describe, it, expect, afterEach } from 'vitest';
6
+ // ---------------------------------------------------------------------------
7
+ // Integration-style tests using real tmp directories
8
+ // ---------------------------------------------------------------------------
9
+ const tmpDirs = [];
10
+ function makeTmpDir() {
11
+ const d = path.join(os.tmpdir(), `scaffold-validation-test-${crypto.randomUUID()}`);
12
+ fs.mkdirSync(d, { recursive: true });
13
+ tmpDirs.push(d);
14
+ return d;
15
+ }
16
+ function makeProjectRoot(opts = {}) {
17
+ const root = makeTmpDir();
18
+ fs.mkdirSync(path.join(root, '.scaffold'), { recursive: true });
19
+ if (opts.configContent !== undefined && opts.configContent !== null) {
20
+ fs.writeFileSync(path.join(root, '.scaffold', 'config.yml'), opts.configContent, 'utf8');
21
+ }
22
+ if (opts.stateContent !== undefined && opts.stateContent !== null) {
23
+ fs.writeFileSync(path.join(root, '.scaffold', 'state.json'), opts.stateContent, 'utf8');
24
+ }
25
+ if (opts.pipelineFiles !== undefined && opts.pipelineFiles.length > 0) {
26
+ fs.mkdirSync(path.join(root, 'pipeline'), { recursive: true });
27
+ for (const f of opts.pipelineFiles) {
28
+ fs.writeFileSync(path.join(root, 'pipeline', f.name), f.content, 'utf8');
29
+ }
30
+ }
31
+ return root;
32
+ }
33
+ const validConfig = `version: 2
34
+ methodology: mvp
35
+ platforms:
36
+ - web
37
+ `;
38
+ const validState = JSON.stringify({
39
+ 'schema-version': 1,
40
+ 'scaffold-version': '2.0.0',
41
+ init_methodology: 'mvp',
42
+ config_methodology: 'mvp',
43
+ 'init-mode': 'greenfield',
44
+ created: '2024-01-01T00:00:00.000Z',
45
+ in_progress: null,
46
+ steps: {},
47
+ next_eligible: [],
48
+ 'extra-steps': [],
49
+ });
50
+ const validFrontmatter = (name) => `---
51
+ name: ${name}
52
+ description: A test step
53
+ phase: modeling
54
+ order: 1
55
+ outputs:
56
+ - output.md
57
+ ---
58
+ # Body
59
+ `;
60
+ afterEach(() => {
61
+ for (const d of tmpDirs.splice(0)) {
62
+ fs.rmSync(d, { recursive: true, force: true });
63
+ }
64
+ });
65
+ // ---------------------------------------------------------------------------
66
+ // Import under test (after tmp setup helpers)
67
+ // ---------------------------------------------------------------------------
68
+ import { runValidation } from './index.js';
69
+ // ---------------------------------------------------------------------------
70
+ // Tests
71
+ // ---------------------------------------------------------------------------
72
+ describe('runValidation', () => {
73
+ // Test 1: Returns no errors for valid config + pipeline
74
+ it('returns no errors for valid config, state, and pipeline', () => {
75
+ const root = makeProjectRoot({
76
+ configContent: validConfig,
77
+ stateContent: validState,
78
+ pipelineFiles: [
79
+ { name: 'my-step.md', content: validFrontmatter('my-step') },
80
+ ],
81
+ });
82
+ const result = runValidation(root);
83
+ expect(result.errors).toHaveLength(0);
84
+ expect(result.warnings).toHaveLength(0);
85
+ expect(result.validFilesCount).toBe(1);
86
+ expect(result.totalFilesCount).toBe(1);
87
+ });
88
+ // Test 2: Returns errors when config.yml is missing
89
+ it('returns errors when config.yml is missing', () => {
90
+ const root = makeProjectRoot({
91
+ // no configContent — no file written
92
+ stateContent: validState,
93
+ });
94
+ const result = runValidation(root, ['config']);
95
+ expect(result.errors.length).toBeGreaterThan(0);
96
+ const codes = result.errors.map(e => e.code);
97
+ expect(codes.some(c => c === 'CONFIG_MISSING')).toBe(true);
98
+ });
99
+ // Test 3: Returns errors for invalid frontmatter
100
+ it('returns errors for invalid frontmatter', () => {
101
+ const badFrontmatter = `---
102
+ name: INVALID NAME WITH SPACES
103
+ description: Bad step
104
+ phase: modeling
105
+ order: 1
106
+ outputs:
107
+ - output.md
108
+ ---
109
+ `;
110
+ const root = makeProjectRoot({
111
+ configContent: validConfig,
112
+ stateContent: validState,
113
+ pipelineFiles: [
114
+ { name: 'bad-step.md', content: badFrontmatter },
115
+ ],
116
+ });
117
+ const result = runValidation(root, ['frontmatter']);
118
+ expect(result.errors.length).toBeGreaterThan(0);
119
+ });
120
+ // Test 4: Returns errors for dependency cycles
121
+ it('returns errors for dependency cycles', () => {
122
+ // step-a depends on step-b, step-b depends on step-a = cycle
123
+ const stepA = `---
124
+ name: step-a
125
+ description: Step A
126
+ phase: modeling
127
+ order: 1
128
+ dependencies:
129
+ - step-b
130
+ outputs:
131
+ - a.md
132
+ ---
133
+ `;
134
+ const stepB = `---
135
+ name: step-b
136
+ description: Step B
137
+ phase: modeling
138
+ order: 2
139
+ dependencies:
140
+ - step-a
141
+ outputs:
142
+ - b.md
143
+ ---
144
+ `;
145
+ const root = makeProjectRoot({
146
+ configContent: validConfig,
147
+ stateContent: validState,
148
+ pipelineFiles: [
149
+ { name: 'step-a.md', content: stepA },
150
+ { name: 'step-b.md', content: stepB },
151
+ ],
152
+ });
153
+ const result = runValidation(root, ['dependencies']);
154
+ expect(result.errors.length).toBeGreaterThan(0);
155
+ expect(result.errors.some(e => e.code === 'DEP_CYCLE_DETECTED')).toBe(true);
156
+ });
157
+ // Test 5: Accumulates all errors before returning (multiple files with errors)
158
+ it('accumulates errors from multiple invalid frontmatter files', () => {
159
+ const badA = `---
160
+ name: INVALID A
161
+ description: Bad
162
+ phase: modeling
163
+ order: 1
164
+ outputs:
165
+ - out.md
166
+ ---
167
+ `;
168
+ const badB = `---
169
+ name: INVALID B
170
+ description: Bad
171
+ phase: modeling
172
+ order: 2
173
+ outputs:
174
+ - out.md
175
+ ---
176
+ `;
177
+ const root = makeProjectRoot({
178
+ configContent: validConfig,
179
+ stateContent: validState,
180
+ pipelineFiles: [
181
+ { name: 'bad-a.md', content: badA },
182
+ { name: 'bad-b.md', content: badB },
183
+ ],
184
+ });
185
+ const result = runValidation(root, ['frontmatter']);
186
+ // Should have errors from both files, not short-circuited after first
187
+ expect(result.errors.length).toBeGreaterThanOrEqual(2);
188
+ });
189
+ // Test 6: --scope config only runs config validation
190
+ it('scope config only runs config validation', () => {
191
+ // No pipeline dir, no state — should only check config
192
+ const root = makeProjectRoot({
193
+ configContent: validConfig,
194
+ // no state
195
+ });
196
+ const result = runValidation(root, ['config']);
197
+ expect(result.scopes).toEqual(['config']);
198
+ // No state errors because state scope not included
199
+ const stateCodes = result.errors.filter(e => e.code.startsWith('STATE_'));
200
+ expect(stateCodes).toHaveLength(0);
201
+ });
202
+ // Test 7: --scope frontmatter only runs frontmatter validation
203
+ it('scope frontmatter only runs frontmatter validation', () => {
204
+ const root = makeProjectRoot({
205
+ // no config — config errors should not appear
206
+ pipelineFiles: [
207
+ { name: 'my-step.md', content: validFrontmatter('my-step') },
208
+ ],
209
+ });
210
+ const result = runValidation(root, ['frontmatter']);
211
+ expect(result.scopes).toEqual(['frontmatter']);
212
+ // No config errors
213
+ const configCodes = result.errors.filter(e => e.code.startsWith('CONFIG_'));
214
+ expect(configCodes).toHaveLength(0);
215
+ });
216
+ // Test 8: validFilesCount matches actual valid file count
217
+ it('validFilesCount counts only valid files', () => {
218
+ const goodStep = validFrontmatter('good-step');
219
+ const badStep = `---
220
+ name: BAD STEP
221
+ description: Bad
222
+ phase: modeling
223
+ order: 1
224
+ outputs:
225
+ - out.md
226
+ ---
227
+ `;
228
+ const root = makeProjectRoot({
229
+ configContent: validConfig,
230
+ stateContent: validState,
231
+ pipelineFiles: [
232
+ { name: 'good-step.md', content: goodStep },
233
+ { name: 'bad-step.md', content: badStep },
234
+ ],
235
+ });
236
+ const result = runValidation(root, ['frontmatter']);
237
+ expect(result.totalFilesCount).toBe(2);
238
+ expect(result.validFilesCount).toBe(1);
239
+ });
240
+ });
241
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/validation/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ScaffoldError, ScaffoldWarning } from '../types/index.js';
2
+ /**
3
+ * Validate .scaffold/state.json for the given project root.
4
+ *
5
+ * - Returns STATE_MISSING error if file does not exist
6
+ * - Returns STATE_PARSE_ERROR if file is not valid JSON
7
+ * - Returns STATE_SCHEMA_VERSION error if schema-version is not 1
8
+ * - Returns FIELD_INVALID_VALUE errors for steps with invalid status values
9
+ * - Returns STATE_IN_PROGRESS warning if in_progress is non-null (potential crash)
10
+ */
11
+ export declare function validateState(projectRoot: string): {
12
+ errors: ScaffoldError[];
13
+ warnings: ScaffoldWarning[];
14
+ };
15
+ //# sourceMappingURL=state-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-validator.d.ts","sourceRoot":"","sources":["../../src/validation/state-validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAKvE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;IAClD,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B,CA6FA"}
@@ -0,0 +1,104 @@
1
+ // src/validation/state-validator.ts
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { ExitCode } from '../types/index.js';
5
+ const VALID_STATUSES = new Set(['pending', 'in_progress', 'completed', 'skipped']);
6
+ /**
7
+ * Validate .scaffold/state.json for the given project root.
8
+ *
9
+ * - Returns STATE_MISSING error if file does not exist
10
+ * - Returns STATE_PARSE_ERROR if file is not valid JSON
11
+ * - Returns STATE_SCHEMA_VERSION error if schema-version is not 1
12
+ * - Returns FIELD_INVALID_VALUE errors for steps with invalid status values
13
+ * - Returns STATE_IN_PROGRESS warning if in_progress is non-null (potential crash)
14
+ */
15
+ export function validateState(projectRoot) {
16
+ const statePath = path.join(projectRoot, '.scaffold', 'state.json');
17
+ const errors = [];
18
+ const warnings = [];
19
+ // Check existence
20
+ if (!fs.existsSync(statePath)) {
21
+ errors.push({
22
+ code: 'STATE_MISSING',
23
+ message: `Pipeline state not found at ${statePath}`,
24
+ exitCode: ExitCode.ValidationError,
25
+ recovery: 'Run "scaffold init" to initialize the pipeline',
26
+ context: { file: statePath },
27
+ });
28
+ return { errors, warnings };
29
+ }
30
+ // Read file
31
+ let raw;
32
+ try {
33
+ raw = fs.readFileSync(statePath, 'utf8');
34
+ }
35
+ catch (err) {
36
+ const detail = err instanceof Error ? err.message : String(err);
37
+ errors.push({
38
+ code: 'STATE_PARSE_ERROR',
39
+ message: `Failed to read state.json: ${detail}`,
40
+ exitCode: ExitCode.StateCorruption,
41
+ recovery: 'Run "scaffold reset" to reinitialize state',
42
+ context: { file: statePath, detail },
43
+ });
44
+ return { errors, warnings };
45
+ }
46
+ // Parse JSON
47
+ let parsed;
48
+ try {
49
+ parsed = JSON.parse(raw);
50
+ }
51
+ catch (err) {
52
+ const detail = err instanceof Error ? err.message : String(err);
53
+ errors.push({
54
+ code: 'STATE_PARSE_ERROR',
55
+ message: `Failed to parse state.json: ${detail}`,
56
+ exitCode: ExitCode.StateCorruption,
57
+ recovery: 'Run "scaffold reset" to reinitialize state',
58
+ context: { file: statePath, detail },
59
+ });
60
+ return { errors, warnings };
61
+ }
62
+ // Check schema version
63
+ const schemaVersion = parsed['schema-version'];
64
+ if (schemaVersion !== 1) {
65
+ errors.push({
66
+ code: 'STATE_SCHEMA_VERSION',
67
+ message: `state.json schema version ${String(schemaVersion)} is not supported (expected 1)`,
68
+ exitCode: ExitCode.StateCorruption,
69
+ recovery: 'Run "scaffold reset" to reinitialize state, or upgrade scaffold',
70
+ context: { file: statePath, expected: 1, actual: schemaVersion },
71
+ });
72
+ return { errors, warnings };
73
+ }
74
+ // Validate step statuses
75
+ const steps = parsed['steps'];
76
+ if (steps !== null && steps !== undefined && typeof steps === 'object' && !Array.isArray(steps)) {
77
+ for (const [slug, entry] of Object.entries(steps)) {
78
+ const stepEntry = entry;
79
+ const status = stepEntry['status'];
80
+ if (typeof status === 'string' && !VALID_STATUSES.has(status)) {
81
+ errors.push({
82
+ code: 'FIELD_INVALID_VALUE',
83
+ message: `Step "${slug}" has invalid status "${status}"`,
84
+ exitCode: ExitCode.ValidationError,
85
+ recovery: `Valid statuses: ${[...VALID_STATUSES].join(', ')}`,
86
+ context: { file: statePath, field: `steps.${slug}.status`, value: status },
87
+ });
88
+ }
89
+ }
90
+ }
91
+ // Warn if in_progress is non-null (potential crash recovery needed)
92
+ const inProgress = parsed['in_progress'];
93
+ if (inProgress !== null && inProgress !== undefined) {
94
+ const inProgressRecord = inProgress;
95
+ const step = typeof inProgressRecord['step'] === 'string' ? inProgressRecord['step'] : 'unknown';
96
+ warnings.push({
97
+ code: 'STATE_IN_PROGRESS',
98
+ message: `Step "${step}" is marked in_progress — this may indicate a previous crash`,
99
+ context: { file: statePath, step },
100
+ });
101
+ }
102
+ return { errors, warnings };
103
+ }
104
+ //# sourceMappingURL=state-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-validator.js","sourceRoot":"","sources":["../../src/validation/state-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { OutputContext } from '../cli/output/context.js';
2
+ export interface WizardAnswers {
3
+ methodology: 'deep' | 'mvp' | 'custom';
4
+ depth: 1 | 2 | 3 | 4 | 5;
5
+ platforms: string[];
6
+ traits: string[];
7
+ }
8
+ /**
9
+ * Ask user the wizard questions interactively.
10
+ * In auto mode, use defaults immediately.
11
+ */
12
+ export declare function askWizardQuestions(options: {
13
+ output: OutputContext;
14
+ suggestion: 'deep' | 'mvp';
15
+ methodology?: string;
16
+ auto: boolean;
17
+ }): Promise<WizardAnswers>;
18
+ //# sourceMappingURL=questions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/wizard/questions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE7D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;IACtC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,OAAO,CAAA;CACd,GAAG,OAAO,CAAC,aAAa,CAAC,CA2CzB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Ask user the wizard questions interactively.
3
+ * In auto mode, use defaults immediately.
4
+ */
5
+ export async function askWizardQuestions(options) {
6
+ const { output, suggestion, auto } = options;
7
+ // Methodology question (skip if --methodology was provided)
8
+ let methodology = suggestion;
9
+ if (options.methodology) {
10
+ methodology = options.methodology;
11
+ }
12
+ else if (!auto) {
13
+ // In interactive mode, ask via OutputContext.prompt
14
+ const answer = await output.prompt(`Select methodology (deep/mvp/custom) [${suggestion}]:`, suggestion);
15
+ if (['deep', 'mvp', 'custom'].includes(answer)) {
16
+ methodology = answer;
17
+ }
18
+ }
19
+ // Depth question (only for custom methodology)
20
+ let depth = methodology === 'mvp' ? 1 : methodology === 'deep' ? 5 : 3;
21
+ if (methodology === 'custom' && !auto) {
22
+ const depthStr = await output.prompt('Depth (1-5) [3]:', '3');
23
+ const parsed = parseInt(depthStr);
24
+ if (parsed >= 1 && parsed <= 5)
25
+ depth = parsed;
26
+ }
27
+ // Platform selection (simplified — claude-code always included)
28
+ const platforms = ['claude-code'];
29
+ if (!auto) {
30
+ const addCodex = await output.confirm('Include Codex adapter?', false);
31
+ if (addCodex)
32
+ platforms.push('codex');
33
+ }
34
+ // Traits (web/mobile/desktop)
35
+ const traits = [];
36
+ if (!auto) {
37
+ const isWeb = await output.confirm('Is this a web application?', false);
38
+ if (isWeb)
39
+ traits.push('web');
40
+ const isMobile = await output.confirm('Is this a mobile application?', false);
41
+ if (isMobile)
42
+ traits.push('mobile');
43
+ }
44
+ return { methodology, depth, platforms, traits };
45
+ }
46
+ //# sourceMappingURL=questions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/wizard/questions.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAKxC;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAE5C,4DAA4D;IAC5D,IAAI,WAAW,GAA8B,UAA4B,CAAA;IACzE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,WAAW,GAAG,OAAO,CAAC,WAAwC,CAAA;IAChE,CAAC;SAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,yCAAyC,UAAU,IAAI,EACvD,UAAU,CACX,CAAA;QACD,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,WAAW,GAAG,MAAmC,CAAA;QACnD,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,KAAK,GAAsB,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzF,IAAI,WAAW,KAAK,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAS,kBAAkB,EAAE,GAAG,CAAC,CAAA;QACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,KAAK,GAAG,MAA2B,CAAA;IACrE,CAAC;IAED,gEAAgE;IAChE,MAAM,SAAS,GAAG,CAAC,aAAa,CAAC,CAAA;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;QACtE,IAAI,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAED,8BAA8B;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QACvE,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;QAC7E,IAAI,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;AAClD,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Suggest a methodology based on project keywords and signals.
3
+ * Returns 'mvp' for prototype/quick projects, 'deep' for complex ones.
4
+ */
5
+ export declare function suggestMethodology(options: {
6
+ idea?: string;
7
+ mode: 'greenfield' | 'brownfield' | 'v1-migration';
8
+ sourceFileCount?: number;
9
+ }): 'deep' | 'mvp';
10
+ //# sourceMappingURL=suggestion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestion.d.ts","sourceRoot":"","sources":["../../src/wizard/suggestion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,cAAc,CAAA;IAClD,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GAAG,MAAM,GAAG,KAAK,CAYjB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Suggest a methodology based on project keywords and signals.
3
+ * Returns 'mvp' for prototype/quick projects, 'deep' for complex ones.
4
+ */
5
+ export function suggestMethodology(options) {
6
+ const { idea = '', mode, sourceFileCount = 0 } = options;
7
+ // MVP signals in the idea text
8
+ const mvpKeywords = ['prototype', 'mvp', 'quick', 'hack', 'simple', 'basic', 'minimal', 'poc'];
9
+ if (mvpKeywords.some(k => idea.toLowerCase().includes(k)))
10
+ return 'mvp';
11
+ // Large existing codebase → deep
12
+ if (mode === 'brownfield' && sourceFileCount > 10)
13
+ return 'deep';
14
+ // Default: deep
15
+ return 'deep';
16
+ }
17
+ //# sourceMappingURL=suggestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestion.js","sourceRoot":"","sources":["../../src/wizard/suggestion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAIlC;IACC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,eAAe,GAAG,CAAC,EAAE,GAAG,OAAO,CAAA;IAExD,+BAA+B;IAC/B,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAC9F,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAEvE,iCAAiC;IACjC,IAAI,IAAI,KAAK,YAAY,IAAI,eAAe,GAAG,EAAE;QAAE,OAAO,MAAM,CAAA;IAEhE,gBAAgB;IAChB,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ScaffoldError } from '../types/index.js';
2
+ import type { OutputContext } from '../cli/output/context.js';
3
+ export interface WizardOptions {
4
+ projectRoot: string;
5
+ idea?: string;
6
+ methodology?: string;
7
+ force: boolean;
8
+ auto: boolean;
9
+ output: OutputContext;
10
+ }
11
+ export interface WizardResult {
12
+ success: boolean;
13
+ projectRoot: string;
14
+ configPath: string;
15
+ methodology: string;
16
+ errors: ScaffoldError[];
17
+ }
18
+ export declare function runWizard(options: WizardOptions): Promise<WizardResult>;
19
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/wizard/wizard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAW7D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2G7E"}
@@ -0,0 +1,104 @@
1
+ import { detectProjectMode } from '../project/detector.js';
2
+ import { suggestMethodology } from './suggestion.js';
3
+ import { askWizardQuestions } from './questions.js';
4
+ import { StateManager } from '../state/state-manager.js';
5
+ import { discoverMetaPrompts } from '../core/assembly/meta-prompt-loader.js';
6
+ import { atomicWriteFile, ensureDir } from '../utils/fs.js';
7
+ import yaml from 'js-yaml';
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+ export async function runWizard(options) {
11
+ const { projectRoot, idea, methodology: presetMethodology, force, auto, output } = options;
12
+ const scaffoldDir = path.join(projectRoot, '.scaffold');
13
+ // Check for existing .scaffold/
14
+ if (fs.existsSync(scaffoldDir) && !force) {
15
+ return {
16
+ success: false,
17
+ projectRoot,
18
+ configPath: path.join(scaffoldDir, 'config.yml'),
19
+ methodology: 'unknown',
20
+ errors: [
21
+ {
22
+ code: 'INIT_SCAFFOLD_EXISTS',
23
+ message: '.scaffold/ directory already exists',
24
+ exitCode: 1,
25
+ recovery: 'Use --force to back up and reinitialize',
26
+ },
27
+ ],
28
+ };
29
+ }
30
+ // Backup existing .scaffold/ if --force
31
+ if (fs.existsSync(scaffoldDir) && force) {
32
+ const backupPath = path.join(projectRoot, '.scaffold.backup');
33
+ const finalBackup = fs.existsSync(backupPath)
34
+ ? `${backupPath}.${Date.now()}`
35
+ : backupPath;
36
+ fs.renameSync(scaffoldDir, finalBackup);
37
+ output.info(`Backed up existing .scaffold/ to ${path.basename(finalBackup)}`);
38
+ }
39
+ // Detect project
40
+ const detection = detectProjectMode(projectRoot);
41
+ // Compute methodology suggestion
42
+ const suggestion = suggestMethodology({
43
+ idea,
44
+ mode: detection.mode,
45
+ });
46
+ // Ask questions
47
+ const answers = await askWizardQuestions({
48
+ output,
49
+ suggestion,
50
+ methodology: presetMethodology,
51
+ auto,
52
+ });
53
+ // Build config — methodology is a top-level string per the real ScaffoldConfig schema
54
+ const config = {
55
+ version: 2,
56
+ methodology: answers.methodology,
57
+ platforms: answers.platforms,
58
+ project: {
59
+ traits: answers.traits,
60
+ },
61
+ };
62
+ // For custom methodology, store depth in custom.default_depth
63
+ if (answers.methodology === 'custom') {
64
+ config.custom = { default_depth: answers.depth };
65
+ }
66
+ // Write .scaffold/ directory structure
67
+ ensureDir(scaffoldDir);
68
+ ensureDir(path.join(scaffoldDir, 'instructions'));
69
+ // Write config.yml
70
+ const configPath = path.join(scaffoldDir, 'config.yml');
71
+ atomicWriteFile(configPath, yaml.dump(config));
72
+ // Initialize state.json via StateManager
73
+ const pipelineDir = path.join(projectRoot, 'pipeline');
74
+ const metaPrompts = discoverMetaPrompts(pipelineDir);
75
+ const allSteps = [...metaPrompts.entries()].map(([slug, mp]) => ({
76
+ slug,
77
+ produces: mp.frontmatter.outputs ?? [],
78
+ }));
79
+ const stateManager = new StateManager(projectRoot, () => []);
80
+ stateManager.initializeState({
81
+ enabledSteps: allSteps,
82
+ scaffoldVersion: '2.0.0',
83
+ methodology: answers.methodology,
84
+ initMode: detection.mode === 'v1-migration'
85
+ ? 'v1-migration'
86
+ : detection.mode === 'brownfield'
87
+ ? 'brownfield'
88
+ : 'greenfield',
89
+ });
90
+ // Write empty decisions.jsonl
91
+ const decisionsPath = path.join(scaffoldDir, 'decisions.jsonl');
92
+ if (!fs.existsSync(decisionsPath)) {
93
+ fs.writeFileSync(decisionsPath, '', 'utf8');
94
+ }
95
+ output.success(`Initialized scaffold project (${answers.methodology}, depth ${answers.depth})`);
96
+ return {
97
+ success: true,
98
+ projectRoot,
99
+ configPath,
100
+ methodology: answers.methodology,
101
+ errors: [],
102
+ };
103
+ }
104
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/wizard/wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wizard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.test.d.ts","sourceRoot":"","sources":["../../src/wizard/wizard.test.ts"],"names":[],"mappings":""}