@planu/cli 1.10.0 → 1.12.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/license-plans.json +32 -2
- package/dist/engine/api-compat/compatibility-checker.d.ts +4 -0
- package/dist/engine/api-compat/compatibility-checker.d.ts.map +1 -0
- package/dist/engine/api-compat/compatibility-checker.js +118 -0
- package/dist/engine/api-compat/compatibility-checker.js.map +1 -0
- package/dist/engine/checkpoint/checkpoint-manager.d.ts +22 -0
- package/dist/engine/checkpoint/checkpoint-manager.d.ts.map +1 -0
- package/dist/engine/checkpoint/checkpoint-manager.js +76 -0
- package/dist/engine/checkpoint/checkpoint-manager.js.map +1 -0
- package/dist/engine/checkpoint/policy-engine.d.ts +10 -0
- package/dist/engine/checkpoint/policy-engine.d.ts.map +1 -0
- package/dist/engine/checkpoint/policy-engine.js +87 -0
- package/dist/engine/checkpoint/policy-engine.js.map +1 -0
- package/dist/engine/compliance/auto-remediator.d.ts +9 -0
- package/dist/engine/compliance/auto-remediator.d.ts.map +1 -0
- package/dist/engine/compliance/auto-remediator.js +118 -0
- package/dist/engine/compliance/auto-remediator.js.map +1 -0
- package/dist/engine/compliance/evidence-builder.d.ts +19 -0
- package/dist/engine/compliance/evidence-builder.d.ts.map +1 -0
- package/dist/engine/compliance/evidence-builder.js +36 -0
- package/dist/engine/compliance/evidence-builder.js.map +1 -0
- package/dist/engine/compliance/framework-catalog.d.ts +15 -0
- package/dist/engine/compliance/framework-catalog.d.ts.map +1 -0
- package/dist/engine/compliance/framework-catalog.js +134 -0
- package/dist/engine/compliance/framework-catalog.js.map +1 -0
- package/dist/engine/compliance/gap-analyzer.d.ts +11 -0
- package/dist/engine/compliance/gap-analyzer.d.ts.map +1 -0
- package/dist/engine/compliance/gap-analyzer.js +39 -0
- package/dist/engine/compliance/gap-analyzer.js.map +1 -0
- package/dist/engine/context-profile/profile-catalog.d.ts +5 -0
- package/dist/engine/context-profile/profile-catalog.d.ts.map +1 -0
- package/dist/engine/context-profile/profile-catalog.js +145 -0
- package/dist/engine/context-profile/profile-catalog.js.map +1 -0
- package/dist/engine/critical-path/path-analyzer.d.ts +3 -0
- package/dist/engine/critical-path/path-analyzer.d.ts.map +1 -0
- package/dist/engine/critical-path/path-analyzer.js +145 -0
- package/dist/engine/critical-path/path-analyzer.js.map +1 -0
- package/dist/engine/distribution/cost-estimator.d.ts +8 -0
- package/dist/engine/distribution/cost-estimator.d.ts.map +1 -0
- package/dist/engine/distribution/cost-estimator.js +113 -0
- package/dist/engine/distribution/cost-estimator.js.map +1 -0
- package/dist/engine/distribution/diagram-generator.d.ts +12 -0
- package/dist/engine/distribution/diagram-generator.d.ts.map +1 -0
- package/dist/engine/distribution/diagram-generator.js +59 -0
- package/dist/engine/distribution/diagram-generator.js.map +1 -0
- package/dist/engine/distribution/readiness-analyzer.d.ts +4 -0
- package/dist/engine/distribution/readiness-analyzer.d.ts.map +1 -0
- package/dist/engine/distribution/readiness-analyzer.js +61 -0
- package/dist/engine/distribution/readiness-analyzer.js.map +1 -0
- package/dist/engine/distribution/runbook-generator.d.ts +7 -0
- package/dist/engine/distribution/runbook-generator.d.ts.map +1 -0
- package/dist/engine/distribution/runbook-generator.js +42 -0
- package/dist/engine/distribution/runbook-generator.js.map +1 -0
- package/dist/engine/drift/violation-resolver.d.ts +9 -0
- package/dist/engine/drift/violation-resolver.d.ts.map +1 -0
- package/dist/engine/drift/violation-resolver.js +128 -0
- package/dist/engine/drift/violation-resolver.js.map +1 -0
- package/dist/engine/ears/criterion-scorer.d.ts +7 -0
- package/dist/engine/ears/criterion-scorer.d.ts.map +1 -0
- package/dist/engine/ears/criterion-scorer.js +87 -0
- package/dist/engine/ears/criterion-scorer.js.map +1 -0
- package/dist/engine/ears/pattern-matcher.d.ts +5 -0
- package/dist/engine/ears/pattern-matcher.d.ts.map +1 -0
- package/dist/engine/ears/pattern-matcher.js +48 -0
- package/dist/engine/ears/pattern-matcher.js.map +1 -0
- package/dist/engine/ears/rewriter.d.ts +7 -0
- package/dist/engine/ears/rewriter.d.ts.map +1 -0
- package/dist/engine/ears/rewriter.js +45 -0
- package/dist/engine/ears/rewriter.js.map +1 -0
- package/dist/engine/ears/spec-linter.d.ts +7 -0
- package/dist/engine/ears/spec-linter.d.ts.map +1 -0
- package/dist/engine/ears/spec-linter.js +127 -0
- package/dist/engine/ears/spec-linter.js.map +1 -0
- package/dist/engine/health/auto-fixer.d.ts +7 -0
- package/dist/engine/health/auto-fixer.d.ts.map +1 -0
- package/dist/engine/health/auto-fixer.js +130 -0
- package/dist/engine/health/auto-fixer.js.map +1 -0
- package/dist/engine/mcp-catalog/catalog-advisor.d.ts +3 -0
- package/dist/engine/mcp-catalog/catalog-advisor.d.ts.map +1 -0
- package/dist/engine/mcp-catalog/catalog-advisor.js +180 -0
- package/dist/engine/mcp-catalog/catalog-advisor.js.map +1 -0
- package/dist/engine/mcp-hub/adapter-registry.d.ts +23 -0
- package/dist/engine/mcp-hub/adapter-registry.d.ts.map +1 -0
- package/dist/engine/mcp-hub/adapter-registry.js +19 -0
- package/dist/engine/mcp-hub/adapter-registry.js.map +1 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.d.ts +4 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.d.ts.map +1 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.js +44 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.js.map +1 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.d.ts +4 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.d.ts.map +1 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.js +41 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.js.map +1 -0
- package/dist/engine/mcp-hub/event-router.d.ts +19 -0
- package/dist/engine/mcp-hub/event-router.d.ts.map +1 -0
- package/dist/engine/mcp-hub/event-router.js +47 -0
- package/dist/engine/mcp-hub/event-router.js.map +1 -0
- package/dist/engine/productivity/calibration-engine.d.ts +17 -0
- package/dist/engine/productivity/calibration-engine.d.ts.map +1 -0
- package/dist/engine/productivity/calibration-engine.js +49 -0
- package/dist/engine/productivity/calibration-engine.js.map +1 -0
- package/dist/engine/productivity/time-tracker.d.ts +6 -0
- package/dist/engine/productivity/time-tracker.d.ts.map +1 -0
- package/dist/engine/productivity/time-tracker.js +28 -0
- package/dist/engine/productivity/time-tracker.js.map +1 -0
- package/dist/engine/productivity/vibe-tax-calculator.d.ts +14 -0
- package/dist/engine/productivity/vibe-tax-calculator.d.ts.map +1 -0
- package/dist/engine/productivity/vibe-tax-calculator.js +63 -0
- package/dist/engine/productivity/vibe-tax-calculator.js.map +1 -0
- package/dist/engine/quality-gates/gate-catalog.d.ts +6 -0
- package/dist/engine/quality-gates/gate-catalog.d.ts.map +1 -0
- package/dist/engine/quality-gates/gate-catalog.js +351 -0
- package/dist/engine/quality-gates/gate-catalog.js.map +1 -0
- package/dist/engine/quality-gates/gate-evaluator.d.ts +3 -0
- package/dist/engine/quality-gates/gate-evaluator.d.ts.map +1 -0
- package/dist/engine/quality-gates/gate-evaluator.js +25 -0
- package/dist/engine/quality-gates/gate-evaluator.js.map +1 -0
- package/dist/engine/quality-gates/gate-injector.d.ts +20 -0
- package/dist/engine/quality-gates/gate-injector.d.ts.map +1 -0
- package/dist/engine/quality-gates/gate-injector.js +75 -0
- package/dist/engine/quality-gates/gate-injector.js.map +1 -0
- package/dist/engine/similar-problems/similarity-finder.d.ts +3 -0
- package/dist/engine/similar-problems/similarity-finder.d.ts.map +1 -0
- package/dist/engine/similar-problems/similarity-finder.js +144 -0
- package/dist/engine/similar-problems/similarity-finder.js.map +1 -0
- package/dist/engine/sync/asana-puller.d.ts +9 -0
- package/dist/engine/sync/asana-puller.d.ts.map +1 -0
- package/dist/engine/sync/asana-puller.js +91 -0
- package/dist/engine/sync/asana-puller.js.map +1 -0
- package/dist/engine/sync/conflict-resolver.d.ts +17 -0
- package/dist/engine/sync/conflict-resolver.d.ts.map +1 -0
- package/dist/engine/sync/conflict-resolver.js +58 -0
- package/dist/engine/sync/conflict-resolver.js.map +1 -0
- package/dist/engine/sync/monday-puller.d.ts +9 -0
- package/dist/engine/sync/monday-puller.d.ts.map +1 -0
- package/dist/engine/sync/monday-puller.js +110 -0
- package/dist/engine/sync/monday-puller.js.map +1 -0
- package/dist/engine/sync/notion-puller.d.ts +15 -0
- package/dist/engine/sync/notion-puller.d.ts.map +1 -0
- package/dist/engine/sync/notion-puller.js +101 -0
- package/dist/engine/sync/notion-puller.js.map +1 -0
- package/dist/engine/verifier/code-scanner.d.ts +8 -0
- package/dist/engine/verifier/code-scanner.d.ts.map +1 -0
- package/dist/engine/verifier/code-scanner.js +73 -0
- package/dist/engine/verifier/code-scanner.js.map +1 -0
- package/dist/engine/verifier/compliance-scorer.d.ts +17 -0
- package/dist/engine/verifier/compliance-scorer.d.ts.map +1 -0
- package/dist/engine/verifier/compliance-scorer.js +131 -0
- package/dist/engine/verifier/compliance-scorer.js.map +1 -0
- package/dist/engine/verifier/criterion-matcher.d.ts +15 -0
- package/dist/engine/verifier/criterion-matcher.d.ts.map +1 -0
- package/dist/engine/verifier/criterion-matcher.js +210 -0
- package/dist/engine/verifier/criterion-matcher.js.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/compliance-audit-store.d.ts +12 -0
- package/dist/storage/compliance-audit-store.d.ts.map +1 -0
- package/dist/storage/compliance-audit-store.js +40 -0
- package/dist/storage/compliance-audit-store.js.map +1 -0
- package/dist/storage/compliance-score-store.d.ts +16 -0
- package/dist/storage/compliance-score-store.d.ts.map +1 -0
- package/dist/storage/compliance-score-store.js +30 -0
- package/dist/storage/compliance-score-store.js.map +1 -0
- package/dist/storage/context-profile-store.d.ts +14 -0
- package/dist/storage/context-profile-store.d.ts.map +1 -0
- package/dist/storage/context-profile-store.js +34 -0
- package/dist/storage/context-profile-store.js.map +1 -0
- package/dist/storage/mcp-hub-store.d.ts +9 -0
- package/dist/storage/mcp-hub-store.d.ts.map +1 -0
- package/dist/storage/mcp-hub-store.js +28 -0
- package/dist/storage/mcp-hub-store.js.map +1 -0
- package/dist/storage/time-tracking-store.d.ts +6 -0
- package/dist/storage/time-tracking-store.d.ts.map +1 -0
- package/dist/storage/time-tracking-store.js +34 -0
- package/dist/storage/time-tracking-store.js.map +1 -0
- package/dist/storage/workflow-checkpoint-store.d.ts +16 -0
- package/dist/storage/workflow-checkpoint-store.d.ts.map +1 -0
- package/dist/storage/workflow-checkpoint-store.js +71 -0
- package/dist/storage/workflow-checkpoint-store.js.map +1 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.js +32 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.js.map +1 -0
- package/dist/tools/checkpoint/configure-policy-handler.d.ts +3 -0
- package/dist/tools/checkpoint/configure-policy-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/configure-policy-handler.js +60 -0
- package/dist/tools/checkpoint/configure-policy-handler.js.map +1 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.d.ts +3 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.js +25 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.js.map +1 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.js +32 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.js.map +1 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.js +44 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.js.map +1 -0
- package/dist/tools/compliance-gap-handler.d.ts +5 -0
- package/dist/tools/compliance-gap-handler.d.ts.map +1 -0
- package/dist/tools/compliance-gap-handler.js +64 -0
- package/dist/tools/compliance-gap-handler.js.map +1 -0
- package/dist/tools/distribution-readiness-handler.d.ts +3 -0
- package/dist/tools/distribution-readiness-handler.d.ts.map +1 -0
- package/dist/tools/distribution-readiness-handler.js +24 -0
- package/dist/tools/distribution-readiness-handler.js.map +1 -0
- package/dist/tools/generate-cost-estimate-handler.d.ts +3 -0
- package/dist/tools/generate-cost-estimate-handler.d.ts.map +1 -0
- package/dist/tools/generate-cost-estimate-handler.js +29 -0
- package/dist/tools/generate-cost-estimate-handler.js.map +1 -0
- package/dist/tools/generate-deployment-diagram-handler.d.ts +3 -0
- package/dist/tools/generate-deployment-diagram-handler.d.ts.map +1 -0
- package/dist/tools/generate-deployment-diagram-handler.js +26 -0
- package/dist/tools/generate-deployment-diagram-handler.js.map +1 -0
- package/dist/tools/generate-runbook-handler.d.ts +3 -0
- package/dist/tools/generate-runbook-handler.d.ts.map +1 -0
- package/dist/tools/generate-runbook-handler.js +18 -0
- package/dist/tools/generate-runbook-handler.js.map +1 -0
- package/dist/tools/inject-quality-gates-handler.d.ts +7 -0
- package/dist/tools/inject-quality-gates-handler.d.ts.map +1 -0
- package/dist/tools/inject-quality-gates-handler.js +59 -0
- package/dist/tools/inject-quality-gates-handler.js.map +1 -0
- package/dist/tools/mcp-hub-handler.d.ts +7 -0
- package/dist/tools/mcp-hub-handler.d.ts.map +1 -0
- package/dist/tools/mcp-hub-handler.js +73 -0
- package/dist/tools/mcp-hub-handler.js.map +1 -0
- package/dist/tools/productivity-report-handler.d.ts +4 -0
- package/dist/tools/productivity-report-handler.d.ts.map +1 -0
- package/dist/tools/productivity-report-handler.js +98 -0
- package/dist/tools/productivity-report-handler.js.map +1 -0
- package/dist/tools/pull-sync-handler.d.ts +25 -0
- package/dist/tools/pull-sync-handler.d.ts.map +1 -0
- package/dist/tools/pull-sync-handler.js +161 -0
- package/dist/tools/pull-sync-handler.js.map +1 -0
- package/dist/tools/register-auto-remediation.d.ts +3 -0
- package/dist/tools/register-auto-remediation.d.ts.map +1 -0
- package/dist/tools/register-auto-remediation.js +174 -0
- package/dist/tools/register-auto-remediation.js.map +1 -0
- package/dist/tools/register-checkpoints.d.ts +3 -0
- package/dist/tools/register-checkpoints.d.ts.map +1 -0
- package/dist/tools/register-checkpoints.js +134 -0
- package/dist/tools/register-checkpoints.js.map +1 -0
- package/dist/tools/register-context-profile.d.ts +3 -0
- package/dist/tools/register-context-profile.d.ts.map +1 -0
- package/dist/tools/register-context-profile.js +106 -0
- package/dist/tools/register-context-profile.js.map +1 -0
- package/dist/tools/register-distribution.d.ts +3 -0
- package/dist/tools/register-distribution.d.ts.map +1 -0
- package/dist/tools/register-distribution.js +103 -0
- package/dist/tools/register-distribution.js.map +1 -0
- package/dist/tools/register-ears.d.ts +3 -0
- package/dist/tools/register-ears.d.ts.map +1 -0
- package/dist/tools/register-ears.js +148 -0
- package/dist/tools/register-ears.js.map +1 -0
- package/dist/tools/register-enterprise-compliance.d.ts +3 -0
- package/dist/tools/register-enterprise-compliance.d.ts.map +1 -0
- package/dist/tools/register-enterprise-compliance.js +30 -0
- package/dist/tools/register-enterprise-compliance.js.map +1 -0
- package/dist/tools/register-mcp-hub.d.ts +3 -0
- package/dist/tools/register-mcp-hub.d.ts.map +1 -0
- package/dist/tools/register-mcp-hub.js +47 -0
- package/dist/tools/register-mcp-hub.js.map +1 -0
- package/dist/tools/register-productivity.d.ts +3 -0
- package/dist/tools/register-productivity.d.ts.map +1 -0
- package/dist/tools/register-productivity.js +25 -0
- package/dist/tools/register-productivity.js.map +1 -0
- package/dist/tools/register-pull-sync.d.ts +3 -0
- package/dist/tools/register-pull-sync.d.ts.map +1 -0
- package/dist/tools/register-pull-sync.js +71 -0
- package/dist/tools/register-pull-sync.js.map +1 -0
- package/dist/tools/register-quality-gates.d.ts +3 -0
- package/dist/tools/register-quality-gates.d.ts.map +1 -0
- package/dist/tools/register-quality-gates.js +47 -0
- package/dist/tools/register-quality-gates.js.map +1 -0
- package/dist/tools/register-spec405-tools.d.ts +7 -0
- package/dist/tools/register-spec405-tools.d.ts.map +1 -0
- package/dist/tools/register-spec405-tools.js +194 -0
- package/dist/tools/register-spec405-tools.js.map +1 -0
- package/dist/tools/register-verifier.d.ts +3 -0
- package/dist/tools/register-verifier.d.ts.map +1 -0
- package/dist/tools/register-verifier.js +141 -0
- package/dist/tools/register-verifier.js.map +1 -0
- package/dist/types/analysis.d.ts +128 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/context-profile.d.ts +22 -0
- package/dist/types/context-profile.d.ts.map +1 -0
- package/dist/types/context-profile.js +2 -0
- package/dist/types/context-profile.js.map +1 -0
- package/dist/types/docs.d.ts +43 -0
- package/dist/types/docs.d.ts.map +1 -1
- package/dist/types/ears.d.ts +34 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +3 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/env.d.ts +23 -0
- package/dist/types/env.d.ts.map +1 -1
- package/dist/types/estimation.d.ts +30 -0
- package/dist/types/estimation.d.ts.map +1 -1
- package/dist/types/health.d.ts +40 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +3 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/notion-asana-monday.d.ts +38 -0
- package/dist/types/notion-asana-monday.d.ts.map +1 -1
- package/dist/types/orchestration/index.d.ts +1 -0
- package/dist/types/orchestration/index.d.ts.map +1 -1
- package/dist/types/orchestration/mcp-hub.d.ts +29 -0
- package/dist/types/orchestration/mcp-hub.d.ts.map +1 -0
- package/dist/types/orchestration/mcp-hub.js +3 -0
- package/dist/types/orchestration/mcp-hub.js.map +1 -0
- package/dist/types/orchestration.d.ts +1 -1
- package/dist/types/orchestration.d.ts.map +1 -1
- package/dist/types/workflow-checkpoint.d.ts +66 -0
- package/dist/types/workflow-checkpoint.d.ts.map +1 -0
- package/dist/types/workflow-checkpoint.js +4 -0
- package/dist/types/workflow-checkpoint.js.map +1 -0
- package/package.json +1 -1
- package/src/config/license-plans.json +32 -2
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
export const GATE_CATALOG = [
|
|
2
|
+
// Security gates (15)
|
|
3
|
+
{
|
|
4
|
+
id: 'sec-sql-injection',
|
|
5
|
+
category: 'security',
|
|
6
|
+
title: 'All DB queries use parameterized queries or ORM — no string interpolation in SQL',
|
|
7
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
8
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
9
|
+
specTypes: ['all'],
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: 'sec-input-validation',
|
|
13
|
+
category: 'security',
|
|
14
|
+
title: 'All user inputs validated with Zod/Pydantic/schema at system boundaries',
|
|
15
|
+
stacks: ['typescript', 'python', 'generic'],
|
|
16
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
17
|
+
specTypes: ['all'],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: 'sec-auth-check',
|
|
21
|
+
category: 'security',
|
|
22
|
+
title: 'All endpoints/routes require authentication check before processing',
|
|
23
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
24
|
+
riskLevels: ['medium', 'high'],
|
|
25
|
+
specTypes: ['feature', 'infra'],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'sec-sensitive-data',
|
|
29
|
+
category: 'security',
|
|
30
|
+
title: 'No PII or secrets logged to console/file — use redaction or masking',
|
|
31
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
32
|
+
riskLevels: ['medium', 'high'],
|
|
33
|
+
specTypes: ['all'],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'sec-cors',
|
|
37
|
+
category: 'security',
|
|
38
|
+
title: 'CORS configured explicitly — no wildcard origin in production',
|
|
39
|
+
stacks: ['typescript', 'python', 'generic'],
|
|
40
|
+
riskLevels: ['medium', 'high'],
|
|
41
|
+
specTypes: ['feature', 'infra'],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: 'sec-rate-limit',
|
|
45
|
+
category: 'security',
|
|
46
|
+
title: 'Rate limiting applied to all public endpoints',
|
|
47
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
48
|
+
riskLevels: ['high'],
|
|
49
|
+
specTypes: ['feature', 'infra'],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'sec-xss',
|
|
53
|
+
category: 'security',
|
|
54
|
+
title: 'All user-generated content escaped before rendering in HTML',
|
|
55
|
+
stacks: ['typescript', 'generic'],
|
|
56
|
+
riskLevels: ['medium', 'high'],
|
|
57
|
+
specTypes: ['feature'],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'sec-csrf',
|
|
61
|
+
category: 'security',
|
|
62
|
+
title: 'CSRF tokens required for state-changing operations in browser context',
|
|
63
|
+
stacks: ['typescript', 'generic'],
|
|
64
|
+
riskLevels: ['medium', 'high'],
|
|
65
|
+
specTypes: ['feature'],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'sec-dependency-check',
|
|
69
|
+
category: 'security',
|
|
70
|
+
title: 'No new dependencies with known critical vulnerabilities (npm audit / pip audit)',
|
|
71
|
+
stacks: ['typescript', 'python', 'generic'],
|
|
72
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
73
|
+
specTypes: ['all'],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'sec-env-secrets',
|
|
77
|
+
category: 'security',
|
|
78
|
+
title: 'No secrets hardcoded — all credentials via environment variables',
|
|
79
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
80
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
81
|
+
specTypes: ['all'],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: 'sec-error-disclosure',
|
|
85
|
+
category: 'security',
|
|
86
|
+
title: 'Error responses do not expose internal stack traces or system details to clients',
|
|
87
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
88
|
+
riskLevels: ['medium', 'high'],
|
|
89
|
+
specTypes: ['all'],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'sec-jwt-validation',
|
|
93
|
+
category: 'security',
|
|
94
|
+
title: 'JWT tokens validated for signature, expiry, and issuer on every protected route',
|
|
95
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
96
|
+
riskLevels: ['high'],
|
|
97
|
+
specTypes: ['feature', 'infra'],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'sec-file-upload',
|
|
101
|
+
category: 'security',
|
|
102
|
+
title: 'File uploads: type validation, size limits, and virus scanning configured',
|
|
103
|
+
stacks: ['typescript', 'python', 'generic'],
|
|
104
|
+
riskLevels: ['high'],
|
|
105
|
+
specTypes: ['feature'],
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: 'sec-path-traversal',
|
|
109
|
+
category: 'security',
|
|
110
|
+
title: 'File system paths sanitized — no user-controlled path traversal possible',
|
|
111
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
112
|
+
riskLevels: ['medium', 'high'],
|
|
113
|
+
specTypes: ['feature', 'infra'],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 'sec-https-only',
|
|
117
|
+
category: 'security',
|
|
118
|
+
title: 'All external API calls use HTTPS — no HTTP in production',
|
|
119
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
120
|
+
riskLevels: ['medium', 'high'],
|
|
121
|
+
specTypes: ['all'],
|
|
122
|
+
},
|
|
123
|
+
// Testing gates (10)
|
|
124
|
+
{
|
|
125
|
+
id: 'test-unit-coverage',
|
|
126
|
+
category: 'testing',
|
|
127
|
+
title: 'Unit tests cover ≥95% branch coverage for all new modules',
|
|
128
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
129
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
130
|
+
specTypes: ['all'],
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
id: 'test-integration',
|
|
134
|
+
category: 'testing',
|
|
135
|
+
title: 'Integration test for each external dependency interaction (API, DB, cache)',
|
|
136
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
137
|
+
riskLevels: ['medium', 'high'],
|
|
138
|
+
specTypes: ['feature', 'infra'],
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: 'test-happy-path',
|
|
142
|
+
category: 'testing',
|
|
143
|
+
title: 'Happy path test for each acceptance criterion',
|
|
144
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
145
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
146
|
+
specTypes: ['all'],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'test-error-paths',
|
|
150
|
+
category: 'testing',
|
|
151
|
+
title: 'Error path tests: invalid input, network failure, not-found cases',
|
|
152
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
153
|
+
riskLevels: ['medium', 'high'],
|
|
154
|
+
specTypes: ['all'],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: 'test-edge-cases',
|
|
158
|
+
category: 'testing',
|
|
159
|
+
title: 'Edge case tests: empty input, maximum values, concurrent operations',
|
|
160
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
161
|
+
riskLevels: ['medium', 'high'],
|
|
162
|
+
specTypes: ['feature'],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
id: 'test-no-mocks-abuse',
|
|
166
|
+
category: 'testing',
|
|
167
|
+
title: 'Tests do not mock the unit under test — only external dependencies mocked',
|
|
168
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
169
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
170
|
+
specTypes: ['all'],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
id: 'test-deterministic',
|
|
174
|
+
category: 'testing',
|
|
175
|
+
title: 'All tests are deterministic — no random data, flaky network, or time-dependent state',
|
|
176
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
177
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
178
|
+
specTypes: ['all'],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: 'test-ci-passes',
|
|
182
|
+
category: 'testing',
|
|
183
|
+
title: 'All tests pass in CI environment without manual intervention',
|
|
184
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
185
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
186
|
+
specTypes: ['all'],
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'test-performance-regression',
|
|
190
|
+
category: 'testing',
|
|
191
|
+
title: 'Performance regression test: response time within 10% of baseline',
|
|
192
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
193
|
+
riskLevels: ['high'],
|
|
194
|
+
specTypes: ['feature'],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: 'test-snapshot',
|
|
198
|
+
category: 'testing',
|
|
199
|
+
title: 'Snapshot tests for all UI components and generated outputs',
|
|
200
|
+
stacks: ['typescript', 'generic'],
|
|
201
|
+
riskLevels: ['medium', 'high'],
|
|
202
|
+
specTypes: ['feature'],
|
|
203
|
+
},
|
|
204
|
+
// Architecture gates (10)
|
|
205
|
+
{
|
|
206
|
+
id: 'arch-layer-violation',
|
|
207
|
+
category: 'architecture',
|
|
208
|
+
title: 'No cross-layer imports: frontend does not import from backend modules directly',
|
|
209
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
210
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
211
|
+
specTypes: ['all'],
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
id: 'arch-single-responsibility',
|
|
215
|
+
category: 'architecture',
|
|
216
|
+
title: 'Each module/class has single responsibility — max 1 reason to change',
|
|
217
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
218
|
+
riskLevels: ['medium', 'high'],
|
|
219
|
+
specTypes: ['all'],
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
id: 'arch-no-god-object',
|
|
223
|
+
category: 'architecture',
|
|
224
|
+
title: 'No god objects — functions max 80 lines, files max 400 lines',
|
|
225
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
226
|
+
riskLevels: ['medium', 'high'],
|
|
227
|
+
specTypes: ['all'],
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
id: 'arch-dependency-injection',
|
|
231
|
+
category: 'architecture',
|
|
232
|
+
title: 'External dependencies injected (not imported directly) for testability',
|
|
233
|
+
stacks: ['typescript', 'python', 'java', 'generic'],
|
|
234
|
+
riskLevels: ['medium', 'high'],
|
|
235
|
+
specTypes: ['feature'],
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
id: 'arch-no-circular',
|
|
239
|
+
category: 'architecture',
|
|
240
|
+
title: 'No circular module dependencies — verified with madge or similar',
|
|
241
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
242
|
+
riskLevels: ['low', 'medium', 'high'],
|
|
243
|
+
specTypes: ['all'],
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
id: 'arch-api-contract',
|
|
247
|
+
category: 'architecture',
|
|
248
|
+
title: 'API contracts (request/response) defined with typed schemas before implementation',
|
|
249
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
250
|
+
riskLevels: ['medium', 'high'],
|
|
251
|
+
specTypes: ['feature'],
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: 'arch-error-boundaries',
|
|
255
|
+
category: 'architecture',
|
|
256
|
+
title: 'Error boundaries defined at module edges — errors do not propagate silently',
|
|
257
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
258
|
+
riskLevels: ['medium', 'high'],
|
|
259
|
+
specTypes: ['all'],
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
id: 'arch-backward-compat',
|
|
263
|
+
category: 'architecture',
|
|
264
|
+
title: 'No breaking changes to existing public APIs without major version bump',
|
|
265
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
266
|
+
riskLevels: ['medium', 'high'],
|
|
267
|
+
specTypes: ['refactor'],
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
id: 'arch-logging',
|
|
271
|
+
category: 'architecture',
|
|
272
|
+
title: 'Structured logging with request ID / correlation ID for all operations',
|
|
273
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
274
|
+
riskLevels: ['medium', 'high'],
|
|
275
|
+
specTypes: ['feature', 'infra'],
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
id: 'arch-config-externalized',
|
|
279
|
+
category: 'architecture',
|
|
280
|
+
title: 'All configuration externalized — no magic strings/numbers in business logic',
|
|
281
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
282
|
+
riskLevels: ['medium', 'high'],
|
|
283
|
+
specTypes: ['all'],
|
|
284
|
+
},
|
|
285
|
+
// Performance gates (8)
|
|
286
|
+
{
|
|
287
|
+
id: 'perf-lcp',
|
|
288
|
+
category: 'performance',
|
|
289
|
+
title: 'LCP (Largest Contentful Paint) ≤2.5s on 4G mobile connection',
|
|
290
|
+
stacks: ['typescript', 'generic'],
|
|
291
|
+
riskLevels: ['medium', 'high'],
|
|
292
|
+
specTypes: ['feature'],
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
id: 'perf-no-n-plus-1',
|
|
296
|
+
category: 'performance',
|
|
297
|
+
title: 'No N+1 query patterns — use batching, DataLoader, or eager loading',
|
|
298
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
299
|
+
riskLevels: ['medium', 'high'],
|
|
300
|
+
specTypes: ['feature'],
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
id: 'perf-bundle-size',
|
|
304
|
+
category: 'performance',
|
|
305
|
+
title: 'JavaScript bundle size increase <50KB gzipped per feature',
|
|
306
|
+
stacks: ['typescript', 'generic'],
|
|
307
|
+
riskLevels: ['medium', 'high'],
|
|
308
|
+
specTypes: ['feature'],
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
id: 'perf-db-indexes',
|
|
312
|
+
category: 'performance',
|
|
313
|
+
title: 'Database queries on new tables use appropriate indexes',
|
|
314
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
315
|
+
riskLevels: ['medium', 'high'],
|
|
316
|
+
specTypes: ['feature', 'infra'],
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
id: 'perf-caching',
|
|
320
|
+
category: 'performance',
|
|
321
|
+
title: 'Expensive computations (>100ms) cached with appropriate TTL',
|
|
322
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
323
|
+
riskLevels: ['high'],
|
|
324
|
+
specTypes: ['feature'],
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
id: 'perf-async',
|
|
328
|
+
category: 'performance',
|
|
329
|
+
title: 'No synchronous blocking I/O in hot paths — all disk/network operations async',
|
|
330
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
331
|
+
riskLevels: ['medium', 'high'],
|
|
332
|
+
specTypes: ['feature', 'infra'],
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
id: 'perf-pagination',
|
|
336
|
+
category: 'performance',
|
|
337
|
+
title: 'All list endpoints paginated — no unbounded queries returning full table',
|
|
338
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
339
|
+
riskLevels: ['medium', 'high'],
|
|
340
|
+
specTypes: ['feature'],
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
id: 'perf-timeout',
|
|
344
|
+
category: 'performance',
|
|
345
|
+
title: 'Timeout configured for all external API calls — no indefinite waits',
|
|
346
|
+
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
347
|
+
riskLevels: ['medium', 'high'],
|
|
348
|
+
specTypes: ['feature', 'infra'],
|
|
349
|
+
},
|
|
350
|
+
];
|
|
351
|
+
//# sourceMappingURL=gate-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-catalog.js","sourceRoot":"","sources":["../../../src/engine/quality-gates/gate-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-evaluator.d.ts","sourceRoot":"","sources":["../../../src/engine/quality-gates/gate-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlE,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAmBzE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { GATE_CATALOG } from './gate-catalog.js';
|
|
2
|
+
export function evaluateGates(specMarkdown) {
|
|
3
|
+
const autoGates = GATE_CATALOG.filter((g) => specMarkdown.includes(`[AUTO] ${g.title}`));
|
|
4
|
+
const passed = autoGates.filter((g) => {
|
|
5
|
+
// Look for checked version: [x] [AUTO] title
|
|
6
|
+
const checkedPattern = new RegExp(`- \\[x\\] \\[AUTO\\] ${escapeRegex(g.title)}`, 'i');
|
|
7
|
+
return checkedPattern.test(specMarkdown);
|
|
8
|
+
});
|
|
9
|
+
const failed = autoGates.filter((g) => !passed.includes(g));
|
|
10
|
+
return {
|
|
11
|
+
total: autoGates.length,
|
|
12
|
+
passed: passed.length,
|
|
13
|
+
failed: failed.length,
|
|
14
|
+
failedGates: failed.map((g) => ({
|
|
15
|
+
id: g.id,
|
|
16
|
+
title: g.title,
|
|
17
|
+
category: g.category,
|
|
18
|
+
})),
|
|
19
|
+
score: autoGates.length === 0 ? 100 : Math.round((passed.length / autoGates.length) * 100),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function escapeRegex(str) {
|
|
23
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=gate-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-evaluator.js","sourceRoot":"","sources":["../../../src/engine/quality-gates/gate-evaluator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,6CAA6C;QAC7C,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,wBAAwB,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACvF,OAAO,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC;QACH,KAAK,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { QualityGateInjectionResult } from '../../types/index.js';
|
|
2
|
+
import { GATE_CATALOG, type GateCategory, type StackType } from './gate-catalog.js';
|
|
3
|
+
interface InjectionContext {
|
|
4
|
+
specType: string;
|
|
5
|
+
risk: 'low' | 'medium' | 'high';
|
|
6
|
+
stack: StackType;
|
|
7
|
+
categories: GateCategory[];
|
|
8
|
+
}
|
|
9
|
+
export declare function selectGates(ctx: InjectionContext): typeof GATE_CATALOG;
|
|
10
|
+
export declare function formatGatesSection(gates: typeof GATE_CATALOG): string;
|
|
11
|
+
export declare function inferStack(language?: string, framework?: string): StackType;
|
|
12
|
+
export declare function injectQualityGates(params: {
|
|
13
|
+
specType: string;
|
|
14
|
+
risk: 'low' | 'medium' | 'high';
|
|
15
|
+
language?: string;
|
|
16
|
+
framework?: string;
|
|
17
|
+
categories?: GateCategory[];
|
|
18
|
+
}): QualityGateInjectionResult;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=gate-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-injector.d.ts","sourceRoot":"","sources":["../../../src/engine/quality-gates/gate-injector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGpF,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,YAAY,CAQtE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,YAAY,GAAG,MAAM,CAmBrE;AAED,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAsB3E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B,GAAG,0BAA0B,CAyB7B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { GATE_CATALOG } from './gate-catalog.js';
|
|
2
|
+
export function selectGates(ctx) {
|
|
3
|
+
return GATE_CATALOG.filter((g) => (g.specTypes.includes(ctx.specType) || g.specTypes.includes('all')) &&
|
|
4
|
+
g.riskLevels.includes(ctx.risk) &&
|
|
5
|
+
(g.stacks.includes(ctx.stack) || g.stacks.includes('generic')) &&
|
|
6
|
+
ctx.categories.includes(g.category));
|
|
7
|
+
}
|
|
8
|
+
export function formatGatesSection(gates) {
|
|
9
|
+
if (gates.length === 0) {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
const byCategory = new Map();
|
|
13
|
+
for (const g of gates) {
|
|
14
|
+
const list = byCategory.get(g.category) ?? [];
|
|
15
|
+
list.push(g);
|
|
16
|
+
byCategory.set(g.category, list);
|
|
17
|
+
}
|
|
18
|
+
const lines = ['\n## Quality Gates [AUTO]', ''];
|
|
19
|
+
for (const [cat, catGates] of byCategory) {
|
|
20
|
+
lines.push(`### ${cat.charAt(0).toUpperCase() + cat.slice(1)}`);
|
|
21
|
+
for (const g of catGates) {
|
|
22
|
+
lines.push(`- [ ] [AUTO] ${g.title}`);
|
|
23
|
+
}
|
|
24
|
+
lines.push('');
|
|
25
|
+
}
|
|
26
|
+
return lines.join('\n');
|
|
27
|
+
}
|
|
28
|
+
export function inferStack(language, framework) {
|
|
29
|
+
const lang = (language ?? '').toLowerCase();
|
|
30
|
+
const fw = (framework ?? '').toLowerCase();
|
|
31
|
+
if (lang.includes('python') || fw.includes('fastapi') || fw.includes('django')) {
|
|
32
|
+
return 'python';
|
|
33
|
+
}
|
|
34
|
+
// Check typescript/javascript BEFORE java to avoid 'javascript'.includes('java') matching
|
|
35
|
+
if (lang.includes('typescript') ||
|
|
36
|
+
lang.includes('javascript') ||
|
|
37
|
+
fw.includes('node') ||
|
|
38
|
+
fw.includes('next')) {
|
|
39
|
+
return 'typescript';
|
|
40
|
+
}
|
|
41
|
+
if (lang === 'java' || fw.includes('spring')) {
|
|
42
|
+
return 'java';
|
|
43
|
+
}
|
|
44
|
+
if (lang.includes('go') || fw.includes('gin') || fw.includes('fiber')) {
|
|
45
|
+
return 'go';
|
|
46
|
+
}
|
|
47
|
+
return 'generic';
|
|
48
|
+
}
|
|
49
|
+
export function injectQualityGates(params) {
|
|
50
|
+
const stack = inferStack(params.language, params.framework);
|
|
51
|
+
const categories = params.categories ?? [
|
|
52
|
+
'security',
|
|
53
|
+
'testing',
|
|
54
|
+
'architecture',
|
|
55
|
+
'performance',
|
|
56
|
+
];
|
|
57
|
+
const gates = selectGates({
|
|
58
|
+
specType: params.specType,
|
|
59
|
+
risk: params.risk,
|
|
60
|
+
stack,
|
|
61
|
+
categories,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
gates,
|
|
65
|
+
markdownSection: formatGatesSection(gates),
|
|
66
|
+
count: gates.length,
|
|
67
|
+
categoryCounts: {
|
|
68
|
+
security: gates.filter((g) => g.category === 'security').length,
|
|
69
|
+
testing: gates.filter((g) => g.category === 'testing').length,
|
|
70
|
+
architecture: gates.filter((g) => g.category === 'architecture').length,
|
|
71
|
+
performance: gates.filter((g) => g.category === 'performance').length,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=gate-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-injector.js","sourceRoot":"","sources":["../../../src/engine/quality-gates/gate-injector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqC,MAAM,mBAAmB,CAAC;AAUpF,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,OAAO,YAAY,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9D,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAA0B;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,KAAK,GAAa,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAiB,EAAE,SAAkB;IAC9D,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/E,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,0FAA0F;IAC1F,IACE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3B,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EACnB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAMlC;IACC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAmB,MAAM,CAAC,UAAU,IAAI;QACtD,UAAU;QACV,SAAS;QACT,cAAc;QACd,aAAa;KACd,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK;QACL,UAAU;KACX,CAAC,CAAC;IACH,OAAO;QACL,KAAK;QACL,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAC1C,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,cAAc,EAAE;YACd,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;YAC/D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;YAC7D,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC,MAAM;YACvE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,MAAM;SACtE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity-finder.d.ts","sourceRoot":"","sources":["../../../src/engine/similar-problems/similarity-finder.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAyG9B,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAiDhC"}
|