@planu/cli 4.13.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1066) hide show
  1. package/CHANGELOG.md +64 -1
  2. package/LICENSE +55 -12
  3. package/README.md +33 -25
  4. package/dist/cli/commands/inspect.d.ts +4 -0
  5. package/dist/cli/commands/inspect.js +144 -0
  6. package/dist/cli/commands/install.d.ts +19 -12
  7. package/dist/cli/commands/install.js +148 -102
  8. package/dist/cli/commands/job.d.ts +3 -0
  9. package/dist/cli/commands/job.js +120 -0
  10. package/dist/cli/commands/offline.d.ts +15 -0
  11. package/dist/cli/commands/offline.js +132 -0
  12. package/dist/cli/commands/serve.js +4 -0
  13. package/dist/cli/commands/spec.js +1 -1
  14. package/dist/cli/commands/storage.d.ts +3 -0
  15. package/dist/cli/commands/storage.js +102 -0
  16. package/dist/cli/commands/uninstall.d.ts +10 -0
  17. package/dist/cli/commands/uninstall.js +93 -7
  18. package/dist/cli/commands/validate.js +1 -1
  19. package/dist/cli/index.js +2 -0
  20. package/dist/cli/router.js +9 -3
  21. package/dist/config/crash-shield-framework-rules.json +93 -0
  22. package/dist/config/environment-schema.json +147 -0
  23. package/dist/config/hardcode-exceptions.json +4 -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/official-sdd-tools.d.ts +4 -0
  27. package/dist/config/official-sdd-tools.js +35 -0
  28. package/dist/config/product-public.d.ts +225 -0
  29. package/dist/config/product-public.js +147 -0
  30. package/dist/config/product-public.json +283 -0
  31. package/dist/config/registries/hosts/codex.json +20 -363
  32. package/dist/config/release-compatibility.json +13 -0
  33. package/dist/config/release-policy.json +108 -0
  34. package/dist/config/runtime-policy.json +55 -0
  35. package/dist/config/skill-templates/planu-resume-work.md +2 -2
  36. package/dist/config/skill-templates/planu-validate.md +7 -4
  37. package/dist/config/subagent-templates/planu-spec-implementer.md +7 -3
  38. package/dist/config/subagent-templates/planu-validator.md +10 -5
  39. package/dist/config/technology-registry.json +120 -0
  40. package/dist/config/version.js +7 -8
  41. package/dist/core/index.d.ts +1 -1
  42. package/dist/core/spec-validator.d.ts +4 -4
  43. package/dist/core/spec-validator.js +1 -1
  44. package/dist/engine/abortable-process-runner.d.ts +20 -2
  45. package/dist/engine/abortable-process-runner.js +267 -67
  46. package/dist/engine/advanced-testing/accessibility-checker.js +12 -14
  47. package/dist/engine/advanced-testing/mutation-advisor.js +3 -4
  48. package/dist/engine/advanced-testing/property-based.js +2 -3
  49. package/dist/engine/advanced-testing/test-data-advisor.js +2 -3
  50. package/dist/engine/agent-generator.js +2 -1
  51. package/dist/engine/agent-handoff-store.js +2 -1
  52. package/dist/engine/agent-prompt-generator.js +7 -5
  53. package/dist/engine/agent-telemetry.js +2 -1
  54. package/dist/engine/ai-integration/gemini/extensions-advisor.js +41 -9
  55. package/dist/engine/ambiguity-detector.js +12 -11
  56. package/dist/engine/ambiguity-scorer.js +4 -26
  57. package/dist/engine/analyzer/db-engine.js +2 -3
  58. package/dist/engine/analyzer/detectors.js +13 -14
  59. package/dist/engine/analyzer/env-setup.js +9 -10
  60. package/dist/engine/analyzer-env-scanner/env-example.js +7 -8
  61. package/dist/engine/api-spec-generator/graphql-parser.js +2 -2
  62. package/dist/engine/api-validation/graphql-schema-validator.js +2 -1
  63. package/dist/engine/api-validation/openapi-impl-validator.js +6 -7
  64. package/dist/engine/architecture-detector.js +10 -8
  65. package/dist/engine/auth/config.d.ts +1 -1
  66. package/dist/engine/auth/config.js +4 -3
  67. package/dist/engine/auth/scope-mapper.js +1 -7
  68. package/dist/engine/auto-updater/atomic-upgrade.d.ts +8 -0
  69. package/dist/engine/auto-updater/atomic-upgrade.js +381 -0
  70. package/dist/engine/auto-updater/config-detector.js +9 -3
  71. package/dist/engine/auto-updater/config-patcher.d.ts +0 -4
  72. package/dist/engine/auto-updater/config-patcher.js +10 -15
  73. package/dist/engine/auto-updater/index.d.ts +3 -1
  74. package/dist/engine/auto-updater/index.js +44 -30
  75. package/dist/engine/auto-updater/npm-registry.js +10 -2
  76. package/dist/engine/auto-updater/release-verifier.d.ts +3 -0
  77. package/dist/engine/auto-updater/release-verifier.js +112 -0
  78. package/dist/engine/auto-updater/upgrade-lock.d.ts +6 -0
  79. package/dist/engine/auto-updater/upgrade-lock.js +28 -0
  80. package/dist/engine/auto-updater/upgrade-trust-state.d.ts +7 -0
  81. package/dist/engine/auto-updater/upgrade-trust-state.js +59 -0
  82. package/dist/engine/autopilot/audit-logger.js +2 -5
  83. package/dist/engine/autopilot/state-updater.js +4 -4
  84. package/dist/engine/best-practices-library.js +2 -1
  85. package/dist/engine/browser-validator.js +2 -1
  86. package/dist/engine/build-tool-detector.js +3 -2
  87. package/dist/engine/cascade-hooks/hooks/review-enricher.hook.js +9 -6
  88. package/dist/engine/cascade-hooks/state-drift-detector.d.ts +3 -3
  89. package/dist/engine/cascade-hooks/state-drift-detector.js +1 -1
  90. package/dist/engine/ci-generator/context-builders.js +7 -5
  91. package/dist/engine/ci-generator/planu-config.js +1 -7
  92. package/dist/engine/ci-generator/stack-detector.js +0 -2
  93. package/dist/engine/ci-generator/yaml-builder.js +0 -2
  94. package/dist/engine/clarification-gate/gate.d.ts +3 -3
  95. package/dist/engine/claude-config-auditor/rules-auditor.js +4 -3
  96. package/dist/engine/code-scanner/layer-scanner.js +6 -22
  97. package/dist/engine/code-transforms/typescript/ast-utils.js +2 -3
  98. package/dist/engine/complexity-budget/trivial-detector.js +2 -1
  99. package/dist/engine/compliance-test-generator/index.js +7 -2
  100. package/dist/engine/compliance-test-generator/test-formatter.js +2 -2
  101. package/dist/engine/config-health/mcp-config-checker.js +2 -1
  102. package/dist/engine/config-health/ts-checker-scripts.js +4 -3
  103. package/dist/engine/config-health/ts-checker.js +3 -2
  104. package/dist/engine/convention-injector.js +5 -7
  105. package/dist/engine/convention-scanner/convention-parser.js +3 -2
  106. package/dist/engine/core-bridge-duplicate-blocks.d.ts +3 -0
  107. package/dist/engine/core-bridge-duplicate-blocks.js +57 -0
  108. package/dist/engine/core-bridge-gaps.d.ts +4 -0
  109. package/dist/engine/core-bridge-gaps.js +75 -0
  110. package/dist/engine/core-bridge.d.ts +10 -10
  111. package/dist/engine/core-bridge.js +196 -283
  112. package/dist/engine/cost-guardrails.d.ts +1 -1
  113. package/dist/engine/cost-guardrails.js +1 -1
  114. package/dist/engine/cost-tracking/ledger.js +2 -5
  115. package/dist/engine/coverage-gap-analyzer.js +10 -1
  116. package/dist/engine/crash-shield/detectors/framework-detector.d.ts +2 -0
  117. package/dist/engine/crash-shield/detectors/framework-detector.js +110 -192
  118. package/dist/engine/crash-shield/detectors/typescript-detector.js +2 -1
  119. package/dist/engine/criterion-identity.d.ts +1 -0
  120. package/dist/engine/criterion-identity.js +7 -0
  121. package/dist/engine/dashboard/data-loader.js +4 -8
  122. package/dist/engine/dashboard/templates-layout.js +0 -3
  123. package/dist/engine/dashboard/templates-project.js +1 -13
  124. package/dist/engine/data-projects-gc/gc-runner.d.ts +7 -0
  125. package/dist/engine/data-projects-gc/gc-runner.js +113 -3
  126. package/dist/engine/data-projects-gc/scanner.js +5 -1
  127. package/dist/engine/decision-store.js +11 -14
  128. package/dist/engine/deleter/core.js +5 -5
  129. package/dist/engine/dep-auditor/abandonment-data.js +2 -1
  130. package/dist/engine/dep-auditor/abandonment-registry.js +3 -1
  131. package/dist/engine/dep-auditor/cve-fetcher.js +3 -0
  132. package/dist/engine/dep-auditor/dep-duplicates-detector.js +36 -4
  133. package/dist/engine/dep-auditor/license-registry.js +2 -0
  134. package/dist/engine/dependency-evaluator.d.ts +14 -0
  135. package/dist/engine/dependency-evaluator.js +81 -0
  136. package/dist/engine/deploy/providers/fly.js +7 -7
  137. package/dist/engine/deploy/providers/netlify.js +7 -7
  138. package/dist/engine/deploy/providers/railway.js +10 -12
  139. package/dist/engine/deploy/providers/vercel.js +7 -9
  140. package/dist/engine/deprecation-scanner/pattern-loader.js +0 -2
  141. package/dist/engine/desktop-detector.js +2 -3
  142. package/dist/engine/detect-duplication.js +2 -1
  143. package/dist/engine/detectors/advanced-framework-detector/css-state-detector.js +2 -1
  144. package/dist/engine/detectors/advanced-framework-detector/legacy-detector.js +2 -3
  145. package/dist/engine/detectors/advanced-framework-detector/modern-detector.js +3 -4
  146. package/dist/engine/detectors/agent-framework-detector.js +3 -2
  147. package/dist/engine/detectors/ai-native-detector.js +4 -6
  148. package/dist/engine/detectors/cache-db-detector.js +4 -3
  149. package/dist/engine/detectors/cicd-detector.js +4 -3
  150. package/dist/engine/detectors/deployment-detector.js +11 -12
  151. package/dist/engine/detectors/frontend-perf-detector.js +14 -9
  152. package/dist/engine/detectors/library-detector-multilang-a.js +16 -3
  153. package/dist/engine/detectors/library-detector-node.js +14 -4
  154. package/dist/engine/detectors/library-detector-python.js +7 -1
  155. package/dist/engine/detectors/library-detector.js +0 -2
  156. package/dist/engine/detectors/llm-detector/provider-maps.js +3 -2
  157. package/dist/engine/detectors/mcp-candidate-detector.js +12 -16
  158. package/dist/engine/detectors/mfe-detector.js +6 -7
  159. package/dist/engine/detectors/monitoring-detector.js +4 -3
  160. package/dist/engine/detectors/otel-detector.js +3 -2
  161. package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -2
  162. package/dist/engine/detectors/otel-ecosystem-detectors.js +4 -3
  163. package/dist/engine/detectors/platform-specialty-detector.js +3 -5
  164. package/dist/engine/detectors/template-engine-detector.js +3 -4
  165. package/dist/engine/doc-generator/builders.js +2 -3
  166. package/dist/engine/doc-generator/mobile-distribution-guide.js +13 -17
  167. package/dist/engine/doc-generator/portal/dirty-flag-map.d.ts +2 -2
  168. package/dist/engine/doc-generator/portal/portal-regenerator.js +3 -47
  169. package/dist/engine/docs-site-generator/data-collector.d.ts +1 -1
  170. package/dist/engine/docs-site-generator/data-collector.js +7 -28
  171. package/dist/engine/docs-site-generator/tools-renderer.js +3 -10
  172. package/dist/engine/domain-detector.js +3 -6
  173. package/dist/engine/dynamic-knowledge/knowledge-cache.js +3 -4
  174. package/dist/engine/dynamic-knowledge/knowledge-merger.js +17 -2
  175. package/dist/engine/dynamic-knowledge/web-researcher.js +15 -14
  176. package/dist/engine/dynamic-migration-detector/manifest-readers-extended.js +0 -2
  177. package/dist/engine/e2e-test-generator.js +4 -3
  178. package/dist/engine/ecosystem-absorber/knowledge-cache.js +2 -1
  179. package/dist/engine/ecosystem-absorber/platform-crawler.js +2 -2
  180. package/dist/engine/escalator/retry-counter.js +2 -1
  181. package/dist/engine/evidence-gates/artifact-reader.d.ts +16 -1
  182. package/dist/engine/evidence-gates/artifact-reader.js +220 -23
  183. package/dist/engine/evidence-gates/lifecycle-gate.d.ts +2 -1
  184. package/dist/engine/evidence-gates/lifecycle-gate.js +58 -3
  185. package/dist/engine/evidence-gates/reconciliation-freshness.d.ts +11 -0
  186. package/dist/engine/evidence-gates/reconciliation-freshness.js +72 -0
  187. package/dist/engine/evidence-index/done-drift.d.ts +1 -1
  188. package/dist/engine/evidence-index/done-drift.js +40 -18
  189. package/dist/engine/execution/context.d.ts +19 -0
  190. package/dist/engine/execution/context.js +130 -0
  191. package/dist/engine/execution/deadline-io.d.ts +21 -0
  192. package/dist/engine/execution/deadline-io.js +45 -0
  193. package/dist/engine/execution/durable-job-heartbeat-runtime.d.ts +4 -0
  194. package/dist/engine/execution/durable-job-heartbeat-runtime.js +400 -0
  195. package/dist/engine/execution/job-executor.d.ts +16 -0
  196. package/dist/engine/execution/job-executor.js +140 -0
  197. package/dist/engine/execution/job-runtime.d.ts +108 -0
  198. package/dist/engine/execution/job-runtime.js +328 -0
  199. package/dist/engine/execution/native-relevance-scorer.d.ts +6 -0
  200. package/dist/engine/execution/native-relevance-scorer.js +64 -0
  201. package/dist/engine/execution/native-worker-dispatch.d.ts +3 -0
  202. package/dist/engine/execution/native-worker-dispatch.js +46 -0
  203. package/dist/engine/execution/native-worker-protocol.d.ts +6 -0
  204. package/dist/engine/execution/native-worker-protocol.js +33 -0
  205. package/dist/engine/execution/native-worker-runtime.d.ts +4 -0
  206. package/dist/engine/execution/native-worker-runtime.js +177 -0
  207. package/dist/engine/execution/native-worker-thread.d.ts +2 -0
  208. package/dist/engine/execution/native-worker-thread.js +66 -0
  209. package/dist/engine/execution/operation-journal.d.ts +66 -0
  210. package/dist/engine/execution/operation-journal.js +260 -0
  211. package/dist/engine/execution/outbox-worker.d.ts +31 -0
  212. package/dist/engine/execution/outbox-worker.js +192 -0
  213. package/dist/engine/execution/public-job-sanitizer.d.ts +4 -0
  214. package/dist/engine/execution/public-job-sanitizer.js +31 -0
  215. package/dist/engine/execution/validate-job-executor.d.ts +35 -0
  216. package/dist/engine/execution/validate-job-executor.js +805 -0
  217. package/dist/engine/execution/validate-job-payload.d.ts +5 -0
  218. package/dist/engine/execution/validate-job-payload.js +144 -0
  219. package/dist/engine/execution/validate-job-recovery.d.ts +4 -0
  220. package/dist/engine/execution/validate-job-recovery.js +47 -0
  221. package/dist/engine/execution/validate-worker-runtime.d.ts +10 -0
  222. package/dist/engine/execution/validate-worker-runtime.js +188 -0
  223. package/dist/engine/execution/validate-worker-thread.d.ts +2 -0
  224. package/dist/engine/execution/validate-worker-thread.js +64 -0
  225. package/dist/engine/execution-plan/desktop-distribution.js +3 -7
  226. package/dist/engine/execution-plan/mobile-distribution.js +4 -9
  227. package/dist/engine/execution-plan/phases.js +4 -5
  228. package/dist/engine/execution-plan/plan-utils.js +8 -5
  229. package/dist/engine/facilitate/context-loader.js +3 -9
  230. package/dist/engine/figma/code-connect-fetcher.js +9 -8
  231. package/dist/engine/filesystem-watcher/index.d.ts +3 -3
  232. package/dist/engine/filesystem-watcher/index.js +5 -5
  233. package/dist/engine/framework-detector.js +14 -15
  234. package/dist/engine/git/planu-autocommit.js +8 -7
  235. package/dist/engine/git/repository-probe.d.ts +3 -0
  236. package/dist/engine/git/repository-probe.js +13 -0
  237. package/dist/engine/global-rules-manager.js +2 -2
  238. package/dist/engine/handoff-artifacts/io.js +2 -3
  239. package/dist/engine/handoff-artifacts/schemas/red-tests-handoff.js +8 -1
  240. package/dist/engine/handoff-artifacts/schemas.d.ts +6 -1
  241. package/dist/engine/handoff-artifacts/schemas.js +38 -0
  242. package/dist/engine/handoff-packager.d.ts +19 -0
  243. package/dist/engine/handoff-packager.js +415 -13
  244. package/dist/engine/hook-generator/stack-hook-templates.js +4 -4
  245. package/dist/engine/hooks/config-loader.js +1 -1
  246. package/dist/engine/hooks/context-injector.js +4 -7
  247. package/dist/engine/hooks/effort-configurator.js +1 -1
  248. package/dist/engine/hooks/file-watcher.js +1 -14
  249. package/dist/engine/hooks-reconciler.js +6 -4
  250. package/dist/engine/impact-detector/test-break-predictor.js +3 -3
  251. package/dist/engine/impact-detector/tool-registration.js +1 -1
  252. package/dist/engine/implementation-contract/renderer.js +23 -8
  253. package/dist/engine/infrastructure/component-mapper.js +5 -7
  254. package/dist/engine/infrastructure/docker-compose-generator.js +8 -10
  255. package/dist/engine/infrastructure/index.js +6 -3
  256. package/dist/engine/infrastructure/kubernetes-generator.js +2 -2
  257. package/dist/engine/infrastructure/railway-generator.js +10 -8
  258. package/dist/engine/infrastructure/signal-detector.js +6 -8
  259. package/dist/engine/infrastructure/terraform-generator.js +6 -8
  260. package/dist/engine/legal-compliance/detector.js +3 -2
  261. package/dist/engine/lifecycle-reconciliation-io.d.ts +11 -0
  262. package/dist/engine/lifecycle-reconciliation-io.js +180 -0
  263. package/dist/engine/lifecycle-reconciliation.d.ts +16 -0
  264. package/dist/engine/lifecycle-reconciliation.js +406 -0
  265. package/dist/engine/local-first/storage-advisor.js +5 -6
  266. package/dist/engine/local-first/tool-classification.js +2 -0
  267. package/dist/engine/macos-keychain-native-port.d.ts +10 -0
  268. package/dist/engine/macos-keychain-native-port.js +38 -0
  269. package/dist/engine/marketplace-fetcher/cache.js +3 -1
  270. package/dist/engine/mcp-config/mcp-config-writer.d.ts +2 -2
  271. package/dist/engine/mcp-config/mcp-config-writer.js +10 -8
  272. package/dist/engine/migration/db-migrator.js +2 -5
  273. package/dist/engine/migration/equivalence-mapper.js +12 -13
  274. package/dist/engine/migration/service-catalogs.js +6 -7
  275. package/dist/engine/migration/service-migrator-catalogs.js +6 -7
  276. package/dist/engine/migrations/remove-commercial-state.d.ts +3 -0
  277. package/dist/engine/migrations/remove-commercial-state.js +343 -0
  278. package/dist/engine/mobile-detector-ios.js +2 -3
  279. package/dist/engine/mobile-detector.js +16 -4
  280. package/dist/engine/model-router/complexity-analyzer.js +4 -7
  281. package/dist/engine/multi-agent-review/security-analyzer.js +3 -1
  282. package/dist/engine/multi-app-detector/app-type.js +26 -21
  283. package/dist/engine/multi-app-detector/core.js +3 -2
  284. package/dist/engine/multi-teammate-review/disagreement-counter.js +2 -1
  285. package/dist/engine/multi-teammate-review/panel-orchestrator.js +0 -2
  286. package/dist/engine/mutation-config-generator.js +10 -7
  287. package/dist/engine/native-capability-policy.d.ts +4 -0
  288. package/dist/engine/native-capability-policy.js +24 -0
  289. package/dist/engine/native-platform.d.ts +3 -0
  290. package/dist/engine/native-platform.js +44 -0
  291. package/dist/engine/native-runtime-handshake.d.ts +20 -0
  292. package/dist/engine/native-runtime-handshake.js +230 -0
  293. package/dist/engine/network-policy.d.ts +27 -0
  294. package/dist/engine/network-policy.js +175 -0
  295. package/dist/engine/next-spec-resolver/dependency-filter.js +2 -22
  296. package/dist/engine/nfr-profile-detector.js +12 -16
  297. package/dist/engine/nli-keywords.js +8 -9
  298. package/dist/engine/oauth/config-guard.js +4 -5
  299. package/dist/engine/observability/local-execution-spans.d.ts +15 -0
  300. package/dist/engine/observability/local-execution-spans.js +63 -0
  301. package/dist/engine/orchestrator/runtime.js +0 -1
  302. package/dist/engine/package-registry.js +2 -6
  303. package/dist/engine/performance-analyzer.js +2 -5
  304. package/dist/engine/permissions-merger/stack-detectors.js +5 -5
  305. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +39 -0
  306. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +1310 -0
  307. package/dist/engine/planu-core.darwin-x64.node.manifest.json +39 -0
  308. package/dist/engine/planu-core.darwin-x64.node.sbom.json +1310 -0
  309. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +38 -0
  310. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +1310 -0
  311. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +38 -0
  312. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +1310 -0
  313. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +38 -0
  314. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +1310 -0
  315. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +38 -0
  316. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +1310 -0
  317. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +38 -0
  318. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +1310 -0
  319. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +38 -0
  320. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +1310 -0
  321. package/dist/engine/platform-detector/desktop.js +15 -2
  322. package/dist/engine/platform-detector/extensions.js +2 -1
  323. package/dist/engine/platform-detector/games.js +2 -1
  324. package/dist/engine/platform-detector.js +3 -2
  325. package/dist/engine/platform-engineering/idp-detector.js +2 -1
  326. package/dist/engine/plugin-installer/stack-matcher.js +9 -17
  327. package/dist/engine/plugins/lifecycle.js +6 -2
  328. package/dist/engine/prior-decisions/contradiction-detector.js +60 -30
  329. package/dist/engine/project-dna/stack-detector.js +15 -17
  330. package/dist/engine/project-graph/builder.js +11 -0
  331. package/dist/engine/project-graph/cache.js +1 -1
  332. package/dist/engine/project-graph/freshness-projection.d.ts +16 -0
  333. package/dist/engine/project-graph/freshness-projection.js +95 -0
  334. package/dist/engine/project-graph/index.d.ts +1 -0
  335. package/dist/engine/project-graph/index.js +1 -0
  336. package/dist/engine/project-graph/query.js +15 -25
  337. package/dist/engine/project-health-checker.js +3 -4
  338. package/dist/engine/project-scanner/stack-detector.js +17 -17
  339. package/dist/engine/property-test-generator.js +2 -3
  340. package/dist/engine/qa-gate.d.ts +1 -0
  341. package/dist/engine/qa-gate.js +6 -4
  342. package/dist/engine/quality-gates/gate-catalog.js +47 -46
  343. package/dist/engine/quality-gates/gate-injector.js +9 -4
  344. package/dist/engine/readiness-checker.d.ts +1 -16
  345. package/dist/engine/readiness-checker.js +27 -88
  346. package/dist/engine/registry/core.js +0 -2
  347. package/dist/engine/registry/loader.js +9 -12
  348. package/dist/engine/registry/matcher.js +129 -24
  349. package/dist/engine/resilience-detector/concurrency-detector.js +4 -4
  350. package/dist/engine/resilience-detector/middleware-detector.js +11 -13
  351. package/dist/engine/resilience-detector/validation-detector.js +17 -4
  352. package/dist/engine/reverse-engineer/config-analyzer.js +9 -8
  353. package/dist/engine/reverse-engineer/orchestrator.js +5 -9
  354. package/dist/engine/reverse-engineer/test-file-parser.js +6 -3
  355. package/dist/engine/rules-generator/index.js +6 -5
  356. package/dist/engine/runtime-policy.d.ts +9 -0
  357. package/dist/engine/runtime-policy.js +138 -0
  358. package/dist/engine/runtime-security/checkers/content-security.js +21 -6
  359. package/dist/engine/runtime-security/checkers/file-permissions.js +0 -2
  360. package/dist/engine/runtime-security/rate-limiter.js +0 -1
  361. package/dist/engine/safety/atomic-write-file.js +20 -9
  362. package/dist/engine/safety/atomic-writer.js +10 -3
  363. package/dist/engine/safety/contained-project-file.d.ts +3 -0
  364. package/dist/engine/safety/contained-project-file.js +23 -0
  365. package/dist/engine/safety/cross-process-lock.d.ts +3 -40
  366. package/dist/engine/safety/cross-process-lock.js +268 -272
  367. package/dist/engine/safety/file-mutex.d.ts +2 -9
  368. package/dist/engine/safety/file-mutex.js +155 -87
  369. package/dist/engine/safety/health-monitor.js +15 -6
  370. package/dist/engine/safety/lock-lease-store.d.ts +79 -0
  371. package/dist/engine/safety/lock-lease-store.js +372 -0
  372. package/dist/engine/safety/lock-scavenger.d.ts +2 -5
  373. package/dist/engine/safety/lock-scavenger.js +158 -76
  374. package/dist/engine/safety/lock-staleness.js +4 -1
  375. package/dist/engine/safety/obsolete-lock-guard.d.ts +8 -0
  376. package/dist/engine/safety/obsolete-lock-guard.js +31 -0
  377. package/dist/engine/safety/transaction.js +3 -3
  378. package/dist/engine/sandbox/index.js +2 -1
  379. package/dist/engine/sandbox/runner-detect.js +3 -2
  380. package/dist/engine/sandbox/runner-docker.js +4 -3
  381. package/dist/engine/scan-project/module-discoverer.js +3 -2
  382. package/dist/engine/schema-generator.js +16 -9
  383. package/dist/engine/scope-boundaries/contradiction-checker.js +63 -1
  384. package/dist/engine/scope-boundaries/scope-validator.js +45 -7
  385. package/dist/engine/security-analyzer/criteria-generator.js +2 -3
  386. package/dist/engine/self-healing/healer.js +4 -4
  387. package/dist/engine/session/checkpoint-writer.js +0 -9
  388. package/dist/engine/shared-agent-memory.js +66 -74
  389. package/dist/engine/skill-adapter/command-rewriter.js +3 -2
  390. package/dist/engine/skill-adapter/index.js +3 -3
  391. package/dist/engine/skill-adapter/placeholder-map.js +3 -2
  392. package/dist/engine/skill-bootstrap/stack-matcher.js +47 -48
  393. package/dist/engine/skill-generation/stack-content-generator.js +0 -2
  394. package/dist/engine/skill-generator/workflow-skill-generator.js +2 -1
  395. package/dist/engine/skill-registry/ttl-refresh.js +3 -1
  396. package/dist/engine/skills/skills-fetcher.js +3 -6
  397. package/dist/engine/skills-reconciler.js +19 -39
  398. package/dist/engine/spec-coverage/test-finder.js +7 -6
  399. package/dist/engine/spec-diff-engine.js +3 -3
  400. package/dist/engine/spec-format/acceptance-criteria.d.ts +6 -2
  401. package/dist/engine/spec-format/acceptance-criteria.js +77 -18
  402. package/dist/engine/spec-format/markdown-sections.d.ts +14 -0
  403. package/dist/engine/spec-format/markdown-sections.js +105 -0
  404. package/dist/engine/spec-format/read-technical-section.js +33 -5
  405. package/dist/engine/spec-format/technical-md-populator.js +3 -2
  406. package/dist/engine/spec-format/unified-spec-builder.d.ts +7 -0
  407. package/dist/engine/spec-format/unified-spec-builder.js +202 -0
  408. package/dist/engine/spec-generator/api-key-resolver.d.ts +1 -1
  409. package/dist/engine/spec-generator/api-key-resolver.js +3 -24
  410. package/dist/engine/spec-generators/issue-extractor.js +9 -3
  411. package/dist/engine/spec-migrator/canonical-deduplicator.d.ts +18 -0
  412. package/dist/engine/spec-migrator/canonical-deduplicator.js +479 -0
  413. package/dist/engine/spec-migrator/drift-detector.js +5 -13
  414. package/dist/engine/spec-migrator/filesystem-import.d.ts +4 -8
  415. package/dist/engine/spec-migrator/filesystem-import.js +134 -23
  416. package/dist/engine/spec-migrator/frontmatter-parser.js +32 -15
  417. package/dist/engine/spec-migrator/index.d.ts +1 -0
  418. package/dist/engine/spec-migrator/index.js +1 -0
  419. package/dist/engine/spec-migrator/planu-canonical-policy.js +10 -1
  420. package/dist/engine/spec-migrator/strict-planu-cleanup.js +24 -25
  421. package/dist/engine/spec-registry/adapter.d.ts +0 -5
  422. package/dist/engine/spec-registry/adapter.js +45 -46
  423. package/dist/engine/spec-registry/client.js +2 -0
  424. package/dist/engine/spec-source-sync.js +3 -2
  425. package/dist/engine/spec-state-machine/transition-spec.d.ts +6 -1
  426. package/dist/engine/spec-state-machine/transition-spec.js +10 -1
  427. package/dist/engine/spec-templates/custom-loader.js +2 -3
  428. package/dist/engine/spec-templates/templates-domain-specific.js +8 -5
  429. package/dist/engine/spec-templates/templates-perf-integration.js +2 -3
  430. package/dist/engine/stack-auditor/manifest-reader.js +0 -2
  431. package/dist/engine/staleness/stale-implementing.js +7 -7
  432. package/dist/engine/tdd-scaffold-generator.js +24 -11
  433. package/dist/engine/teammate-router/green-phase-verifier.js +2 -1
  434. package/dist/engine/teammate-router/red-phase-verifier.js +2 -1
  435. package/dist/engine/technical-enricher/index.js +16 -8
  436. package/dist/engine/technical-enricher/render-enriched.d.ts +1 -0
  437. package/dist/engine/technical-enricher/render-enriched.js +42 -14
  438. package/dist/engine/technology-registry.d.ts +11 -0
  439. package/dist/engine/technology-registry.js +142 -0
  440. package/dist/engine/telemetry/error-reporter.d.ts +1 -2
  441. package/dist/engine/telemetry/error-reporter.js +11 -18
  442. package/dist/engine/telemetry/health-checker.js +58 -31
  443. package/dist/engine/telemetry/index.d.ts +0 -1
  444. package/dist/engine/telemetry/index.js +0 -1
  445. package/dist/engine/telemetry/stance.js +3 -2
  446. package/dist/engine/telemetry/telemetry-client.d.ts +1 -5
  447. package/dist/engine/telemetry/telemetry-client.js +69 -35
  448. package/dist/engine/telemetry/telemetry-store.d.ts +3 -3
  449. package/dist/engine/telemetry/telemetry-store.js +30 -23
  450. package/dist/engine/test-framework-detector/detectors.js +8 -8
  451. package/dist/engine/test-framework-detector/strategy.js +8 -9
  452. package/dist/engine/test-generators/agent-test-templates.js +2 -3
  453. package/dist/engine/test-generators/contract-test-generator.d.ts +1 -1
  454. package/dist/engine/test-generators/contract-test-generator.js +9 -202
  455. package/dist/engine/test-generators/platform-test-templates-b.js +2 -3
  456. package/dist/engine/test-generators/platform-test-templates.js +2 -5
  457. package/dist/engine/test-mocks-generator.js +4 -3
  458. package/dist/engine/test-plan-generator.js +30 -12
  459. package/dist/engine/test-scaffold-generator/advanced-scaffold.js +4 -5
  460. package/dist/engine/test-scaffold-generator/unit-scaffold.js +5 -6
  461. package/dist/engine/text-signal-boundaries.d.ts +2 -0
  462. package/dist/engine/text-signal-boundaries.js +25 -2
  463. package/dist/engine/time/relative-date.d.ts +3 -0
  464. package/dist/engine/time/relative-date.js +16 -0
  465. package/dist/engine/timing/budget.d.ts +17 -17
  466. package/dist/engine/timing/budget.js +98 -64
  467. package/dist/engine/token-optimizer/analytics.d.ts +1 -1
  468. package/dist/engine/token-optimizer/analytics.js +5 -6
  469. package/dist/engine/tool-groups/group-manager.js +3 -3
  470. package/dist/engine/universal-rules/installer.js +1 -1
  471. package/dist/engine/universal-rules/rules/planu-modes.js +2 -0
  472. package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -0
  473. package/dist/engine/update-notifier.js +8 -5
  474. package/dist/engine/usage-tracker/core.d.ts +2 -2
  475. package/dist/engine/usage-tracker/core.js +1 -2
  476. package/dist/engine/usage-tracker/index.d.ts +0 -3
  477. package/dist/engine/usage-tracker/index.js +0 -3
  478. package/dist/engine/usage-tracker/stats.d.ts +2 -2
  479. package/dist/engine/usage-tracker/stats.js +1 -28
  480. package/dist/engine/validation/approved-spec-portability.d.ts +12 -0
  481. package/dist/engine/validation/approved-spec-portability.js +107 -0
  482. package/dist/engine/validation/durable-validation.d.ts +36 -0
  483. package/dist/engine/validation/durable-validation.js +256 -0
  484. package/dist/engine/validation/validation-freshness.d.ts +46 -0
  485. package/dist/engine/validation/validation-freshness.js +567 -0
  486. package/dist/engine/validation/validation-receipt-codec.d.ts +13 -0
  487. package/dist/engine/validation/validation-receipt-codec.js +182 -0
  488. package/dist/engine/validation/validation-receipt.d.ts +62 -0
  489. package/dist/engine/validation/validation-receipt.js +342 -0
  490. package/dist/engine/validation/validation-source-digest.d.ts +2 -0
  491. package/dist/engine/validation/validation-source-digest.js +86 -0
  492. package/dist/engine/validation/validation-source-policy.d.ts +4 -0
  493. package/dist/engine/validation/validation-source-policy.js +16 -0
  494. package/dist/engine/validation/validation-submission.d.ts +37 -0
  495. package/dist/engine/validation/validation-submission.js +142 -0
  496. package/dist/engine/validation/validation-worktree.d.ts +21 -0
  497. package/dist/engine/validation/validation-worktree.js +260 -0
  498. package/dist/engine/validation-evidence-ledger.js +41 -0
  499. package/dist/engine/validation-impact-planner.d.ts +14 -2
  500. package/dist/engine/validation-impact-planner.js +23 -10
  501. package/dist/engine/validator/dor-dod.d.ts +1 -0
  502. package/dist/engine/validator/dor-dod.js +5 -3
  503. package/dist/engine/validator/extractors.d.ts +1 -5
  504. package/dist/engine/validator/extractors.js +24 -69
  505. package/dist/engine/validator/spec-compliance-runner.d.ts +13 -25
  506. package/dist/engine/validator/spec-compliance-runner.js +442 -215
  507. package/dist/engine/validator/validation-report-writer.js +1 -1
  508. package/dist/engine/validator.js +37 -23
  509. package/dist/engine/verify-integrations/index.js +1 -1
  510. package/dist/engine/version-resolver.js +5 -6
  511. package/dist/engine/web-fetcher/stack-advisor.js +156 -92
  512. package/dist/engine/web-fetcher/stack-detector.js +114 -54
  513. package/dist/engine/workspace-manager.js +3 -2
  514. package/dist/errors/classified-degradation.d.ts +3 -0
  515. package/dist/errors/classified-degradation.js +10 -0
  516. package/dist/errors/degradation-sink.d.ts +3 -0
  517. package/dist/errors/degradation-sink.js +5 -0
  518. package/dist/errors/error-taxonomy.d.ts +12 -0
  519. package/dist/errors/error-taxonomy.js +62 -0
  520. package/dist/hosts/claude-code/ux/mcp-prompts.js +10 -4
  521. package/dist/hosts/claude-code/ux/mcp-resources.js +4 -2
  522. package/dist/hosts/codex/config-scaffold.js +4 -3
  523. package/dist/hosts/gemini/config-scaffold.js +2 -1
  524. package/dist/hosts/gemini/multimodal-spec-flow.js +7 -4
  525. package/dist/index.js +23 -20
  526. package/dist/resources/patterns.js +3 -1
  527. package/dist/resources/specs.js +3 -1
  528. package/dist/resources/templates.js +3 -1
  529. package/dist/resources/usage-stats-resource.js +2 -18
  530. package/dist/security/adapters/environment.d.ts +12 -0
  531. package/dist/security/adapters/environment.js +25 -0
  532. package/dist/security/adapters/linux-secret-service.d.ts +8 -0
  533. package/dist/security/adapters/linux-secret-service.js +64 -0
  534. package/dist/security/adapters/macos-keychain.d.ts +18 -0
  535. package/dist/security/adapters/macos-keychain.js +90 -0
  536. package/dist/security/adapters/windows-credential-manager.d.ts +8 -0
  537. package/dist/security/adapters/windows-credential-manager.js +60 -0
  538. package/dist/security/redactor.d.ts +5 -0
  539. package/dist/security/redactor.js +58 -0
  540. package/dist/security/secret-field.d.ts +5 -0
  541. package/dist/security/secret-field.js +17 -0
  542. package/dist/security/secret-migration.d.ts +3 -0
  543. package/dist/security/secret-migration.js +123 -0
  544. package/dist/security/secret-provider.d.ts +23 -0
  545. package/dist/security/secret-provider.js +145 -0
  546. package/dist/security/secure-json.d.ts +3 -0
  547. package/dist/security/secure-json.js +29 -0
  548. package/dist/server/routes/specs.js +10 -0
  549. package/dist/storage/api-surfaces-store.js +2 -2
  550. package/dist/storage/approval-operation-lock.d.ts +1 -1
  551. package/dist/storage/approval-operation-lock.js +5 -3
  552. package/dist/storage/audit-trail-store.d.ts +1 -1
  553. package/dist/storage/audit-trail-store.js +48 -62
  554. package/dist/storage/autopilot-log-store.js +12 -5
  555. package/dist/storage/base-store.d.ts +9 -9
  556. package/dist/storage/base-store.js +58 -21
  557. package/dist/storage/checkpoint-store.js +5 -2
  558. package/dist/storage/comments-store.js +2 -2
  559. package/dist/storage/compliance-audit-store.js +5 -2
  560. package/dist/storage/compliance-gate-config-store.js +7 -4
  561. package/dist/storage/compliance-store.js +2 -2
  562. package/dist/storage/context-profile-store.js +2 -2
  563. package/dist/storage/crash-shield-store.js +8 -4
  564. package/dist/storage/feedback-remote.d.ts +2 -3
  565. package/dist/storage/feedback-remote.js +45 -31
  566. package/dist/storage/feedback-store.js +10 -6
  567. package/dist/storage/figma-store.js +8 -4
  568. package/dist/storage/file-mutex.js +9 -1
  569. package/dist/storage/gaps-log.js +7 -4
  570. package/dist/storage/global-projects-store.js +4 -2
  571. package/dist/storage/global-store.d.ts +1 -17
  572. package/dist/storage/global-store.js +1 -42
  573. package/dist/storage/ideas-store.js +2 -2
  574. package/dist/storage/index.d.ts +5 -2
  575. package/dist/storage/index.js +5 -2
  576. package/dist/storage/knowledge-store/knowledge.js +27 -33
  577. package/dist/storage/lessons-store.js +2 -2
  578. package/dist/storage/migrations/canonical-storage.d.ts +15 -0
  579. package/dist/storage/migrations/canonical-storage.js +712 -0
  580. package/dist/storage/oauth-store.js +36 -8
  581. package/dist/storage/path-resolver.js +16 -3
  582. package/dist/storage/pr-store.js +2 -2
  583. package/dist/storage/project-drift-store.js +20 -8
  584. package/dist/storage/project-identity.d.ts +32 -0
  585. package/dist/storage/project-identity.js +194 -0
  586. package/dist/storage/project-resolver.js +14 -7
  587. package/dist/storage/release-notes-store.js +2 -6
  588. package/dist/storage/runtime-db.d.ts +195 -0
  589. package/dist/storage/runtime-db.js +1110 -0
  590. package/dist/storage/schema-registry.d.ts +5 -0
  591. package/dist/storage/schema-registry.js +74 -0
  592. package/dist/storage/sentry-store.js +20 -9
  593. package/dist/storage/session-state-store.js +12 -5
  594. package/dist/storage/skill-registry-storage.d.ts +1 -1
  595. package/dist/storage/skill-registry-storage.js +13 -11
  596. package/dist/storage/slack-store.js +10 -5
  597. package/dist/storage/spec-store.d.ts +14 -2
  598. package/dist/storage/spec-store.js +134 -37
  599. package/dist/storage/status-store/atomic-status-write.d.ts +5 -0
  600. package/dist/storage/status-store/atomic-status-write.js +57 -0
  601. package/dist/storage/status-store/file-lock.js +61 -20
  602. package/dist/storage/status-store/self-healing.js +13 -8
  603. package/dist/storage/status-store/version-sync.d.ts +2 -1
  604. package/dist/storage/status-store/version-sync.js +36 -39
  605. package/dist/storage/steering-store.js +2 -2
  606. package/dist/storage/storage-bundle.d.ts +5 -0
  607. package/dist/storage/storage-bundle.js +117 -0
  608. package/dist/storage/storage-catalog-validation.d.ts +3 -0
  609. package/dist/storage/storage-catalog-validation.js +20 -0
  610. package/dist/storage/storage-catalog.d.ts +25 -0
  611. package/dist/storage/storage-catalog.js +390 -0
  612. package/dist/storage/storage-layout.d.ts +24 -0
  613. package/dist/storage/storage-layout.js +101 -0
  614. package/dist/storage/storybook-store.js +2 -2
  615. package/dist/storage/supabase-store.js +24 -6
  616. package/dist/storage/tdd-policy-store.js +8 -6
  617. package/dist/storage/tech-debt-store.js +3 -3
  618. package/dist/storage/technology-selection-store.d.ts +1 -1
  619. package/dist/storage/technology-selection-store.js +6 -3
  620. package/dist/storage/token-cache-store.js +3 -3
  621. package/dist/storage/token-ledger-store.js +13 -8
  622. package/dist/storage/transition-log.js +7 -4
  623. package/dist/storage/trash-store.js +15 -6
  624. package/dist/storage/usage-store.d.ts +1 -5
  625. package/dist/storage/usage-store.js +0 -35
  626. package/dist/storage/vector-store/migrator.js +7 -2
  627. package/dist/storage/vector-store/sqlite-adapter.js +4 -1
  628. package/dist/storage/webhook-server-store.js +2 -2
  629. package/dist/tools/api-spec-generator-handler.js +3 -2
  630. package/dist/tools/auto-update-handler.d.ts +4 -4
  631. package/dist/tools/auto-update-handler.js +4 -4
  632. package/dist/tools/browser-validate-handler.js +2 -1
  633. package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +8 -5
  634. package/dist/tools/challenge-spec/resilience-challenge-scenarios.d.ts +2 -1
  635. package/dist/tools/challenge-spec/resilience-challenge-scenarios.js +10 -7
  636. package/dist/tools/challenge-spec/scenario-collector.js +1 -1
  637. package/dist/tools/challenge-spec/scenarios-data.js +1 -1
  638. package/dist/tools/challenge-spec/scenarios-desktop.js +8 -3
  639. package/dist/tools/challenge-spec/scenarios-failure.js +7 -2
  640. package/dist/tools/challenge-spec/scenarios-utils.d.ts +1 -1
  641. package/dist/tools/challenge-spec/scenarios-utils.js +35 -11
  642. package/dist/tools/challenge-spec/security-challenge-scenarios.js +3 -3
  643. package/dist/tools/challenge-spec.js +5 -5
  644. package/dist/tools/check-readiness.js +1 -1
  645. package/dist/tools/clarify-requirements/multiple-choice.js +53 -41
  646. package/dist/tools/comments-handler.js +2 -3
  647. package/dist/tools/compliance-test-handler.js +2 -2
  648. package/dist/tools/configure-telemetry.js +41 -13
  649. package/dist/tools/create-spec/auto-pipeline.js +13 -1
  650. package/dist/tools/create-spec/autopilot-analyzer.d.ts +1 -1
  651. package/dist/tools/create-spec/autopilot-analyzer.js +2 -4
  652. package/dist/tools/create-spec/mcp-tool-contract.d.ts +10 -4
  653. package/dist/tools/create-spec/mcp-tool-contract.js +7 -36
  654. package/dist/tools/create-spec/post-creation.d.ts +2 -1
  655. package/dist/tools/create-spec/post-creation.js +56 -54
  656. package/dist/tools/create-spec/relevance-scorer.d.ts +1 -1
  657. package/dist/tools/create-spec/relevance-scorer.js +17 -1
  658. package/dist/tools/create-spec/spec-builder.js +2 -23
  659. package/dist/tools/create-spec/spec-created-outbox-consumer.d.ts +14 -0
  660. package/dist/tools/create-spec/spec-created-outbox-consumer.js +176 -0
  661. package/dist/tools/create-spec.d.ts +1 -0
  662. package/dist/tools/create-spec.js +802 -732
  663. package/dist/tools/define-ui-contract/agent-interaction-contract.js +2 -4
  664. package/dist/tools/define-ui-contract-desktop/desktop-contract.js +12 -4
  665. package/dist/tools/define-ui-contract-desktop/native-contract.js +7 -3
  666. package/dist/tools/define-ui-contract-extensions.js +2 -3
  667. package/dist/tools/define-ui-contract-mobile.js +5 -9
  668. package/dist/tools/define-ui-contract-web/component-tree.js +4 -3
  669. package/dist/tools/define-ui-contract.js +7 -4
  670. package/dist/tools/deploy/deploy-spec.js +2 -4
  671. package/dist/tools/deploy/deploy-status.js +2 -4
  672. package/dist/tools/design-schema/nosql-category-schemas.js +2 -3
  673. package/dist/tools/design-schema-sql/migrations.js +3 -2
  674. package/dist/tools/design-schema-sql/tables.js +4 -1
  675. package/dist/tools/design-schema.js +4 -3
  676. package/dist/tools/feedback-handler.js +2 -4
  677. package/dist/tools/gc-data-projects.js +5 -5
  678. package/dist/tools/generate-execution-plan.js +3 -4
  679. package/dist/tools/generate-sub-agent.js +2 -1
  680. package/dist/tools/generate-tests/generators/a11y-tests-generator.js +5 -4
  681. package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
  682. package/dist/tools/generate-tests/generators/concurrency-test-generator/js-templates.js +9 -4
  683. package/dist/tools/generate-tests/generators/concurrency-test-generator.js +8 -4
  684. package/dist/tools/generate-tests/generators/database/detectors.js +9 -3
  685. package/dist/tools/generate-tests/generators/database/index.js +2 -4
  686. package/dist/tools/generate-tests/generators/event-test-generator.js +5 -4
  687. package/dist/tools/generate-tests/generators/game-tests-generator.js +2 -1
  688. package/dist/tools/generate-tests/generators/graphql-test-generator.js +11 -5
  689. package/dist/tools/generate-tests/generators/grpc-test-generator.js +2 -3
  690. package/dist/tools/generate-tests/generators/llm-security-test-generator.js +4 -3
  691. package/dist/tools/generate-tests/generators/local-first-test-generator.js +4 -3
  692. package/dist/tools/generate-tests/generators/mcp-tests-generator.js +11 -9
  693. package/dist/tools/generate-tests/generators/microservices/index.js +2 -3
  694. package/dist/tools/generate-tests/generators/otel-test-generator.js +6 -3
  695. package/dist/tools/generate-tests/generators/security/detectors.js +2 -5
  696. package/dist/tools/generate-tests/generators/security/index.js +2 -4
  697. package/dist/tools/generate-tests/generators/supply-chain-test-generator.js +2 -3
  698. package/dist/tools/generate-tests/generators/visual-regression-generator.js +14 -17
  699. package/dist/tools/generate-tests/generators/websocket-test-generator.js +2 -3
  700. package/dist/tools/generate-tests/test-helpers.js +11 -12
  701. package/dist/tools/generate-tests-content.js +4 -3
  702. package/dist/tools/generate-tests.js +7 -4
  703. package/dist/tools/git/branch-ops.d.ts +1 -1
  704. package/dist/tools/git/branch-ops.js +3 -2
  705. package/dist/tools/git/git-helpers.d.ts +0 -2
  706. package/dist/tools/git/git-helpers.js +7 -7
  707. package/dist/tools/github-pr-handler.js +10 -3
  708. package/dist/tools/heal-spec-docs.js +6 -53
  709. package/dist/tools/hook-generator-handler.js +6 -6
  710. package/dist/tools/init-constitution/platform-principles.js +4 -2
  711. package/dist/tools/init-project/agents-md-writer.js +14 -5
  712. package/dist/tools/init-project/claude-md-generator.js +19 -12
  713. package/dist/tools/init-project/handler.js +165 -75
  714. package/dist/tools/init-project/host-assets-writer.d.ts +1 -1
  715. package/dist/tools/init-project/host-assets-writer.js +30 -3
  716. package/dist/tools/init-project/lifecycle-helpers.js +3 -5
  717. package/dist/tools/init-project/lint-scaffolder.d.ts +3 -3
  718. package/dist/tools/init-project/lint-scaffolder.js +6 -2
  719. package/dist/tools/init-project/migration-runner.d.ts +8 -1
  720. package/dist/tools/init-project/migration-runner.js +68 -2
  721. package/dist/tools/init-project/per-client-files-writer.js +14 -4
  722. package/dist/tools/init-project/portable-index-reconciler.d.ts +4 -0
  723. package/dist/tools/init-project/portable-index-reconciler.js +14 -0
  724. package/dist/tools/init-project/result-builder.js +1 -3
  725. package/dist/tools/init-project/rules-generator.js +10 -2
  726. package/dist/tools/init-project/scaffold-writer.d.ts +1 -1
  727. package/dist/tools/init-project/scaffold-writer.js +17 -15
  728. package/dist/tools/jobs/handlers.d.ts +15 -0
  729. package/dist/tools/jobs/handlers.js +158 -0
  730. package/dist/tools/list-specs.js +39 -59
  731. package/dist/tools/manage-plugins-handler.js +17 -9
  732. package/dist/tools/merge-risk-handler.js +2 -2
  733. package/dist/tools/migrate-tech/advanced-handlers.js +3 -2
  734. package/dist/tools/migrate-tech/build-tool-handlers.js +3 -2
  735. package/dist/tools/migrate-tech/core-handlers.js +5 -2
  736. package/dist/tools/migrate-tech/data-handlers.js +6 -3
  737. package/dist/tools/migrate-tech-advanced/rollback-handlers.js +3 -2
  738. package/dist/tools/migrate-tech-advanced/service-handlers.js +5 -2
  739. package/dist/tools/oauth-handler.js +7 -1
  740. package/dist/tools/package-handoff.js +2 -0
  741. package/dist/tools/reconcile-spec.js +0 -27
  742. package/dist/tools/register-agent-squad-tools.js +2 -2
  743. package/dist/tools/register-platform-tools/design-stack-tools.js +11 -11
  744. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -7
  745. package/dist/tools/register-sdd-tools.d.ts +1 -1
  746. package/dist/tools/register-sdd-tools.js +2 -24
  747. package/dist/tools/register-spec-tools/analysis-tools.js +8 -8
  748. package/dist/tools/register-spec-tools/core-spec-tools.js +48 -8
  749. package/dist/tools/registry/auth.js +13 -5
  750. package/dist/tools/registry/publish.js +7 -4
  751. package/dist/tools/resolve-project-path.d.ts +2 -2
  752. package/dist/tools/resolve-project-path.js +7 -7
  753. package/dist/tools/reverse-engineer/analyzer.js +14 -14
  754. package/dist/tools/rollback-release.js +3 -2
  755. package/dist/tools/safe-handler.d.ts +5 -13
  756. package/dist/tools/safe-handler.js +302 -194
  757. package/dist/tools/schema-generator-handler.js +2 -1
  758. package/dist/tools/schemas/index.d.ts +1 -1
  759. package/dist/tools/schemas/index.js +1 -1
  760. package/dist/tools/schemas/output-schemas.d.ts +88 -105
  761. package/dist/tools/schemas/output-schemas.js +12 -122
  762. package/dist/tools/schemas/plugins-schemas.js +0 -2
  763. package/dist/tools/schemas/registry.js +0 -2
  764. package/dist/tools/schemas/skill-registry-schemas.js +0 -2
  765. package/dist/tools/schemas/spec.d.ts +4 -0
  766. package/dist/tools/schemas/spec.js +3 -0
  767. package/dist/tools/schemas/validate-output-schema.d.ts +267 -0
  768. package/dist/tools/schemas/validate-output-schema.js +219 -0
  769. package/dist/tools/sentry-handler.js +6 -1
  770. package/dist/tools/skill-bootstrap-handler.js +7 -4
  771. package/dist/tools/spec-prompt-handler.js +3 -3
  772. package/dist/tools/status-handler.js +4 -0
  773. package/dist/tools/storage-bundle-handler.d.ts +9 -0
  774. package/dist/tools/storage-bundle-handler.js +29 -0
  775. package/dist/tools/storage-paths-handler.d.ts +9 -0
  776. package/dist/tools/storage-paths-handler.js +17 -0
  777. package/dist/tools/suggest-mcp-server.js +11 -5
  778. package/dist/tools/suggest-mcps.js +29 -9
  779. package/dist/tools/suggest-tooling/advanced-testing-catalog.js +4 -5
  780. package/dist/tools/suggest-tooling/build-tool-catalog.js +2 -1
  781. package/dist/tools/suggest-tooling/css-framework-catalog.js +13 -7
  782. package/dist/tools/suggest-tooling/framework-catalog.js +3 -5
  783. package/dist/tools/suggest-tooling/frontend-perf-catalog.js +2 -6
  784. package/dist/tools/suggest-tooling/handler.js +10 -4
  785. package/dist/tools/suggest-tooling/hypermedia-catalog.js +11 -3
  786. package/dist/tools/suggest-tooling/linting-catalog.js +4 -7
  787. package/dist/tools/suggest-tooling/llm-security-catalog.js +2 -1
  788. package/dist/tools/suggest-tooling/local-first-catalog.js +7 -5
  789. package/dist/tools/suggest-tooling/observability-catalog.js +3 -4
  790. package/dist/tools/suggest-tooling/otel-catalog.js +4 -1
  791. package/dist/tools/suggest-tooling/resilience-catalog.js +16 -5
  792. package/dist/tools/suggest-tooling/skills-catalog.js +10 -9
  793. package/dist/tools/suggest-tooling/supply-chain-catalog.js +2 -3
  794. package/dist/tools/supabase-handler.js +2 -1
  795. package/dist/tools/sync-spec-state-handler.d.ts +1 -1
  796. package/dist/tools/sync-spec-state-handler.js +1 -1
  797. package/dist/tools/token-intelligence-handler.js +2 -2
  798. package/dist/tools/token-recording.js +2 -2
  799. package/dist/tools/token-savings-handler.js +2 -2
  800. package/dist/tools/tool-entry.d.ts +4 -4
  801. package/dist/tools/tool-entry.js +3 -3
  802. package/dist/tools/tool-registry/core-tools.js +162 -15
  803. package/dist/tools/tool-registry/group-infra.js +37 -122
  804. package/dist/tools/tool-registry/group-quality-compliance.js +31 -38
  805. package/dist/tools/tool-registry/inventory.d.ts +2 -0
  806. package/dist/tools/tool-registry/inventory.js +2 -0
  807. package/dist/tools/tool-registry-helpers.d.ts +3 -3
  808. package/dist/tools/tool-registry-helpers.js +3 -3
  809. package/dist/tools/tool-usage-report/registered-tools.d.ts +1 -1
  810. package/dist/tools/tool-usage-report/registered-tools.js +3 -15
  811. package/dist/tools/update-status/approval-gates.d.ts +13 -0
  812. package/dist/tools/update-status/approval-gates.js +84 -0
  813. package/dist/tools/update-status/batch.js +4 -2
  814. package/dist/tools/update-status/dod-gates.d.ts +6 -24
  815. package/dist/tools/update-status/dod-gates.js +60 -135
  816. package/dist/tools/update-status/done-receipt-verifier.d.ts +15 -0
  817. package/dist/tools/update-status/done-receipt-verifier.js +158 -0
  818. package/dist/tools/update-status/evidence-gate.js +190 -3
  819. package/dist/tools/update-status/file-sync.d.ts +2 -1
  820. package/dist/tools/update-status/file-sync.js +80 -18
  821. package/dist/tools/update-status/gate-harness.d.ts +7 -0
  822. package/dist/tools/update-status/gate-harness.js +8 -0
  823. package/dist/tools/update-status/index.d.ts +2 -0
  824. package/dist/tools/update-status/index.js +307 -367
  825. package/dist/tools/update-status/qa-gate.d.ts +1 -1
  826. package/dist/tools/update-status/qa-gate.js +2 -2
  827. package/dist/tools/update-status/response-builder.js +3 -3
  828. package/dist/tools/update-status/side-effects.d.ts +2 -0
  829. package/dist/tools/update-status/side-effects.js +32 -39
  830. package/dist/tools/update-status/transition-guard.d.ts +4 -2
  831. package/dist/tools/update-status/transition-guard.js +89 -25
  832. package/dist/tools/update-status-actions.d.ts +4 -2
  833. package/dist/tools/update-status-actions.js +16 -14
  834. package/dist/tools/update-status-convention-gate.js +24 -23
  835. package/dist/tools/update-status-reconcile.js +2 -2
  836. package/dist/tools/usage-report.js +1 -16
  837. package/dist/tools/usage-stats.js +1 -18
  838. package/dist/tools/usage-tracking.d.ts +4 -0
  839. package/dist/tools/usage-tracking.js +20 -0
  840. package/dist/tools/validate-api-contract-handler.js +3 -3
  841. package/dist/tools/validate-lint.d.ts +1 -0
  842. package/dist/tools/validate-lint.js +21 -14
  843. package/dist/tools/validate.d.ts +4 -1
  844. package/dist/tools/validate.js +319 -31
  845. package/dist/transports/http-transport.js +87 -66
  846. package/dist/transports/mcp-types.d.ts +0 -2
  847. package/dist/transports/middleware/with-telemetry.js +3 -2
  848. package/dist/transports/session-context.js +1 -1
  849. package/dist/types/abortable-process.d.ts +2 -0
  850. package/dist/types/advanced-framework.js +0 -2
  851. package/dist/types/atomic-upgrade.d.ts +71 -0
  852. package/dist/types/atomic-upgrade.js +2 -0
  853. package/dist/types/cascade-hooks.d.ts +1 -1
  854. package/dist/types/ci.d.ts +0 -4
  855. package/dist/types/ci.js +0 -2
  856. package/dist/types/clarification-token.d.ts +1 -1
  857. package/dist/types/claude-code-runtime.d.ts +0 -27
  858. package/dist/types/commercial-migration.d.ts +17 -0
  859. package/dist/types/commercial-migration.js +2 -0
  860. package/dist/types/common/primitives.d.ts +0 -2
  861. package/dist/types/core-bridge.d.ts +81 -10
  862. package/dist/types/crash-shield-framework-rules.d.ts +24 -0
  863. package/dist/types/crash-shield-framework-rules.js +2 -0
  864. package/dist/types/dashboard.d.ts +3 -7
  865. package/dist/types/data-gc.d.ts +16 -0
  866. package/dist/types/deploy.js +0 -2
  867. package/dist/types/docs.d.ts +0 -1
  868. package/dist/types/durable-job.d.ts +78 -0
  869. package/dist/types/durable-job.js +2 -0
  870. package/dist/types/durable-validation.d.ts +158 -0
  871. package/dist/types/durable-validation.js +166 -0
  872. package/dist/types/errors/structured-error.d.ts +3 -3
  873. package/dist/types/estimation.d.ts +4 -0
  874. package/dist/types/evidence-gates.d.ts +17 -1
  875. package/dist/types/execution.d.ts +45 -0
  876. package/dist/types/gemini-integration.d.ts +0 -11
  877. package/dist/types/handoff-artifacts.d.ts +43 -0
  878. package/dist/types/hooks-advanced.d.ts +0 -13
  879. package/dist/types/impact-detection.d.ts +2 -2
  880. package/dist/types/index.d.ts +4 -6
  881. package/dist/types/index.js +3 -5
  882. package/dist/types/infrastructure.js +0 -2
  883. package/dist/types/kiro-integration.d.ts +0 -6
  884. package/dist/types/lifecycle.js +0 -2
  885. package/dist/types/migration/canonical-storage.d.ts +37 -0
  886. package/dist/types/migration/canonical-storage.js +2 -0
  887. package/dist/types/migration/index.d.ts +1 -1
  888. package/dist/types/native-worker.d.ts +48 -0
  889. package/dist/types/native-worker.js +2 -0
  890. package/dist/types/network-policy.d.ts +12 -0
  891. package/dist/types/network-policy.js +2 -0
  892. package/dist/types/oauth.js +0 -2
  893. package/dist/types/observability.d.ts +32 -0
  894. package/dist/types/outbox-worker.d.ts +35 -0
  895. package/dist/types/outbox-worker.js +11 -0
  896. package/dist/types/permissions-config.d.ts +0 -27
  897. package/dist/types/permissions-config.js +0 -2
  898. package/dist/types/plugin-install.d.ts +0 -11
  899. package/dist/types/plugin-install.js +0 -2
  900. package/dist/types/portal.d.ts +1 -0
  901. package/dist/types/product-public.d.ts +75 -0
  902. package/dist/types/product-public.js +2 -0
  903. package/dist/types/project/inputs.d.ts +2 -0
  904. package/dist/types/project/lint-scaffolder.d.ts +1 -1
  905. package/dist/types/project/mfe-detection.js +0 -2
  906. package/dist/types/project/platform-mobile.js +0 -2
  907. package/dist/types/project/platform-specialty.js +0 -2
  908. package/dist/types/project-knowledge-graph.d.ts +7 -0
  909. package/dist/types/runtime-database.d.ts +10 -0
  910. package/dist/types/runtime-database.js +2 -0
  911. package/dist/types/runtime-policy.d.ts +51 -0
  912. package/dist/types/runtime-policy.js +2 -0
  913. package/dist/types/safety.d.ts +4 -5
  914. package/dist/types/schema-registry.d.ts +12 -0
  915. package/dist/types/schema-registry.js +2 -0
  916. package/dist/types/security.d.ts +52 -0
  917. package/dist/types/session-safeguard.d.ts +0 -31
  918. package/dist/types/skill-registry.js +0 -2
  919. package/dist/types/spec/canonical-repair.d.ts +81 -0
  920. package/dist/types/spec/canonical-repair.js +2 -0
  921. package/dist/types/spec/core.d.ts +14 -0
  922. package/dist/types/spec/index.d.ts +1 -0
  923. package/dist/types/spec/index.js +1 -0
  924. package/dist/types/spec/inputs.d.ts +31 -0
  925. package/dist/types/spec-format.d.ts +24 -0
  926. package/dist/types/spec-lock-v2.d.ts +13 -7
  927. package/dist/types/spec-lock-v2.js +1 -1
  928. package/dist/types/spec-registry.js +0 -2
  929. package/dist/types/storage-bundle.d.ts +13 -0
  930. package/dist/types/storage-bundle.js +2 -0
  931. package/dist/types/storage-catalog.d.ts +18 -0
  932. package/dist/types/storage-catalog.js +2 -0
  933. package/dist/types/team-planner.js +0 -2
  934. package/dist/types/technology-registry.d.ts +35 -0
  935. package/dist/types/technology-registry.js +2 -0
  936. package/dist/types/technology-symbols.generated.d.ts +117 -0
  937. package/dist/types/technology-symbols.generated.js +2 -0
  938. package/dist/types/telemetry.d.ts +7 -4
  939. package/dist/types/transport.d.ts +2 -2
  940. package/dist/types/usage.d.ts +1 -36
  941. package/dist/types/usage.js +1 -1
  942. package/dist/types/validate-worker.d.ts +50 -0
  943. package/dist/types/validate-worker.js +2 -0
  944. package/dist/types/validation-evidence.d.ts +1 -1
  945. package/dist/types/validation-receipt.d.ts +104 -0
  946. package/dist/types/validation-receipt.js +2 -0
  947. package/dist/types/validation.d.ts +2 -2
  948. package/package.json +36 -21
  949. package/planu-native.json +1 -1
  950. package/planu-plugin.json +23 -40
  951. package/scripts/lib/pending-release-file.mjs +93 -0
  952. package/src/i18n/messages/en.json +0 -41
  953. package/src/i18n/messages/es.json +0 -41
  954. package/src/i18n/messages/pt.json +0 -41
  955. package/dist/cli/commands/activate.d.ts +0 -14
  956. package/dist/cli/commands/activate.js +0 -174
  957. package/dist/config/license-plans.json +0 -244
  958. package/dist/config/server-instructions.ts +0 -121
  959. package/dist/config/version-defaults.ts +0 -76
  960. package/dist/config/version.ts +0 -18
  961. package/dist/engine/ai-integration/gemini/settings-generator.d.ts +0 -4
  962. package/dist/engine/ai-integration/gemini/settings-generator.js +0 -195
  963. package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +0 -6
  964. package/dist/engine/ai-integration/kiro/hooks-generator.js +0 -75
  965. package/dist/engine/hooks/full-spectrum-generator.d.ts +0 -32
  966. package/dist/engine/hooks/full-spectrum-generator.js +0 -117
  967. package/dist/engine/license-validator/config-loader.d.ts +0 -5
  968. package/dist/engine/license-validator/config-loader.js +0 -16
  969. package/dist/engine/license-validator/core.d.ts +0 -15
  970. package/dist/engine/license-validator/core.js +0 -151
  971. package/dist/engine/license-validator/fingerprint.d.ts +0 -3
  972. package/dist/engine/license-validator/fingerprint.js +0 -17
  973. package/dist/engine/license-validator/lemon-squeezy.d.ts +0 -5
  974. package/dist/engine/license-validator/lemon-squeezy.js +0 -55
  975. package/dist/engine/license-validator.d.ts +0 -5
  976. package/dist/engine/license-validator.js +0 -6
  977. package/dist/engine/product-intelligence/index.d.ts +0 -7
  978. package/dist/engine/product-intelligence/index.js +0 -211
  979. package/dist/engine/session/auto-save.d.ts +0 -18
  980. package/dist/engine/session/auto-save.js +0 -98
  981. package/dist/engine/session/context-snapshot.d.ts +0 -8
  982. package/dist/engine/session/context-snapshot.js +0 -49
  983. package/dist/engine/session/memory-sync.d.ts +0 -12
  984. package/dist/engine/session/memory-sync.js +0 -34
  985. package/dist/engine/session/session-diff.d.ts +0 -11
  986. package/dist/engine/session/session-diff.js +0 -42
  987. package/dist/engine/session/session-merge.d.ts +0 -12
  988. package/dist/engine/session/session-merge.js +0 -55
  989. package/dist/engine/session-safeguard/checkpoint-runner.d.ts +0 -4
  990. package/dist/engine/session-safeguard/checkpoint-runner.js +0 -70
  991. package/dist/engine/session-safeguard/learnings-buffer.d.ts +0 -16
  992. package/dist/engine/session-safeguard/learnings-buffer.js +0 -114
  993. package/dist/engine/session-safeguard/precompaction-drain.d.ts +0 -10
  994. package/dist/engine/session-safeguard/precompaction-drain.js +0 -82
  995. package/dist/engine/session-safeguard/unpushed-detector.d.ts +0 -7
  996. package/dist/engine/session-safeguard/unpushed-detector.js +0 -59
  997. package/dist/engine/spec-changelog/core.d.ts +0 -16
  998. package/dist/engine/spec-changelog/core.js +0 -176
  999. package/dist/engine/spec-changelog/diff.d.ts +0 -18
  1000. package/dist/engine/spec-changelog/diff.js +0 -121
  1001. package/dist/engine/spec-changelog/index.d.ts +0 -3
  1002. package/dist/engine/spec-changelog/index.js +0 -4
  1003. package/dist/engine/telemetry/geo-resolver.d.ts +0 -9
  1004. package/dist/engine/telemetry/geo-resolver.js +0 -43
  1005. package/dist/engine/trial-engine.d.ts +0 -5
  1006. package/dist/engine/trial-engine.js +0 -14
  1007. package/dist/engine/usage-tracker/rate-check.d.ts +0 -7
  1008. package/dist/engine/usage-tracker/rate-check.js +0 -18
  1009. package/dist/engine/usage-tracker/rate-limiter.d.ts +0 -14
  1010. package/dist/engine/usage-tracker/rate-limiter.js +0 -73
  1011. package/dist/engine/usage-tracker/trial.d.ts +0 -27
  1012. package/dist/engine/usage-tracker/trial.js +0 -49
  1013. package/dist/engine/webhook/event-handlers.d.ts +0 -25
  1014. package/dist/engine/webhook/event-handlers.js +0 -89
  1015. package/dist/engine/webhook/index.d.ts +0 -4
  1016. package/dist/engine/webhook/index.js +0 -5
  1017. package/dist/engine/webhook/server.d.ts +0 -12
  1018. package/dist/engine/webhook/server.js +0 -249
  1019. package/dist/engine/webhook/signature.d.ts +0 -16
  1020. package/dist/engine/webhook/signature.js +0 -49
  1021. package/dist/storage/data-dir-discovery.d.ts +0 -31
  1022. package/dist/storage/data-dir-discovery.js +0 -140
  1023. package/dist/storage/license-store.d.ts +0 -6
  1024. package/dist/storage/license-store.js +0 -91
  1025. package/dist/storage/migrations/cwd-to-absolute.d.ts +0 -25
  1026. package/dist/storage/migrations/cwd-to-absolute.js +0 -281
  1027. package/dist/storage/session-store.d.ts +0 -20
  1028. package/dist/storage/session-store.js +0 -128
  1029. package/dist/tools/activate-license.d.ts +0 -6
  1030. package/dist/tools/activate-license.js +0 -132
  1031. package/dist/tools/checkpoint-handler.d.ts +0 -3
  1032. package/dist/tools/checkpoint-handler.js +0 -130
  1033. package/dist/tools/create-spec/adapters/prior-decisions-hint.d.ts +0 -14
  1034. package/dist/tools/create-spec/adapters/prior-decisions-hint.js +0 -30
  1035. package/dist/tools/export-session.d.ts +0 -3
  1036. package/dist/tools/export-session.js +0 -90
  1037. package/dist/tools/init-project/ancestor-data-detector.d.ts +0 -22
  1038. package/dist/tools/init-project/ancestor-data-detector.js +0 -81
  1039. package/dist/tools/license-gate.d.ts +0 -18
  1040. package/dist/tools/license-gate.js +0 -222
  1041. package/dist/tools/license-status.d.ts +0 -3
  1042. package/dist/tools/license-status.js +0 -93
  1043. package/dist/tools/list-sessions.d.ts +0 -3
  1044. package/dist/tools/list-sessions.js +0 -46
  1045. package/dist/tools/planu-session-checkpoint.d.ts +0 -6
  1046. package/dist/tools/planu-session-checkpoint.js +0 -42
  1047. package/dist/tools/restore-session.d.ts +0 -3
  1048. package/dist/tools/restore-session.js +0 -71
  1049. package/dist/tools/spec-history.d.ts +0 -3
  1050. package/dist/tools/spec-history.js +0 -59
  1051. package/dist/tools/update-status/force-done-audit.d.ts +0 -2
  1052. package/dist/tools/update-status/force-done-audit.js +0 -23
  1053. package/dist/tools/webhook.d.ts +0 -6
  1054. package/dist/tools/webhook.js +0 -150
  1055. package/dist/types/changelog.d.ts +0 -49
  1056. package/dist/types/changelog.js +0 -3
  1057. package/dist/types/licensing.d.ts +0 -109
  1058. package/dist/types/licensing.js +0 -4
  1059. package/dist/types/migration/cwd-to-absolute.d.ts +0 -8
  1060. package/dist/types/migration/cwd-to-absolute.js +0 -3
  1061. package/dist/types/product-intelligence.d.ts +0 -60
  1062. package/dist/types/product-intelligence.js +0 -3
  1063. package/dist/types/session.d.ts +0 -84
  1064. package/dist/types/session.js +0 -3
  1065. package/dist/types/webhook.d.ts +0 -62
  1066. package/dist/types/webhook.js +0 -4
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/llm-security-test-generator.ts — SPEC-045
2
- // Generates LLM security baseline test scaffolds.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  // Security baseline comment prepended to generated test files
4
3
  const SECURITY_BASELINE_COMMENT = '// Security baseline — complement with formal pentest';
5
4
  /**
@@ -200,7 +199,9 @@ export function generateLlmSecurityTestFiles(spec, testDir, language, autoGenera
200
199
  const slug = spec.id.toLowerCase().replace(/[^a-z0-9]/g, '-');
201
200
  const ext = getFileExtension(language);
202
201
  const content = generateLlmSecurityTestContent(spec.title, language);
203
- const framework = language === 'python' ? 'pytest' : 'vitest';
202
+ const framework = language === 'python'
203
+ ? technologyValue('technology-pytest-2b0121')
204
+ : technologyValue('technology-vitest-a9127f');
204
205
  return [
205
206
  {
206
207
  path: `${testDir}/security/${slug}.llm-security.${ext}`,
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/local-first-test-generator.ts — SPEC-047
2
- // Generates local-first property-based tests and offline test scaffolds.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  const PBT_COMMENT = '// Property-based tests — complement with fast-check or similar library';
4
3
  /**
5
4
  * Returns true when the project has local-first architecture detected.
@@ -297,7 +296,9 @@ export function generateLocalFirstTestFiles(spec, testDir, language, autoGenerat
297
296
  const slug = spec.id.toLowerCase().replace(/[^a-z0-9]/g, '-');
298
297
  const ext = getFileExtension(language);
299
298
  const content = generateLocalFirstTestContent(spec.title, language);
300
- const framework = language === 'python' ? 'pytest' : 'vitest';
299
+ const framework = language === 'python'
300
+ ? technologyValue('technology-pytest-2b0121')
301
+ : technologyValue('technology-vitest-a9127f');
301
302
  return [
302
303
  {
303
304
  path: `${testDir}/local-first/${slug}.local-first.${ext}`,
@@ -1,6 +1,4 @@
1
- // tools/generate-tests/generators/mcp-tests-generator.ts
2
- // SPEC-016b: Generates test scaffolds for MCP servers.
3
- // Criterion 6: tool registration, valid call, invalid call, resource read, e2e smoke test.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
4
2
  import { isMcpServerProject } from '../../../engine/detectors/mcp-server-detector.js';
5
3
  // === Detection ===
6
4
  export function isMcpProject(knowledge) {
@@ -69,9 +67,11 @@ export function generateMcpTestDefs(title, testDir) {
69
67
  }
70
68
  // === Test file content generators ===
71
69
  function buildImportLine(testFramework, language) {
72
- const isVitest = testFramework === 'vitest';
73
- const source = isVitest ? 'vitest' : 'jest';
74
- if (language === 'typescript') {
70
+ const isVitest = testFramework === technologyValue('technology-vitest-a9127f');
71
+ const source = isVitest
72
+ ? technologyValue('technology-vitest-a9127f')
73
+ : technologyValue('technology-jest-35e99f');
74
+ if (language === technologyValue('technology-typescript-969545')) {
75
75
  return `import { describe, it, expect, beforeAll, afterAll } from '${source}';`;
76
76
  }
77
77
  return `const { describe, it, expect, beforeAll, afterAll } = require('${source}');`;
@@ -152,8 +152,10 @@ function buildMcpUnitTestContent(title, testFramework, language) {
152
152
  return lines.join('\n');
153
153
  }
154
154
  function buildMcpIntegrationTestContent(title, testFramework) {
155
- const isVitest = testFramework === 'vitest';
156
- const source = isVitest ? 'vitest' : 'jest';
155
+ const isVitest = testFramework === technologyValue('technology-vitest-a9127f');
156
+ const source = isVitest
157
+ ? technologyValue('technology-vitest-a9127f')
158
+ : technologyValue('technology-jest-35e99f');
157
159
  const lines = [
158
160
  `// Integration tests for MCP server: ${title}`,
159
161
  '// SPEC-016b: E2E initialize handshake, resource reads, concurrent calls',
@@ -218,7 +220,7 @@ function buildMcpIntegrationTestContent(title, testFramework) {
218
220
  // === TestFile builders ===
219
221
  export function generateMcpTestFiles(spec, testDir, testFramework, language) {
220
222
  const slug = spec.id.toLowerCase().replace(/[^a-z0-9]/g, '-');
221
- const ext = language === 'typescript' ? 'ts' : 'js';
223
+ const ext = language === technologyValue('technology-typescript-969545') ? 'ts' : 'js';
222
224
  return [
223
225
  {
224
226
  path: `${testDir}/unit/${slug}.mcp.test.${ext}`,
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/microservices/index.ts SPEC-058b Section E
2
- // Public API for the microservices test generator. Re-exports all public symbols.
1
+ import { technologyValue } from '../../../../engine/technology-registry.js';
3
2
  import { detectBroker, detectServiceMesh } from './detectors.js';
4
3
  import { buildTsMicroservicesTest } from './ts-scaffold.js';
5
4
  import { buildPythonMicroservicesTest } from './python-scaffold.js';
@@ -10,7 +9,7 @@ export function generateMicroservicesTestFiles(spec, testDir, framework, languag
10
9
  const mesh = detectServiceMesh(knowledge);
11
10
  const isPython = language === 'python';
12
11
  const ext = isPython ? 'py' : testExt;
13
- const fw = isPython ? 'pytest' : framework;
12
+ const fw = isPython ? technologyValue('technology-pytest-2b0121') : framework;
14
13
  const content = isPython
15
14
  ? buildPythonMicroservicesTest(spec.title, broker, mesh)
16
15
  : buildTsMicroservicesTest(spec.title, broker, mesh);
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/otel-test-generator.ts — SPEC-044
2
- // Generates instrumentation test scaffolds for projects with OpenTelemetry.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  /**
4
3
  * Returns true when the project has OTel installed.
5
4
  */
@@ -259,7 +258,11 @@ export function generateOtelTestFiles(spec, testDir, language, autoGenerate) {
259
258
  const slug = spec.id.toLowerCase().replace(/[^a-z0-9]/g, '-');
260
259
  const ext = getFileExtension(language);
261
260
  const content = generateOtelTestContent(spec.title, language);
262
- const framework = language === 'python' ? 'pytest' : language === 'go' ? 'go-test' : 'vitest';
261
+ const framework = language === 'python'
262
+ ? technologyValue('technology-pytest-2b0121')
263
+ : language === 'go'
264
+ ? 'go-test'
265
+ : technologyValue('technology-vitest-a9127f');
263
266
  return [
264
267
  {
265
268
  path: `${testDir}/instrumentation/${slug}.otel.${ext}`,
@@ -1,7 +1,4 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
3
- // security/detectors.ts — SPEC-058b Section G
4
- // Signal constants and detector functions for auth, file upload, and API presence.
1
+ import { technologyValue } from '../../../../engine/technology-registry.js';
5
2
  export const AUTH_SIGNALS = [
6
3
  'jwt',
7
4
  'oauth',
@@ -9,7 +6,7 @@ export const AUTH_SIGNALS = [
9
6
  'keycloak',
10
7
  'auth0',
11
8
  'clerk',
12
- 'supabase',
9
+ technologyValue('technology-supabase-4d7594'),
13
10
  'session',
14
11
  'cookie-session',
15
12
  'express-session',
@@ -1,6 +1,4 @@
1
- // security/index.ts SPEC-058b Section G
2
- // Public API: re-exports all security generator functions and
3
- // implements generateSecurityTestFiles() as the main entry point.
1
+ import { technologyValue } from '../../../../engine/technology-registry.js';
4
2
  import { detectAuth, detectFileUpload, hasPublicApi } from './detectors.js';
5
3
  import { buildTsSecurityTest } from './ts-scaffold.js';
6
4
  import { buildPythonSecurityTest } from './python-scaffold.js';
@@ -12,7 +10,7 @@ export function generateSecurityTestFiles(spec, testDir, framework, language, te
12
10
  const publicApi = hasPublicApi(knowledge);
13
11
  const isPython = language === 'python';
14
12
  const ext = isPython ? 'py' : testExt;
15
- const fw = isPython ? 'pytest' : framework;
13
+ const fw = isPython ? technologyValue('technology-pytest-2b0121') : framework;
16
14
  const content = isPython
17
15
  ? buildPythonSecurityTest(spec.title, auth, upload, publicApi)
18
16
  : buildTsSecurityTest(spec.title, auth, upload, publicApi);
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/supply-chain-test-generator.ts — SPEC-046
2
- // Generates supply chain validation runbook and test definitions.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  /**
4
3
  * Returns true when the project has supply chain gaps detected.
5
4
  */
@@ -139,7 +138,7 @@ function getRunbookExtension(_language) {
139
138
  export function generateSupplyChainTestFiles(spec, testDir, language, autoGenerate) {
140
139
  const slug = spec.id.toLowerCase().replace(/[^a-z0-9]/g, '-');
141
140
  const ext = getRunbookExtension(language);
142
- const content = language === 'typescript' || language === 'javascript'
141
+ const content = language === technologyValue('technology-typescript-969545') || language === 'javascript'
143
142
  ? generateNodeRunbook(spec.title, slug)
144
143
  : generateGenericRunbook(spec.title, slug, language);
145
144
  return [
@@ -1,29 +1,26 @@
1
- // SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
2
- // — must enumerate framework names by design; no detection logic to migrate.
3
- // tools/generate-tests/generators/visual-regression-generator.ts — SPEC-058a Section C
4
- // Generates visual regression and frontend screenshot test scaffolds.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
5
2
  const UI_FRAMEWORKS = [
6
- 'react',
7
- 'vue',
8
- 'angular',
9
- 'svelte',
3
+ technologyValue('technology-react-275976'),
4
+ technologyValue('technology-vue-564382'),
5
+ technologyValue('technology-angular-a39f89'),
6
+ technologyValue('technology-svelte-c190ac'),
10
7
  'next',
11
- 'nextjs',
12
- 'next.js',
13
- 'nuxt',
14
- 'sveltekit',
8
+ technologyValue('technology-nextjs-c93379'),
9
+ technologyValue('technology-next-js-0d857f'),
10
+ technologyValue('technology-nuxt-22c407'),
11
+ technologyValue('technology-sveltekit-eefb03'),
15
12
  'svelte-kit',
16
13
  'solid',
17
14
  'solidjs',
18
15
  'preact',
19
16
  'qwik',
20
- 'remix',
17
+ technologyValue('technology-remix-0c5d96'),
21
18
  'gatsby',
22
- 'astro',
19
+ technologyValue('technology-astro-23661e'),
23
20
  ];
24
21
  const DARK_MODE_SIGNALS = [
25
- 'tailwind',
26
- 'shadcn',
22
+ technologyValue('technology-tailwind-44c8cf'),
23
+ technologyValue('technology-shadcn-d27663'),
27
24
  'radix',
28
25
  'mui',
29
26
  'chakra',
@@ -290,7 +287,7 @@ function getFileExtension(language) {
290
287
  */
291
288
  export function generateVisualRegressionTestFiles(spec, testDir, framework, language, testExt, autoGenerate) {
292
289
  const ext = language === 'python' ? 'py' : getFileExtension(language);
293
- const resolvedFramework = framework === 'cypress' ? 'cypress' : 'playwright';
290
+ const resolvedFramework = framework === 'cypress' ? 'cypress' : technologyValue('technology-playwright-7827e8');
294
291
  const content = generateVisualTestContent(spec.title, spec.slug, framework, language);
295
292
  return [
296
293
  {
@@ -1,5 +1,4 @@
1
- // tools/generate-tests/generators/websocket-test-generator.ts SPEC-058a Section D
2
- // Generates WebSocket test scaffolds: connection lifecycle, reconnection, ordering, heartbeat.
1
+ import { technologyValue } from '../../../engine/technology-registry.js';
3
2
  const WS_SIGNALS = [
4
3
  'ws',
5
4
  'socket.io',
@@ -227,7 +226,7 @@ class Test${cls}WebSocket:
227
226
  export function generateWebSocketTestFiles(spec, testDir, framework, language, testExt, autoGenerate) {
228
227
  const isPython = language === 'python';
229
228
  const resolvedExt = isPython ? 'py' : testExt;
230
- const resolvedFramework = isPython ? 'pytest' : framework;
229
+ const resolvedFramework = isPython ? technologyValue('technology-pytest-2b0121') : framework;
231
230
  const content = isPython
232
231
  ? buildPythonWebSocketTest(spec.title)
233
232
  : buildTsWebSocketTest(spec.title);
@@ -1,19 +1,18 @@
1
- // tools/generate-tests/test-helpers.ts Shared helpers for generate-tests
2
- // Extracted from generate-tests.ts to stay under 400-line limit
1
+ import { technologyValue } from '../../engine/technology-registry.js';
3
2
  export function inferTestFramework(language, stack) {
4
- if (stack.includes('vitest')) {
5
- return 'vitest';
3
+ if (stack.includes(technologyValue('technology-vitest-a9127f'))) {
4
+ return technologyValue('technology-vitest-a9127f');
6
5
  }
7
- if (stack.includes('jest')) {
8
- return 'jest';
6
+ if (stack.includes(technologyValue('technology-jest-35e99f'))) {
7
+ return technologyValue('technology-jest-35e99f');
9
8
  }
10
- if (stack.includes('pytest')) {
11
- return 'pytest';
9
+ if (stack.includes(technologyValue('technology-pytest-2b0121'))) {
10
+ return technologyValue('technology-pytest-2b0121');
12
11
  }
13
12
  const defaults = {
14
- typescript: 'vitest',
15
- javascript: 'vitest',
16
- python: 'pytest',
13
+ typescript: technologyValue('technology-vitest-a9127f'),
14
+ javascript: technologyValue('technology-vitest-a9127f'),
15
+ python: technologyValue('technology-pytest-2b0121'),
17
16
  go: 'go-test',
18
17
  rust: 'cargo-test',
19
18
  java: 'junit',
@@ -21,7 +20,7 @@ export function inferTestFramework(language, stack) {
21
20
  swift: 'xctest',
22
21
  dart: 'flutter-test',
23
22
  };
24
- return defaults[language] ?? 'vitest';
23
+ return defaults[language] ?? technologyValue('technology-vitest-a9127f');
25
24
  }
26
25
  export function inferTestDir(language) {
27
26
  const dirs = {
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../engine/technology-registry.js';
1
2
  // tools/generate-tests-content.ts — Test scaffold content generators
2
3
  // Pure functions that return test file content strings
3
4
  import { generateXCTestContent, generateAndroidTestContent } from './generate-tests-mobile.js';
@@ -15,7 +16,7 @@ export function generateUnitTestContent(title, _target, framework, language) {
15
16
  if (language === 'kotlin' && framework.includes('junit')) {
16
17
  return generateAndroidTestContent(title, 'unit', 'compose', 'mockk');
17
18
  }
18
- if (framework === 'pytest') {
19
+ if (framework === technologyValue('technology-pytest-2b0121')) {
19
20
  return `# Unit tests for: ${title}
20
21
  # Generated by Planu SDD MCP Server
21
22
 
@@ -85,7 +86,7 @@ describe('${title}', () => {
85
86
  `;
86
87
  }
87
88
  export function generateIntegrationTestContent(title, framework, _language) {
88
- if (framework === 'pytest') {
89
+ if (framework === technologyValue('technology-pytest-2b0121')) {
89
90
  return `# Integration tests for: ${title}
90
91
  # Generated by Planu SDD MCP Server
91
92
 
@@ -182,7 +183,7 @@ export function buildTestCommands(existingCmd, framework) {
182
183
  const frameworkCmds = {
183
184
  vitest: ['npx vitest run', 'npx vitest run --coverage'],
184
185
  jest: ['npx jest', 'npx jest --coverage'],
185
- pytest: ['pytest', 'pytest --cov'],
186
+ pytest: [technologyValue('technology-pytest-2b0121'), 'pytest --cov'],
186
187
  'go-test': ['go test ./...', 'go test -cover ./...'],
187
188
  'cargo-test': ['cargo test'],
188
189
  };
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../engine/technology-registry.js';
1
2
  // tools/generate-tests.ts — Generate test scaffold from spec
2
3
  // Uses project knowledge + spec to create test definitions
3
4
  import { t, ti } from '../i18n/index.js';
@@ -66,11 +67,11 @@ export async function handleGenerateTests(args) {
66
67
  }
67
68
  // E2E test file
68
69
  if (spec.target === 'frontend' || spec.target === 'fullstack') {
69
- const e2eFramework = knowledge.stack.includes('playwright')
70
- ? 'playwright'
70
+ const e2eFramework = knowledge.stack.includes(technologyValue('technology-playwright-7827e8'))
71
+ ? technologyValue('technology-playwright-7827e8')
71
72
  : knowledge.stack.includes('cypress')
72
73
  ? 'cypress'
73
- : 'playwright';
74
+ : technologyValue('technology-playwright-7827e8');
74
75
  testFiles.push({
75
76
  path: `${testDir}/e2e/${slug}.e2e.test.${testExt}`,
76
77
  framework: e2eFramework,
@@ -149,7 +150,9 @@ export async function handleGenerateTests(args) {
149
150
  for (const file of result.testFiles) {
150
151
  lines.push(`#### \`${file.path}\``);
151
152
  lines.push('');
152
- const ext = file.path.endsWith('.py') ? 'python' : 'typescript';
153
+ const ext = file.path.endsWith('.py')
154
+ ? 'python'
155
+ : technologyValue('technology-typescript-969545');
153
156
  lines.push(`\`\`\`${ext}`);
154
157
  lines.push(file.content);
155
158
  lines.push('```');
@@ -1,5 +1,5 @@
1
1
  import type { ToolResult, GitConfig } from '../../types/index.js';
2
- export declare function handleCreateBranch(projectId: string, specId: string | undefined, config?: GitConfig): Promise<ToolResult>;
2
+ export declare function handleCreateBranch(projectId: string, specId: string | undefined, config?: GitConfig, resolvedProjectPath?: string): Promise<ToolResult>;
3
3
  export declare function handleCheckBranch(projectId: string, _specId: string | undefined, config?: GitConfig): Promise<ToolResult>;
4
4
  /**
5
5
  * Auto-setup: detect git workflow, sync base branch, create feature branch.
@@ -19,11 +19,12 @@ function randomSuffix() {
19
19
  .toString(16)
20
20
  .padStart(8, '0');
21
21
  }
22
- export async function handleCreateBranch(projectId, specId, config) {
22
+ export async function handleCreateBranch(projectId, specId, config, resolvedProjectPath) {
23
23
  if (!specId) {
24
24
  return compactError('❌ Error: specId is required for create-branch action');
25
25
  }
26
- const projectPath = await resolveProjectPath(projectId);
26
+ const suppliedPath = resolvedProjectPath?.trim();
27
+ const projectPath = suppliedPath && suppliedPath.length > 0 ? suppliedPath : await resolveProjectPath(projectId);
27
28
  const spec = await specStore.getSpec(projectId, specId);
28
29
  if (!spec) {
29
30
  return compactError(`❌ Error: Spec '${specId}' not found`);
@@ -1,6 +1,4 @@
1
- import { execFile as execFileCb } from 'node:child_process';
2
1
  import type { GitConfig, GitFlowType } from '../../types/index.js';
3
- export declare const execFile: typeof execFileCb.__promisify__;
4
2
  export interface GitExecutionOptions {
5
3
  signal?: AbortSignal;
6
4
  timeoutMs?: number;
@@ -1,8 +1,5 @@
1
- // tools/git/git-helpers.ts — Shared git utilities
2
- import { execFile as execFileCb } from 'node:child_process';
3
- import { promisify } from 'node:util';
4
1
  import { knowledgeStore } from '../../storage/index.js';
5
- export const execFile = promisify(execFileCb);
2
+ import { runAbortableProcess } from '../../engine/abortable-process-runner.js';
6
3
  /** Default branch prefixes by spec type. */
7
4
  export const DEFAULT_BRANCH_PREFIXES = {
8
5
  feature: 'feat',
@@ -19,12 +16,15 @@ export const DEFAULT_STALENESS_THRESHOLD = 50;
19
16
  /** Execute a git command in the project directory. */
20
17
  export async function git(projectPath, args, options = {}) {
21
18
  try {
22
- const result = await execFile('git', args, {
19
+ const result = await runAbortableProcess('git', args, {
23
20
  cwd: projectPath,
24
- maxBuffer: 1024 * 1024 * 10,
25
- timeout: options.timeoutMs ?? 30_000,
21
+ maxBufferBytes: 1024 * 1024 * 10,
22
+ timeoutMs: options.timeoutMs ?? 30_000,
26
23
  signal: options.signal,
27
24
  });
25
+ if (result.status !== 0 || result.error) {
26
+ throw result.error ?? new Error(result.stderr || `git exited with ${String(result.status)}`);
27
+ }
28
28
  return { stdout: result.stdout, stderr: result.stderr };
29
29
  }
30
30
  catch (err) {
@@ -4,12 +4,19 @@ import { detectAuth } from '../engine/github/auth.js';
4
4
  import { generatePRTitle, generatePRBody } from '../engine/github/pr-template.js';
5
5
  import { findLinkedPRs } from '../engine/github/spec-linker.js';
6
6
  import { validateSpecFormat } from '../core/spec-validator.js';
7
- import { execFile as nodeExecFile } from 'node:child_process';
8
- import { promisify } from 'node:util';
9
7
  import { readFile } from 'node:fs/promises';
8
+ import { runAbortableProcess } from '../engine/abortable-process-runner.js';
10
9
  /* v8 ignore next 3 -- default exec, always overridden in tests */
11
10
  const defaultExec = async (cmd, args) => {
12
- return promisify(nodeExecFile)(cmd, args, { maxBuffer: 10 * 1024 * 1024 });
11
+ const result = await runAbortableProcess(cmd, args, {
12
+ cwd: process.cwd(),
13
+ timeoutMs: 30_000,
14
+ maxBufferBytes: 10 * 1024 * 1024,
15
+ });
16
+ if (result.status !== 0 || result.error) {
17
+ throw result.error ?? new Error(result.stderr || `${cmd} exited with ${String(result.status)}`);
18
+ }
19
+ return { stdout: result.stdout, stderr: result.stderr };
13
20
  };
14
21
  export async function handleCreatePRFromSpec(args, exec = defaultExec) {
15
22
  const auth = await detectAuth(exec);
@@ -2,7 +2,7 @@
2
2
  // SPEC-715: heal_spec_docs is now the SINGLE tool that performs migrations.
3
3
  // list_specs is read-only; migrations were moved here.
4
4
  // SPEC-724: Added dryRun, backup flags and Jaccard goal-scenario drift warning.
5
- import { readFile, readdir, rm } from 'node:fs/promises';
5
+ import { readFile, readdir } from 'node:fs/promises';
6
6
  import { atomicWriteFile } from '../engine/safety/atomic-write-file.js';
7
7
  import { join } from 'node:path';
8
8
  import { hashProjectPath } from '../storage/base-store.js';
@@ -10,6 +10,7 @@ import { refreshProjectStatus } from '../engine/autopilot/state-updater.js';
10
10
  import { extractFilesFromSpecBody } from '../engine/spec-format/technical-md-populator.js';
11
11
  import { jaccard } from '../engine/spec-format/jaccard.js';
12
12
  import { replaceSectionInSpec } from '../engine/spec-format/replace-section.js';
13
+ import { executionRemove } from '../engine/execution/deadline-io.js';
13
14
  const SPANISH_INDICATORS = [
14
15
  'de',
15
16
  'del',
@@ -84,66 +85,18 @@ async function writeTechnicalMd(specDir, isDone, projectPath, specBody) {
84
85
  }
85
86
  const specMdPath = join(specDir, 'spec.md');
86
87
  if (extractedBody === null) {
87
- const removedInline = await removeTechnicalSectionIfPlaceholder(specMdPath);
88
- const removedLegacy = await removeLegacyTechnicalPlaceholder(join(specDir, 'technical.md'));
89
- return removedInline || removedLegacy;
90
- }
91
- const technicalBody = extractedBody;
92
- // SPEC-579: idempotency check — skip write if section already matches.
93
- try {
94
- const existing = await readFile(specMdPath, 'utf-8');
95
- const currentTechnical = extractTechnicalBodyLocal(existing);
96
- if (currentTechnical.trim() === technicalBody.trim()) {
97
- return false;
98
- }
99
- }
100
- catch {
101
- // spec.md missing — continue to write (replaceSectionInSpec will create the section)
102
- }
103
- await replaceSectionInSpec(specMdPath, 'Technical', technicalBody);
104
- return true;
105
- }
106
- async function removeLegacyTechnicalPlaceholder(technicalPath) {
107
- let legacy;
108
- try {
109
- legacy = await readFile(technicalPath, 'utf-8');
110
- }
111
- catch {
112
- return false;
113
- }
114
- if (!isPlaceholderTechnical(legacy)) {
115
88
  return false;
116
89
  }
117
- await rm(technicalPath, { force: true });
118
- return true;
119
- }
120
- async function removeTechnicalSectionIfPlaceholder(specMdPath) {
121
- let existing;
122
- try {
123
- existing = await readFile(specMdPath, 'utf-8');
124
- }
125
- catch {
126
- return false;
127
- }
128
- const currentTechnical = extractTechnicalBodyLocal(existing);
129
- if (currentTechnical === '' || !isPlaceholderTechnical(currentTechnical)) {
130
- return false;
131
- }
132
- const updated = removeTopLevelSection(existing, 'Technical');
133
- if (updated === existing) {
134
- return false;
135
- }
136
- await atomicWriteFile(specMdPath, updated);
90
+ await replaceSectionInSpec(specMdPath, 'Technical', extractedBody);
137
91
  return true;
138
92
  }
139
93
  function removeTopLevelSection(content, sectionName) {
140
94
  const normalized = content.replace(/\r\n/g, '\n');
141
95
  const masked = normalized.replace(/(```|~~~)[\s\S]*?\1/g, (block) => block.replace(/[^\n]/g, ' '));
142
96
  const headingRe = new RegExp(`^##\\s+${escapeRegex(sectionName)}\\b.*$`, 'm');
97
+ // Callers only remove sections they have just extracted from the same content.
98
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
143
99
  const match = headingRe.exec(masked);
144
- if (!match) {
145
- return content;
146
- }
147
100
  const afterHeading = match.index + match[0].length;
148
101
  const nextRe = /^##\s+\S/gm;
149
102
  nextRe.lastIndex = afterHeading;
@@ -378,7 +331,7 @@ export async function handleHealSpecDocs(params) {
378
331
  continue;
379
332
  }
380
333
  if (legacyContent !== null && isPlaceholderTechnical(legacyContent)) {
381
- await rm(technicalPath, { force: true });
334
+ await executionRemove(technicalPath, { force: true });
382
335
  healed += 1;
383
336
  continue;
384
337
  }
@@ -1,4 +1,4 @@
1
- // tools/hook-generator-handler.ts Handlers for Dynamic Hook Generator tools (SPEC-416)
1
+ import { technologyValue } from '../engine/technology-registry.js';
2
2
  import { detectStack } from '../engine/project-scanner/index.js';
3
3
  import { getPrimaryAiTool } from '../engine/ai-tool-detector/index.js';
4
4
  import { getHookSectionsForStack } from '../engine/hook-generator/stack-hook-templates.js';
@@ -12,7 +12,7 @@ async function resolveStackTokens(projectPath) {
12
12
  const detected = await detectStack(projectPath);
13
13
  const tokens = [];
14
14
  const langMap = {
15
- typescript: 'typescript',
15
+ typescript: technologyValue('technology-typescript-969545'),
16
16
  javascript: 'eslint',
17
17
  python: 'python',
18
18
  go: 'go',
@@ -21,11 +21,11 @@ async function resolveStackTokens(projectPath) {
21
21
  if (lang !== undefined) {
22
22
  tokens.push(lang);
23
23
  }
24
- if (detected.testRunner === 'vitest') {
25
- tokens.push('vitest');
24
+ if (detected.testRunner === technologyValue('technology-vitest-a9127f')) {
25
+ tokens.push(technologyValue('technology-vitest-a9127f'));
26
26
  }
27
- else if (detected.testRunner === 'jest') {
28
- tokens.push('jest');
27
+ else if (detected.testRunner === technologyValue('technology-jest-35e99f')) {
28
+ tokens.push(technologyValue('technology-jest-35e99f'));
29
29
  }
30
30
  if (detected.linter !== null) {
31
31
  tokens.push('eslint');
@@ -1,3 +1,4 @@
1
+ import { technologyValue } from '../../engine/technology-registry.js';
1
2
  export function addAgentPrinciples(knowledge, principles, nextId) {
2
3
  const isAgentProject = knowledge.stack.some((s) => ['@anthropic-ai/sdk', '@mastra/core', 'langgraph', 'crewai'].some((sig) => s.toLowerCase().includes(sig))) || (knowledge.framework ?? '').toLowerCase().includes('agent');
3
4
  if (!isAgentProject) {
@@ -45,9 +46,10 @@ export function addAgentPrinciples(knowledge, principles, nextId) {
45
46
  });
46
47
  }
47
48
  export function addElectronPrinciples(knowledge, principles, nextId) {
48
- const isElectronProject = knowledge.framework === 'electron' || knowledge.projectCategory === 'desktop';
49
+ const isElectronProject = knowledge.framework === technologyValue('technology-electron-88b1de') ||
50
+ knowledge.projectCategory === 'desktop';
49
51
  const stackHasElectron = Array.isArray(knowledge.stack) &&
50
- knowledge.stack.some((s) => s.toLowerCase().includes('electron'));
52
+ knowledge.stack.some((s) => s.toLowerCase().includes(technologyValue('technology-electron-88b1de')));
51
53
  if (!isElectronProject || !stackHasElectron) {
52
54
  return;
53
55
  }
@@ -34,9 +34,16 @@ Auto-generated by \`init_project\`. Mirrors CLAUDE.md for IDEs that read AGENTS.
34
34
  \`\`\`
35
35
  facilitate("what to build") → create_spec → challenge_spec → check_readiness
36
36
  → update_status(review) → approve → update_status(approved) → implement
37
- → validate → update_status(done)
37
+ → validate (ack) watch_job (completed) → inspect job.result → update_status(done)
38
38
  \`\`\`
39
39
 
40
+ ## Durable Validation Gate
41
+
42
+ 1. Call \`validate\` and capture \`operationId\`, \`projectId\`, \`workspaceId\`, and \`cursor\` from the acknowledgement
43
+ 2. Call \`watch_job\` with those identifiers and the latest cursor until the job reaches a terminal state
44
+ 3. Require \`completed\` and inspect \`job.result.structuredContent\`; stop on \`failed\`, \`dead-letter\`, or \`cancelled\`
45
+ 4. Call \`update_status(done)\` only when the completed result reports \`ready: true\`, \`status: "passing"\`, and passing quality gates
46
+
40
47
  ## Session Start
41
48
 
42
49
  1. Call \`planu_status\` to see active specs
@@ -45,7 +52,7 @@ facilitate("what to build") → create_spec → challenge_spec → check_readine
45
52
  ## Session End
46
53
 
47
54
  - Call \`session_checkpoint\` to save context
48
- - Run \`validate\`, then call \`update_status(done)\` when work is complete
55
+ - Run \`validate\`, await the completed job with \`watch_job\`, inspect \`job.result.structuredContent\`, then call \`update_status(done)\`
49
56
 
50
57
  ## Quick Reference
51
58
 
@@ -55,6 +62,7 @@ ${toolsTable}
55
62
 
56
63
  - NEVER write production code before spec is \`approved\`
57
64
  - NEVER skip \`validate\` after implementation
65
+ - NEVER treat a \`validate\` acknowledgement as a passing result
58
66
  - NEVER create design docs outside Planu specs
59
67
 
60
68
  ## Skill Discovery
@@ -70,8 +78,9 @@ Auto-generated by init_project.
70
78
 
71
79
  1. Before writing any code, call facilitate() or create_spec() first.
72
80
  2. Never write code without an approved Planu spec.
73
- 3. Always call validate() after implementation.
74
- 4. Use update_status() to track progress: draft review approved → implementing → done.
81
+ 3. Always call validate() after implementation; it returns a durable job acknowledgement, not pass/fail.
82
+ 4. Call watch_job() until completed and inspect job.result.structuredContent before marking done.
83
+ 5. Use update_status() to track progress: draft → review → approved → implementing → done.
75
84
 
76
85
  ## Session
77
86
 
@@ -82,7 +91,7 @@ Auto-generated by init_project.
82
91
 
83
92
  - New feature: facilitate("what to build")
84
93
  - Check status: planu_status
85
- - Mark done: validate, then update_status(done)
94
+ - Mark done: validate, watch_job until completed, inspect job.result.structuredContent, then update_status(done)
86
95
  `;
87
96
  async function writeIfMissing(path, content) {
88
97
  try {