@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.
- package/dist/config/model-routing-rules.json +98 -0
- package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -1
- package/dist/engine/ai-cost-estimator/core.js +2 -202
- package/dist/engine/ai-cost-estimator/core.js.map +1 -1
- package/dist/engine/ai-cost-estimator/recommender.d.ts +8 -0
- package/dist/engine/ai-cost-estimator/recommender.d.ts.map +1 -0
- package/dist/engine/ai-cost-estimator/recommender.js +94 -0
- package/dist/engine/ai-cost-estimator/recommender.js.map +1 -0
- package/dist/engine/ai-cost-estimator/spec-loader.d.ts +13 -0
- package/dist/engine/ai-cost-estimator/spec-loader.d.ts.map +1 -0
- package/dist/engine/ai-cost-estimator/spec-loader.js +102 -0
- package/dist/engine/ai-cost-estimator/spec-loader.js.map +1 -0
- package/dist/engine/ci-generator/planu-config.d.ts +7 -0
- package/dist/engine/ci-generator/planu-config.d.ts.map +1 -0
- package/dist/engine/ci-generator/planu-config.js +40 -0
- package/dist/engine/ci-generator/planu-config.js.map +1 -0
- package/dist/engine/ci-generator/planu-steps.d.ts +11 -0
- package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -0
- package/dist/engine/ci-generator/planu-steps.js +292 -0
- package/dist/engine/ci-generator/planu-steps.js.map +1 -0
- package/dist/engine/code-transforms/transform-engine.d.ts +7 -0
- package/dist/engine/code-transforms/transform-engine.d.ts.map +1 -0
- package/dist/engine/code-transforms/transform-engine.js +67 -0
- package/dist/engine/code-transforms/transform-engine.js.map +1 -0
- package/dist/engine/code-transforms/typescript/add-error-handling.d.ts +6 -0
- package/dist/engine/code-transforms/typescript/add-error-handling.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/add-error-handling.js +92 -0
- package/dist/engine/code-transforms/typescript/add-error-handling.js.map +1 -0
- package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts +6 -0
- package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/add-jsdoc.js +83 -0
- package/dist/engine/code-transforms/typescript/add-jsdoc.js.map +1 -0
- package/dist/engine/code-transforms/typescript/add-types.d.ts +3 -0
- package/dist/engine/code-transforms/typescript/add-types.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/add-types.js +182 -0
- package/dist/engine/code-transforms/typescript/add-types.js.map +1 -0
- package/dist/engine/code-transforms/typescript/ast-utils.d.ts +38 -0
- package/dist/engine/code-transforms/typescript/ast-utils.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/ast-utils.js +90 -0
- package/dist/engine/code-transforms/typescript/ast-utils.js.map +1 -0
- package/dist/engine/code-transforms/typescript/extract-interface.d.ts +6 -0
- package/dist/engine/code-transforms/typescript/extract-interface.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/extract-interface.js +103 -0
- package/dist/engine/code-transforms/typescript/extract-interface.js.map +1 -0
- package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts +3 -0
- package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/modernize-syntax.js +213 -0
- package/dist/engine/code-transforms/typescript/modernize-syntax.js.map +1 -0
- package/dist/engine/code-transforms/typescript/rename-symbol.d.ts +8 -0
- package/dist/engine/code-transforms/typescript/rename-symbol.d.ts.map +1 -0
- package/dist/engine/code-transforms/typescript/rename-symbol.js +40 -0
- package/dist/engine/code-transforms/typescript/rename-symbol.js.map +1 -0
- package/dist/engine/mermaid/core.d.ts +18 -0
- package/dist/engine/mermaid/core.d.ts.map +1 -0
- package/dist/engine/mermaid/core.js +88 -0
- package/dist/engine/mermaid/core.js.map +1 -0
- package/dist/engine/mermaid/diagram-generators.d.ts +22 -0
- package/dist/engine/mermaid/diagram-generators.d.ts.map +1 -0
- package/dist/engine/mermaid/diagram-generators.js +139 -0
- package/dist/engine/mermaid/diagram-generators.js.map +1 -0
- package/dist/engine/mermaid/helpers.d.ts +8 -0
- package/dist/engine/mermaid/helpers.d.ts.map +1 -0
- package/dist/engine/mermaid/helpers.js +61 -0
- package/dist/engine/mermaid/helpers.js.map +1 -0
- package/dist/engine/mermaid-generator.d.ts +2 -37
- package/dist/engine/mermaid-generator.d.ts.map +1 -1
- package/dist/engine/mermaid-generator.js +4 -276
- package/dist/engine/mermaid-generator.js.map +1 -1
- package/dist/engine/model-router/complexity-analyzer.d.ts +26 -0
- package/dist/engine/model-router/complexity-analyzer.d.ts.map +1 -0
- package/dist/engine/model-router/complexity-analyzer.js +182 -0
- package/dist/engine/model-router/complexity-analyzer.js.map +1 -0
- package/dist/engine/model-router/cost-estimator.d.ts +6 -0
- package/dist/engine/model-router/cost-estimator.d.ts.map +1 -0
- package/dist/engine/model-router/cost-estimator.js +60 -0
- package/dist/engine/model-router/cost-estimator.js.map +1 -0
- package/dist/engine/model-router/historical-learner.d.ts +26 -0
- package/dist/engine/model-router/historical-learner.d.ts.map +1 -0
- package/dist/engine/model-router/historical-learner.js +91 -0
- package/dist/engine/model-router/historical-learner.js.map +1 -0
- package/dist/engine/model-router/rules-engine.d.ts +13 -0
- package/dist/engine/model-router/rules-engine.d.ts.map +1 -0
- package/dist/engine/model-router/rules-engine.js +142 -0
- package/dist/engine/model-router/rules-engine.js.map +1 -0
- package/dist/engine/spec-coverage/criteria-mapper.d.ts +1 -2
- package/dist/engine/spec-coverage/criteria-mapper.d.ts.map +1 -1
- package/dist/engine/spec-coverage/criteria-mapper.js +4 -203
- package/dist/engine/spec-coverage/criteria-mapper.js.map +1 -1
- package/dist/engine/spec-coverage/keyword-extractor.d.ts +10 -0
- package/dist/engine/spec-coverage/keyword-extractor.d.ts.map +1 -0
- package/dist/engine/spec-coverage/keyword-extractor.js +147 -0
- package/dist/engine/spec-coverage/keyword-extractor.js.map +1 -0
- package/dist/engine/spec-coverage/test-matchers.d.ts +9 -0
- package/dist/engine/spec-coverage/test-matchers.d.ts.map +1 -0
- package/dist/engine/spec-coverage/test-matchers.js +59 -0
- package/dist/engine/spec-coverage/test-matchers.js.map +1 -0
- package/dist/engine/spec-templates/catalog-extra.d.ts +1 -1
- package/dist/engine/spec-templates/catalog-extra.d.ts.map +1 -1
- package/dist/engine/spec-templates/catalog-extra.js +8 -363
- package/dist/engine/spec-templates/catalog-extra.js.map +1 -1
- package/dist/engine/spec-templates/catalog-industry.d.ts +4 -0
- package/dist/engine/spec-templates/catalog-industry.d.ts.map +1 -0
- package/dist/engine/spec-templates/catalog-industry.js +19 -0
- package/dist/engine/spec-templates/catalog-industry.js.map +1 -0
- package/dist/engine/spec-templates/catalog.d.ts +1 -1
- package/dist/engine/spec-templates/catalog.d.ts.map +1 -1
- package/dist/engine/spec-templates/catalog.js +12 -381
- package/dist/engine/spec-templates/catalog.js.map +1 -1
- package/dist/engine/spec-templates/custom-loader.d.ts +12 -0
- package/dist/engine/spec-templates/custom-loader.d.ts.map +1 -0
- package/dist/engine/spec-templates/custom-loader.js +99 -0
- package/dist/engine/spec-templates/custom-loader.js.map +1 -0
- package/dist/engine/spec-templates/index.d.ts +4 -2
- package/dist/engine/spec-templates/index.d.ts.map +1 -1
- package/dist/engine/spec-templates/index.js +4 -2
- package/dist/engine/spec-templates/index.js.map +1 -1
- package/dist/engine/spec-templates/query.d.ts +12 -4
- package/dist/engine/spec-templates/query.d.ts.map +1 -1
- package/dist/engine/spec-templates/query.js +29 -7
- package/dist/engine/spec-templates/query.js.map +1 -1
- package/dist/engine/spec-templates/renderer.d.ts +27 -2
- package/dist/engine/spec-templates/renderer.d.ts.map +1 -1
- package/dist/engine/spec-templates/renderer.js +119 -4
- package/dist/engine/spec-templates/renderer.js.map +1 -1
- package/dist/engine/spec-templates/templates-api-ui.d.ts +6 -0
- package/dist/engine/spec-templates/templates-api-ui.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-api-ui.js +215 -0
- package/dist/engine/spec-templates/templates-api-ui.js.map +1 -0
- package/dist/engine/spec-templates/templates-auth-crud.d.ts +6 -0
- package/dist/engine/spec-templates/templates-auth-crud.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-auth-crud.js +225 -0
- package/dist/engine/spec-templates/templates-auth-crud.js.map +1 -0
- package/dist/engine/spec-templates/templates-data-security.d.ts +6 -0
- package/dist/engine/spec-templates/templates-data-security.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-data-security.js +198 -0
- package/dist/engine/spec-templates/templates-data-security.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-ecom.d.ts +6 -0
- package/dist/engine/spec-templates/templates-industry-ecom.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-ecom.js +209 -0
- package/dist/engine/spec-templates/templates-industry-ecom.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts +8 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.js +350 -0
- package/dist/engine/spec-templates/templates-industry-fintech.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts +3 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.js +5 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health.d.ts +6 -0
- package/dist/engine/spec-templates/templates-industry-health.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health.js +208 -0
- package/dist/engine/spec-templates/templates-industry-health.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-saas.d.ts +8 -0
- package/dist/engine/spec-templates/templates-industry-saas.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-saas.js +323 -0
- package/dist/engine/spec-templates/templates-industry-saas.js.map +1 -0
- package/dist/engine/spec-templates/templates-perf-integration.d.ts +6 -0
- package/dist/engine/spec-templates/templates-perf-integration.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-perf-integration.js +226 -0
- package/dist/engine/spec-templates/templates-perf-integration.js.map +1 -0
- package/dist/engine/vector-store/hnsw.d.ts +37 -0
- package/dist/engine/vector-store/hnsw.d.ts.map +1 -0
- package/dist/engine/vector-store/hnsw.js +294 -0
- package/dist/engine/vector-store/hnsw.js.map +1 -0
- package/dist/engine/vector-store/similarity.d.ts +21 -0
- package/dist/engine/vector-store/similarity.d.ts.map +1 -0
- package/dist/engine/vector-store/similarity.js +86 -0
- package/dist/engine/vector-store/similarity.js.map +1 -0
- package/dist/engine/vector-store/tfidf.d.ts +35 -0
- package/dist/engine/vector-store/tfidf.d.ts.map +1 -0
- package/dist/engine/vector-store/tfidf.js +255 -0
- package/dist/engine/vector-store/tfidf.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/vector-store/backend-factory.d.ts +9 -0
- package/dist/storage/vector-store/backend-factory.d.ts.map +1 -0
- package/dist/storage/vector-store/backend-factory.js +33 -0
- package/dist/storage/vector-store/backend-factory.js.map +1 -0
- package/dist/storage/vector-store/json-fallback.d.ts +21 -0
- package/dist/storage/vector-store/json-fallback.d.ts.map +1 -0
- package/dist/storage/vector-store/json-fallback.js +85 -0
- package/dist/storage/vector-store/json-fallback.js.map +1 -0
- package/dist/storage/vector-store/migrator.d.ts +10 -0
- package/dist/storage/vector-store/migrator.d.ts.map +1 -0
- package/dist/storage/vector-store/migrator.js +139 -0
- package/dist/storage/vector-store/migrator.js.map +1 -0
- package/dist/storage/vector-store/sqlite-adapter.d.ts +28 -0
- package/dist/storage/vector-store/sqlite-adapter.d.ts.map +1 -0
- package/dist/storage/vector-store/sqlite-adapter.js +142 -0
- package/dist/storage/vector-store/sqlite-adapter.js.map +1 -0
- package/dist/tools/ci-planu-handler.d.ts +8 -0
- package/dist/tools/ci-planu-handler.d.ts.map +1 -0
- package/dist/tools/ci-planu-handler.js +44 -0
- package/dist/tools/ci-planu-handler.js.map +1 -0
- package/dist/tools/create-spec/constitution-validator.d.ts +4 -0
- package/dist/tools/create-spec/constitution-validator.d.ts.map +1 -0
- package/dist/tools/create-spec/constitution-validator.js +37 -0
- package/dist/tools/create-spec/constitution-validator.js.map +1 -0
- package/dist/tools/create-spec/post-creation.d.ts +11 -0
- package/dist/tools/create-spec/post-creation.d.ts.map +1 -0
- package/dist/tools/create-spec/post-creation.js +48 -0
- package/dist/tools/create-spec/post-creation.js.map +1 -0
- package/dist/tools/create-spec/spec-builder.d.ts +14 -0
- package/dist/tools/create-spec/spec-builder.d.ts.map +1 -0
- package/dist/tools/create-spec/spec-builder.js +131 -0
- package/dist/tools/create-spec/spec-builder.js.map +1 -0
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +42 -172
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +24 -159
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/result-builder.d.ts +4 -0
- package/dist/tools/init-project/result-builder.d.ts.map +1 -0
- package/dist/tools/init-project/result-builder.js +150 -0
- package/dist/tools/init-project/result-builder.js.map +1 -0
- package/dist/tools/learn.d.ts.map +1 -1
- package/dist/tools/learn.js +67 -14
- package/dist/tools/learn.js.map +1 -1
- package/dist/tools/recommend-model-handler.d.ts +8 -0
- package/dist/tools/recommend-model-handler.d.ts.map +1 -0
- package/dist/tools/recommend-model-handler.js +65 -0
- package/dist/tools/recommend-model-handler.js.map +1 -0
- package/dist/tools/register-ci-tools.d.ts.map +1 -1
- package/dist/tools/register-ci-tools.js +36 -0
- package/dist/tools/register-ci-tools.js.map +1 -1
- package/dist/tools/register-model-tools.d.ts +3 -0
- package/dist/tools/register-model-tools.d.ts.map +1 -0
- package/dist/tools/register-model-tools.js +50 -0
- package/dist/tools/register-model-tools.js.map +1 -0
- package/dist/tools/register-search-tools.d.ts +7 -0
- package/dist/tools/register-search-tools.d.ts.map +1 -0
- package/dist/tools/register-search-tools.js +34 -0
- package/dist/tools/register-search-tools.js.map +1 -0
- package/dist/tools/register-template-tools.d.ts.map +1 -1
- package/dist/tools/register-template-tools.js +21 -8
- package/dist/tools/register-template-tools.js.map +1 -1
- package/dist/tools/register-transform-tools.d.ts +3 -0
- package/dist/tools/register-transform-tools.d.ts.map +1 -0
- package/dist/tools/register-transform-tools.js +29 -0
- package/dist/tools/register-transform-tools.js.map +1 -0
- package/dist/tools/semantic-search-handler.d.ts +7 -0
- package/dist/tools/semantic-search-handler.d.ts.map +1 -0
- package/dist/tools/semantic-search-handler.js +72 -0
- package/dist/tools/semantic-search-handler.js.map +1 -0
- package/dist/tools/spec-templates.d.ts +1 -1
- package/dist/tools/spec-templates.d.ts.map +1 -1
- package/dist/tools/spec-templates.js +20 -6
- package/dist/tools/spec-templates.js.map +1 -1
- package/dist/tools/transform-code-handler.d.ts +7 -0
- package/dist/tools/transform-code-handler.d.ts.map +1 -0
- package/dist/tools/transform-code-handler.js +58 -0
- package/dist/tools/transform-code-handler.js.map +1 -0
- package/dist/types/advanced-framework.d.ts +47 -0
- package/dist/types/advanced-framework.d.ts.map +1 -0
- package/dist/types/advanced-framework.js +3 -0
- package/dist/types/advanced-framework.js.map +1 -0
- package/dist/types/ci.d.ts +51 -0
- package/dist/types/ci.d.ts.map +1 -1
- package/dist/types/code-transforms.d.ts +114 -0
- package/dist/types/code-transforms.d.ts.map +1 -0
- package/dist/types/code-transforms.js +11 -0
- package/dist/types/code-transforms.js.map +1 -0
- package/dist/types/css-framework.d.ts +110 -0
- package/dist/types/css-framework.d.ts.map +1 -0
- package/dist/types/css-framework.js +3 -0
- package/dist/types/css-framework.js.map +1 -0
- package/dist/types/dashboard.d.ts +77 -0
- package/dist/types/dashboard.d.ts.map +1 -0
- package/dist/types/dashboard.js +2 -0
- package/dist/types/dashboard.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/model-routing.d.ts +127 -0
- package/dist/types/model-routing.d.ts.map +1 -0
- package/dist/types/model-routing.js +3 -0
- package/dist/types/model-routing.js.map +1 -0
- package/dist/types/project/core.d.ts +46 -5
- package/dist/types/project/core.d.ts.map +1 -1
- package/dist/types/spec/core.d.ts +28 -1
- package/dist/types/spec/core.d.ts.map +1 -1
- package/dist/types/spec/inputs.d.ts +1 -6
- package/dist/types/spec/inputs.d.ts.map +1 -1
- package/dist/types/spec-templates.d.ts +51 -1
- package/dist/types/spec-templates.d.ts.map +1 -1
- package/dist/types/ui.d.ts +3 -231
- package/dist/types/ui.d.ts.map +1 -1
- package/dist/types/ui.js +7 -1
- package/dist/types/ui.js.map +1 -1
- package/dist/types/vector-store.d.ts +144 -0
- package/dist/types/vector-store.d.ts.map +1 -0
- package/dist/types/vector-store.js +3 -0
- package/dist/types/vector-store.js.map +1 -0
- package/package.json +1 -1
- 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":"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"}
|
|
@@ -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":"AAAA,kGAAkG;AAClG,oEAAoE;AAIpE,oCAAoC;AACpC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,oEAAoE;IACjF,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;IACjD,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,uDAAuD;KAC/D;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,KAAK,EAAE;QAChE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;KACxD;IACD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;CAmBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC;AAEF,sCAAsC;AACtC,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,4EAA4E;IACzF,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,CAAC;IACzD,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,0DAA0D;KAClE;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,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;QACvD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;KACxD;IACD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,mBAAmB;YACxB,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,yCAAyC;YACtD,OAAO,EAAE,0BAA0B;YACnC,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;CAqBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC"}
|
|
@@ -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":"AAAA,oFAAoF;AACpF,+EAA+E;AAI/E,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gCAAgC,GAAsB;IACjE,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,6BAA6B;IACnC,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,6EAA6E;IAC1F,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;IAC9D,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,wDAAwD;KAChE;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC9D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE;KAClE;IACD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB;IACC,gBAAgB,EAAE;;;;;;;;;;;CAWnB;CACA,CAAC;AAEF,qCAAqC;AACrC,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC7D,EAAE,EAAE,qBAAqB;IACzB,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,uEAAuE;IACpF,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;IACjE,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,kDAAkD;KAC1D;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC9D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC9D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;KACnD;IACD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC"}
|
|
@@ -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
|