@planu/cli 4.13.0 → 4.14.1
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/CHANGELOG.md +29 -0
- package/README.md +24 -24
- package/dist/cli/commands/inspect.d.ts +4 -0
- package/dist/cli/commands/inspect.js +144 -0
- package/dist/cli/commands/install.d.ts +19 -1
- package/dist/cli/commands/install.js +145 -43
- package/dist/cli/commands/job.d.ts +3 -0
- package/dist/cli/commands/job.js +119 -0
- package/dist/cli/commands/offline.d.ts +15 -0
- package/dist/cli/commands/offline.js +132 -0
- package/dist/cli/commands/serve.js +4 -0
- package/dist/cli/commands/spec.js +1 -1
- package/dist/cli/commands/storage.d.ts +3 -0
- package/dist/cli/commands/storage.js +102 -0
- package/dist/cli/commands/uninstall.d.ts +10 -0
- package/dist/cli/commands/uninstall.js +93 -7
- package/dist/cli/commands/validate.js +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/router.js +9 -1
- package/dist/config/crash-shield-framework-rules.json +93 -0
- package/dist/config/environment-schema.json +149 -0
- package/dist/config/hardcode-exceptions.json +4 -0
- package/dist/config/license-plans.json +7 -0
- package/dist/config/native-release-public-key.pem +3 -0
- package/dist/config/native-targets.json +87 -0
- package/dist/config/product-public.d.ts +89 -0
- package/dist/config/product-public.js +140 -0
- package/dist/config/product-public.json +312 -0
- package/dist/config/product-public.ts +148 -0
- package/dist/config/release-compatibility.json +13 -0
- package/dist/config/release-policy.json +26 -0
- package/dist/config/runtime-policy.json +44 -0
- package/dist/config/skill-templates/planu-validate.md +7 -4
- package/dist/config/subagent-templates/planu-spec-implementer.md +7 -3
- package/dist/config/subagent-templates/planu-validator.md +10 -5
- package/dist/config/technology-registry.json +120 -0
- package/dist/config/version.js +7 -8
- package/dist/config/version.ts +10 -7
- package/dist/engine/abortable-process-runner.js +40 -9
- package/dist/engine/advanced-testing/accessibility-checker.js +12 -14
- package/dist/engine/advanced-testing/mutation-advisor.js +3 -4
- package/dist/engine/advanced-testing/property-based.js +2 -3
- package/dist/engine/advanced-testing/test-data-advisor.js +2 -3
- package/dist/engine/agent-generator.js +2 -1
- package/dist/engine/agent-handoff-store.js +2 -1
- package/dist/engine/agent-prompt-generator.js +7 -5
- package/dist/engine/agent-telemetry.js +2 -1
- package/dist/engine/ai-integration/gemini/extensions-advisor.js +41 -9
- package/dist/engine/ambiguity-detector.js +12 -11
- package/dist/engine/analyzer/db-engine.js +2 -3
- package/dist/engine/analyzer/detectors.js +13 -14
- package/dist/engine/analyzer/env-setup.js +9 -10
- package/dist/engine/analyzer-env-scanner/env-example.js +7 -8
- package/dist/engine/api-spec-generator/graphql-parser.js +2 -2
- package/dist/engine/api-validation/graphql-schema-validator.js +2 -1
- package/dist/engine/api-validation/openapi-impl-validator.js +6 -7
- package/dist/engine/architecture-detector.js +10 -8
- package/dist/engine/auth/config.d.ts +1 -1
- package/dist/engine/auth/config.js +4 -3
- package/dist/engine/auto-updater/atomic-upgrade.d.ts +8 -0
- package/dist/engine/auto-updater/atomic-upgrade.js +381 -0
- package/dist/engine/auto-updater/config-detector.js +9 -3
- package/dist/engine/auto-updater/config-patcher.d.ts +0 -4
- package/dist/engine/auto-updater/config-patcher.js +10 -15
- package/dist/engine/auto-updater/index.d.ts +3 -1
- package/dist/engine/auto-updater/index.js +44 -30
- package/dist/engine/auto-updater/npm-registry.js +10 -2
- package/dist/engine/auto-updater/release-verifier.d.ts +3 -0
- package/dist/engine/auto-updater/release-verifier.js +112 -0
- package/dist/engine/auto-updater/upgrade-lock.d.ts +6 -0
- package/dist/engine/auto-updater/upgrade-lock.js +28 -0
- package/dist/engine/auto-updater/upgrade-trust-state.d.ts +7 -0
- package/dist/engine/auto-updater/upgrade-trust-state.js +59 -0
- package/dist/engine/autopilot/audit-logger.js +2 -5
- package/dist/engine/best-practices-library.js +2 -1
- package/dist/engine/browser-validator.js +2 -1
- package/dist/engine/build-tool-detector.js +3 -2
- package/dist/engine/ci-generator/context-builders.js +7 -5
- package/dist/engine/ci-generator/stack-detector.js +0 -2
- package/dist/engine/ci-generator/yaml-builder.js +0 -2
- package/dist/engine/claude-config-auditor/rules-auditor.js +4 -3
- package/dist/engine/code-transforms/typescript/ast-utils.js +2 -3
- package/dist/engine/complexity-budget/trivial-detector.js +2 -1
- package/dist/engine/compliance-test-generator/index.js +7 -2
- package/dist/engine/compliance-test-generator/test-formatter.js +2 -2
- package/dist/engine/config-health/mcp-config-checker.js +2 -1
- package/dist/engine/config-health/ts-checker-scripts.js +4 -3
- package/dist/engine/config-health/ts-checker.js +3 -2
- package/dist/engine/convention-injector.js +5 -7
- package/dist/engine/convention-scanner/convention-parser.js +3 -2
- package/dist/engine/core-bridge-duplicate-blocks.d.ts +3 -0
- package/dist/engine/core-bridge-duplicate-blocks.js +57 -0
- package/dist/engine/core-bridge-gaps.d.ts +4 -0
- package/dist/engine/core-bridge-gaps.js +75 -0
- package/dist/engine/core-bridge.d.ts +9 -9
- package/dist/engine/core-bridge.js +196 -283
- package/dist/engine/cost-tracking/ledger.js +2 -5
- package/dist/engine/coverage-gap-analyzer.js +10 -1
- package/dist/engine/crash-shield/detectors/framework-detector.d.ts +2 -0
- package/dist/engine/crash-shield/detectors/framework-detector.js +110 -192
- package/dist/engine/crash-shield/detectors/typescript-detector.js +2 -1
- package/dist/engine/dashboard/data-loader.js +2 -1
- package/dist/engine/data-projects-gc/gc-runner.d.ts +7 -0
- package/dist/engine/data-projects-gc/gc-runner.js +113 -3
- package/dist/engine/data-projects-gc/scanner.js +5 -1
- package/dist/engine/decision-store.js +11 -14
- package/dist/engine/deleter/core.js +5 -5
- package/dist/engine/dep-auditor/abandonment-data.js +2 -1
- package/dist/engine/dep-auditor/abandonment-registry.js +3 -1
- package/dist/engine/dep-auditor/cve-fetcher.js +3 -0
- package/dist/engine/dep-auditor/dep-duplicates-detector.js +36 -4
- package/dist/engine/dep-auditor/license-registry.js +2 -0
- package/dist/engine/dependency-evaluator.d.ts +14 -0
- package/dist/engine/dependency-evaluator.js +81 -0
- package/dist/engine/deploy/providers/fly.js +7 -7
- package/dist/engine/deploy/providers/netlify.js +7 -7
- package/dist/engine/deploy/providers/railway.js +10 -12
- package/dist/engine/deploy/providers/vercel.js +7 -9
- package/dist/engine/deprecation-scanner/pattern-loader.js +0 -2
- package/dist/engine/desktop-detector.js +2 -3
- package/dist/engine/detect-duplication.js +2 -1
- package/dist/engine/detectors/advanced-framework-detector/css-state-detector.js +2 -1
- package/dist/engine/detectors/advanced-framework-detector/legacy-detector.js +2 -3
- package/dist/engine/detectors/advanced-framework-detector/modern-detector.js +3 -4
- package/dist/engine/detectors/agent-framework-detector.js +3 -2
- package/dist/engine/detectors/ai-native-detector.js +4 -6
- package/dist/engine/detectors/cache-db-detector.js +4 -3
- package/dist/engine/detectors/cicd-detector.js +4 -3
- package/dist/engine/detectors/deployment-detector.js +11 -12
- package/dist/engine/detectors/frontend-perf-detector.js +14 -9
- package/dist/engine/detectors/library-detector-multilang-a.js +16 -3
- package/dist/engine/detectors/library-detector-node.js +14 -4
- package/dist/engine/detectors/library-detector-python.js +7 -1
- package/dist/engine/detectors/library-detector.js +0 -2
- package/dist/engine/detectors/llm-detector/provider-maps.js +3 -2
- package/dist/engine/detectors/mcp-candidate-detector.js +12 -16
- package/dist/engine/detectors/mfe-detector.js +6 -7
- package/dist/engine/detectors/monitoring-detector.js +4 -3
- package/dist/engine/detectors/otel-detector.js +3 -2
- package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -2
- package/dist/engine/detectors/otel-ecosystem-detectors.js +4 -3
- package/dist/engine/detectors/platform-specialty-detector.js +3 -5
- package/dist/engine/detectors/template-engine-detector.js +3 -4
- package/dist/engine/doc-generator/builders.js +2 -3
- package/dist/engine/doc-generator/mobile-distribution-guide.js +13 -17
- package/dist/engine/doc-generator/portal/dirty-flag-map.d.ts +2 -2
- package/dist/engine/doc-generator/portal/portal-regenerator.js +3 -47
- package/dist/engine/domain-detector.js +3 -6
- package/dist/engine/dynamic-knowledge/knowledge-cache.js +3 -4
- package/dist/engine/dynamic-knowledge/knowledge-merger.js +17 -2
- package/dist/engine/dynamic-knowledge/web-researcher.js +15 -14
- package/dist/engine/dynamic-migration-detector/manifest-readers-extended.js +0 -2
- package/dist/engine/e2e-test-generator.js +4 -3
- package/dist/engine/ecosystem-absorber/knowledge-cache.js +2 -1
- package/dist/engine/ecosystem-absorber/platform-crawler.js +2 -2
- package/dist/engine/escalator/retry-counter.js +2 -1
- package/dist/engine/evidence-gates/artifact-reader.d.ts +6 -0
- package/dist/engine/evidence-gates/artifact-reader.js +105 -21
- package/dist/engine/evidence-gates/lifecycle-gate.d.ts +2 -1
- package/dist/engine/evidence-gates/lifecycle-gate.js +54 -0
- package/dist/engine/execution/context.d.ts +19 -0
- package/dist/engine/execution/context.js +127 -0
- package/dist/engine/execution/deadline-io.d.ts +21 -0
- package/dist/engine/execution/deadline-io.js +45 -0
- package/dist/engine/execution/job-executor.d.ts +16 -0
- package/dist/engine/execution/job-executor.js +140 -0
- package/dist/engine/execution/job-runtime.d.ts +78 -0
- package/dist/engine/execution/job-runtime.js +220 -0
- package/dist/engine/execution/native-relevance-scorer.d.ts +6 -0
- package/dist/engine/execution/native-relevance-scorer.js +64 -0
- package/dist/engine/execution/native-worker-dispatch.d.ts +3 -0
- package/dist/engine/execution/native-worker-dispatch.js +46 -0
- package/dist/engine/execution/native-worker-protocol.d.ts +6 -0
- package/dist/engine/execution/native-worker-protocol.js +33 -0
- package/dist/engine/execution/native-worker-runtime.d.ts +4 -0
- package/dist/engine/execution/native-worker-runtime.js +177 -0
- package/dist/engine/execution/native-worker-thread.d.ts +2 -0
- package/dist/engine/execution/native-worker-thread.js +66 -0
- package/dist/engine/execution/operation-journal.d.ts +66 -0
- package/dist/engine/execution/operation-journal.js +260 -0
- package/dist/engine/execution/outbox-worker.d.ts +31 -0
- package/dist/engine/execution/outbox-worker.js +192 -0
- package/dist/engine/execution/validate-job-executor.d.ts +24 -0
- package/dist/engine/execution/validate-job-executor.js +342 -0
- package/dist/engine/execution/validate-job-payload.d.ts +5 -0
- package/dist/engine/execution/validate-job-payload.js +87 -0
- package/dist/engine/execution/validate-job-recovery.d.ts +4 -0
- package/dist/engine/execution/validate-job-recovery.js +47 -0
- package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
- package/dist/engine/execution/validate-worker-runtime.js +100 -0
- package/dist/engine/execution/validate-worker-thread.d.ts +2 -0
- package/dist/engine/execution/validate-worker-thread.js +71 -0
- package/dist/engine/execution-plan/desktop-distribution.js +3 -7
- package/dist/engine/execution-plan/mobile-distribution.js +4 -9
- package/dist/engine/execution-plan/phases.js +4 -5
- package/dist/engine/execution-plan/plan-utils.js +8 -5
- package/dist/engine/facilitate/context-loader.js +3 -9
- package/dist/engine/figma/code-connect-fetcher.js +9 -8
- package/dist/engine/filesystem-watcher/index.d.ts +3 -3
- package/dist/engine/filesystem-watcher/index.js +5 -5
- package/dist/engine/framework-detector.js +14 -15
- package/dist/engine/git/planu-autocommit.js +8 -7
- package/dist/engine/git/repository-probe.d.ts +3 -0
- package/dist/engine/git/repository-probe.js +13 -0
- package/dist/engine/global-rules-manager.js +2 -2
- package/dist/engine/handoff-artifacts/io.js +2 -3
- package/dist/engine/handoff-artifacts/schemas/red-tests-handoff.js +8 -1
- package/dist/engine/handoff-artifacts/schemas.d.ts +4 -0
- package/dist/engine/handoff-artifacts/schemas.js +5 -0
- package/dist/engine/hook-generator/stack-hook-templates.js +4 -4
- package/dist/engine/hooks/config-loader.js +1 -1
- package/dist/engine/hooks/context-injector.js +4 -7
- package/dist/engine/hooks/file-watcher.js +1 -14
- package/dist/engine/hooks-reconciler.js +6 -4
- package/dist/engine/infrastructure/component-mapper.js +5 -7
- package/dist/engine/infrastructure/docker-compose-generator.js +8 -10
- package/dist/engine/infrastructure/index.js +6 -3
- package/dist/engine/infrastructure/kubernetes-generator.js +2 -2
- package/dist/engine/infrastructure/railway-generator.js +10 -8
- package/dist/engine/infrastructure/signal-detector.js +6 -8
- package/dist/engine/infrastructure/terraform-generator.js +6 -8
- package/dist/engine/legal-compliance/detector.js +3 -2
- package/dist/engine/local-first/storage-advisor.js +5 -6
- package/dist/engine/macos-keychain-native-port.d.ts +5 -0
- package/dist/engine/macos-keychain-native-port.js +26 -0
- package/dist/engine/marketplace-fetcher/cache.js +3 -1
- package/dist/engine/mcp-config/mcp-config-writer.d.ts +2 -2
- package/dist/engine/mcp-config/mcp-config-writer.js +10 -8
- package/dist/engine/migration/db-migrator.js +2 -5
- package/dist/engine/migration/equivalence-mapper.js +12 -13
- package/dist/engine/migration/service-catalogs.js +6 -7
- package/dist/engine/migration/service-migrator-catalogs.js +6 -7
- package/dist/engine/mobile-detector-ios.js +2 -3
- package/dist/engine/mobile-detector.js +16 -4
- package/dist/engine/model-router/complexity-analyzer.js +4 -7
- package/dist/engine/multi-agent-review/security-analyzer.js +3 -1
- package/dist/engine/multi-app-detector/app-type.js +26 -21
- package/dist/engine/multi-app-detector/core.js +3 -2
- package/dist/engine/multi-teammate-review/disagreement-counter.js +2 -1
- package/dist/engine/multi-teammate-review/panel-orchestrator.js +0 -2
- package/dist/engine/mutation-config-generator.js +10 -7
- package/dist/engine/native-capability-policy.d.ts +4 -0
- package/dist/engine/native-capability-policy.js +24 -0
- package/dist/engine/native-platform.d.ts +3 -0
- package/dist/engine/native-platform.js +44 -0
- package/dist/engine/native-runtime-handshake.d.ts +20 -0
- package/dist/engine/native-runtime-handshake.js +230 -0
- package/dist/engine/network-policy.d.ts +27 -0
- package/dist/engine/network-policy.js +174 -0
- package/dist/engine/next-spec-resolver/dependency-filter.js +2 -22
- package/dist/engine/nfr-profile-detector.js +12 -16
- package/dist/engine/nli-keywords.js +8 -9
- package/dist/engine/oauth/config-guard.js +4 -5
- package/dist/engine/observability/local-execution-spans.d.ts +15 -0
- package/dist/engine/observability/local-execution-spans.js +63 -0
- package/dist/engine/orchestrator/runtime.js +0 -1
- package/dist/engine/package-registry.js +2 -6
- package/dist/engine/performance-analyzer.js +2 -5
- package/dist/engine/permissions-merger/stack-detectors.js +5 -5
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +39 -0
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +1310 -0
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +39 -0
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +1310 -0
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +38 -0
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +1310 -0
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +38 -0
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +1310 -0
- package/dist/engine/platform-detector/desktop.js +15 -2
- package/dist/engine/platform-detector/extensions.js +2 -1
- package/dist/engine/platform-detector/games.js +2 -1
- package/dist/engine/platform-detector.js +3 -2
- package/dist/engine/platform-engineering/idp-detector.js +2 -1
- package/dist/engine/plugin-installer/stack-matcher.js +9 -17
- package/dist/engine/plugins/lifecycle.js +6 -2
- package/dist/engine/prior-decisions/contradiction-detector.js +60 -30
- package/dist/engine/project-dna/stack-detector.js +15 -17
- package/dist/engine/project-graph/builder.js +11 -0
- package/dist/engine/project-graph/cache.js +1 -1
- package/dist/engine/project-graph/freshness-projection.d.ts +16 -0
- package/dist/engine/project-graph/freshness-projection.js +95 -0
- package/dist/engine/project-graph/index.d.ts +1 -0
- package/dist/engine/project-graph/index.js +1 -0
- package/dist/engine/project-graph/query.js +15 -25
- package/dist/engine/project-health-checker.js +3 -4
- package/dist/engine/project-scanner/stack-detector.js +17 -17
- package/dist/engine/property-test-generator.js +2 -3
- package/dist/engine/qa-gate.d.ts +1 -0
- package/dist/engine/qa-gate.js +6 -4
- package/dist/engine/quality-gates/gate-catalog.js +47 -46
- package/dist/engine/quality-gates/gate-injector.js +9 -4
- package/dist/engine/registry/core.js +0 -2
- package/dist/engine/registry/loader.js +9 -12
- package/dist/engine/registry/matcher.js +129 -24
- package/dist/engine/resilience-detector/concurrency-detector.js +4 -4
- package/dist/engine/resilience-detector/middleware-detector.js +11 -13
- package/dist/engine/resilience-detector/validation-detector.js +17 -4
- package/dist/engine/reverse-engineer/config-analyzer.js +9 -8
- package/dist/engine/reverse-engineer/orchestrator.js +5 -9
- package/dist/engine/reverse-engineer/test-file-parser.js +6 -3
- package/dist/engine/rules-generator/index.js +6 -5
- package/dist/engine/runtime-policy.d.ts +7 -0
- package/dist/engine/runtime-policy.js +101 -0
- package/dist/engine/runtime-security/checkers/content-security.js +21 -6
- package/dist/engine/runtime-security/checkers/file-permissions.js +0 -2
- package/dist/engine/safety/atomic-write-file.js +20 -9
- package/dist/engine/safety/atomic-writer.js +10 -3
- package/dist/engine/safety/cross-process-lock.d.ts +3 -40
- package/dist/engine/safety/cross-process-lock.js +268 -272
- package/dist/engine/safety/file-mutex.d.ts +2 -9
- package/dist/engine/safety/file-mutex.js +155 -87
- package/dist/engine/safety/health-monitor.js +15 -6
- package/dist/engine/safety/lock-lease-store.d.ts +79 -0
- package/dist/engine/safety/lock-lease-store.js +372 -0
- package/dist/engine/safety/lock-scavenger.d.ts +2 -5
- package/dist/engine/safety/lock-scavenger.js +158 -76
- package/dist/engine/safety/lock-staleness.js +4 -1
- package/dist/engine/safety/obsolete-lock-guard.d.ts +8 -0
- package/dist/engine/safety/obsolete-lock-guard.js +31 -0
- package/dist/engine/safety/transaction.js +3 -3
- package/dist/engine/sandbox/index.js +2 -1
- package/dist/engine/sandbox/runner-detect.js +3 -2
- package/dist/engine/sandbox/runner-docker.js +4 -3
- package/dist/engine/scan-project/module-discoverer.js +3 -2
- package/dist/engine/schema-generator.js +16 -9
- package/dist/engine/security-analyzer/criteria-generator.js +2 -3
- package/dist/engine/self-healing/healer.js +4 -4
- package/dist/engine/session-safeguard/learnings-buffer.d.ts +1 -2
- package/dist/engine/session-safeguard/learnings-buffer.js +42 -65
- package/dist/engine/shared-agent-memory.js +66 -74
- package/dist/engine/skill-adapter/command-rewriter.js +3 -2
- package/dist/engine/skill-adapter/index.js +3 -3
- package/dist/engine/skill-adapter/placeholder-map.js +3 -2
- package/dist/engine/skill-bootstrap/stack-matcher.js +47 -48
- package/dist/engine/skill-generation/stack-content-generator.js +0 -2
- package/dist/engine/skill-generator/workflow-skill-generator.js +2 -1
- package/dist/engine/skill-registry/ttl-refresh.js +3 -1
- package/dist/engine/skills/skills-fetcher.js +3 -6
- package/dist/engine/skills-reconciler.js +19 -39
- package/dist/engine/spec-coverage/test-finder.js +7 -6
- package/dist/engine/spec-diff-engine.js +3 -3
- package/dist/engine/spec-generator/api-key-resolver.d.ts +1 -1
- package/dist/engine/spec-generator/api-key-resolver.js +3 -24
- package/dist/engine/spec-generators/issue-extractor.js +9 -3
- package/dist/engine/spec-migrator/drift-detector.js +5 -13
- package/dist/engine/spec-migrator/filesystem-import.js +14 -10
- package/dist/engine/spec-migrator/planu-canonical-policy.js +10 -1
- package/dist/engine/spec-migrator/strict-planu-cleanup.js +24 -25
- package/dist/engine/spec-registry/adapter.d.ts +0 -5
- package/dist/engine/spec-registry/adapter.js +45 -46
- package/dist/engine/spec-registry/client.js +2 -0
- package/dist/engine/spec-source-sync.js +3 -2
- package/dist/engine/spec-templates/custom-loader.js +2 -3
- package/dist/engine/spec-templates/templates-domain-specific.js +8 -5
- package/dist/engine/spec-templates/templates-perf-integration.js +2 -3
- package/dist/engine/stack-auditor/manifest-reader.js +0 -2
- package/dist/engine/staleness/stale-implementing.js +7 -7
- package/dist/engine/tdd-scaffold-generator.js +24 -11
- package/dist/engine/teammate-router/green-phase-verifier.js +2 -1
- package/dist/engine/teammate-router/red-phase-verifier.js +2 -1
- package/dist/engine/technology-registry.d.ts +11 -0
- package/dist/engine/technology-registry.js +142 -0
- package/dist/engine/telemetry/error-reporter.d.ts +1 -2
- package/dist/engine/telemetry/error-reporter.js +11 -18
- package/dist/engine/telemetry/health-checker.js +5 -14
- package/dist/engine/telemetry/index.d.ts +0 -1
- package/dist/engine/telemetry/index.js +0 -1
- package/dist/engine/telemetry/stance.js +3 -2
- package/dist/engine/telemetry/telemetry-client.d.ts +1 -5
- package/dist/engine/telemetry/telemetry-client.js +45 -29
- package/dist/engine/telemetry/telemetry-store.d.ts +3 -3
- package/dist/engine/telemetry/telemetry-store.js +30 -23
- package/dist/engine/test-framework-detector/detectors.js +8 -8
- package/dist/engine/test-framework-detector/strategy.js +8 -9
- package/dist/engine/test-generators/agent-test-templates.js +2 -3
- package/dist/engine/test-generators/contract-test-generator.d.ts +1 -1
- package/dist/engine/test-generators/contract-test-generator.js +9 -202
- package/dist/engine/test-generators/platform-test-templates-b.js +2 -3
- package/dist/engine/test-generators/platform-test-templates.js +2 -5
- package/dist/engine/test-mocks-generator.js +4 -3
- package/dist/engine/test-plan-generator.js +30 -12
- package/dist/engine/test-scaffold-generator/advanced-scaffold.js +4 -5
- package/dist/engine/test-scaffold-generator/unit-scaffold.js +5 -6
- package/dist/engine/timing/budget.d.ts +6 -17
- package/dist/engine/timing/budget.js +80 -64
- package/dist/engine/tool-groups/group-manager.js +3 -3
- package/dist/engine/universal-rules/installer.js +1 -1
- package/dist/engine/universal-rules/rules/planu-modes.js +2 -0
- package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -0
- package/dist/engine/update-notifier.js +8 -5
- package/dist/engine/validation/approved-spec-portability.d.ts +12 -0
- package/dist/engine/validation/approved-spec-portability.js +107 -0
- package/dist/engine/validation/durable-validation.d.ts +36 -0
- package/dist/engine/validation/durable-validation.js +335 -0
- package/dist/engine/validation/validation-freshness.d.ts +36 -0
- package/dist/engine/validation/validation-freshness.js +427 -0
- package/dist/engine/validation/validation-receipt-codec.d.ts +13 -0
- package/dist/engine/validation/validation-receipt-codec.js +182 -0
- package/dist/engine/validation/validation-receipt.d.ts +59 -0
- package/dist/engine/validation/validation-receipt.js +282 -0
- package/dist/engine/validation/validation-source-policy.d.ts +4 -0
- package/dist/engine/validation/validation-source-policy.js +16 -0
- package/dist/engine/validation/validation-submission.d.ts +36 -0
- package/dist/engine/validation/validation-submission.js +128 -0
- package/dist/engine/validation-evidence-ledger.js +41 -0
- package/dist/engine/validation-impact-planner.js +25 -9
- package/dist/engine/validator/spec-compliance-runner.d.ts +1 -1
- package/dist/engine/validator/spec-compliance-runner.js +17 -8
- package/dist/engine/validator/validation-report-writer.js +1 -1
- package/dist/engine/validator.js +2 -1
- package/dist/engine/verify-integrations/index.js +1 -1
- package/dist/engine/version-resolver.js +5 -6
- package/dist/engine/web-fetcher/stack-advisor.js +156 -92
- package/dist/engine/web-fetcher/stack-detector.js +114 -54
- package/dist/engine/workspace-manager.js +3 -2
- package/dist/errors/classified-degradation.d.ts +3 -0
- package/dist/errors/classified-degradation.js +10 -0
- package/dist/errors/degradation-sink.d.ts +3 -0
- package/dist/errors/degradation-sink.js +5 -0
- package/dist/errors/error-taxonomy.d.ts +12 -0
- package/dist/errors/error-taxonomy.js +62 -0
- package/dist/hosts/claude-code/ux/mcp-prompts.js +10 -4
- package/dist/hosts/claude-code/ux/mcp-resources.js +4 -2
- package/dist/hosts/codex/config-scaffold.js +4 -3
- package/dist/hosts/gemini/config-scaffold.js +2 -1
- package/dist/hosts/gemini/multimodal-spec-flow.js +7 -4
- package/dist/index.js +21 -6
- package/dist/resources/patterns.js +3 -1
- package/dist/resources/specs.js +3 -1
- package/dist/resources/templates.js +3 -1
- package/dist/security/adapters/environment.d.ts +12 -0
- package/dist/security/adapters/environment.js +25 -0
- package/dist/security/adapters/linux-secret-service.d.ts +8 -0
- package/dist/security/adapters/linux-secret-service.js +60 -0
- package/dist/security/adapters/macos-keychain.d.ts +18 -0
- package/dist/security/adapters/macos-keychain.js +90 -0
- package/dist/security/adapters/windows-credential-manager.d.ts +8 -0
- package/dist/security/adapters/windows-credential-manager.js +58 -0
- package/dist/security/redactor.d.ts +5 -0
- package/dist/security/redactor.js +58 -0
- package/dist/security/secret-field.d.ts +5 -0
- package/dist/security/secret-field.js +17 -0
- package/dist/security/secret-migration.d.ts +3 -0
- package/dist/security/secret-migration.js +123 -0
- package/dist/security/secret-provider.d.ts +23 -0
- package/dist/security/secret-provider.js +145 -0
- package/dist/security/secure-json.d.ts +3 -0
- package/dist/security/secure-json.js +29 -0
- package/dist/storage/api-surfaces-store.js +2 -2
- package/dist/storage/approval-operation-lock.d.ts +1 -1
- package/dist/storage/approval-operation-lock.js +5 -3
- package/dist/storage/audit-trail-store.d.ts +1 -1
- package/dist/storage/audit-trail-store.js +48 -62
- package/dist/storage/autopilot-log-store.js +12 -5
- package/dist/storage/base-store.d.ts +8 -8
- package/dist/storage/base-store.js +57 -20
- package/dist/storage/checkpoint-store.js +5 -2
- package/dist/storage/comments-store.js +2 -2
- package/dist/storage/compliance-audit-store.js +5 -2
- package/dist/storage/compliance-gate-config-store.js +7 -4
- package/dist/storage/compliance-store.js +2 -2
- package/dist/storage/context-profile-store.js +2 -2
- package/dist/storage/crash-shield-store.js +8 -4
- package/dist/storage/feedback-store.js +10 -6
- package/dist/storage/figma-store.js +8 -4
- package/dist/storage/file-mutex.js +9 -1
- package/dist/storage/gaps-log.js +7 -4
- package/dist/storage/global-projects-store.js +4 -2
- package/dist/storage/ideas-store.js +2 -2
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/knowledge-store/knowledge.js +27 -33
- package/dist/storage/lessons-store.js +2 -2
- package/dist/storage/license-store.js +13 -41
- package/dist/storage/migrations/canonical-storage.d.ts +15 -0
- package/dist/storage/migrations/canonical-storage.js +599 -0
- package/dist/storage/oauth-store.js +36 -8
- package/dist/storage/path-resolver.js +16 -3
- package/dist/storage/pr-store.js +2 -2
- package/dist/storage/project-drift-store.js +20 -8
- package/dist/storage/project-identity.d.ts +32 -0
- package/dist/storage/project-identity.js +194 -0
- package/dist/storage/project-resolver.js +14 -7
- package/dist/storage/release-notes-store.js +2 -6
- package/dist/storage/runtime-db.d.ts +186 -0
- package/dist/storage/runtime-db.js +1054 -0
- package/dist/storage/schema-registry.d.ts +5 -0
- package/dist/storage/schema-registry.js +74 -0
- package/dist/storage/sentry-store.js +20 -9
- package/dist/storage/session-state-store.js +12 -5
- package/dist/storage/session-store.js +12 -4
- package/dist/storage/skill-registry-storage.d.ts +1 -1
- package/dist/storage/skill-registry-storage.js +13 -11
- package/dist/storage/slack-store.js +10 -5
- package/dist/storage/spec-store.js +31 -24
- package/dist/storage/status-store/file-lock.js +31 -9
- package/dist/storage/status-store/self-healing.js +10 -5
- package/dist/storage/status-store/version-sync.js +8 -6
- package/dist/storage/steering-store.js +2 -2
- package/dist/storage/storage-bundle.d.ts +5 -0
- package/dist/storage/storage-bundle.js +117 -0
- package/dist/storage/storage-catalog-validation.d.ts +3 -0
- package/dist/storage/storage-catalog-validation.js +20 -0
- package/dist/storage/storage-catalog.d.ts +25 -0
- package/dist/storage/storage-catalog.js +390 -0
- package/dist/storage/storage-layout.d.ts +24 -0
- package/dist/storage/storage-layout.js +101 -0
- package/dist/storage/storybook-store.js +2 -2
- package/dist/storage/supabase-store.js +24 -6
- package/dist/storage/tdd-policy-store.js +8 -6
- package/dist/storage/tech-debt-store.js +3 -3
- package/dist/storage/technology-selection-store.d.ts +1 -1
- package/dist/storage/technology-selection-store.js +6 -3
- package/dist/storage/token-cache-store.js +3 -3
- package/dist/storage/token-ledger-store.js +13 -8
- package/dist/storage/transition-log.js +7 -4
- package/dist/storage/trash-store.js +15 -6
- package/dist/storage/vector-store/migrator.js +7 -2
- package/dist/storage/vector-store/sqlite-adapter.js +4 -1
- package/dist/storage/webhook-server-store.js +2 -2
- package/dist/tools/api-spec-generator-handler.js +3 -2
- package/dist/tools/auto-update-handler.d.ts +1 -1
- package/dist/tools/auto-update-handler.js +1 -1
- package/dist/tools/browser-validate-handler.js +2 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +8 -5
- package/dist/tools/challenge-spec/scenarios-desktop.js +8 -3
- package/dist/tools/challenge-spec/scenarios-failure.js +7 -2
- package/dist/tools/challenge-spec/security-challenge-scenarios.js +3 -3
- package/dist/tools/clarify-requirements/multiple-choice.js +53 -41
- package/dist/tools/comments-handler.js +2 -3
- package/dist/tools/compliance-test-handler.js +2 -2
- package/dist/tools/configure-telemetry.js +11 -11
- package/dist/tools/create-spec/auto-pipeline.js +13 -1
- package/dist/tools/create-spec/autopilot-analyzer.d.ts +1 -1
- package/dist/tools/create-spec/autopilot-analyzer.js +2 -4
- package/dist/tools/create-spec/mcp-tool-contract.d.ts +10 -4
- package/dist/tools/create-spec/mcp-tool-contract.js +7 -36
- package/dist/tools/create-spec/post-creation.d.ts +2 -1
- package/dist/tools/create-spec/post-creation.js +56 -54
- package/dist/tools/create-spec/relevance-scorer.d.ts +1 -1
- package/dist/tools/create-spec/relevance-scorer.js +17 -1
- package/dist/tools/create-spec/spec-builder.js +2 -12
- package/dist/tools/create-spec/spec-created-outbox-consumer.d.ts +14 -0
- package/dist/tools/create-spec/spec-created-outbox-consumer.js +176 -0
- package/dist/tools/create-spec.js +385 -520
- package/dist/tools/define-ui-contract/agent-interaction-contract.js +2 -4
- package/dist/tools/define-ui-contract-desktop/desktop-contract.js +12 -4
- package/dist/tools/define-ui-contract-desktop/native-contract.js +7 -3
- package/dist/tools/define-ui-contract-extensions.js +2 -3
- package/dist/tools/define-ui-contract-mobile.js +5 -9
- package/dist/tools/define-ui-contract-web/component-tree.js +4 -3
- package/dist/tools/define-ui-contract.js +7 -4
- package/dist/tools/deploy/deploy-spec.js +2 -4
- package/dist/tools/deploy/deploy-status.js +2 -4
- package/dist/tools/design-schema/nosql-category-schemas.js +2 -3
- package/dist/tools/design-schema-sql/migrations.js +3 -2
- package/dist/tools/design-schema-sql/tables.js +4 -1
- package/dist/tools/design-schema.js +4 -3
- package/dist/tools/feedback-handler.js +2 -4
- package/dist/tools/gc-data-projects.js +5 -5
- package/dist/tools/generate-execution-plan.js +3 -4
- package/dist/tools/generate-sub-agent.js +2 -1
- package/dist/tools/generate-tests/generators/a11y-tests-generator.js +5 -4
- package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
- package/dist/tools/generate-tests/generators/concurrency-test-generator/js-templates.js +9 -4
- package/dist/tools/generate-tests/generators/concurrency-test-generator.js +8 -4
- package/dist/tools/generate-tests/generators/database/detectors.js +9 -3
- package/dist/tools/generate-tests/generators/database/index.js +2 -4
- package/dist/tools/generate-tests/generators/event-test-generator.js +5 -4
- package/dist/tools/generate-tests/generators/game-tests-generator.js +2 -1
- package/dist/tools/generate-tests/generators/graphql-test-generator.js +11 -5
- package/dist/tools/generate-tests/generators/grpc-test-generator.js +2 -3
- package/dist/tools/generate-tests/generators/llm-security-test-generator.js +4 -3
- package/dist/tools/generate-tests/generators/local-first-test-generator.js +4 -3
- package/dist/tools/generate-tests/generators/mcp-tests-generator.js +11 -9
- package/dist/tools/generate-tests/generators/microservices/index.js +2 -3
- package/dist/tools/generate-tests/generators/otel-test-generator.js +6 -3
- package/dist/tools/generate-tests/generators/security/detectors.js +2 -5
- package/dist/tools/generate-tests/generators/security/index.js +2 -4
- package/dist/tools/generate-tests/generators/supply-chain-test-generator.js +2 -3
- package/dist/tools/generate-tests/generators/visual-regression-generator.js +14 -17
- package/dist/tools/generate-tests/generators/websocket-test-generator.js +2 -3
- package/dist/tools/generate-tests/test-helpers.js +11 -12
- package/dist/tools/generate-tests-content.js +4 -3
- package/dist/tools/generate-tests.js +7 -4
- package/dist/tools/git/git-helpers.d.ts +0 -2
- package/dist/tools/git/git-helpers.js +7 -7
- package/dist/tools/github-pr-handler.js +10 -3
- package/dist/tools/heal-spec-docs.js +6 -53
- package/dist/tools/hook-generator-handler.js +6 -6
- package/dist/tools/init-constitution/platform-principles.js +4 -2
- package/dist/tools/init-project/agents-md-writer.js +14 -5
- package/dist/tools/init-project/claude-md-generator.js +19 -12
- package/dist/tools/init-project/handler.js +165 -73
- package/dist/tools/init-project/host-assets-writer.d.ts +1 -1
- package/dist/tools/init-project/host-assets-writer.js +4 -2
- package/dist/tools/init-project/lifecycle-helpers.js +3 -5
- package/dist/tools/init-project/lint-scaffolder.js +6 -2
- package/dist/tools/init-project/migration-runner.d.ts +10 -1
- package/dist/tools/init-project/migration-runner.js +68 -3
- package/dist/tools/init-project/per-client-files-writer.js +14 -4
- package/dist/tools/init-project/rules-generator.js +10 -2
- package/dist/tools/init-project/scaffold-writer.d.ts +1 -1
- package/dist/tools/init-project/scaffold-writer.js +17 -15
- package/dist/tools/jobs/handlers.d.ts +15 -0
- package/dist/tools/jobs/handlers.js +126 -0
- package/dist/tools/list-specs.js +35 -34
- package/dist/tools/manage-plugins-handler.js +17 -9
- package/dist/tools/migrate-tech/advanced-handlers.js +3 -2
- package/dist/tools/migrate-tech/build-tool-handlers.js +3 -2
- package/dist/tools/migrate-tech/core-handlers.js +5 -2
- package/dist/tools/migrate-tech/data-handlers.js +6 -3
- package/dist/tools/migrate-tech-advanced/rollback-handlers.js +3 -2
- package/dist/tools/migrate-tech-advanced/service-handlers.js +5 -2
- package/dist/tools/oauth-handler.js +7 -1
- package/dist/tools/register-sdd-tools.d.ts +1 -1
- package/dist/tools/register-sdd-tools.js +5 -0
- package/dist/tools/register-spec-tools/core-spec-tools.js +31 -0
- package/dist/tools/registry/auth.js +13 -5
- package/dist/tools/registry/publish.js +7 -4
- package/dist/tools/resolve-project-path.d.ts +2 -2
- package/dist/tools/resolve-project-path.js +7 -7
- package/dist/tools/reverse-engineer/analyzer.js +14 -14
- package/dist/tools/rollback-release.js +3 -2
- package/dist/tools/safe-handler.js +295 -171
- package/dist/tools/schema-generator-handler.js +2 -1
- package/dist/tools/schemas/output-schemas.d.ts +88 -82
- package/dist/tools/schemas/output-schemas.js +12 -94
- package/dist/tools/schemas/plugins-schemas.js +0 -2
- package/dist/tools/schemas/registry.js +0 -2
- package/dist/tools/schemas/skill-registry-schemas.js +0 -2
- package/dist/tools/schemas/validate-output-schema.d.ts +256 -0
- package/dist/tools/schemas/validate-output-schema.js +212 -0
- package/dist/tools/sentry-handler.js +6 -1
- package/dist/tools/skill-bootstrap-handler.js +7 -4
- package/dist/tools/status-handler.js +4 -0
- package/dist/tools/storage-bundle-handler.d.ts +9 -0
- package/dist/tools/storage-bundle-handler.js +29 -0
- package/dist/tools/storage-paths-handler.d.ts +9 -0
- package/dist/tools/storage-paths-handler.js +17 -0
- package/dist/tools/suggest-mcp-server.js +11 -5
- package/dist/tools/suggest-mcps.js +29 -9
- package/dist/tools/suggest-tooling/advanced-testing-catalog.js +4 -5
- package/dist/tools/suggest-tooling/build-tool-catalog.js +2 -1
- package/dist/tools/suggest-tooling/css-framework-catalog.js +13 -7
- package/dist/tools/suggest-tooling/framework-catalog.js +3 -5
- package/dist/tools/suggest-tooling/frontend-perf-catalog.js +2 -6
- package/dist/tools/suggest-tooling/handler.js +10 -4
- package/dist/tools/suggest-tooling/hypermedia-catalog.js +11 -3
- package/dist/tools/suggest-tooling/linting-catalog.js +4 -7
- package/dist/tools/suggest-tooling/llm-security-catalog.js +2 -1
- package/dist/tools/suggest-tooling/local-first-catalog.js +7 -5
- package/dist/tools/suggest-tooling/observability-catalog.js +3 -4
- package/dist/tools/suggest-tooling/otel-catalog.js +4 -1
- package/dist/tools/suggest-tooling/resilience-catalog.js +16 -5
- package/dist/tools/suggest-tooling/skills-catalog.js +10 -9
- package/dist/tools/suggest-tooling/supply-chain-catalog.js +2 -3
- package/dist/tools/supabase-handler.js +2 -1
- package/dist/tools/token-intelligence-handler.js +2 -2
- package/dist/tools/token-recording.js +2 -2
- package/dist/tools/token-savings-handler.js +2 -2
- package/dist/tools/tool-registry/core-tools.js +131 -0
- package/dist/tools/tool-registry/group-infra.js +10 -12
- package/dist/tools/tool-registry/group-quality-compliance.js +5 -12
- package/dist/tools/update-status/approval-gates.d.ts +13 -0
- package/dist/tools/update-status/approval-gates.js +81 -0
- package/dist/tools/update-status/batch.js +4 -2
- package/dist/tools/update-status/dod-gates.d.ts +6 -24
- package/dist/tools/update-status/dod-gates.js +60 -135
- package/dist/tools/update-status/done-receipt-verifier.d.ts +15 -0
- package/dist/tools/update-status/done-receipt-verifier.js +145 -0
- package/dist/tools/update-status/evidence-gate.js +154 -2
- package/dist/tools/update-status/file-sync.js +23 -12
- package/dist/tools/update-status/gate-harness.d.ts +7 -0
- package/dist/tools/update-status/gate-harness.js +8 -0
- package/dist/tools/update-status/index.js +228 -325
- package/dist/tools/update-status/qa-gate.d.ts +1 -1
- package/dist/tools/update-status/qa-gate.js +2 -2
- package/dist/tools/update-status/side-effects.js +30 -37
- package/dist/tools/update-status/transition-guard.d.ts +4 -2
- package/dist/tools/update-status/transition-guard.js +57 -10
- package/dist/tools/update-status-convention-gate.js +24 -23
- package/dist/tools/update-status-reconcile.js +2 -2
- package/dist/tools/validate-api-contract-handler.js +3 -3
- package/dist/tools/validate-lint.js +20 -13
- package/dist/tools/validate.d.ts +3 -1
- package/dist/tools/validate.js +213 -5
- package/dist/transports/http-transport.js +84 -61
- package/dist/transports/middleware/with-telemetry.js +3 -2
- package/dist/types/abortable-process.d.ts +2 -0
- package/dist/types/advanced-framework.js +0 -2
- package/dist/types/atomic-upgrade.d.ts +71 -0
- package/dist/types/atomic-upgrade.js +2 -0
- package/dist/types/ci.js +0 -2
- package/dist/types/core-bridge.d.ts +78 -1
- package/dist/types/crash-shield-framework-rules.d.ts +24 -0
- package/dist/types/crash-shield-framework-rules.js +2 -0
- package/dist/types/data-gc.d.ts +16 -0
- package/dist/types/deploy.js +0 -2
- package/dist/types/durable-job.d.ts +78 -0
- package/dist/types/durable-job.js +2 -0
- package/dist/types/durable-validation.d.ts +60 -0
- package/dist/types/durable-validation.js +2 -0
- package/dist/types/estimation.d.ts +2 -0
- package/dist/types/evidence-gates.d.ts +9 -1
- package/dist/types/execution.d.ts +43 -0
- package/dist/types/handoff-artifacts.d.ts +2 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/infrastructure.js +0 -2
- package/dist/types/lifecycle.js +0 -2
- package/dist/types/migration/canonical-storage.d.ts +37 -0
- package/dist/types/migration/canonical-storage.js +2 -0
- package/dist/types/migration/index.d.ts +1 -1
- package/dist/types/native-worker.d.ts +48 -0
- package/dist/types/native-worker.js +2 -0
- package/dist/types/network-policy.d.ts +12 -0
- package/dist/types/network-policy.js +2 -0
- package/dist/types/oauth.js +0 -2
- package/dist/types/observability.d.ts +32 -0
- package/dist/types/outbox-worker.d.ts +35 -0
- package/dist/types/outbox-worker.js +11 -0
- package/dist/types/permissions-config.d.ts +0 -27
- package/dist/types/permissions-config.js +0 -2
- package/dist/types/plugin-install.d.ts +0 -11
- package/dist/types/plugin-install.js +0 -2
- package/dist/types/portal.d.ts +1 -0
- package/dist/types/product-public.d.ts +75 -0
- package/dist/types/product-public.js +2 -0
- package/dist/types/project/inputs.d.ts +2 -0
- package/dist/types/project/mfe-detection.js +0 -2
- package/dist/types/project/platform-mobile.js +0 -2
- package/dist/types/project/platform-specialty.js +0 -2
- package/dist/types/project-knowledge-graph.d.ts +7 -0
- package/dist/types/runtime-database.d.ts +10 -0
- package/dist/types/runtime-database.js +2 -0
- package/dist/types/runtime-policy.d.ts +40 -0
- package/dist/types/runtime-policy.js +2 -0
- package/dist/types/safety.d.ts +4 -5
- package/dist/types/schema-registry.d.ts +12 -0
- package/dist/types/schema-registry.js +2 -0
- package/dist/types/security.d.ts +52 -0
- package/dist/types/skill-registry.js +0 -2
- package/dist/types/spec/inputs.d.ts +2 -0
- package/dist/types/spec-lock-v2.d.ts +13 -7
- package/dist/types/spec-lock-v2.js +1 -1
- package/dist/types/spec-registry.js +0 -2
- package/dist/types/storage-bundle.d.ts +13 -0
- package/dist/types/storage-bundle.js +2 -0
- package/dist/types/storage-catalog.d.ts +18 -0
- package/dist/types/storage-catalog.js +2 -0
- package/dist/types/team-planner.js +0 -2
- package/dist/types/technology-registry.d.ts +35 -0
- package/dist/types/technology-registry.js +2 -0
- package/dist/types/technology-symbols.generated.d.ts +117 -0
- package/dist/types/technology-symbols.generated.js +2 -0
- package/dist/types/telemetry.d.ts +3 -3
- package/dist/types/transport.d.ts +2 -0
- package/dist/types/validate-worker.d.ts +44 -0
- package/dist/types/validate-worker.js +2 -0
- package/dist/types/validation-evidence.d.ts +1 -1
- package/dist/types/validation-receipt.d.ts +104 -0
- package/dist/types/validation-receipt.js +2 -0
- package/package.json +31 -20
- package/planu-native.json +1 -1
- package/planu-plugin.json +1 -1
- package/dist/engine/telemetry/geo-resolver.d.ts +0 -9
- package/dist/engine/telemetry/geo-resolver.js +0 -43
- package/dist/storage/data-dir-discovery.d.ts +0 -31
- package/dist/storage/data-dir-discovery.js +0 -140
- package/dist/storage/migrations/cwd-to-absolute.d.ts +0 -25
- package/dist/storage/migrations/cwd-to-absolute.js +0 -281
- package/dist/tools/create-spec/adapters/prior-decisions-hint.d.ts +0 -14
- package/dist/tools/create-spec/adapters/prior-decisions-hint.js +0 -30
- package/dist/tools/init-project/ancestor-data-detector.d.ts +0 -22
- package/dist/tools/init-project/ancestor-data-detector.js +0 -81
- package/dist/tools/update-status/force-done-audit.d.ts +0 -2
- package/dist/tools/update-status/force-done-audit.js +0 -23
- package/dist/types/migration/cwd-to-absolute.d.ts +0 -8
- package/dist/types/migration/cwd-to-absolute.js +0 -3
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
3
2
|
// engine/project-scanner/stack-detector.ts — Detect technology stack from config files
|
|
4
3
|
import { readFile } from 'node:fs/promises';
|
|
5
4
|
import { join } from 'node:path';
|
|
6
5
|
const FRAMEWORK_PATTERNS = [
|
|
7
6
|
['next', /^next$/],
|
|
8
|
-
['nuxt', /^nuxt$/],
|
|
9
|
-
['react', /^react$/],
|
|
10
|
-
['vue', /^vue$/],
|
|
11
|
-
['angular', /^@angular\/core$/],
|
|
12
|
-
['svelte', /^svelte$/],
|
|
13
|
-
['express', /^express$/],
|
|
14
|
-
['fastify', /^fastify$/],
|
|
7
|
+
[technologyValue('technology-nuxt-22c407'), /^nuxt$/],
|
|
8
|
+
[technologyValue('technology-react-275976'), /^react$/],
|
|
9
|
+
[technologyValue('technology-vue-564382'), /^vue$/],
|
|
10
|
+
[technologyValue('technology-angular-a39f89'), /^@angular\/core$/],
|
|
11
|
+
[technologyValue('technology-svelte-c190ac'), /^svelte$/],
|
|
12
|
+
[technologyValue('technology-express-008231'), /^express$/],
|
|
13
|
+
[technologyValue('technology-fastify-cbe57e'), /^fastify$/],
|
|
15
14
|
['hono', /^hono$/],
|
|
16
|
-
['nestjs', /^@nestjs\/core$/],
|
|
15
|
+
[technologyValue('technology-nestjs-2d0087'), /^@nestjs\/core$/],
|
|
17
16
|
['koa', /^koa$/],
|
|
18
|
-
['astro', /^astro$/],
|
|
17
|
+
[technologyValue('technology-astro-23661e'), /^astro$/],
|
|
19
18
|
];
|
|
20
19
|
const TEST_RUNNER_PATTERNS = [
|
|
21
|
-
['vitest', /^vitest$/],
|
|
22
|
-
['jest', /^jest$/],
|
|
20
|
+
[technologyValue('technology-vitest-a9127f'), /^vitest$/],
|
|
21
|
+
[technologyValue('technology-jest-35e99f'), /^jest$/],
|
|
23
22
|
['mocha', /^mocha$/],
|
|
24
23
|
['jasmine', /^jasmine$/],
|
|
25
24
|
['ava', /^ava$/],
|
|
@@ -31,7 +30,7 @@ const BUNDLER_PATTERNS = [
|
|
|
31
30
|
['esbuild', /^esbuild$/],
|
|
32
31
|
['rollup', /^rollup$/],
|
|
33
32
|
['parcel', /^parcel$/],
|
|
34
|
-
['turbopack', /^turbopack$/],
|
|
33
|
+
[technologyValue('technology-turbopack-1a3487'), /^turbopack$/],
|
|
35
34
|
];
|
|
36
35
|
function matchFirst(deps, patterns) {
|
|
37
36
|
for (const [name, pattern] of patterns) {
|
|
@@ -46,8 +45,9 @@ async function detectFromPackageJson(projectPath) {
|
|
|
46
45
|
const raw = await readFile(join(projectPath, 'package.json'), 'utf-8');
|
|
47
46
|
const pkg = JSON.parse(raw);
|
|
48
47
|
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
49
|
-
const hasTypeScript = 'typescript' in allDeps ||
|
|
50
|
-
|
|
48
|
+
const hasTypeScript = technologyValue('technology-typescript-969545') in allDeps ||
|
|
49
|
+
Object.keys(allDeps).some((d) => d.startsWith('@types/'));
|
|
50
|
+
const language = hasTypeScript ? technologyValue('technology-typescript-969545') : 'javascript';
|
|
51
51
|
const framework = matchFirst(allDeps, FRAMEWORK_PATTERNS);
|
|
52
52
|
const testRunner = matchFirst(allDeps, TEST_RUNNER_PATTERNS);
|
|
53
53
|
const linter = 'eslint' in allDeps ? 'eslint' : 'tslint' in allDeps ? 'tslint' : null;
|
|
@@ -67,7 +67,7 @@ async function detectFromPython(projectPath) {
|
|
|
67
67
|
return {
|
|
68
68
|
language: 'python',
|
|
69
69
|
framework: null,
|
|
70
|
-
testRunner: 'pytest',
|
|
70
|
+
testRunner: technologyValue('technology-pytest-2b0121'),
|
|
71
71
|
linter: null,
|
|
72
72
|
formatter: null,
|
|
73
73
|
bundler: null,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// Extracts invariants from acceptance criteria and generates PropertyTest objects.
|
|
1
|
+
import { technologyValue } from './technology-registry.js';
|
|
3
2
|
// ---------------------------------------------------------------------------
|
|
4
3
|
// Framework detection
|
|
5
4
|
// ---------------------------------------------------------------------------
|
|
@@ -16,7 +15,7 @@ export function detectPropertyFramework(language, stack = []) {
|
|
|
16
15
|
if (stackLower.includes('jqwik')) {
|
|
17
16
|
return 'jqwik';
|
|
18
17
|
}
|
|
19
|
-
if (lang === 'typescript' || lang === 'javascript') {
|
|
18
|
+
if (lang === technologyValue('technology-typescript-969545') || lang === 'javascript') {
|
|
20
19
|
return 'fast-check';
|
|
21
20
|
}
|
|
22
21
|
if (lang === 'python') {
|
package/dist/engine/qa-gate.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { QaGateResult } from '../types/qa-gate.js';
|
|
2
2
|
import type { Spec } from '../types/spec/core.js';
|
|
3
|
+
export declare function qaCheckTimeoutMs(): number;
|
|
3
4
|
export declare function extractCoverageThreshold(spec: Spec): number | null;
|
|
4
5
|
export declare function computeQaGateFingerprint(spec: Spec, projectPath: string): string;
|
|
5
6
|
export declare function runQaGate(spec: Spec, projectPath: string, options?: {
|
package/dist/engine/qa-gate.js
CHANGED
|
@@ -5,8 +5,10 @@ import { resolveProjectCommandPlan } from './project-command-runtime.js';
|
|
|
5
5
|
import { computeValidationEvidenceIdentity, computeValidationEvidenceKey, readMatchingValidationEvidence, recordSuccessfulValidationEvidence, recordValidationOutcome, } from './validation-evidence-ledger.js';
|
|
6
6
|
import { runAbortableProcess } from './abortable-process-runner.js';
|
|
7
7
|
import { VALIDATION_COMMANDS } from './validation-impact-planner.js';
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
import { boundedEnvironmentDuration, getRuntimePolicy } from './runtime-policy.js';
|
|
9
|
+
export function qaCheckTimeoutMs() {
|
|
10
|
+
return boundedEnvironmentDuration('PLANU_QA_CHECK_TIMEOUT_MS', getRuntimePolicy().qualityAssurance);
|
|
11
|
+
}
|
|
10
12
|
export function extractCoverageThreshold(spec) {
|
|
11
13
|
const text = [spec.title, ...spec.tags].join(' ');
|
|
12
14
|
const match = /coverage\s*[>=]+\s*(\d+)%/i.exec(text);
|
|
@@ -19,8 +21,8 @@ async function runCheck(name, command, args, cwd, signal) {
|
|
|
19
21
|
const start = Date.now();
|
|
20
22
|
const result = await runAbortableProcess(command, args, {
|
|
21
23
|
cwd,
|
|
22
|
-
timeoutMs:
|
|
23
|
-
maxBufferBytes:
|
|
24
|
+
timeoutMs: qaCheckTimeoutMs(),
|
|
25
|
+
maxBufferBytes: getRuntimePolicy().qualityAssurance.maximumOutputBufferBytes,
|
|
24
26
|
signal,
|
|
25
27
|
});
|
|
26
28
|
const durationMs = Date.now() - start;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
1
2
|
export const GATE_CATALOG = [
|
|
2
3
|
// Security gates (15)
|
|
3
4
|
{
|
|
4
5
|
id: 'sec-sql-injection',
|
|
5
6
|
category: 'security',
|
|
6
7
|
title: 'All DB queries use parameterized queries or ORM — no string interpolation in SQL',
|
|
7
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
8
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
8
9
|
riskLevels: ['low', 'medium', 'high'],
|
|
9
10
|
specTypes: ['all'],
|
|
10
11
|
},
|
|
@@ -12,7 +13,7 @@ export const GATE_CATALOG = [
|
|
|
12
13
|
id: 'sec-input-validation',
|
|
13
14
|
category: 'security',
|
|
14
15
|
title: 'All user inputs validated with Zod/Pydantic/schema at system boundaries',
|
|
15
|
-
stacks: ['typescript', 'python', 'generic'],
|
|
16
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'generic'],
|
|
16
17
|
riskLevels: ['low', 'medium', 'high'],
|
|
17
18
|
specTypes: ['all'],
|
|
18
19
|
},
|
|
@@ -20,7 +21,7 @@ export const GATE_CATALOG = [
|
|
|
20
21
|
id: 'sec-auth-check',
|
|
21
22
|
category: 'security',
|
|
22
23
|
title: 'All endpoints/routes require authentication check before processing',
|
|
23
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
24
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
24
25
|
riskLevels: ['medium', 'high'],
|
|
25
26
|
specTypes: ['feature', 'infra'],
|
|
26
27
|
},
|
|
@@ -28,7 +29,7 @@ export const GATE_CATALOG = [
|
|
|
28
29
|
id: 'sec-sensitive-data',
|
|
29
30
|
category: 'security',
|
|
30
31
|
title: 'No PII or secrets logged to console/file — use redaction or masking',
|
|
31
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
32
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
32
33
|
riskLevels: ['medium', 'high'],
|
|
33
34
|
specTypes: ['all'],
|
|
34
35
|
},
|
|
@@ -36,7 +37,7 @@ export const GATE_CATALOG = [
|
|
|
36
37
|
id: 'sec-cors',
|
|
37
38
|
category: 'security',
|
|
38
39
|
title: 'CORS configured explicitly — no wildcard origin in production',
|
|
39
|
-
stacks: ['typescript', 'python', 'generic'],
|
|
40
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'generic'],
|
|
40
41
|
riskLevels: ['medium', 'high'],
|
|
41
42
|
specTypes: ['feature', 'infra'],
|
|
42
43
|
},
|
|
@@ -44,7 +45,7 @@ export const GATE_CATALOG = [
|
|
|
44
45
|
id: 'sec-rate-limit',
|
|
45
46
|
category: 'security',
|
|
46
47
|
title: 'Rate limiting applied to all public endpoints',
|
|
47
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
48
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
48
49
|
riskLevels: ['high'],
|
|
49
50
|
specTypes: ['feature', 'infra'],
|
|
50
51
|
},
|
|
@@ -52,7 +53,7 @@ export const GATE_CATALOG = [
|
|
|
52
53
|
id: 'sec-xss',
|
|
53
54
|
category: 'security',
|
|
54
55
|
title: 'All user-generated content escaped before rendering in HTML',
|
|
55
|
-
stacks: ['typescript', 'generic'],
|
|
56
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
56
57
|
riskLevels: ['medium', 'high'],
|
|
57
58
|
specTypes: ['feature'],
|
|
58
59
|
},
|
|
@@ -60,7 +61,7 @@ export const GATE_CATALOG = [
|
|
|
60
61
|
id: 'sec-csrf',
|
|
61
62
|
category: 'security',
|
|
62
63
|
title: 'CSRF tokens required for state-changing operations in browser context',
|
|
63
|
-
stacks: ['typescript', 'generic'],
|
|
64
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
64
65
|
riskLevels: ['medium', 'high'],
|
|
65
66
|
specTypes: ['feature'],
|
|
66
67
|
},
|
|
@@ -68,7 +69,7 @@ export const GATE_CATALOG = [
|
|
|
68
69
|
id: 'sec-dependency-check',
|
|
69
70
|
category: 'security',
|
|
70
71
|
title: 'No new dependencies with known critical vulnerabilities (npm audit / pip audit)',
|
|
71
|
-
stacks: ['typescript', 'python', 'generic'],
|
|
72
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'generic'],
|
|
72
73
|
riskLevels: ['low', 'medium', 'high'],
|
|
73
74
|
specTypes: ['all'],
|
|
74
75
|
},
|
|
@@ -76,7 +77,7 @@ export const GATE_CATALOG = [
|
|
|
76
77
|
id: 'sec-env-secrets',
|
|
77
78
|
category: 'security',
|
|
78
79
|
title: 'No secrets hardcoded — all credentials via environment variables',
|
|
79
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
80
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
80
81
|
riskLevels: ['low', 'medium', 'high'],
|
|
81
82
|
specTypes: ['all'],
|
|
82
83
|
},
|
|
@@ -84,7 +85,7 @@ export const GATE_CATALOG = [
|
|
|
84
85
|
id: 'sec-error-disclosure',
|
|
85
86
|
category: 'security',
|
|
86
87
|
title: 'Error responses do not expose internal stack traces or system details to clients',
|
|
87
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
88
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
88
89
|
riskLevels: ['medium', 'high'],
|
|
89
90
|
specTypes: ['all'],
|
|
90
91
|
},
|
|
@@ -92,7 +93,7 @@ export const GATE_CATALOG = [
|
|
|
92
93
|
id: 'sec-jwt-validation',
|
|
93
94
|
category: 'security',
|
|
94
95
|
title: 'JWT tokens validated for signature, expiry, and issuer on every protected route',
|
|
95
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
96
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
96
97
|
riskLevels: ['high'],
|
|
97
98
|
specTypes: ['feature', 'infra'],
|
|
98
99
|
},
|
|
@@ -100,7 +101,7 @@ export const GATE_CATALOG = [
|
|
|
100
101
|
id: 'sec-file-upload',
|
|
101
102
|
category: 'security',
|
|
102
103
|
title: 'File uploads: type validation, size limits, and virus scanning configured',
|
|
103
|
-
stacks: ['typescript', 'python', 'generic'],
|
|
104
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'generic'],
|
|
104
105
|
riskLevels: ['high'],
|
|
105
106
|
specTypes: ['feature'],
|
|
106
107
|
},
|
|
@@ -108,7 +109,7 @@ export const GATE_CATALOG = [
|
|
|
108
109
|
id: 'sec-path-traversal',
|
|
109
110
|
category: 'security',
|
|
110
111
|
title: 'File system paths sanitized — no user-controlled path traversal possible',
|
|
111
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
112
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
112
113
|
riskLevels: ['medium', 'high'],
|
|
113
114
|
specTypes: ['feature', 'infra'],
|
|
114
115
|
},
|
|
@@ -116,7 +117,7 @@ export const GATE_CATALOG = [
|
|
|
116
117
|
id: 'sec-https-only',
|
|
117
118
|
category: 'security',
|
|
118
119
|
title: 'All external API calls use HTTPS — no HTTP in production',
|
|
119
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
120
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
120
121
|
riskLevels: ['medium', 'high'],
|
|
121
122
|
specTypes: ['all'],
|
|
122
123
|
},
|
|
@@ -125,7 +126,7 @@ export const GATE_CATALOG = [
|
|
|
125
126
|
id: 'test-unit-coverage',
|
|
126
127
|
category: 'testing',
|
|
127
128
|
title: 'Unit tests cover ≥95% branch coverage for all new modules',
|
|
128
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
129
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
129
130
|
riskLevels: ['low', 'medium', 'high'],
|
|
130
131
|
specTypes: ['all'],
|
|
131
132
|
},
|
|
@@ -133,7 +134,7 @@ export const GATE_CATALOG = [
|
|
|
133
134
|
id: 'test-integration',
|
|
134
135
|
category: 'testing',
|
|
135
136
|
title: 'Integration test for each external dependency interaction (API, DB, cache)',
|
|
136
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
137
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
137
138
|
riskLevels: ['medium', 'high'],
|
|
138
139
|
specTypes: ['feature', 'infra'],
|
|
139
140
|
},
|
|
@@ -141,7 +142,7 @@ export const GATE_CATALOG = [
|
|
|
141
142
|
id: 'test-happy-path',
|
|
142
143
|
category: 'testing',
|
|
143
144
|
title: 'Happy path test for each acceptance criterion',
|
|
144
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
145
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
145
146
|
riskLevels: ['low', 'medium', 'high'],
|
|
146
147
|
specTypes: ['all'],
|
|
147
148
|
},
|
|
@@ -149,7 +150,7 @@ export const GATE_CATALOG = [
|
|
|
149
150
|
id: 'test-error-paths',
|
|
150
151
|
category: 'testing',
|
|
151
152
|
title: 'Error path tests: invalid input, network failure, not-found cases',
|
|
152
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
153
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
153
154
|
riskLevels: ['medium', 'high'],
|
|
154
155
|
specTypes: ['all'],
|
|
155
156
|
},
|
|
@@ -157,7 +158,7 @@ export const GATE_CATALOG = [
|
|
|
157
158
|
id: 'test-edge-cases',
|
|
158
159
|
category: 'testing',
|
|
159
160
|
title: 'Edge case tests: empty input, maximum values, concurrent operations',
|
|
160
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
161
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
161
162
|
riskLevels: ['medium', 'high'],
|
|
162
163
|
specTypes: ['feature'],
|
|
163
164
|
},
|
|
@@ -165,7 +166,7 @@ export const GATE_CATALOG = [
|
|
|
165
166
|
id: 'test-no-mocks-abuse',
|
|
166
167
|
category: 'testing',
|
|
167
168
|
title: 'Tests do not mock the unit under test — only external dependencies mocked',
|
|
168
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
169
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
169
170
|
riskLevels: ['low', 'medium', 'high'],
|
|
170
171
|
specTypes: ['all'],
|
|
171
172
|
},
|
|
@@ -173,7 +174,7 @@ export const GATE_CATALOG = [
|
|
|
173
174
|
id: 'test-deterministic',
|
|
174
175
|
category: 'testing',
|
|
175
176
|
title: 'All tests are deterministic — no random data, flaky network, or time-dependent state',
|
|
176
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
177
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
177
178
|
riskLevels: ['low', 'medium', 'high'],
|
|
178
179
|
specTypes: ['all'],
|
|
179
180
|
},
|
|
@@ -181,7 +182,7 @@ export const GATE_CATALOG = [
|
|
|
181
182
|
id: 'test-ci-passes',
|
|
182
183
|
category: 'testing',
|
|
183
184
|
title: 'All tests pass in CI environment without manual intervention',
|
|
184
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
185
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
185
186
|
riskLevels: ['low', 'medium', 'high'],
|
|
186
187
|
specTypes: ['all'],
|
|
187
188
|
},
|
|
@@ -189,7 +190,7 @@ export const GATE_CATALOG = [
|
|
|
189
190
|
id: 'test-performance-regression',
|
|
190
191
|
category: 'testing',
|
|
191
192
|
title: 'Performance regression test: response time within 10% of baseline',
|
|
192
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
193
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
193
194
|
riskLevels: ['high'],
|
|
194
195
|
specTypes: ['feature'],
|
|
195
196
|
},
|
|
@@ -197,7 +198,7 @@ export const GATE_CATALOG = [
|
|
|
197
198
|
id: 'test-snapshot',
|
|
198
199
|
category: 'testing',
|
|
199
200
|
title: 'Snapshot tests for all UI components and generated outputs',
|
|
200
|
-
stacks: ['typescript', 'generic'],
|
|
201
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
201
202
|
riskLevels: ['medium', 'high'],
|
|
202
203
|
specTypes: ['feature'],
|
|
203
204
|
},
|
|
@@ -206,7 +207,7 @@ export const GATE_CATALOG = [
|
|
|
206
207
|
id: 'arch-layer-violation',
|
|
207
208
|
category: 'architecture',
|
|
208
209
|
title: 'No cross-layer imports: frontend does not import from backend modules directly',
|
|
209
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
210
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
210
211
|
riskLevels: ['low', 'medium', 'high'],
|
|
211
212
|
specTypes: ['all'],
|
|
212
213
|
},
|
|
@@ -214,7 +215,7 @@ export const GATE_CATALOG = [
|
|
|
214
215
|
id: 'arch-ai-spec-assurance',
|
|
215
216
|
category: 'architecture',
|
|
216
217
|
title: 'AI-generated specs are checked against original user intent before implementation',
|
|
217
|
-
stacks: ['typescript', 'generic'],
|
|
218
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
218
219
|
riskLevels: ['low', 'medium', 'high'],
|
|
219
220
|
specTypes: ['feature', 'bugfix', 'infra', 'all'],
|
|
220
221
|
},
|
|
@@ -222,7 +223,7 @@ export const GATE_CATALOG = [
|
|
|
222
223
|
id: 'arch-new-code-domain-inference',
|
|
223
224
|
category: 'architecture',
|
|
224
225
|
title: 'New code does not infer product-domain requirements from incidental paths or stack presence',
|
|
225
|
-
stacks: ['typescript', 'generic'],
|
|
226
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
226
227
|
riskLevels: ['low', 'medium', 'high'],
|
|
227
228
|
specTypes: ['feature', 'bugfix', 'infra', 'all'],
|
|
228
229
|
},
|
|
@@ -230,7 +231,7 @@ export const GATE_CATALOG = [
|
|
|
230
231
|
id: 'arch-mcp-startup-assurance',
|
|
231
232
|
category: 'architecture',
|
|
232
233
|
title: 'MCP startup verifies official tools in first tools/list and excludes bootstrap-only tools',
|
|
233
|
-
stacks: ['typescript', 'generic'],
|
|
234
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
234
235
|
riskLevels: ['low', 'medium', 'high'],
|
|
235
236
|
specTypes: ['feature', 'bugfix', 'infra', 'all'],
|
|
236
237
|
},
|
|
@@ -238,7 +239,7 @@ export const GATE_CATALOG = [
|
|
|
238
239
|
id: 'arch-single-responsibility',
|
|
239
240
|
category: 'architecture',
|
|
240
241
|
title: 'Each module/class has single responsibility — max 1 reason to change',
|
|
241
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
242
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
242
243
|
riskLevels: ['medium', 'high'],
|
|
243
244
|
specTypes: ['all'],
|
|
244
245
|
},
|
|
@@ -246,7 +247,7 @@ export const GATE_CATALOG = [
|
|
|
246
247
|
id: 'arch-no-god-object',
|
|
247
248
|
category: 'architecture',
|
|
248
249
|
title: 'No god objects — functions max 80 lines, files max 400 lines',
|
|
249
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
250
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
250
251
|
riskLevels: ['medium', 'high'],
|
|
251
252
|
specTypes: ['all'],
|
|
252
253
|
},
|
|
@@ -254,7 +255,7 @@ export const GATE_CATALOG = [
|
|
|
254
255
|
id: 'arch-dependency-injection',
|
|
255
256
|
category: 'architecture',
|
|
256
257
|
title: 'External dependencies injected (not imported directly) for testability',
|
|
257
|
-
stacks: ['typescript', 'python', 'java', 'generic'],
|
|
258
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'generic'],
|
|
258
259
|
riskLevels: ['medium', 'high'],
|
|
259
260
|
specTypes: ['feature'],
|
|
260
261
|
},
|
|
@@ -262,7 +263,7 @@ export const GATE_CATALOG = [
|
|
|
262
263
|
id: 'arch-no-circular',
|
|
263
264
|
category: 'architecture',
|
|
264
265
|
title: 'No circular module dependencies — verified with madge or similar',
|
|
265
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
266
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
266
267
|
riskLevels: ['low', 'medium', 'high'],
|
|
267
268
|
specTypes: ['all'],
|
|
268
269
|
},
|
|
@@ -270,7 +271,7 @@ export const GATE_CATALOG = [
|
|
|
270
271
|
id: 'arch-api-contract',
|
|
271
272
|
category: 'architecture',
|
|
272
273
|
title: 'API contracts (request/response) defined with typed schemas before implementation',
|
|
273
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
274
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
274
275
|
riskLevels: ['medium', 'high'],
|
|
275
276
|
specTypes: ['feature'],
|
|
276
277
|
},
|
|
@@ -278,7 +279,7 @@ export const GATE_CATALOG = [
|
|
|
278
279
|
id: 'arch-error-boundaries',
|
|
279
280
|
category: 'architecture',
|
|
280
281
|
title: 'Error boundaries defined at module edges — errors do not propagate silently',
|
|
281
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
282
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
282
283
|
riskLevels: ['medium', 'high'],
|
|
283
284
|
specTypes: ['all'],
|
|
284
285
|
},
|
|
@@ -286,7 +287,7 @@ export const GATE_CATALOG = [
|
|
|
286
287
|
id: 'arch-backward-compat',
|
|
287
288
|
category: 'architecture',
|
|
288
289
|
title: 'No breaking changes to existing public APIs without major version bump',
|
|
289
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
290
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
290
291
|
riskLevels: ['medium', 'high'],
|
|
291
292
|
specTypes: ['refactor'],
|
|
292
293
|
},
|
|
@@ -294,7 +295,7 @@ export const GATE_CATALOG = [
|
|
|
294
295
|
id: 'arch-logging',
|
|
295
296
|
category: 'architecture',
|
|
296
297
|
title: 'Structured logging with request ID / correlation ID for all operations',
|
|
297
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
298
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
298
299
|
riskLevels: ['medium', 'high'],
|
|
299
300
|
specTypes: ['feature', 'infra'],
|
|
300
301
|
},
|
|
@@ -302,7 +303,7 @@ export const GATE_CATALOG = [
|
|
|
302
303
|
id: 'arch-config-externalized',
|
|
303
304
|
category: 'architecture',
|
|
304
305
|
title: 'All configuration externalized — no magic strings/numbers in business logic',
|
|
305
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
306
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
306
307
|
riskLevels: ['medium', 'high'],
|
|
307
308
|
specTypes: ['all'],
|
|
308
309
|
},
|
|
@@ -311,7 +312,7 @@ export const GATE_CATALOG = [
|
|
|
311
312
|
id: 'perf-lcp',
|
|
312
313
|
category: 'performance',
|
|
313
314
|
title: 'LCP (Largest Contentful Paint) ≤2.5s on 4G mobile connection',
|
|
314
|
-
stacks: ['typescript', 'generic'],
|
|
315
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
315
316
|
riskLevels: ['medium', 'high'],
|
|
316
317
|
specTypes: ['feature'],
|
|
317
318
|
},
|
|
@@ -319,7 +320,7 @@ export const GATE_CATALOG = [
|
|
|
319
320
|
id: 'perf-no-n-plus-1',
|
|
320
321
|
category: 'performance',
|
|
321
322
|
title: 'No N+1 query patterns — use batching, DataLoader, or eager loading',
|
|
322
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
323
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
323
324
|
riskLevels: ['medium', 'high'],
|
|
324
325
|
specTypes: ['feature'],
|
|
325
326
|
},
|
|
@@ -327,7 +328,7 @@ export const GATE_CATALOG = [
|
|
|
327
328
|
id: 'perf-bundle-size',
|
|
328
329
|
category: 'performance',
|
|
329
330
|
title: 'JavaScript bundle size increase <50KB gzipped per feature',
|
|
330
|
-
stacks: ['typescript', 'generic'],
|
|
331
|
+
stacks: [technologyValue('technology-typescript-969545'), 'generic'],
|
|
331
332
|
riskLevels: ['medium', 'high'],
|
|
332
333
|
specTypes: ['feature'],
|
|
333
334
|
},
|
|
@@ -335,7 +336,7 @@ export const GATE_CATALOG = [
|
|
|
335
336
|
id: 'perf-db-indexes',
|
|
336
337
|
category: 'performance',
|
|
337
338
|
title: 'Database queries on new tables use appropriate indexes',
|
|
338
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
339
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
339
340
|
riskLevels: ['medium', 'high'],
|
|
340
341
|
specTypes: ['feature', 'infra'],
|
|
341
342
|
},
|
|
@@ -343,7 +344,7 @@ export const GATE_CATALOG = [
|
|
|
343
344
|
id: 'perf-caching',
|
|
344
345
|
category: 'performance',
|
|
345
346
|
title: 'Expensive computations (>100ms) cached with appropriate TTL',
|
|
346
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
347
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
347
348
|
riskLevels: ['high'],
|
|
348
349
|
specTypes: ['feature'],
|
|
349
350
|
},
|
|
@@ -351,7 +352,7 @@ export const GATE_CATALOG = [
|
|
|
351
352
|
id: 'perf-async',
|
|
352
353
|
category: 'performance',
|
|
353
354
|
title: 'No synchronous blocking I/O in hot paths — all disk/network operations async',
|
|
354
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
355
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
355
356
|
riskLevels: ['medium', 'high'],
|
|
356
357
|
specTypes: ['feature', 'infra'],
|
|
357
358
|
},
|
|
@@ -359,7 +360,7 @@ export const GATE_CATALOG = [
|
|
|
359
360
|
id: 'perf-pagination',
|
|
360
361
|
category: 'performance',
|
|
361
362
|
title: 'All list endpoints paginated — no unbounded queries returning full table',
|
|
362
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
363
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
363
364
|
riskLevels: ['medium', 'high'],
|
|
364
365
|
specTypes: ['feature'],
|
|
365
366
|
},
|
|
@@ -367,7 +368,7 @@ export const GATE_CATALOG = [
|
|
|
367
368
|
id: 'perf-timeout',
|
|
368
369
|
category: 'performance',
|
|
369
370
|
title: 'Timeout configured for all external API calls — no indefinite waits',
|
|
370
|
-
stacks: ['typescript', 'python', 'java', 'go', 'generic'],
|
|
371
|
+
stacks: [technologyValue('technology-typescript-969545'), 'python', 'java', 'go', 'generic'],
|
|
371
372
|
riskLevels: ['medium', 'high'],
|
|
372
373
|
specTypes: ['feature', 'infra'],
|
|
373
374
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
1
2
|
import { GATE_CATALOG } from './gate-catalog.js';
|
|
2
3
|
export function selectGates(ctx) {
|
|
3
4
|
return GATE_CATALOG.filter((g) => (g.specTypes.includes(ctx.specType) || g.specTypes.includes('all')) &&
|
|
@@ -28,20 +29,24 @@ export function formatGatesSection(gates) {
|
|
|
28
29
|
export function inferStack(language, framework) {
|
|
29
30
|
const lang = (language ?? '').toLowerCase();
|
|
30
31
|
const fw = (framework ?? '').toLowerCase();
|
|
31
|
-
if (lang.includes('python') ||
|
|
32
|
+
if (lang.includes('python') ||
|
|
33
|
+
fw.includes(technologyValue('technology-fastapi-6aee0e')) ||
|
|
34
|
+
fw.includes(technologyValue('technology-django-7d8a08'))) {
|
|
32
35
|
return 'python';
|
|
33
36
|
}
|
|
34
37
|
// Check typescript/javascript BEFORE java to avoid 'javascript'.includes('java') matching
|
|
35
|
-
if (lang.includes('typescript') ||
|
|
38
|
+
if (lang.includes(technologyValue('technology-typescript-969545')) ||
|
|
36
39
|
lang.includes('javascript') ||
|
|
37
40
|
fw.includes('node') ||
|
|
38
41
|
fw.includes('next')) {
|
|
39
|
-
return 'typescript';
|
|
42
|
+
return technologyValue('technology-typescript-969545');
|
|
40
43
|
}
|
|
41
44
|
if (lang === 'java' || fw.includes('spring')) {
|
|
42
45
|
return 'java';
|
|
43
46
|
}
|
|
44
|
-
if (lang.includes('go') ||
|
|
47
|
+
if (lang.includes('go') ||
|
|
48
|
+
fw.includes(technologyValue('technology-gin-985adc')) ||
|
|
49
|
+
fw.includes(technologyValue('technology-fiber-77c3e6'))) {
|
|
45
50
|
return 'go';
|
|
46
51
|
}
|
|
47
52
|
return 'generic';
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
3
1
|
// engine/registry/core.ts — Orchestrator for spec accuracy validation and doc enrichment
|
|
4
2
|
// Composes loader → matcher → validator → reporter into two public functions.
|
|
5
3
|
import { loadRegistry } from './loader.js';
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
// engine/registry/loader.ts — Loads and merges framework registry entries
|
|
3
3
|
// Base entries come from src/config/framework-registry/*.json
|
|
4
4
|
// Custom entries come from data/global/registry-custom.json (user-added)
|
|
5
|
-
import { readFile
|
|
5
|
+
import { readFile } from 'node:fs/promises';
|
|
6
6
|
import { join, dirname } from 'node:path';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
8
|
import { readJson } from '../../storage/base-store.js';
|
|
9
|
+
import { resolvedStorageArtifactPath } from '../../storage/storage-catalog.js';
|
|
10
|
+
import { loadTechnologyRegistry } from '../technology-registry.js';
|
|
9
11
|
const REGISTRY_DIR = join(dirname(fileURLToPath(import.meta.url)), '../../config/framework-registry');
|
|
10
|
-
const CUSTOM_REGISTRY_PATH = 'data/global/registry-custom.json';
|
|
11
12
|
/**
|
|
12
13
|
* Load a single framework JSON file from the base registry directory.
|
|
13
14
|
* Returns null if the file is missing or malformed.
|
|
@@ -43,23 +44,19 @@ async function loadFrameworkFile(fileName) {
|
|
|
43
44
|
* Skips index.json and any file that fails to parse.
|
|
44
45
|
*/
|
|
45
46
|
export async function loadBaseRegistry() {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
catch {
|
|
51
|
-
return [];
|
|
47
|
+
const files = loadTechnologyRegistry().frameworks.map((entry) => entry.file);
|
|
48
|
+
const results = await Promise.all(files.map(loadFrameworkFile));
|
|
49
|
+
if (results.some((entry) => entry === null)) {
|
|
50
|
+
throw new Error('TECHNOLOGY_REGISTRY_INVALID: a registered framework file is unavailable');
|
|
52
51
|
}
|
|
53
|
-
|
|
54
|
-
const results = await Promise.all(jsonFiles.map(loadFrameworkFile));
|
|
55
|
-
return results.filter((e) => e !== null);
|
|
52
|
+
return results;
|
|
56
53
|
}
|
|
57
54
|
/**
|
|
58
55
|
* Load user-defined custom registry entries from data/global/registry-custom.json.
|
|
59
56
|
* Returns an empty array when the file does not exist.
|
|
60
57
|
*/
|
|
61
58
|
export async function loadCustomRegistry() {
|
|
62
|
-
const store = await readJson(
|
|
59
|
+
const store = await readJson(resolvedStorageArtifactPath('custom-framework-registry'), { entries: [] });
|
|
63
60
|
return store.entries.map((e) => ({ ...e, customEntry: true }));
|
|
64
61
|
}
|
|
65
62
|
/**
|