@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,305 @@
1
+ ---
2
+ name: gap-analysis
3
+ description: Systematic approaches to finding gaps in requirements and specifications
4
+ topics: [gap-analysis, requirements, completeness, ambiguity, edge-cases]
5
+ ---
6
+
7
+ # Gap Analysis
8
+
9
+ Gap analysis is the systematic process of finding what is missing from a set of requirements or specifications. A gap is anything that an implementing team would need to know but that the document does not tell them. Gaps are not errors (things stated incorrectly) — they are omissions (things not stated at all).
10
+
11
+ ## Systematic Analysis Approaches
12
+
13
+ ### Section-by-Section Review
14
+
15
+ Walk through the document section by section, asking structured questions at each:
16
+
17
+ **For each feature description:**
18
+ 1. Who uses this feature? (Is the actor specified?)
19
+ 2. What triggers this feature? (Is the entry point clear?)
20
+ 3. What are the inputs? (Are all fields listed? With types and constraints?)
21
+ 4. What is the happy path output? (Is the success response defined?)
22
+ 5. What are the error outputs? (Is every failure mode addressed?)
23
+ 6. What state changes? (What data is created, updated, or deleted?)
24
+ 7. What are the preconditions? (What must be true before this feature can execute?)
25
+ 8. What are the postconditions? (What is guaranteed to be true after execution?)
26
+ 9. Are there rate limits, permissions, or visibility constraints?
27
+ 10. Is this feature idempotent? (What happens if it runs twice?)
28
+
29
+ **For each data entity:**
30
+ 1. What are all the fields? (Are any missing?)
31
+ 2. What are the field types? (String, number, enum, date, etc.)
32
+ 3. Which fields are required vs optional?
33
+ 4. What are the valid ranges or patterns for each field?
34
+ 5. What happens when a field is null vs absent vs empty?
35
+ 6. How is this entity created? Updated? Deleted?
36
+ 7. What relationships does it have with other entities?
37
+ 8. What uniqueness constraints exist?
38
+
39
+ **For each user flow:**
40
+ 1. What is the starting state?
41
+ 2. What are all the steps?
42
+ 3. At each step, what can go wrong?
43
+ 4. At each step, can the user go back?
44
+ 5. What happens if the user abandons the flow mid-way?
45
+ 6. What happens if the user's session expires during the flow?
46
+ 7. What does the user see while waiting for asynchronous operations?
47
+
48
+ ### Cross-Reference Checking
49
+
50
+ Compare different sections of the same document (or different documents) for consistency and completeness:
51
+
52
+ 1. **Feature list vs. detail sections** — Is every listed feature described in detail? Are there detail sections for unlisted features?
53
+ 2. **Personas vs. features** — Does every persona have at least one feature that addresses their primary need? Does every feature map to a persona?
54
+ 3. **NFRs vs. features** — Do performance requirements specify which features they apply to? Are there features without any NFR coverage?
55
+ 4. **Constraints vs. features** — Do constraints affect feature design? Is the impact documented?
56
+ 5. **Success criteria vs. features** — Can every success criterion be measured by at least one feature? Are there features that contribute to no success criterion?
57
+ 6. **Error scenarios vs. features** — Does every feature with user input have error handling? Does every feature with external dependencies have failure handling?
58
+
59
+ ### Edge Case Enumeration
60
+
61
+ Systematically explore the boundaries of each feature:
62
+
63
+ **Boundary conditions:**
64
+ - Minimum values (0, empty string, empty list, null)
65
+ - Maximum values (max integer, max string length, max file size)
66
+ - Just over/under limits (101 characters for a 100-char limit)
67
+ - Unicode edge cases (emoji, RTL text, zero-width characters)
68
+ - Time zone boundaries (DST transitions, UTC offset changes)
69
+ - Date boundaries (leap years, month boundaries, year boundaries)
70
+
71
+ **State boundaries:**
72
+ - First use (no data exists)
73
+ - Normal use (typical data volume)
74
+ - Heavy use (large data volumes, many records)
75
+ - Degraded state (partial data, corrupt data, missing references)
76
+ - Recovery state (after a crash, after a failed migration, after restoring from backup)
77
+
78
+ **Concurrency boundaries:**
79
+ - Two users editing the same record
80
+ - Two users claiming the same resource
81
+ - Rapid successive submissions (double-click)
82
+ - Long-running operations interrupted by newer operations
83
+ - Race conditions between create and delete
84
+
85
+ **Network boundaries:**
86
+ - Slow connection (high latency)
87
+ - Intermittent connection (requests that time out mid-way)
88
+ - Offline mode (if applicable)
89
+ - Partial response (connection drops mid-transfer)
90
+
91
+ ## Ambiguity Detection
92
+
93
+ An ambiguity is a statement that could reasonably be interpreted in more than one way. Ambiguities are gaps because the implementing team must guess which interpretation is correct.
94
+
95
+ ### Types of Ambiguity
96
+
97
+ **Lexical ambiguity** — A word has multiple meanings.
98
+ - "The system should store the user's records." (Medical records? Usage records? Database records?)
99
+ - "Notify the admin when a user is blocked." (Email notification? In-app notification? Both?)
100
+
101
+ **Structural ambiguity** — The sentence structure allows multiple readings.
102
+ - "Users can view reports shared by team members and partners." (Reports shared by [team members and partners]? Or [reports shared by team members] and [partners]?)
103
+ - "The system sends email when the order is completed or cancelled and the user has opted in." (Opted in to what — both notifications or just cancellation?)
104
+
105
+ **Scope ambiguity** — The boundary of a requirement is unclear.
106
+ - "Support all modern browsers." (Which ones? What version threshold?)
107
+ - "The search should return relevant results." (What defines relevant? Ranked how?)
108
+
109
+ **Referential ambiguity** — Pronouns or references are unclear.
110
+ - "When the admin approves the user's request, they receive a notification." (Who receives — the admin or the user?)
111
+
112
+ ### Detection Technique
113
+
114
+ For each requirement statement:
115
+ 1. Read it once and form an interpretation.
116
+ 2. Deliberately try to form a DIFFERENT valid interpretation.
117
+ 3. If you can, the statement is ambiguous.
118
+ 4. Rewrite the statement to be unambiguous, or flag it as needing clarification.
119
+
120
+ **Example:**
121
+ - Original: "The system should validate user input."
122
+ - Interpretation 1: Client-side validation only (JavaScript form validation)
123
+ - Interpretation 2: Server-side validation only (API-level validation)
124
+ - Interpretation 3: Both client-side and server-side validation
125
+ - Finding: Ambiguous. Specify where validation occurs.
126
+ - Rewrite: "The system validates user input on both the client (inline feedback during form entry) and the server (API returns 422 with field-level error messages)."
127
+
128
+ ### Ambiguity Severity Levels
129
+
130
+ - **Critical** — Ambiguity about core functionality. Different interpretations lead to fundamentally different implementations.
131
+ - **Major** — Ambiguity about behavior details. Different interpretations lead to different user experiences.
132
+ - **Minor** — Ambiguity about edge cases or formatting. Different interpretations are cosmetically different.
133
+
134
+ ## Edge Case Discovery
135
+
136
+ ### Error Scenarios
137
+
138
+ For each operation, systematically enumerate error scenarios:
139
+
140
+ **Input errors:**
141
+ - Missing required fields
142
+ - Fields with wrong types
143
+ - Fields with values outside valid ranges
144
+ - Fields with malicious content (SQL injection, XSS)
145
+ - Duplicate submissions
146
+
147
+ **State errors:**
148
+ - Operating on a deleted entity
149
+ - Operating on an entity in an unexpected state
150
+ - Stale data (entity was modified since last read)
151
+
152
+ **Permission errors:**
153
+ - Unauthenticated access
154
+ - Authenticated but unauthorized access
155
+ - Access to another user's data
156
+ - Elevated privilege operations by non-admin users
157
+
158
+ **External dependency errors:**
159
+ - Payment processor unavailable
160
+ - Email service unavailable
161
+ - Third-party API returns unexpected response
162
+ - Third-party API rate limit exceeded
163
+ - DNS resolution failure
164
+
165
+ **Resource errors:**
166
+ - Database connection pool exhausted
167
+ - Disk full
168
+ - Memory exhausted
169
+ - File size exceeds limit
170
+
171
+ ### Boundary Conditions
172
+
173
+ For each quantitative constraint, test the boundaries:
174
+
175
+ ```
176
+ Constraint: Username must be 3-30 characters
177
+ Test cases:
178
+ - 0 characters (empty) → error
179
+ - 1 character → error
180
+ - 2 characters → error
181
+ - 3 characters → success (minimum boundary)
182
+ - 15 characters → success (normal)
183
+ - 30 characters → success (maximum boundary)
184
+ - 31 characters → error
185
+ - 1000 characters → error (ensure no buffer overflow)
186
+ ```
187
+
188
+ ### Concurrent Access
189
+
190
+ For each shared resource:
191
+ 1. What happens when two users read simultaneously? (Usually fine)
192
+ 2. What happens when two users write simultaneously? (Last write wins? Merge? Reject?)
193
+ 3. What happens when one user reads while another writes? (Stale data? Locked? Consistent?)
194
+ 4. What happens when two users try to claim the same unique resource? (First wins? Queue? Error?)
195
+
196
+ ## NFR Gap Patterns
197
+
198
+ ### Performance Gaps
199
+
200
+ - Response time specified for reads but not writes
201
+ - Average response time specified but not percentiles (p50 can be 100ms while p99 is 10 seconds)
202
+ - Page load time specified but not API response time
203
+ - No specification for batch operations (import 10,000 records — how long is acceptable?)
204
+ - No specification for search response time (full-text search is often slower than CRUD)
205
+
206
+ ### Security Gaps
207
+
208
+ - Authentication mechanism specified but not session management (timeout, rotation, revocation)
209
+ - Authorization model specified but not data isolation (can user A see user B's data?)
210
+ - Encryption at rest mentioned but not encryption in transit (or vice versa)
211
+ - Password policy not specified (minimum length, complexity, rotation)
212
+ - No mention of rate limiting or brute force protection
213
+ - No mention of audit logging (who did what when)
214
+
215
+ ### Accessibility Gaps
216
+
217
+ - WCAG level stated but not specific compliance areas (keyboard navigation, screen reader support, color contrast)
218
+ - No mention of focus management for dynamic content (modals, notifications, form errors)
219
+ - No mention of alt text requirements for images
220
+ - No mention of motion reduction for users who prefer reduced motion
221
+
222
+ ### Scalability Gaps
223
+
224
+ - Current scale specified but not growth projections
225
+ - User count specified but not data volume (10,000 users with 1 record each is different from 10,000 users with 1 million records each)
226
+ - No specification for what degrades gracefully under load (versus what must maintain full quality)
227
+
228
+ ## Contradiction Detection
229
+
230
+ Contradictions are requirements that cannot both be true simultaneously.
231
+
232
+ ### Detection Technique
233
+
234
+ 1. Group requirements by topic (authentication, data handling, UI behavior, etc.).
235
+ 2. Within each group, compare every pair of requirements.
236
+ 3. Ask: "Can these both be true at the same time?"
237
+
238
+ ### Common Contradiction Patterns
239
+
240
+ **Real-time vs. batch:**
241
+ - "Display real-time inventory counts" AND "Update inventory via nightly batch job"
242
+ - These contradict unless there is a mechanism to handle the 24-hour stale window.
243
+
244
+ **Simple vs. comprehensive:**
245
+ - "The interface should be simple and uncluttered" AND "Display all order details on one page"
246
+ - Simplicity and completeness often conflict. Which takes priority?
247
+
248
+ **Flexible vs. consistent:**
249
+ - "Allow users to customize their workflow" AND "Ensure all users follow the standard process"
250
+ - Customization and standardization conflict. What is the scope of customization?
251
+
252
+ **Fast vs. thorough:**
253
+ - "API responses under 100ms" AND "Validate against all business rules on every request"
254
+ - Complex validation may make 100ms impossible. Which gives?
255
+
256
+ ### Resolution
257
+
258
+ For each contradiction, the PRD should clarify:
259
+ 1. Which requirement takes priority?
260
+ 2. Under what conditions does each apply?
261
+ 3. Is there a design that satisfies both, and what are the trade-offs?
262
+
263
+ ## Output Format
264
+
265
+ ### Gap Report Structure
266
+
267
+ ```markdown
268
+ ## Gap Analysis Report
269
+
270
+ ### Summary
271
+ - Total gaps found: [N]
272
+ - Critical: [N] (blocks implementation)
273
+ - Major: [N] (impacts quality)
274
+ - Minor: [N] (cosmetic or edge case)
275
+
276
+ ### Critical Gaps
277
+ 1. [Gap description]
278
+ - **Location:** [Section/feature]
279
+ - **Impact:** [What happens if not resolved]
280
+ - **Recommended resolution:** [What to add or clarify]
281
+
282
+ ### Major Gaps
283
+ ...
284
+
285
+ ### Minor Gaps
286
+ ...
287
+
288
+ ### Ambiguities
289
+ 1. [Statement as written]
290
+ - **Possible interpretations:** [list]
291
+ - **Recommended clarification:** [suggested rewrite]
292
+
293
+ ### Contradictions
294
+ 1. [Requirement A] vs [Requirement B]
295
+ - **Analysis:** [why they conflict]
296
+ - **Recommended resolution:** [which takes priority and why]
297
+
298
+ ```
299
+
300
+ ## When to Use Gap Analysis
301
+
302
+ - **After PRD creation** — Find gaps before domain modeling begins. Cheapest time to fix.
303
+ - **After each documentation phase** — Incremental gap analysis as specifications become more detailed.
304
+ - **After requirements change** — Any PRD modification should trigger gap analysis of affected features.
305
+ - **Before implementation** — Final gap analysis of the complete specification set.
@@ -0,0 +1,324 @@
1
+ ---
2
+ name: prd-craft
3
+ description: What makes a good PRD — problem framing, feature scoping, success criteria, competitive context
4
+ topics: [prd, requirements, product, scoping]
5
+ ---
6
+
7
+ # PRD Craft
8
+
9
+ A Product Requirements Document is the single source of truth for what is being built and why. It defines the problem, the users, the scope, and the success criteria. Everything in the pipeline flows from the PRD — domain models, architecture, implementation tasks. A weak PRD propagates weakness through every downstream artifact.
10
+
11
+ This document covers what makes a good PRD, what makes a bad one, and how to tell the difference.
12
+
13
+ ## Problem Statement
14
+
15
+ The problem statement is the foundation. If it is wrong, everything built on top of it is wrong.
16
+
17
+ ### What Makes a Good Problem Statement
18
+
19
+ A good problem statement is **specific**, **testable**, and **grounded in observable reality**.
20
+
21
+ **Good examples:**
22
+ - "Small business owners spend an average of 6 hours per week manually reconciling invoices from 3+ payment processors because no tool aggregates them into a single view."
23
+ - "Mobile users abandon checkout at a 72% rate because the current flow requires 7 form screens on a 4-inch display."
24
+ - "Customer support handles 200+ tickets per week about order status because there is no self-service tracking interface."
25
+
26
+ **Bad examples:**
27
+ - "We need to improve the user experience." (Not specific — improve what? For whom? By how much?)
28
+ - "The platform should be more scalable." (Not a problem — scalability is a solution. What breaks at what scale?)
29
+ - "Users want a better dashboard." (Aspirational, not grounded. What is wrong with the current one? What does "better" mean?)
30
+ - "We need to modernize our technology stack." (Technology is not a problem — what user-facing or business issue does the old stack cause?)
31
+
32
+ ### Problem Statement Checklist
33
+
34
+ - [ ] Names a specific user group (not "users" or "everyone")
35
+ - [ ] Describes an observable behavior or pain point (not a desired state)
36
+ - [ ] Includes quantitative evidence where available (time wasted, error rate, abandonment rate)
37
+ - [ ] Does not prescribe a solution (the problem is not "we need feature X")
38
+ - [ ] Can be validated — you can measure whether the problem is solved
39
+
40
+ ## Target Users
41
+
42
+ ### Personas with Needs
43
+
44
+ Each persona should have:
45
+ - **Role or description** — Who they are in relation to the product.
46
+ - **Primary need** — What they need from this specific product. Not generic needs.
47
+ - **Current behavior** — How they currently solve the problem (or cope with it).
48
+ - **Constraints** — What limits their ability to adopt a solution (time, skill, budget, organizational rules).
49
+ - **Success looks like** — What would change for them if the problem were solved.
50
+
51
+ **Good persona:**
52
+ ```
53
+ ## Small Business Owner (Primary)
54
+ - Manages 1-3 employees
55
+ - Handles own bookkeeping alongside core business work
56
+ - Currently uses spreadsheets and manual data entry from 3 payment processor dashboards
57
+ - Has 30 minutes per day maximum for administrative tasks
58
+ - Non-technical — comfortable with consumer apps but not developer tools
59
+ - Success: invoice reconciliation takes < 30 minutes per week instead of 6 hours
60
+ ```
61
+
62
+ **Bad persona:**
63
+ ```
64
+ ## User
65
+ - Wants to manage their business better
66
+ - Uses our product regularly
67
+ - Needs things to be fast and easy
68
+ ```
69
+
70
+ The bad persona tells the implementation team nothing actionable. It does not constrain design decisions.
71
+
72
+ ### How Many Personas
73
+
74
+ Most products have 2-4 meaningful personas. If a PRD lists more than 6, the product scope is likely too broad. If it lists only 1, secondary users (admins, support staff, integration partners) may be missing.
75
+
76
+ ### Anti-pattern: The Everything User
77
+
78
+ A persona that represents all users is no persona at all. "Power users who want advanced features AND casual users who want simplicity" describes a contradiction, not a persona. Different personas may have conflicting needs — that is fine, but the PRD must state which takes priority.
79
+
80
+ ## Feature Scoping
81
+
82
+ ### What Is In, What Is Out, What Is Deferred
83
+
84
+ Every PRD should have three explicit lists:
85
+
86
+ **In Scope (v1):** Features that will be built in this release. Each should be specific enough to estimate.
87
+
88
+ **Out of Scope:** Features that will NOT be built. Stating what is out is as important as stating what is in — it prevents scope creep during downstream phases.
89
+
90
+ **Deferred (future):** Features that are planned for later releases. This is different from "out of scope" — deferred items inform architecture decisions (design for extensibility) without committing to immediate implementation.
91
+
92
+ **Good scoping:**
93
+ ```
94
+ ## In Scope
95
+ - User registration with email/password
96
+ - Product catalog with category-based browsing
97
+ - Shopping cart with add/remove/update quantity
98
+ - Checkout with Stripe payment integration
99
+ - Order confirmation email
100
+ - Order history page
101
+
102
+ ## Out of Scope
103
+ - Social login (Google, Apple, Facebook)
104
+ - Product reviews and ratings
105
+ - Wishlist functionality
106
+ - Gift cards and promo codes
107
+ - Multi-currency support
108
+
109
+ ## Deferred (v2)
110
+ - Mobile native app (design API for mobile consumption)
111
+ - Marketplace for third-party sellers (design data model for future multi-tenancy)
112
+ - Advanced search with filters (use basic text search for v1)
113
+ ```
114
+
115
+ **Bad scoping:**
116
+ ```
117
+ ## Features
118
+ - User management
119
+ - Product management
120
+ - Order management
121
+ - Payment processing
122
+ - Notifications
123
+ - Analytics
124
+ - Admin tools
125
+ ```
126
+
127
+ This tells you nothing about boundaries. Is "user management" basic registration or full RBAC with teams and permissions? Is "analytics" a page view counter or a business intelligence suite?
128
+
129
+ ### MoSCoW Prioritization
130
+
131
+ When the in-scope list is large, use MoSCoW to further prioritize:
132
+
133
+ - **Must Have** — Without these, the product does not solve the problem statement. Failure to deliver any Must Have means the release fails.
134
+ - **Should Have** — Important but not critical. The product works without them but is noticeably weaker.
135
+ - **Could Have** — Nice to have. Include if time permits.
136
+ - **Won't Have (this release)** — Same as deferred, but MoSCoW makes priority explicit.
137
+
138
+ **Example:**
139
+ ```
140
+ Must Have:
141
+ - User registration and login
142
+ - Product catalog display
143
+ - Add to cart
144
+ - Checkout with payment
145
+ - Order confirmation
146
+
147
+ Should Have:
148
+ - Search by product name
149
+ - Order history
150
+ - Email notifications for order status changes
151
+
152
+ Could Have:
153
+ - Category filtering
154
+ - Recently viewed products
155
+ - Save payment method for future use
156
+
157
+ Won't Have:
158
+ - Product reviews
159
+ - Wishlist
160
+ - Social login
161
+ ```
162
+
163
+ ### Feature Detail Level
164
+
165
+ Each in-scope feature needs enough detail to be estimable:
166
+
167
+ **Too vague:**
168
+ - "Product search" — Full-text? By name only? With filters? Auto-suggest? Fuzzy matching?
169
+
170
+ **Right level:**
171
+ - "Product search: Text search by product name and description. Results ranked by relevance. Paginated, 20 per page. No filters in v1. No auto-suggest in v1."
172
+
173
+ **Too detailed (belongs in specs, not PRD):**
174
+ - "Product search: Implement Elasticsearch with BM25 ranking, 3-gram tokenizer, custom analyzers for each locale, with Redis caching of top-1000 queries..."
175
+
176
+ The PRD says WHAT, not HOW.
177
+
178
+ ## Success Criteria
179
+
180
+ ### Measurable Outcomes
181
+
182
+ Success criteria define how you will know the product works. They must be measurable, specific, and tied to the problem statement.
183
+
184
+ **Good success criteria:**
185
+ - "Invoice reconciliation time decreases from 6 hours/week to under 30 minutes/week for the median user."
186
+ - "Checkout abandonment rate decreases from 72% to under 40%."
187
+ - "Customer support tickets about order status decrease by 80%."
188
+ - "95% of new users complete onboarding without contacting support."
189
+
190
+ **Bad success criteria:**
191
+ - "Users are satisfied with the product." (Not measurable without defining how satisfaction is measured)
192
+ - "The system is performant." (Not specific — performant how?)
193
+ - "Revenue increases." (Not tied to the problem. Revenue can increase for many reasons.)
194
+ - "We ship on time." (Success criteria for the project, not the product)
195
+
196
+ ### Types of Success Criteria
197
+
198
+ 1. **User behavior metrics** — Conversion rates, completion rates, time-on-task, error rates.
199
+ 2. **Business metrics** — Revenue impact, cost reduction, customer acquisition.
200
+ 3. **Technical metrics** — Uptime, latency, error rate (these are NFRs, but they can also be success criteria).
201
+ 4. **Adoption metrics** — Sign-up rate, daily active users, feature usage.
202
+
203
+ Every success criterion should have a **target value** and a **measurement method**. "Checkout abandonment under 40% as measured by analytics funnel tracking" is complete. "Checkout abandonment decreases" is not.
204
+
205
+ ## Constraints
206
+
207
+ ### Categories of Constraints
208
+
209
+ **Technical constraints:**
210
+ - Existing systems that must be integrated with.
211
+ - Technology mandates from the organization (e.g., must use AWS, must use TypeScript).
212
+ - Legacy data that must be migrated.
213
+ - API contracts that cannot be changed.
214
+
215
+ **Timeline constraints:**
216
+ - Hard deadlines (regulatory, contractual, event-driven).
217
+ - Soft deadlines (competitive pressure, business planning).
218
+ - Phase constraints (v1 by date X, v2 by date Y).
219
+
220
+ **Budget constraints:**
221
+ - Development budget (team size, contractor budget).
222
+ - Infrastructure budget (monthly cloud spend limits).
223
+ - Third-party service costs (payment processor fees, API call limits).
224
+
225
+ **Team constraints:**
226
+ - Team size and skill composition.
227
+ - Available work hours (full-time vs part-time contributors).
228
+ - Technology familiarity (learning curve for new tech).
229
+
230
+ **Regulatory constraints:**
231
+ - Data privacy (GDPR, CCPA, HIPAA).
232
+ - Financial regulations (PCI DSS, SOX).
233
+ - Accessibility mandates (ADA, WCAG requirements).
234
+ - Industry-specific regulations.
235
+
236
+ ### How Constraints Affect Downstream Artifacts
237
+
238
+ Each constraint should be traceable to architectural decisions:
239
+ - "Must use PostgreSQL" → ADR for database choice.
240
+ - "Must comply with GDPR" → Data model includes consent tracking, API includes data export/delete.
241
+ - "Team of 3 developers" → Implementation tasks sized for 3 parallel workers.
242
+ - "Launch by March 1" → Feature scope fits within timeline.
243
+
244
+ ## Non-Functional Requirements
245
+
246
+ NFRs define HOW the system should behave, not WHAT it should do. They are frequently under-specified in PRDs, which leads to expensive rework.
247
+
248
+ ### Quantified NFRs
249
+
250
+ **Good:**
251
+ - "Page load time: p95 under 2 seconds on 4G mobile connection."
252
+ - "API response time: p95 under 200ms for read operations, p95 under 500ms for write operations."
253
+ - "Availability: 99.9% uptime measured monthly (43 minutes of downtime per month allowed)."
254
+ - "Concurrent users: Support 10,000 simultaneous authenticated sessions."
255
+ - "Data retention: Transaction records retained for 7 years per financial regulation."
256
+
257
+ **Bad:**
258
+ - "The system should be fast." (How fast? Under what conditions?)
259
+ - "High availability." (What percentage? How is it measured?)
260
+ - "Scalable." (To what? 100 users? 1 million users? What is the growth curve?)
261
+ - "Secure." (Against what threats? To what standard?)
262
+
263
+ ### NFR Categories Checklist
264
+
265
+ - [ ] **Performance** — Response times (p50, p95, p99), throughput, page load times
266
+ - [ ] **Scalability** — Concurrent users, data volume, growth rate
267
+ - [ ] **Availability** — Uptime target, maintenance windows, failover requirements
268
+ - [ ] **Security** — Authentication requirements, encryption, audit logging, compliance standards
269
+ - [ ] **Accessibility** — WCAG level, screen reader support, keyboard navigation
270
+ - [ ] **Data** — Retention periods, backup frequency, recovery point objective (RPO), recovery time objective (RTO)
271
+ - [ ] **Internationalization** — Languages, locales, character sets, date/number formats
272
+ - [ ] **Browser/device support** — Minimum browser versions, mobile support, responsive breakpoints
273
+ - [ ] **Monitoring** — What needs to be observable? Alerting thresholds?
274
+
275
+ ## Competitive Context
276
+
277
+ ### What to Include
278
+
279
+ - **What exists** — Name competing products and what they do well.
280
+ - **How this is different** — Specific differentiators, not "we're better."
281
+ - **Why users would switch** — What pain does this product solve that competitors do not?
282
+ - **What to learn from** — Features or patterns from competitors worth adopting.
283
+
284
+ ### What NOT to Include
285
+
286
+ - Exhaustive competitor feature matrices (belongs in market research, not PRD).
287
+ - Competitive strategy or positioning (belongs in business plan, not PRD).
288
+ - Pricing comparisons (unless pricing is a product feature).
289
+
290
+ ## Common PRD Failures
291
+
292
+ ### The "Requirements as Solutions" Failure
293
+ PRD prescribes technical solutions instead of stating requirements. "Use Redis for caching" belongs in architecture, not the PRD. The PRD should say "response time under 200ms" — how to achieve that is an architectural decision.
294
+
295
+ ### The "Missing Sad Path" Failure
296
+ PRD describes only happy paths. What happens when payment fails? When the user's session expires during checkout? When the network drops? When the form has invalid data? Every user action that can fail should have at least a sentence about what happens.
297
+
298
+ ### The "Everyone Is a User" Failure
299
+ PRD addresses "users" as a monolith instead of identifying distinct personas with distinct needs. Admins, end users, API consumers, and support staff have different requirements.
300
+
301
+ ### The "Implied API" Failure
302
+ PRD describes a UI but implies an API without stating it. "Users can view their order history" implies GET /orders, data model for orders, pagination, filtering, sorting. These implications should be explicit in the PRD.
303
+
304
+ ### The "No Boundaries" Failure
305
+ PRD states what is in scope but never states what is out. Every documentation phase becomes a scope negotiation.
306
+
307
+ ### The "Success Is Shipping" Failure
308
+ PRD has no success criteria beyond "launch the product." Without measurable outcomes, there is no way to know if the product solved the problem.
309
+
310
+ ## PRD Quality Checklist
311
+
312
+ Before considering a PRD complete:
313
+
314
+ - [ ] Problem statement is specific and testable
315
+ - [ ] Target users are identified with personas
316
+ - [ ] Features are scoped with in/out/deferred lists
317
+ - [ ] Features are prioritized (MoSCoW or equivalent)
318
+ - [ ] Success criteria are measurable with target values
319
+ - [ ] Constraints are documented (technical, timeline, budget, team, regulatory)
320
+ - [ ] NFRs are quantified
321
+ - [ ] Error scenarios and edge cases are addressed (at least at high level)
322
+ - [ ] Competitive context is provided
323
+ - [ ] The PRD says WHAT, not HOW
324
+ - [ ] Every stakeholder group has been considered (end users, admins, support, integrators)