@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,337 @@
1
+ ---
2
+ name: user-stories
3
+ description: Expert knowledge for translating product requirements into well-formed user stories
4
+ topics: [user-stories, personas, acceptance-criteria, story-splitting, INVEST, epics, traceability]
5
+ ---
6
+
7
+ ## Story Anatomy
8
+
9
+ The standard user story template captures who wants what and why:
10
+
11
+ **"As a [persona], I want [action], so that [outcome]."**
12
+
13
+ Each part serves a purpose:
14
+ - **Persona** — the specific user role, not "a user." Personas come from the PRD.
15
+ - **Action** — what the user wants to do, described in their language, not implementation terms.
16
+ - **Outcome** — the value they get. This is the most important part — it answers "why bother?"
17
+
18
+ **Good stories:**
19
+ - "As a teacher, I want to assign homework to a class, so that students have practice material outside of class."
20
+ - "As a new user, I want to see a guided tour on first login, so that I understand the core features without reading documentation."
21
+
22
+ **Bad stories:**
23
+ - "As a user, I want the system to work." — No specific persona, no specific action, no testable outcome.
24
+ - "As a developer, I want a REST endpoint for user creation." — Implementation story. The developer is not the user. Rewrite as: "As a new visitor, I want to create an account, so that I can save my preferences."
25
+ - "As a user, I want good performance." — Not actionable. Rewrite with specifics: "As a returning user, I want the dashboard to load within 2 seconds, so that I can start my daily workflow immediately."
26
+
27
+ **When to deviate from the template:**
28
+ - **System stories** describe behavior with no direct user action: "When a payment fails, the system retries twice with exponential backoff and notifies the user after final failure." These are acceptable for background processes, scheduled jobs, and automated workflows.
29
+ - **Constraint stories** capture non-functional requirements: "All API responses must complete within 500ms at p95 under normal load." These complement functional stories rather than replacing them.
30
+
31
+ ---
32
+
33
+ ## INVEST Criteria
34
+
35
+ Every story should satisfy INVEST. Use these criteria to evaluate story quality.
36
+
37
+ ### Independent
38
+
39
+ The story can be developed and delivered without requiring another story to be done first. Stories with hard dependencies should be split or reordered.
40
+
41
+ - **Pass:** "As a user, I want to search products by name" — works regardless of whether filtering or sorting stories are done.
42
+ - **Fail:** "As a user, I want to edit my profile photo" that silently depends on "As a user, I want to upload files" — if upload isn't done, this story is blocked.
43
+ - **Fix:** Make the dependency explicit and consider whether the stories should be combined or the shared functionality extracted.
44
+
45
+ ### Negotiable
46
+
47
+ The story describes what and why, not how. Implementation details are negotiated during development, not locked in the story.
48
+
49
+ - **Pass:** "As a user, I want to receive notifications about order status changes."
50
+ - **Fail:** "As a user, I want to receive WebSocket push notifications rendered as toast components in the bottom-right corner using the Sonner library."
51
+ - **Fix:** Move implementation details to technical notes. The story stays focused on user value.
52
+
53
+ ### Valuable
54
+
55
+ The story delivers value to a user or stakeholder. Every story should have a clear beneficiary.
56
+
57
+ - **Pass:** "As a shopper, I want to save items for later, so that I can return and purchase them without searching again."
58
+ - **Fail:** "As a developer, I want to refactor the authentication module." — No user value. This is a technical task, not a story.
59
+ - **Fix:** Frame technical work in terms of user value, or track it as a task rather than a story.
60
+
61
+ ### Estimable
62
+
63
+ The team (or agent) can estimate the effort. If a story is too vague to estimate, it needs more conversation or splitting.
64
+
65
+ - **Pass:** "As a user, I want to reset my password via email" — well-understood pattern, estimable.
66
+ - **Fail:** "As a user, I want AI-powered recommendations" — too vague. What data? What algorithm? What UI?
67
+ - **Fix:** Split into smaller, more specific stories until each is estimable.
68
+
69
+ ### Small
70
+
71
+ A story should be implementable in 1-3 focused agent sessions. Larger stories need splitting.
72
+
73
+ - **Pass:** "As a user, I want to update my display name."
74
+ - **Fail:** "As a user, I want a complete e-commerce checkout flow with cart, address, payment, confirmation, and order tracking."
75
+ - **Fix:** Split by workflow step: cart management, address entry, payment processing, order confirmation, order tracking.
76
+
77
+ ### Testable
78
+
79
+ Acceptance criteria have clear pass/fail outcomes. If you can't write a test for it, the story isn't ready.
80
+
81
+ - **Pass:** "Given a user with items in cart, when they click checkout, then they see the address form with their saved addresses pre-populated."
82
+ - **Fail:** "The checkout should be intuitive." — Not testable.
83
+ - **Fix:** Replace subjective language with observable behavior.
84
+
85
+ ---
86
+
87
+ ## Persona Definition
88
+
89
+ Personas are extracted from the PRD's user/stakeholder descriptions. Each persona is a specific user type with distinct goals, not a generic role label.
90
+
91
+ **Goal-driven personas vs. role labels:**
92
+ - Role label: "Admin" — too generic. What does the admin want?
93
+ - Goal-driven: "School Administrator (Ms. Chen) — manages teacher accounts, reviews class assignments, generates progress reports for the district. Goals: minimize time on administrative tasks, ensure compliance with district reporting requirements."
94
+
95
+ **When personas collapse:**
96
+ - If two personas have identical goals and workflows, they're the same persona. An "Admin" who is also a regular "User" is two personas only if their goals differ when wearing each hat.
97
+ - Don't create personas for system actors (database, scheduler, API consumer) — these are system stories, not persona stories.
98
+
99
+ **Persona template:**
100
+ - **Name** — a human name for memorability (e.g., "Alex the Admin")
101
+ - **Role** — their relationship to the product
102
+ - **Goals** — what they're trying to accomplish (2-3 primary goals)
103
+ - **Pain points** — what frustrates them today (informs acceptance criteria)
104
+ - **Context** — when, where, how they use the product (informs UX decisions)
105
+
106
+ ---
107
+
108
+ ## Epic Structure
109
+
110
+ Epics group related stories by user journey, not by system component.
111
+
112
+ **Group by journey, not by layer:**
113
+ - **Good:** "Account Setup" epic (registration, email verification, profile creation, preferences) — follows the user's path.
114
+ - **Bad:** "API Endpoints" epic (user CRUD, product CRUD, order CRUD) — groups by technical layer, not user value.
115
+
116
+ **Epic sizing:**
117
+ - A typical epic contains 3-8 stories. Fewer than 3 suggests the epic is too narrow — consider merging with a related epic. More than 8 suggests the epic covers too much — look for natural split points.
118
+
119
+ **When to split epics:**
120
+ - Different personas drive different parts of the epic
121
+ - The epic spans distinct phases of the user journey (onboarding vs. daily use vs. administration)
122
+ - Half the stories have no dependencies on the other half
123
+
124
+ **Epic naming:**
125
+ - Use verb phrases that describe the user goal: "Managing Team Members," "Processing Payments," "Onboarding New Users."
126
+ - Avoid technical names: "REST API," "Database Layer," "Auth Module."
127
+
128
+ ---
129
+
130
+ ## Acceptance Criteria Patterns
131
+
132
+ Acceptance criteria define when a story is done. They are the contract between story and implementation.
133
+
134
+ ### Given/When/Then Format
135
+
136
+ The standard format for acceptance criteria scenarios:
137
+
138
+ ```
139
+ Given [precondition/context]
140
+ When [action/trigger]
141
+ Then [expected outcome]
142
+ ```
143
+
144
+ **Example:**
145
+ ```
146
+ Given a registered user on the login page
147
+ When they enter valid credentials and click "Sign In"
148
+ Then they are redirected to the dashboard and see a welcome message with their name
149
+ ```
150
+
151
+ ### Parameterized Scenarios
152
+
153
+ When the same behavior applies to multiple variations, use parameterized scenarios:
154
+
155
+ ```
156
+ Given a user with role [admin | member | viewer]
157
+ When they access the settings page
158
+ Then they see [all settings | team settings only | read-only view]
159
+ ```
160
+
161
+ ### Negative Scenarios
162
+
163
+ Every happy path should have corresponding error scenarios:
164
+
165
+ ```
166
+ Given a registered user on the login page
167
+ When they enter an incorrect password
168
+ Then they see "Invalid credentials" and the password field is cleared
169
+ And after 5 failed attempts, the account is locked for 15 minutes
170
+ ```
171
+
172
+ ### Boundary Conditions
173
+
174
+ Test edges, not just middles:
175
+
176
+ ```
177
+ Given a user creating a project name
178
+ When they enter exactly 100 characters (the maximum)
179
+ Then the name is accepted
180
+ When they enter 101 characters
181
+ Then they see "Name must be 100 characters or fewer" and the extra character is rejected
182
+ ```
183
+
184
+ ### Acceptance Criteria vs. Test Cases
185
+
186
+ - **Acceptance criteria** define WHAT should happen (business-level behavior)
187
+ - **Test cases** define HOW to verify it (technical-level steps)
188
+ - Stories contain acceptance criteria. Test cases are derived later during implementation.
189
+
190
+ ---
191
+
192
+ ## Story Splitting Heuristics
193
+
194
+ When a story is too large, use these patterns to split it into smaller, independently valuable stories.
195
+
196
+ ### By Workflow Step
197
+
198
+ Before: "As a user, I want to complete the checkout process."
199
+ After:
200
+ - "As a shopper, I want to review my cart before checkout."
201
+ - "As a shopper, I want to enter my shipping address."
202
+ - "As a shopper, I want to select a payment method and pay."
203
+ - "As a shopper, I want to see an order confirmation."
204
+
205
+ ### By Data Variation
206
+
207
+ Before: "As a user, I want to create posts."
208
+ After:
209
+ - "As a user, I want to create text posts."
210
+ - "As a user, I want to create posts with images."
211
+ - "As a user, I want to create posts with embedded videos."
212
+
213
+ ### By Operation (CRUD)
214
+
215
+ Before: "As an admin, I want to manage users."
216
+ After:
217
+ - "As an admin, I want to invite new users."
218
+ - "As an admin, I want to view the user list with search and filters."
219
+ - "As an admin, I want to edit user roles."
220
+ - "As an admin, I want to deactivate user accounts."
221
+
222
+ ### By User Role
223
+
224
+ Before: "As a user, I want to access the dashboard."
225
+ After:
226
+ - "As a team member, I want to see my assigned tasks on the dashboard."
227
+ - "As a team lead, I want to see team progress metrics on the dashboard."
228
+ - "As an admin, I want to see system health and usage stats on the dashboard."
229
+
230
+ ### By Happy/Sad Path
231
+
232
+ Before: "As a user, I want to upload a document."
233
+ After:
234
+ - "As a user, I want to upload a PDF or Word document."
235
+ - "As a user, I want to see clear error messages when upload fails (wrong format, too large, network error)."
236
+
237
+ ---
238
+
239
+ ## Scope Boundaries
240
+
241
+ Every story should explicitly state what it does NOT include to prevent scope creep.
242
+
243
+ **Format:**
244
+ ```
245
+ **Scope Boundary:** This story does NOT include:
246
+ - Bulk assignment (covered by US-045)
247
+ - Email notifications for assignments (covered by US-023)
248
+ - Grading submitted assignments (separate epic)
249
+ ```
250
+
251
+ **Why scope boundaries matter:**
252
+ - During implementation, agents can confidently stop when they hit a boundary
253
+ - Stories that overlap are discovered early (and consolidated or clarified)
254
+ - Scope boundaries flow downstream into task boundaries
255
+
256
+ **Relationship to MoSCoW:**
257
+ - "Won't" items in MoSCoW are scope boundaries at the PRD level
258
+ - Story-level scope boundaries are more granular — they clarify what THIS story excludes even if another story covers it
259
+
260
+ ---
261
+
262
+ ## PRD-to-Story Traceability
263
+
264
+ Every PRD feature must map to at least one user story. This is a non-negotiable coverage requirement.
265
+
266
+ **How to ensure coverage:**
267
+ 1. Extract every distinct feature and requirement from the PRD
268
+ 2. For each, identify the corresponding user story or stories
269
+ 3. Flag any PRD feature with no story — these are coverage gaps
270
+ 4. Flag any story that doesn't trace back to a PRD feature — these may be scope creep
271
+
272
+ **Handling compound requirements:**
273
+ - PRD: "Users can create, edit, and delete projects." → Split into 3 stories (one per operation).
274
+ - PRD: "The system supports SSO and email/password authentication." → Two stories (one per auth method).
275
+
276
+ **Surfacing implicit requirements:**
277
+ - Every user action that can fail needs an error handling story or acceptance criteria
278
+ - Every data entry point needs validation acceptance criteria
279
+ - Accessibility requirements (keyboard navigation, screen readers) apply to all UI stories
280
+ - Loading states, empty states, and offline behavior are often implied but not stated
281
+
282
+ **Traceability notation:**
283
+ - Use IDs to create a traceable chain: PRD-REQ-001 → US-001 → (downstream: Task BD-42)
284
+ - Story IDs (US-001, US-002, ...) are stable — they persist through updates and are referenced by downstream phases
285
+
286
+ ---
287
+
288
+ ## Story Dependencies
289
+
290
+ Some stories must be implemented before others. Document these explicitly.
291
+
292
+ **Blocked-by vs. informed-by:**
293
+ - **Blocked-by:** Story B cannot start until Story A is complete. A produces something B requires (a database table, an API endpoint, a shared component).
294
+ - **Informed-by:** Story B benefits from knowing how Story A was implemented, but can proceed independently with reasonable assumptions.
295
+
296
+ Only blocked-by dependencies should be formal constraints. Informed-by relationships are noted but don't block.
297
+
298
+ **How dependencies feed into task decomposition:**
299
+ - Story dependencies become task dependencies in the implementation tasks step
300
+ - Chains of 3+ dependent stories should be reviewed — long chains limit parallelization
301
+ - If many stories depend on the same story, that story is on the critical path and should be prioritized
302
+
303
+ **Keeping dependency chains short:**
304
+ - If Story C depends on B which depends on A, ask: can C depend directly on A instead? Can C's dependency be satisfied with a mock or interface?
305
+ - Extract shared infrastructure into its own story at the front of the chain rather than letting it hide inside a feature story
306
+
307
+ ---
308
+
309
+ ## Common Pitfalls
310
+
311
+ ### Implementation Stories
312
+ - **Problem:** "As a developer, I want a REST endpoint for user CRUD."
313
+ - **Fix:** Rewrite from the user's perspective: "As a new visitor, I want to create an account with my email." The REST endpoint is an implementation detail, not a user story.
314
+
315
+ ### Stories Too Large
316
+ - **Problem:** A story with 10+ acceptance criteria spanning multiple workflows.
317
+ - **Fix:** Split using the heuristics above. Each resulting story should have 3-5 acceptance criteria.
318
+
319
+ ### Vague Acceptance Criteria
320
+ - **Problem:** "The feature works correctly and is user-friendly."
321
+ - **Fix:** Replace with Given/When/Then scenarios. Define "correctly" and "user-friendly" in observable terms.
322
+
323
+ ### Missing Personas
324
+ - **Problem:** Stories reference undefined personas ("a power user," "the operator").
325
+ - **Fix:** Map back to PRD personas. If the PRD doesn't define this persona, either add it to the PRD or use an existing persona.
326
+
327
+ ### Stories Without Value Statements
328
+ - **Problem:** "As a user, I want to click the submit button."
329
+ - **Fix:** Add the "so that" clause: "As a user, I want to submit my feedback form, so that the support team can address my issue."
330
+
331
+ ### Duplicate Stories Across Epics
332
+ - **Problem:** "Upload profile photo" appears in both "Account Setup" and "Profile Management" epics.
333
+ - **Fix:** Choose one epic. Add a scope boundary in the other epic referencing the canonical story.
334
+
335
+ ### Confusing Acceptance Criteria with Implementation Steps
336
+ - **Problem:** "1. Create a POST /api/users endpoint. 2. Validate email format with regex. 3. Hash password with bcrypt."
337
+ - **Fix:** These are implementation steps, not acceptance criteria. Rewrite as: "Given a valid email and password, when the user submits registration, then their account is created and they receive a confirmation email."
@@ -0,0 +1,171 @@
1
+ ---
2
+ name: user-story-innovation
3
+ description: Techniques for discovering UX enhancements and innovation opportunities in user stories
4
+ topics: [innovation, ux-enhancements, user-stories, gap-analysis, differentiators]
5
+ ---
6
+
7
+ ## Scope Boundary
8
+
9
+ This knowledge covers UX-level improvements only — making existing features better, not adding new features. Feature-level innovation belongs in PRD innovation (`innovate-prd`). If an enhancement requires a new PRD section, it is out of scope for user story innovation.
10
+
11
+ **In scope:**
12
+ - Smart defaults that reduce user effort on existing features
13
+ - Better error handling and recovery within existing flows
14
+ - Accessibility improvements to existing stories
15
+ - Progressive disclosure within existing interfaces
16
+ - AI-native enhancements to existing workflows
17
+
18
+ **Out of scope:**
19
+ - New features not covered by any PRD requirement
20
+ - New user personas not defined in the PRD
21
+ - Major architectural additions (new services, new databases)
22
+ - Scope expansion that changes the product's purpose
23
+
24
+ ---
25
+
26
+ ## High-Value Low-Effort Enhancements
27
+
28
+ These patterns add significant user value for minimal implementation effort. Look for them in every story.
29
+
30
+ ### Smart Defaults
31
+ Pre-fill fields based on context, history, or the most common choice. Users should only need to change what's different, not re-enter what's predictable.
32
+ - Forms pre-populated from user profile or previous submissions
33
+ - Timezone auto-detected from browser
34
+ - Default selections based on user's most frequent choice
35
+ - "Same as billing address" for shipping
36
+
37
+ ### Inline Validation
38
+ Give immediate feedback on input rather than waiting for form submission. Catches errors early and reduces frustration.
39
+ - Email format validation as you type
40
+ - Password strength indicator
41
+ - Username availability check before submission
42
+ - Character count approaching limit
43
+
44
+ ### Keyboard Shortcuts
45
+ Power users want to move fast. Keyboard shortcuts for frequent actions reduce friction.
46
+ - Common patterns: Ctrl/Cmd+S (save), Ctrl/Cmd+K (search), Escape (close/cancel)
47
+ - Arrow keys for list navigation
48
+ - Tab through form fields with logical ordering
49
+
50
+ ### Progressive Disclosure
51
+ Don't overwhelm users on first encounter. Reveal complexity as they need it.
52
+ - "Advanced options" expandable sections
53
+ - Onboarding wizards that introduce features over time
54
+ - Contextual help that appears when users hover or focus
55
+ - Default simple view with "show more" for detail
56
+
57
+ ### Leveraging Existing Data
58
+ Data already being collected that could power useful features without new infrastructure.
59
+ - Activity data → streak tracking, usage insights, "you did X this week" summaries
60
+ - Search history → suggested searches, "recently viewed"
61
+ - Error patterns → proactive warnings ("this field usually causes issues — here's a tip")
62
+
63
+ ### Undo/Redo
64
+ Where destructive actions exist, add undo before requiring confirmation dialogs.
65
+ - Soft delete with "undo" toast (better UX than "are you sure?" dialogs)
66
+ - Undo last edit in text/content editing
67
+ - "Restore defaults" for settings changes
68
+
69
+ ### Batch Operations
70
+ Where users repeat the same single action multiple times, offer batch alternatives.
71
+ - Select multiple items → bulk delete, bulk archive, bulk assign
72
+ - "Apply to all" option in settings
73
+ - Bulk import/export for data entry
74
+
75
+ ---
76
+
77
+ ## Differentiators
78
+
79
+ These make the product stand out from alternatives. Not every product needs them, but they're worth considering.
80
+
81
+ ### "Wow" Moments
82
+ Small touches that make users want to share the product.
83
+ - Satisfying animations on task completion
84
+ - Personalized empty states that don't feel like error pages
85
+ - Easter eggs for power users who discover hidden features
86
+ - Thoughtful microcopy that shows personality
87
+
88
+ ### AI-Native Features
89
+ Capabilities that wouldn't exist without AI, not AI bolted onto traditional features.
90
+ - Natural language search that understands intent, not just keywords
91
+ - Auto-categorization of user-created content
92
+ - Smart suggestions based on context ("users who did X often do Y next")
93
+ - Draft generation or auto-completion for text-heavy inputs
94
+
95
+ ### Personalization Without Configuration
96
+ The product adapts to the user without them having to set preferences.
97
+ - Recently used items surfaced first
98
+ - Layout adapts to usage patterns
99
+ - Notification frequency auto-tuned based on engagement
100
+ - Content ordering reflects individual priorities
101
+
102
+ ---
103
+
104
+ ## Defensive Gaps
105
+
106
+ Things users expect but specs often miss. These are especially important for v1 launches.
107
+
108
+ ### Accessibility
109
+ - WCAG AA compliance as minimum baseline
110
+ - Keyboard navigation for all interactive elements
111
+ - Screen reader compatibility with proper ARIA labels
112
+ - Sufficient color contrast (4.5:1 for normal text, 3:1 for large text)
113
+ - Focus indicators visible in all themes
114
+
115
+ ### Mobile Responsiveness (if web)
116
+ - Touch targets minimum 44x44px
117
+ - Readable text without zooming
118
+ - Forms that work with mobile keyboards
119
+ - Navigation patterns that work with one hand
120
+
121
+ ### Offline/Degraded Mode
122
+ - What happens when the network drops mid-action?
123
+ - Queue writes for sync when connection returns
124
+ - Show stale data with "last updated" indicator rather than blank screens
125
+ - Graceful error messages that explain what happened and what to do
126
+
127
+ ### Performance Under Load
128
+ - Loading states for every async operation (never leave users staring at nothing)
129
+ - Pagination or virtual scrolling for large lists
130
+ - Image lazy loading and appropriate sizing
131
+ - Optimistic UI updates where safe
132
+
133
+ ### Error Recovery
134
+ - Never lose user work — auto-save drafts, preserve form state on error
135
+ - Clear error messages that say what happened AND what to do next
136
+ - Retry logic for transient failures with user feedback
137
+ - Graceful degradation when a non-critical feature fails
138
+
139
+ ### Empty States
140
+ - First-time experience should guide, not confuse
141
+ - Empty lists show "here's how to add your first X" rather than blank space
142
+ - Zero-data dashboards show sample data or onboarding steps
143
+ - Search with no results suggests alternatives
144
+
145
+ ---
146
+
147
+ ## Evaluation Framework
148
+
149
+ For each innovation suggestion, evaluate before proposing to the user.
150
+
151
+ ### Cost Assessment
152
+ - **Trivial** (< 1 task): Can be added to an existing story's acceptance criteria. No new stories needed.
153
+ - **Moderate** (1-3 tasks): Requires new stories or significant additions to existing stories. Scoped to a single epic.
154
+ - **Significant** (4+ tasks): Requires multiple new stories, possibly a new epic. May affect architecture.
155
+
156
+ ### Impact Assessment
157
+ - **Nice-to-have**: Polishes the experience but users wouldn't notice if absent.
158
+ - **Noticeable improvement**: Users would appreciate it. Reduces friction in common workflows.
159
+ - **Significant differentiator**: Sets the product apart. Users would choose this product partly because of this feature.
160
+
161
+ ### Decision Framework
162
+ - **Must-have for v1**: High impact + trivial or moderate cost. Not adding it would be a visible gap.
163
+ - **Backlog for later**: High impact + significant cost, or moderate impact at any cost. Valuable but not blocking launch.
164
+ - **Reject**: Low impact regardless of cost, or out of scope for the PRD.
165
+
166
+ ### Presenting to the User
167
+ Group related suggestions for efficient decision-making. For each group:
168
+ 1. Describe the enhancement and its user benefit
169
+ 2. State the cost (trivial/moderate/significant)
170
+ 3. State your recommendation (must-have/backlog/reject)
171
+ 4. Wait for approval before integrating into stories