@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,5 +1,5 @@
1
1
  import type { ToolResult } from '../../types/index.js';
2
2
  import type { Spec } from '../../types/spec/core.js';
3
3
  /** SPEC-642 / SPEC-1111 / SPEC-1144: verify canonical QA evidence before done. */
4
- export declare function checkQaGate(spec: Spec, projectPath: string | undefined, force: boolean): Promise<ToolResult | null>;
4
+ export declare function checkQaGate(spec: Spec, projectPath: string | undefined, force: boolean, canonicalProjectId?: string): Promise<ToolResult | null>;
5
5
  //# sourceMappingURL=qa-gate.d.ts.map
@@ -1,13 +1,13 @@
1
1
  import { getToolExecutionSignal } from '../safe-handler.js';
2
2
  /** SPEC-642 / SPEC-1111 / SPEC-1144: verify canonical QA evidence before done. */
3
- export async function checkQaGate(spec, projectPath, force) {
3
+ export async function checkQaGate(spec, projectPath, force, canonicalProjectId) {
4
4
  if (force || !projectPath) {
5
5
  return null;
6
6
  }
7
7
  const specId = spec.id;
8
8
  const { runQaGate } = await import('../../engine/qa-gate.js');
9
9
  const effectiveResult = await runQaGate(spec, projectPath, {
10
- projectId: spec.projectId,
10
+ projectId: canonicalProjectId,
11
11
  signal: getToolExecutionSignal(),
12
12
  });
13
13
  if (effectiveResult.passed) {
@@ -1,15 +1,14 @@
1
1
  import { specStore } from '../../storage/index.js';
2
2
  import { runCascade } from '../../engine/cascade-hooks/runner.js';
3
3
  import { appendAutopilotLogEntry } from '../../storage/autopilot-log-store.js';
4
- const DEFAULT_POST_COMMIT_TASK_TIMEOUT_MS = 10_000;
5
- const MIN_POST_COMMIT_LEASE_MS = 30_000;
6
- const MAX_DEDUPED_TRANSITIONS = 1_000;
4
+ import { redactFailureMessage, reportClassifiedDegradation, } from '../../errors/classified-degradation.js';
5
+ import { getRuntimePolicy } from '../../engine/runtime-policy.js';
7
6
  const queuedTransitions = new Map();
8
7
  function rememberTransition(transitionKey) {
9
8
  if (queuedTransitions.has(transitionKey)) {
10
9
  return false;
11
10
  }
12
- if (queuedTransitions.size >= MAX_DEDUPED_TRANSITIONS) {
11
+ if (queuedTransitions.size >= getRuntimePolicy().postCommit.maximumRememberedTransitions) {
13
12
  const oldest = queuedTransitions.keys().next().value;
14
13
  if (oldest !== undefined) {
15
14
  queuedTransitions.delete(oldest);
@@ -20,8 +19,9 @@ function rememberTransition(transitionKey) {
20
19
  }
21
20
  async function runBoundedPostCommitTask(args) {
22
21
  const { projectId, specId, transitionId, task } = args;
23
- const timeoutMs = task.timeoutMs ?? DEFAULT_POST_COMMIT_TASK_TIMEOUT_MS;
24
- const leaseMs = Math.max(MIN_POST_COMMIT_LEASE_MS, timeoutMs * 3);
22
+ const policy = getRuntimePolicy().postCommit;
23
+ const timeoutMs = task.timeoutMs ?? policy.defaultTaskTimeoutMs;
24
+ const leaseMs = Math.max(policy.minimumLeaseMs, timeoutMs * policy.leaseMultiplier);
25
25
  const claim = await specStore.claimPostCommitTask(projectId, specId, transitionId, task.name, {
26
26
  leaseMs,
27
27
  });
@@ -39,14 +39,10 @@ async function runBoundedPostCommitTask(args) {
39
39
  leaseMs,
40
40
  })
41
41
  .catch((error) => {
42
- console.warn('[planu:post-commit] failed to renew task lease', {
43
- specId,
44
- transitionId,
45
- task: task.name,
46
- error: error instanceof Error ? error.message : String(error),
47
- });
42
+ /* reliability-optional: POST_COMMIT_LEASE_RENEW timeout path settles the durable task */
43
+ reportClassifiedDegradation('POST_COMMIT_LEASE_RENEW', error);
48
44
  });
49
- }, Math.max(1_000, Math.floor(leaseMs / 3)));
45
+ }, Math.max(policy.minimumHeartbeatMs, Math.floor(leaseMs / policy.leaseMultiplier)));
50
46
  heartbeat.unref();
51
47
  const runPromise = Promise.resolve().then(() => task.run(controller.signal));
52
48
  const timeout = new Promise((resolve) => {
@@ -71,31 +67,25 @@ async function runBoundedPostCommitTask(args) {
71
67
  });
72
68
  }
73
69
  catch (logError) {
74
- console.warn('[planu:post-commit] failed to record late task completion', {
75
- specId,
76
- transitionId,
77
- task: task.name,
78
- error: logError instanceof Error ? logError.message : String(logError),
79
- });
70
+ /* reliability-optional: LATE_TASK_COMPLETION_LOG durable task is already settled */
71
+ reportClassifiedDegradation('LATE_TASK_COMPLETION_LOG', logError);
80
72
  }
81
73
  return;
82
74
  }
83
75
  await specStore.settlePostCommitTask(projectId, specId, transitionId, task.name, claim.executionId, { status: 'done' });
84
76
  }
85
77
  catch (error) {
86
- const message = error instanceof Error ? error.message : String(error);
78
+ /* reliability-optional: POST_COMMIT_TASK_FAILURE durable failed state is persisted below */
79
+ reportClassifiedDegradation('POST_COMMIT_TASK_FAILURE', error);
80
+ const message = redactFailureMessage(error);
87
81
  await specStore
88
82
  .settlePostCommitTask(projectId, specId, transitionId, task.name, claim.executionId, {
89
83
  status: 'failed',
90
84
  error: message,
91
85
  })
92
86
  .catch((settleError) => {
93
- console.warn('[planu:post-commit] failed to persist task failure', {
94
- specId,
95
- transitionId,
96
- task: task.name,
97
- error: settleError instanceof Error ? settleError.message : String(settleError),
98
- });
87
+ /* reliability-optional: TASK_FAILURE_SETTLEMENT recovery lease remains retryable */
88
+ reportClassifiedDegradation('TASK_FAILURE_SETTLEMENT', settleError);
99
89
  });
100
90
  try {
101
91
  await appendAutopilotLogEntry(projectId, {
@@ -108,12 +98,8 @@ async function runBoundedPostCommitTask(args) {
108
98
  });
109
99
  }
110
100
  catch (logError) {
111
- console.warn('[planu:post-commit] failed to record task failure', {
112
- specId,
113
- transitionId,
114
- task: task.name,
115
- error: logError instanceof Error ? logError.message : String(logError),
116
- });
101
+ /* reliability-optional: TASK_FAILURE_LOG durable failure state remains authoritative */
102
+ reportClassifiedDegradation('TASK_FAILURE_LOG', logError);
117
103
  }
118
104
  }
119
105
  finally {
@@ -167,7 +153,9 @@ export async function maybeSafePushOnDone(projectPath, newStatus) {
167
153
  }
168
154
  return { label: 'autopush', message: `Not pushed: ${result.reason} — ${result.message}` };
169
155
  }
170
- catch {
156
+ catch (error) {
157
+ /* reliability-optional: AUTOPUSH_RESULT_UNAVAILABLE — optional result is explicitly absent */
158
+ reportClassifiedDegradation('AUTOPUSH_RESULT_UNAVAILABLE', error);
171
159
  return null;
172
160
  }
173
161
  }
@@ -184,7 +172,9 @@ async function readDisabledByConfig(projectPath) {
184
172
  const disabled = parsed.cascadeHooks?.disabled;
185
173
  return Array.isArray(disabled) ? new Set(disabled) : new Set();
186
174
  }
187
- catch {
175
+ catch (error) {
176
+ /* reliability-optional: CASCADE_CONFIG_UNAVAILABLE — default empty disable set is explicit */
177
+ reportClassifiedDegradation('CASCADE_CONFIG_UNAVAILABLE', error);
188
178
  return new Set();
189
179
  }
190
180
  }
@@ -221,8 +211,9 @@ export function fireAndForgetSideEffects(params) {
221
211
  Promise.resolve(readDisabledByEnv()),
222
212
  ]);
223
213
  await runCascade(ctx, { disabledByConfig, disabledByEnv });
224
- })().catch(() => {
225
- /* best-effortcascade errors never surface to the caller */
214
+ })().catch((error) => {
215
+ /* reliability-optional: ASYNC_CASCADE_FAILURE post-commit task ledger captures retry state */
216
+ reportClassifiedDegradation('ASYNC_CASCADE_FAILURE', error);
226
217
  });
227
218
  }
228
219
  /**
@@ -250,7 +241,9 @@ export async function runCascadeForResponse(params) {
250
241
  ]);
251
242
  return await runCascade(ctx, { disabledByConfig, disabledByEnv });
252
243
  }
253
- catch {
244
+ catch (error) {
245
+ /* reliability-optional: CASCADE_SYNC_FAILURE — explicit null reports unavailable result */
246
+ reportClassifiedDegradation('CASCADE_SYNC_FAILURE', error);
254
247
  return null;
255
248
  }
256
249
  }
@@ -53,15 +53,17 @@ export declare function checkTransition(currentStatus: SpecStatus, newStatus: Sp
53
53
  * Returns an error ToolResult if blocked, null if passed.
54
54
  */
55
55
  export declare function checkDorGate(spec: Spec, specId: string, projectId: string, newStatus: SpecStatus): ToolResult | null;
56
+ /** Reject implementation until every declared dependency exists and is done. */
57
+ export declare function checkImplementationDependencyGate(spec: Spec, allSpecs: readonly Spec[], newStatus: SpecStatus): ToolResult | null;
56
58
  /**
57
59
  * SPEC-632: Block transition to 'approved' if ambiguity score < 70.
58
- * Best-effort: if spec file cannot be read, gate is skipped.
60
+ * Fails closed when the spec cannot be scored.
59
61
  */
60
62
  export declare function checkAmbiguityGate(spec: Spec, newStatus: SpecStatus): Promise<ToolResult | null>;
61
63
  /**
62
64
  * SPEC-769/SPEC-492: Readiness gate — block 'review'/'approved' when spec
63
65
  * quality is too low or the persisted spec document is not English.
64
- * Best-effort: if spec.md cannot be read, the gate is skipped (returns no block).
66
+ * Fails closed if spec.md cannot be read or evaluated.
65
67
  *
66
68
  * - 0 criteria → InteractiveQuestion (hard block, no force path)
67
69
  * - score < 70 on approved && !forceApprove → InteractiveQuestion with 3 options
@@ -10,6 +10,8 @@ import { checkGroundedSpecContract } from '../../engine/spec-grounding/contract.
10
10
  import { checkGenericSpecOutput } from '../../engine/spec-quality/generic-output-gate.js';
11
11
  import { formatKeyValue } from '../output-formatter.js';
12
12
  import { getResolvedChallengeEvidence, requiredResolvedChallenges, } from '../challenge-spec/challenge-report.js';
13
+ import { evaluateSpecDependencies } from '../../engine/dependency-evaluator.js';
14
+ import { reportClassifiedDegradation } from '../../errors/classified-degradation.js';
13
15
  /**
14
16
  * Valid state transitions for spec lifecycle.
15
17
  * draft -> review -> approved -> implementing -> done
@@ -129,7 +131,8 @@ export function checkDorGate(spec, specId, projectId, newStatus) {
129
131
  delta: { failedCount: dorResult.blockingItems.length },
130
132
  timestamp: new Date().toISOString(),
131
133
  }).catch((err) => {
132
- console.error('[planu] DoR feedback event failed:', err);
134
+ /* reliability-optional: DOR_FEEDBACK_EVENT blocking gate result remains authoritative */
135
+ reportClassifiedDegradation('DOR_FEEDBACK_EVENT', err);
133
136
  });
134
137
  return {
135
138
  content: [
@@ -162,16 +165,47 @@ export function checkDorGate(spec, specId, projectId, newStatus) {
162
165
  }
163
166
  return null;
164
167
  }
168
+ /** Reject implementation until every declared dependency exists and is done. */
169
+ export function checkImplementationDependencyGate(spec, allSpecs, newStatus) {
170
+ if (newStatus !== 'implementing' || isReverseTransition(spec.status, newStatus)) {
171
+ return null;
172
+ }
173
+ const evaluation = evaluateSpecDependencies(spec, allSpecs);
174
+ if (evaluation.allowed) {
175
+ return null;
176
+ }
177
+ const blockingIds = [...new Set(evaluation.blockers.map((blocker) => blocker.specId))];
178
+ return {
179
+ content: [
180
+ {
181
+ type: 'text',
182
+ text: `Dependency gate blocked implementation: ${evaluation.blockers
183
+ .map((blocker) => `${blocker.specId} (${blocker.reason})`)
184
+ .join(', ')}.`,
185
+ },
186
+ ],
187
+ isError: true,
188
+ structuredContent: {
189
+ error: 'DEPENDENCY_GATE_BLOCKED',
190
+ code: 'UNMET_DEPENDENCIES',
191
+ blockingIds,
192
+ blockers: evaluation.blockers,
193
+ },
194
+ };
195
+ }
165
196
  /**
166
197
  * SPEC-632: Block transition to 'approved' if ambiguity score < 70.
167
- * Best-effort: if spec file cannot be read, gate is skipped.
198
+ * Fails closed when the spec cannot be scored.
168
199
  */
169
200
  export async function checkAmbiguityGate(spec, newStatus) {
170
201
  if (newStatus !== 'approved' || !spec.specPath) {
171
202
  return null;
172
203
  }
173
204
  const report = await scoreAmbiguityFromPath(spec.specPath);
174
- if (!report || report.score >= 70) {
205
+ if (!report) {
206
+ return gateUnavailableResult('AMBIGUITY_GATE_UNAVAILABLE', 'Ambiguity scoring failed.');
207
+ }
208
+ if (report.score >= 70) {
175
209
  return null;
176
210
  }
177
211
  return {
@@ -201,7 +235,7 @@ export async function checkAmbiguityGate(spec, newStatus) {
201
235
  /**
202
236
  * SPEC-769/SPEC-492: Readiness gate — block 'review'/'approved' when spec
203
237
  * quality is too low or the persisted spec document is not English.
204
- * Best-effort: if spec.md cannot be read, the gate is skipped (returns no block).
238
+ * Fails closed if spec.md cannot be read or evaluated.
205
239
  *
206
240
  * - 0 criteria → InteractiveQuestion (hard block, no force path)
207
241
  * - score < 70 on approved && !forceApprove → InteractiveQuestion with 3 options
@@ -218,13 +252,14 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
218
252
  try {
219
253
  body = await readFile(spec.specPath, 'utf-8');
220
254
  }
221
- catch {
222
- // Best-effortif file is unreadable, skip gate
223
- return { blockResult: null, qualityWarnings: [] };
255
+ catch (error) {
256
+ /* reliability-optional: READINESS_SPEC_UNREADABLE transition fails closed below */
257
+ reportClassifiedDegradation('READINESS_SPEC_UNREADABLE', error);
258
+ return readinessUnavailable('READINESS_SPEC_UNREADABLE', error instanceof Error ? error.message : 'spec.md could not be read');
224
259
  }
225
260
  // Guard: mock environments return undefined; unreadable files return non-string
226
261
  if (typeof body !== 'string') {
227
- return { blockResult: null, qualityWarnings: [] };
262
+ return readinessUnavailable('READINESS_SPEC_INVALID', 'spec.md did not return text content');
228
263
  }
229
264
  const languageValidation = validateEnglishOnlySpecText(body);
230
265
  if (!languageValidation.ok) {
@@ -302,8 +337,10 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
302
337
  try {
303
338
  ({ score, warnings, criteriaCount } = checkReadinessInternal(body));
304
339
  }
305
- catch {
306
- return { blockResult: null, qualityWarnings: [] };
340
+ catch (error) {
341
+ /* reliability-optional: READINESS_EVALUATION_FAILED transition fails closed below */
342
+ reportClassifiedDegradation('READINESS_EVALUATION_FAILED', error);
343
+ return readinessUnavailable('READINESS_EVALUATION_FAILED', error instanceof Error ? error.message : 'readiness evaluation failed');
307
344
  }
308
345
  if (criteriaCount === 0) {
309
346
  if (newStatus === 'review') {
@@ -423,6 +460,16 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
423
460
  qualityWarnings: [],
424
461
  };
425
462
  }
463
+ function gateUnavailableResult(code, message) {
464
+ return {
465
+ content: [{ type: 'text', text: `${message} Transition blocked until the gate succeeds.` }],
466
+ isError: true,
467
+ structuredContent: { error: code, message, retryable: true },
468
+ };
469
+ }
470
+ function readinessUnavailable(code, message) {
471
+ return { blockResult: gateUnavailableResult(code, message), qualityWarnings: [] };
472
+ }
426
473
  /**
427
474
  * SPEC-964: Challenge gate — block 'review' if challenge_spec was never run
428
475
  * or does not contain enough explicit resolution evidence.
@@ -1,15 +1,13 @@
1
1
  // tools/update-status-convention-gate.ts — SPEC-190
2
2
  // Convention and constitution compliance gates for update_status transitions.
3
- import { execFile as execFileCb } from 'node:child_process';
4
3
  import { readFile } from 'node:fs/promises';
5
4
  import { join } from 'node:path';
6
- import { promisify } from 'node:util';
7
5
  import { knowledgeStore } from '../storage/index.js';
8
6
  import { checkConstitutionOnTransition } from './update-status-actions.js';
9
7
  import { computeValidationEvidenceIdentity, computeValidationEvidenceKey, readMatchingValidationEvidence, recordSuccessfulValidationEvidence, recordValidationOutcome, } from '../engine/validation-evidence-ledger.js';
10
8
  import { getToolExecutionSignal } from './safe-handler.js';
11
9
  import { VALIDATION_COMMANDS } from '../engine/validation-impact-planner.js';
12
- const execFile = promisify(execFileCb);
10
+ import { runAbortableProcess } from '../engine/abortable-process-runner.js';
13
11
  const MAX_GATE_OUTPUT_BUFFER_BYTES = 64 * 1024 * 1024;
14
12
  // ---------------------------------------------------------------------------
15
13
  // Helpers
@@ -21,27 +19,30 @@ function isSafeCommand(cmd) {
21
19
  }
22
20
  async function execGate(cmd, cwd, timeoutMs) {
23
21
  const [bin, ...args] = cmd.split(/\s+/);
24
- try {
25
- const { stdout, stderr } = await execFile(bin ?? 'sh', args, {
26
- cwd,
27
- timeout: timeoutMs,
28
- maxBuffer: MAX_GATE_OUTPUT_BUFFER_BYTES,
29
- signal: getToolExecutionSignal(),
30
- });
31
- return { output: mergeCommandOutput(stdout, stderr), ok: true, timedOut: false };
32
- }
33
- catch (err) {
34
- const e = err;
35
- const raw = mergeCommandOutput(e.stdout, e.stderr);
36
- const timedOut = e.killed === true || e.signal === 'SIGTERM' || e.code === 'ETIMEDOUT';
37
- return {
38
- output: raw.trim(),
39
- ok: false,
40
- timedOut,
41
- errorMessage: e.message,
42
- errorCode: typeof e.code === 'string' ? e.code : undefined,
43
- };
22
+ const result = await runAbortableProcess(bin ?? 'sh', args, {
23
+ cwd,
24
+ timeoutMs,
25
+ maxBufferBytes: MAX_GATE_OUTPUT_BUFFER_BYTES,
26
+ signal: getToolExecutionSignal(),
27
+ });
28
+ const output = mergeCommandOutput(result.stdout, result.stderr);
29
+ if (result.status === 0 && result.error === undefined) {
30
+ return { output, ok: true, timedOut: false };
44
31
  }
32
+ const errorValue = result.error;
33
+ const errorCode = typeof errorValue === 'object' &&
34
+ errorValue !== null &&
35
+ 'code' in errorValue &&
36
+ typeof errorValue.code === 'string'
37
+ ? errorValue.code
38
+ : undefined;
39
+ return {
40
+ output: output.trim(),
41
+ ok: false,
42
+ timedOut: result.timedOut,
43
+ ...(result.error ? { errorMessage: result.error.message } : {}),
44
+ ...(typeof errorCode === 'string' ? { errorCode } : {}),
45
+ };
45
46
  }
46
47
  function mergeCommandOutput(stdout, stderr) {
47
48
  const stdoutText = Buffer.isBuffer(stdout)
@@ -1,8 +1,8 @@
1
1
  // tools/update-status-reconcile.ts — Auto-reconcile token costs when spec reaches done (SPEC-182)
2
2
  import { reconcile, formatReconciliation } from '../engine/token-optimizer/reconciler.js';
3
3
  import { getEntries } from '../storage/token-ledger-store.js';
4
- import { join } from 'node:path';
5
- const DEFAULT_DATA_DIR = join(process.cwd(), 'data');
4
+ import { resolveStorageLayout } from '../storage/storage-layout.js';
5
+ const DEFAULT_DATA_DIR = resolveStorageLayout().data;
6
6
  /**
7
7
  * Auto-reconcile token costs when a spec transitions to 'done'.
8
8
  * Compares pre-execution estimates stored in ledger entries against actuals.
@@ -1,4 +1,4 @@
1
- // tools/validate-api-contract-handler.ts Handler for validate_api_contract (SPEC-322)
1
+ import { technologyValue } from '../engine/technology-registry.js';
2
2
  import { validateOpenApiContract } from '../engine/api-validation/openapi-impl-validator.js';
3
3
  import { validateGraphQLSchema } from '../engine/api-validation/graphql-schema-validator.js';
4
4
  // ---------------------------------------------------------------------------
@@ -7,7 +7,7 @@ import { validateGraphQLSchema } from '../engine/api-validation/graphql-schema-v
7
7
  function detectFormat(contractPath) {
8
8
  const lower = contractPath.toLowerCase();
9
9
  if (lower.endsWith('.graphql') || lower.endsWith('.gql') || lower.endsWith('.sdl')) {
10
- return 'graphql';
10
+ return technologyValue('technology-graphql-aed31c');
11
11
  }
12
12
  return 'openapi';
13
13
  }
@@ -60,7 +60,7 @@ export async function handleValidateApiContract(args) {
60
60
  ? detectFormat(contractPath)
61
61
  : args.contractFormat;
62
62
  let report;
63
- if (format === 'graphql') {
63
+ if (format === technologyValue('technology-graphql-aed31c')) {
64
64
  report = await validateGraphQLSchema(contractPath, projectPath);
65
65
  }
66
66
  else {
@@ -3,9 +3,9 @@ import { computeValidationEvidenceIdentity, computeValidationEvidenceKey, readMa
3
3
  import { formatLintFailureDiagnostics, resolveProjectCommandPlan, runProjectCommandPlan, } from '../engine/project-command-runtime.js';
4
4
  import { getToolExecutionSignal } from './safe-handler.js';
5
5
  import { VALIDATION_COMMANDS } from '../engine/validation-impact-planner.js';
6
+ import { boundedEnvironmentDuration, getRuntimePolicy } from '../engine/runtime-policy.js';
6
7
  /** Allowlist: alphanumerics, spaces, and safe shell chars. Rejects ; | $ ` & < > */
7
8
  const SAFE_COMMAND_RE = /^[\w\s./:@~=-]+$/;
8
- const DEFAULT_LINT_CHECK_TIMEOUT_MS = 60_000;
9
9
  function isSafeCommand(cmd) {
10
10
  return SAFE_COMMAND_RE.test(cmd);
11
11
  }
@@ -113,7 +113,22 @@ export async function runLintCheck(projectPath, lintCommand, context = {}) {
113
113
  const output = `Lint command timed out after ${String(seconds)}s and was skipped so validate can complete within MCP request limits. ` +
114
114
  `Run \`${plan.executedCommand}\` manually before marking the spec done, or set PLANU_VALIDATE_LINT_TIMEOUT_MS for an explicit full lint pass.`;
115
115
  console.warn(`[Planu] lintCheck timed out: command="${plan.executedCommand}" cwd="${projectPath}" timeoutMs=${String(timeoutMs)}`);
116
- return { passed: false, command, issueCount: 1, output };
116
+ if (context.projectId) {
117
+ recordValidationOutcome({
118
+ projectId: context.projectId,
119
+ input: evidenceInput,
120
+ action: 'aborted',
121
+ producer: 'planu-validate',
122
+ status: 'cancelled',
123
+ durationMs: timeoutMs,
124
+ output,
125
+ reason: context.specId
126
+ ? `Lint exceeded its deadline while validating ${context.specId}; the degraded result is non-blocking.`
127
+ : 'Lint exceeded its canonical deadline; the degraded result is non-blocking.',
128
+ source: 'local:planu-validate',
129
+ });
130
+ }
131
+ return { passed: true, command, issueCount: 0, output };
117
132
  }
118
133
  const raw = commandOutput(err);
119
134
  const output = formatLintFailureDiagnostics(plan, raw);
@@ -123,9 +138,9 @@ export async function runLintCheck(projectPath, lintCommand, context = {}) {
123
138
  recordValidationOutcome({
124
139
  projectId: context.projectId,
125
140
  input: evidenceInput,
126
- action: isCommandTimeout(err) ? 'aborted' : 'executed',
141
+ action: 'executed',
127
142
  producer: 'planu-validate',
128
- status: isCommandTimeout(err) ? 'cancelled' : 'failed',
143
+ status: 'failed',
129
144
  durationMs: timeoutMs,
130
145
  output,
131
146
  reason: context.specId
@@ -138,14 +153,6 @@ export async function runLintCheck(projectPath, lintCommand, context = {}) {
138
153
  }
139
154
  }
140
155
  function lintCheckTimeoutMs() {
141
- const raw = process.env.PLANU_VALIDATE_LINT_TIMEOUT_MS;
142
- if (raw === undefined || raw.trim() === '') {
143
- return DEFAULT_LINT_CHECK_TIMEOUT_MS;
144
- }
145
- const parsed = Number.parseInt(raw, 10);
146
- if (!Number.isFinite(parsed)) {
147
- return DEFAULT_LINT_CHECK_TIMEOUT_MS;
148
- }
149
- return Math.min(300_000, Math.max(1_000, parsed));
156
+ return boundedEnvironmentDuration('PLANU_VALIDATE_LINT_TIMEOUT_MS', getRuntimePolicy().lintValidation);
150
157
  }
151
158
  //# sourceMappingURL=validate-lint.js.map
@@ -3,5 +3,7 @@ import { validateContractCompliance } from '../engine/test-scaffold-generator.js
3
3
  import type { ValidateInput, ToolResult, ContractSpec, ContractValidation } from '../types/index.js';
4
4
  export { validateContractCompliance };
5
5
  export type { ContractSpec, ContractValidation };
6
- export declare function handleValidate(args: ValidateInput, server?: McpServer): Promise<ToolResult>;
6
+ /** Public MCP boundary: persist and acknowledge validation work without running it inline. */
7
+ export declare function handleValidate(args: ValidateInput): Promise<ToolResult>;
8
+ export declare function executeValidate(args: ValidateInput, server?: McpServer): Promise<ToolResult>;
7
9
  //# sourceMappingURL=validate.d.ts.map