@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.
Files changed (787) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +24 -24
  3. package/dist/cli/commands/inspect.d.ts +4 -0
  4. package/dist/cli/commands/inspect.js +144 -0
  5. package/dist/cli/commands/install.d.ts +19 -1
  6. package/dist/cli/commands/install.js +145 -43
  7. package/dist/cli/commands/job.d.ts +3 -0
  8. package/dist/cli/commands/job.js +119 -0
  9. package/dist/cli/commands/offline.d.ts +15 -0
  10. package/dist/cli/commands/offline.js +132 -0
  11. package/dist/cli/commands/serve.js +4 -0
  12. package/dist/cli/commands/spec.js +1 -1
  13. package/dist/cli/commands/storage.d.ts +3 -0
  14. package/dist/cli/commands/storage.js +102 -0
  15. package/dist/cli/commands/uninstall.d.ts +10 -0
  16. package/dist/cli/commands/uninstall.js +93 -7
  17. package/dist/cli/commands/validate.js +1 -1
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/router.js +9 -1
  20. package/dist/config/crash-shield-framework-rules.json +93 -0
  21. package/dist/config/environment-schema.json +149 -0
  22. package/dist/config/hardcode-exceptions.json +4 -0
  23. package/dist/config/license-plans.json +7 -0
  24. package/dist/config/native-release-public-key.pem +3 -0
  25. package/dist/config/native-targets.json +87 -0
  26. package/dist/config/product-public.d.ts +89 -0
  27. package/dist/config/product-public.js +140 -0
  28. package/dist/config/product-public.json +312 -0
  29. package/dist/config/product-public.ts +148 -0
  30. package/dist/config/release-compatibility.json +13 -0
  31. package/dist/config/release-policy.json +26 -0
  32. package/dist/config/runtime-policy.json +44 -0
  33. package/dist/config/skill-templates/planu-validate.md +7 -4
  34. package/dist/config/subagent-templates/planu-spec-implementer.md +7 -3
  35. package/dist/config/subagent-templates/planu-validator.md +10 -5
  36. package/dist/config/technology-registry.json +120 -0
  37. package/dist/config/version.js +7 -8
  38. package/dist/config/version.ts +10 -7
  39. package/dist/engine/abortable-process-runner.js +40 -9
  40. package/dist/engine/advanced-testing/accessibility-checker.js +12 -14
  41. package/dist/engine/advanced-testing/mutation-advisor.js +3 -4
  42. package/dist/engine/advanced-testing/property-based.js +2 -3
  43. package/dist/engine/advanced-testing/test-data-advisor.js +2 -3
  44. package/dist/engine/agent-generator.js +2 -1
  45. package/dist/engine/agent-handoff-store.js +2 -1
  46. package/dist/engine/agent-prompt-generator.js +7 -5
  47. package/dist/engine/agent-telemetry.js +2 -1
  48. package/dist/engine/ai-integration/gemini/extensions-advisor.js +41 -9
  49. package/dist/engine/ambiguity-detector.js +12 -11
  50. package/dist/engine/analyzer/db-engine.js +2 -3
  51. package/dist/engine/analyzer/detectors.js +13 -14
  52. package/dist/engine/analyzer/env-setup.js +9 -10
  53. package/dist/engine/analyzer-env-scanner/env-example.js +7 -8
  54. package/dist/engine/api-spec-generator/graphql-parser.js +2 -2
  55. package/dist/engine/api-validation/graphql-schema-validator.js +2 -1
  56. package/dist/engine/api-validation/openapi-impl-validator.js +6 -7
  57. package/dist/engine/architecture-detector.js +10 -8
  58. package/dist/engine/auth/config.d.ts +1 -1
  59. package/dist/engine/auth/config.js +4 -3
  60. package/dist/engine/auto-updater/atomic-upgrade.d.ts +8 -0
  61. package/dist/engine/auto-updater/atomic-upgrade.js +381 -0
  62. package/dist/engine/auto-updater/config-detector.js +9 -3
  63. package/dist/engine/auto-updater/config-patcher.d.ts +0 -4
  64. package/dist/engine/auto-updater/config-patcher.js +10 -15
  65. package/dist/engine/auto-updater/index.d.ts +3 -1
  66. package/dist/engine/auto-updater/index.js +44 -30
  67. package/dist/engine/auto-updater/npm-registry.js +10 -2
  68. package/dist/engine/auto-updater/release-verifier.d.ts +3 -0
  69. package/dist/engine/auto-updater/release-verifier.js +112 -0
  70. package/dist/engine/auto-updater/upgrade-lock.d.ts +6 -0
  71. package/dist/engine/auto-updater/upgrade-lock.js +28 -0
  72. package/dist/engine/auto-updater/upgrade-trust-state.d.ts +7 -0
  73. package/dist/engine/auto-updater/upgrade-trust-state.js +59 -0
  74. package/dist/engine/autopilot/audit-logger.js +2 -5
  75. package/dist/engine/best-practices-library.js +2 -1
  76. package/dist/engine/browser-validator.js +2 -1
  77. package/dist/engine/build-tool-detector.js +3 -2
  78. package/dist/engine/ci-generator/context-builders.js +7 -5
  79. package/dist/engine/ci-generator/stack-detector.js +0 -2
  80. package/dist/engine/ci-generator/yaml-builder.js +0 -2
  81. package/dist/engine/claude-config-auditor/rules-auditor.js +4 -3
  82. package/dist/engine/code-transforms/typescript/ast-utils.js +2 -3
  83. package/dist/engine/complexity-budget/trivial-detector.js +2 -1
  84. package/dist/engine/compliance-test-generator/index.js +7 -2
  85. package/dist/engine/compliance-test-generator/test-formatter.js +2 -2
  86. package/dist/engine/config-health/mcp-config-checker.js +2 -1
  87. package/dist/engine/config-health/ts-checker-scripts.js +4 -3
  88. package/dist/engine/config-health/ts-checker.js +3 -2
  89. package/dist/engine/convention-injector.js +5 -7
  90. package/dist/engine/convention-scanner/convention-parser.js +3 -2
  91. package/dist/engine/core-bridge-duplicate-blocks.d.ts +3 -0
  92. package/dist/engine/core-bridge-duplicate-blocks.js +57 -0
  93. package/dist/engine/core-bridge-gaps.d.ts +4 -0
  94. package/dist/engine/core-bridge-gaps.js +75 -0
  95. package/dist/engine/core-bridge.d.ts +9 -9
  96. package/dist/engine/core-bridge.js +196 -283
  97. package/dist/engine/cost-tracking/ledger.js +2 -5
  98. package/dist/engine/coverage-gap-analyzer.js +10 -1
  99. package/dist/engine/crash-shield/detectors/framework-detector.d.ts +2 -0
  100. package/dist/engine/crash-shield/detectors/framework-detector.js +110 -192
  101. package/dist/engine/crash-shield/detectors/typescript-detector.js +2 -1
  102. package/dist/engine/dashboard/data-loader.js +2 -1
  103. package/dist/engine/data-projects-gc/gc-runner.d.ts +7 -0
  104. package/dist/engine/data-projects-gc/gc-runner.js +113 -3
  105. package/dist/engine/data-projects-gc/scanner.js +5 -1
  106. package/dist/engine/decision-store.js +11 -14
  107. package/dist/engine/deleter/core.js +5 -5
  108. package/dist/engine/dep-auditor/abandonment-data.js +2 -1
  109. package/dist/engine/dep-auditor/abandonment-registry.js +3 -1
  110. package/dist/engine/dep-auditor/cve-fetcher.js +3 -0
  111. package/dist/engine/dep-auditor/dep-duplicates-detector.js +36 -4
  112. package/dist/engine/dep-auditor/license-registry.js +2 -0
  113. package/dist/engine/dependency-evaluator.d.ts +14 -0
  114. package/dist/engine/dependency-evaluator.js +81 -0
  115. package/dist/engine/deploy/providers/fly.js +7 -7
  116. package/dist/engine/deploy/providers/netlify.js +7 -7
  117. package/dist/engine/deploy/providers/railway.js +10 -12
  118. package/dist/engine/deploy/providers/vercel.js +7 -9
  119. package/dist/engine/deprecation-scanner/pattern-loader.js +0 -2
  120. package/dist/engine/desktop-detector.js +2 -3
  121. package/dist/engine/detect-duplication.js +2 -1
  122. package/dist/engine/detectors/advanced-framework-detector/css-state-detector.js +2 -1
  123. package/dist/engine/detectors/advanced-framework-detector/legacy-detector.js +2 -3
  124. package/dist/engine/detectors/advanced-framework-detector/modern-detector.js +3 -4
  125. package/dist/engine/detectors/agent-framework-detector.js +3 -2
  126. package/dist/engine/detectors/ai-native-detector.js +4 -6
  127. package/dist/engine/detectors/cache-db-detector.js +4 -3
  128. package/dist/engine/detectors/cicd-detector.js +4 -3
  129. package/dist/engine/detectors/deployment-detector.js +11 -12
  130. package/dist/engine/detectors/frontend-perf-detector.js +14 -9
  131. package/dist/engine/detectors/library-detector-multilang-a.js +16 -3
  132. package/dist/engine/detectors/library-detector-node.js +14 -4
  133. package/dist/engine/detectors/library-detector-python.js +7 -1
  134. package/dist/engine/detectors/library-detector.js +0 -2
  135. package/dist/engine/detectors/llm-detector/provider-maps.js +3 -2
  136. package/dist/engine/detectors/mcp-candidate-detector.js +12 -16
  137. package/dist/engine/detectors/mfe-detector.js +6 -7
  138. package/dist/engine/detectors/monitoring-detector.js +4 -3
  139. package/dist/engine/detectors/otel-detector.js +3 -2
  140. package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -2
  141. package/dist/engine/detectors/otel-ecosystem-detectors.js +4 -3
  142. package/dist/engine/detectors/platform-specialty-detector.js +3 -5
  143. package/dist/engine/detectors/template-engine-detector.js +3 -4
  144. package/dist/engine/doc-generator/builders.js +2 -3
  145. package/dist/engine/doc-generator/mobile-distribution-guide.js +13 -17
  146. package/dist/engine/doc-generator/portal/dirty-flag-map.d.ts +2 -2
  147. package/dist/engine/doc-generator/portal/portal-regenerator.js +3 -47
  148. package/dist/engine/domain-detector.js +3 -6
  149. package/dist/engine/dynamic-knowledge/knowledge-cache.js +3 -4
  150. package/dist/engine/dynamic-knowledge/knowledge-merger.js +17 -2
  151. package/dist/engine/dynamic-knowledge/web-researcher.js +15 -14
  152. package/dist/engine/dynamic-migration-detector/manifest-readers-extended.js +0 -2
  153. package/dist/engine/e2e-test-generator.js +4 -3
  154. package/dist/engine/ecosystem-absorber/knowledge-cache.js +2 -1
  155. package/dist/engine/ecosystem-absorber/platform-crawler.js +2 -2
  156. package/dist/engine/escalator/retry-counter.js +2 -1
  157. package/dist/engine/evidence-gates/artifact-reader.d.ts +6 -0
  158. package/dist/engine/evidence-gates/artifact-reader.js +105 -21
  159. package/dist/engine/evidence-gates/lifecycle-gate.d.ts +2 -1
  160. package/dist/engine/evidence-gates/lifecycle-gate.js +54 -0
  161. package/dist/engine/execution/context.d.ts +19 -0
  162. package/dist/engine/execution/context.js +127 -0
  163. package/dist/engine/execution/deadline-io.d.ts +21 -0
  164. package/dist/engine/execution/deadline-io.js +45 -0
  165. package/dist/engine/execution/job-executor.d.ts +16 -0
  166. package/dist/engine/execution/job-executor.js +140 -0
  167. package/dist/engine/execution/job-runtime.d.ts +78 -0
  168. package/dist/engine/execution/job-runtime.js +220 -0
  169. package/dist/engine/execution/native-relevance-scorer.d.ts +6 -0
  170. package/dist/engine/execution/native-relevance-scorer.js +64 -0
  171. package/dist/engine/execution/native-worker-dispatch.d.ts +3 -0
  172. package/dist/engine/execution/native-worker-dispatch.js +46 -0
  173. package/dist/engine/execution/native-worker-protocol.d.ts +6 -0
  174. package/dist/engine/execution/native-worker-protocol.js +33 -0
  175. package/dist/engine/execution/native-worker-runtime.d.ts +4 -0
  176. package/dist/engine/execution/native-worker-runtime.js +177 -0
  177. package/dist/engine/execution/native-worker-thread.d.ts +2 -0
  178. package/dist/engine/execution/native-worker-thread.js +66 -0
  179. package/dist/engine/execution/operation-journal.d.ts +66 -0
  180. package/dist/engine/execution/operation-journal.js +260 -0
  181. package/dist/engine/execution/outbox-worker.d.ts +31 -0
  182. package/dist/engine/execution/outbox-worker.js +192 -0
  183. package/dist/engine/execution/validate-job-executor.d.ts +24 -0
  184. package/dist/engine/execution/validate-job-executor.js +342 -0
  185. package/dist/engine/execution/validate-job-payload.d.ts +5 -0
  186. package/dist/engine/execution/validate-job-payload.js +87 -0
  187. package/dist/engine/execution/validate-job-recovery.d.ts +4 -0
  188. package/dist/engine/execution/validate-job-recovery.js +47 -0
  189. package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
  190. package/dist/engine/execution/validate-worker-runtime.js +100 -0
  191. package/dist/engine/execution/validate-worker-thread.d.ts +2 -0
  192. package/dist/engine/execution/validate-worker-thread.js +71 -0
  193. package/dist/engine/execution-plan/desktop-distribution.js +3 -7
  194. package/dist/engine/execution-plan/mobile-distribution.js +4 -9
  195. package/dist/engine/execution-plan/phases.js +4 -5
  196. package/dist/engine/execution-plan/plan-utils.js +8 -5
  197. package/dist/engine/facilitate/context-loader.js +3 -9
  198. package/dist/engine/figma/code-connect-fetcher.js +9 -8
  199. package/dist/engine/filesystem-watcher/index.d.ts +3 -3
  200. package/dist/engine/filesystem-watcher/index.js +5 -5
  201. package/dist/engine/framework-detector.js +14 -15
  202. package/dist/engine/git/planu-autocommit.js +8 -7
  203. package/dist/engine/git/repository-probe.d.ts +3 -0
  204. package/dist/engine/git/repository-probe.js +13 -0
  205. package/dist/engine/global-rules-manager.js +2 -2
  206. package/dist/engine/handoff-artifacts/io.js +2 -3
  207. package/dist/engine/handoff-artifacts/schemas/red-tests-handoff.js +8 -1
  208. package/dist/engine/handoff-artifacts/schemas.d.ts +4 -0
  209. package/dist/engine/handoff-artifacts/schemas.js +5 -0
  210. package/dist/engine/hook-generator/stack-hook-templates.js +4 -4
  211. package/dist/engine/hooks/config-loader.js +1 -1
  212. package/dist/engine/hooks/context-injector.js +4 -7
  213. package/dist/engine/hooks/file-watcher.js +1 -14
  214. package/dist/engine/hooks-reconciler.js +6 -4
  215. package/dist/engine/infrastructure/component-mapper.js +5 -7
  216. package/dist/engine/infrastructure/docker-compose-generator.js +8 -10
  217. package/dist/engine/infrastructure/index.js +6 -3
  218. package/dist/engine/infrastructure/kubernetes-generator.js +2 -2
  219. package/dist/engine/infrastructure/railway-generator.js +10 -8
  220. package/dist/engine/infrastructure/signal-detector.js +6 -8
  221. package/dist/engine/infrastructure/terraform-generator.js +6 -8
  222. package/dist/engine/legal-compliance/detector.js +3 -2
  223. package/dist/engine/local-first/storage-advisor.js +5 -6
  224. package/dist/engine/macos-keychain-native-port.d.ts +5 -0
  225. package/dist/engine/macos-keychain-native-port.js +26 -0
  226. package/dist/engine/marketplace-fetcher/cache.js +3 -1
  227. package/dist/engine/mcp-config/mcp-config-writer.d.ts +2 -2
  228. package/dist/engine/mcp-config/mcp-config-writer.js +10 -8
  229. package/dist/engine/migration/db-migrator.js +2 -5
  230. package/dist/engine/migration/equivalence-mapper.js +12 -13
  231. package/dist/engine/migration/service-catalogs.js +6 -7
  232. package/dist/engine/migration/service-migrator-catalogs.js +6 -7
  233. package/dist/engine/mobile-detector-ios.js +2 -3
  234. package/dist/engine/mobile-detector.js +16 -4
  235. package/dist/engine/model-router/complexity-analyzer.js +4 -7
  236. package/dist/engine/multi-agent-review/security-analyzer.js +3 -1
  237. package/dist/engine/multi-app-detector/app-type.js +26 -21
  238. package/dist/engine/multi-app-detector/core.js +3 -2
  239. package/dist/engine/multi-teammate-review/disagreement-counter.js +2 -1
  240. package/dist/engine/multi-teammate-review/panel-orchestrator.js +0 -2
  241. package/dist/engine/mutation-config-generator.js +10 -7
  242. package/dist/engine/native-capability-policy.d.ts +4 -0
  243. package/dist/engine/native-capability-policy.js +24 -0
  244. package/dist/engine/native-platform.d.ts +3 -0
  245. package/dist/engine/native-platform.js +44 -0
  246. package/dist/engine/native-runtime-handshake.d.ts +20 -0
  247. package/dist/engine/native-runtime-handshake.js +230 -0
  248. package/dist/engine/network-policy.d.ts +27 -0
  249. package/dist/engine/network-policy.js +174 -0
  250. package/dist/engine/next-spec-resolver/dependency-filter.js +2 -22
  251. package/dist/engine/nfr-profile-detector.js +12 -16
  252. package/dist/engine/nli-keywords.js +8 -9
  253. package/dist/engine/oauth/config-guard.js +4 -5
  254. package/dist/engine/observability/local-execution-spans.d.ts +15 -0
  255. package/dist/engine/observability/local-execution-spans.js +63 -0
  256. package/dist/engine/orchestrator/runtime.js +0 -1
  257. package/dist/engine/package-registry.js +2 -6
  258. package/dist/engine/performance-analyzer.js +2 -5
  259. package/dist/engine/permissions-merger/stack-detectors.js +5 -5
  260. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +39 -0
  261. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +1310 -0
  262. package/dist/engine/planu-core.darwin-x64.node.manifest.json +39 -0
  263. package/dist/engine/planu-core.darwin-x64.node.sbom.json +1310 -0
  264. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +38 -0
  265. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +1310 -0
  266. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +38 -0
  267. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +1310 -0
  268. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +38 -0
  269. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +1310 -0
  270. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +38 -0
  271. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +1310 -0
  272. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +38 -0
  273. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +1310 -0
  274. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +38 -0
  275. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +1310 -0
  276. package/dist/engine/platform-detector/desktop.js +15 -2
  277. package/dist/engine/platform-detector/extensions.js +2 -1
  278. package/dist/engine/platform-detector/games.js +2 -1
  279. package/dist/engine/platform-detector.js +3 -2
  280. package/dist/engine/platform-engineering/idp-detector.js +2 -1
  281. package/dist/engine/plugin-installer/stack-matcher.js +9 -17
  282. package/dist/engine/plugins/lifecycle.js +6 -2
  283. package/dist/engine/prior-decisions/contradiction-detector.js +60 -30
  284. package/dist/engine/project-dna/stack-detector.js +15 -17
  285. package/dist/engine/project-graph/builder.js +11 -0
  286. package/dist/engine/project-graph/cache.js +1 -1
  287. package/dist/engine/project-graph/freshness-projection.d.ts +16 -0
  288. package/dist/engine/project-graph/freshness-projection.js +95 -0
  289. package/dist/engine/project-graph/index.d.ts +1 -0
  290. package/dist/engine/project-graph/index.js +1 -0
  291. package/dist/engine/project-graph/query.js +15 -25
  292. package/dist/engine/project-health-checker.js +3 -4
  293. package/dist/engine/project-scanner/stack-detector.js +17 -17
  294. package/dist/engine/property-test-generator.js +2 -3
  295. package/dist/engine/qa-gate.d.ts +1 -0
  296. package/dist/engine/qa-gate.js +6 -4
  297. package/dist/engine/quality-gates/gate-catalog.js +47 -46
  298. package/dist/engine/quality-gates/gate-injector.js +9 -4
  299. package/dist/engine/registry/core.js +0 -2
  300. package/dist/engine/registry/loader.js +9 -12
  301. package/dist/engine/registry/matcher.js +129 -24
  302. package/dist/engine/resilience-detector/concurrency-detector.js +4 -4
  303. package/dist/engine/resilience-detector/middleware-detector.js +11 -13
  304. package/dist/engine/resilience-detector/validation-detector.js +17 -4
  305. package/dist/engine/reverse-engineer/config-analyzer.js +9 -8
  306. package/dist/engine/reverse-engineer/orchestrator.js +5 -9
  307. package/dist/engine/reverse-engineer/test-file-parser.js +6 -3
  308. package/dist/engine/rules-generator/index.js +6 -5
  309. package/dist/engine/runtime-policy.d.ts +7 -0
  310. package/dist/engine/runtime-policy.js +101 -0
  311. package/dist/engine/runtime-security/checkers/content-security.js +21 -6
  312. package/dist/engine/runtime-security/checkers/file-permissions.js +0 -2
  313. package/dist/engine/safety/atomic-write-file.js +20 -9
  314. package/dist/engine/safety/atomic-writer.js +10 -3
  315. package/dist/engine/safety/cross-process-lock.d.ts +3 -40
  316. package/dist/engine/safety/cross-process-lock.js +268 -272
  317. package/dist/engine/safety/file-mutex.d.ts +2 -9
  318. package/dist/engine/safety/file-mutex.js +155 -87
  319. package/dist/engine/safety/health-monitor.js +15 -6
  320. package/dist/engine/safety/lock-lease-store.d.ts +79 -0
  321. package/dist/engine/safety/lock-lease-store.js +372 -0
  322. package/dist/engine/safety/lock-scavenger.d.ts +2 -5
  323. package/dist/engine/safety/lock-scavenger.js +158 -76
  324. package/dist/engine/safety/lock-staleness.js +4 -1
  325. package/dist/engine/safety/obsolete-lock-guard.d.ts +8 -0
  326. package/dist/engine/safety/obsolete-lock-guard.js +31 -0
  327. package/dist/engine/safety/transaction.js +3 -3
  328. package/dist/engine/sandbox/index.js +2 -1
  329. package/dist/engine/sandbox/runner-detect.js +3 -2
  330. package/dist/engine/sandbox/runner-docker.js +4 -3
  331. package/dist/engine/scan-project/module-discoverer.js +3 -2
  332. package/dist/engine/schema-generator.js +16 -9
  333. package/dist/engine/security-analyzer/criteria-generator.js +2 -3
  334. package/dist/engine/self-healing/healer.js +4 -4
  335. package/dist/engine/session-safeguard/learnings-buffer.d.ts +1 -2
  336. package/dist/engine/session-safeguard/learnings-buffer.js +42 -65
  337. package/dist/engine/shared-agent-memory.js +66 -74
  338. package/dist/engine/skill-adapter/command-rewriter.js +3 -2
  339. package/dist/engine/skill-adapter/index.js +3 -3
  340. package/dist/engine/skill-adapter/placeholder-map.js +3 -2
  341. package/dist/engine/skill-bootstrap/stack-matcher.js +47 -48
  342. package/dist/engine/skill-generation/stack-content-generator.js +0 -2
  343. package/dist/engine/skill-generator/workflow-skill-generator.js +2 -1
  344. package/dist/engine/skill-registry/ttl-refresh.js +3 -1
  345. package/dist/engine/skills/skills-fetcher.js +3 -6
  346. package/dist/engine/skills-reconciler.js +19 -39
  347. package/dist/engine/spec-coverage/test-finder.js +7 -6
  348. package/dist/engine/spec-diff-engine.js +3 -3
  349. package/dist/engine/spec-generator/api-key-resolver.d.ts +1 -1
  350. package/dist/engine/spec-generator/api-key-resolver.js +3 -24
  351. package/dist/engine/spec-generators/issue-extractor.js +9 -3
  352. package/dist/engine/spec-migrator/drift-detector.js +5 -13
  353. package/dist/engine/spec-migrator/filesystem-import.js +14 -10
  354. package/dist/engine/spec-migrator/planu-canonical-policy.js +10 -1
  355. package/dist/engine/spec-migrator/strict-planu-cleanup.js +24 -25
  356. package/dist/engine/spec-registry/adapter.d.ts +0 -5
  357. package/dist/engine/spec-registry/adapter.js +45 -46
  358. package/dist/engine/spec-registry/client.js +2 -0
  359. package/dist/engine/spec-source-sync.js +3 -2
  360. package/dist/engine/spec-templates/custom-loader.js +2 -3
  361. package/dist/engine/spec-templates/templates-domain-specific.js +8 -5
  362. package/dist/engine/spec-templates/templates-perf-integration.js +2 -3
  363. package/dist/engine/stack-auditor/manifest-reader.js +0 -2
  364. package/dist/engine/staleness/stale-implementing.js +7 -7
  365. package/dist/engine/tdd-scaffold-generator.js +24 -11
  366. package/dist/engine/teammate-router/green-phase-verifier.js +2 -1
  367. package/dist/engine/teammate-router/red-phase-verifier.js +2 -1
  368. package/dist/engine/technology-registry.d.ts +11 -0
  369. package/dist/engine/technology-registry.js +142 -0
  370. package/dist/engine/telemetry/error-reporter.d.ts +1 -2
  371. package/dist/engine/telemetry/error-reporter.js +11 -18
  372. package/dist/engine/telemetry/health-checker.js +5 -14
  373. package/dist/engine/telemetry/index.d.ts +0 -1
  374. package/dist/engine/telemetry/index.js +0 -1
  375. package/dist/engine/telemetry/stance.js +3 -2
  376. package/dist/engine/telemetry/telemetry-client.d.ts +1 -5
  377. package/dist/engine/telemetry/telemetry-client.js +45 -29
  378. package/dist/engine/telemetry/telemetry-store.d.ts +3 -3
  379. package/dist/engine/telemetry/telemetry-store.js +30 -23
  380. package/dist/engine/test-framework-detector/detectors.js +8 -8
  381. package/dist/engine/test-framework-detector/strategy.js +8 -9
  382. package/dist/engine/test-generators/agent-test-templates.js +2 -3
  383. package/dist/engine/test-generators/contract-test-generator.d.ts +1 -1
  384. package/dist/engine/test-generators/contract-test-generator.js +9 -202
  385. package/dist/engine/test-generators/platform-test-templates-b.js +2 -3
  386. package/dist/engine/test-generators/platform-test-templates.js +2 -5
  387. package/dist/engine/test-mocks-generator.js +4 -3
  388. package/dist/engine/test-plan-generator.js +30 -12
  389. package/dist/engine/test-scaffold-generator/advanced-scaffold.js +4 -5
  390. package/dist/engine/test-scaffold-generator/unit-scaffold.js +5 -6
  391. package/dist/engine/timing/budget.d.ts +6 -17
  392. package/dist/engine/timing/budget.js +80 -64
  393. package/dist/engine/tool-groups/group-manager.js +3 -3
  394. package/dist/engine/universal-rules/installer.js +1 -1
  395. package/dist/engine/universal-rules/rules/planu-modes.js +2 -0
  396. package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -0
  397. package/dist/engine/update-notifier.js +8 -5
  398. package/dist/engine/validation/approved-spec-portability.d.ts +12 -0
  399. package/dist/engine/validation/approved-spec-portability.js +107 -0
  400. package/dist/engine/validation/durable-validation.d.ts +36 -0
  401. package/dist/engine/validation/durable-validation.js +335 -0
  402. package/dist/engine/validation/validation-freshness.d.ts +36 -0
  403. package/dist/engine/validation/validation-freshness.js +427 -0
  404. package/dist/engine/validation/validation-receipt-codec.d.ts +13 -0
  405. package/dist/engine/validation/validation-receipt-codec.js +182 -0
  406. package/dist/engine/validation/validation-receipt.d.ts +59 -0
  407. package/dist/engine/validation/validation-receipt.js +282 -0
  408. package/dist/engine/validation/validation-source-policy.d.ts +4 -0
  409. package/dist/engine/validation/validation-source-policy.js +16 -0
  410. package/dist/engine/validation/validation-submission.d.ts +36 -0
  411. package/dist/engine/validation/validation-submission.js +128 -0
  412. package/dist/engine/validation-evidence-ledger.js +41 -0
  413. package/dist/engine/validation-impact-planner.js +25 -9
  414. package/dist/engine/validator/spec-compliance-runner.d.ts +1 -1
  415. package/dist/engine/validator/spec-compliance-runner.js +17 -8
  416. package/dist/engine/validator/validation-report-writer.js +1 -1
  417. package/dist/engine/validator.js +2 -1
  418. package/dist/engine/verify-integrations/index.js +1 -1
  419. package/dist/engine/version-resolver.js +5 -6
  420. package/dist/engine/web-fetcher/stack-advisor.js +156 -92
  421. package/dist/engine/web-fetcher/stack-detector.js +114 -54
  422. package/dist/engine/workspace-manager.js +3 -2
  423. package/dist/errors/classified-degradation.d.ts +3 -0
  424. package/dist/errors/classified-degradation.js +10 -0
  425. package/dist/errors/degradation-sink.d.ts +3 -0
  426. package/dist/errors/degradation-sink.js +5 -0
  427. package/dist/errors/error-taxonomy.d.ts +12 -0
  428. package/dist/errors/error-taxonomy.js +62 -0
  429. package/dist/hosts/claude-code/ux/mcp-prompts.js +10 -4
  430. package/dist/hosts/claude-code/ux/mcp-resources.js +4 -2
  431. package/dist/hosts/codex/config-scaffold.js +4 -3
  432. package/dist/hosts/gemini/config-scaffold.js +2 -1
  433. package/dist/hosts/gemini/multimodal-spec-flow.js +7 -4
  434. package/dist/index.js +21 -6
  435. package/dist/resources/patterns.js +3 -1
  436. package/dist/resources/specs.js +3 -1
  437. package/dist/resources/templates.js +3 -1
  438. package/dist/security/adapters/environment.d.ts +12 -0
  439. package/dist/security/adapters/environment.js +25 -0
  440. package/dist/security/adapters/linux-secret-service.d.ts +8 -0
  441. package/dist/security/adapters/linux-secret-service.js +60 -0
  442. package/dist/security/adapters/macos-keychain.d.ts +18 -0
  443. package/dist/security/adapters/macos-keychain.js +90 -0
  444. package/dist/security/adapters/windows-credential-manager.d.ts +8 -0
  445. package/dist/security/adapters/windows-credential-manager.js +58 -0
  446. package/dist/security/redactor.d.ts +5 -0
  447. package/dist/security/redactor.js +58 -0
  448. package/dist/security/secret-field.d.ts +5 -0
  449. package/dist/security/secret-field.js +17 -0
  450. package/dist/security/secret-migration.d.ts +3 -0
  451. package/dist/security/secret-migration.js +123 -0
  452. package/dist/security/secret-provider.d.ts +23 -0
  453. package/dist/security/secret-provider.js +145 -0
  454. package/dist/security/secure-json.d.ts +3 -0
  455. package/dist/security/secure-json.js +29 -0
  456. package/dist/storage/api-surfaces-store.js +2 -2
  457. package/dist/storage/approval-operation-lock.d.ts +1 -1
  458. package/dist/storage/approval-operation-lock.js +5 -3
  459. package/dist/storage/audit-trail-store.d.ts +1 -1
  460. package/dist/storage/audit-trail-store.js +48 -62
  461. package/dist/storage/autopilot-log-store.js +12 -5
  462. package/dist/storage/base-store.d.ts +8 -8
  463. package/dist/storage/base-store.js +57 -20
  464. package/dist/storage/checkpoint-store.js +5 -2
  465. package/dist/storage/comments-store.js +2 -2
  466. package/dist/storage/compliance-audit-store.js +5 -2
  467. package/dist/storage/compliance-gate-config-store.js +7 -4
  468. package/dist/storage/compliance-store.js +2 -2
  469. package/dist/storage/context-profile-store.js +2 -2
  470. package/dist/storage/crash-shield-store.js +8 -4
  471. package/dist/storage/feedback-store.js +10 -6
  472. package/dist/storage/figma-store.js +8 -4
  473. package/dist/storage/file-mutex.js +9 -1
  474. package/dist/storage/gaps-log.js +7 -4
  475. package/dist/storage/global-projects-store.js +4 -2
  476. package/dist/storage/ideas-store.js +2 -2
  477. package/dist/storage/index.d.ts +5 -0
  478. package/dist/storage/index.js +5 -0
  479. package/dist/storage/knowledge-store/knowledge.js +27 -33
  480. package/dist/storage/lessons-store.js +2 -2
  481. package/dist/storage/license-store.js +13 -41
  482. package/dist/storage/migrations/canonical-storage.d.ts +15 -0
  483. package/dist/storage/migrations/canonical-storage.js +599 -0
  484. package/dist/storage/oauth-store.js +36 -8
  485. package/dist/storage/path-resolver.js +16 -3
  486. package/dist/storage/pr-store.js +2 -2
  487. package/dist/storage/project-drift-store.js +20 -8
  488. package/dist/storage/project-identity.d.ts +32 -0
  489. package/dist/storage/project-identity.js +194 -0
  490. package/dist/storage/project-resolver.js +14 -7
  491. package/dist/storage/release-notes-store.js +2 -6
  492. package/dist/storage/runtime-db.d.ts +186 -0
  493. package/dist/storage/runtime-db.js +1054 -0
  494. package/dist/storage/schema-registry.d.ts +5 -0
  495. package/dist/storage/schema-registry.js +74 -0
  496. package/dist/storage/sentry-store.js +20 -9
  497. package/dist/storage/session-state-store.js +12 -5
  498. package/dist/storage/session-store.js +12 -4
  499. package/dist/storage/skill-registry-storage.d.ts +1 -1
  500. package/dist/storage/skill-registry-storage.js +13 -11
  501. package/dist/storage/slack-store.js +10 -5
  502. package/dist/storage/spec-store.js +31 -24
  503. package/dist/storage/status-store/file-lock.js +31 -9
  504. package/dist/storage/status-store/self-healing.js +10 -5
  505. package/dist/storage/status-store/version-sync.js +8 -6
  506. package/dist/storage/steering-store.js +2 -2
  507. package/dist/storage/storage-bundle.d.ts +5 -0
  508. package/dist/storage/storage-bundle.js +117 -0
  509. package/dist/storage/storage-catalog-validation.d.ts +3 -0
  510. package/dist/storage/storage-catalog-validation.js +20 -0
  511. package/dist/storage/storage-catalog.d.ts +25 -0
  512. package/dist/storage/storage-catalog.js +390 -0
  513. package/dist/storage/storage-layout.d.ts +24 -0
  514. package/dist/storage/storage-layout.js +101 -0
  515. package/dist/storage/storybook-store.js +2 -2
  516. package/dist/storage/supabase-store.js +24 -6
  517. package/dist/storage/tdd-policy-store.js +8 -6
  518. package/dist/storage/tech-debt-store.js +3 -3
  519. package/dist/storage/technology-selection-store.d.ts +1 -1
  520. package/dist/storage/technology-selection-store.js +6 -3
  521. package/dist/storage/token-cache-store.js +3 -3
  522. package/dist/storage/token-ledger-store.js +13 -8
  523. package/dist/storage/transition-log.js +7 -4
  524. package/dist/storage/trash-store.js +15 -6
  525. package/dist/storage/vector-store/migrator.js +7 -2
  526. package/dist/storage/vector-store/sqlite-adapter.js +4 -1
  527. package/dist/storage/webhook-server-store.js +2 -2
  528. package/dist/tools/api-spec-generator-handler.js +3 -2
  529. package/dist/tools/auto-update-handler.d.ts +1 -1
  530. package/dist/tools/auto-update-handler.js +1 -1
  531. package/dist/tools/browser-validate-handler.js +2 -1
  532. package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +8 -5
  533. package/dist/tools/challenge-spec/scenarios-desktop.js +8 -3
  534. package/dist/tools/challenge-spec/scenarios-failure.js +7 -2
  535. package/dist/tools/challenge-spec/security-challenge-scenarios.js +3 -3
  536. package/dist/tools/clarify-requirements/multiple-choice.js +53 -41
  537. package/dist/tools/comments-handler.js +2 -3
  538. package/dist/tools/compliance-test-handler.js +2 -2
  539. package/dist/tools/configure-telemetry.js +11 -11
  540. package/dist/tools/create-spec/auto-pipeline.js +13 -1
  541. package/dist/tools/create-spec/autopilot-analyzer.d.ts +1 -1
  542. package/dist/tools/create-spec/autopilot-analyzer.js +2 -4
  543. package/dist/tools/create-spec/mcp-tool-contract.d.ts +10 -4
  544. package/dist/tools/create-spec/mcp-tool-contract.js +7 -36
  545. package/dist/tools/create-spec/post-creation.d.ts +2 -1
  546. package/dist/tools/create-spec/post-creation.js +56 -54
  547. package/dist/tools/create-spec/relevance-scorer.d.ts +1 -1
  548. package/dist/tools/create-spec/relevance-scorer.js +17 -1
  549. package/dist/tools/create-spec/spec-builder.js +2 -12
  550. package/dist/tools/create-spec/spec-created-outbox-consumer.d.ts +14 -0
  551. package/dist/tools/create-spec/spec-created-outbox-consumer.js +176 -0
  552. package/dist/tools/create-spec.js +385 -520
  553. package/dist/tools/define-ui-contract/agent-interaction-contract.js +2 -4
  554. package/dist/tools/define-ui-contract-desktop/desktop-contract.js +12 -4
  555. package/dist/tools/define-ui-contract-desktop/native-contract.js +7 -3
  556. package/dist/tools/define-ui-contract-extensions.js +2 -3
  557. package/dist/tools/define-ui-contract-mobile.js +5 -9
  558. package/dist/tools/define-ui-contract-web/component-tree.js +4 -3
  559. package/dist/tools/define-ui-contract.js +7 -4
  560. package/dist/tools/deploy/deploy-spec.js +2 -4
  561. package/dist/tools/deploy/deploy-status.js +2 -4
  562. package/dist/tools/design-schema/nosql-category-schemas.js +2 -3
  563. package/dist/tools/design-schema-sql/migrations.js +3 -2
  564. package/dist/tools/design-schema-sql/tables.js +4 -1
  565. package/dist/tools/design-schema.js +4 -3
  566. package/dist/tools/feedback-handler.js +2 -4
  567. package/dist/tools/gc-data-projects.js +5 -5
  568. package/dist/tools/generate-execution-plan.js +3 -4
  569. package/dist/tools/generate-sub-agent.js +2 -1
  570. package/dist/tools/generate-tests/generators/a11y-tests-generator.js +5 -4
  571. package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
  572. package/dist/tools/generate-tests/generators/concurrency-test-generator/js-templates.js +9 -4
  573. package/dist/tools/generate-tests/generators/concurrency-test-generator.js +8 -4
  574. package/dist/tools/generate-tests/generators/database/detectors.js +9 -3
  575. package/dist/tools/generate-tests/generators/database/index.js +2 -4
  576. package/dist/tools/generate-tests/generators/event-test-generator.js +5 -4
  577. package/dist/tools/generate-tests/generators/game-tests-generator.js +2 -1
  578. package/dist/tools/generate-tests/generators/graphql-test-generator.js +11 -5
  579. package/dist/tools/generate-tests/generators/grpc-test-generator.js +2 -3
  580. package/dist/tools/generate-tests/generators/llm-security-test-generator.js +4 -3
  581. package/dist/tools/generate-tests/generators/local-first-test-generator.js +4 -3
  582. package/dist/tools/generate-tests/generators/mcp-tests-generator.js +11 -9
  583. package/dist/tools/generate-tests/generators/microservices/index.js +2 -3
  584. package/dist/tools/generate-tests/generators/otel-test-generator.js +6 -3
  585. package/dist/tools/generate-tests/generators/security/detectors.js +2 -5
  586. package/dist/tools/generate-tests/generators/security/index.js +2 -4
  587. package/dist/tools/generate-tests/generators/supply-chain-test-generator.js +2 -3
  588. package/dist/tools/generate-tests/generators/visual-regression-generator.js +14 -17
  589. package/dist/tools/generate-tests/generators/websocket-test-generator.js +2 -3
  590. package/dist/tools/generate-tests/test-helpers.js +11 -12
  591. package/dist/tools/generate-tests-content.js +4 -3
  592. package/dist/tools/generate-tests.js +7 -4
  593. package/dist/tools/git/git-helpers.d.ts +0 -2
  594. package/dist/tools/git/git-helpers.js +7 -7
  595. package/dist/tools/github-pr-handler.js +10 -3
  596. package/dist/tools/heal-spec-docs.js +6 -53
  597. package/dist/tools/hook-generator-handler.js +6 -6
  598. package/dist/tools/init-constitution/platform-principles.js +4 -2
  599. package/dist/tools/init-project/agents-md-writer.js +14 -5
  600. package/dist/tools/init-project/claude-md-generator.js +19 -12
  601. package/dist/tools/init-project/handler.js +165 -73
  602. package/dist/tools/init-project/host-assets-writer.d.ts +1 -1
  603. package/dist/tools/init-project/host-assets-writer.js +4 -2
  604. package/dist/tools/init-project/lifecycle-helpers.js +3 -5
  605. package/dist/tools/init-project/lint-scaffolder.js +6 -2
  606. package/dist/tools/init-project/migration-runner.d.ts +10 -1
  607. package/dist/tools/init-project/migration-runner.js +68 -3
  608. package/dist/tools/init-project/per-client-files-writer.js +14 -4
  609. package/dist/tools/init-project/rules-generator.js +10 -2
  610. package/dist/tools/init-project/scaffold-writer.d.ts +1 -1
  611. package/dist/tools/init-project/scaffold-writer.js +17 -15
  612. package/dist/tools/jobs/handlers.d.ts +15 -0
  613. package/dist/tools/jobs/handlers.js +126 -0
  614. package/dist/tools/list-specs.js +35 -34
  615. package/dist/tools/manage-plugins-handler.js +17 -9
  616. package/dist/tools/migrate-tech/advanced-handlers.js +3 -2
  617. package/dist/tools/migrate-tech/build-tool-handlers.js +3 -2
  618. package/dist/tools/migrate-tech/core-handlers.js +5 -2
  619. package/dist/tools/migrate-tech/data-handlers.js +6 -3
  620. package/dist/tools/migrate-tech-advanced/rollback-handlers.js +3 -2
  621. package/dist/tools/migrate-tech-advanced/service-handlers.js +5 -2
  622. package/dist/tools/oauth-handler.js +7 -1
  623. package/dist/tools/register-sdd-tools.d.ts +1 -1
  624. package/dist/tools/register-sdd-tools.js +5 -0
  625. package/dist/tools/register-spec-tools/core-spec-tools.js +31 -0
  626. package/dist/tools/registry/auth.js +13 -5
  627. package/dist/tools/registry/publish.js +7 -4
  628. package/dist/tools/resolve-project-path.d.ts +2 -2
  629. package/dist/tools/resolve-project-path.js +7 -7
  630. package/dist/tools/reverse-engineer/analyzer.js +14 -14
  631. package/dist/tools/rollback-release.js +3 -2
  632. package/dist/tools/safe-handler.js +295 -171
  633. package/dist/tools/schema-generator-handler.js +2 -1
  634. package/dist/tools/schemas/output-schemas.d.ts +88 -82
  635. package/dist/tools/schemas/output-schemas.js +12 -94
  636. package/dist/tools/schemas/plugins-schemas.js +0 -2
  637. package/dist/tools/schemas/registry.js +0 -2
  638. package/dist/tools/schemas/skill-registry-schemas.js +0 -2
  639. package/dist/tools/schemas/validate-output-schema.d.ts +256 -0
  640. package/dist/tools/schemas/validate-output-schema.js +212 -0
  641. package/dist/tools/sentry-handler.js +6 -1
  642. package/dist/tools/skill-bootstrap-handler.js +7 -4
  643. package/dist/tools/status-handler.js +4 -0
  644. package/dist/tools/storage-bundle-handler.d.ts +9 -0
  645. package/dist/tools/storage-bundle-handler.js +29 -0
  646. package/dist/tools/storage-paths-handler.d.ts +9 -0
  647. package/dist/tools/storage-paths-handler.js +17 -0
  648. package/dist/tools/suggest-mcp-server.js +11 -5
  649. package/dist/tools/suggest-mcps.js +29 -9
  650. package/dist/tools/suggest-tooling/advanced-testing-catalog.js +4 -5
  651. package/dist/tools/suggest-tooling/build-tool-catalog.js +2 -1
  652. package/dist/tools/suggest-tooling/css-framework-catalog.js +13 -7
  653. package/dist/tools/suggest-tooling/framework-catalog.js +3 -5
  654. package/dist/tools/suggest-tooling/frontend-perf-catalog.js +2 -6
  655. package/dist/tools/suggest-tooling/handler.js +10 -4
  656. package/dist/tools/suggest-tooling/hypermedia-catalog.js +11 -3
  657. package/dist/tools/suggest-tooling/linting-catalog.js +4 -7
  658. package/dist/tools/suggest-tooling/llm-security-catalog.js +2 -1
  659. package/dist/tools/suggest-tooling/local-first-catalog.js +7 -5
  660. package/dist/tools/suggest-tooling/observability-catalog.js +3 -4
  661. package/dist/tools/suggest-tooling/otel-catalog.js +4 -1
  662. package/dist/tools/suggest-tooling/resilience-catalog.js +16 -5
  663. package/dist/tools/suggest-tooling/skills-catalog.js +10 -9
  664. package/dist/tools/suggest-tooling/supply-chain-catalog.js +2 -3
  665. package/dist/tools/supabase-handler.js +2 -1
  666. package/dist/tools/token-intelligence-handler.js +2 -2
  667. package/dist/tools/token-recording.js +2 -2
  668. package/dist/tools/token-savings-handler.js +2 -2
  669. package/dist/tools/tool-registry/core-tools.js +131 -0
  670. package/dist/tools/tool-registry/group-infra.js +10 -12
  671. package/dist/tools/tool-registry/group-quality-compliance.js +5 -12
  672. package/dist/tools/update-status/approval-gates.d.ts +13 -0
  673. package/dist/tools/update-status/approval-gates.js +81 -0
  674. package/dist/tools/update-status/batch.js +4 -2
  675. package/dist/tools/update-status/dod-gates.d.ts +6 -24
  676. package/dist/tools/update-status/dod-gates.js +60 -135
  677. package/dist/tools/update-status/done-receipt-verifier.d.ts +15 -0
  678. package/dist/tools/update-status/done-receipt-verifier.js +145 -0
  679. package/dist/tools/update-status/evidence-gate.js +154 -2
  680. package/dist/tools/update-status/file-sync.js +23 -12
  681. package/dist/tools/update-status/gate-harness.d.ts +7 -0
  682. package/dist/tools/update-status/gate-harness.js +8 -0
  683. package/dist/tools/update-status/index.js +228 -325
  684. package/dist/tools/update-status/qa-gate.d.ts +1 -1
  685. package/dist/tools/update-status/qa-gate.js +2 -2
  686. package/dist/tools/update-status/side-effects.js +30 -37
  687. package/dist/tools/update-status/transition-guard.d.ts +4 -2
  688. package/dist/tools/update-status/transition-guard.js +57 -10
  689. package/dist/tools/update-status-convention-gate.js +24 -23
  690. package/dist/tools/update-status-reconcile.js +2 -2
  691. package/dist/tools/validate-api-contract-handler.js +3 -3
  692. package/dist/tools/validate-lint.js +20 -13
  693. package/dist/tools/validate.d.ts +3 -1
  694. package/dist/tools/validate.js +213 -5
  695. package/dist/transports/http-transport.js +84 -61
  696. package/dist/transports/middleware/with-telemetry.js +3 -2
  697. package/dist/types/abortable-process.d.ts +2 -0
  698. package/dist/types/advanced-framework.js +0 -2
  699. package/dist/types/atomic-upgrade.d.ts +71 -0
  700. package/dist/types/atomic-upgrade.js +2 -0
  701. package/dist/types/ci.js +0 -2
  702. package/dist/types/core-bridge.d.ts +78 -1
  703. package/dist/types/crash-shield-framework-rules.d.ts +24 -0
  704. package/dist/types/crash-shield-framework-rules.js +2 -0
  705. package/dist/types/data-gc.d.ts +16 -0
  706. package/dist/types/deploy.js +0 -2
  707. package/dist/types/durable-job.d.ts +78 -0
  708. package/dist/types/durable-job.js +2 -0
  709. package/dist/types/durable-validation.d.ts +60 -0
  710. package/dist/types/durable-validation.js +2 -0
  711. package/dist/types/estimation.d.ts +2 -0
  712. package/dist/types/evidence-gates.d.ts +9 -1
  713. package/dist/types/execution.d.ts +43 -0
  714. package/dist/types/handoff-artifacts.d.ts +2 -0
  715. package/dist/types/index.d.ts +2 -0
  716. package/dist/types/index.js +2 -0
  717. package/dist/types/infrastructure.js +0 -2
  718. package/dist/types/lifecycle.js +0 -2
  719. package/dist/types/migration/canonical-storage.d.ts +37 -0
  720. package/dist/types/migration/canonical-storage.js +2 -0
  721. package/dist/types/migration/index.d.ts +1 -1
  722. package/dist/types/native-worker.d.ts +48 -0
  723. package/dist/types/native-worker.js +2 -0
  724. package/dist/types/network-policy.d.ts +12 -0
  725. package/dist/types/network-policy.js +2 -0
  726. package/dist/types/oauth.js +0 -2
  727. package/dist/types/observability.d.ts +32 -0
  728. package/dist/types/outbox-worker.d.ts +35 -0
  729. package/dist/types/outbox-worker.js +11 -0
  730. package/dist/types/permissions-config.d.ts +0 -27
  731. package/dist/types/permissions-config.js +0 -2
  732. package/dist/types/plugin-install.d.ts +0 -11
  733. package/dist/types/plugin-install.js +0 -2
  734. package/dist/types/portal.d.ts +1 -0
  735. package/dist/types/product-public.d.ts +75 -0
  736. package/dist/types/product-public.js +2 -0
  737. package/dist/types/project/inputs.d.ts +2 -0
  738. package/dist/types/project/mfe-detection.js +0 -2
  739. package/dist/types/project/platform-mobile.js +0 -2
  740. package/dist/types/project/platform-specialty.js +0 -2
  741. package/dist/types/project-knowledge-graph.d.ts +7 -0
  742. package/dist/types/runtime-database.d.ts +10 -0
  743. package/dist/types/runtime-database.js +2 -0
  744. package/dist/types/runtime-policy.d.ts +40 -0
  745. package/dist/types/runtime-policy.js +2 -0
  746. package/dist/types/safety.d.ts +4 -5
  747. package/dist/types/schema-registry.d.ts +12 -0
  748. package/dist/types/schema-registry.js +2 -0
  749. package/dist/types/security.d.ts +52 -0
  750. package/dist/types/skill-registry.js +0 -2
  751. package/dist/types/spec/inputs.d.ts +2 -0
  752. package/dist/types/spec-lock-v2.d.ts +13 -7
  753. package/dist/types/spec-lock-v2.js +1 -1
  754. package/dist/types/spec-registry.js +0 -2
  755. package/dist/types/storage-bundle.d.ts +13 -0
  756. package/dist/types/storage-bundle.js +2 -0
  757. package/dist/types/storage-catalog.d.ts +18 -0
  758. package/dist/types/storage-catalog.js +2 -0
  759. package/dist/types/team-planner.js +0 -2
  760. package/dist/types/technology-registry.d.ts +35 -0
  761. package/dist/types/technology-registry.js +2 -0
  762. package/dist/types/technology-symbols.generated.d.ts +117 -0
  763. package/dist/types/technology-symbols.generated.js +2 -0
  764. package/dist/types/telemetry.d.ts +3 -3
  765. package/dist/types/transport.d.ts +2 -0
  766. package/dist/types/validate-worker.d.ts +44 -0
  767. package/dist/types/validate-worker.js +2 -0
  768. package/dist/types/validation-evidence.d.ts +1 -1
  769. package/dist/types/validation-receipt.d.ts +104 -0
  770. package/dist/types/validation-receipt.js +2 -0
  771. package/package.json +31 -20
  772. package/planu-native.json +1 -1
  773. package/planu-plugin.json +1 -1
  774. package/dist/engine/telemetry/geo-resolver.d.ts +0 -9
  775. package/dist/engine/telemetry/geo-resolver.js +0 -43
  776. package/dist/storage/data-dir-discovery.d.ts +0 -31
  777. package/dist/storage/data-dir-discovery.js +0 -140
  778. package/dist/storage/migrations/cwd-to-absolute.d.ts +0 -25
  779. package/dist/storage/migrations/cwd-to-absolute.js +0 -281
  780. package/dist/tools/create-spec/adapters/prior-decisions-hint.d.ts +0 -14
  781. package/dist/tools/create-spec/adapters/prior-decisions-hint.js +0 -30
  782. package/dist/tools/init-project/ancestor-data-detector.d.ts +0 -22
  783. package/dist/tools/init-project/ancestor-data-detector.js +0 -81
  784. package/dist/tools/update-status/force-done-audit.d.ts +0 -2
  785. package/dist/tools/update-status/force-done-audit.js +0 -23
  786. package/dist/types/migration/cwd-to-absolute.d.ts +0 -8
  787. package/dist/types/migration/cwd-to-absolute.js +0 -3
@@ -1,25 +1,24 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
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 || Object.keys(allDeps).some((d) => d.startsWith('@types/'));
50
- const language = hasTypeScript ? 'typescript' : 'javascript';
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
- // engine/property-test-generator.ts SPEC-315
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') {
@@ -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?: {
@@ -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
- const TIMEOUT_MS = 120_000;
9
- const MAX_OUTPUT_BUFFER_BYTES = 64 * 1024 * 1024;
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: TIMEOUT_MS,
23
- maxBufferBytes: MAX_OUTPUT_BUFFER_BYTES,
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') || fw.includes('fastapi') || fw.includes('django')) {
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') || fw.includes('gin') || fw.includes('fiber')) {
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, readdir } from 'node:fs/promises';
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
- let files;
47
- try {
48
- files = await readdir(REGISTRY_DIR);
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
- const jsonFiles = files.filter((f) => f.endsWith('.json') && f !== 'index.json');
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(CUSTOM_REGISTRY_PATH, { entries: [] });
59
+ const store = await readJson(resolvedStorageArtifactPath('custom-framework-registry'), { entries: [] });
63
60
  return store.entries.map((e) => ({ ...e, customEntry: true }));
64
61
  }
65
62
  /**