agentic-orchestrator 0.1.28 → 0.2.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 (836) hide show
  1. package/.claude/settings.local.json +46 -1
  2. package/.cortexrc +28 -0
  3. package/.github/agents/copilot-instructions.md +29 -0
  4. package/.github/copilot-instructions.md +93 -0
  5. package/.vscode/settings.json +13 -0
  6. package/.vscode/tms.code-snippets +223 -0
  7. package/AGENTS.md +72 -1
  8. package/Agentic-Orchestrator.iml +12 -11
  9. package/CLAUDE.md +72 -1
  10. package/CONSTITUTION.md +504 -0
  11. package/FUTURE-ENHANCEMENTS.md +85 -0
  12. package/NEXT-TASKS.md +25 -0
  13. package/PROMPTS.md +161 -0
  14. package/README.md +126 -29
  15. package/agentic/orchestrator/agents.yaml +4 -3
  16. package/agentic/orchestrator/defaults/policy.defaults.yaml +39 -3
  17. package/agentic/orchestrator/gates.yaml +15 -3
  18. package/agentic/orchestrator/policy.yaml +47 -3
  19. package/agentic/orchestrator/prompts/builder.system.md +69 -20
  20. package/agentic/orchestrator/prompts/planner-intake.system.md +149 -0
  21. package/agentic/orchestrator/prompts/planner.system.md +113 -40
  22. package/agentic/orchestrator/prompts/qa.system.md +73 -18
  23. package/agentic/orchestrator/prompts/reconciler.system.md +119 -0
  24. package/agentic/orchestrator/schemas/agents.schema.json +89 -1
  25. package/agentic/orchestrator/schemas/execution-control.schema.json +242 -0
  26. package/agentic/orchestrator/schemas/index.schema.json +234 -0
  27. package/agentic/orchestrator/schemas/intake.review.schema.json +82 -0
  28. package/agentic/orchestrator/schemas/organizer-ordering-artifact.schema.json +75 -0
  29. package/agentic/orchestrator/schemas/plan.schema.json +44 -0
  30. package/agentic/orchestrator/schemas/policy.schema.json +238 -9
  31. package/agentic/orchestrator/schemas/policy.user.schema.json +129 -1
  32. package/agentic/orchestrator/schemas/spec.manifest.bootstrap.schema.json +101 -0
  33. package/agentic/orchestrator/schemas/spec.manifest.verified.schema.json +80 -0
  34. package/agentic/orchestrator/schemas/state.schema.json +298 -3
  35. package/agentic/orchestrator/tools/catalog.json +145 -15
  36. package/agentic/orchestrator/tools/schemas/input/doctor.run.input.schema.json +18 -0
  37. package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +4 -0
  38. package/agentic/orchestrator/tools/schemas/input/evidence.verify_chain.input.schema.json +13 -0
  39. package/agentic/orchestrator/tools/schemas/input/feature.intake_submit.input.schema.json +11 -0
  40. package/agentic/orchestrator/tools/schemas/input/feature.question_answer.input.schema.json +15 -0
  41. package/agentic/orchestrator/tools/schemas/input/feature.question_create.input.schema.json +21 -0
  42. package/agentic/orchestrator/tools/schemas/input/feature.question_list.input.schema.json +13 -0
  43. package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +5 -0
  44. package/agentic/orchestrator/tools/schemas/input/feature.send_message.input.schema.json +1 -1
  45. package/agentic/orchestrator/tools/schemas/input/replay.timeline_get.input.schema.json +32 -0
  46. package/agentic/orchestrator/tools/schemas/input/repo.conflict_abort.input.schema.json +16 -0
  47. package/agentic/orchestrator/tools/schemas/input/repo.conflict_files.input.schema.json +16 -0
  48. package/agentic/orchestrator/tools/schemas/input/repo.reconcile_mainline.input.schema.json +37 -0
  49. package/agentic/orchestrator/tools/schemas/input/repo.resolve_conflict.input.schema.json +40 -0
  50. package/agentic/orchestrator/tools/schemas/input/runtime.execution_request_list.input.schema.json +7 -0
  51. package/agentic/orchestrator/tools/schemas/input/runtime.execution_request_submit.input.schema.json +25 -0
  52. package/agentic/orchestrator/tools/schemas/output/doctor.run.output.schema.json +34 -0
  53. package/agentic/orchestrator/tools/schemas/output/evidence.verify_chain.output.schema.json +23 -0
  54. package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +62 -2
  55. package/agentic/orchestrator/tools/schemas/output/feature.intake_submit.output.schema.json +24 -0
  56. package/agentic/orchestrator/tools/schemas/output/feature.question_answer.output.schema.json +21 -0
  57. package/agentic/orchestrator/tools/schemas/output/feature.question_create.output.schema.json +12 -0
  58. package/agentic/orchestrator/tools/schemas/output/feature.question_list.output.schema.json +14 -0
  59. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +31 -0
  60. package/agentic/orchestrator/tools/schemas/output/feature.send_message.output.schema.json +8 -18
  61. package/agentic/orchestrator/tools/schemas/output/replay.timeline_get.output.schema.json +64 -0
  62. package/agentic/orchestrator/tools/schemas/output/repo.conflict_abort.output.schema.json +16 -0
  63. package/agentic/orchestrator/tools/schemas/output/repo.conflict_files.output.schema.json +22 -0
  64. package/agentic/orchestrator/tools/schemas/output/repo.reconcile_mainline.output.schema.json +61 -0
  65. package/agentic/orchestrator/tools/schemas/output/repo.resolve_conflict.output.schema.json +19 -0
  66. package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +26 -0
  67. package/agentic/orchestrator/tools/schemas/output/runtime.execution_request_list.output.schema.json +17 -0
  68. package/agentic/orchestrator/tools/schemas/output/runtime.execution_request_submit.output.schema.json +24 -0
  69. package/agentic/orchestrator/tools.md +13 -0
  70. package/apps/control-plane/scripts/validate-mcp-contracts.ts +1 -1
  71. package/apps/control-plane/src/application/kernel-tool-wiring.ts +140 -2
  72. package/apps/control-plane/src/application/services/activity-monitor-service.ts +44 -1
  73. package/apps/control-plane/src/application/services/bootstrap-manifest-generator-service.ts +251 -0
  74. package/apps/control-plane/src/application/services/checkpoint-service.ts +87 -27
  75. package/apps/control-plane/src/application/services/collision-override-service.ts +906 -0
  76. package/apps/control-plane/src/application/services/collision-queue-service.ts +129 -38
  77. package/apps/control-plane/src/application/services/cost-tracking-service.ts +94 -0
  78. package/apps/control-plane/src/application/services/execution-control-service.ts +599 -0
  79. package/apps/control-plane/src/application/services/feature-deletion-service.ts +37 -1
  80. package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +182 -4
  81. package/apps/control-plane/src/application/services/feature-send-message-service.ts +17 -8
  82. package/apps/control-plane/src/application/services/feature-state-service.ts +191 -6
  83. package/apps/control-plane/src/application/services/gate-service.ts +121 -2
  84. package/apps/control-plane/src/application/services/git-reconciliation-service.ts +1591 -0
  85. package/apps/control-plane/src/application/services/intake-service.ts +1468 -0
  86. package/apps/control-plane/src/application/services/merge-service.ts +308 -17
  87. package/apps/control-plane/src/application/services/notifier-service.ts +3 -1
  88. package/apps/control-plane/src/application/services/performance-analytics-service.ts +75 -0
  89. package/apps/control-plane/src/application/services/plan-service.ts +336 -20
  90. package/apps/control-plane/src/application/services/question-service.ts +693 -0
  91. package/apps/control-plane/src/application/services/reactions-service.ts +73 -17
  92. package/apps/control-plane/src/application/services/replay-timeline-service.ts +295 -0
  93. package/apps/control-plane/src/application/services/reporting-service.ts +194 -10
  94. package/apps/control-plane/src/application/services/run-lease-service.ts +121 -5
  95. package/apps/control-plane/src/application/services/worktree-watchdog-service.ts +95 -8
  96. package/apps/control-plane/src/application/tools/tool-metadata.ts +7 -0
  97. package/apps/control-plane/src/application/usage-types.ts +138 -0
  98. package/apps/control-plane/src/cli/add-command-handler.ts +162 -0
  99. package/apps/control-plane/src/cli/answer-command-handler.ts +113 -0
  100. package/apps/control-plane/src/cli/attach-command-handler.ts +12 -3
  101. package/apps/control-plane/src/cli/cli-argument-parser.ts +133 -11
  102. package/apps/control-plane/src/cli/collision-command-handler.ts +113 -0
  103. package/apps/control-plane/src/cli/command-catalog.ts +479 -0
  104. package/apps/control-plane/src/cli/complete-command-handler.ts +23 -0
  105. package/apps/control-plane/src/cli/completion-command-handler.ts +25 -0
  106. package/apps/control-plane/src/cli/completion-resolver.ts +319 -0
  107. package/apps/control-plane/src/cli/completion-shell-renderer.ts +58 -0
  108. package/apps/control-plane/src/cli/dashboard-command-handler.ts +110 -1
  109. package/apps/control-plane/src/cli/dashboard-runtime-runner.ts +1036 -0
  110. package/apps/control-plane/src/cli/dashboard-runtime.ts +31 -0
  111. package/apps/control-plane/src/cli/help-command-handler.ts +17 -185
  112. package/apps/control-plane/src/cli/init-command-handler.ts +51 -6
  113. package/apps/control-plane/src/cli/merge-command-handler.ts +200 -0
  114. package/apps/control-plane/src/cli/questions-command-handler.ts +70 -0
  115. package/apps/control-plane/src/cli/replay-command-handler.ts +98 -0
  116. package/apps/control-plane/src/cli/resume-command-handler.ts +231 -16
  117. package/apps/control-plane/src/cli/retry-command-handler.ts +229 -17
  118. package/apps/control-plane/src/cli/retry-resume-decision.ts +75 -0
  119. package/apps/control-plane/src/cli/rollback-command-handler.ts +4 -2
  120. package/apps/control-plane/src/cli/run-command-handler.ts +35 -1
  121. package/apps/control-plane/src/cli/spec-ingestion-service.ts +45 -55
  122. package/apps/control-plane/src/cli/spec-preparation.ts +114 -0
  123. package/apps/control-plane/src/cli/spec-utils.ts +90 -11
  124. package/apps/control-plane/src/cli/status-command-handler.ts +122 -0
  125. package/apps/control-plane/src/cli/types.ts +41 -3
  126. package/apps/control-plane/src/core/collisions.ts +150 -31
  127. package/apps/control-plane/src/core/constants.ts +18 -1
  128. package/apps/control-plane/src/core/error-codes.ts +39 -0
  129. package/apps/control-plane/src/core/execution-control.ts +56 -0
  130. package/apps/control-plane/src/core/feature-resume-phase.ts +118 -0
  131. package/apps/control-plane/src/core/gate-freshness.ts +359 -0
  132. package/apps/control-plane/src/core/gate-log-extractor.ts +97 -0
  133. package/apps/control-plane/src/core/gates.ts +90 -1
  134. package/apps/control-plane/src/core/intake-artifacts.ts +295 -0
  135. package/apps/control-plane/src/core/kernel-types.ts +11 -0
  136. package/apps/control-plane/src/core/kernel.ts +604 -16
  137. package/apps/control-plane/src/core/mainline-conflict.ts +22 -0
  138. package/apps/control-plane/src/core/merge-repair.ts +149 -0
  139. package/apps/control-plane/src/core/path-layout.ts +46 -2
  140. package/apps/control-plane/src/core/path-rules.ts +11 -3
  141. package/apps/control-plane/src/core/plan-submit-recovery.ts +130 -0
  142. package/apps/control-plane/src/core/questions.ts +49 -0
  143. package/apps/control-plane/src/core/runtime-sessions.ts +4 -0
  144. package/apps/control-plane/src/core/schemas.ts +40 -1
  145. package/apps/control-plane/src/core/tool-caller.ts +25 -1
  146. package/apps/control-plane/src/core/utils/index-normalizer.ts +25 -4
  147. package/apps/control-plane/src/core/worktree-diff.ts +66 -0
  148. package/apps/control-plane/src/index.ts +29 -1
  149. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +300 -6
  150. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +17 -0
  151. package/apps/control-plane/src/mcp/tool-runtime.ts +63 -4
  152. package/apps/control-plane/src/providers/api-worker-provider.ts +62 -15
  153. package/apps/control-plane/src/providers/cli-worker-provider.ts +1037 -61
  154. package/apps/control-plane/src/providers/output-parsers/generic-output-parser.ts +99 -1
  155. package/apps/control-plane/src/providers/output-parsers/types.ts +2 -0
  156. package/apps/control-plane/src/providers/provider-defaults.ts +116 -7
  157. package/apps/control-plane/src/providers/providers.ts +225 -21
  158. package/apps/control-plane/src/providers/worker-provider-factory.ts +26 -2
  159. package/apps/control-plane/src/supervisor/artifact-stager.ts +52 -0
  160. package/apps/control-plane/src/supervisor/build-wave-executor.ts +477 -166
  161. package/apps/control-plane/src/supervisor/execution-enrollment-service.ts +408 -0
  162. package/apps/control-plane/src/supervisor/organizer-enrollment-scheduler.ts +117 -0
  163. package/apps/control-plane/src/supervisor/organizer-sidecar-service.ts +394 -0
  164. package/apps/control-plane/src/supervisor/plan-conformance-scorer.ts +2 -5
  165. package/apps/control-plane/src/supervisor/planner-phase.ts +85 -0
  166. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +993 -64
  167. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +20 -1
  168. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +384 -177
  169. package/apps/control-plane/src/supervisor/run-coordinator.ts +723 -20
  170. package/apps/control-plane/src/supervisor/runtime.ts +485 -9
  171. package/apps/control-plane/src/supervisor/session-orchestrator.ts +220 -1
  172. package/apps/control-plane/src/supervisor/types.ts +152 -1
  173. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +1030 -92
  174. package/apps/control-plane/test/activity-monitor.spec.ts +76 -0
  175. package/apps/control-plane/test/add-command-handler.spec.ts +189 -0
  176. package/apps/control-plane/test/application/services/feature-state-service.spec.ts +208 -0
  177. package/apps/control-plane/test/artifact-stager.spec.ts +93 -0
  178. package/apps/control-plane/test/batch-operations.spec.ts +58 -0
  179. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +50 -2
  180. package/apps/control-plane/test/bootstrap-manifest-generator-service.spec.ts +99 -0
  181. package/apps/control-plane/test/bootstrap.spec.ts +177 -4
  182. package/apps/control-plane/test/checkpoint-service.spec.ts +977 -29
  183. package/apps/control-plane/test/cli-argument-parser.spec.ts +119 -0
  184. package/apps/control-plane/test/cli-helpers.spec.ts +1202 -12
  185. package/apps/control-plane/test/cli.unit.spec.ts +797 -16
  186. package/apps/control-plane/test/collision-command-handler.spec.ts +182 -0
  187. package/apps/control-plane/test/collision-override-service.spec.ts +878 -0
  188. package/apps/control-plane/test/collision-queue.spec.ts +430 -2
  189. package/apps/control-plane/test/collisions.spec.ts +209 -1
  190. package/apps/control-plane/test/core-utils.spec.ts +61 -0
  191. package/apps/control-plane/test/cost-tracking.spec.ts +224 -0
  192. package/apps/control-plane/test/dashboard-api.integration.spec.ts +185 -5
  193. package/apps/control-plane/test/dashboard-client.spec.ts +948 -0
  194. package/apps/control-plane/test/dashboard-command.spec.ts +138 -6
  195. package/apps/control-plane/test/dashboard-runtime-runner.spec.ts +1550 -0
  196. package/apps/control-plane/test/dashboard-runtime.spec.ts +138 -0
  197. package/apps/control-plane/test/dashboard-ui-utils.spec.ts +56 -12
  198. package/apps/control-plane/test/dependency-scheduler.spec.ts +7 -1
  199. package/apps/control-plane/test/env-file.spec.ts +76 -0
  200. package/apps/control-plane/test/execution-control-service.spec.ts +535 -0
  201. package/apps/control-plane/test/execution-enrollment-service.spec.ts +648 -0
  202. package/apps/control-plane/test/feature-lifecycle.spec.ts +126 -0
  203. package/apps/control-plane/test/feature-resume-phase.spec.ts +164 -0
  204. package/apps/control-plane/test/feature-send-message-service.spec.ts +161 -0
  205. package/apps/control-plane/test/feature-state-service.spec.ts +295 -0
  206. package/apps/control-plane/test/fs.spec.ts +80 -0
  207. package/apps/control-plane/test/gate-freshness.spec.ts +590 -0
  208. package/apps/control-plane/test/gate-log-extractor.spec.ts +170 -0
  209. package/apps/control-plane/test/gates.spec.ts +108 -0
  210. package/apps/control-plane/test/git-reconciliation-service.spec.ts +2307 -0
  211. package/apps/control-plane/test/helpers.ts +65 -0
  212. package/apps/control-plane/test/incremental-gates.spec.ts +271 -0
  213. package/apps/control-plane/test/index-normalizer.spec.ts +98 -0
  214. package/apps/control-plane/test/init-wizard.spec.ts +17 -0
  215. package/apps/control-plane/test/intake-artifacts.spec.ts +203 -0
  216. package/apps/control-plane/test/intake-service.spec.ts +3176 -0
  217. package/apps/control-plane/test/kernel-collision-replay.spec.ts +3 -2
  218. package/apps/control-plane/test/kernel-tool-executor.spec.ts +77 -0
  219. package/apps/control-plane/test/kernel-tool-wiring.spec.ts +279 -0
  220. package/apps/control-plane/test/kernel.branches.spec.ts +15 -2
  221. package/apps/control-plane/test/kernel.coverage.spec.ts +7 -3
  222. package/apps/control-plane/test/kernel.coverage2.spec.ts +731 -2
  223. package/apps/control-plane/test/kernel.spec.ts +464 -2
  224. package/apps/control-plane/test/mainline-conflict.spec.ts +66 -0
  225. package/apps/control-plane/test/mcp-helpers.spec.ts +79 -0
  226. package/apps/control-plane/test/mcp.spec.ts +177 -13
  227. package/apps/control-plane/test/merge-command-handler.spec.ts +531 -0
  228. package/apps/control-plane/test/merge-service.spec.ts +570 -4
  229. package/apps/control-plane/test/notifier-service.spec.ts +26 -0
  230. package/apps/control-plane/test/organizer-enrollment-scheduler.spec.ts +340 -0
  231. package/apps/control-plane/test/organizer-ordering-artifact.spec.ts +95 -0
  232. package/apps/control-plane/test/organizer-sidecar-service.spec.ts +468 -0
  233. package/apps/control-plane/test/output-loop-detector.spec.ts +6 -0
  234. package/apps/control-plane/test/path-layout.spec.ts +70 -0
  235. package/apps/control-plane/test/performance-analytics.spec.ts +124 -0
  236. package/apps/control-plane/test/plan-conformance-scorer.spec.ts +53 -0
  237. package/apps/control-plane/test/plan-service.spec.ts +686 -4
  238. package/apps/control-plane/test/planning-wave-executor.spec.ts +3272 -86
  239. package/apps/control-plane/test/policy-loader-service.spec.ts +5 -0
  240. package/apps/control-plane/test/prompt-overlay.spec.ts +65 -0
  241. package/apps/control-plane/test/provider-command-runner-epipe.spec.ts +64 -0
  242. package/apps/control-plane/test/providers/api-worker-provider.spec.ts +129 -0
  243. package/apps/control-plane/test/providers/cli-worker-provider.spec.ts +148 -0
  244. package/apps/control-plane/test/providers/usage-types.spec.ts +98 -0
  245. package/apps/control-plane/test/providers.spec.ts +293 -16
  246. package/apps/control-plane/test/question-command-handlers.spec.ts +156 -0
  247. package/apps/control-plane/test/question-service.spec.ts +1119 -0
  248. package/apps/control-plane/test/reactions.spec.ts +114 -0
  249. package/apps/control-plane/test/replay-command-handler.spec.ts +144 -0
  250. package/apps/control-plane/test/replay-timeline-service.spec.ts +459 -0
  251. package/apps/control-plane/test/response.spec.ts +31 -0
  252. package/apps/control-plane/test/resume-command.spec.ts +757 -9
  253. package/apps/control-plane/test/retry-resume-decision.spec.ts +133 -0
  254. package/apps/control-plane/test/rollback-command-handler.spec.ts +334 -0
  255. package/apps/control-plane/test/rollback-command.spec.ts +120 -0
  256. package/apps/control-plane/test/run-coordinator.spec.ts +3062 -404
  257. package/apps/control-plane/test/schemas/state.schema.spec.ts +71 -0
  258. package/apps/control-plane/test/service-retry-paths.spec.ts +112 -0
  259. package/apps/control-plane/test/services.spec.ts +472 -2
  260. package/apps/control-plane/test/session-management.spec.ts +346 -1
  261. package/apps/control-plane/test/spec-ingestion.spec.ts +102 -28
  262. package/apps/control-plane/test/spec-preparation.spec.ts +182 -0
  263. package/apps/control-plane/test/supervisor-collaborators.spec.ts +191 -3
  264. package/apps/control-plane/test/supervisor.calltool.spec.ts +198 -0
  265. package/apps/control-plane/test/supervisor.spec.ts +95 -16
  266. package/apps/control-plane/test/supervisor.unit.spec.ts +385 -18
  267. package/apps/control-plane/test/tool-runtime.spec.ts +122 -0
  268. package/apps/control-plane/test/worker-decision-loop.spec.ts +3479 -476
  269. package/apps/control-plane/test/worker-execution-policy.spec.ts +1416 -6
  270. package/apps/control-plane/test/worker-provider-adapters.spec.ts +1894 -37
  271. package/apps/control-plane/test/worker-provider-factory.spec.ts +81 -0
  272. package/apps/control-plane/test/worktree-watchdog-service.spec.ts +125 -0
  273. package/apps/control-plane/vitest.config.ts +5 -0
  274. package/config/agentic/orchestrator/agents.yaml +22 -1
  275. package/config/agentic/orchestrator/gates.yaml +24 -7
  276. package/config/agentic/orchestrator/policy.yaml +23 -1
  277. package/config/agentic/orchestrator/prompts/builder.system.md +69 -20
  278. package/config/agentic/orchestrator/prompts/organizer.system.md +85 -0
  279. package/config/agentic/orchestrator/prompts/overrides/builder.claude.md +28 -0
  280. package/config/agentic/orchestrator/prompts/overrides/builder.codex.md +28 -0
  281. package/config/agentic/orchestrator/prompts/overrides/planner.claude.md +20 -0
  282. package/config/agentic/orchestrator/prompts/overrides/planner.codex.md +20 -0
  283. package/config/agentic/orchestrator/prompts/planner-intake.system.md +149 -0
  284. package/config/agentic/orchestrator/prompts/planner.system.md +113 -40
  285. package/config/agentic/orchestrator/prompts/qa.system.md +75 -18
  286. package/config/agentic/orchestrator/prompts/reconciler.system.md +119 -0
  287. package/dist/apps/control-plane/application/kernel-tool-wiring.d.ts +26 -2
  288. package/dist/apps/control-plane/application/kernel-tool-wiring.js +40 -2
  289. package/dist/apps/control-plane/application/kernel-tool-wiring.js.map +1 -1
  290. package/dist/apps/control-plane/application/services/activity-monitor-service.js +37 -1
  291. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  292. package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.d.ts +4 -0
  293. package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.js +188 -0
  294. package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.js.map +1 -0
  295. package/dist/apps/control-plane/application/services/checkpoint-service.d.ts +5 -0
  296. package/dist/apps/control-plane/application/services/checkpoint-service.js +69 -24
  297. package/dist/apps/control-plane/application/services/checkpoint-service.js.map +1 -1
  298. package/dist/apps/control-plane/application/services/collision-override-service.d.ts +139 -0
  299. package/dist/apps/control-plane/application/services/collision-override-service.js +568 -0
  300. package/dist/apps/control-plane/application/services/collision-override-service.js.map +1 -0
  301. package/dist/apps/control-plane/application/services/collision-queue-service.d.ts +15 -0
  302. package/dist/apps/control-plane/application/services/collision-queue-service.js +92 -33
  303. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  304. package/dist/apps/control-plane/application/services/cost-tracking-service.d.ts +11 -0
  305. package/dist/apps/control-plane/application/services/cost-tracking-service.js +75 -0
  306. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  307. package/dist/apps/control-plane/application/services/execution-control-service.d.ts +75 -0
  308. package/dist/apps/control-plane/application/services/execution-control-service.js +421 -0
  309. package/dist/apps/control-plane/application/services/execution-control-service.js.map +1 -0
  310. package/dist/apps/control-plane/application/services/feature-deletion-service.d.ts +1 -0
  311. package/dist/apps/control-plane/application/services/feature-deletion-service.js +23 -1
  312. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  313. package/dist/apps/control-plane/application/services/feature-lifecycle-service.d.ts +24 -1
  314. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +132 -3
  315. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  316. package/dist/apps/control-plane/application/services/feature-send-message-service.js +16 -8
  317. package/dist/apps/control-plane/application/services/feature-send-message-service.js.map +1 -1
  318. package/dist/apps/control-plane/application/services/feature-state-service.d.ts +36 -0
  319. package/dist/apps/control-plane/application/services/feature-state-service.js +163 -6
  320. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  321. package/dist/apps/control-plane/application/services/gate-service.d.ts +2 -1
  322. package/dist/apps/control-plane/application/services/gate-service.js +95 -5
  323. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  324. package/dist/apps/control-plane/application/services/git-reconciliation-service.d.ts +92 -0
  325. package/dist/apps/control-plane/application/services/git-reconciliation-service.js +1097 -0
  326. package/dist/apps/control-plane/application/services/git-reconciliation-service.js.map +1 -0
  327. package/dist/apps/control-plane/application/services/intake-service.d.ts +63 -0
  328. package/dist/apps/control-plane/application/services/intake-service.js +1050 -0
  329. package/dist/apps/control-plane/application/services/intake-service.js.map +1 -0
  330. package/dist/apps/control-plane/application/services/merge-service.d.ts +5 -1
  331. package/dist/apps/control-plane/application/services/merge-service.js +233 -18
  332. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  333. package/dist/apps/control-plane/application/services/notifier-service.d.ts +1 -1
  334. package/dist/apps/control-plane/application/services/notifier-service.js +1 -0
  335. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  336. package/dist/apps/control-plane/application/services/performance-analytics-service.d.ts +11 -0
  337. package/dist/apps/control-plane/application/services/performance-analytics-service.js +59 -0
  338. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  339. package/dist/apps/control-plane/application/services/plan-service.d.ts +5 -0
  340. package/dist/apps/control-plane/application/services/plan-service.js +254 -15
  341. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  342. package/dist/apps/control-plane/application/services/question-service.d.ts +72 -0
  343. package/dist/apps/control-plane/application/services/question-service.js +507 -0
  344. package/dist/apps/control-plane/application/services/question-service.js.map +1 -0
  345. package/dist/apps/control-plane/application/services/reactions-service.d.ts +2 -0
  346. package/dist/apps/control-plane/application/services/reactions-service.js +60 -17
  347. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  348. package/dist/apps/control-plane/application/services/replay-timeline-service.d.ts +39 -0
  349. package/dist/apps/control-plane/application/services/replay-timeline-service.js +205 -0
  350. package/dist/apps/control-plane/application/services/replay-timeline-service.js.map +1 -0
  351. package/dist/apps/control-plane/application/services/reporting-service.d.ts +59 -0
  352. package/dist/apps/control-plane/application/services/reporting-service.js +121 -9
  353. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  354. package/dist/apps/control-plane/application/services/run-lease-service.d.ts +20 -0
  355. package/dist/apps/control-plane/application/services/run-lease-service.js +81 -4
  356. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  357. package/dist/apps/control-plane/application/services/worktree-watchdog-service.d.ts +10 -0
  358. package/dist/apps/control-plane/application/services/worktree-watchdog-service.js +65 -8
  359. package/dist/apps/control-plane/application/services/worktree-watchdog-service.js.map +1 -1
  360. package/dist/apps/control-plane/application/tools/tool-metadata.js +7 -0
  361. package/dist/apps/control-plane/application/tools/tool-metadata.js.map +1 -1
  362. package/dist/apps/control-plane/application/usage-types.d.ts +65 -0
  363. package/dist/apps/control-plane/application/usage-types.js +75 -0
  364. package/dist/apps/control-plane/application/usage-types.js.map +1 -0
  365. package/dist/apps/control-plane/cli/add-command-handler.d.ts +18 -0
  366. package/dist/apps/control-plane/cli/add-command-handler.js +110 -0
  367. package/dist/apps/control-plane/cli/add-command-handler.js.map +1 -0
  368. package/dist/apps/control-plane/cli/answer-command-handler.d.ts +8 -0
  369. package/dist/apps/control-plane/cli/answer-command-handler.js +96 -0
  370. package/dist/apps/control-plane/cli/answer-command-handler.js.map +1 -0
  371. package/dist/apps/control-plane/cli/attach-command-handler.js +8 -3
  372. package/dist/apps/control-plane/cli/attach-command-handler.js.map +1 -1
  373. package/dist/apps/control-plane/cli/cli-argument-parser.js +131 -11
  374. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  375. package/dist/apps/control-plane/cli/collision-command-handler.d.ts +8 -0
  376. package/dist/apps/control-plane/cli/collision-command-handler.js +90 -0
  377. package/dist/apps/control-plane/cli/collision-command-handler.js.map +1 -0
  378. package/dist/apps/control-plane/cli/command-catalog.d.ts +21 -0
  379. package/dist/apps/control-plane/cli/command-catalog.js +416 -0
  380. package/dist/apps/control-plane/cli/command-catalog.js.map +1 -0
  381. package/dist/apps/control-plane/cli/complete-command-handler.d.ts +15 -0
  382. package/dist/apps/control-plane/cli/complete-command-handler.js +26 -0
  383. package/dist/apps/control-plane/cli/complete-command-handler.js.map +1 -0
  384. package/dist/apps/control-plane/cli/completion-command-handler.d.ts +8 -0
  385. package/dist/apps/control-plane/cli/completion-command-handler.js +20 -0
  386. package/dist/apps/control-plane/cli/completion-command-handler.js.map +1 -0
  387. package/dist/apps/control-plane/cli/completion-resolver.d.ts +1 -0
  388. package/dist/apps/control-plane/cli/completion-resolver.js +250 -0
  389. package/dist/apps/control-plane/cli/completion-resolver.js.map +1 -0
  390. package/dist/apps/control-plane/cli/completion-shell-renderer.d.ts +3 -0
  391. package/dist/apps/control-plane/cli/completion-shell-renderer.js +53 -0
  392. package/dist/apps/control-plane/cli/completion-shell-renderer.js.map +1 -0
  393. package/dist/apps/control-plane/cli/dashboard-command-handler.d.ts +1 -0
  394. package/dist/apps/control-plane/cli/dashboard-command-handler.js +83 -1
  395. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  396. package/dist/apps/control-plane/cli/dashboard-runtime-runner.d.ts +81 -0
  397. package/dist/apps/control-plane/cli/dashboard-runtime-runner.js +724 -0
  398. package/dist/apps/control-plane/cli/dashboard-runtime-runner.js.map +1 -0
  399. package/dist/apps/control-plane/cli/dashboard-runtime.d.ts +1 -0
  400. package/dist/apps/control-plane/cli/dashboard-runtime.js +26 -0
  401. package/dist/apps/control-plane/cli/dashboard-runtime.js.map +1 -0
  402. package/dist/apps/control-plane/cli/help-command-handler.js +13 -172
  403. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  404. package/dist/apps/control-plane/cli/init-command-handler.js +51 -6
  405. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  406. package/dist/apps/control-plane/cli/merge-command-handler.d.ts +8 -0
  407. package/dist/apps/control-plane/cli/merge-command-handler.js +139 -0
  408. package/dist/apps/control-plane/cli/merge-command-handler.js.map +1 -0
  409. package/dist/apps/control-plane/cli/questions-command-handler.d.ts +8 -0
  410. package/dist/apps/control-plane/cli/questions-command-handler.js +59 -0
  411. package/dist/apps/control-plane/cli/questions-command-handler.js.map +1 -0
  412. package/dist/apps/control-plane/cli/replay-command-handler.d.ts +15 -0
  413. package/dist/apps/control-plane/cli/replay-command-handler.js +55 -0
  414. package/dist/apps/control-plane/cli/replay-command-handler.js.map +1 -0
  415. package/dist/apps/control-plane/cli/resume-command-handler.d.ts +2 -0
  416. package/dist/apps/control-plane/cli/resume-command-handler.js +180 -17
  417. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  418. package/dist/apps/control-plane/cli/retry-command-handler.js +202 -16
  419. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  420. package/dist/apps/control-plane/cli/retry-resume-decision.d.ts +26 -0
  421. package/dist/apps/control-plane/cli/retry-resume-decision.js +61 -0
  422. package/dist/apps/control-plane/cli/retry-resume-decision.js.map +1 -0
  423. package/dist/apps/control-plane/cli/rollback-command-handler.js +3 -2
  424. package/dist/apps/control-plane/cli/rollback-command-handler.js.map +1 -1
  425. package/dist/apps/control-plane/cli/run-command-handler.js +26 -2
  426. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  427. package/dist/apps/control-plane/cli/spec-ingestion-service.d.ts +2 -0
  428. package/dist/apps/control-plane/cli/spec-ingestion-service.js +37 -48
  429. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  430. package/dist/apps/control-plane/cli/spec-preparation.d.ts +14 -0
  431. package/dist/apps/control-plane/cli/spec-preparation.js +81 -0
  432. package/dist/apps/control-plane/cli/spec-preparation.js.map +1 -0
  433. package/dist/apps/control-plane/cli/spec-utils.d.ts +4 -0
  434. package/dist/apps/control-plane/cli/spec-utils.js +70 -11
  435. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  436. package/dist/apps/control-plane/cli/status-command-handler.js +69 -0
  437. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  438. package/dist/apps/control-plane/cli/types.d.ts +41 -4
  439. package/dist/apps/control-plane/cli/types.js +9 -1
  440. package/dist/apps/control-plane/cli/types.js.map +1 -1
  441. package/dist/apps/control-plane/core/collisions.d.ts +37 -19
  442. package/dist/apps/control-plane/core/collisions.js +87 -12
  443. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  444. package/dist/apps/control-plane/core/constants.d.ts +17 -1
  445. package/dist/apps/control-plane/core/constants.js +18 -1
  446. package/dist/apps/control-plane/core/constants.js.map +1 -1
  447. package/dist/apps/control-plane/core/error-codes.d.ts +39 -0
  448. package/dist/apps/control-plane/core/error-codes.js +39 -0
  449. package/dist/apps/control-plane/core/error-codes.js.map +1 -1
  450. package/dist/apps/control-plane/core/execution-control.d.ts +45 -0
  451. package/dist/apps/control-plane/core/execution-control.js +2 -0
  452. package/dist/apps/control-plane/core/execution-control.js.map +1 -0
  453. package/dist/apps/control-plane/core/feature-resume-phase.d.ts +3 -0
  454. package/dist/apps/control-plane/core/feature-resume-phase.js +88 -0
  455. package/dist/apps/control-plane/core/feature-resume-phase.js.map +1 -0
  456. package/dist/apps/control-plane/core/gate-freshness.d.ts +48 -0
  457. package/dist/apps/control-plane/core/gate-freshness.js +267 -0
  458. package/dist/apps/control-plane/core/gate-freshness.js.map +1 -0
  459. package/dist/apps/control-plane/core/gate-log-extractor.d.ts +22 -0
  460. package/dist/apps/control-plane/core/gate-log-extractor.js +66 -0
  461. package/dist/apps/control-plane/core/gate-log-extractor.js.map +1 -0
  462. package/dist/apps/control-plane/core/gates.d.ts +11 -2
  463. package/dist/apps/control-plane/core/gates.js +67 -3
  464. package/dist/apps/control-plane/core/gates.js.map +1 -1
  465. package/dist/apps/control-plane/core/intake-artifacts.d.ts +109 -0
  466. package/dist/apps/control-plane/core/intake-artifacts.js +143 -0
  467. package/dist/apps/control-plane/core/intake-artifacts.js.map +1 -0
  468. package/dist/apps/control-plane/core/kernel-types.d.ts +8 -0
  469. package/dist/apps/control-plane/core/kernel.d.ts +256 -8
  470. package/dist/apps/control-plane/core/kernel.js +400 -14
  471. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  472. package/dist/apps/control-plane/core/mainline-conflict.d.ts +7 -0
  473. package/dist/apps/control-plane/core/mainline-conflict.js +20 -0
  474. package/dist/apps/control-plane/core/mainline-conflict.js.map +1 -0
  475. package/dist/apps/control-plane/core/merge-repair.d.ts +35 -0
  476. package/dist/apps/control-plane/core/merge-repair.js +99 -0
  477. package/dist/apps/control-plane/core/merge-repair.js.map +1 -0
  478. package/dist/apps/control-plane/core/path-layout.d.ts +10 -0
  479. package/dist/apps/control-plane/core/path-layout.js +32 -2
  480. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  481. package/dist/apps/control-plane/core/path-rules.js +9 -3
  482. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  483. package/dist/apps/control-plane/core/plan-submit-recovery.d.ts +22 -0
  484. package/dist/apps/control-plane/core/plan-submit-recovery.js +78 -0
  485. package/dist/apps/control-plane/core/plan-submit-recovery.js.map +1 -0
  486. package/dist/apps/control-plane/core/questions.d.ts +40 -0
  487. package/dist/apps/control-plane/core/questions.js +2 -0
  488. package/dist/apps/control-plane/core/questions.js.map +1 -0
  489. package/dist/apps/control-plane/core/runtime-sessions.d.ts +4 -0
  490. package/dist/apps/control-plane/core/schemas.d.ts +2 -0
  491. package/dist/apps/control-plane/core/schemas.js +31 -1
  492. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  493. package/dist/apps/control-plane/core/tool-caller.d.ts +18 -1
  494. package/dist/apps/control-plane/core/utils/index-normalizer.js +17 -4
  495. package/dist/apps/control-plane/core/utils/index-normalizer.js.map +1 -1
  496. package/dist/apps/control-plane/core/worktree-diff.d.ts +4 -0
  497. package/dist/apps/control-plane/core/worktree-diff.js +52 -0
  498. package/dist/apps/control-plane/core/worktree-diff.js.map +1 -0
  499. package/dist/apps/control-plane/index.d.ts +10 -2
  500. package/dist/apps/control-plane/index.js +9 -2
  501. package/dist/apps/control-plane/index.js.map +1 -1
  502. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +236 -6
  503. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  504. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +16 -0
  505. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  506. package/dist/apps/control-plane/mcp/tool-runtime.d.ts +5 -0
  507. package/dist/apps/control-plane/mcp/tool-runtime.js +40 -5
  508. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  509. package/dist/apps/control-plane/providers/api-worker-provider.d.ts +2 -2
  510. package/dist/apps/control-plane/providers/api-worker-provider.js +40 -9
  511. package/dist/apps/control-plane/providers/api-worker-provider.js.map +1 -1
  512. package/dist/apps/control-plane/providers/cli-worker-provider.d.ts +59 -3
  513. package/dist/apps/control-plane/providers/cli-worker-provider.js +758 -46
  514. package/dist/apps/control-plane/providers/cli-worker-provider.js.map +1 -1
  515. package/dist/apps/control-plane/providers/output-parsers/generic-output-parser.js +91 -1
  516. package/dist/apps/control-plane/providers/output-parsers/generic-output-parser.js.map +1 -1
  517. package/dist/apps/control-plane/providers/output-parsers/types.d.ts +2 -0
  518. package/dist/apps/control-plane/providers/provider-defaults.d.ts +12 -0
  519. package/dist/apps/control-plane/providers/provider-defaults.js +103 -7
  520. package/dist/apps/control-plane/providers/provider-defaults.js.map +1 -1
  521. package/dist/apps/control-plane/providers/providers.d.ts +50 -4
  522. package/dist/apps/control-plane/providers/providers.js +145 -14
  523. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  524. package/dist/apps/control-plane/providers/worker-provider-factory.d.ts +2 -0
  525. package/dist/apps/control-plane/providers/worker-provider-factory.js +8 -1
  526. package/dist/apps/control-plane/providers/worker-provider-factory.js.map +1 -1
  527. package/dist/apps/control-plane/supervisor/artifact-stager.d.ts +5 -0
  528. package/dist/apps/control-plane/supervisor/artifact-stager.js +45 -0
  529. package/dist/apps/control-plane/supervisor/artifact-stager.js.map +1 -0
  530. package/dist/apps/control-plane/supervisor/build-wave-executor.d.ts +24 -1
  531. package/dist/apps/control-plane/supervisor/build-wave-executor.js +362 -150
  532. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  533. package/dist/apps/control-plane/supervisor/execution-enrollment-service.d.ts +41 -0
  534. package/dist/apps/control-plane/supervisor/execution-enrollment-service.js +311 -0
  535. package/dist/apps/control-plane/supervisor/execution-enrollment-service.js.map +1 -0
  536. package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.d.ts +15 -0
  537. package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.js +93 -0
  538. package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.js.map +1 -0
  539. package/dist/apps/control-plane/supervisor/organizer-sidecar-service.d.ts +44 -0
  540. package/dist/apps/control-plane/supervisor/organizer-sidecar-service.js +311 -0
  541. package/dist/apps/control-plane/supervisor/organizer-sidecar-service.js.map +1 -0
  542. package/dist/apps/control-plane/supervisor/plan-conformance-scorer.js +2 -5
  543. package/dist/apps/control-plane/supervisor/plan-conformance-scorer.js.map +1 -1
  544. package/dist/apps/control-plane/supervisor/planner-phase.d.ts +3 -0
  545. package/dist/apps/control-plane/supervisor/planner-phase.js +70 -0
  546. package/dist/apps/control-plane/supervisor/planner-phase.js.map +1 -0
  547. package/dist/apps/control-plane/supervisor/planning-wave-executor.d.ts +42 -0
  548. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +753 -55
  549. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  550. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +19 -1
  551. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js.map +1 -1
  552. package/dist/apps/control-plane/supervisor/qa-wave-executor.d.ts +21 -0
  553. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +287 -156
  554. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  555. package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +30 -1
  556. package/dist/apps/control-plane/supervisor/run-coordinator.js +561 -17
  557. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  558. package/dist/apps/control-plane/supervisor/runtime.d.ts +84 -0
  559. package/dist/apps/control-plane/supervisor/runtime.js +393 -3
  560. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  561. package/dist/apps/control-plane/supervisor/session-orchestrator.d.ts +54 -0
  562. package/dist/apps/control-plane/supervisor/session-orchestrator.js +176 -1
  563. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  564. package/dist/apps/control-plane/supervisor/types.d.ts +142 -1
  565. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  566. package/dist/apps/control-plane/supervisor/worker-decision-loop.d.ts +68 -2
  567. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +723 -89
  568. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  569. package/docs/core/ARCHITECTURE.md +227 -0
  570. package/docs/core/DECISIONS.md +94 -0
  571. package/docs/core/DOMAIN-LOGIC.md +60 -0
  572. package/docs/core/PATTERNS.md +201 -0
  573. package/docs/core/TROUBLESHOOTING.md +347 -0
  574. package/docs/core/intentgraph-dependencies.json +39860 -0
  575. package/docs/core/intentgraph.index.json +46580 -0
  576. package/docs/plans/2026-03-10-gate-failure-targeted-repair-design.md +224 -0
  577. package/docs/plans/2026-03-10-gate-failure-targeted-repair.md +1032 -0
  578. package/docs/superpowers/plans/2026-03-16-provider-cli-config.md +743 -0
  579. package/docs/superpowers/plans/2026-03-23-reconcile-divergence-fix.md +777 -0
  580. package/docs/superpowers/plans/2026-03-28-ordering-agent-implementation.md +1754 -0
  581. package/docs/superpowers/plans/2026-03-29-drop-zone-and-provider-optimization.md +1108 -0
  582. package/docs/superpowers/plans/2026-03-29-merge-target-feature-branch.md +685 -0
  583. package/docs/superpowers/plans/2026-03-29-organizer-sidecar-runtime-loop.md +1289 -0
  584. package/docs/superpowers/specs/2026-03-23-reconcile-divergence-fix-design.md +118 -0
  585. package/docs/superpowers/specs/2026-03-28-ordering-agent-spec-audit-design.md +50 -0
  586. package/docs/superpowers/specs/2026-03-29-drop-zone-and-provider-optimization-design.md +254 -0
  587. package/docs/superpowers/specs/2026-03-29-merge-target-feature-branch-design.md +152 -0
  588. package/docs/superpowers/specs/2026-03-29-organizer-sidecar-runtime-loop-design.md +225 -0
  589. package/package.json +3 -2
  590. package/packages/web-dashboard/package.json +2 -1
  591. package/packages/web-dashboard/src/app/analytics/page.tsx +36 -2
  592. package/packages/web-dashboard/src/app/api/actions/route.ts +274 -63
  593. package/packages/web-dashboard/src/app/api/actions/status/route.ts +35 -0
  594. package/packages/web-dashboard/src/app/api/analytics/provider/route.ts +18 -0
  595. package/packages/web-dashboard/src/app/api/collisions/approve/route.ts +58 -0
  596. package/packages/web-dashboard/src/app/api/features/[id]/checkpoint-diff/route.ts +36 -0
  597. package/packages/web-dashboard/src/app/api/features/[id]/checkpoints/route.ts +29 -0
  598. package/packages/web-dashboard/src/app/api/features/[id]/conflicts/abort/route.ts +29 -0
  599. package/packages/web-dashboard/src/app/api/features/[id]/conflicts/files/route.ts +30 -0
  600. package/packages/web-dashboard/src/app/api/features/[id]/conflicts/resolve/route.ts +51 -0
  601. package/packages/web-dashboard/src/app/api/features/[id]/conflicts/route.ts +75 -0
  602. package/packages/web-dashboard/src/app/api/features/[id]/diff/route.ts +16 -2
  603. package/packages/web-dashboard/src/app/api/features/[id]/files/route.ts +26 -0
  604. package/packages/web-dashboard/src/app/api/features/[id]/gate-history/route.ts +27 -0
  605. package/packages/web-dashboard/src/app/api/features/[id]/genealogy/route.ts +26 -0
  606. package/packages/web-dashboard/src/app/api/features/[id]/history/run/[runId]/route.ts +20 -0
  607. package/packages/web-dashboard/src/app/api/features/[id]/history/runs/route.ts +34 -0
  608. package/packages/web-dashboard/src/app/api/features/[id]/intake-workspace/route.ts +20 -0
  609. package/packages/web-dashboard/src/app/api/features/[id]/live-output/route.ts +74 -0
  610. package/packages/web-dashboard/src/app/api/features/[id]/plan/amend/route.ts +21 -0
  611. package/packages/web-dashboard/src/app/api/features/[id]/plan-progress/route.ts +20 -0
  612. package/packages/web-dashboard/src/app/api/features/[id]/planner-artifacts/[artifact]/route.ts +78 -0
  613. package/packages/web-dashboard/src/app/api/features/[id]/planner-lifecycle/route.ts +20 -0
  614. package/packages/web-dashboard/src/app/api/features/[id]/planning-workspace/route.ts +20 -0
  615. package/packages/web-dashboard/src/app/api/features/[id]/questions/[questionId]/answer/route.ts +27 -0
  616. package/packages/web-dashboard/src/app/api/features/[id]/questions/route.ts +18 -0
  617. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +14 -7
  618. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +57 -2
  619. package/packages/web-dashboard/src/app/api/features/[id]/spec/route.ts +30 -0
  620. package/packages/web-dashboard/src/app/api/features/[id]/triage/route.ts +83 -0
  621. package/packages/web-dashboard/src/app/api/features/[id]/worker-events/route.ts +40 -0
  622. package/packages/web-dashboard/src/app/api/launch/preview/route.ts +86 -0
  623. package/packages/web-dashboard/src/app/api/launch/submit/route.ts +180 -0
  624. package/packages/web-dashboard/src/app/api/mainline/status/route.ts +74 -0
  625. package/packages/web-dashboard/src/app/api/merge-queue/route.ts +13 -0
  626. package/packages/web-dashboard/src/app/api/policy/budget/route.ts +14 -0
  627. package/packages/web-dashboard/src/app/api/projects/route.ts +11 -7
  628. package/packages/web-dashboard/src/app/api/reconciler/queue/route.ts +47 -0
  629. package/packages/web-dashboard/src/app/api/run/route.ts +26 -2
  630. package/packages/web-dashboard/src/app/api/runtime/events/route.ts +227 -0
  631. package/packages/web-dashboard/src/app/api/runtime/operations/route.ts +269 -0
  632. package/packages/web-dashboard/src/app/api/runtime/questions/route.ts +11 -0
  633. package/packages/web-dashboard/src/app/api/runtime/runs/route.ts +80 -0
  634. package/packages/web-dashboard/src/app/api/status/route.ts +4 -2
  635. package/packages/web-dashboard/src/app/feature/[id]/page.tsx +32 -42
  636. package/packages/web-dashboard/src/app/globals.css +34 -3
  637. package/packages/web-dashboard/src/app/launch/page.tsx +357 -0
  638. package/packages/web-dashboard/src/app/layout.tsx +23 -1
  639. package/packages/web-dashboard/src/app/page.tsx +263 -272
  640. package/packages/web-dashboard/src/components/dashboard/attention-strip.tsx +52 -0
  641. package/packages/web-dashboard/src/components/dashboard/collision-approval-drawer.tsx +185 -0
  642. package/packages/web-dashboard/src/components/dashboard/command-center-header.tsx +102 -0
  643. package/packages/web-dashboard/src/components/dashboard/mainline-status-banner.tsx +84 -0
  644. package/packages/web-dashboard/src/components/dashboard/merged-archive.tsx +36 -0
  645. package/packages/web-dashboard/src/components/dashboard/prioritized-queues.tsx +98 -0
  646. package/packages/web-dashboard/src/components/dashboard/reconciler-queue-card.tsx +115 -0
  647. package/packages/web-dashboard/src/components/dashboard/secondary-diagnostics-rail.tsx +48 -0
  648. package/packages/web-dashboard/src/components/dashboard/task-filter-bar.tsx +74 -0
  649. package/packages/web-dashboard/src/components/dashboard/triage-drawer.tsx +455 -0
  650. package/packages/web-dashboard/src/components/diff-viewer.tsx +19 -3
  651. package/packages/web-dashboard/src/components/evidence-viewer.tsx +65 -51
  652. package/packages/web-dashboard/src/components/feature-card.tsx +90 -7
  653. package/packages/web-dashboard/src/components/feature-cost-panel.tsx +112 -11
  654. package/packages/web-dashboard/src/components/feature-list-view.tsx +25 -4
  655. package/packages/web-dashboard/src/components/features/runtime-inspector/EventsTimelineView.tsx +260 -0
  656. package/packages/web-dashboard/src/components/features/runtime-inspector/OperationsListView.tsx +172 -0
  657. package/packages/web-dashboard/src/components/features/runtime-inspector/RuntimeInspectorPanel.tsx +896 -0
  658. package/packages/web-dashboard/src/components/filter-bar.tsx +7 -39
  659. package/packages/web-dashboard/src/components/focus/ActionableRiskList.tsx +46 -0
  660. package/packages/web-dashboard/src/components/focus/AgentRolePerformanceCard.tsx +200 -0
  661. package/packages/web-dashboard/src/components/focus/BlockedGuidanceBanner.tsx +149 -0
  662. package/packages/web-dashboard/src/components/focus/CheckpointInspector.tsx +123 -0
  663. package/packages/web-dashboard/src/components/focus/CheckpointRail.tsx +118 -0
  664. package/packages/web-dashboard/src/components/focus/CheckpointScrubber.tsx +249 -0
  665. package/packages/web-dashboard/src/components/focus/CollisionApprovalBanner.tsx +192 -0
  666. package/packages/web-dashboard/src/components/focus/CollisionRadar.tsx +136 -0
  667. package/packages/web-dashboard/src/components/focus/ConflictStatusCard.tsx +52 -0
  668. package/packages/web-dashboard/src/components/focus/ContextSidebar.tsx +108 -0
  669. package/packages/web-dashboard/src/components/focus/DiagnosisPanel.tsx +68 -0
  670. package/packages/web-dashboard/src/components/focus/FeatureDecisionBanner.tsx +68 -0
  671. package/packages/web-dashboard/src/components/focus/FeatureQuestionAnswerPanel.tsx +167 -0
  672. package/packages/web-dashboard/src/components/focus/FocusHeader.tsx +54 -0
  673. package/packages/web-dashboard/src/components/focus/FocusLayout.tsx +283 -0
  674. package/packages/web-dashboard/src/components/focus/GateFlakinessSummary.tsx +144 -0
  675. package/packages/web-dashboard/src/components/focus/GenealogyTree.tsx +34 -0
  676. package/packages/web-dashboard/src/components/focus/HeroBlock.tsx +67 -0
  677. package/packages/web-dashboard/src/components/focus/LiveAgentConsole.tsx +277 -0
  678. package/packages/web-dashboard/src/components/focus/MergeQueueCard.tsx +78 -0
  679. package/packages/web-dashboard/src/components/focus/OperationalSummaryCard.tsx +227 -0
  680. package/packages/web-dashboard/src/components/focus/PinnedActions.tsx +96 -0
  681. package/packages/web-dashboard/src/components/focus/PlanAmendmentPanel.tsx +250 -0
  682. package/packages/web-dashboard/src/components/focus/PlanProgressPanel.tsx +133 -0
  683. package/packages/web-dashboard/src/components/focus/PlannerArtifactViewer.tsx +158 -0
  684. package/packages/web-dashboard/src/components/focus/PlannerLifecycleHeader.tsx +141 -0
  685. package/packages/web-dashboard/src/components/focus/ProgressSnapshotCard.tsx +113 -0
  686. package/packages/web-dashboard/src/components/focus/RecentMaterialChanges.tsx +69 -0
  687. package/packages/web-dashboard/src/components/focus/RoleLogViewer.tsx +436 -0
  688. package/packages/web-dashboard/src/components/focus/RunHistoryBrowser.tsx +62 -0
  689. package/packages/web-dashboard/src/components/focus/SpecViewer.tsx +172 -0
  690. package/packages/web-dashboard/src/components/focus/TabBar.tsx +33 -0
  691. package/packages/web-dashboard/src/components/focus/UsageBurnChart.tsx +212 -0
  692. package/packages/web-dashboard/src/components/focus/VerificationSummaryCard.tsx +122 -0
  693. package/packages/web-dashboard/src/components/focus/tabs/ChangesTab.tsx +325 -0
  694. package/packages/web-dashboard/src/components/focus/tabs/ConflictsTab.tsx +395 -0
  695. package/packages/web-dashboard/src/components/focus/tabs/GatesQaTab.tsx +38 -0
  696. package/packages/web-dashboard/src/components/focus/tabs/HistoryTab.tsx +213 -0
  697. package/packages/web-dashboard/src/components/focus/tabs/IntakeTab.tsx +429 -0
  698. package/packages/web-dashboard/src/components/focus/tabs/OverviewTab.tsx +217 -0
  699. package/packages/web-dashboard/src/components/focus/tabs/PlanningTab.tsx +390 -0
  700. package/packages/web-dashboard/src/components/focus/tabs/ReviewTab.tsx +497 -0
  701. package/packages/web-dashboard/src/components/focus/tabs/RuntimeTab.tsx +213 -0
  702. package/packages/web-dashboard/src/components/focus/tabs/TranscriptTab.tsx +315 -0
  703. package/packages/web-dashboard/src/components/gate-results.tsx +2 -2
  704. package/packages/web-dashboard/src/components/human-input-panel.tsx +33 -57
  705. package/packages/web-dashboard/src/components/kanban-board.tsx +4 -0
  706. package/packages/web-dashboard/src/components/launch/launch-draft-card.tsx +131 -0
  707. package/packages/web-dashboard/src/components/plan-viewer.tsx +147 -69
  708. package/packages/web-dashboard/src/components/quick-launch-panel.tsx +20 -47
  709. package/packages/web-dashboard/src/components/summary-bar.tsx +30 -76
  710. package/packages/web-dashboard/src/lib/aop-client.ts +2484 -36
  711. package/packages/web-dashboard/src/lib/blocked-state-guidance.ts +475 -0
  712. package/packages/web-dashboard/src/lib/collision-radar.ts +136 -0
  713. package/packages/web-dashboard/src/lib/dashboard-action-states.ts +204 -0
  714. package/packages/web-dashboard/src/lib/dashboard-runtime-client.ts +439 -0
  715. package/packages/web-dashboard/src/lib/dashboard-utils.ts +179 -18
  716. package/packages/web-dashboard/src/lib/drop-zone-utils.ts +92 -0
  717. package/packages/web-dashboard/src/lib/focus-detail-derivations.ts +958 -0
  718. package/packages/web-dashboard/src/lib/focus-view.ts +300 -0
  719. package/packages/web-dashboard/src/lib/health-diagnosis.ts +356 -0
  720. package/packages/web-dashboard/src/lib/launch-contracts.ts +77 -0
  721. package/packages/web-dashboard/src/lib/launch-markdown.ts +107 -0
  722. package/packages/web-dashboard/src/lib/launch-page-preview.ts +89 -0
  723. package/packages/web-dashboard/src/lib/live-feed.ts +1 -1
  724. package/packages/web-dashboard/src/lib/multi-project-config.ts +33 -0
  725. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +845 -59
  726. package/packages/web-dashboard/src/lib/planner-workspace.ts +1285 -0
  727. package/packages/web-dashboard/src/lib/review-contracts.ts +5 -3
  728. package/packages/web-dashboard/src/lib/runtime-files.ts +285 -0
  729. package/packages/web-dashboard/src/lib/tool-catalog.ts +51 -0
  730. package/packages/web-dashboard/src/lib/types.ts +731 -3
  731. package/packages/web-dashboard/src/lib/usage-burn.ts +175 -0
  732. package/packages/web-dashboard/src/lib/worktree-diff.ts +128 -0
  733. package/packages/web-dashboard/src/styles/dashboard.module.css +1742 -459
  734. package/packages/web-dashboard/test/api/actions/route.spec.ts +675 -0
  735. package/packages/web-dashboard/test/api/features/diff.route.spec.ts +57 -0
  736. package/packages/web-dashboard/test/api/features/feature.route.spec.ts +99 -0
  737. package/packages/web-dashboard/test/api/features/live-output.route.spec.ts +123 -0
  738. package/packages/web-dashboard/test/api/features/plan-amend.route.spec.ts +95 -0
  739. package/packages/web-dashboard/test/api/features/planner-workspaces.route.spec.ts +162 -0
  740. package/packages/web-dashboard/test/api/features/question-answer.route.spec.ts +99 -0
  741. package/packages/web-dashboard/test/api/features/triage.route.spec.ts +195 -0
  742. package/packages/web-dashboard/test/api/launch/preview.route.spec.ts +149 -0
  743. package/packages/web-dashboard/test/api/launch/submit.route.spec.ts +382 -0
  744. package/packages/web-dashboard/test/api/runtime/events/route.spec.ts +164 -0
  745. package/packages/web-dashboard/test/api/runtime/operations/route.spec.ts +156 -0
  746. package/packages/web-dashboard/test/api/runtime/runs/route.spec.ts +112 -0
  747. package/packages/web-dashboard/test/components/changes-tab.spec.tsx +76 -0
  748. package/packages/web-dashboard/test/components/command-center-root.spec.tsx +87 -0
  749. package/packages/web-dashboard/test/components/diagnosis-panel.spec.tsx +59 -0
  750. package/packages/web-dashboard/test/components/feature-card.spec.tsx +45 -0
  751. package/packages/web-dashboard/test/components/focus-layout.spec.tsx +299 -0
  752. package/packages/web-dashboard/test/components/gate-results.spec.tsx +39 -0
  753. package/packages/web-dashboard/test/components/gates-qa-tab.spec.tsx +118 -0
  754. package/packages/web-dashboard/test/components/human-input-panel.spec.tsx +54 -0
  755. package/packages/web-dashboard/test/components/intake-tab.spec.tsx +210 -0
  756. package/packages/web-dashboard/test/components/kanban-board.spec.tsx +35 -0
  757. package/packages/web-dashboard/test/components/launch-draft-card.spec.tsx +54 -0
  758. package/packages/web-dashboard/test/components/launch-page.spec.tsx +79 -0
  759. package/packages/web-dashboard/test/components/overview-tab.spec.tsx +236 -0
  760. package/packages/web-dashboard/test/components/planning-tab.spec.tsx +202 -0
  761. package/packages/web-dashboard/test/components/review-tab.spec.tsx +169 -0
  762. package/packages/web-dashboard/test/components/role-log-viewer.spec.ts +42 -0
  763. package/packages/web-dashboard/test/components/runtime-inspector.spec.tsx +22 -0
  764. package/packages/web-dashboard/test/components/runtime-tab.spec.tsx +133 -0
  765. package/packages/web-dashboard/test/components/transcript-tab.spec.tsx +46 -0
  766. package/packages/web-dashboard/test/components/triage-drawer.spec.tsx +159 -0
  767. package/packages/web-dashboard/test/lib/aop-client.spec.ts +235 -0
  768. package/packages/web-dashboard/test/lib/dashboard-runtime-client.spec.ts +144 -0
  769. package/packages/web-dashboard/test/lib/focus-detail-derivations.spec.ts +314 -0
  770. package/packages/web-dashboard/test/lib/focus-view.spec.ts +248 -0
  771. package/packages/web-dashboard/test/lib/health-diagnosis.spec.ts +277 -0
  772. package/packages/web-dashboard/test/lib/launch-markdown.spec.ts +36 -0
  773. package/packages/web-dashboard/test/lib/multi-project-config.spec.ts +54 -0
  774. package/packages/web-dashboard/test/lib/orchestrator-tools.spec.ts +352 -0
  775. package/packages/web-dashboard/test/lib/planner-workspace.spec.ts +289 -0
  776. package/packages/web-dashboard/test/lib/worktree-diff.spec.ts +119 -0
  777. package/packages/web-dashboard/vitest.config.ts +2 -0
  778. package/spec-files/completed/agentic_orchestrator_add_feature_to_active_execution_spec.md +557 -0
  779. package/spec-files/completed/agentic_orchestrator_dashboard_command_center_redesign_spec.md +1147 -0
  780. package/spec-files/completed/agentic_orchestrator_execution_mode_spec.md +18 -16
  781. package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_a_spec.md +672 -0
  782. package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_b_spec.md +794 -0
  783. package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_c_decision_centric_remediation_spec.md +1037 -0
  784. package/spec-files/completed/agentic_orchestrator_feature_focus_view_ux_redesign_spec.md +1432 -0
  785. package/spec-files/completed/agentic_orchestrator_focus_plan_tab_intake_planning_workspace_spec.md +921 -0
  786. package/spec-files/completed/agentic_orchestrator_intentional_collision_override_spec.md +584 -0
  787. package/spec-files/completed/agentic_orchestrator_interactive_planning_intake_and_requirements_verification_spec.md +1185 -0
  788. package/spec-files/completed/agentic_orchestrator_reactive_execution_enrollment_spec.md +864 -0
  789. package/spec-files/{outstanding → completed}/agentic_orchestrator_runtime_inspection_spec.md +92 -19
  790. package/spec-files/completed/agentic_orchestrator_scope_aware_run_lease_spec.md +408 -0
  791. package/spec-files/completed/git-reconciliation-engine.md +827 -0
  792. package/spec-files/outstanding/agentic_orchestrator_dashboard_quick_launch_and_control_surface_spec.md +331 -0
  793. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +16 -6
  794. package/spec-files/outstanding/agentic_orchestrator_evidence_integrity_doctor_spec.md +60 -9
  795. package/spec-files/outstanding/agentic_orchestrator_focus_plan_tab_execution_contract_workspace_spec.md +616 -0
  796. package/spec-files/outstanding/agentic_orchestrator_headless_standby_dashboard_runtime_spec.md +310 -0
  797. package/spec-files/outstanding/agentic_orchestrator_human_input_interaction_protocol_spec.md +175 -72
  798. package/spec-files/outstanding/agentic_orchestrator_interactive_rename_cleanup_spec.md +197 -0
  799. package/spec-files/outstanding/agentic_orchestrator_interactive_resume_and_reconciliation_disposition_spec.md +412 -0
  800. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +166 -137
  801. package/spec-files/outstanding/agentic_orchestrator_observability_replay_spec.md +3 -3
  802. package/spec-files/outstanding/agentic_orchestrator_phase_specific_agent_profiles_and_token_telemetry_spec.md +303 -0
  803. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +18 -5
  804. package/spec-files/outstanding/agentic_orchestrator_policy_stratification_spec.md +225 -0
  805. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +77 -50
  806. package/spec-files/outstanding/agentic_orchestrator_ready_to_merge_branch_handoff_spec.md +724 -0
  807. package/spec-files/outstanding/agentic_orchestrator_remove_deterministic_mode_spec.md +263 -0
  808. package/spec-files/outstanding/agentic_orchestrator_request_more_context_and_dashboard_human_input_spec.md +456 -0
  809. package/spec-files/outstanding/agentic_orchestrator_spec_coverage_and_reconciliation_enforcement_spec.md +1411 -0
  810. package/spec-files/outstanding/agentic_orchestrator_spec_ordering_agent_spec.md +370 -0
  811. package/spec-files/outstanding/shadow_workspace_implementation_spec.md +1 -1
  812. package/spec-files/progress.md +2026 -120
  813. package/specs/001-runtime-inspection/checklists/requirements.md +35 -0
  814. package/specs/001-runtime-inspection/design.md +338 -0
  815. package/specs/001-runtime-inspection/spec.md +95 -0
  816. package/specs/002-scope-aware-lease/checklists/requirements.md +35 -0
  817. package/specs/002-scope-aware-lease/contracts/lease-registry.schema.json +101 -0
  818. package/specs/002-scope-aware-lease/data-model.md +236 -0
  819. package/specs/002-scope-aware-lease/plan.md +766 -0
  820. package/specs/002-scope-aware-lease/quickstart.md +150 -0
  821. package/specs/002-scope-aware-lease/research.md +135 -0
  822. package/specs/002-scope-aware-lease/spec.md +128 -0
  823. package/specs/002-scope-aware-lease/tasks.md +767 -0
  824. package/tsconfig.json +1 -1
  825. package/vitest.config.ts +28 -0
  826. package/ARCHITECTURE_ADHERENCE_ANALYSIS.md +0 -871
  827. package/packages/web-dashboard/next-env.d.ts +0 -6
  828. package/packages/web-dashboard/src/components/detail-panel.tsx +0 -1124
  829. package/packages/web-dashboard/src/components/review-workspace.tsx +0 -1162
  830. /package/spec-files/{outstanding → completed}/agentic_orchestrator_artifact_database_publishing_spec.md +0 -0
  831. /package/spec-files/{outstanding → completed}/agentic_orchestrator_cli_shell_tab_completion_spec.md +0 -0
  832. /package/spec-files/{outstanding → completed}/agentic_orchestrator_dashboard_diff_and_agent_console_spec.md +0 -0
  833. /package/spec-files/{outstanding → completed}/agentic_orchestrator_performance_improvements_spec.md +0 -0
  834. /package/spec-files/{outstanding → completed}/agentic_orchestrator_persistent_worker_runtime_spec.md +0 -0
  835. /package/spec-files/{outstanding → completed}/agentic_orchestrator_provider_auth_bootstrap_spec.md +0 -0
  836. /package/spec-files/{outstanding → completed}/agentic_orchestrator_real_worker_provider_execution_spec.md +0 -0
@@ -94,7 +94,7 @@ run_history:
94
94
  },
95
95
  "status": {
96
96
  "type": "string",
97
- "enum": ["active", "completed", "failed", "timeout"],
97
+ "enum": ["active", "completed", "failed", "timeout", "interrupted"],
98
98
  "description": "Final status of this run for this feature"
99
99
  }
100
100
  }
@@ -106,8 +106,11 @@ run_history:
106
106
  **Update Behavior:**
107
107
 
108
108
  - **On feature.init:** Create `run_history` with current run_id, status `active`
109
- - **On supervisor start:** Append current run_id to `run_history` if not already present
110
- - **On supervisor stop/complete:** Update latest run_history entry with `ended_at` and final `status`
109
+ - **On supervisor start:**
110
+ 1. Read existing `run_history`.
111
+ 2. If the latest entry (index 0) has `status: 'active'` or `ended_at: null`, mark it as `status: 'interrupted'` and set `ended_at` to the current timestamp. This handles crashes or manual restarts where the previous run didn't exit cleanly.
112
+ 3. Append the _new_ current run_id to `run_history` with `status: 'active'`.
113
+ - **On supervisor stop/complete:** Update latest run_history entry with `ended_at` and final `status` (`completed`, `failed`, or `timeout`).
111
114
  - **On feature.delete:** Archive run_history before deletion (optional)
112
115
 
113
116
  ### 1.2 Operation Ledger Files
@@ -166,6 +169,8 @@ run_history:
166
169
 
167
170
  ## 2. API Contract
168
171
 
172
+ **Note:** The API routes in `packages/web-dashboard` must use Node.js `fs` module to directly read artifacts from the `.aop` directory. Ensure proper error handling for file access.
173
+
169
174
  ### 2.1 Operation Ledger Endpoint
170
175
 
171
176
  **Route:** `GET /api/runtime/operations`
@@ -197,7 +202,7 @@ run_history:
197
202
  run_info: {
198
203
  started_at: string;
199
204
  ended_at: string | null;
200
- status: 'active' | 'completed' | 'failed' | 'timeout';
205
+ status: 'active' | 'completed' | 'failed' | 'timeout' | 'interrupted';
201
206
  };
202
207
  operations: Array<{
203
208
  operation_id: string;
@@ -262,7 +267,7 @@ run_history:
262
267
  run_info: {
263
268
  started_at: string;
264
269
  ended_at: string | null;
265
- status: 'active' | 'completed' | 'failed' | 'timeout';
270
+ status: 'active' | 'completed' | 'failed' | 'timeout' | 'interrupted';
266
271
  };
267
272
  events: Array<{
268
273
  ts: string;
@@ -322,7 +327,7 @@ run_history:
322
327
  run_id: string;
323
328
  started_at: string;
324
329
  ended_at: string | null;
325
- status: 'active' | 'completed' | 'failed' | 'timeout';
330
+ status: 'active' | 'completed' | 'failed' | 'timeout' | 'interrupted';
326
331
  has_operations: boolean;
327
332
  has_events: boolean;
328
333
  }>;
@@ -349,6 +354,8 @@ run_history:
349
354
 
350
355
  **File:** `packages/web-dashboard/src/components/runtime-inspector.tsx`
351
356
 
357
+ **Type:** Client Component (`"use client"`)
358
+
352
359
  **Location:** Appears in Feature Detail Panel (right side) as a new tab
353
360
 
354
361
  **Tabs:**
@@ -380,6 +387,11 @@ run_history:
380
387
  - Filter by success/failure (toggle)
381
388
  - Pagination controls at bottom
382
389
 
390
+ **Error & Loading States:**
391
+
392
+ - **Loading:** Display skeleton rows while fetching data.
393
+ - **Error:** Display user-friendly error message ("Failed to load runtime data") with a "Retry" button.
394
+
383
395
  ### 3.2 Operations List View
384
396
 
385
397
  **Requirements:**
@@ -527,7 +539,7 @@ Notes: <note_count>
527
539
  },
528
540
  "status": {
529
541
  "type": "string",
530
- "enum": ["active", "completed", "failed", "timeout"],
542
+ "enum": ["active", "completed", "failed", "timeout", "interrupted"],
531
543
  "description": "Final status of this run for this feature"
532
544
  }
533
545
  }
@@ -548,9 +560,13 @@ Notes: <note_count>
548
560
 
549
561
  **Changes:**
550
562
 
551
- - On feature start: Call `featureStateService.appendRunHistory(featureId, this.runId, new Date().toISOString())`
552
- - On feature complete/fail: Call `featureStateService.updateRunHistory(featureId, this.runId, new Date().toISOString(), status)`
553
- - On recovery: Check if current run_id exists in run_history, append if missing
563
+ - **On feature start:**
564
+ - Retrieve current feature state.
565
+ - Check `run_history[0]`. If it exists and `status === 'active'` or `ended_at` is null:
566
+ - Call `featureStateService.updateRunHistory(featureId, oldRunId, new Date().toISOString(), 'interrupted')`
567
+ - Call `featureStateService.appendRunHistory(featureId, this.runId, new Date().toISOString())`
568
+ - **On feature complete/fail:** Call `featureStateService.updateRunHistory(featureId, this.runId, new Date().toISOString(), status)`
569
+ - **On recovery:** Check if current run_id exists in run_history, append if missing.
554
570
 
555
571
  **Migration Strategy:**
556
572
 
@@ -565,9 +581,9 @@ Notes: <note_count>
565
581
  **Logic:**
566
582
 
567
583
  1. Resolve `feature_id` and `project` from query params
568
- 2. Read `.aop/features/<feature_id>/state.md`
584
+ 2. Read `.aop/features/<feature_id>/state.md` using `fs`
569
585
  3. Parse YAML frontmatter to extract `run_history`
570
- 4. For each run, check if ledger/events files exist
586
+ 4. For each run, check if ledger/events files exist (using `fs.existsSync`)
571
587
  5. Return formatted response with run list
572
588
 
573
589
  **File:** `packages/web-dashboard/src/app/api/runtime/operations/route.ts`
@@ -577,7 +593,7 @@ Notes: <note_count>
577
593
  1. Resolve `feature_id` and `project` from query params
578
594
  2. If `run_id` provided, use it; else read state.md and extract `run_history[0].run_id`
579
595
  3. If no run_history, return `run_not_found`
580
- 4. Read `.aop/runtime/operation-ledger/run:<run_id>.json`
596
+ 4. Read `.aop/runtime/operation-ledger/run:<run_id>.json` using `fs`
581
597
  5. Parse JSON and extract operations
582
598
  6. Filter operations by `feature_id` (check operation_id contains feature_id)
583
599
  7. Sort by timestamp (extract from operation_id or use file `updated_at`)
@@ -591,7 +607,7 @@ Notes: <note_count>
591
607
  1. Resolve `feature_id` and `project` from query params
592
608
  2. If `run_id` provided, use it; else read state.md and extract `run_history[0].run_id`
593
609
  3. If no run_history, return `run_not_found`
594
- 4. Read `.aop/runtime/worker-events/run:<run_id>.jsonl`
610
+ 4. Read `.aop/runtime/worker-events/run:<run_id>.jsonl` using `fs`
595
611
  5. Parse JSONL (split by newline, parse each line as JSON)
596
612
  6. Filter events by `feature_id`
597
613
  7. Apply filters (event_type, role, valid)
@@ -642,7 +658,7 @@ interface RunHistoryEntry {
642
658
  run_id: string;
643
659
  started_at: string;
644
660
  ended_at: string | null;
645
- status: 'active' | 'completed' | 'failed' | 'timeout';
661
+ status: 'active' | 'completed' | 'failed' | 'timeout' | 'interrupted';
646
662
  has_operations: boolean;
647
663
  has_events: boolean;
648
664
  }
@@ -797,10 +813,11 @@ interface RunHistoryEntry {
797
813
 
798
814
  - [ ] Schema change: Add `run_history` field to `state.schema.json`
799
815
  - [ ] Supervisor: Update run_history on feature start/stop
816
+ - [ ] Supervisor: Correctly mark interrupted runs on startup
800
817
  - [ ] FeatureStateService: Support run_history read/write
801
- - [ ] `GET /api/runtime/runs` endpoint implemented
802
- - [ ] `GET /api/runtime/operations` endpoint implemented
803
- - [ ] `GET /api/runtime/events` endpoint implemented
818
+ - [ ] `GET /api/runtime/runs` endpoint implemented with `fs` access
819
+ - [ ] `GET /api/runtime/operations` endpoint implemented with `fs` access
820
+ - [ ] `GET /api/runtime/events` endpoint implemented with `fs` access
804
821
  - [ ] Run ID resolution from run_history (latest by default)
805
822
  - [ ] RuntimeInspector component renders in detail panel
806
823
  - [ ] Run selector dropdown with all historical runs
@@ -861,6 +878,7 @@ interface RunHistoryEntry {
861
878
  - Update FeatureStateService to read/write run_history
862
879
  - Update SupervisorRuntime to append run_id on feature start
863
880
  - Update SupervisorRuntime to update run status on feature end
881
+ - Implement robust crash detection (mark interrupted runs)
864
882
  - Add migration for existing features (backfill empty run_history)
865
883
  - Add unit tests for schema validation
866
884
  - Add unit tests for state service
@@ -911,6 +929,7 @@ interface RunHistoryEntry {
911
929
  - UI render time < 100ms (p95)
912
930
  - Zero crashes on large files (< 10MB)
913
931
  - 100% test coverage for new code
932
+ - 100% accurate identification of interrupted/crashed runs
914
933
 
915
934
  ### 9.2 User Metrics
916
935
 
@@ -937,4 +956,58 @@ interface RunHistoryEntry {
937
956
 
938
957
  ---
939
958
 
940
- **End of Specification**
959
+ ## 11. Implementation Tasks
960
+
961
+ ## Phase 1: Foundational State Management
962
+
963
+ > **Goal:** Ensure all feature runs are reliably tracked in `feature_state.run_history` to enable historical inspection.
964
+
965
+ - [ ] T001 [P] Implement `appendRunHistory` method in `apps/control-plane/src/application/services/feature-state-service.ts` to add new runs to the history list.
966
+ - [ ] T002 [P] Implement `updateRunHistory` method in `apps/control-plane/src/application/services/feature-state-service.ts` to update status/end time of existing runs.
967
+ - [ ] T003 Update `SupervisorRuntime` in `apps/control-plane/src/supervisor/runtime.ts` to call `appendRunHistory` on startup for the current run.
968
+ - [ ] T004 Update `SupervisorRuntime` in `apps/control-plane/src/supervisor/runtime.ts` to call `updateRunHistory` on graceful shutdown or completion.
969
+ - [ ] T005 [P] Update `FeatureLifecycleService` in `apps/control-plane/src/application/services/feature-lifecycle-service.ts` to initialize `run_history` with the creation run ID during `feature.init`.
970
+ - [ ] T006 Verify state updates by inspecting `.aop/features/<feature_id>/state.md` after a supervisor run.
971
+
972
+ ## Phase 2: Backend API Endpoints
973
+
974
+ > **Goal:** Expose runtime artifacts (ledger, events, run history) to the frontend via Next.js API routes.
975
+
976
+ - [ ] T007 [P] Create utility `packages/web-dashboard/src/lib/runtime-files.ts` to resolve paths and read JSON/JSONL files from `.aop/runtime`.
977
+ - [ ] T008 [P] [US1] Create API route `GET /api/runtime/runs` in `packages/web-dashboard/src/app/api/runtime/runs/route.ts` to return run history for a feature.
978
+ - [ ] T009 [P] [US1] Create API route `GET /api/runtime/operations` in `packages/web-dashboard/src/app/api/runtime/operations/route.ts` to return operation ledger data.
979
+ - [ ] T010 [P] [US1] Create API route `GET /api/runtime/events` in `packages/web-dashboard/src/app/api/runtime/events/route.ts` to return worker events (parsing JSONL).
980
+ - [ ] T011 [US1] Implement run ID resolution logic in API routes: if `run_id` is missing, fetch latest from feature state.
981
+ - [ ] T012 [P] Add error handling for missing files (404) and permission errors in all runtime API routes.
982
+
983
+ ## Phase 3: UI Components & Integration
984
+
985
+ > **Goal:** Visualize the runtime data in the dashboard with a user-friendly inspector panel.
986
+
987
+ - [ ] T013 [P] [US1] Create `RuntimeInspectorPanel` container component in `packages/web-dashboard/src/components/features/runtime-inspector/RuntimeInspectorPanel.tsx`.
988
+ - [ ] T014 [P] [US1] Create `OperationsListView` component in `packages/web-dashboard/src/components/features/runtime-inspector/OperationsListView.tsx` to display tool calls.
989
+ - [ ] T015 [P] [US1] Create `EventsTimelineView` component in `packages/web-dashboard/src/components/features/runtime-inspector/EventsTimelineView.tsx` to display worker events.
990
+ - [ ] T016 [US1] Implement run selection dropdown in `RuntimeInspectorPanel` to switch between historical runs.
991
+ - [ ] T017 [US1] Add "Load More" or pagination support for large event logs (progressive loading).
992
+ - [ ] T018 [US1] Integrate `RuntimeInspectorPanel` into the Feature Detail page (`packages/web-dashboard/src/app/features/[id]/page.tsx` or equivalent).
993
+
994
+ ## Phase 4: Polish & UX Refinements
995
+
996
+ > **Goal:** Ensure the inspector is performant, responsive, and handles edge cases gracefully.
997
+
998
+ - [ ] T019 [P] Add collapsible JSON views for request/response payloads in `OperationsListView`.
999
+ - [ ] T020 [P] Add filtering controls (by event type: `worker_started`, `worker_failed`, etc.) to `EventsTimelineView`.
1000
+ - [ ] T021 [P] specific styling for error states (red highlights for failed operations/events).
1001
+ - [ ] T022 [P] Ensure timestamp formatting is consistent (local time vs UTC toggle if needed).
1002
+ - [ ] T023 Run `npm run verify` to ensure all new code meets quality standards (linting, types).
1003
+
1004
+ ## Dependencies
1005
+
1006
+ 1. **Foundational State Management** must complete before **Backend API Endpoints** (specifically for `runs` endpoint).
1007
+ 2. **Backend API Endpoints** must complete before **UI Components**.
1008
+ 3. **UI Components** integration depends on the existence of the Feature Detail page.
1009
+
1010
+ ## Implementation Strategy
1011
+
1012
+ - **MVP**: Focus on the _latest_ run first. Get the `run_history` tracking working, then the APIs for the current run, then the UI.
1013
+ - **Incremental**: You can build the API routes in parallel with the State Management updates, using mock data or manually edited state files for testing.
@@ -0,0 +1,408 @@
1
+ # Agentic Orchestrator: Scope-Aware Run Lease
2
+
3
+ **Feature Branch**: `002-scope-aware-lease`
4
+ **Status**: Ready for Implementation
5
+ **Priority**: P1 (US1 + US2) / P2 (US3 + US4)
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ Currently, when an orchestrator instance acquires a run lease it creates a global exclusive lock that prevents any other orchestrator from starting — regardless of whether the two would actually touch the same files or plan sections. This serializes all orchestration work even when runs target entirely different parts of the codebase.
12
+
13
+ This feature replaces that global execution barrier with a scope-aware one. When a new execution attempts to start, the system compares its declared codebase scope against the scopes of all currently active leases. Execution is only blocked when an overlap exists. Runs that target different sections of the codebase proceed concurrently.
14
+
15
+ ---
16
+
17
+ ## User Stories
18
+
19
+ ### User Story 1 — Parallel Execution of Non-Overlapping Runs (Priority: P1)
20
+
21
+ An operator triggers two orchestrator runs simultaneously. One targets the authentication subsystem; the other targets the payment processing subsystem. Because these runs touch disjoint parts of the codebase, both should be allowed to proceed in parallel.
22
+
23
+ **Acceptance Scenarios**:
24
+
25
+ 1. **Given** no active leases exist, **When** Run A declares scope `[packages/auth/]` and acquires a lease, **Then** Run A is granted the lease immediately.
26
+ 2. **Given** Run A holds a lease for scope `[packages/auth/]`, **When** Run B attempts to acquire a lease for scope `[packages/payments/]`, **Then** Run B is granted its lease without waiting.
27
+ 3. **Given** Run A and Run B are both active with non-overlapping scopes, **When** both complete, **Then** each releases its own lease without affecting the other.
28
+
29
+ ---
30
+
31
+ ### User Story 2 — Blocking of Overlapping Runs (Priority: P1)
32
+
33
+ Two orchestrator runs that both target the same directory or plan section — the second run must not be allowed to proceed until the first completes.
34
+
35
+ **Acceptance Scenarios**:
36
+
37
+ 1. **Given** Run A holds a lease for scope `[packages/auth/]`, **When** Run B attempts to acquire a lease for scope `[packages/auth/]`, **Then** Run B is blocked until Run A releases its lease.
38
+ 2. **Given** Run A holds a lease for scope `[packages/]`, **When** Run B attempts to acquire a lease for scope `[packages/auth/]`, **Then** Run B is blocked (path prefix containment).
39
+ 3. **Given** Run A holds a lease for scope `[packages/auth/, packages/shared/]`, **When** Run B declares scope `[packages/shared/, packages/payments/]`, **Then** Run B is blocked because `packages/shared/` appears in both scopes.
40
+
41
+ ---
42
+
43
+ ### User Story 3 — Conservative Fallback for Unknown Scope (Priority: P2)
44
+
45
+ A run started before a plan is established has no declared scope. The system must not allow an unknown-scope run to proceed concurrently with any other active run.
46
+
47
+ **Acceptance Scenarios**:
48
+
49
+ 1. **Given** Run A holds a lease for any declared scope, **When** Run B attempts to acquire a lease with no declared scope, **Then** Run B is blocked.
50
+ 2. **Given** Run A holds a lease with no declared scope, **When** Run B attempts to acquire a lease for any scope, **Then** Run B is blocked.
51
+ 3. **Given** no active leases exist and Run A has no declared scope, **When** Run A acquires the lease, **Then** Run A is granted the lease immediately.
52
+
53
+ ---
54
+
55
+ ### User Story 4 — Scope Declaration & Persistence at Acquisition (Priority: P2)
56
+
57
+ Orchestrators can supply a set of codebase paths or plan section identifiers when requesting a lease. This declared scope is persisted in the lease record and used for conflict detection.
58
+
59
+ **Acceptance Scenarios**:
60
+
61
+ 1. **Given** an orchestrator supplies directory paths when requesting a lease, **When** the lease is granted, **Then** the lease record contains exactly those paths.
62
+ 2. **Given** an orchestrator supplies plan section identifiers, **When** the lease is granted, **Then** the record contains those identifiers alongside any path-based scope.
63
+ 3. **Given** a stale lease is taken over by a new orchestrator, **When** the takeover completes, **Then** the new orchestrator's scope replaces the previous lease's scope in the record.
64
+
65
+ ---
66
+
67
+ ## Functional Requirements
68
+
69
+ - **FR-001**: The system MUST allow two orchestrator runs to hold active leases simultaneously when their declared codebase scopes do not overlap.
70
+ - **FR-002**: The system MUST deny or defer lease acquisition when the requesting run's scope overlaps with any currently active lease's scope.
71
+ - **FR-003**: Scope overlap MUST be evaluated using path-prefix containment — a scope entry overlaps another if one is a prefix of (or equal to) the other.
72
+ - **FR-004**: The system MUST treat a run with an undeclared or unknown scope as conflicting with all other active leases (conservative blocking).
73
+ - **FR-005**: The system MUST persist the declared scope as part of the lease record so it survives across heartbeat renewals and instance restarts.
74
+ - **FR-006**: The system MUST support scope declarations consisting of file-system paths, feature/plan section identifiers, or both.
75
+ - **FR-007**: An active orchestrator MUST be able to expand its declared scope during a run (e.g., after discovering additional affected files), and the updated scope MUST be used for subsequent conflict evaluations.
76
+ - **FR-008**: When a stale lease is taken over, the system MUST replace the expired scope with the new orchestrator's declared scope before evaluating conflicts.
77
+ - **FR-009**: The system MUST continue to use short-duration atomic locks for mutating the lease registry itself, ensuring conflict comparison and lease grant/deny decisions are race-condition free.
78
+ - **FR-010**: The system MUST produce an observable record (log entry or status field) when a lease acquisition is deferred due to scope conflict, identifying which active lease caused the block.
79
+
80
+ ---
81
+
82
+ ## Data Model
83
+
84
+ ### New Types (`apps/control-plane/src/core/runtime-sessions.ts`)
85
+
86
+ ```typescript
87
+ export interface LeaseScope {
88
+ paths: string[]; // file-system paths relative to repoRoot (prefix-matched)
89
+ plan_section_ids: string[]; // opaque plan section identifiers (equality-matched)
90
+ }
91
+
92
+ export type LeaseScopeDeclaration = LeaseScope | null;
93
+ // null → unknown/undeclared → conflicts with ALL active leases
94
+ // { paths: [], plan_section_ids: [] } → explicitly empty → conflicts with NOTHING
95
+ // { paths: [...], ... } → declared scope → prefix-overlap / equality check
96
+
97
+ export interface ActiveLeaseRecord {
98
+ run_id: string;
99
+ owner_instance_id: string;
100
+ instance_id: string;
101
+ scope: LeaseScopeDeclaration;
102
+ lease_expires_at: string; // ISO-8601; entries with expiry < now are pruned on read
103
+ acquired_at: string; // ISO-8601
104
+ }
105
+
106
+ export interface LeaseRegistry {
107
+ leases: ActiveLeaseRecord[];
108
+ updated_at: string; // ISO-8601; last write timestamp (informational)
109
+ }
110
+ ```
111
+
112
+ ### Modified Types
113
+
114
+ **`RuntimeSessionsSnapshot`** — add `scope?: LeaseScopeDeclaration` (optional, backward-compatible; missing field normalizes to `null`).
115
+
116
+ **`AcquireRunLeaseInput`** — add `scope?: LeaseScopeDeclaration` (optional; `undefined` normalizes to `null`).
117
+
118
+ **New: `ExpandRunLeaseScopeInput`**:
119
+
120
+ ```typescript
121
+ export interface ExpandRunLeaseScopeInput {
122
+ run_id: string;
123
+ owner_instance_id: string;
124
+ additional_paths?: string[];
125
+ additional_plan_section_ids?: string[];
126
+ }
127
+ ```
128
+
129
+ ### New Error Code (`apps/control-plane/src/core/error-codes.ts`)
130
+
131
+ ```typescript
132
+ LEASE_SCOPE_CONFLICT: 'lease_scope_conflict',
133
+ ```
134
+
135
+ Error details shape:
136
+
137
+ ```typescript
138
+ {
139
+ incoming_scope: LeaseScopeDeclaration;
140
+ blocking_run_id: string;
141
+ blocking_owner_instance_id: string;
142
+ conflicting_scope_entry: string; // first conflicting path or plan_section_id
143
+ retryable: true;
144
+ requires_human: false;
145
+ }
146
+ ```
147
+
148
+ ### Persistence
149
+
150
+ | Artifact | Path | Protected By |
151
+ | ----------------------- | ------------------------------------------ | --------------------------- |
152
+ | Per-instance lease file | `.aop/runtime/<instanceId>/run-lease.json` | `withIndexLock` |
153
+ | Global lease registry | `.aop/runtime/lease-registry.json` | `withIndexLock` (same lock) |
154
+
155
+ ---
156
+
157
+ ## Architecture
158
+
159
+ ### Conflict Detection Logic (Scope Overlap Rules)
160
+
161
+ ```
162
+ acquireRunLease(input):
163
+ scope = input.scope ?? null ← normalize undefined → null
164
+
165
+ active = registry.leases (pruned of expired entries)
166
+
167
+ for each activeLease in active (excluding same run_id re-acquire):
168
+ if activeLease.scope === null OR scope === null → CONFLICT
169
+ if scope is empty AND activeLease.scope is empty → no conflict
170
+ if scope is empty → no conflict (touches nothing)
171
+ if activeLease.scope is empty → no conflict
172
+ if pathsOverlap(scope.paths, activeLease.scope.paths) → CONFLICT
173
+ if planSectionsOverlap(...) → CONFLICT
174
+ → GRANT
175
+ ```
176
+
177
+ **Path normalization** (R-001): Strip trailing `/`, append exactly one `/`. Empty string after strip → `'/'` (root, overlaps everything). `packages/auth` and `packages/authentication` do NOT overlap.
178
+
179
+ **Plan section overlap** (R-002): Case-sensitive string equality only. No hierarchy between section IDs.
180
+
181
+ **Conflict matrix**:
182
+
183
+ | Incoming | Active | Result |
184
+ | ----------------------------------- | --------------------------- | -------------------------- |
185
+ | `null` | anything (any lease exists) | CONFLICT |
186
+ | anything | `null` | CONFLICT |
187
+ | `{ paths:[], plan_section_ids:[] }` | any | No conflict |
188
+ | non-empty | `{ paths:[], ... }` | No conflict |
189
+ | `packages/auth/` | `packages/payments/` | No conflict |
190
+ | `packages/auth/` | `packages/auth/` | CONFLICT |
191
+ | `packages/` | `packages/auth/utils/` | CONFLICT (parent/child) |
192
+ | `src/` | `src/config.ts` | CONFLICT (file within dir) |
193
+ | `src/` | `src-old/config.ts` | No conflict |
194
+
195
+ ### New Files
196
+
197
+ - **`apps/control-plane/src/application/services/lease-scope-conflict-detector.ts`** — Pure logic class, zero I/O, zero side effects. Methods: `normalizePath`, `pathsOverlap`, `planSectionsOverlap`, `detectConflict`.
198
+ - **`apps/control-plane/test/lease-scope-conflict-detector.spec.ts`** — 26 unit tests.
199
+ - **`apps/control-plane/test/run-lease-service.spec.ts`** — 20 integration tests.
200
+
201
+ ### Modified Files
202
+
203
+ | File | Change |
204
+ | ------------------------------------------- | -------------------------------------------------------------------------------------- |
205
+ | `core/runtime-sessions.ts` | 4 new types, `scope?` on snapshot |
206
+ | `core/error-codes.ts` | `LEASE_SCOPE_CONFLICT` added |
207
+ | `core/path-layout.ts` | `leaseRegistryPath` getter |
208
+ | `application/services/run-lease-service.ts` | Scope conflict integration, `expandRunLeaseScope`, port interface extensions |
209
+ | `core/kernel.ts` | `readLeaseRegistry`, `writeLeaseRegistry`, `emptyLeaseRegistry`, `expandRunLeaseScope` |
210
+ | `supervisor/types.ts` | `scope?` on `FeatureInput` |
211
+ | `supervisor/run-coordinator.ts` | `deriveRunScope()`, `expandScopesFromPlans()`, scope wired to `acquireRunLease` |
212
+ | `test/run-coordinator.spec.ts` | 2 scope propagation tests |
213
+ | `test/supervisor.spec.ts` | 1 `LEASE_SCOPE_CONFLICT` propagation test |
214
+ | `test/kernel.spec.ts` | 2 registry round-trip tests |
215
+ | `docs/core/DOMAIN-LOGIC.md` | Rule 19 — Lease Scope Semantics |
216
+ | `docs/core/DECISIONS.md` | ADR: Scope-Aware Lease Registry |
217
+
218
+ ### Key Design Decisions
219
+
220
+ - **Existing index lock reused**: The new Lease Registry (`lease-registry.json`) uses the existing `withIndexLock` (`.aop/features/.index.lock`). No new lock primitives, no priority-inversion risk.
221
+ - **Prune-on-read**: Expired entries are removed inside every `withIndexLock` callback. Self-healing, no background GC process.
222
+ - **Conservative by default**: Any caller that doesn't pass `scope` gets `null` (conservative behavior), which is identical to the current global-lock behavior. Parallelism must be explicitly opted into.
223
+ - **Pure conflict detector**: `LeaseScopeConflictDetector` has zero I/O and is independently unit-testable.
224
+ - **Scope expansion is additive**: Paths can only be added to a live lease, never removed.
225
+
226
+ ---
227
+
228
+ ## Implementation Tasks
229
+
230
+ ### Phase 1: Core Types & Infrastructure
231
+
232
+ - **T001** — Add `LeaseScope`, `LeaseScopeDeclaration`, `ActiveLeaseRecord`, `LeaseRegistry` to `core/runtime-sessions.ts`
233
+ - **T002** [P] — Add `LEASE_SCOPE_CONFLICT` to `core/error-codes.ts`
234
+ - **T003** [P] — Add `leaseRegistryPath` getter to `core/path-layout.ts`
235
+
236
+ ### Phase 2: Pure Conflict Detection Service
237
+
238
+ - **T004** — Create `application/services/lease-scope-conflict-detector.ts` — pure `LeaseScopeConflictDetector` class with `normalizePath`, `pathsOverlap`, `planSectionsOverlap`, `detectConflict`
239
+
240
+ ### Phase 3: Scope Declaration & Persistence (US4)
241
+
242
+ - **T005** [US4] — Add `scope?: LeaseScopeDeclaration` to `RuntimeSessionsSnapshot`
243
+ - **T006** [P] [US4] — Add `scope?` to `AcquireRunLeaseInput` and add `ExpandRunLeaseScopeInput` interface
244
+
245
+ ### Phase 4: Registry-Backed Lease Operations (US1 & US2)
246
+
247
+ - **T007** [US1/US2] — Extend `RunLeaseServicePort` with `readLeaseRegistry`, `writeLeaseRegistry`, `emptyLeaseRegistry`
248
+ - **T008** [US1/US2] — Modify `acquireRunLease` to consult registry, run conflict detection, write registry entry on grant, emit `LEASE_SCOPE_CONFLICT` on deny
249
+ - **T009** [US2] — Modify `releaseRunLease` to remove entry from registry
250
+ - **T010** [P] [US1] — Modify `renewRunLease` to update `lease_expires_at` in registry
251
+ - **T011** — Implement `readLeaseRegistry`, `writeLeaseRegistry`, `emptyLeaseRegistry` on `AopKernel`
252
+
253
+ ### Phase 5: Scope Expansion (FR-007)
254
+
255
+ - **T012** — Add `expandRunLeaseScope` to `RunLeaseService` (additive merge, ownership check, registry update)
256
+ - **T013** [P] — Add `expandRunLeaseScope` to `RunLeaseServicePort` and implement in `AopKernel`
257
+
258
+ ### Phase 6: Supervisor Wiring
259
+
260
+ - **T014** [P] — Add `scope?: LeaseScopeDeclaration` to `FeatureInput` in `supervisor/types.ts`
261
+ - **T015** — Add `deriveRunScope()` to `RunCoordinator` (aggregate feature scopes; `null` if any unknown); wire to `acquireRunLease`
262
+ - **T016** — Add `expandScopesFromPlans()` to `RunCoordinator` (call `expandRunLeaseScope` after planning wave with plan's `affected_files`)
263
+
264
+ ### Phase 7: New Test Files
265
+
266
+ - **T017** — Create `test/lease-scope-conflict-detector.spec.ts` — 26 unit tests covering all conflict matrix quadrants:
267
+ - `normalizePath` (4 tests: T-01→T-04)
268
+ - `pathsOverlap` (9 tests: T-05→T-13, including prefix/suffix false-positive guards)
269
+ - `planSectionsOverlap` (4 tests: T-14→T-17)
270
+ - `detectConflict` full matrix (9 tests: T-18→T-26, including `excludeRunId`)
271
+ - **T018** — Create `test/run-lease-service.spec.ts` — 20 integration tests with mocked port:
272
+ - Scope persistence (T-30→T-33)
273
+ - Parallel non-overlapping runs (T-34→T-35)
274
+ - Overlapping runs blocked (T-36→T-38)
275
+ - Conservative fallback (T-39→T-40)
276
+ - Stale takeover + scope replacement (T-41→T-42)
277
+ - `expandRunLeaseScope` (T-43→T-45)
278
+ - `renewRunLease` registry TTL update (T-46→T-47)
279
+ - `releaseRunLease` registry removal (T-48→T-49)
280
+
281
+ ### Phase 8: Existing Test Updates
282
+
283
+ - **T019** [P] — `test/run-coordinator.spec.ts` — 2 scope-derivation tests
284
+ - **T020** [P] — `test/supervisor.spec.ts` — 1 `LEASE_SCOPE_CONFLICT` propagation test
285
+ - **T021** [P] — `test/kernel.spec.ts` — 2 registry round-trip tests
286
+
287
+ ### Phase 9: Documentation
288
+
289
+ - **T022** [P] — Add Rule 19 (Lease Scope Semantics) to `docs/core/DOMAIN-LOGIC.md`
290
+ - **T023** [P] — Add Scope-Aware Lease Registry ADR to `docs/core/DECISIONS.md`
291
+ - **T024** — Append Entry 193 to `spec-files/progress.md` after all tests pass
292
+
293
+ ### Task Dependency Graph
294
+
295
+ ```
296
+ T001 (types)
297
+ ├── T002 [P] (error code)
298
+ ├── T003 [P] (path layout)
299
+ ├── T004 (conflict detector)
300
+ │ └── T017 (detector unit tests)
301
+ ├── T005 [P] (scope on snapshot)
302
+ └── T006 [P] (scope on AcquireInput + ExpandInput)
303
+ ├── T007 (port interface)
304
+ │ ├── T008 (acquireRunLease)
305
+ │ │ ├── T009 [P] (releaseRunLease)
306
+ │ │ ├── T010 [P] (renewRunLease)
307
+ │ │ └── T018 (integration tests)
308
+ │ └── T011 (kernel port impl)
309
+ │ └── T021 (kernel tests)
310
+ └── T012 (expandRunLeaseScope service)
311
+ └── T013 [P] (port + kernel method)
312
+ ├── T014 [P] (FeatureInput)
313
+ ├── T015 (deriveRunScope)
314
+ │ ├── T019 (run-coordinator tests)
315
+ │ └── T020 [P] (supervisor tests)
316
+ └── T016 (expandScopesFromPlans)
317
+
318
+ T022 [P], T023 [P] (docs — independent)
319
+ T024 (progress.md — after all above)
320
+ ```
321
+
322
+ ### MVP Cut
323
+
324
+ Complete **T001–T011 + T017** first. This delivers US1 + US2 (P1 stories) with full unit-test coverage and a passing typecheck before touching supervisor or expansion paths.
325
+
326
+ ---
327
+
328
+ ## Observability
329
+
330
+ ### Warning log on conflict
331
+
332
+ ```
333
+ [run-lease] scope conflict: run run_123 blocked by run_456 on packages/auth/
334
+ ```
335
+
336
+ ### Structured error response
337
+
338
+ ```json
339
+ {
340
+ "ok": false,
341
+ "error": {
342
+ "code": "lease_scope_conflict",
343
+ "message": "Lease acquisition deferred: scope overlaps with active run run_456",
344
+ "details": {
345
+ "incoming_scope": { "paths": ["packages/auth/"], "plan_section_ids": [] },
346
+ "blocking_run_id": "run_456",
347
+ "blocking_owner_instance_id": "supervisor:12345:abc",
348
+ "conflicting_scope_entry": "packages/auth/",
349
+ "retryable": true,
350
+ "requires_human": false
351
+ }
352
+ }
353
+ }
354
+ ```
355
+
356
+ ### Registry inspection
357
+
358
+ ```bash
359
+ cat .aop/runtime/lease-registry.json | jq '.leases[] | {run_id, scope, lease_expires_at}'
360
+ ```
361
+
362
+ ---
363
+
364
+ ## Edge Cases
365
+
366
+ - **Nested path prefixes**: `packages/` and `packages/auth/utils/` — prefix containment is detected; these conflict.
367
+ - **No false positive on similar names**: `src/` and `src-old/` do NOT overlap (trailing-slash normalization prevents this).
368
+ - **Scope expansion mid-run**: Expansion is additive; runs that started with `null` scope cannot become non-conflicting by expanding (initial acquisition is the binding decision).
369
+ - **Empty scope vs. unknown**: Explicitly `{ paths: [], plan_section_ids: [] }` (touches nothing) is distinct from `null` (unknown). Empty never conflicts; null always conflicts.
370
+ - **Simultaneous acquisition race**: Protected by `withIndexLock`; only one writer at a time.
371
+ - **Stale lease takeover**: Expired entries are pruned on every registry read; stale scope is replaced by new owner's scope.
372
+
373
+ ---
374
+
375
+ ## Success Criteria
376
+
377
+ - **SC-001**: Two runs with non-overlapping scopes both reach active state within the same elapsed time as a single run — true parallelism with no artificial serialization.
378
+ - **SC-002**: Zero instances of concurrent lease holders with overlapping scopes in any test scenario.
379
+ - **SC-003**: A run with unknown/undeclared scope is never permitted to run concurrently with any other active run.
380
+ - **SC-004**: Declared scope is accurately reflected in the lease record immediately after acquisition and after any scope expansion.
381
+ - **SC-005**: Scope conflict detection adds negligible overhead to lease acquisition when zero competing leases exist.
382
+ - **SC-006**: Prefix-overlap blocking is correct in 100% of cases, including nested path relationships.
383
+
384
+ ---
385
+
386
+ ## Definition of Done
387
+
388
+ - [ ] `npm run typecheck` passes clean
389
+ - [ ] `npm run lint` passes with zero warnings (`--max-warnings 0`)
390
+ - [ ] `npm run test` passes at ≥90% lines / branches / functions / statements
391
+ - [ ] `lease-scope-conflict-detector.spec.ts` — all 26 tests pass (T-01→T-26)
392
+ - [ ] `run-lease-service.spec.ts` — all 20 tests pass (T-30→T-49)
393
+ - [ ] `run-coordinator.spec.ts` — 2 new scope tests passing
394
+ - [ ] `supervisor.spec.ts` — 1 new `LEASE_SCOPE_CONFLICT` propagation test passing
395
+ - [ ] `kernel.spec.ts` — 2 new registry round-trip tests passing
396
+ - [ ] `docs/core/DOMAIN-LOGIC.md` — Rule 19 added
397
+ - [ ] `docs/core/DECISIONS.md` — Scope-Aware Lease Registry ADR added
398
+ - [ ] `spec-files/progress.md` — Entry 193 appended with final test counts
399
+
400
+ ---
401
+
402
+ ## Assumptions
403
+
404
+ - The codebase sections a run will touch are partially knowable before execution begins (derivable from the feature plan or spec file paths). Runs that genuinely cannot declare any scope use the conservative unknown-scope path.
405
+ - Path-prefix matching is sufficient for scope overlap detection; symbolic links and aliased paths are out of scope.
406
+ - Scope expansion is infrequent. Frequent mid-run expansion is not an expected pattern and does not need high-throughput optimization.
407
+ - The lease registry remains small (single-digit concurrent runs); exhaustive pairwise comparison is acceptable without an indexing strategy.
408
+ - Plan section identifiers are opaque strings; two identifiers overlap only if equal (no hierarchy between plan sections).