agentic-orchestrator 0.1.6 → 0.1.8

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 (438) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc.json +24 -0
  3. package/CLAUDE.md +3 -2
  4. package/README.md +71 -48
  5. package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
  6. package/agentic/orchestrator/prompts/planner.system.md +1 -0
  7. package/agentic/orchestrator/schemas/agents.schema.json +5 -22
  8. package/agentic/orchestrator/schemas/gates.schema.json +4 -19
  9. package/agentic/orchestrator/schemas/index.schema.json +3 -14
  10. package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
  11. package/agentic/orchestrator/schemas/plan.schema.json +6 -26
  12. package/agentic/orchestrator/schemas/policy.schema.json +19 -81
  13. package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
  14. package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
  15. package/agentic/orchestrator/schemas/state.schema.json +11 -61
  16. package/agentic/orchestrator/tools/catalog.json +33 -164
  17. package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
  18. package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
  19. package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
  20. package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
  21. package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
  22. package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
  23. package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
  24. package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
  25. package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
  26. package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
  27. package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
  28. package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
  29. package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
  30. package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
  31. package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
  32. package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
  33. package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
  34. package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
  35. package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
  36. package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
  37. package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
  38. package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
  39. package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
  40. package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
  41. package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
  42. package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
  43. package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
  44. package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
  45. package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
  46. package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
  47. package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
  48. package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
  49. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
  50. package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
  51. package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
  52. package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
  53. package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
  54. package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
  55. package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
  56. package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
  57. package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
  58. package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
  59. package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
  60. package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
  61. package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
  62. package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
  63. package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
  64. package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
  65. package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
  66. package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
  67. package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
  68. package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
  69. package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
  70. package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
  71. package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
  72. package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
  73. package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
  74. package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
  75. package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
  76. package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
  77. package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
  78. package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
  79. package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
  80. package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
  81. package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
  82. package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
  83. package/apps/control-plane/src/application/services/gate-service.ts +64 -41
  84. package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
  85. package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
  86. package/apps/control-plane/src/application/services/lock-service.ts +75 -49
  87. package/apps/control-plane/src/application/services/merge-service.ts +91 -50
  88. package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
  89. package/apps/control-plane/src/application/services/patch-service.ts +73 -44
  90. package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
  91. package/apps/control-plane/src/application/services/plan-service.ts +148 -89
  92. package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
  93. package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
  94. package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
  95. package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
  96. package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
  97. package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
  98. package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
  99. package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
  100. package/apps/control-plane/src/cli/aop.ts +2 -2
  101. package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
  102. package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
  103. package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
  104. package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
  105. package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
  106. package/apps/control-plane/src/cli/env-file.ts +115 -0
  107. package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
  108. package/apps/control-plane/src/cli/init-command-handler.ts +182 -56
  109. package/apps/control-plane/src/cli/io.ts +7 -3
  110. package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
  111. package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
  112. package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
  113. package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
  114. package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
  115. package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
  116. package/apps/control-plane/src/cli/spec-utils.ts +2 -2
  117. package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
  118. package/apps/control-plane/src/cli/tooling.ts +3 -3
  119. package/apps/control-plane/src/cli/types.ts +1 -1
  120. package/apps/control-plane/src/core/collisions.ts +27 -10
  121. package/apps/control-plane/src/core/constants.ts +13 -7
  122. package/apps/control-plane/src/core/error-codes.ts +1 -1
  123. package/apps/control-plane/src/core/fs.ts +11 -5
  124. package/apps/control-plane/src/core/gates.ts +53 -27
  125. package/apps/control-plane/src/core/git.ts +18 -6
  126. package/apps/control-plane/src/core/kernel.ts +513 -227
  127. package/apps/control-plane/src/core/patch.ts +7 -3
  128. package/apps/control-plane/src/core/path-layout.ts +5 -1
  129. package/apps/control-plane/src/core/path-rules.ts +19 -5
  130. package/apps/control-plane/src/core/qa-index.ts +26 -12
  131. package/apps/control-plane/src/core/response.ts +9 -6
  132. package/apps/control-plane/src/core/schemas.ts +29 -10
  133. package/apps/control-plane/src/core/tool-caller.ts +1 -1
  134. package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
  135. package/apps/control-plane/src/index.ts +3 -9
  136. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +79 -35
  137. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
  138. package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
  139. package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
  140. package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
  141. package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
  142. package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
  143. package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
  144. package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
  145. package/apps/control-plane/src/mcp/tool-client.ts +17 -5
  146. package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
  147. package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
  148. package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
  149. package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
  150. package/apps/control-plane/src/providers/providers.ts +137 -54
  151. package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
  152. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
  153. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
  154. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
  155. package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
  156. package/apps/control-plane/src/supervisor/runtime.ts +59 -35
  157. package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
  158. package/apps/control-plane/src/supervisor/types.ts +22 -7
  159. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
  160. package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
  161. package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
  162. package/apps/control-plane/test/aop.spec.ts +4 -4
  163. package/apps/control-plane/test/batch-operations.spec.ts +20 -18
  164. package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
  165. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
  166. package/apps/control-plane/test/bootstrap.spec.ts +72 -40
  167. package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
  168. package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
  169. package/apps/control-plane/test/cli.spec.ts +1 -1
  170. package/apps/control-plane/test/cli.unit.spec.ts +226 -167
  171. package/apps/control-plane/test/collision-queue.spec.ts +49 -40
  172. package/apps/control-plane/test/collisions.spec.ts +30 -30
  173. package/apps/control-plane/test/core-utils.spec.ts +29 -15
  174. package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
  175. package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
  176. package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
  177. package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
  178. package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
  179. package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
  180. package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
  181. package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
  182. package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
  183. package/apps/control-plane/test/gates.spec.ts +101 -81
  184. package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
  185. package/apps/control-plane/test/helpers.ts +10 -6
  186. package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
  187. package/apps/control-plane/test/init-wizard.spec.ts +328 -68
  188. package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
  189. package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
  190. package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
  191. package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
  192. package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
  193. package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
  194. package/apps/control-plane/test/kernel.spec.ts +134 -51
  195. package/apps/control-plane/test/lock-service.spec.ts +92 -68
  196. package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
  197. package/apps/control-plane/test/mcp.spec.ts +231 -115
  198. package/apps/control-plane/test/merge-service.spec.ts +142 -94
  199. package/apps/control-plane/test/multi-project.spec.ts +28 -22
  200. package/apps/control-plane/test/notifier-service.spec.ts +136 -92
  201. package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
  202. package/apps/control-plane/test/patch-service.spec.ts +128 -48
  203. package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
  204. package/apps/control-plane/test/plan-service.spec.ts +50 -39
  205. package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
  206. package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
  207. package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
  208. package/apps/control-plane/test/providers.spec.ts +208 -104
  209. package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
  210. package/apps/control-plane/test/qa-index.spec.ts +58 -61
  211. package/apps/control-plane/test/reactions.spec.ts +88 -45
  212. package/apps/control-plane/test/response.spec.ts +5 -5
  213. package/apps/control-plane/test/resume-command.spec.ts +121 -80
  214. package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
  215. package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
  216. package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
  217. package/apps/control-plane/test/services.spec.ts +147 -129
  218. package/apps/control-plane/test/session-management.spec.ts +136 -74
  219. package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
  220. package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
  221. package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
  222. package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
  223. package/apps/control-plane/test/supervisor.spec.ts +67 -43
  224. package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
  225. package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
  226. package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
  227. package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
  228. package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
  229. package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
  230. package/apps/control-plane/tsconfig.build.json +2 -7
  231. package/apps/control-plane/tsconfig.json +1 -5
  232. package/apps/control-plane/vitest.config.ts +7 -7
  233. package/config/agentic/orchestrator/adapters.yaml +3 -0
  234. package/config/agentic/orchestrator/agents.yaml +14 -0
  235. package/config/agentic/orchestrator/gates.yaml +28 -0
  236. package/config/agentic/orchestrator/policy.yaml +22 -0
  237. package/config/agentic/orchestrator/prompts/builder.system.md +1 -0
  238. package/config/agentic/orchestrator/prompts/planner.system.md +16 -0
  239. package/config/agentic/orchestrator/prompts/qa.system.md +1 -0
  240. package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
  241. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
  242. package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
  243. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
  244. package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
  245. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  246. package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
  247. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  248. package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
  249. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  250. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
  251. package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
  252. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  253. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
  254. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  255. package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
  256. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  257. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
  258. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
  259. package/dist/apps/control-plane/application/services/gate-service.js +26 -26
  260. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  261. package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
  262. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
  263. package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
  264. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
  265. package/dist/apps/control-plane/application/services/lock-service.js +32 -32
  266. package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
  267. package/dist/apps/control-plane/application/services/merge-service.js +41 -27
  268. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  269. package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
  270. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  271. package/dist/apps/control-plane/application/services/patch-service.js +21 -19
  272. package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
  273. package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
  274. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  275. package/dist/apps/control-plane/application/services/plan-service.js +33 -33
  276. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  277. package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
  278. package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
  279. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
  280. package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
  281. package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
  282. package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
  283. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  284. package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
  285. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  286. package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
  287. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  288. package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
  289. package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
  290. package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
  291. package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
  292. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
  293. package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
  294. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  295. package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
  296. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  297. package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
  298. package/dist/apps/control-plane/cli/env-file.d.ts +4 -0
  299. package/dist/apps/control-plane/cli/env-file.js +89 -0
  300. package/dist/apps/control-plane/cli/env-file.js.map +1 -0
  301. package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
  302. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  303. package/dist/apps/control-plane/cli/init-command-handler.js +97 -37
  304. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  305. package/dist/apps/control-plane/cli/io.js +2 -2
  306. package/dist/apps/control-plane/cli/io.js.map +1 -1
  307. package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
  308. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  309. package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
  310. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  311. package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
  312. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  313. package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
  314. package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
  315. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  316. package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
  317. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  318. package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
  319. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  320. package/dist/apps/control-plane/cli/tooling.js +1 -1
  321. package/dist/apps/control-plane/core/collisions.js +11 -8
  322. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  323. package/dist/apps/control-plane/core/constants.js +13 -7
  324. package/dist/apps/control-plane/core/constants.js.map +1 -1
  325. package/dist/apps/control-plane/core/error-codes.js +1 -1
  326. package/dist/apps/control-plane/core/fs.js.map +1 -1
  327. package/dist/apps/control-plane/core/gates.d.ts +2 -2
  328. package/dist/apps/control-plane/core/gates.js +26 -19
  329. package/dist/apps/control-plane/core/gates.js.map +1 -1
  330. package/dist/apps/control-plane/core/git.js +3 -3
  331. package/dist/apps/control-plane/core/git.js.map +1 -1
  332. package/dist/apps/control-plane/core/kernel.d.ts +1 -0
  333. package/dist/apps/control-plane/core/kernel.js +134 -81
  334. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  335. package/dist/apps/control-plane/core/patch.js +7 -3
  336. package/dist/apps/control-plane/core/patch.js.map +1 -1
  337. package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
  338. package/dist/apps/control-plane/core/path-layout.js +4 -1
  339. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  340. package/dist/apps/control-plane/core/path-rules.js +3 -1
  341. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  342. package/dist/apps/control-plane/core/qa-index.js +5 -5
  343. package/dist/apps/control-plane/core/qa-index.js.map +1 -1
  344. package/dist/apps/control-plane/core/response.js +3 -3
  345. package/dist/apps/control-plane/core/response.js.map +1 -1
  346. package/dist/apps/control-plane/core/schemas.js +10 -6
  347. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  348. package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
  349. package/dist/apps/control-plane/index.d.ts +1 -1
  350. package/dist/apps/control-plane/index.js +1 -1
  351. package/dist/apps/control-plane/index.js.map +1 -1
  352. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +40 -23
  353. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  354. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
  355. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  356. package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
  357. package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
  358. package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
  359. package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
  360. package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
  361. package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
  362. package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
  363. package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
  364. package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
  365. package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
  366. package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
  367. package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
  368. package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
  369. package/dist/apps/control-plane/mcp/tool-client.js +2 -2
  370. package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
  371. package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
  372. package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
  373. package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
  374. package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
  375. package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
  376. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  377. package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
  378. package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
  379. package/dist/apps/control-plane/providers/providers.d.ts +3 -2
  380. package/dist/apps/control-plane/providers/providers.js +81 -39
  381. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  382. package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
  383. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  384. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
  385. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  386. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
  387. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
  388. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  389. package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
  390. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  391. package/dist/apps/control-plane/supervisor/runtime.js +25 -21
  392. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  393. package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
  394. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  395. package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
  396. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  397. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
  398. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  399. package/eslint.config.mjs +20 -20
  400. package/example-configurations/README.md +1 -1
  401. package/example-configurations/java/agents.yaml +3 -3
  402. package/example-configurations/java/policy.yaml +1 -1
  403. package/example-configurations/node/agents.yaml +3 -3
  404. package/example-configurations/node/policy.yaml +1 -1
  405. package/package.json +10 -5
  406. package/packages/web-dashboard/next.config.js +2 -2
  407. package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
  408. package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
  409. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
  410. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
  411. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
  412. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
  413. package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
  414. package/packages/web-dashboard/src/app/globals.css +10 -2
  415. package/packages/web-dashboard/src/app/page.tsx +100 -37
  416. package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
  417. package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
  418. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
  419. package/packages/web-dashboard/tsconfig.json +3 -11
  420. package/scripts/nx-safe.mjs +10 -10
  421. package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
  422. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +189 -90
  423. package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
  424. package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
  425. package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
  426. package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
  427. package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
  428. package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
  429. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
  430. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
  431. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
  432. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
  433. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
  434. package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
  435. package/spec-files/outstanding/agentic_orchestrator_provider_auth_bootstrap_spec.md +384 -0
  436. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
  437. package/spec-files/progress.md +186 -175
  438. package/tsconfig.json +2 -8
@@ -40,9 +40,9 @@ async function writePassingGates(root: string): Promise<void> {
40
40
  ' coverage:',
41
41
  ' type: none',
42
42
  'capabilities:',
43
- ' - none'
43
+ ' - none',
44
44
  ].join('\n'),
45
- 'utf8'
45
+ 'utf8',
46
46
  );
47
47
  }
48
48
 
@@ -157,21 +157,23 @@ describe('normalizeRuntimeSessions edge cases', () => {
157
157
 
158
158
  it('skips feature_sessions entry with empty string key (line 260 true branch)', () => {
159
159
  const result = kernel.normalizeRuntimeSessions({
160
- feature_sessions: { '': { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' } }
160
+ feature_sessions: {
161
+ '': { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' },
162
+ },
161
163
  });
162
164
  expect(Object.keys(result.feature_sessions)).toHaveLength(0);
163
165
  });
164
166
 
165
167
  it('skips feature_sessions entry where raw is null (line 260 true branch)', () => {
166
168
  const result = kernel.normalizeRuntimeSessions({
167
- feature_sessions: { feature_a: null }
169
+ feature_sessions: { feature_a: null },
168
170
  });
169
171
  expect(Object.keys(result.feature_sessions)).toHaveLength(0);
170
172
  });
171
173
 
172
174
  it('skips feature_sessions entry where raw is non-object (line 260 true branch)', () => {
173
175
  const result = kernel.normalizeRuntimeSessions({
174
- feature_sessions: { feature_a: 42 }
176
+ feature_sessions: { feature_a: 42 },
175
177
  });
176
178
  expect(Object.keys(result.feature_sessions)).toHaveLength(0);
177
179
  });
@@ -179,8 +181,8 @@ describe('normalizeRuntimeSessions edge cases', () => {
179
181
  it('includes valid feature_sessions entry (line 260 false branch)', () => {
180
182
  const result = kernel.normalizeRuntimeSessions({
181
183
  feature_sessions: {
182
- feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' }
183
- }
184
+ feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' },
185
+ },
184
186
  });
185
187
  expect(result.feature_sessions['feature_a']).toBeDefined();
186
188
  expect(result.feature_sessions['feature_a'].planner_session_id).toBe('p1');
@@ -188,42 +190,48 @@ describe('normalizeRuntimeSessions edge cases', () => {
188
190
 
189
191
  it('falls back to unassigned for missing planner_session_id (line 266 false branch)', () => {
190
192
  const result = kernel.normalizeRuntimeSessions({
191
- feature_sessions: { feature_a: { builder_session_id: 'b1', qa_session_id: 'q1' } }
193
+ feature_sessions: { feature_a: { builder_session_id: 'b1', qa_session_id: 'q1' } },
192
194
  });
193
195
  expect(result.feature_sessions['feature_a'].planner_session_id).toBe('unassigned');
194
196
  });
195
197
 
196
198
  it('falls back to unassigned for non-string planner_session_id (line 266 false branch)', () => {
197
199
  const result = kernel.normalizeRuntimeSessions({
198
- feature_sessions: { feature_a: { planner_session_id: 123, builder_session_id: 'b1', qa_session_id: 'q1' } }
200
+ feature_sessions: {
201
+ feature_a: { planner_session_id: 123, builder_session_id: 'b1', qa_session_id: 'q1' },
202
+ },
199
203
  });
200
204
  expect(result.feature_sessions['feature_a'].planner_session_id).toBe('unassigned');
201
205
  });
202
206
 
203
207
  it('falls back to unassigned for missing builder_session_id (line 268 false branch)', () => {
204
208
  const result = kernel.normalizeRuntimeSessions({
205
- feature_sessions: { feature_a: { planner_session_id: 'p1', qa_session_id: 'q1' } }
209
+ feature_sessions: { feature_a: { planner_session_id: 'p1', qa_session_id: 'q1' } },
206
210
  });
207
211
  expect(result.feature_sessions['feature_a'].builder_session_id).toBe('unassigned');
208
212
  });
209
213
 
210
214
  it('falls back to unassigned for non-string builder_session_id (line 268 false branch)', () => {
211
215
  const result = kernel.normalizeRuntimeSessions({
212
- feature_sessions: { feature_a: { planner_session_id: 'p1', builder_session_id: false, qa_session_id: 'q1' } }
216
+ feature_sessions: {
217
+ feature_a: { planner_session_id: 'p1', builder_session_id: false, qa_session_id: 'q1' },
218
+ },
213
219
  });
214
220
  expect(result.feature_sessions['feature_a'].builder_session_id).toBe('unassigned');
215
221
  });
216
222
 
217
223
  it('falls back to unassigned for missing qa_session_id (line 269 false branch)', () => {
218
224
  const result = kernel.normalizeRuntimeSessions({
219
- feature_sessions: { feature_a: { planner_session_id: 'p1', builder_session_id: 'b1' } }
225
+ feature_sessions: { feature_a: { planner_session_id: 'p1', builder_session_id: 'b1' } },
220
226
  });
221
227
  expect(result.feature_sessions['feature_a'].qa_session_id).toBe('unassigned');
222
228
  });
223
229
 
224
230
  it('falls back to unassigned for non-string qa_session_id (line 269 false branch)', () => {
225
231
  const result = kernel.normalizeRuntimeSessions({
226
- feature_sessions: { feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: [] } }
232
+ feature_sessions: {
233
+ feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: [] },
234
+ },
227
235
  });
228
236
  expect(result.feature_sessions['feature_a'].qa_session_id).toBe('unassigned');
229
237
  });
@@ -327,7 +335,10 @@ describe('normalizeError edge cases', () => {
327
335
  });
328
336
 
329
337
  it('returns normalizedResponse when error contains it', () => {
330
- const normalizedResponse = { ok: false as const, error: { code: 'test_code', message: 'test' } };
338
+ const normalizedResponse = {
339
+ ok: false as const,
340
+ error: { code: 'test_code', message: 'test' },
341
+ };
331
342
  const result = kernel.normalizeError({ normalizedResponse });
332
343
  expect(result).toBe(normalizedResponse);
333
344
  });
@@ -419,9 +430,9 @@ describe('AopKernel invoke with edge-case args', () => {
419
430
  {
420
431
  feature_id: 'feat_cost',
421
432
  tokens_used_delta: 'not-a-number',
422
- estimated_cost_usd_delta: 'also-not-a-number'
433
+ estimated_cost_usd_delta: 'also-not-a-number',
423
434
  },
424
- ORCH
435
+ ORCH,
425
436
  );
426
437
  expect(result.ok).toBe(true);
427
438
  });
@@ -433,7 +444,7 @@ describe('AopKernel invoke with edge-case args', () => {
433
444
  const result = await kernel.invoke(
434
445
  'cost.record',
435
446
  { feature_id: 'feat_cost2', tokens_used_delta: 100, estimated_cost_usd_delta: 0.05 },
436
- ORCH
447
+ ORCH,
437
448
  );
438
449
  expect(result.ok).toBe(true);
439
450
  });
@@ -443,16 +454,16 @@ describe('AopKernel invoke with edge-case args', () => {
443
454
  const result = await kernel.invoke(
444
455
  'performance.record_outcome',
445
456
  {
446
- feature_id: 123, // not string → ''
447
- provider: true, // not string → ''
448
- model: null, // not string → ''
449
- status: [], // not string → ''
450
- gate_pass: 'yes', // not boolean → false
451
- retry_count: 'two', // not number → 0
452
- duration_ms: '5000', // not number → 0
453
- cost_usd: '1.5' // not number → 0
457
+ feature_id: 123, // not string → ''
458
+ provider: true, // not string → ''
459
+ model: null, // not string → ''
460
+ status: [], // not string → ''
461
+ gate_pass: 'yes', // not boolean → false
462
+ retry_count: 'two', // not number → 0
463
+ duration_ms: '5000', // not number → 0
464
+ cost_usd: '1.5', // not number → 0
454
465
  },
455
- ORCH
466
+ ORCH,
456
467
  );
457
468
  expect(result.ok).toBe(true);
458
469
  });
@@ -468,9 +479,9 @@ describe('AopKernel invoke with edge-case args', () => {
468
479
  gate_pass: true,
469
480
  retry_count: 1,
470
481
  duration_ms: 3000,
471
- cost_usd: 0.10
482
+ cost_usd: 0.1,
472
483
  },
473
- ORCH
484
+ ORCH,
474
485
  );
475
486
  expect(result.ok).toBe(true);
476
487
  });
@@ -480,7 +491,7 @@ describe('AopKernel invoke with edge-case args', () => {
480
491
  const result = await kernel.invoke(
481
492
  'performance.get_analytics',
482
493
  { provider: 'openai', model: 'gpt-4' },
483
- ORCH
494
+ ORCH,
484
495
  );
485
496
  expect(result.ok).toBe(true);
486
497
  expect(result.data).toHaveProperty('outcomes');
@@ -495,7 +506,7 @@ describe('AopKernel invoke with edge-case args', () => {
495
506
  const result = await kernel.invoke(
496
507
  'performance.get_analytics',
497
508
  { provider: 'anthropic' },
498
- ORCH
509
+ ORCH,
499
510
  );
500
511
  expect(result.ok).toBe(true);
501
512
  });
@@ -511,7 +522,7 @@ describe('AopKernel invoke with edge-case args', () => {
511
522
  const result = await kernel.invoke(
512
523
  'feature.delete',
513
524
  { feature_id: 'feat_del', dry_run: 'yes', confirm: 'true' },
514
- ORCH
525
+ ORCH,
515
526
  );
516
527
  // May succeed or fail, but the branch is covered
517
528
  expect(result).toBeDefined();
@@ -534,8 +545,14 @@ describe('AopKernel invoke with edge-case args', () => {
534
545
  // Invoke with boolean fields set → readBooleanField returns boolean → passed as boolean
535
546
  const result = await kernel.invoke(
536
547
  'feature.delete',
537
- { feature_id: 'feat_del3', dry_run: true, confirm: false, remove_worktree: false, remove_branch: 'feat_del3' },
538
- ORCH
548
+ {
549
+ feature_id: 'feat_del3',
550
+ dry_run: true,
551
+ confirm: false,
552
+ remove_worktree: false,
553
+ remove_branch: 'feat_del3',
554
+ },
555
+ ORCH,
539
556
  );
540
557
  expect(result).toBeDefined();
541
558
  });
@@ -578,7 +595,7 @@ describe('featureSendMessage edge cases', () => {
578
595
  const result = await kernel.invoke(
579
596
  'feature.send_message',
580
597
  { feature_id: 'feat_msg', message: 'hello' },
581
- ORCH
598
+ ORCH,
582
599
  );
583
600
  // No active session cluster → session_not_found
584
601
  expect(result.ok).toBe(false);
@@ -602,14 +619,14 @@ describe('featureSendMessage edge cases', () => {
602
619
  sessions.feature_sessions['feat_msg2'] = {
603
620
  planner_session_id: 'planner-001',
604
621
  builder_session_id: 'builder-001',
605
- qa_session_id: 'qa-001'
622
+ qa_session_id: 'qa-001',
606
623
  };
607
624
  await kernel.writeRunLease(sessions);
608
625
 
609
626
  const result = await kernel.invoke(
610
627
  'feature.send_message',
611
628
  { feature_id: 'feat_msg2', message: 'hello' },
612
- ORCH
629
+ ORCH,
613
630
  );
614
631
  // Provider has no sendMessage → provider_unsupported
615
632
  expect(result.ok).toBe(false);
@@ -622,12 +639,20 @@ describe('featureSendMessage edge cases', () => {
622
639
  await kernel.invoke('feature.init', { feature_id: 'feat_building' }, ORCH);
623
640
 
624
641
  // Patch feature state to BUILDING
625
- const stateResult = await kernel.invoke('feature.state_get', { feature_id: 'feat_building' }, ORCH);
642
+ const stateResult = await kernel.invoke(
643
+ 'feature.state_get',
644
+ { feature_id: 'feat_building' },
645
+ ORCH,
646
+ );
626
647
  const version = (stateResult.data as { version: number }).version;
627
648
  await kernel.invoke(
628
649
  'feature.state_patch',
629
- { feature_id: 'feat_building', expected_version: version, patch: { status: STATUS.BUILDING } },
630
- ORCH
650
+ {
651
+ feature_id: 'feat_building',
652
+ expected_version: version,
653
+ patch: { status: STATUS.BUILDING },
654
+ },
655
+ ORCH,
631
656
  );
632
657
 
633
658
  // Set up runtime sessions with a feature session having 'unassigned' builder_session_id
@@ -637,14 +662,14 @@ describe('featureSendMessage edge cases', () => {
637
662
  sessions.feature_sessions['feat_building'] = {
638
663
  planner_session_id: 'planner-001',
639
664
  builder_session_id: 'unassigned', // line 1275 – will fall back to orchestrator
640
- qa_session_id: 'qa-001'
665
+ qa_session_id: 'qa-001',
641
666
  };
642
667
  await kernel.writeRunLease(sessions);
643
668
 
644
669
  const result = await kernel.invoke(
645
670
  'feature.send_message',
646
671
  { feature_id: 'feat_building', message: 'hey' },
647
- ORCH
672
+ ORCH,
648
673
  );
649
674
  // No sendMessage provider → provider_unsupported
650
675
  expect(result.ok).toBe(false);
@@ -667,7 +692,11 @@ describe('load() failure branches', () => {
667
692
 
668
693
  it('throws on invalid gates YAML schema (line 343)', async () => {
669
694
  const gatesPath = path.join(repoRoot, 'agentic', 'orchestrator', 'gates.yaml');
670
- await fs.writeFile(gatesPath, 'version: "not_a_number"\nprofiles: []\ncapabilities: []\n', 'utf8');
695
+ await fs.writeFile(
696
+ gatesPath,
697
+ 'version: "not_a_number"\nprofiles: []\ncapabilities: []\n',
698
+ 'utf8',
699
+ );
671
700
  const kernel = new AopKernel(repoRoot);
672
701
  await expect(kernel.load()).rejects.toThrow(/invalid_gates_yaml/);
673
702
  });
@@ -676,7 +705,9 @@ describe('load() failure branches', () => {
676
705
  const policyPath = path.join(repoRoot, 'agentic', 'orchestrator', 'policy.yaml');
677
706
  await fs.writeFile(policyPath, 'version: "not_valid"\n', 'utf8');
678
707
  const kernel = new AopKernel(repoRoot);
679
- await expect(kernel.load()).rejects.toThrow(/invalid_policy_yaml|invalid_gates_yaml|INVALID_WORKSPACE/);
708
+ await expect(kernel.load()).rejects.toThrow(
709
+ /invalid_policy_yaml|invalid_gates_yaml|INVALID_WORKSPACE/,
710
+ );
680
711
  });
681
712
 
682
713
  it('schema rejects wrong workspace value (schema enforces const:nx before line 356)', async () => {
@@ -751,7 +782,8 @@ describe('AopKernel unknown tool and repo status coverage', () => {
751
782
  const featureId = 'feat_repo_status';
752
783
  const worktreePath = path.join(repoRoot2, '.worktrees', featureId);
753
784
  await runGit(repoRoot2, ['worktree', 'add', worktreePath, 'feat_repo_status']);
754
- const frontmatter = '---\nfeature_id: feat_repo_status\nversion: 1\nbranch: feat_repo_status\nstatus: building\ngate_profile: default\ngates:\n plan: na\n fast: na\n full: na\nworktree_path: .worktrees/feat_repo_status\n---\n';
785
+ const frontmatter =
786
+ '---\nfeature_id: feat_repo_status\nversion: 1\nbranch: feat_repo_status\nstatus: building\ngate_profile: default\ngates:\n plan: na\n fast: na\n full: na\nworktree_path: .worktrees/feat_repo_status\n---\n';
755
787
  const featureDir = path.join(repoRoot2, '.aop', 'features', featureId);
756
788
  await fs.mkdir(featureDir, { recursive: true });
757
789
  await fs.writeFile(path.join(featureDir, 'state.md'), frontmatter, 'utf8');
@@ -764,14 +796,22 @@ describe('AopKernel unknown tool and repo status coverage', () => {
764
796
  it('GIVEN_unknown_tool_name_WHEN_dispatchTool_THEN_returns_invalid_argument_error', async () => {
765
797
  // Covers lines 169-174: the unknown tool callback body in ToolRouter
766
798
  // Must call dispatchTool directly to bypass the RBAC check in invoke()
767
- const result = await (kernel2 as any).dispatchTool('tool.does_not_exist_xyz', {}, { actorType: 'orchestrator', actorId: 'orch:test' });
799
+ const result = await (kernel2 as any).dispatchTool(
800
+ 'tool.does_not_exist_xyz',
801
+ {},
802
+ { actorType: 'orchestrator', actorId: 'orch:test' },
803
+ );
768
804
  expect(result.ok).toBe(false);
769
805
  expect(result.error?.code).toBe('invalid_argument');
770
806
  });
771
807
 
772
808
  it('GIVEN_valid_feature_WHEN_repo_status_THEN_returns_file_status', async () => {
773
809
  // Covers line 543: REPO_STATUS tool handler body
774
- const result = await kernel2.invoke('repo.status', { feature_id: 'feat_repo_status' }, { actor_type: 'orchestrator', actor_id: 'orch:test' });
810
+ const result = await kernel2.invoke(
811
+ 'repo.status',
812
+ { feature_id: 'feat_repo_status' },
813
+ { actor_type: 'orchestrator', actor_id: 'orch:test' },
814
+ );
775
815
  expect(result.ok).toBe(true);
776
816
  });
777
817
  });
@@ -795,25 +835,29 @@ describe('AopKernel readRunLease migration path coverage', () => {
795
835
  // Write an index with runtime_sessions.run_id set
796
836
  const indexPath = path.join(repoRoot3, '.aop', 'features', 'index.json');
797
837
  await fs.mkdir(path.dirname(indexPath), { recursive: true });
798
- await fs.writeFile(indexPath, JSON.stringify({
799
- version: 1,
800
- active: [],
801
- blocked: [],
802
- merged: [],
803
- blocked_queue: [],
804
- dep_blocked: [],
805
- locks: {},
806
- lock_leases: {},
807
- updated_at: new Date().toISOString(),
808
- runtime_sessions: {
809
- run_id: 'run:migrated-id',
810
- owner_instance_id: 'owner:migrated',
811
- orchestrator_session_id: 'orch-migrated',
812
- orchestrator_epoch: 1,
813
- lease_expires_at: new Date(Date.now() + 3600000).toISOString(),
814
- feature_sessions: {}
815
- }
816
- }), 'utf8');
838
+ await fs.writeFile(
839
+ indexPath,
840
+ JSON.stringify({
841
+ version: 1,
842
+ active: [],
843
+ blocked: [],
844
+ merged: [],
845
+ blocked_queue: [],
846
+ dep_blocked: [],
847
+ locks: {},
848
+ lock_leases: {},
849
+ updated_at: new Date().toISOString(),
850
+ runtime_sessions: {
851
+ run_id: 'run:migrated-id',
852
+ owner_instance_id: 'owner:migrated',
853
+ orchestrator_session_id: 'orch-migrated',
854
+ orchestrator_epoch: 1,
855
+ lease_expires_at: new Date(Date.now() + 3600000).toISOString(),
856
+ feature_sessions: {},
857
+ },
858
+ }),
859
+ 'utf8',
860
+ );
817
861
  const sessions = await kernel3.readRunLease();
818
862
  expect(sessions.run_id).toBe('run:migrated-id');
819
863
  });