agentic-orchestrator 0.1.28 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +111 -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 +84 -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 +362 -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 +154 -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 +103 -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 +881 -60
  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 +114 -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
@@ -0,0 +1,1108 @@
1
+ # Drop Zone File Loading & Provider-Specific Agent Optimization — Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Add drag-and-drop file/folder loading to the Launch Workspace UI and a prompt overlay system that lets the orchestrator leverage provider-specific capabilities (Claude's planner, Codex's task model) during planning and building phases.
6
+
7
+ **Architecture:** Two independent feature tracks in one plan. Track A (Tasks 1-2) adds HTML5 drag-and-drop to the Next.js Launch Workspace, feeding into the existing draft pipeline. Track B (Tasks 3-8) adds a prompt overlay resolver to the CLI worker provider, an artifact stager service for builder worktrees, overlay prompt files for Claude and Codex, and schema/config updates. Both tracks can be implemented in any order.
8
+
9
+ **Tech Stack:** Next.js 16 (React 18), TypeScript, Vitest, AJV JSON Schema validation, Node.js fs
10
+
11
+ ---
12
+
13
+ ## File Map
14
+
15
+ ### New Files
16
+
17
+ | File | Responsibility |
18
+ | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
19
+ | `packages/web-dashboard/src/lib/drop-zone-utils.ts` | Pure async utility: recursively collect `.md` files from `DataTransferItem[]` entries |
20
+ | `apps/control-plane/src/supervisor/artifact-stager.ts` | Copies spec/plan artifacts into `.aop/context/` in builder worktree |
21
+ | `apps/control-plane/test/artifact-stager.spec.ts` | Unit tests for artifact stager |
22
+ | `apps/control-plane/test/prompt-overlay.spec.ts` | Unit tests for prompt overlay resolution |
23
+ | `config/agentic/orchestrator/prompts/overrides/planner.claude.md` | Claude planner overlay: use /plan mode, extended thinking |
24
+ | `config/agentic/orchestrator/prompts/overrides/planner.codex.md` | Codex planner overlay: structured task decomposition |
25
+ | `config/agentic/orchestrator/prompts/overrides/builder.claude.md` | Claude builder overlay: read staged artifacts, task checklist workflow |
26
+ | `config/agentic/orchestrator/prompts/overrides/builder.codex.md` | Codex builder overlay: read staged artifacts, apply-patch model |
27
+
28
+ ### Modified Files
29
+
30
+ | File | Change |
31
+ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
32
+ | `packages/web-dashboard/src/app/launch/page.tsx` | Add drag-and-drop handlers, drop zone overlay, `dragActive` state |
33
+ | `packages/web-dashboard/src/styles/dashboard.module.css` | Add `.dropZoneOverlay` and `.dropZoneActive` CSS classes |
34
+ | `apps/control-plane/src/providers/cli-worker-provider.ts` | Add `resolvePromptOverlay()` function, call it in `runWorker()` before `buildWorkerPrompt()`. Update builder file guidance in `buildInteractiveWorkerPrompt()` to include `.aop/context/` paths. |
35
+ | `apps/control-plane/src/supervisor/build-wave-executor.ts` | Import and call `ArtifactStager.stage()` before builder dispatch |
36
+ | `config/agentic/orchestrator/agents.yaml` | Add `prompt_overlay_dir` field under `runtime` |
37
+ | `agentic/orchestrator/schemas/agents.schema.json` | Add `prompt_overlay_dir` property to `runtime` object |
38
+
39
+ ---
40
+
41
+ ### Task 1: Drop Zone Utility — `collectMarkdownFiles`
42
+
43
+ **Files:**
44
+
45
+ - Create: `packages/web-dashboard/src/lib/drop-zone-utils.ts`
46
+
47
+ - [ ] **Step 1: Create the utility file with types and the recursive collector**
48
+
49
+ ```typescript
50
+ // packages/web-dashboard/src/lib/drop-zone-utils.ts
51
+
52
+ /**
53
+ * Recursively collects .md files from a list of DataTransferItem entries.
54
+ * Handles both direct file drops and folder drops via webkitGetAsEntry().
55
+ */
56
+
57
+ function isMarkdownFile(name: string): boolean {
58
+ return name.endsWith('.md');
59
+ }
60
+
61
+ function readEntriesPromise(reader: FileSystemDirectoryReader): Promise<FileSystemEntry[]> {
62
+ return new Promise((resolve, reject) => {
63
+ reader.readEntries(resolve, reject);
64
+ });
65
+ }
66
+
67
+ function fileEntryToFile(entry: FileSystemFileEntry): Promise<File> {
68
+ return new Promise((resolve, reject) => {
69
+ entry.file(resolve, reject);
70
+ });
71
+ }
72
+
73
+ async function walkEntry(entry: FileSystemEntry, files: File[]): Promise<void> {
74
+ if (entry.isFile) {
75
+ if (isMarkdownFile(entry.name)) {
76
+ const file = await fileEntryToFile(entry as FileSystemFileEntry);
77
+ files.push(file);
78
+ }
79
+ return;
80
+ }
81
+ if (entry.isDirectory) {
82
+ const reader = (entry as FileSystemDirectoryEntry).createReader();
83
+ let batch = await readEntriesPromise(reader);
84
+ while (batch.length > 0) {
85
+ for (const child of batch) {
86
+ await walkEntry(child, files);
87
+ }
88
+ batch = await readEntriesPromise(reader);
89
+ }
90
+ }
91
+ }
92
+
93
+ export interface DropResult {
94
+ markdownFiles: File[];
95
+ skippedNonMarkdownCount: number;
96
+ }
97
+
98
+ export async function collectMarkdownFromDrop(items: DataTransferItemList): Promise<DropResult> {
99
+ const files: File[] = [];
100
+ let skippedNonMarkdownCount = 0;
101
+
102
+ const entries: Array<{ entry: FileSystemEntry | null; item: DataTransferItem }> = [];
103
+ for (let i = 0; i < items.length; i++) {
104
+ const item = items[i];
105
+ if (item.kind !== 'file') {
106
+ continue;
107
+ }
108
+ const entry = typeof item.webkitGetAsEntry === 'function' ? item.webkitGetAsEntry() : null;
109
+ entries.push({ entry, item });
110
+ }
111
+
112
+ for (const { entry, item } of entries) {
113
+ if (entry?.isDirectory) {
114
+ await walkEntry(entry, files);
115
+ } else if (entry?.isFile) {
116
+ if (isMarkdownFile(entry.name)) {
117
+ const file = await fileEntryToFile(entry as FileSystemFileEntry);
118
+ files.push(file);
119
+ } else {
120
+ skippedNonMarkdownCount++;
121
+ }
122
+ } else {
123
+ // Fallback: no webkitGetAsEntry support — use getAsFile()
124
+ const file = item.getAsFile();
125
+ if (file) {
126
+ if (isMarkdownFile(file.name)) {
127
+ files.push(file);
128
+ } else {
129
+ skippedNonMarkdownCount++;
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ return { markdownFiles: files, skippedNonMarkdownCount };
136
+ }
137
+
138
+ export function supportsDirectoryDrop(): boolean {
139
+ if (typeof DataTransferItem === 'undefined') {
140
+ return false;
141
+ }
142
+ return typeof DataTransferItem.prototype.webkitGetAsEntry === 'function';
143
+ }
144
+ ```
145
+
146
+ - [ ] **Step 2: Verify the file compiles**
147
+
148
+ Run: `npx tsc --noEmit --project packages/web-dashboard/tsconfig.json 2>&1 | head -20`
149
+ Expected: Clean or only pre-existing warnings (the `FileSystemEntry` types come from `lib.dom.d.ts`).
150
+
151
+ Note: If `FileSystemEntry` types are missing, check `packages/web-dashboard/tsconfig.json` includes `"lib": ["dom"]`. If so, these types are available. If not, add type declarations inline — but this is extremely unlikely with Next.js 16.
152
+
153
+ - [ ] **Step 3: Commit**
154
+
155
+ ```bash
156
+ git add packages/web-dashboard/src/lib/drop-zone-utils.ts
157
+ git commit -m "feat: add drop zone utility for recursive markdown file collection"
158
+ ```
159
+
160
+ ---
161
+
162
+ ### Task 2: Drop Zone UI — Launch Workspace Integration
163
+
164
+ **Files:**
165
+
166
+ - Modify: `packages/web-dashboard/src/app/launch/page.tsx`
167
+ - Modify: `packages/web-dashboard/src/styles/dashboard.module.css`
168
+
169
+ - [ ] **Step 1: Add CSS classes for the drop zone overlay**
170
+
171
+ Append to the end of `packages/web-dashboard/src/styles/dashboard.module.css` (before the final closing brace if there is one, or at the very end):
172
+
173
+ ```css
174
+ .dropZoneOverlay {
175
+ position: fixed;
176
+ inset: 0;
177
+ z-index: 100;
178
+ display: flex;
179
+ flex-direction: column;
180
+ align-items: center;
181
+ justify-content: center;
182
+ background: rgba(45, 106, 79, 0.1);
183
+ border: 3px dashed var(--accent-green, #2d6a4f);
184
+ border-radius: 1rem;
185
+ margin: 0.75rem;
186
+ pointer-events: none;
187
+ backdrop-filter: blur(2px);
188
+ }
189
+
190
+ .dropZoneOverlay h2 {
191
+ font-size: 1.35rem;
192
+ font-weight: 600;
193
+ color: var(--accent-green, #4ade80);
194
+ margin: 0;
195
+ }
196
+
197
+ .dropZoneOverlay p {
198
+ font-size: 0.9rem;
199
+ color: var(--text-muted, #888);
200
+ margin: 0.5rem 0 0;
201
+ }
202
+ ```
203
+
204
+ - [ ] **Step 2: Add drag-and-drop state and handlers to `LaunchPageContent`**
205
+
206
+ In `packages/web-dashboard/src/app/launch/page.tsx`, add the import at the top with the other imports:
207
+
208
+ ```typescript
209
+ import { collectMarkdownFromDrop } from '@/lib/drop-zone-utils.js';
210
+ ```
211
+
212
+ Inside the `LaunchPageContent` function, after the existing `useState` declarations (around line 79), add:
213
+
214
+ ```typescript
215
+ const [dragActive, setDragActive] = useState(false);
216
+ const dragCounterRef = React.useRef(0);
217
+
218
+ const handleDragEnter = (event: React.DragEvent) => {
219
+ event.preventDefault();
220
+ event.stopPropagation();
221
+ dragCounterRef.current += 1;
222
+ if (dragCounterRef.current === 1) {
223
+ setDragActive(true);
224
+ }
225
+ };
226
+
227
+ const handleDragLeave = (event: React.DragEvent) => {
228
+ event.preventDefault();
229
+ event.stopPropagation();
230
+ dragCounterRef.current -= 1;
231
+ if (dragCounterRef.current <= 0) {
232
+ dragCounterRef.current = 0;
233
+ setDragActive(false);
234
+ }
235
+ };
236
+
237
+ const handleDragOver = (event: React.DragEvent) => {
238
+ event.preventDefault();
239
+ event.stopPropagation();
240
+ };
241
+
242
+ const handleDrop = async (event: React.DragEvent) => {
243
+ event.preventDefault();
244
+ event.stopPropagation();
245
+ dragCounterRef.current = 0;
246
+ setDragActive(false);
247
+
248
+ if (!event.dataTransfer?.items) {
249
+ return;
250
+ }
251
+
252
+ const result = await collectMarkdownFromDrop(event.dataTransfer.items);
253
+ if (result.markdownFiles.length === 0 && result.skippedNonMarkdownCount > 0) {
254
+ setStatusMessage(
255
+ `Skipped ${result.skippedNonMarkdownCount} non-markdown file${result.skippedNonMarkdownCount === 1 ? '' : 's'}. Only .md files are accepted.`,
256
+ );
257
+ return;
258
+ }
259
+ if (result.markdownFiles.length === 0) {
260
+ return;
261
+ }
262
+
263
+ const loadedDrafts = await Promise.all(
264
+ result.markdownFiles.map(async (file) => createDraft(file.name, await file.text(), 'upload')),
265
+ );
266
+ setDrafts((current) => [...current, ...loadedDrafts]);
267
+
268
+ const parts: string[] = [
269
+ `Added ${loadedDrafts.length} draft${loadedDrafts.length === 1 ? '' : 's'} from drop`,
270
+ ];
271
+ if (result.skippedNonMarkdownCount > 0) {
272
+ parts.push(
273
+ `(skipped ${result.skippedNonMarkdownCount} non-markdown file${result.skippedNonMarkdownCount === 1 ? '' : 's'})`,
274
+ );
275
+ }
276
+ setStatusMessage(parts.join(' '));
277
+ };
278
+ ```
279
+
280
+ - [ ] **Step 3: Attach drag event handlers and add overlay to the JSX**
281
+
282
+ In the same file, modify the root `<div>` in the return statement. Change:
283
+
284
+ ```tsx
285
+ <div className={styles.dashboardRoot}>
286
+ ```
287
+
288
+ to:
289
+
290
+ ```tsx
291
+ <div
292
+ className={styles.dashboardRoot}
293
+ onDragEnter={handleDragEnter}
294
+ onDragLeave={handleDragLeave}
295
+ onDragOver={handleDragOver}
296
+ onDrop={(event) => { void handleDrop(event); }}
297
+ >
298
+ {dragActive ? (
299
+ <div className={styles.dropZoneOverlay}>
300
+ <h2>Drop .md files or folders</h2>
301
+ <p>Folders will be scanned for .md files</p>
302
+ </div>
303
+ ) : null}
304
+ ```
305
+
306
+ - [ ] **Step 4: Verify the page compiles**
307
+
308
+ Run: `npx tsc --noEmit --project packages/web-dashboard/tsconfig.json 2>&1 | head -20`
309
+ Expected: Clean compilation.
310
+
311
+ - [ ] **Step 5: Commit**
312
+
313
+ ```bash
314
+ git add packages/web-dashboard/src/app/launch/page.tsx packages/web-dashboard/src/styles/dashboard.module.css
315
+ git commit -m "feat: add drag-and-drop file/folder loading to Launch Workspace"
316
+ ```
317
+
318
+ ---
319
+
320
+ ### Task 3: Agents Schema — Add `prompt_overlay_dir`
321
+
322
+ **Files:**
323
+
324
+ - Modify: `agentic/orchestrator/schemas/agents.schema.json`
325
+ - Modify: `config/agentic/orchestrator/agents.yaml`
326
+
327
+ - [ ] **Step 1: Add `prompt_overlay_dir` to the schema**
328
+
329
+ In `agentic/orchestrator/schemas/agents.schema.json`, inside the `runtime.properties` object, add the new field. Find the `"provider_cli_config"` property (around line 195) and add the new property **before** it:
330
+
331
+ ```json
332
+ "prompt_overlay_dir": {
333
+ "type": "string",
334
+ "description": "Directory (relative to repo root) containing provider-specific prompt overlay files. Files are named <role>.<provider>.md (e.g. builder.claude.md). When present, the overlay is appended to the base role prompt. Defaults to config/agentic/orchestrator/prompts/overrides.",
335
+ "default": "config/agentic/orchestrator/prompts/overrides"
336
+ },
337
+ ```
338
+
339
+ - [ ] **Step 2: Add `prompt_overlay_dir` to agents.yaml**
340
+
341
+ In `config/agentic/orchestrator/agents.yaml`, inside the `runtime:` block, add after the `execution_mode: interactive` line:
342
+
343
+ ```yaml
344
+ prompt_overlay_dir: config/agentic/orchestrator/prompts/overrides
345
+ ```
346
+
347
+ - [ ] **Step 3: Validate the schema**
348
+
349
+ Run: `npm run validate:mcp-contracts 2>&1 | tail -5`
350
+ Expected: Clean validation (no errors).
351
+
352
+ Run: `npm run build 2>&1 | tail -10`
353
+ Expected: Clean build.
354
+
355
+ - [ ] **Step 4: Commit**
356
+
357
+ ```bash
358
+ git add agentic/orchestrator/schemas/agents.schema.json config/agentic/orchestrator/agents.yaml
359
+ git commit -m "feat: add prompt_overlay_dir config for provider-specific prompt overlays"
360
+ ```
361
+
362
+ ---
363
+
364
+ ### Task 4: Prompt Overlay Resolver — Unit Tests
365
+
366
+ **Files:**
367
+
368
+ - Create: `apps/control-plane/test/prompt-overlay.spec.ts`
369
+
370
+ - [ ] **Step 1: Write the test file**
371
+
372
+ The overlay resolver will be a pure function exported from `cli-worker-provider.ts`. We test it in isolation by calling it directly. Since `cli-worker-provider.ts` uses the filesystem to read overlay files, we'll use a temp directory approach.
373
+
374
+ ```typescript
375
+ // apps/control-plane/test/prompt-overlay.spec.ts
376
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
377
+ import fs from 'node:fs/promises';
378
+ import path from 'node:path';
379
+ import os from 'node:os';
380
+ import { resolvePromptOverlay } from '../src/providers/cli-worker-provider.js';
381
+
382
+ describe('resolvePromptOverlay', () => {
383
+ let tmpDir: string;
384
+
385
+ beforeEach(async () => {
386
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'overlay-test-'));
387
+ });
388
+
389
+ afterEach(async () => {
390
+ await fs.rm(tmpDir, { recursive: true, force: true });
391
+ });
392
+
393
+ it('GIVEN_overlay_file_exists_WHEN_resolved_THEN_returns_overlay_content', async () => {
394
+ const overlayContent = '## Claude Builder Instructions\n\nUse /plan mode.';
395
+ await fs.mkdir(path.join(tmpDir, 'overrides'), { recursive: true });
396
+ await fs.writeFile(path.join(tmpDir, 'overrides', 'builder.claude.md'), overlayContent);
397
+
398
+ const result = await resolvePromptOverlay(path.join(tmpDir, 'overrides'), 'builder', 'claude');
399
+
400
+ expect(result).toBe(overlayContent);
401
+ });
402
+
403
+ it('GIVEN_no_overlay_file_WHEN_resolved_THEN_returns_null', async () => {
404
+ await fs.mkdir(path.join(tmpDir, 'overrides'), { recursive: true });
405
+
406
+ const result = await resolvePromptOverlay(path.join(tmpDir, 'overrides'), 'builder', 'codex');
407
+
408
+ expect(result).toBeNull();
409
+ });
410
+
411
+ it('GIVEN_no_overlay_directory_WHEN_resolved_THEN_returns_null', async () => {
412
+ const result = await resolvePromptOverlay(
413
+ path.join(tmpDir, 'nonexistent'),
414
+ 'builder',
415
+ 'claude',
416
+ );
417
+
418
+ expect(result).toBeNull();
419
+ });
420
+
421
+ it('GIVEN_planner_role_with_claude_WHEN_resolved_THEN_reads_planner_claude_md', async () => {
422
+ const overlayContent = '## Claude Planner Instructions';
423
+ await fs.mkdir(path.join(tmpDir, 'overrides'), { recursive: true });
424
+ await fs.writeFile(path.join(tmpDir, 'overrides', 'planner.claude.md'), overlayContent);
425
+
426
+ const result = await resolvePromptOverlay(path.join(tmpDir, 'overrides'), 'planner', 'claude');
427
+
428
+ expect(result).toBe(overlayContent);
429
+ });
430
+
431
+ it('GIVEN_empty_overlay_file_WHEN_resolved_THEN_returns_null', async () => {
432
+ await fs.mkdir(path.join(tmpDir, 'overrides'), { recursive: true });
433
+ await fs.writeFile(path.join(tmpDir, 'overrides', 'builder.claude.md'), ' \n ');
434
+
435
+ const result = await resolvePromptOverlay(path.join(tmpDir, 'overrides'), 'builder', 'claude');
436
+
437
+ expect(result).toBeNull();
438
+ });
439
+ });
440
+ ```
441
+
442
+ - [ ] **Step 2: Run the tests — they should fail because `resolvePromptOverlay` doesn't exist yet**
443
+
444
+ Run: `npx vitest run apps/control-plane/test/prompt-overlay.spec.ts 2>&1 | tail -15`
445
+ Expected: FAIL — cannot find `resolvePromptOverlay` export.
446
+
447
+ - [ ] **Step 3: Commit the failing tests**
448
+
449
+ ```bash
450
+ git add apps/control-plane/test/prompt-overlay.spec.ts
451
+ git commit -m "test: add failing tests for prompt overlay resolver"
452
+ ```
453
+
454
+ ---
455
+
456
+ ### Task 5: Prompt Overlay Resolver — Implementation
457
+
458
+ **Files:**
459
+
460
+ - Modify: `apps/control-plane/src/providers/cli-worker-provider.ts`
461
+
462
+ - [ ] **Step 1: Add the `resolvePromptOverlay` function**
463
+
464
+ In `apps/control-plane/src/providers/cli-worker-provider.ts`, add the following exported function after the existing `buildWorkerPrompt` function (after line 291):
465
+
466
+ ```typescript
467
+ export async function resolvePromptOverlay(
468
+ overlayDir: string,
469
+ role: string,
470
+ provider: string,
471
+ ): Promise<string | null> {
472
+ const filename = `${role}.${provider}.md`;
473
+ const overlayPath = path.join(overlayDir, filename);
474
+ try {
475
+ const content = await fs.readFile(overlayPath, 'utf8');
476
+ return content.trim().length > 0 ? content : null;
477
+ } catch {
478
+ return null;
479
+ }
480
+ }
481
+ ```
482
+
483
+ - [ ] **Step 2: Integrate overlay resolution into `runWorker()`**
484
+
485
+ In the same file, in the `runWorker` method (around line 913), modify the prompt assembly. Find these lines (around lines 952-954):
486
+
487
+ ```typescript
488
+ const systemPrompt = this.systemPromptsBySession.get(sessionId) ?? null;
489
+ const prompt = buildWorkerPrompt(promptPayload, systemPrompt, executionMode);
490
+ ```
491
+
492
+ Replace them with:
493
+
494
+ ```typescript
495
+ const baseSystemPrompt = this.systemPromptsBySession.get(sessionId) ?? null;
496
+ let systemPrompt = baseSystemPrompt;
497
+ if (baseSystemPrompt && this.overlayDir) {
498
+ const overlay = await resolvePromptOverlay(
499
+ this.overlayDir,
500
+ input.role,
501
+ effectiveSelection.provider,
502
+ );
503
+ if (overlay) {
504
+ systemPrompt = `${baseSystemPrompt}\n\n---\n\n## Provider-Specific Instructions\n\n${overlay}`;
505
+ }
506
+ }
507
+ const prompt = buildWorkerPrompt(promptPayload, systemPrompt, executionMode);
508
+ ```
509
+
510
+ - [ ] **Step 3: Add the `overlayDir` property to `CliWorkerProviderOptions` and constructor**
511
+
512
+ In the `CliWorkerProviderOptions` interface (around line 25), add:
513
+
514
+ ```typescript
515
+ overlayDir?: string;
516
+ ```
517
+
518
+ In the `CliWorkerProvider` class, add a private field after the other private fields (around line 765):
519
+
520
+ ```typescript
521
+ private readonly overlayDir: string | null;
522
+ ```
523
+
524
+ In the constructor (around line 824), after the line `this.repoRoot = options.repoRoot ?? null;` add:
525
+
526
+ ```typescript
527
+ this.overlayDir = options.overlayDir ?? null;
528
+ ```
529
+
530
+ - [ ] **Step 4: Run the overlay tests**
531
+
532
+ Run: `npx vitest run apps/control-plane/test/prompt-overlay.spec.ts 2>&1 | tail -15`
533
+ Expected: All 5 tests PASS.
534
+
535
+ - [ ] **Step 5: Run the full test suite**
536
+
537
+ Run: `npm run test 2>&1 | tail -20`
538
+ Expected: All existing tests still pass.
539
+
540
+ - [ ] **Step 6: Commit**
541
+
542
+ ```bash
543
+ git add apps/control-plane/src/providers/cli-worker-provider.ts
544
+ git commit -m "feat: add prompt overlay resolver for provider-specific instructions"
545
+ ```
546
+
547
+ ---
548
+
549
+ ### Task 6: Wire `overlayDir` Through the Runtime
550
+
551
+ **Files:**
552
+
553
+ - Modify: `apps/control-plane/src/supervisor/runtime.ts`
554
+ - Modify: `apps/control-plane/src/providers/worker-provider-factory.ts`
555
+
556
+ The `overlayDir` needs to flow from `agents.yaml` config through to the `CliWorkerProvider` constructor. The worker provider is created in the `WorkerProviderFactory`.
557
+
558
+ - [ ] **Step 1: Find where `CliWorkerProviderOptions` is constructed in the factory**
559
+
560
+ Read `apps/control-plane/src/providers/worker-provider-factory.ts` to find where `CliWorkerProvider` is instantiated. The factory constructs the provider with its options. Add `overlayDir` to the options passed through.
561
+
562
+ In the `DefaultWorkerProviderFactory`, find where `CliWorkerProviderOptions` is assembled and add:
563
+
564
+ ```typescript
565
+ overlayDir: this.overlayDir,
566
+ ```
567
+
568
+ Add a private `overlayDir` field and accept it in the factory constructor/options.
569
+
570
+ - [ ] **Step 2: Pass `overlayDir` from runtime.ts to the factory**
571
+
572
+ In `apps/control-plane/src/supervisor/runtime.ts`, where the `WorkerProviderFactory` is constructed, resolve the overlay dir from the agents config:
573
+
574
+ ```typescript
575
+ const agentsConfig = kernel.getAgentsConfig();
576
+ const overlayDir = agentsConfig.runtime?.prompt_overlay_dir
577
+ ? path.join(kernel.getRepoRoot(), agentsConfig.runtime.prompt_overlay_dir)
578
+ : path.join(kernel.getRepoRoot(), 'config/agentic/orchestrator/prompts/overrides');
579
+ ```
580
+
581
+ Pass this `overlayDir` to the factory and then through to the provider.
582
+
583
+ - [ ] **Step 3: Run the full test suite**
584
+
585
+ Run: `npm run test 2>&1 | tail -20`
586
+ Expected: All tests pass. The overlay dir is optional so existing test mocks are unaffected.
587
+
588
+ - [ ] **Step 4: Commit**
589
+
590
+ ```bash
591
+ git add apps/control-plane/src/providers/worker-provider-factory.ts apps/control-plane/src/supervisor/runtime.ts
592
+ git commit -m "feat: wire prompt overlay directory from agents config to worker provider"
593
+ ```
594
+
595
+ ---
596
+
597
+ ### Task 7: Artifact Stager — Tests and Implementation
598
+
599
+ **Files:**
600
+
601
+ - Create: `apps/control-plane/src/supervisor/artifact-stager.ts`
602
+ - Create: `apps/control-plane/test/artifact-stager.spec.ts`
603
+
604
+ - [ ] **Step 1: Write the failing tests**
605
+
606
+ ```typescript
607
+ // apps/control-plane/test/artifact-stager.spec.ts
608
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
609
+ import fs from 'node:fs/promises';
610
+ import path from 'node:path';
611
+ import os from 'node:os';
612
+ import { ArtifactStager } from '../src/supervisor/artifact-stager.js';
613
+
614
+ describe('ArtifactStager', () => {
615
+ let repoRoot: string;
616
+ let worktreePath: string;
617
+ const featureId = 'feat-abc-123';
618
+
619
+ beforeEach(async () => {
620
+ repoRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'stager-repo-'));
621
+ worktreePath = await fs.mkdtemp(path.join(os.tmpdir(), 'stager-wt-'));
622
+
623
+ const featureDir = path.join(repoRoot, '.aop', 'features', featureId);
624
+ await fs.mkdir(featureDir, { recursive: true });
625
+ await fs.writeFile(path.join(featureDir, 'spec.md'), '# Feature Spec\n\nBuild the thing.');
626
+ await fs.writeFile(path.join(featureDir, 'plan.md'), '# Plan\n\n1. Do step one.');
627
+ await fs.writeFile(
628
+ path.join(featureDir, 'plan.json'),
629
+ JSON.stringify({ version: 1, tasks: [] }),
630
+ );
631
+ });
632
+
633
+ afterEach(async () => {
634
+ await fs.rm(repoRoot, { recursive: true, force: true });
635
+ await fs.rm(worktreePath, { recursive: true, force: true });
636
+ });
637
+
638
+ it('GIVEN_all_artifacts_exist_WHEN_staged_THEN_copies_to_context_dir', async () => {
639
+ const stager = new ArtifactStager(repoRoot);
640
+ await stager.stage(featureId, worktreePath);
641
+
642
+ const contextDir = path.join(worktreePath, '.aop', 'context');
643
+ const specContent = await fs.readFile(path.join(contextDir, 'spec.md'), 'utf8');
644
+ const planMdContent = await fs.readFile(path.join(contextDir, 'plan.md'), 'utf8');
645
+ const planJsonContent = await fs.readFile(path.join(contextDir, 'plan.json'), 'utf8');
646
+
647
+ expect(specContent).toBe('# Feature Spec\n\nBuild the thing.');
648
+ expect(planMdContent).toBe('# Plan\n\n1. Do step one.');
649
+ expect(JSON.parse(planJsonContent)).toEqual({ version: 1, tasks: [] });
650
+ });
651
+
652
+ it('GIVEN_qa_test_index_exists_WHEN_staged_THEN_also_copies_it', async () => {
653
+ const featureDir = path.join(repoRoot, '.aop', 'features', featureId);
654
+ await fs.writeFile(
655
+ path.join(featureDir, 'qa_test_index.json'),
656
+ JSON.stringify({ tests: ['test1'] }),
657
+ );
658
+
659
+ const stager = new ArtifactStager(repoRoot);
660
+ await stager.stage(featureId, worktreePath);
661
+
662
+ const contextDir = path.join(worktreePath, '.aop', 'context');
663
+ const qaContent = await fs.readFile(path.join(contextDir, 'qa_test_index.json'), 'utf8');
664
+ expect(JSON.parse(qaContent)).toEqual({ tests: ['test1'] });
665
+ });
666
+
667
+ it('GIVEN_qa_test_index_missing_WHEN_staged_THEN_no_error_and_other_files_copied', async () => {
668
+ const stager = new ArtifactStager(repoRoot);
669
+ await stager.stage(featureId, worktreePath);
670
+
671
+ const contextDir = path.join(worktreePath, '.aop', 'context');
672
+ await expect(fs.access(path.join(contextDir, 'qa_test_index.json'))).rejects.toThrow();
673
+ // But other files exist
674
+ await expect(fs.access(path.join(contextDir, 'spec.md'))).resolves.toBeUndefined();
675
+ await expect(fs.access(path.join(contextDir, 'plan.md'))).resolves.toBeUndefined();
676
+ });
677
+
678
+ it('GIVEN_context_dir_already_exists_WHEN_staged_THEN_overwrites_cleanly', async () => {
679
+ const contextDir = path.join(worktreePath, '.aop', 'context');
680
+ await fs.mkdir(contextDir, { recursive: true });
681
+ await fs.writeFile(path.join(contextDir, 'spec.md'), 'old content');
682
+
683
+ const stager = new ArtifactStager(repoRoot);
684
+ await stager.stage(featureId, worktreePath);
685
+
686
+ const specContent = await fs.readFile(path.join(contextDir, 'spec.md'), 'utf8');
687
+ expect(specContent).toBe('# Feature Spec\n\nBuild the thing.');
688
+ });
689
+
690
+ it('GIVEN_staged_WHEN_readme_checked_THEN_readme_exists_with_content', async () => {
691
+ const stager = new ArtifactStager(repoRoot);
692
+ await stager.stage(featureId, worktreePath);
693
+
694
+ const contextDir = path.join(worktreePath, '.aop', 'context');
695
+ const readme = await fs.readFile(path.join(contextDir, 'README.md'), 'utf8');
696
+ expect(readme).toContain('spec.md');
697
+ expect(readme).toContain('plan.md');
698
+ expect(readme).toContain('plan.json');
699
+ });
700
+ });
701
+ ```
702
+
703
+ - [ ] **Step 2: Run tests to verify they fail**
704
+
705
+ Run: `npx vitest run apps/control-plane/test/artifact-stager.spec.ts 2>&1 | tail -15`
706
+ Expected: FAIL — cannot import `ArtifactStager`.
707
+
708
+ - [ ] **Step 3: Implement the `ArtifactStager`**
709
+
710
+ ```typescript
711
+ // apps/control-plane/src/supervisor/artifact-stager.ts
712
+ import fs from 'node:fs/promises';
713
+ import path from 'node:path';
714
+
715
+ const REQUIRED_ARTIFACTS = ['spec.md', 'plan.md', 'plan.json'] as const;
716
+ const OPTIONAL_ARTIFACTS = ['qa_test_index.json'] as const;
717
+
718
+ const CONTEXT_README = `# Staged Artifacts
719
+
720
+ These files are read-only copies staged by the orchestrator for the builder agent.
721
+
722
+ | File | Description |
723
+ |---|---|
724
+ | spec.md | Original feature specification — read this to understand the "why" |
725
+ | plan.md | Human-readable implementation plan |
726
+ | plan.json | Structured plan with tasks and acceptance criteria |
727
+ | qa_test_index.json | Test expectations (if available) |
728
+
729
+ Do not edit these files. They are copied from the canonical feature directory.
730
+ `;
731
+
732
+ export class ArtifactStager {
733
+ private readonly repoRoot: string;
734
+
735
+ constructor(repoRoot: string) {
736
+ this.repoRoot = repoRoot;
737
+ }
738
+
739
+ async stage(featureId: string, worktreePath: string): Promise<void> {
740
+ const featureDir = path.join(this.repoRoot, '.aop', 'features', featureId);
741
+ const contextDir = path.join(worktreePath, '.aop', 'context');
742
+
743
+ await fs.mkdir(contextDir, { recursive: true });
744
+
745
+ for (const artifact of REQUIRED_ARTIFACTS) {
746
+ const src = path.join(featureDir, artifact);
747
+ const dst = path.join(contextDir, artifact);
748
+ await fs.copyFile(src, dst);
749
+ }
750
+
751
+ for (const artifact of OPTIONAL_ARTIFACTS) {
752
+ const src = path.join(featureDir, artifact);
753
+ const dst = path.join(contextDir, artifact);
754
+ try {
755
+ await fs.copyFile(src, dst);
756
+ } catch {
757
+ // Optional — skip if not present
758
+ }
759
+ }
760
+
761
+ await fs.writeFile(path.join(contextDir, 'README.md'), CONTEXT_README);
762
+ }
763
+ }
764
+ ```
765
+
766
+ - [ ] **Step 4: Run the tests**
767
+
768
+ Run: `npx vitest run apps/control-plane/test/artifact-stager.spec.ts 2>&1 | tail -15`
769
+ Expected: All 5 tests PASS.
770
+
771
+ - [ ] **Step 5: Commit**
772
+
773
+ ```bash
774
+ git add apps/control-plane/src/supervisor/artifact-stager.ts apps/control-plane/test/artifact-stager.spec.ts
775
+ git commit -m "feat: add artifact stager to copy spec/plan into builder worktree"
776
+ ```
777
+
778
+ ---
779
+
780
+ ### Task 8: Wire Artifact Stager into Build Wave Executor
781
+
782
+ **Files:**
783
+
784
+ - Modify: `apps/control-plane/src/supervisor/build-wave-executor.ts`
785
+ - Modify: `apps/control-plane/src/providers/cli-worker-provider.ts`
786
+
787
+ - [ ] **Step 1: Add `ArtifactStager` to `BuildWaveExecutorDependencies`**
788
+
789
+ In `apps/control-plane/src/supervisor/build-wave-executor.ts`, add the import:
790
+
791
+ ```typescript
792
+ import { ArtifactStager } from './artifact-stager.js';
793
+ ```
794
+
795
+ In the `BuildWaveExecutorDependencies` interface (around line 39), add:
796
+
797
+ ```typescript
798
+ artifactStager?: ArtifactStager;
799
+ ```
800
+
801
+ In the constructor, store the stager as a private field:
802
+
803
+ ```typescript
804
+ private readonly artifactStager: ArtifactStager | null;
805
+ ```
806
+
807
+ In the constructor body, add:
808
+
809
+ ```typescript
810
+ this.artifactStager = deps.artifactStager ?? null;
811
+ ```
812
+
813
+ - [ ] **Step 2: Call `stage()` before builder dispatch**
814
+
815
+ In the `run()` method, find where `this.workerDecisionRunner.execute()` is called for the builder (around line 226). Add the staging call **before** the worker execute call. Find the context fetch and add staging after it:
816
+
817
+ After the line:
818
+
819
+ ```typescript
820
+ const context = await this.toolCaller.callTool('builder', TOOLS.FEATURE_GET_CONTEXT, {
821
+ feature_id: featureId,
822
+ });
823
+ ```
824
+
825
+ And before the `let decision;` line, add:
826
+
827
+ ```typescript
828
+ if (this.artifactStager && this.providerMode === 'live') {
829
+ const worktreePath = context.data?.working_directory as string | undefined;
830
+ if (worktreePath) {
831
+ try {
832
+ await this.artifactStager.stage(featureId, worktreePath);
833
+ } catch {
834
+ // Non-fatal: builder can still function without staged artifacts
835
+ }
836
+ }
837
+ }
838
+ ```
839
+
840
+ Note: The `working_directory` may not be on the context data directly. Check where the worktree path comes from. If it's resolved in the `WorkerDecisionLoop` instead, the staging call should happen there. The implementer should verify by reading how `resolveWorktreePath` works in `worker-decision-loop.ts` and adjust the staging call location accordingly. The key contract is: staging must happen before the builder's `runWorker()` is called, and it needs access to the worktree path.
841
+
842
+ - [ ] **Step 3: Update builder file guidance in `buildInteractiveWorkerPrompt()`**
843
+
844
+ In `apps/control-plane/src/providers/cli-worker-provider.ts`, find the builder file guidance section (around line 158-167). Change the builder block from:
845
+
846
+ ```typescript
847
+ } else if (role === 'builder') {
848
+ lines.push(
849
+ '',
850
+ 'Implementation artifacts are on disk — use these files as the execution baseline:',
851
+ ` ${featureDir}/state.md — current status and front matter`,
852
+ ` ${featureDir}/plan.md — canonical planning baseline`,
853
+ ` ${featureDir}/plan.json — machine-readable plan`,
854
+ ` ${featureDir}/evidence/ — gate run results`,
855
+ ` ${featureDir}/decisions.md — decision history`,
856
+ );
857
+ ```
858
+
859
+ to:
860
+
861
+ ```typescript
862
+ } else if (role === 'builder') {
863
+ const contextDir = workingDir ? `${workingDir}/.aop/context` : `${featureDir}/.aop/context`;
864
+ lines.push(
865
+ '',
866
+ 'Staged artifacts (read these first for context):',
867
+ ` ${contextDir}/spec.md — original feature specification`,
868
+ ` ${contextDir}/plan.md — human-readable implementation plan`,
869
+ ` ${contextDir}/plan.json — structured plan with tasks and acceptance criteria`,
870
+ ` ${contextDir}/qa_test_index.json — test expectations (if available)`,
871
+ '',
872
+ 'Runtime artifacts:',
873
+ ` ${featureDir}/state.md — current status and front matter`,
874
+ ` ${featureDir}/evidence/ — gate run results`,
875
+ ` ${featureDir}/decisions.md — decision history`,
876
+ );
877
+ ```
878
+
879
+ - [ ] **Step 4: Wire the stager in runtime.ts**
880
+
881
+ In `apps/control-plane/src/supervisor/runtime.ts`, where the `BuildWaveExecutor` is constructed (around line 466), add the artifact stager:
882
+
883
+ ```typescript
884
+ import { ArtifactStager } from './artifact-stager.js';
885
+ ```
886
+
887
+ Before the `BuildWaveExecutor` construction, create the stager:
888
+
889
+ ```typescript
890
+ const artifactStager = new ArtifactStager(this.kernel.getRepoRoot());
891
+ ```
892
+
893
+ Then add it to the dependencies object:
894
+
895
+ ```typescript
896
+ this.buildWaveExecutor = new BuildWaveExecutor({
897
+ // ... existing deps ...
898
+ artifactStager,
899
+ });
900
+ ```
901
+
902
+ - [ ] **Step 5: Run full test suite**
903
+
904
+ Run: `npm run test 2>&1 | tail -20`
905
+ Expected: All tests pass.
906
+
907
+ Run: `npm run build 2>&1 | tail -10`
908
+ Expected: Clean build.
909
+
910
+ - [ ] **Step 6: Commit**
911
+
912
+ ```bash
913
+ git add apps/control-plane/src/supervisor/build-wave-executor.ts apps/control-plane/src/providers/cli-worker-provider.ts apps/control-plane/src/supervisor/runtime.ts
914
+ git commit -m "feat: wire artifact stager into build wave and update builder file guidance"
915
+ ```
916
+
917
+ ---
918
+
919
+ ### Task 9: Provider Overlay Prompt Files
920
+
921
+ **Files:**
922
+
923
+ - Create: `config/agentic/orchestrator/prompts/overrides/planner.claude.md`
924
+ - Create: `config/agentic/orchestrator/prompts/overrides/planner.codex.md`
925
+ - Create: `config/agentic/orchestrator/prompts/overrides/builder.claude.md`
926
+ - Create: `config/agentic/orchestrator/prompts/overrides/builder.codex.md`
927
+
928
+ - [ ] **Step 1: Create the overrides directory**
929
+
930
+ ```bash
931
+ mkdir -p config/agentic/orchestrator/prompts/overrides
932
+ ```
933
+
934
+ - [ ] **Step 2: Write `planner.claude.md`**
935
+
936
+ ```markdown
937
+ ## Claude-Specific Planning Instructions
938
+
939
+ You are running inside Claude Code. Leverage its native capabilities:
940
+
941
+ ### Planning approach
942
+
943
+ 1. **Use extended thinking** for complex architectural decisions. When analyzing the spec, take time to reason through trade-offs before committing to an approach.
944
+
945
+ 2. **Read the codebase** before planning. Use your file reading and search tools to understand existing patterns, conventions, and architecture. The plan must work within the existing codebase, not against it.
946
+
947
+ 3. **Create structured, actionable plans** where each task maps to a discrete, testable change. Claude Code excels at file-level precision — every task should name exact files to create or modify.
948
+
949
+ 4. **Reference the spec as source of truth.** The feature specification is staged at `.aop/context/spec.md` in the working directory. Read it before beginning the planning process. Every plan task should trace back to a spec requirement.
950
+
951
+ ### Plan quality
952
+
953
+ - Each plan task should produce a commit-worthy change
954
+ - Include test expectations alongside implementation tasks
955
+ - Name exact file paths — do not use placeholder paths
956
+ - Include acceptance criteria that can be mechanically verified
957
+ ```
958
+
959
+ - [ ] **Step 3: Write `planner.codex.md`**
960
+
961
+ ```markdown
962
+ ## Codex-Specific Planning Instructions
963
+
964
+ You are running inside Codex CLI.
965
+
966
+ ### Planning approach
967
+
968
+ 1. **Emphasize file-level granularity.** Codex works best with explicit file lists per task. Every plan task must name the exact files to create or modify.
969
+
970
+ 2. **Keep tasks small and isolated.** Each task should touch a minimal set of files and produce a self-contained, testable change.
971
+
972
+ 3. **Read existing patterns first.** Before planning, examine the files adjacent to where changes will be made. Follow established conventions.
973
+
974
+ 4. **Reference the spec.** The feature specification is the source of truth for what to build. Every plan task should trace to a spec requirement.
975
+
976
+ ### Plan quality
977
+
978
+ - Prefer explicit file paths over directory-level descriptions
979
+ - Each task should produce a commit-worthy change
980
+ - Include test expectations alongside implementation tasks
981
+ - Include acceptance criteria that can be mechanically verified
982
+ ```
983
+
984
+ - [ ] **Step 4: Write `builder.claude.md`**
985
+
986
+ ```markdown
987
+ ## Claude-Specific Build Instructions
988
+
989
+ You are running inside Claude Code. Leverage its native capabilities for implementation.
990
+
991
+ ### Before starting work
992
+
993
+ 1. **Read the staged plan and spec.** These files are in your working directory:
994
+ - `.aop/context/spec.md` — the original feature specification (the "why")
995
+ - `.aop/context/plan.md` — the human-readable implementation plan
996
+ - `.aop/context/plan.json` — the structured plan with tasks and acceptance criteria
997
+
998
+ 2. **Treat the plan as a task checklist.** Work through tasks sequentially. Each task in the plan corresponds to a discrete change. Complete one task fully (including tests) before moving to the next.
999
+
1000
+ ### While working
1001
+
1002
+ 3. **Use Claude Code's native tools.** Edit files directly using your file editing tools. Do not emit raw patches or diffs — make the changes on disk.
1003
+
1004
+ 4. **Commit after each task.** Each plan task should produce its own commit. This makes the work reviewable and reversible.
1005
+
1006
+ 5. **Run tests after each change.** Verify your work passes before moving to the next task.
1007
+
1008
+ 6. **Check acceptance criteria.** The plan's acceptance criteria are the definition of done. Before marking a task complete, verify each criterion is met.
1009
+
1010
+ ### Quality checks
1011
+
1012
+ 7. **Stay within planned scope.** Only modify files listed in the plan's `allowed_areas` and `files` lists. If you need to touch an unplanned file, return a `REQUEST.action=more_context` instead.
1013
+
1014
+ 8. **Follow existing patterns.** Read adjacent code to match conventions, import styles, error handling patterns, and test structure.
1015
+ ```
1016
+
1017
+ - [ ] **Step 5: Write `builder.codex.md`**
1018
+
1019
+ ```markdown
1020
+ ## Codex-Specific Build Instructions
1021
+
1022
+ You are running inside Codex CLI.
1023
+
1024
+ ### Before starting work
1025
+
1026
+ 1. **Read the staged plan and spec.** These files are in your working directory:
1027
+ - `.aop/context/spec.md` — the original feature specification (the "why")
1028
+ - `.aop/context/plan.md` — the human-readable implementation plan
1029
+ - `.aop/context/plan.json` — the structured plan with tasks and acceptance criteria
1030
+
1031
+ 2. **Treat the plan as a task checklist.** Work through tasks sequentially. Complete one task fully before moving to the next.
1032
+
1033
+ ### While working
1034
+
1035
+ 3. **Edit files directly.** Make changes on disk in the working directory. Do not emit raw diffs or patches.
1036
+
1037
+ 4. **Commit after each task.** Each plan task should produce its own commit.
1038
+
1039
+ 5. **Stay within the plan's `allowed_areas` and `files` lists.** If you need to modify files outside the plan, return `REQUEST.action=more_context`.
1040
+
1041
+ 6. **Check acceptance criteria.** The plan's acceptance criteria are the definition of done for each task.
1042
+
1043
+ ### Quality checks
1044
+
1045
+ 7. **Follow existing patterns.** Read adjacent code to match conventions, import styles, and test structure.
1046
+
1047
+ 8. **Run tests after each change.** Verify your work passes before moving to the next task.
1048
+ ```
1049
+
1050
+ - [ ] **Step 6: Verify the overlay files are loadable**
1051
+
1052
+ Run: `ls -la config/agentic/orchestrator/prompts/overrides/`
1053
+ Expected: Four `.md` files listed.
1054
+
1055
+ Run: `wc -l config/agentic/orchestrator/prompts/overrides/*.md`
1056
+ Expected: All files have content (non-zero line counts).
1057
+
1058
+ - [ ] **Step 7: Commit**
1059
+
1060
+ ```bash
1061
+ git add config/agentic/orchestrator/prompts/overrides/
1062
+ git commit -m "feat: add provider-specific prompt overlays for Claude and Codex"
1063
+ ```
1064
+
1065
+ ---
1066
+
1067
+ ### Task 10: Final Verification
1068
+
1069
+ **Files:** None (verification only)
1070
+
1071
+ - [ ] **Step 1: Run full test suite**
1072
+
1073
+ Run: `npm run test 2>&1 | tail -30`
1074
+ Expected: All tests pass at ≥90% coverage thresholds.
1075
+
1076
+ - [ ] **Step 2: Run lint**
1077
+
1078
+ Run: `npm run lint 2>&1 | tail -10`
1079
+ Expected: Clean (zero warnings).
1080
+
1081
+ - [ ] **Step 3: Run typecheck**
1082
+
1083
+ Run: `npm run typecheck 2>&1 | tail -10`
1084
+ Expected: Clean compilation.
1085
+
1086
+ - [ ] **Step 4: Run validators**
1087
+
1088
+ Run: `npm run validate:mcp-contracts 2>&1 | tail -5`
1089
+ Expected: Clean.
1090
+
1091
+ Run: `npm run validate:architecture 2>&1 | tail -5`
1092
+ Expected: Clean.
1093
+
1094
+ - [ ] **Step 5: Update progress.md**
1095
+
1096
+ Append entries to `spec-files/progress.md` covering:
1097
+
1098
+ - Drop zone utility and UI integration
1099
+ - Prompt overlay resolver and schema update
1100
+ - Artifact stager implementation and wiring
1101
+ - Provider-specific overlay prompt files
1102
+
1103
+ - [ ] **Step 6: Commit progress.md**
1104
+
1105
+ ```bash
1106
+ git add spec-files/progress.md
1107
+ git commit -m "docs: update progress.md with drop zone and provider optimization entries"
1108
+ ```