@planu/cli 0.28.0 → 0.30.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 (297) hide show
  1. package/dist/config/model-routing-rules.json +98 -0
  2. package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -1
  3. package/dist/engine/ai-cost-estimator/core.js +2 -202
  4. package/dist/engine/ai-cost-estimator/core.js.map +1 -1
  5. package/dist/engine/ai-cost-estimator/recommender.d.ts +8 -0
  6. package/dist/engine/ai-cost-estimator/recommender.d.ts.map +1 -0
  7. package/dist/engine/ai-cost-estimator/recommender.js +94 -0
  8. package/dist/engine/ai-cost-estimator/recommender.js.map +1 -0
  9. package/dist/engine/ai-cost-estimator/spec-loader.d.ts +13 -0
  10. package/dist/engine/ai-cost-estimator/spec-loader.d.ts.map +1 -0
  11. package/dist/engine/ai-cost-estimator/spec-loader.js +102 -0
  12. package/dist/engine/ai-cost-estimator/spec-loader.js.map +1 -0
  13. package/dist/engine/ci-generator/planu-config.d.ts +7 -0
  14. package/dist/engine/ci-generator/planu-config.d.ts.map +1 -0
  15. package/dist/engine/ci-generator/planu-config.js +40 -0
  16. package/dist/engine/ci-generator/planu-config.js.map +1 -0
  17. package/dist/engine/ci-generator/planu-steps.d.ts +11 -0
  18. package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -0
  19. package/dist/engine/ci-generator/planu-steps.js +292 -0
  20. package/dist/engine/ci-generator/planu-steps.js.map +1 -0
  21. package/dist/engine/code-transforms/transform-engine.d.ts +7 -0
  22. package/dist/engine/code-transforms/transform-engine.d.ts.map +1 -0
  23. package/dist/engine/code-transforms/transform-engine.js +67 -0
  24. package/dist/engine/code-transforms/transform-engine.js.map +1 -0
  25. package/dist/engine/code-transforms/typescript/add-error-handling.d.ts +6 -0
  26. package/dist/engine/code-transforms/typescript/add-error-handling.d.ts.map +1 -0
  27. package/dist/engine/code-transforms/typescript/add-error-handling.js +92 -0
  28. package/dist/engine/code-transforms/typescript/add-error-handling.js.map +1 -0
  29. package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts +6 -0
  30. package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts.map +1 -0
  31. package/dist/engine/code-transforms/typescript/add-jsdoc.js +83 -0
  32. package/dist/engine/code-transforms/typescript/add-jsdoc.js.map +1 -0
  33. package/dist/engine/code-transforms/typescript/add-types.d.ts +3 -0
  34. package/dist/engine/code-transforms/typescript/add-types.d.ts.map +1 -0
  35. package/dist/engine/code-transforms/typescript/add-types.js +182 -0
  36. package/dist/engine/code-transforms/typescript/add-types.js.map +1 -0
  37. package/dist/engine/code-transforms/typescript/ast-utils.d.ts +38 -0
  38. package/dist/engine/code-transforms/typescript/ast-utils.d.ts.map +1 -0
  39. package/dist/engine/code-transforms/typescript/ast-utils.js +90 -0
  40. package/dist/engine/code-transforms/typescript/ast-utils.js.map +1 -0
  41. package/dist/engine/code-transforms/typescript/extract-interface.d.ts +6 -0
  42. package/dist/engine/code-transforms/typescript/extract-interface.d.ts.map +1 -0
  43. package/dist/engine/code-transforms/typescript/extract-interface.js +103 -0
  44. package/dist/engine/code-transforms/typescript/extract-interface.js.map +1 -0
  45. package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts +3 -0
  46. package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts.map +1 -0
  47. package/dist/engine/code-transforms/typescript/modernize-syntax.js +213 -0
  48. package/dist/engine/code-transforms/typescript/modernize-syntax.js.map +1 -0
  49. package/dist/engine/code-transforms/typescript/rename-symbol.d.ts +8 -0
  50. package/dist/engine/code-transforms/typescript/rename-symbol.d.ts.map +1 -0
  51. package/dist/engine/code-transforms/typescript/rename-symbol.js +40 -0
  52. package/dist/engine/code-transforms/typescript/rename-symbol.js.map +1 -0
  53. package/dist/engine/mermaid/core.d.ts +18 -0
  54. package/dist/engine/mermaid/core.d.ts.map +1 -0
  55. package/dist/engine/mermaid/core.js +88 -0
  56. package/dist/engine/mermaid/core.js.map +1 -0
  57. package/dist/engine/mermaid/diagram-generators.d.ts +22 -0
  58. package/dist/engine/mermaid/diagram-generators.d.ts.map +1 -0
  59. package/dist/engine/mermaid/diagram-generators.js +139 -0
  60. package/dist/engine/mermaid/diagram-generators.js.map +1 -0
  61. package/dist/engine/mermaid/helpers.d.ts +8 -0
  62. package/dist/engine/mermaid/helpers.d.ts.map +1 -0
  63. package/dist/engine/mermaid/helpers.js +61 -0
  64. package/dist/engine/mermaid/helpers.js.map +1 -0
  65. package/dist/engine/mermaid-generator.d.ts +2 -37
  66. package/dist/engine/mermaid-generator.d.ts.map +1 -1
  67. package/dist/engine/mermaid-generator.js +4 -276
  68. package/dist/engine/mermaid-generator.js.map +1 -1
  69. package/dist/engine/model-router/complexity-analyzer.d.ts +26 -0
  70. package/dist/engine/model-router/complexity-analyzer.d.ts.map +1 -0
  71. package/dist/engine/model-router/complexity-analyzer.js +182 -0
  72. package/dist/engine/model-router/complexity-analyzer.js.map +1 -0
  73. package/dist/engine/model-router/cost-estimator.d.ts +6 -0
  74. package/dist/engine/model-router/cost-estimator.d.ts.map +1 -0
  75. package/dist/engine/model-router/cost-estimator.js +60 -0
  76. package/dist/engine/model-router/cost-estimator.js.map +1 -0
  77. package/dist/engine/model-router/historical-learner.d.ts +26 -0
  78. package/dist/engine/model-router/historical-learner.d.ts.map +1 -0
  79. package/dist/engine/model-router/historical-learner.js +91 -0
  80. package/dist/engine/model-router/historical-learner.js.map +1 -0
  81. package/dist/engine/model-router/rules-engine.d.ts +13 -0
  82. package/dist/engine/model-router/rules-engine.d.ts.map +1 -0
  83. package/dist/engine/model-router/rules-engine.js +142 -0
  84. package/dist/engine/model-router/rules-engine.js.map +1 -0
  85. package/dist/engine/spec-coverage/criteria-mapper.d.ts +1 -2
  86. package/dist/engine/spec-coverage/criteria-mapper.d.ts.map +1 -1
  87. package/dist/engine/spec-coverage/criteria-mapper.js +4 -203
  88. package/dist/engine/spec-coverage/criteria-mapper.js.map +1 -1
  89. package/dist/engine/spec-coverage/keyword-extractor.d.ts +10 -0
  90. package/dist/engine/spec-coverage/keyword-extractor.d.ts.map +1 -0
  91. package/dist/engine/spec-coverage/keyword-extractor.js +147 -0
  92. package/dist/engine/spec-coverage/keyword-extractor.js.map +1 -0
  93. package/dist/engine/spec-coverage/test-matchers.d.ts +9 -0
  94. package/dist/engine/spec-coverage/test-matchers.d.ts.map +1 -0
  95. package/dist/engine/spec-coverage/test-matchers.js +59 -0
  96. package/dist/engine/spec-coverage/test-matchers.js.map +1 -0
  97. package/dist/engine/spec-templates/catalog-extra.d.ts +1 -1
  98. package/dist/engine/spec-templates/catalog-extra.d.ts.map +1 -1
  99. package/dist/engine/spec-templates/catalog-extra.js +8 -363
  100. package/dist/engine/spec-templates/catalog-extra.js.map +1 -1
  101. package/dist/engine/spec-templates/catalog-industry.d.ts +4 -0
  102. package/dist/engine/spec-templates/catalog-industry.d.ts.map +1 -0
  103. package/dist/engine/spec-templates/catalog-industry.js +19 -0
  104. package/dist/engine/spec-templates/catalog-industry.js.map +1 -0
  105. package/dist/engine/spec-templates/catalog.d.ts +1 -1
  106. package/dist/engine/spec-templates/catalog.d.ts.map +1 -1
  107. package/dist/engine/spec-templates/catalog.js +12 -381
  108. package/dist/engine/spec-templates/catalog.js.map +1 -1
  109. package/dist/engine/spec-templates/custom-loader.d.ts +12 -0
  110. package/dist/engine/spec-templates/custom-loader.d.ts.map +1 -0
  111. package/dist/engine/spec-templates/custom-loader.js +99 -0
  112. package/dist/engine/spec-templates/custom-loader.js.map +1 -0
  113. package/dist/engine/spec-templates/index.d.ts +4 -2
  114. package/dist/engine/spec-templates/index.d.ts.map +1 -1
  115. package/dist/engine/spec-templates/index.js +4 -2
  116. package/dist/engine/spec-templates/index.js.map +1 -1
  117. package/dist/engine/spec-templates/query.d.ts +12 -4
  118. package/dist/engine/spec-templates/query.d.ts.map +1 -1
  119. package/dist/engine/spec-templates/query.js +29 -7
  120. package/dist/engine/spec-templates/query.js.map +1 -1
  121. package/dist/engine/spec-templates/renderer.d.ts +27 -2
  122. package/dist/engine/spec-templates/renderer.d.ts.map +1 -1
  123. package/dist/engine/spec-templates/renderer.js +119 -4
  124. package/dist/engine/spec-templates/renderer.js.map +1 -1
  125. package/dist/engine/spec-templates/templates-api-ui.d.ts +6 -0
  126. package/dist/engine/spec-templates/templates-api-ui.d.ts.map +1 -0
  127. package/dist/engine/spec-templates/templates-api-ui.js +215 -0
  128. package/dist/engine/spec-templates/templates-api-ui.js.map +1 -0
  129. package/dist/engine/spec-templates/templates-auth-crud.d.ts +6 -0
  130. package/dist/engine/spec-templates/templates-auth-crud.d.ts.map +1 -0
  131. package/dist/engine/spec-templates/templates-auth-crud.js +225 -0
  132. package/dist/engine/spec-templates/templates-auth-crud.js.map +1 -0
  133. package/dist/engine/spec-templates/templates-data-security.d.ts +6 -0
  134. package/dist/engine/spec-templates/templates-data-security.d.ts.map +1 -0
  135. package/dist/engine/spec-templates/templates-data-security.js +198 -0
  136. package/dist/engine/spec-templates/templates-data-security.js.map +1 -0
  137. package/dist/engine/spec-templates/templates-industry-ecom.d.ts +6 -0
  138. package/dist/engine/spec-templates/templates-industry-ecom.d.ts.map +1 -0
  139. package/dist/engine/spec-templates/templates-industry-ecom.js +209 -0
  140. package/dist/engine/spec-templates/templates-industry-ecom.js.map +1 -0
  141. package/dist/engine/spec-templates/templates-industry-fintech.d.ts +8 -0
  142. package/dist/engine/spec-templates/templates-industry-fintech.d.ts.map +1 -0
  143. package/dist/engine/spec-templates/templates-industry-fintech.js +350 -0
  144. package/dist/engine/spec-templates/templates-industry-fintech.js.map +1 -0
  145. package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts +3 -0
  146. package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts.map +1 -0
  147. package/dist/engine/spec-templates/templates-industry-health-ecom.js +5 -0
  148. package/dist/engine/spec-templates/templates-industry-health-ecom.js.map +1 -0
  149. package/dist/engine/spec-templates/templates-industry-health.d.ts +6 -0
  150. package/dist/engine/spec-templates/templates-industry-health.d.ts.map +1 -0
  151. package/dist/engine/spec-templates/templates-industry-health.js +208 -0
  152. package/dist/engine/spec-templates/templates-industry-health.js.map +1 -0
  153. package/dist/engine/spec-templates/templates-industry-saas.d.ts +8 -0
  154. package/dist/engine/spec-templates/templates-industry-saas.d.ts.map +1 -0
  155. package/dist/engine/spec-templates/templates-industry-saas.js +323 -0
  156. package/dist/engine/spec-templates/templates-industry-saas.js.map +1 -0
  157. package/dist/engine/spec-templates/templates-perf-integration.d.ts +6 -0
  158. package/dist/engine/spec-templates/templates-perf-integration.d.ts.map +1 -0
  159. package/dist/engine/spec-templates/templates-perf-integration.js +226 -0
  160. package/dist/engine/spec-templates/templates-perf-integration.js.map +1 -0
  161. package/dist/engine/vector-store/hnsw.d.ts +37 -0
  162. package/dist/engine/vector-store/hnsw.d.ts.map +1 -0
  163. package/dist/engine/vector-store/hnsw.js +294 -0
  164. package/dist/engine/vector-store/hnsw.js.map +1 -0
  165. package/dist/engine/vector-store/similarity.d.ts +21 -0
  166. package/dist/engine/vector-store/similarity.d.ts.map +1 -0
  167. package/dist/engine/vector-store/similarity.js +86 -0
  168. package/dist/engine/vector-store/similarity.js.map +1 -0
  169. package/dist/engine/vector-store/tfidf.d.ts +35 -0
  170. package/dist/engine/vector-store/tfidf.d.ts.map +1 -0
  171. package/dist/engine/vector-store/tfidf.js +255 -0
  172. package/dist/engine/vector-store/tfidf.js.map +1 -0
  173. package/dist/index.js +6 -0
  174. package/dist/index.js.map +1 -1
  175. package/dist/storage/vector-store/backend-factory.d.ts +9 -0
  176. package/dist/storage/vector-store/backend-factory.d.ts.map +1 -0
  177. package/dist/storage/vector-store/backend-factory.js +33 -0
  178. package/dist/storage/vector-store/backend-factory.js.map +1 -0
  179. package/dist/storage/vector-store/json-fallback.d.ts +21 -0
  180. package/dist/storage/vector-store/json-fallback.d.ts.map +1 -0
  181. package/dist/storage/vector-store/json-fallback.js +85 -0
  182. package/dist/storage/vector-store/json-fallback.js.map +1 -0
  183. package/dist/storage/vector-store/migrator.d.ts +10 -0
  184. package/dist/storage/vector-store/migrator.d.ts.map +1 -0
  185. package/dist/storage/vector-store/migrator.js +139 -0
  186. package/dist/storage/vector-store/migrator.js.map +1 -0
  187. package/dist/storage/vector-store/sqlite-adapter.d.ts +28 -0
  188. package/dist/storage/vector-store/sqlite-adapter.d.ts.map +1 -0
  189. package/dist/storage/vector-store/sqlite-adapter.js +142 -0
  190. package/dist/storage/vector-store/sqlite-adapter.js.map +1 -0
  191. package/dist/tools/ci-planu-handler.d.ts +8 -0
  192. package/dist/tools/ci-planu-handler.d.ts.map +1 -0
  193. package/dist/tools/ci-planu-handler.js +44 -0
  194. package/dist/tools/ci-planu-handler.js.map +1 -0
  195. package/dist/tools/create-spec/constitution-validator.d.ts +4 -0
  196. package/dist/tools/create-spec/constitution-validator.d.ts.map +1 -0
  197. package/dist/tools/create-spec/constitution-validator.js +37 -0
  198. package/dist/tools/create-spec/constitution-validator.js.map +1 -0
  199. package/dist/tools/create-spec/post-creation.d.ts +11 -0
  200. package/dist/tools/create-spec/post-creation.d.ts.map +1 -0
  201. package/dist/tools/create-spec/post-creation.js +48 -0
  202. package/dist/tools/create-spec/post-creation.js.map +1 -0
  203. package/dist/tools/create-spec/spec-builder.d.ts +14 -0
  204. package/dist/tools/create-spec/spec-builder.d.ts.map +1 -0
  205. package/dist/tools/create-spec/spec-builder.js +131 -0
  206. package/dist/tools/create-spec/spec-builder.js.map +1 -0
  207. package/dist/tools/create-spec.d.ts.map +1 -1
  208. package/dist/tools/create-spec.js +42 -172
  209. package/dist/tools/create-spec.js.map +1 -1
  210. package/dist/tools/init-project/handler.d.ts.map +1 -1
  211. package/dist/tools/init-project/handler.js +24 -159
  212. package/dist/tools/init-project/handler.js.map +1 -1
  213. package/dist/tools/init-project/result-builder.d.ts +4 -0
  214. package/dist/tools/init-project/result-builder.d.ts.map +1 -0
  215. package/dist/tools/init-project/result-builder.js +150 -0
  216. package/dist/tools/init-project/result-builder.js.map +1 -0
  217. package/dist/tools/learn.d.ts.map +1 -1
  218. package/dist/tools/learn.js +67 -14
  219. package/dist/tools/learn.js.map +1 -1
  220. package/dist/tools/recommend-model-handler.d.ts +8 -0
  221. package/dist/tools/recommend-model-handler.d.ts.map +1 -0
  222. package/dist/tools/recommend-model-handler.js +65 -0
  223. package/dist/tools/recommend-model-handler.js.map +1 -0
  224. package/dist/tools/register-ci-tools.d.ts.map +1 -1
  225. package/dist/tools/register-ci-tools.js +36 -0
  226. package/dist/tools/register-ci-tools.js.map +1 -1
  227. package/dist/tools/register-model-tools.d.ts +3 -0
  228. package/dist/tools/register-model-tools.d.ts.map +1 -0
  229. package/dist/tools/register-model-tools.js +50 -0
  230. package/dist/tools/register-model-tools.js.map +1 -0
  231. package/dist/tools/register-search-tools.d.ts +7 -0
  232. package/dist/tools/register-search-tools.d.ts.map +1 -0
  233. package/dist/tools/register-search-tools.js +34 -0
  234. package/dist/tools/register-search-tools.js.map +1 -0
  235. package/dist/tools/register-template-tools.d.ts.map +1 -1
  236. package/dist/tools/register-template-tools.js +21 -8
  237. package/dist/tools/register-template-tools.js.map +1 -1
  238. package/dist/tools/register-transform-tools.d.ts +3 -0
  239. package/dist/tools/register-transform-tools.d.ts.map +1 -0
  240. package/dist/tools/register-transform-tools.js +29 -0
  241. package/dist/tools/register-transform-tools.js.map +1 -0
  242. package/dist/tools/semantic-search-handler.d.ts +7 -0
  243. package/dist/tools/semantic-search-handler.d.ts.map +1 -0
  244. package/dist/tools/semantic-search-handler.js +72 -0
  245. package/dist/tools/semantic-search-handler.js.map +1 -0
  246. package/dist/tools/spec-templates.d.ts +1 -1
  247. package/dist/tools/spec-templates.d.ts.map +1 -1
  248. package/dist/tools/spec-templates.js +20 -6
  249. package/dist/tools/spec-templates.js.map +1 -1
  250. package/dist/tools/transform-code-handler.d.ts +7 -0
  251. package/dist/tools/transform-code-handler.d.ts.map +1 -0
  252. package/dist/tools/transform-code-handler.js +58 -0
  253. package/dist/tools/transform-code-handler.js.map +1 -0
  254. package/dist/types/advanced-framework.d.ts +47 -0
  255. package/dist/types/advanced-framework.d.ts.map +1 -0
  256. package/dist/types/advanced-framework.js +3 -0
  257. package/dist/types/advanced-framework.js.map +1 -0
  258. package/dist/types/ci.d.ts +51 -0
  259. package/dist/types/ci.d.ts.map +1 -1
  260. package/dist/types/code-transforms.d.ts +114 -0
  261. package/dist/types/code-transforms.d.ts.map +1 -0
  262. package/dist/types/code-transforms.js +11 -0
  263. package/dist/types/code-transforms.js.map +1 -0
  264. package/dist/types/css-framework.d.ts +110 -0
  265. package/dist/types/css-framework.d.ts.map +1 -0
  266. package/dist/types/css-framework.js +3 -0
  267. package/dist/types/css-framework.js.map +1 -0
  268. package/dist/types/dashboard.d.ts +77 -0
  269. package/dist/types/dashboard.d.ts.map +1 -0
  270. package/dist/types/dashboard.js +2 -0
  271. package/dist/types/dashboard.js.map +1 -0
  272. package/dist/types/index.d.ts +3 -0
  273. package/dist/types/index.d.ts.map +1 -1
  274. package/dist/types/index.js +3 -0
  275. package/dist/types/index.js.map +1 -1
  276. package/dist/types/model-routing.d.ts +127 -0
  277. package/dist/types/model-routing.d.ts.map +1 -0
  278. package/dist/types/model-routing.js +3 -0
  279. package/dist/types/model-routing.js.map +1 -0
  280. package/dist/types/project/core.d.ts +46 -5
  281. package/dist/types/project/core.d.ts.map +1 -1
  282. package/dist/types/spec/core.d.ts +28 -1
  283. package/dist/types/spec/core.d.ts.map +1 -1
  284. package/dist/types/spec/inputs.d.ts +1 -6
  285. package/dist/types/spec/inputs.d.ts.map +1 -1
  286. package/dist/types/spec-templates.d.ts +51 -1
  287. package/dist/types/spec-templates.d.ts.map +1 -1
  288. package/dist/types/ui.d.ts +3 -231
  289. package/dist/types/ui.d.ts.map +1 -1
  290. package/dist/types/ui.js +7 -1
  291. package/dist/types/ui.js.map +1 -1
  292. package/dist/types/vector-store.d.ts +144 -0
  293. package/dist/types/vector-store.d.ts.map +1 -0
  294. package/dist/types/vector-store.js +3 -0
  295. package/dist/types/vector-store.js.map +1 -0
  296. package/package.json +1 -1
  297. package/src/config/model-routing-rules.json +98 -0
@@ -0,0 +1,225 @@
1
+ // engine/spec-templates/templates-auth-crud.ts — Auth JWT + CRUD entity templates.
2
+ // Extracted from catalog.ts to keep file sizes within limits.
3
+ /** JWT Authentication spec template. */
4
+ export const AUTH_JWT_TEMPLATE = {
5
+ id: 'auth-jwt',
6
+ name: 'JWT Authentication',
7
+ category: 'auth',
8
+ description: 'User authentication flow with JWT tokens: login, logout, refresh, and guards.',
9
+ tags: ['auth', 'jwt', 'security', 'session'],
10
+ complexityScore: 'M',
11
+ estimationBase: {
12
+ hoursMin: 16,
13
+ hoursMax: 32,
14
+ notes: 'Includes token rotation, rate limiting, and brute-force protection',
15
+ },
16
+ criteria: [
17
+ { id: 'AC-1', title: 'Login endpoint', required: true },
18
+ { id: 'AC-2', title: 'Protected route guard', required: true },
19
+ { id: 'AC-3', title: 'Token refresh', required: true },
20
+ { id: 'AC-4', title: 'Logout', required: false },
21
+ { id: 'AC-5', title: 'Security requirements', required: true },
22
+ ],
23
+ variables: [
24
+ {
25
+ key: 'EntityName',
26
+ label: 'Entity name',
27
+ description: 'The name of the authenticated entity (User, Admin, Member…)',
28
+ example: 'User',
29
+ required: true,
30
+ },
31
+ {
32
+ key: 'TokenExpiry',
33
+ label: 'Token expiry',
34
+ description: 'JWT access token expiry duration',
35
+ example: '15 minutes',
36
+ required: false,
37
+ defaultValue: '15 minutes',
38
+ },
39
+ ],
40
+ huTemplate: `# HU: JWT Authentication for {{EntityName}}
41
+
42
+ ## User Story
43
+ As a {{EntityName}}, I want to securely authenticate with JWT tokens so that my session is stateless and protected.
44
+
45
+ ## Acceptance Criteria
46
+
47
+ ### AC-1: Login endpoint
48
+ - [ ] POST /auth/login accepts credentials and returns access + refresh tokens
49
+ - [ ] Access token expires after {{TokenExpiry}}
50
+ - [ ] Refresh token stored server-side and rotated on each use
51
+ - [ ] Failed login returns 401 with no sensitive detail
52
+
53
+ ### AC-2: Protected route guard
54
+ - [ ] Every protected endpoint validates the Bearer token
55
+ - [ ] Expired or invalid tokens return 401
56
+ - [ ] Tampered tokens are rejected and logged
57
+
58
+ ### AC-3: Token refresh
59
+ - [ ] POST /auth/refresh issues new access token given a valid refresh token
60
+ - [ ] Refresh token is single-use (rotation strategy)
61
+
62
+ ### AC-4: Logout
63
+ - [ ] POST /auth/logout invalidates the refresh token server-side
64
+ - [ ] Client-side storage is cleared by the caller
65
+
66
+ ### AC-5: Security requirements
67
+ - [ ] Passwords stored as salted hash (bcrypt or Argon2 equivalent)
68
+ - [ ] HTTPS enforced in production
69
+ - [ ] Rate limiting on /auth/login (max 5 requests/minute per IP)
70
+ - [ ] Brute-force protection with account lockout after N failures
71
+
72
+ ## Out of Scope
73
+ - OAuth2 / SSO providers (create separate spec)
74
+ - Multi-factor authentication (create separate spec)
75
+ `,
76
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: JWT Authentication for {{EntityName}}
77
+
78
+ ## Affected Files
79
+ - auth/login handler
80
+ - auth/refresh handler
81
+ - auth/logout handler
82
+ - auth/middleware (token guard)
83
+ - storage/token-store (refresh token persistence)
84
+ - config/auth-config (token secrets, expiry settings)
85
+
86
+ ## Types / Entities
87
+ - \`{{EntityName}}\`: id, email, passwordHash, createdAt
88
+ - \`AuthTokenPair\`: accessToken, refreshToken, expiresIn
89
+ - \`RefreshTokenRecord\`: token, entityId, expiresAt, usedAt
90
+
91
+ ## Risks
92
+ - Token secret exposure → rotate secrets without downtime (risk: high)
93
+ - Refresh token replay attack → single-use rotation required
94
+ - Brute force on login → rate limiting + lockout required
95
+
96
+ ## Estimation (rough)
97
+ - Dev: 8–16 hours
98
+ - Review: 2–4 hours
99
+ - Difficulty: 3/5
100
+ `,
101
+ progressTemplate: `# PROGRESS: JWT Authentication for {{EntityName}}
102
+
103
+ ## Status: draft
104
+
105
+ ## Criteria
106
+ - [ ] AC-1: Login endpoint
107
+ - [ ] AC-2: Protected route guard
108
+ - [ ] AC-3: Token refresh
109
+ - [ ] AC-4: Logout
110
+ - [ ] AC-5: Security requirements
111
+ `,
112
+ };
113
+ /** CRUD Entity spec template. */
114
+ export const CRUD_ENTITY_TEMPLATE = {
115
+ id: 'crud-entity',
116
+ name: 'CRUD Entity',
117
+ category: 'crud',
118
+ description: 'Full Create/Read/Update/Delete lifecycle for any data entity.',
119
+ tags: ['crud', 'rest', 'api', 'database'],
120
+ complexityScore: 'S',
121
+ estimationBase: {
122
+ hoursMin: 6,
123
+ hoursMax: 12,
124
+ notes: 'Standard CRUD with validation and soft delete',
125
+ },
126
+ criteria: [
127
+ { id: 'AC-1', title: 'Create entity', required: true },
128
+ { id: 'AC-2', title: 'List entities', required: true },
129
+ { id: 'AC-3', title: 'Get single entity', required: true },
130
+ { id: 'AC-4', title: 'Update entity', required: true },
131
+ { id: 'AC-5', title: 'Delete entity', required: true },
132
+ { id: 'AC-6', title: 'Validation', required: true },
133
+ ],
134
+ variables: [
135
+ {
136
+ key: 'EntityName',
137
+ label: 'Entity name',
138
+ description: 'Name of the entity (singular, PascalCase)',
139
+ example: 'Product',
140
+ required: true,
141
+ },
142
+ {
143
+ key: 'EntityPlural',
144
+ label: 'Entity plural',
145
+ description: 'Plural form of the entity name',
146
+ example: 'Products',
147
+ required: true,
148
+ },
149
+ ],
150
+ huTemplate: `# HU: CRUD for {{EntityName}}
151
+
152
+ ## User Story
153
+ As a user, I want to create, view, update and delete {{EntityPlural}} so that I can manage them effectively.
154
+
155
+ ## Acceptance Criteria
156
+
157
+ ### AC-1: Create {{EntityName}}
158
+ - [ ] POST /{{EntityPlural}} accepts valid payload and persists the entity
159
+ - [ ] Duplicate detection where applicable
160
+ - [ ] Returns the created entity with generated ID and timestamps
161
+
162
+ ### AC-2: List {{EntityPlural}}
163
+ - [ ] GET /{{EntityPlural}} returns paginated list
164
+ - [ ] Supports filtering and sorting by key fields
165
+ - [ ] Empty list returns 200 with empty array (not 404)
166
+
167
+ ### AC-3: Get single {{EntityName}}
168
+ - [ ] GET /{{EntityPlural}}/:id returns the entity or 404
169
+ - [ ] Soft-deleted entities return 404
170
+
171
+ ### AC-4: Update {{EntityName}}
172
+ - [ ] PATCH /{{EntityPlural}}/:id applies partial update
173
+ - [ ] PUT /{{EntityPlural}}/:id replaces the full entity
174
+ - [ ] Returns updated entity on success
175
+
176
+ ### AC-5: Delete {{EntityName}}
177
+ - [ ] DELETE /{{EntityPlural}}/:id performs soft delete by default
178
+ - [ ] Hard delete available as a privileged action
179
+ - [ ] Returns 204 No Content on success
180
+
181
+ ### AC-6: Validation
182
+ - [ ] All inputs validated at the API boundary
183
+ - [ ] Invalid fields return 422 with per-field error messages
184
+ `,
185
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: CRUD for {{EntityName}}
186
+
187
+ ## Affected Files
188
+ - handlers/{{EntityPlural}}/create
189
+ - handlers/{{EntityPlural}}/list
190
+ - handlers/{{EntityPlural}}/get
191
+ - handlers/{{EntityPlural}}/update
192
+ - handlers/{{EntityPlural}}/delete
193
+ - storage/{{EntityPlural}}-repository
194
+ - types/{{EntityName}}
195
+
196
+ ## Types / Entities
197
+ - \`{{EntityName}}\`: id, createdAt, updatedAt, deletedAt (nullable)
198
+ - \`Create{{EntityName}}Input\`: entity fields (validated)
199
+ - \`Update{{EntityName}}Input\`: partial entity fields
200
+ - \`List{{EntityPlural}}Query\`: page, limit, sortBy, order, filters
201
+
202
+ ## Risks
203
+ - Missing soft-delete → data loss risk
204
+ - Unbounded list without pagination → performance risk
205
+ - Missing input validation → injection risk
206
+
207
+ ## Estimation (rough)
208
+ - Dev: 6–12 hours
209
+ - Review: 1–3 hours
210
+ - Difficulty: 2/5
211
+ `,
212
+ progressTemplate: `# PROGRESS: CRUD for {{EntityName}}
213
+
214
+ ## Status: draft
215
+
216
+ ## Criteria
217
+ - [ ] AC-1: Create {{EntityName}}
218
+ - [ ] AC-2: List {{EntityPlural}}
219
+ - [ ] AC-3: Get single {{EntityName}}
220
+ - [ ] AC-4: Update {{EntityName}}
221
+ - [ ] AC-5: Delete {{EntityName}}
222
+ - [ ] AC-6: Validation
223
+ `,
224
+ };
225
+ //# sourceMappingURL=templates-auth-crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-auth-crud.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-auth-crud.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,8DAA8D;AAI9D,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,+EAA+E;IAC5F,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;IAC5C,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,oEAAoE;KAC5E;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC9D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;QAChD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC/D;IACD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,6DAA6D;YAC1E,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,kCAAkC;YAC/C,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,YAAY;SAC3B;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,+DAA+D;IAC5E,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;IACzC,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,+CAA+C;KACvD;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;KACpD;IACD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,gCAAgC;YAC7C,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BvB;IACC,gBAAgB,EAAE;;;;;;;;;;;CAWnB;CACA,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SpecTemplateEntry } from '../../types/spec-templates.js';
2
+ /** Data migration spec template. */
3
+ export declare const DATA_MIGRATION_TEMPLATE: SpecTemplateEntry;
4
+ /** Security feature spec template. */
5
+ export declare const SECURITY_FEATURE_TEMPLATE: SpecTemplateEntry;
6
+ //# sourceMappingURL=templates-data-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-data-security.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-data-security.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,oCAAoC;AACpC,eAAO,MAAM,uBAAuB,EAAE,iBA2FrC,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,yBAAyB,EAAE,iBAoGvC,CAAC"}
@@ -0,0 +1,198 @@
1
+ // engine/spec-templates/templates-data-security.ts — Data migration + security feature templates.
2
+ // Extracted from catalog-extra.ts to keep file sizes within limits.
3
+ /** Data migration spec template. */
4
+ export const DATA_MIGRATION_TEMPLATE = {
5
+ id: 'data-migration',
6
+ name: 'Data Migration',
7
+ category: 'data',
8
+ description: 'Safe, reversible database or data migration with rollback support.',
9
+ tags: ['migration', 'database', 'schema', 'data'],
10
+ complexityScore: 'M',
11
+ estimationBase: {
12
+ hoursMin: 16,
13
+ hoursMax: 40,
14
+ notes: 'Includes rollback strategy and zero-downtime approach',
15
+ },
16
+ criteria: [
17
+ { id: 'AC-1', title: 'Migration script', required: true },
18
+ { id: 'AC-2', title: 'Data safety', required: true },
19
+ { id: 'AC-3', title: 'Zero-downtime strategy', required: false },
20
+ { id: 'AC-4', title: 'Rollback', required: true },
21
+ { id: 'AC-5', title: 'Observability', required: false },
22
+ ],
23
+ variables: [
24
+ {
25
+ key: 'MigrationName',
26
+ label: 'Migration name',
27
+ description: 'Short descriptive name for this migration',
28
+ example: 'Add email_verified column to users',
29
+ required: true,
30
+ },
31
+ ],
32
+ huTemplate: `# HU: Data Migration — {{MigrationName}}
33
+
34
+ ## User Story
35
+ As a developer, I want to apply the migration "{{MigrationName}}" safely so that production data is not at risk.
36
+
37
+ ## Acceptance Criteria
38
+
39
+ ### AC-1: Migration script
40
+ - [ ] Migration has an "up" (apply) and "down" (rollback) operation
41
+ - [ ] Script is idempotent (safe to run multiple times)
42
+ - [ ] Each step is transactional where supported by the database
43
+
44
+ ### AC-2: Data safety
45
+ - [ ] Pre-migration backup documented in runbook
46
+ - [ ] No destructive operation without a confirmed backup
47
+ - [ ] Migration tested on a staging copy of production data
48
+
49
+ ### AC-3: Zero-downtime strategy
50
+ - [ ] Migration can be applied while the application is running
51
+ - [ ] Backward-compatible schema changes first (expand), then cleanup (contract)
52
+ - [ ] Feature flag used if application code needs to switch behavior
53
+
54
+ ### AC-4: Rollback
55
+ - [ ] Rollback procedure documented and tested
56
+ - [ ] Rollback does not cause data loss
57
+ - [ ] Time to rollback < 15 minutes
58
+
59
+ ### AC-5: Observability
60
+ - [ ] Migration duration logged
61
+ - [ ] Row counts before/after logged for verification
62
+ - [ ] Anomalies (unexpected row counts) trigger alerts
63
+ `,
64
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: Data Migration — {{MigrationName}}
65
+
66
+ ## Affected Files
67
+ - migrations/{{MigrationName}}/up
68
+ - migrations/{{MigrationName}}/down
69
+ - runbooks/{{MigrationName}}-rollback
70
+
71
+ ## Types / Entities
72
+ - Migration metadata: id, name, appliedAt, duration, rolledBack
73
+
74
+ ## Risks
75
+ - Data loss on rollback → mandatory backup before apply
76
+ - Long-running migration → table locks in production
77
+ - Missing idempotency → partial application leaves DB in bad state
78
+
79
+ ## Estimation (rough)
80
+ - Dev: 4–12 hours
81
+ - Review: 2–4 hours
82
+ - Difficulty: 3/5
83
+ `,
84
+ progressTemplate: `# PROGRESS: Data Migration — {{MigrationName}}
85
+
86
+ ## Status: draft
87
+
88
+ ## Criteria
89
+ - [ ] AC-1: Migration script
90
+ - [ ] AC-2: Data safety
91
+ - [ ] AC-3: Zero-downtime strategy
92
+ - [ ] AC-4: Rollback
93
+ - [ ] AC-5: Observability
94
+ `,
95
+ };
96
+ /** Security feature spec template. */
97
+ export const SECURITY_FEATURE_TEMPLATE = {
98
+ id: 'security-feature',
99
+ name: 'Security Feature',
100
+ category: 'security',
101
+ description: 'Security hardening: rate limiting, input sanitization, audit logging, etc.',
102
+ tags: ['security', 'hardening', 'audit', 'rate-limiting'],
103
+ complexityScore: 'M',
104
+ estimationBase: {
105
+ hoursMin: 16,
106
+ hoursMax: 32,
107
+ notes: 'Includes penetration test checklist and monitoring setup',
108
+ },
109
+ criteria: [
110
+ { id: 'AC-1', title: 'Implementation', required: true },
111
+ { id: 'AC-2', title: 'Bypass prevention', required: true },
112
+ { id: 'AC-3', title: 'Observability', required: false },
113
+ { id: 'AC-4', title: 'Testing', required: true },
114
+ { id: 'AC-5', title: 'Documentation', required: false },
115
+ ],
116
+ variables: [
117
+ {
118
+ key: 'FeatureName',
119
+ label: 'Security feature name',
120
+ description: 'Name of the security feature being implemented',
121
+ example: 'Rate Limiting',
122
+ required: true,
123
+ },
124
+ {
125
+ key: 'ProtectedResource',
126
+ label: 'Protected resource or area',
127
+ description: 'What is being protected by this feature',
128
+ example: 'authentication endpoints',
129
+ required: true,
130
+ },
131
+ ],
132
+ huTemplate: `# HU: Security Feature — {{FeatureName}}
133
+
134
+ ## User Story
135
+ As a security engineer, I want {{FeatureName}} applied to {{ProtectedResource}} so that attack vectors are reduced.
136
+
137
+ ## Acceptance Criteria
138
+
139
+ ### AC-1: Implementation
140
+ - [ ] {{FeatureName}} implemented at the correct layer (edge, gateway, application)
141
+ - [ ] Configuration externalized (not hardcoded)
142
+ - [ ] Enabled in production, configurable in development
143
+
144
+ ### AC-2: Bypass prevention
145
+ - [ ] Cannot be bypassed by manipulating headers or query parameters
146
+ - [ ] Handles IPv4, IPv6, and forwarded IP headers correctly
147
+ - [ ] Works behind reverse proxies and CDNs
148
+
149
+ ### AC-3: Observability
150
+ - [ ] Blocked/throttled requests logged with reason
151
+ - [ ] Metrics exported: blocked count, block rate, top blocked IPs
152
+ - [ ] Alert triggers when block rate exceeds threshold
153
+
154
+ ### AC-4: Testing
155
+ - [ ] Unit tests cover allowed and blocked cases
156
+ - [ ] Integration tests simulate attack patterns
157
+ - [ ] Penetration test checklist updated
158
+
159
+ ### AC-5: Documentation
160
+ - [ ] Security runbook updated with new feature
161
+ - [ ] Limits and thresholds documented with rationale
162
+ - [ ] On-call playbook updated for incident response
163
+ `,
164
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: Security Feature — {{FeatureName}}
165
+
166
+ ## Affected Files
167
+ - middleware/{{FeatureName}}
168
+ - config/security-config
169
+ - monitoring/security-alerts
170
+ - runbooks/security-incident
171
+
172
+ ## Types / Entities
173
+ - \`{{FeatureName}}Config\`: thresholds, enabled, dryRun
174
+ - \`SecurityEvent\`: type, resource, ip, timestamp, blocked
175
+
176
+ ## Risks
177
+ - False positives blocking legitimate users → dry-run mode first
178
+ - Missing coverage for all entry points → security audit required
179
+ - Misconfiguration under proxy → test in staging with proxy enabled
180
+
181
+ ## Estimation (rough)
182
+ - Dev: 4–12 hours
183
+ - Review: 2–4 hours
184
+ - Difficulty: 3/5
185
+ `,
186
+ progressTemplate: `# PROGRESS: Security Feature — {{FeatureName}}
187
+
188
+ ## Status: draft
189
+
190
+ ## Criteria
191
+ - [ ] AC-1: Implementation
192
+ - [ ] AC-2: Bypass prevention
193
+ - [ ] AC-3: Observability
194
+ - [ ] AC-4: Testing
195
+ - [ ] AC-5: Documentation
196
+ `,
197
+ };
198
+ //# sourceMappingURL=templates-data-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-data-security.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-data-security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SpecTemplateEntry } from '../../types/spec-templates.js';
2
+ /** E-commerce cart and checkout template. */
3
+ export declare const ECOMMERCE_CART_CHECKOUT_TEMPLATE: SpecTemplateEntry;
4
+ /** E-commerce inventory template. */
5
+ export declare const ECOMMERCE_INVENTORY_TEMPLATE: SpecTemplateEntry;
6
+ //# sourceMappingURL=templates-industry-ecom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-industry-ecom.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-industry-ecom.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,6CAA6C;AAC7C,eAAO,MAAM,gCAAgC,EAAE,iBAyG9C,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,4BAA4B,EAAE,iBAiG1C,CAAC"}
@@ -0,0 +1,209 @@
1
+ // engine/spec-templates/templates-industry-ecom.ts — E-commerce industry templates.
2
+ // AC-04: Templates by industry — e-commerce vertical (split from health-ecom).
3
+ /** E-commerce cart and checkout template. */
4
+ export const ECOMMERCE_CART_CHECKOUT_TEMPLATE = {
5
+ id: 'ecommerce-cart-checkout',
6
+ name: 'Carrito y proceso de compra',
7
+ category: 'industry',
8
+ subcategory: 'ecommerce',
9
+ description: 'Carrito de compras con cupones, calculo de impuestos y proceso de checkout.',
10
+ tags: ['ecommerce', 'cart', 'checkout', 'payments', 'coupons'],
11
+ complexityScore: 'L',
12
+ estimationBase: {
13
+ hoursMin: 40,
14
+ hoursMax: 80,
15
+ notes: 'Incluye cupones, impuestos y multiples metodos de pago',
16
+ },
17
+ criteria: [
18
+ { id: 'AC-1', title: 'Gestion del carrito', required: true },
19
+ { id: 'AC-2', title: 'Cupones y descuentos', required: false },
20
+ { id: 'AC-3', title: 'Calculo de impuestos', required: true },
21
+ { id: 'AC-4', title: 'Proceso de checkout', required: true },
22
+ { id: 'AC-5', title: 'Confirmacion de compra', required: true },
23
+ { id: 'AC-6', title: 'Recuperacion de carrito', required: false },
24
+ ],
25
+ variables: [
26
+ {
27
+ key: 'StoreName',
28
+ label: 'Nombre de la tienda',
29
+ description: 'Nombre del e-commerce',
30
+ example: 'MiTienda',
31
+ required: true,
32
+ },
33
+ ],
34
+ huTemplate: `# HU: Carrito y Checkout — {{StoreName}}
35
+
36
+ ## Historia de Usuario
37
+ Como comprador de {{StoreName}}, quiero agregar productos al carrito y completar la compra de forma fluida y segura.
38
+
39
+ ## Criterios de Aceptacion
40
+
41
+ ### AC-1: Gestion del carrito
42
+ - [ ] Se pueden agregar, actualizar cantidad y eliminar productos del carrito
43
+ - [ ] El carrito persiste entre sesiones (usuario autenticado) o en almacenamiento local (anonimo)
44
+ - [ ] Se muestra subtotal actualizado en tiempo real
45
+ - [ ] Los productos sin stock se marcan automaticamente
46
+
47
+ ### AC-2: Cupones y descuentos
48
+ - [ ] Se puede aplicar un codigo de cupon al carrito
49
+ - [ ] Los cupones validan vigencia, condiciones minimas y uso unico si aplica
50
+ - [ ] El descuento se refleja en el resumen antes de confirmar
51
+
52
+ ### AC-3: Calculo de impuestos
53
+ - [ ] Los impuestos se calculan segun la direccion de envio
54
+ - [ ] El desglose de impuestos se muestra transparentemente
55
+ - [ ] Las reglas de impuestos son configurables por region
56
+
57
+ ### AC-4: Proceso de checkout
58
+ - [ ] El checkout recopila direccion de envio, metodo de pago y datos de facturacion
59
+ - [ ] Se valida toda la informacion antes de procesar el pago
60
+ - [ ] El proceso es resistente a fallos parciales (no se cobra sin confirmar pedido)
61
+
62
+ ### AC-5: Confirmacion de compra
63
+ - [ ] Se muestra resumen de pedido con numero de orden
64
+ - [ ] Se envia confirmacion por email con detalles del pedido
65
+ - [ ] El inventario se actualiza al confirmar la compra
66
+
67
+ ### AC-6: Recuperacion de carrito
68
+ - [ ] Se envia recordatorio de carrito abandonado despues de N horas
69
+ - [ ] El enlace de recuperacion restaura el carrito con los productos originales
70
+ - [ ] Los productos no disponibles se indican al recuperar
71
+ `,
72
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: Carrito y Checkout — {{StoreName}}
73
+
74
+ ## Archivos Afectados
75
+ - cart/management
76
+ - cart/coupons
77
+ - checkout/tax-calculator
78
+ - checkout/payment-processor
79
+ - checkout/confirmation
80
+ - notifications/cart-recovery
81
+
82
+ ## Tipos / Entidades
83
+ - \`Cart\`: id, userId, items[], couponCode, subtotal, tax, total
84
+ - \`CartItem\`: productId, quantity, unitPrice
85
+ - \`Order\`: id, cartId, status, paymentId, shippingAddress, createdAt
86
+
87
+ ## Riesgos
88
+ - Doble cobro → idempotencia en procesamiento de pago
89
+ - Precio desactualizado en carrito → revalidar precios en checkout
90
+ - Carrito inconsistente → recalcular totales en cada operacion
91
+
92
+ ## Estimacion
93
+ - Dev: 40–80 horas
94
+ - Review: 8–16 horas
95
+ - Dificultad: 4/5
96
+ `,
97
+ progressTemplate: `# PROGRESS: Carrito y Checkout — {{StoreName}}
98
+
99
+ ## Estado: borrador
100
+
101
+ ## Criterios
102
+ - [ ] AC-1: Gestion del carrito
103
+ - [ ] AC-2: Cupones y descuentos
104
+ - [ ] AC-3: Calculo de impuestos
105
+ - [ ] AC-4: Proceso de checkout
106
+ - [ ] AC-5: Confirmacion de compra
107
+ - [ ] AC-6: Recuperacion de carrito
108
+ `,
109
+ };
110
+ /** E-commerce inventory template. */
111
+ export const ECOMMERCE_INVENTORY_TEMPLATE = {
112
+ id: 'ecommerce-inventory',
113
+ name: 'Gestion de inventario',
114
+ category: 'industry',
115
+ subcategory: 'ecommerce',
116
+ description: 'Control de stock, alertas de inventario bajo y variantes de producto.',
117
+ tags: ['ecommerce', 'inventory', 'stock', 'products', 'variants'],
118
+ complexityScore: 'M',
119
+ estimationBase: {
120
+ hoursMin: 24,
121
+ hoursMax: 48,
122
+ notes: 'Incluye variantes de producto y alertas de stock',
123
+ },
124
+ criteria: [
125
+ { id: 'AC-1', title: 'Control de stock', required: true },
126
+ { id: 'AC-2', title: 'Alertas de inventario', required: true },
127
+ { id: 'AC-3', title: 'Variantes de producto', required: true },
128
+ { id: 'AC-4', title: 'Movimientos de inventario', required: true },
129
+ { id: 'AC-5', title: 'Reportes', required: false },
130
+ ],
131
+ variables: [
132
+ {
133
+ key: 'StoreName',
134
+ label: 'Nombre de la tienda',
135
+ description: 'Nombre del e-commerce',
136
+ example: 'MiTienda',
137
+ required: true,
138
+ },
139
+ ],
140
+ huTemplate: `# HU: Inventario — {{StoreName}}
141
+
142
+ ## Historia de Usuario
143
+ Como administrador de {{StoreName}}, quiero gestionar el inventario de productos para mantener el stock actualizado y recibir alertas cuando este bajo.
144
+
145
+ ## Criterios de Aceptacion
146
+
147
+ ### AC-1: Control de stock
148
+ - [ ] Cada producto/variante tiene una cantidad en stock
149
+ - [ ] El stock se decrementa automaticamente al confirmar una venta
150
+ - [ ] Los productos sin stock no pueden agregarse al carrito
151
+ - [ ] Se soporta stock por ubicacion/almacen (multi-warehouse)
152
+
153
+ ### AC-2: Alertas de inventario
154
+ - [ ] Se generan alertas cuando el stock cae bajo el umbral configurado
155
+ - [ ] Las alertas son configurables por producto o categoria
156
+ - [ ] Se notifica por email y/o dashboard
157
+
158
+ ### AC-3: Variantes de producto
159
+ - [ ] Cada producto puede tener variantes (talla, color, etc.)
160
+ - [ ] Cada variante tiene su propio stock independiente
161
+ - [ ] Las variantes comparten la ficha de producto base
162
+
163
+ ### AC-4: Movimientos de inventario
164
+ - [ ] Todo cambio de stock se registra como movimiento (entrada, salida, ajuste)
165
+ - [ ] Cada movimiento incluye razon, cantidad y actor
166
+ - [ ] El historial de movimientos es consultable por producto y periodo
167
+
168
+ ### AC-5: Reportes
169
+ - [ ] Reporte de productos con stock bajo
170
+ - [ ] Reporte de movimientos por periodo
171
+ - [ ] Exportable en CSV o equivalente
172
+ `,
173
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: Inventario — {{StoreName}}
174
+
175
+ ## Archivos Afectados
176
+ - inventory/stock-manager
177
+ - inventory/alerts
178
+ - inventory/variants
179
+ - inventory/movements
180
+ - inventory/reports
181
+
182
+ ## Tipos / Entidades
183
+ - \`Product\`: id, name, variants[], category
184
+ - \`Variant\`: id, productId, attributes, stock, sku
185
+ - \`StockMovement\`: variantId, type, quantity, reason, actor, timestamp
186
+
187
+ ## Riesgos
188
+ - Sobreventa → reserva de stock al agregar al carrito con TTL
189
+ - Inconsistencia en stock multi-almacen → transacciones atomicas
190
+ - Alertas no enviadas → cola de notificaciones con reintentos
191
+
192
+ ## Estimacion
193
+ - Dev: 24–48 horas
194
+ - Review: 4–8 horas
195
+ - Dificultad: 3/5
196
+ `,
197
+ progressTemplate: `# PROGRESS: Inventario — {{StoreName}}
198
+
199
+ ## Estado: borrador
200
+
201
+ ## Criterios
202
+ - [ ] AC-1: Control de stock
203
+ - [ ] AC-2: Alertas de inventario
204
+ - [ ] AC-3: Variantes de producto
205
+ - [ ] AC-4: Movimientos de inventario
206
+ - [ ] AC-5: Reportes
207
+ `,
208
+ };
209
+ //# sourceMappingURL=templates-industry-ecom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-industry-ecom.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-industry-ecom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SpecTemplateEntry } from '../../types/spec-templates.js';
2
+ /** Fintech KYC verification template. */
3
+ export declare const FINTECH_KYC_TEMPLATE: SpecTemplateEntry;
4
+ /** Fintech transactions template. */
5
+ export declare const FINTECH_TRANSACTIONS_TEMPLATE: SpecTemplateEntry;
6
+ /** Fintech compliance template. */
7
+ export declare const FINTECH_COMPLIANCE_TEMPLATE: SpecTemplateEntry;
8
+ //# sourceMappingURL=templates-industry-fintech.d.ts.map