@yemi33/minions 0.1.2448 → 0.1.2449

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 (315) hide show
  1. package/bin/cli-api-client.js +1 -1
  2. package/bin/install-internal-minions.js +1382 -44
  3. package/bin/install-layout.js +150 -0
  4. package/bin/minions.js +460 -167
  5. package/dashboard/docs/typography.md +65 -12
  6. package/dashboard/js/command-center.js +58 -4
  7. package/dashboard/js/detail-panel.js +36 -0
  8. package/dashboard/js/memory-panel.js +59 -12
  9. package/dashboard/js/qa.js +179 -20
  10. package/dashboard/js/refresh.js +148 -12
  11. package/dashboard/js/render-dispatch.js +3 -4
  12. package/dashboard/js/render-inbox.js +2 -2
  13. package/dashboard/js/render-other.js +3 -3
  14. package/dashboard/js/render-pipelines.js +14 -0
  15. package/dashboard/js/render-plans.js +57 -9
  16. package/dashboard/js/render-prd.js +132 -23
  17. package/dashboard/js/render-prs.js +195 -166
  18. package/dashboard/js/render-schedules.js +63 -3
  19. package/dashboard/js/render-utils.js +3 -3
  20. package/dashboard/js/render-watches.js +19 -3
  21. package/dashboard/js/render-work-items.js +238 -30
  22. package/dashboard/js/settings.js +205 -54
  23. package/dashboard/js/utils.js +51 -1
  24. package/dashboard/pages/home.html +1 -1
  25. package/dashboard/pages/qa.html +1 -16
  26. package/dashboard/pages/work.html +40 -0
  27. package/dashboard/shared/cc-limits.js +79 -0
  28. package/dashboard/shared/pr-filters.js +21 -38
  29. package/dashboard/shared/project-git-summary.js +1 -1
  30. package/dashboard/shared/record-filters.js +169 -0
  31. package/dashboard/shared/watches-source.js +1 -1
  32. package/dashboard/shared/welcome-popup.js +1 -1
  33. package/dashboard/shared/wi-filters.js +302 -0
  34. package/dashboard/slim/body.html +1 -0
  35. package/dashboard/slim/js/command-send.js +26 -0
  36. package/dashboard/slim/js/modals-tiles.js +380 -39
  37. package/dashboard/slim/js/status.js +13 -21
  38. package/dashboard/slim/layout.html +1 -0
  39. package/dashboard/slim/panel-bootstrap.js +6 -2
  40. package/dashboard/slim/styles.css +38 -0
  41. package/dashboard/styles.css +159 -55
  42. package/dashboard-build.js +13 -2
  43. package/dashboard.js +956 -423
  44. package/docs/README.md +11 -6
  45. package/docs/api-errors.md +2 -2
  46. package/docs/architecture-review-2026-07-09.md +1 -1
  47. package/docs/architecture.excalidraw +2 -2
  48. package/docs/auto-discovery.md +18 -9
  49. package/docs/branch-derivation.md +4 -4
  50. package/docs/capture-demos.js +39 -2
  51. package/docs/ci-runner-canary.md +123 -0
  52. package/docs/claude-md-propagation.md +2 -2
  53. package/docs/cloud-agent-dispatch.md +204 -0
  54. package/docs/command-center.md +7 -7
  55. package/docs/completion-reports.md +43 -20
  56. package/docs/constants.md +10 -3
  57. package/docs/constellation-bridge.md +134 -6
  58. package/docs/constellation-style-telemetry.md +4 -4
  59. package/docs/contracts/capability-protocol.v1.json +165 -0
  60. package/docs/cooldown-merge-semantics.md +12 -12
  61. package/docs/copilot-cli-schema.md +7 -7
  62. package/docs/cross-repo-plans.md +10 -10
  63. package/docs/dead-code-audit-retractions.md +5 -5
  64. package/docs/default-branch-ci.md +173 -0
  65. package/docs/deprecated.json +31 -31
  66. package/docs/design-inbox-entries-schema.md +3 -3
  67. package/docs/design-language.md +1051 -0
  68. package/docs/design-state-storage.md +11 -11
  69. package/docs/diagnostics-crash-reports.md +9 -9
  70. package/docs/diagnostics-memory.md +5 -5
  71. package/docs/documentation-audit-2026-07-09.md +7 -7
  72. package/docs/engine-restart.md +90 -5
  73. package/docs/harness-mode.md +1 -1
  74. package/docs/internal-install.md +338 -39
  75. package/docs/kb-dedup-duplicate-pair-investigation.md +5 -5
  76. package/docs/kb-pr3223-cascade-archiving.md +1 -1
  77. package/docs/kb-pr696-merge-conflict-docs.md +6 -6
  78. package/docs/kb-sweep.md +35 -35
  79. package/docs/keep-processes.md +1 -1
  80. package/docs/live-checkout-mode.md +30 -30
  81. package/docs/managed-spawn.md +18 -14
  82. package/docs/named-agents.md +7 -7
  83. package/docs/plan-lifecycle.md +69 -2
  84. package/docs/pr-author-identity.md +114 -0
  85. package/docs/pr-auto-fix-dispatch.md +19 -4
  86. package/docs/pr-comment-followup.md +6 -6
  87. package/docs/pr-review-fix-loop.md +59 -10
  88. package/docs/process-termination.md +40 -0
  89. package/docs/proposals/repo-pool-for-live-checkout.md +13 -13
  90. package/docs/qa-runbook-lifecycle.md +367 -17
  91. package/docs/qa-runbooks.md +3 -3
  92. package/docs/rfc-completion-json.md +18 -18
  93. package/docs/runtime-adapters.md +26 -21
  94. package/docs/security.md +6 -6
  95. package/docs/self-improvement.md +4 -4
  96. package/docs/shared-lifecycle-module-map.md +473 -472
  97. package/docs/skills.md +52 -3
  98. package/docs/slim-ux/concepts.md +121 -116
  99. package/docs/specs/agent-configurability.md +18 -18
  100. package/docs/specs/agent-rename.md +18 -18
  101. package/docs/team-memory.md +38 -21
  102. package/docs/timeouts-and-liveness.md +118 -10
  103. package/docs/tutorials/01-install-and-connect.md +1 -1
  104. package/docs/watches.md +40 -39
  105. package/docs/workspace-manifests.md +4 -4
  106. package/docs/worktree-lifecycle.md +293 -14
  107. package/engine/README.md +46 -0
  108. package/engine/{ado-comment.js → ado/comment.js} +8 -8
  109. package/engine/{ado-git-auth.js → ado/git-auth.js} +4 -4
  110. package/engine/{ado.js → ado/index.js} +417 -63
  111. package/engine/{ado-status.js → ado/status.js} +6 -8
  112. package/engine/{ado-token.js → ado/token.js} +1 -1
  113. package/engine/{acp-transport.js → agents/acp-transport.js} +62 -22
  114. package/engine/{agent-worker-pool.js → agents/agent-worker-pool.js} +17 -8
  115. package/engine/{cc-worker-pool.js → agents/cc-worker-pool.js} +16 -6
  116. package/engine/{claude-md-context.js → agents/claude-md-context.js} +5 -5
  117. package/engine/{harness-context.js → agents/harness-context.js} +5 -5
  118. package/engine/{harness.js → agents/harness.js} +3 -3
  119. package/engine/{llm.js → agents/llm.js} +18 -14
  120. package/engine/{model-discovery.js → agents/model-discovery.js} +2 -2
  121. package/engine/{playbook.js → agents/playbook.js} +155 -22
  122. package/engine/{pooled-agent-process.js → agents/pooled-agent-process.js} +14 -12
  123. package/engine/{preflight.js → agents/preflight.js} +29 -10
  124. package/engine/{spawn-agent.js → agents/spawn-agent.js} +25 -14
  125. package/engine/{spawn-phase-watchdog.js → agents/spawn-phase-watchdog.js} +16 -7
  126. package/engine/{steering.js → agents/steering.js} +5 -5
  127. package/engine/{tools-inventory.js → agents/tools-inventory.js} +2 -2
  128. package/engine/{agent-api-validation.js → api/agent-api-validation.js} +2 -2
  129. package/engine/{api-validation.js → api/api-validation.js} +1 -1
  130. package/engine/api/bridge.js +787 -0
  131. package/engine/{cc-api-validation.js → api/cc-api-validation.js} +1 -1
  132. package/engine/api/companion.js +560 -0
  133. package/engine/{content-api-validation.js → api/content-api-validation.js} +2 -2
  134. package/engine/{pr-issue-validation.js → api/pr-issue-validation.js} +33 -6
  135. package/engine/{settings-validation.js → api/settings-validation.js} +32 -4
  136. package/engine/api-contracts/agent-content.js +4 -4
  137. package/engine/api-contracts/capability-manifest.js +236 -0
  138. package/engine/api-contracts/capability-protocol.js +333 -0
  139. package/engine/api-contracts/cc-ops.js +1 -1
  140. package/engine/api-contracts/config-runtime.js +5 -0
  141. package/engine/api-contracts/core.js +28 -1
  142. package/engine/api-contracts/index.js +100 -0
  143. package/engine/api-contracts/orchestration.js +18 -5
  144. package/engine/api-contracts/pull-requests.js +37 -6
  145. package/engine/api-contracts/qa-process.js +29 -6
  146. package/engine/api-contracts/work-plan-prd.js +21 -1
  147. package/engine/cloud/contract.js +212 -0
  148. package/engine/cloud/index.js +159 -0
  149. package/engine/{execution-model.js → core/execution-model.js} +1 -1
  150. package/engine/{features.js → core/features.js} +4 -4
  151. package/engine/{operator-identity.js → core/operator-identity.js} +1 -1
  152. package/engine/{queries.js → core/queries.js} +201 -36
  153. package/engine/{safe-expr.js → core/safe-expr.js} +1 -1
  154. package/engine/{shared.js → core/shared.js} +1637 -175
  155. package/engine/{stdio-timestamps.js → core/stdio-timestamps.js} +1 -1
  156. package/engine/{untrusted-fence.js → core/untrusted-fence.js} +3 -3
  157. package/engine/db/index.js +11 -2
  158. package/engine/db/migrations/002-dispatches.js +3 -3
  159. package/engine/db/migrations/003-work-items.js +1 -1
  160. package/engine/db/migrations/004-pull-requests.js +1 -1
  161. package/engine/db/migrations/006-metrics.js +1 -1
  162. package/engine/db/migrations/007-watches.js +2 -2
  163. package/engine/db/migrations/008-small-state.js +1 -1
  164. package/engine/db/migrations/009-qa.js +1 -1
  165. package/engine/db/migrations/010-pr-links.js +1 -1
  166. package/engine/db/migrations/011-remaining-state.js +1 -1
  167. package/engine/db/migrations/012-steering-deliveries.js +2 -2
  168. package/engine/db/migrations/013-backfill-broken-note-links.js +1 -1
  169. package/engine/db/migrations/014-pr-fix-target-prefs.js +2 -2
  170. package/engine/db/migrations/015-plans-prds.js +0 -0
  171. package/engine/db/migrations/018-sql-only-cutover.js +2 -2
  172. package/engine/db/migrations/021-archived-work-items.js +1 -1
  173. package/engine/db/migrations/022-global-cc-session.js +1 -1
  174. package/engine/db/migrations/023-engine-state.js +1 -1
  175. package/engine/db/migrations/025-malformed-work-item-phantoms.js +1 -1
  176. package/engine/db/migrations/027-review-learning-lifecycle.js +1 -1
  177. package/engine/db/migrations/029-repair-reused-versions.js +20 -0
  178. package/engine/db/migrations/031-pr-author-identity.js +137 -0
  179. package/engine/{consolidation.js → memory/consolidation.js} +6 -6
  180. package/engine/{kb-sweep-runner.js → memory/kb-sweep-runner.js} +2 -2
  181. package/engine/{kb-sweep.js → memory/kb-sweep.js} +9 -7
  182. package/engine/{memory-retrieval.js → memory/memory-retrieval.js} +46 -4
  183. package/engine/{memory-store.js → memory/memory-store.js} +3 -3
  184. package/engine/{promotion.js → memory/promotion.js} +3 -3
  185. package/engine/{review-learning-backfill.js → memory/review-learning-backfill.js} +6 -6
  186. package/engine/{review-learning.js → memory/review-learning.js} +10 -5
  187. package/engine/{diagnostics-memory.js → observability/diagnostics-memory.js} +1 -1
  188. package/engine/{logs-store.js → observability/logs-store.js} +5 -5
  189. package/engine/{metrics-store.js → observability/metrics-store.js} +4 -4
  190. package/engine/{check-status.js → operations/check-status.js} +3 -3
  191. package/engine/{cli.js → operations/cli.js} +271 -113
  192. package/engine/{distribution.js → operations/distribution.js} +5 -6
  193. package/engine/{cleanup.js → orchestration/cleanup.js} +72 -45
  194. package/engine/{cooldown.js → orchestration/cooldown.js} +5 -5
  195. package/engine/{dispatch-events.js → orchestration/dispatch-events.js} +2 -2
  196. package/engine/{dispatch.js → orchestration/dispatch.js} +129 -36
  197. package/engine/orchestration/failed-scheduled-cleanup.js +274 -0
  198. package/engine/{lifecycle.js → orchestration/lifecycle.js} +198 -90
  199. package/engine/{meeting.js → orchestration/meeting.js} +6 -16
  200. package/engine/{pipeline.js → orchestration/pipeline.js} +12 -12
  201. package/engine/{pre-dispatch-eval.js → orchestration/pre-dispatch-eval.js} +10 -9
  202. package/engine/{routing.js → orchestration/routing.js} +3 -3
  203. package/engine/{schedule-bootstrap.js → orchestration/schedule-bootstrap.js} +4 -4
  204. package/engine/{scheduler.js → orchestration/scheduler.js} +38 -8
  205. package/engine/{timeout.js → orchestration/timeout.js} +158 -109
  206. package/engine/{db-events.js → persistence/db-events.js} +2 -2
  207. package/engine/{dispatch-store.js → persistence/dispatch-store.js} +7 -7
  208. package/engine/{inbox-store.js → persistence/inbox-store.js} +2 -2
  209. package/engine/{note-link-backfill.js → persistence/note-link-backfill.js} +4 -4
  210. package/engine/{pr-fix-target-store.js → persistence/pr-fix-target-store.js} +8 -8
  211. package/engine/{pull-requests-store.js → persistence/pull-requests-store.js} +21 -7
  212. package/engine/{small-state-store.js → persistence/small-state-store.js} +31 -31
  213. package/engine/persistence/state-operations.js +350 -0
  214. package/engine/{steering-store.js → persistence/steering-store.js} +6 -6
  215. package/engine/{issues.js → planning/issues.js} +2 -2
  216. package/engine/{plan-prd-validation.js → planning/plan-prd-validation.js} +8 -2
  217. package/engine/planning/prd-result-sidecar.js +190 -0
  218. package/engine/{prd-store.js → planning/prd-store.js} +17 -17
  219. package/engine/{project-discovery.js → planning/project-discovery.js} +5 -5
  220. package/engine/{projects.js → planning/projects.js} +10 -10
  221. package/engine/{resolve-area.js → planning/resolve-area.js} +1 -1
  222. package/engine/{work-item-validation.js → planning/work-item-validation.js} +39 -3
  223. package/engine/{work-items-store.js → planning/work-items-store.js} +29 -21
  224. package/engine/{keep-process-sweep.js → processes/keep-process-sweep.js} +57 -17
  225. package/engine/{managed-spawn-launcher.js → processes/managed-spawn-launcher.js} +3 -3
  226. package/engine/{managed-spawn.js → processes/managed-spawn.js} +97 -46
  227. package/engine/{process-utils.js → processes/process-utils.js} +599 -55
  228. package/engine/{abandoned-pr-reconciliation.js → providers/abandoned-pr-reconciliation.js} +17 -7
  229. package/engine/{comment-classifier.js → providers/comment-classifier.js} +85 -17
  230. package/engine/{comment-format.js → providers/comment-format.js} +5 -5
  231. package/engine/{gh-comment.js → providers/gh-comment.js} +15 -15
  232. package/engine/{gh-token.js → providers/gh-token.js} +4 -4
  233. package/engine/{github.js → providers/github.js} +131 -54
  234. package/engine/{pr-action.js → providers/pr-action.js} +13 -12
  235. package/engine/{pr-clone-keep.js → providers/pr-clone-keep.js} +7 -7
  236. package/engine/{pr-devbox.js → providers/pr-devbox.js} +6 -6
  237. package/engine/{pr-fix-target.js → providers/pr-fix-target.js} +13 -13
  238. package/engine/{pr-remote-patch.js → providers/pr-remote-patch.js} +4 -4
  239. package/engine/{pr-resolve.js → providers/pr-resolve.js} +7 -7
  240. package/engine/{pr-temp-clone.js → providers/pr-temp-clone.js} +5 -5
  241. package/engine/{pr-track.js → providers/pr-track.js} +11 -13
  242. package/engine/{shared-branch-pr-reconcile.js → providers/shared-branch-pr-reconcile.js} +4 -4
  243. package/engine/qa/auto-prd-qa.js +313 -0
  244. package/engine/{qa-from-prd.js → qa/from-prd.js} +42 -12
  245. package/engine/qa/prd-session.js +240 -0
  246. package/engine/{qa-process-validation.js → qa/process-validation.js} +14 -9
  247. package/engine/{qa-runbooks.js → qa/runbooks.js} +1 -1
  248. package/engine/{qa-runs.js → qa/runs.js} +286 -15
  249. package/engine/{qa-sessions.js → qa/sessions.js} +595 -49
  250. package/engine/qa/visual-journey.js +654 -0
  251. package/engine/{qa-runners.js → qa-runners/index.js} +7 -7
  252. package/engine/qa-runners/maestro.js +3 -3
  253. package/engine/qa-runners/playwright.js +2 -2
  254. package/engine/{restart-health.js → recovery/restart-health.js} +48 -4
  255. package/engine/recovery/stop-stack.js +607 -0
  256. package/engine/{supervisor.js → recovery/supervisor.js} +105 -175
  257. package/engine/{watchdog.js → recovery/watchdog.js} +136 -13
  258. package/engine/runtimes/claude.js +14 -12
  259. package/engine/runtimes/codex.js +8 -6
  260. package/engine/runtimes/copilot.js +17 -16
  261. package/engine/{watch-actions.js → watches/actions.js} +13 -13
  262. package/engine/{watches.js → watches/index.js} +43 -32
  263. package/engine/{watches-store.js → watches/store.js} +4 -4
  264. package/engine/{create-pr-worktree.js → worktrees/create-pr.js} +1 -1
  265. package/engine/{worktree-gc.js → worktrees/gc.js} +70 -22
  266. package/engine/worktrees/inventory.js +671 -0
  267. package/engine/{live-checkout.js → worktrees/live-checkout.js} +4 -4
  268. package/engine/{worktree-pool.js → worktrees/pool.js} +2 -2
  269. package/engine/{worktree-preflight.js → worktrees/preflight.js} +1 -0
  270. package/engine/worktrees/quarantine-refs.js +173 -0
  271. package/engine.js +1137 -208
  272. package/minions.js +147 -77
  273. package/package.json +10 -6
  274. package/playbooks/_pr-description-audit.md +110 -78
  275. package/playbooks/build-fix-complex.md +2 -0
  276. package/playbooks/fix.md +16 -12
  277. package/playbooks/implement-shared.md +2 -0
  278. package/playbooks/implement.md +19 -20
  279. package/playbooks/plan-to-prd.md +18 -3
  280. package/playbooks/qa-session-draft.md +136 -1
  281. package/playbooks/qa-session-execute.md +80 -2
  282. package/playbooks/qa-session-setup.md +17 -1
  283. package/playbooks/qa-validate.md +1 -1
  284. package/playbooks/setup.md +2 -0
  285. package/playbooks/shared-rules.md +25 -32
  286. package/playbooks/templates/followup-dispatch.md +4 -3
  287. package/playbooks/verify.md +1 -1
  288. package/prompts/cc-system.md +19 -27
  289. package/watch-plugins/README.md +92 -0
  290. package/watch-plugins/ado-author-prs.js +336 -0
  291. package/watch-plugins/gh-author-prs.js +375 -0
  292. package/watch-plugins/http.js +474 -0
  293. package/watch-plugins/teams-channel.js +869 -0
  294. package/docs/dev-composite-workflow.md +0 -101
  295. package/docs/pr-screenshots/pr-886/after-single-header.png +0 -0
  296. package/docs/pr-screenshots/pr-886/before-duplicate-header.png +0 -0
  297. package/docs/pr-screenshots/pr-895/01-cancellation-reason-detail.png +0 -0
  298. package/docs/pr-screenshots/pr-899/worker-pool-worktrees-AFTER.png +0 -0
  299. package/docs/pr-screenshots/pr-899/worker-pool-worktrees-BEFORE.png +0 -0
  300. package/docs/pr-screenshots/pr-901/projects-tab-default.png +0 -0
  301. package/docs/pr-screenshots/pr-901/projects-tab-fmf-selected.png +0 -0
  302. package/docs/pr-screenshots/pr-916/model-picker-AFTER-crop.png +0 -0
  303. package/docs/pr-screenshots/pr-916/model-picker-AFTER.png +0 -0
  304. package/docs/pr-screenshots/pr-916/model-picker-BEFORE-crop.png +0 -0
  305. package/docs/pr-screenshots/pr-916/model-picker-BEFORE.png +0 -0
  306. package/docs/pr-screenshots/pr-916/model-picker-dropdown-AFTER.png +0 -0
  307. package/docs/pr-screenshots/pr-979/auto-fix-pane-AFTER.png +0 -0
  308. package/docs/pr-screenshots/pr-979/auto-fix-pane-BEFORE.png +0 -0
  309. package/docs/pr-screenshots/pr-985/pr-column-em-dash-AFTER.png +0 -0
  310. package/docs/pr-screenshots/pr-985/pr-column-em-dash-BEFORE.png +0 -0
  311. package/docs/visual-evidence-ci.md +0 -103
  312. package/engine/bridge.js +0 -379
  313. package/engine/quarantine-refs.js +0 -103
  314. package/engine/state-operations.js +0 -178
  315. /package/engine/{steering-constraints.js → agents/steering-constraints.js} +0 -0
package/docs/skills.md CHANGED
@@ -4,7 +4,7 @@ Agents emit a fenced `skill` block when they discover a durable, reusable workfl
4
4
 
5
5
  The engine extracts valid blocks from agent stdout and from inbox findings (`notes/inbox/*.md`) and writes them into the selected runtime's native personal skills directory (e.g. `~/.claude/skills/<name>/SKILL.md` for Claude, the equivalent personal skills directory for Copilot). Project-scoped skills queue a work item that lands the file by PR in the selected runtime's native project skill root.
6
6
 
7
- Packaged `scope: minions` skills are synchronized into every registered runtime's personal skill directory during `minions init` and upgrades. A packaged skill replaces an existing same-name personal copy so contract fixes take effect immediately.
7
+ Packaged `scope: minions` skills are synchronized into every registered runtime's personal skill directory during `minions init` and upgrades (the sync source is the repo-root `skills/` directory, scanned by `shared.syncBundledPersonalSkills`). A packaged skill replaces an existing same-name personal copy so contract fixes take effect immediately. The bundled `scope: minions` skill under that sync source today is `check-self-authored-review-comment`. Separately, `capture-web-evidence` (`.claude/skills/capture-web-evidence/SKILL.md`) — a **project-agnostic** Playwright flow for capturing BEFORE/AFTER screenshots and screen recordings for a web or mobile-webview UI change in ANY project — is the fallback when the target repo has no visual-evidence instructions of its own (harness-first resolution; see `playbooks/_pr-description-audit.md` → "Visual evidence handling"). It lives under `.claude/skills/` (not the `skills/` sync source), so it is not copied into personal skill dirs by the bundled-skill sync; instead it is discovered natively from `.claude/skills/` and its recipe is inlined in the always-injected PR-description-audit playbook.
8
8
 
9
9
  ## Block format
10
10
 
@@ -44,6 +44,55 @@ Plain Markdown. Include the steps, commands, file paths, and notes another agent
44
44
 
45
45
  See [`playbooks/shared-rules.md`](../playbooks/shared-rules.md) for the full threshold. In short: do not emit a skill for one-off bug fixes, isolated command output, obvious repo facts, or anything already covered by existing docs, playbooks, or skills.
46
46
 
47
+ ## Skill discovery (read side)
48
+
49
+ Discovery is how already-on-disk skills are surfaced to the registry so agents
50
+ and Command Center (CC) can resolve a named skill instead of grepping the
51
+ filesystem. It is separate from the write path (the ` ```skill ` block above).
52
+
53
+ - **Inventory** — `engine/core/queries.js#collectSkillFiles` / `getSkills` (consumed by
54
+ `/api/tools` in a child process, and by the CC registry) unions:
55
+ - runtime-native user/plugin roots from each adapter's `getSkillRoots`
56
+ (`~/.copilot/skills`, `~/.claude/skills`, `~/.agents/skills`, installed plugins);
57
+ - project skill roots for every configured project. In addition to the
58
+ repo-root roots the adapters expose (`<repo>/.claude/skills`,
59
+ `<repo>/.github/skills`, `<repo>/.agents/skills`), a **bounded walk** finds
60
+ **project-embedded skills nested anywhere under the checkout** — e.g.
61
+ `loop/app/android/android/.claude/skills/*` in a monorepo. Each discovered
62
+ skill is tagged with its `projectName` and on-disk `dir`.
63
+ - **CC `<available_skills>` registry** — the Command Center system prompt block is
64
+ built by `engine/core/shared.js#buildAvailableSkillsBlock`. It merges the
65
+ user/plugin skills from `listCopilotSkills` with the **project-embedded skills**
66
+ discovered above (passed as `renderCcSystemPrompt({ projectSkills })` from
67
+ `dashboard.js#collectCcProjectSkills`, sourced from the child-process-backed
68
+ `/api/tools` inventory — see "Bounds & safety" below).
69
+ Project skills render a `<path>` element so CC can open the `SKILL.md`
70
+ directly: CC's runtime never registered them, so they are **read**, not
71
+ invoked with the `skill` tool (`prompts/cc-system.md` teaches the split).
72
+ User/plugin skills win a name collision (matches Copilot CLI's
73
+ user-wins precedence). The static/legacy CC prompt keeps user/plugin-only
74
+ discovery so dashboard boot never triggers a cold monorepo walk.
75
+
76
+ **Bounds & safety** — the nested walk is breadth-first (shallowest-first, so the
77
+ budget is spent on the levels most likely to hold repo-root skills) and bounded
78
+ so a massive monorepo can't stall discovery (caps in `engine/core/queries.js`): max
79
+ directory depth (`SKILL_WALK_MAX_DEPTH = 12`), a directory-dirent cap
80
+ (`SKILL_WALK_MAX_ENTRIES = 40000` — only directory entries count; files are free
81
+ and never starve the walk), and a heavy-dir prune set
82
+ (`SKILL_WALK_PRUNE_DIRS`: `.git`, `node_modules`, `bin`, `obj`, `build`, `dist`,
83
+ `out`, `target`, `.gradle`, `vendor`, `DerivedData`, …). Marker dir names
84
+ (`.claude` / `.github` / `.agents`) are derived from the adapter-provided project
85
+ roots — discovery never branches on runtime names. Results are memoized by the
86
+ shared 30s skills cache (`SKILLS_CACHE_TTL`, keyed on home dir + project
87
+ localPaths; flushed by `invalidateSkillsCache`), so the walk runs at most once
88
+ per cache window and stays off the `/api/status` hot path. Crucially the walk
89
+ runs **in the `/api/tools` child process** (`engine/agents/tools-inventory.js`), never in
90
+ the dashboard process: the CC turn path reads that child-backed inventory cache
91
+ only and, on a cold or stale cache, kicks off `_refreshToolsInventory()` and
92
+ degrades the turn to user/plugin skills. Deferring an in-process walk with
93
+ `setImmediate` would not be enough — it runs in the check phase of the *same*
94
+ event loop and would still stall `/api/status` polling and every open SSE stream.
95
+
47
96
  ## Human-approved promotion of review lessons (P-192d3660)
48
97
 
49
98
  Verified **review lessons** captured in structured memory (`sourceType: review-learning`,
@@ -53,7 +102,7 @@ Copilot/Claude pick them up through native instruction/skill discovery. Promotio
53
102
  checkout. It queues a normal project-bound work item that follows the usual branch → PR →
54
103
  review → merge lifecycle.
55
104
 
56
- - **Eligibility** (`engine/promotion.js#evaluateLessonPromotionEligibility`): the lesson must be
105
+ - **Eligibility** (`engine/memory/promotion.js#evaluateLessonPromotionEligibility`): the lesson must be
57
106
  `active`, high-confidence (`confidence >= 0.8`), and backed by **at least two distinct valid
58
107
  findings** (its own finding plus repeated-finding recurrences, counted by
59
108
  `memory-store.js#getReviewLearningFindingSupport`). The search API annotates eligible lessons
@@ -63,7 +112,7 @@ review → merge lifecycle.
63
112
  `<slug>/SKILL.md` (the runtime's native skill root); or
64
113
  - `repository-instruction` — an allowlisted file (`CLAUDE.md`, `AGENTS.md` at any depth, or
65
114
  `.github/copilot-instructions.md`) queued as a `docs` work item.
66
- - **Queueing** goes through `engine/promotion.js#queuePromotion`, which reuses the same
115
+ - **Queueing** goes through `engine/memory/promotion.js#queuePromotion`, which reuses the same
67
116
  project-bound work-item queueing extracted from `lifecycle.js#extractSkillsFromOutput`
68
117
  (`queueProjectSkillWorkItem`). The queued work item cites the stable originating memory IDs, the
69
118
  bounded proposed rule(s), and the target project/path in `meta.promotion`.
@@ -36,8 +36,8 @@ dashboard then builds synthetic action results for the UI.
36
36
 
37
37
  - System prompt: `prompts/cc-system.md`
38
38
  - Session records: `engine/state.db` table `cc_sessions`
39
- - Shared invocation path: `dashboard.js#ccCall` and `engine/llm.js#callLLM`
40
- - Runtime selection: `engine/shared.js#resolveCcCli` and `engine/runtimes/index.js#resolveRuntime`
39
+ - Shared invocation path: `dashboard.js#ccCall` and `engine/agents/llm.js#callLLM`
40
+ - Runtime selection: `engine/core/shared.js#resolveCcCli` and `engine/runtimes/index.js#resolveRuntime`
41
41
 
42
42
  **Backing symbols.**
43
43
 
@@ -45,8 +45,8 @@ dashboard then builds synthetic action results for the UI.
45
45
  `dashboard.js#handleCommandCenterStream`
46
46
  - Turn/action correlation: `dashboard.js#_ccTurnCreations` and
47
47
  `dashboard.js#_buildSyntheticActionResultsForTurn`
48
- - Session persistence: `engine/small-state-store.js` CC-session helpers
49
- - Per-response tool-turn cap: `engine/shared.js#ENGINE_DEFAULTS.ccMaxTurns` (default 50)
48
+ - Session persistence: `engine/persistence/small-state-store.js` CC-session helpers
49
+ - Per-response tool-turn cap: `engine/core/shared.js#ENGINE_DEFAULTS.ccMaxTurns` (default 50)
50
50
 
51
51
  **Existing dashboard.** `dashboard/pages/home.html` contains the classic CC surface; the Slim home
52
52
  surface uses the same server handlers and sessions.
@@ -80,15 +80,15 @@ dependencies, and lifecycle state.
80
80
 
81
81
  - Durable records: `engine/state.db` table `work_items`
82
82
  - In-flight execution records: `engine/state.db` table `dispatches`
83
- - Read/write facade: `engine/work-items-store.js`
83
+ - Read/write facade: `engine/planning/work-items-store.js`
84
84
 
85
85
  **Backing symbols.**
86
86
 
87
- - Statuses: `engine/shared.js#WI_STATUS`
88
- - Work types: `engine/shared.js#WORK_TYPE`
89
- - Queue admission: `engine/dispatch.js#addToDispatch`
90
- - Lifecycle updates: `engine/lifecycle.js#updateWorkItemStatus`
91
- - Completion predicate: `engine/lifecycle.js#isItemCompleted`
87
+ - Statuses: `engine/core/shared.js#WI_STATUS`
88
+ - Work types: `engine/core/shared.js#WORK_TYPE`
89
+ - Queue admission: `engine/orchestration/dispatch.js#addToDispatch`
90
+ - Lifecycle updates: `engine/orchestration/lifecycle.js#updateWorkItemStatus`
91
+ - Completion predicate: `engine/orchestration/lifecycle.js#isItemCompleted`
92
92
 
93
93
  The common path is `pending` (or `queued`) -> `dispatched` -> `done` or `failed`. `paused`,
94
94
  `decomposed`, and `cancelled` are also canonical states. Failures can retry up to
@@ -125,8 +125,13 @@ Plan Markdown -> plan-to-prd Work Item -> PRD rows -> Work Items -> verify Work
125
125
  ```
126
126
 
127
127
  The `plan-to-prd` agent writes `agents/<id>/prd-result.json`. On successful completion,
128
- `engine/lifecycle.js` validates that sidecar against the expected plan and imports it into the SQL
129
- PRD store before the plan-to-PRD Work Item can finish.
128
+ `engine/orchestration/lifecycle.js` validates that sidecar against the expected plan and imports it into the SQL
129
+ PRD store before the plan-to-PRD Work Item can finish. The expected result identity
130
+ (`_prdFilename`) is pinned on the Work Item and is **retry-stable**, so a valid sidecar left
131
+ behind by an interrupted attempt is recoverable: the next tick imports it (pre-spawn, in
132
+ `engine.js#discoverCentralWorkItems`) instead of dispatching a second conversion. Validation
133
+ and the atomic one-shot consume live in `engine/planning/prd-result-sidecar.js` — both import
134
+ sites share it. See [plan-lifecycle.md](../plan-lifecycle.md#plan-to-prd-result-sidecar).
130
135
 
131
136
  **Where it lives.**
132
137
 
@@ -139,12 +144,12 @@ Executable lifecycle state is SQL-backed. Manual archive moves the Markdown sour
139
144
 
140
145
  **Backing symbols.**
141
146
 
142
- - Plan statuses: `engine/shared.js#PLAN_STATUS`
143
- - Atomic conversion enqueue: `engine/shared.js#queuePlanToPrd`
144
- - Completion gate: `engine/lifecycle.js#checkPlanCompletion`
145
- - Manual archive: `engine/lifecycle.js#archivePlan`
146
- - Plan worktree cleanup: `engine/lifecycle.js#cleanupPlanWorktrees`
147
- - PRD sidecar import: `engine/lifecycle.js#runPostCompletionHooks`
147
+ - Plan statuses: `engine/core/shared.js#PLAN_STATUS`
148
+ - Atomic conversion enqueue: `engine/core/shared.js#queuePlanToPrd`
149
+ - Completion gate: `engine/orchestration/lifecycle.js#checkPlanCompletion`
150
+ - Manual archive: `engine/orchestration/lifecycle.js#archivePlan`
151
+ - Plan worktree cleanup: `engine/orchestration/lifecycle.js#cleanupPlanWorktrees`
152
+ - PRD sidecar import: `engine/orchestration/lifecycle.js#runPostCompletionHooks`
148
153
 
149
154
  **Existing dashboard.** `dashboard/pages/plans.html` owns the classic Plans and PRD tabs and all
150
155
  lifecycle actions.
@@ -185,18 +190,18 @@ complexity, dependencies, project, type, and a status of `missing`, `updated`, o
185
190
  - Parent records: `engine/state.db` table `prds`
186
191
  - Item records: `engine/state.db` table `prd_items`
187
192
  - Verify-PR links: `engine/state.db` table `prd_verify_prs`
188
- - Read/write facade: `engine/prd-store.js`
193
+ - Read/write facade: `engine/planning/prd-store.js`
189
194
 
190
195
  Archived PRDs remain in SQL. Current manual archive sets the PRD's archive metadata in place.
191
196
 
192
197
  **Backing symbols.**
193
198
 
194
- - Item statuses: `engine/shared.js#PRD_ITEM_STATUS`
195
- - Materializable statuses: `engine/shared.js#PRD_MATERIALIZABLE`
196
- - SQL writes and item upserts: `engine/prd-store.js#writePrd` and `#_upsertPrd`
197
- - Reads: `engine/prd-store.js#readPrd` and `#listPrdRows`
198
- - Work Item -> PRD status sync: `engine/lifecycle.js#syncPrdItemStatus`
199
- - Reconciliation sweep: `engine/lifecycle.js#reconcilePrdStatuses`
199
+ - Item statuses: `engine/core/shared.js#PRD_ITEM_STATUS`
200
+ - Materializable statuses: `engine/core/shared.js#PRD_MATERIALIZABLE`
201
+ - SQL writes and item upserts: `engine/planning/prd-store.js#writePrd` and `#_upsertPrd`
202
+ - Reads: `engine/planning/prd-store.js#readPrd` and `#listPrdRows`
203
+ - Work Item -> PRD status sync: `engine/orchestration/lifecycle.js#syncPrdItemStatus`
204
+ - Reconciliation sweep: `engine/orchestration/lifecycle.js#reconcilePrdStatuses`
200
205
  - Stable Work Item join: `work_items.prd_item_id -> prd_items.id`
201
206
 
202
207
  **Existing dashboard.** `dashboard/pages/plans.html` renders the PRD graph/list. The Slim Plans tile
@@ -229,11 +234,11 @@ information belongs in team `notes.md`, the Knowledge Base, or both.
229
234
 
230
235
  **Backing symbols.**
231
236
 
232
- - Writer and ID parser: `engine/shared.js#writeToInbox` and `#parseNoteId`
233
- - Consolidation entry point: `engine/consolidation.js#consolidateInbox`
234
- - LLM merge: `engine/consolidation.js#consolidateWithLLM`
235
- - Classification: `engine/consolidation.js#classifyToKnowledgeBase`
236
- - Source archival: `engine/consolidation.js#archiveInboxFiles`
237
+ - Writer and ID parser: `engine/core/shared.js#writeToInbox` and `#parseNoteId`
238
+ - Consolidation entry point: `engine/memory/consolidation.js#consolidateInbox`
239
+ - LLM merge: `engine/memory/consolidation.js#consolidateWithLLM`
240
+ - Classification: `engine/memory/consolidation.js#classifyToKnowledgeBase`
241
+ - Source archival: `engine/memory/consolidation.js#archiveInboxFiles`
237
242
 
238
243
  **Existing dashboard.** `dashboard/pages/inbox.html` surfaces Notes, the inbox, and KB controls.
239
244
 
@@ -264,10 +269,10 @@ agent memory is kept separately under `knowledge/agents/`.
264
269
 
265
270
  **Backing symbols.**
266
271
 
267
- - Canonical categories: `engine/shared.js#KB_CATEGORIES`
268
- - Query/read layer: `engine/queries.js#KNOWLEDGE_DIR` and KB readers
269
- - Classification: `engine/consolidation.js#classifyToKnowledgeBase`
270
- - Compaction and TTL sweep: `engine/kb-sweep.js`
272
+ - Canonical categories: `engine/core/shared.js#KB_CATEGORIES`
273
+ - Query/read layer: `engine/core/queries.js#KNOWLEDGE_DIR` and KB readers
274
+ - Classification: `engine/memory/consolidation.js#classifyToKnowledgeBase`
275
+ - Compaction and TTL sweep: `engine/memory/kb-sweep.js`
271
276
 
272
277
  **Existing dashboard.** `dashboard/pages/inbox.html` contains the KB browser and sweep controls.
273
278
 
@@ -299,10 +304,10 @@ layer, while `kb-pins.json` protects selected KB entries from sweep removal.
299
304
 
300
305
  **Backing symbols.**
301
306
 
302
- - Pin-index path: `engine/shared.js#PINNED_ITEMS_PATH`
303
- - Pin-index reader: `engine/shared.js#getPinnedItems`
307
+ - Pin-index path: `engine/core/shared.js#PINNED_ITEMS_PATH`
308
+ - Pin-index reader: `engine/core/shared.js#getPinnedItems`
304
309
  - Markdown parser: `dashboard.js#parsePinnedEntries`
305
- - Prompt injection and untrusted-input fencing: `engine/playbook.js`
310
+ - Prompt injection and untrusted-input fencing: `engine/agents/playbook.js`
306
311
 
307
312
  **Existing dashboard.** The home and Knowledge surfaces expose pinned context and pin/unpin
308
313
  controls.
@@ -331,9 +336,9 @@ agents, and engine alerts.
331
336
 
332
337
  **Backing symbols.**
333
338
 
334
- - Directory: `engine/queries.js#INBOX_DIR`
335
- - Writer: `engine/shared.js#writeToInbox`
336
- - Consolidation: `engine/consolidation.js#consolidateInbox`
339
+ - Directory: `engine/core/queries.js#INBOX_DIR`
340
+ - Writer: `engine/core/shared.js#writeToInbox`
341
+ - Consolidation: `engine/memory/consolidation.js#consolidateInbox`
337
342
  - Manual handlers: `dashboard.js#handleInboxPersist`, `#handleInboxPromoteKb`,
338
343
  `#handleInboxOpen`, and `#handleInboxDelete`
339
344
 
@@ -366,12 +371,12 @@ Item enters the queue, including nested string fields.
366
371
 
367
372
  **Backing symbols.**
368
373
 
369
- - Cron parsing: `engine/scheduler.js#parseCronField` and `#parseCronExpr`
370
- - Match decision: `engine/scheduler.js#shouldRunNow`
371
- - Variable map: `engine/scheduler.js#buildScheduleTemplateVars`
372
- - Recursive substitution: `engine/scheduler.js#applyScheduleTemplateVarsRecursive`
373
- - Work Item factory: `engine/scheduler.js#createScheduledWorkItem`
374
- - Discovery: `engine/scheduler.js#discoverScheduledWork`
374
+ - Cron parsing: `engine/orchestration/scheduler.js#parseCronField` and `#parseCronExpr`
375
+ - Match decision: `engine/orchestration/scheduler.js#shouldRunNow`
376
+ - Variable map: `engine/orchestration/scheduler.js#buildScheduleTemplateVars`
377
+ - Recursive substitution: `engine/orchestration/scheduler.js#applyScheduleTemplateVarsRecursive`
378
+ - Work Item factory: `engine/orchestration/scheduler.js#createScheduledWorkItem`
379
+ - Discovery: `engine/orchestration/scheduler.js#discoverScheduledWork`
375
380
 
376
381
  **Existing dashboard.** `dashboard/pages/schedule.html` provides definition CRUD, run-now, and
377
382
  natural-language-to-cron assistance.
@@ -397,21 +402,21 @@ notifies or runs a configured follow-up action. The eight built-in target types
397
402
 
398
403
  `pr`, `work-item`, `meeting`, `plan`, `schedule`, `pipeline`, `dispatch`, and `agent`.
399
404
 
400
- Additional target types can be loaded from `<MINIONS_DIR>/watches.d/*.js`.
405
+ Additional target types can be loaded from `<MINIONS_DIR>/watch-plugins/*.js`.
401
406
 
402
407
  **Where it lives.** `engine/state.db` table `watches`.
403
408
 
404
409
  **Backing symbols.**
405
410
 
406
- - Statuses and built-in target names: `engine/shared.js#WATCH_STATUS` and
411
+ - Statuses and built-in target names: `engine/core/shared.js#WATCH_STATUS` and
407
412
  `#WATCH_TARGET_TYPE`
408
- - Conditions: `engine/shared.js#WATCH_CONDITION`
409
- - Fire-once fallback set: `engine/shared.js#WATCH_ABSOLUTE_CONDITIONS`
410
- - Target registry: `engine/watches.js#TARGET_TYPES` and `#registerTargetType`
411
- - CRUD: `engine/watches.js#createWatch`, `#updateWatch`, and `#deleteWatch`
412
- - Evaluation: `engine/watches.js#evaluateWatch` and `#checkWatches`
413
- - Plugin loader: `engine/watches.js#_loadPluginTargetTypes`
414
- - Follow-up action registry: `engine/watch-actions.js`
413
+ - Conditions: `engine/core/shared.js#WATCH_CONDITION`
414
+ - Fire-once fallback set: `engine/core/shared.js#WATCH_ABSOLUTE_CONDITIONS`
415
+ - Target registry: `engine/watches/index.js#TARGET_TYPES` and `#registerTargetType`
416
+ - CRUD: `engine/watches/index.js#createWatch`, `#updateWatch`, and `#deleteWatch`
417
+ - Evaluation: `engine/watches/index.js#evaluateWatch` and `#checkWatches`
418
+ - Plugin loader: `engine/watches/index.js#_loadPluginTargetTypes`
419
+ - Follow-up action registry: `engine/watches/actions.js`
415
420
 
416
421
  The engine schedules `checkWatches` every `ENGINE_DEFAULTS.watchPollEvery` ticks. The default is 18
417
422
  ticks, approximately three minutes at the default 10-second engine tick. Each watch can impose a
@@ -450,13 +455,13 @@ Definitions intentionally remain file-backed; run history is SQL-backed.
450
455
 
451
456
  **Backing symbols.**
452
457
 
453
- - Definition directory and CRUD: `engine/pipeline.js#PIPELINES_DIR`, `#getPipelines`,
458
+ - Definition directory and CRUD: `engine/orchestration/pipeline.js#PIPELINES_DIR`, `#getPipelines`,
454
459
  `#getPipeline`, `#savePipeline`, and `#deletePipeline`
455
- - Stage/status enums: `engine/shared.js#STAGE_TYPE` and `#PIPELINE_STATUS`
456
- - Run reads: `engine/pipeline.js#getPipelineRuns` ->
457
- `engine/small-state-store.js#readPipelineRuns`
458
- - Run mutations: `engine/shared.js#mutatePipelineRuns`
459
- - Lifecycle: `engine/pipeline.js#startRun`, `#updateRunStage`, `#upsertRunStage`, and
460
+ - Stage/status enums: `engine/core/shared.js#STAGE_TYPE` and `#PIPELINE_STATUS`
461
+ - Run reads: `engine/orchestration/pipeline.js#getPipelineRuns` ->
462
+ `engine/persistence/small-state-store.js#readPipelineRuns`
463
+ - Run mutations: `engine/core/shared.js#mutatePipelineRuns`
464
+ - Lifecycle: `engine/orchestration/pipeline.js#startRun`, `#updateRunStage`, `#upsertRunStage`, and
460
465
  `#completeRun`
461
466
 
462
467
  **Existing dashboard.** `dashboard/pages/pipelines.html` provides definition editing, triggering,
@@ -487,12 +492,12 @@ runtime, prompt sidecar, process/session metadata, worktree, branch/PR locks, an
487
492
 
488
493
  **Backing symbols.**
489
494
 
490
- - Transactional mutation: `engine/dispatch.js#mutateDispatch`
491
- - Queue insertion and dedupe: `engine/dispatch.js#addToDispatch`
492
- - PR/branch lock detection: `engine/dispatch.js#findActivePrOrBranchLock`
493
- - Completion: `engine/dispatch.js#completeDispatch`
494
- - Result enum: `engine/shared.js#DISPATCH_RESULT`
495
- - Store implementation: `engine/dispatch-store.js`
495
+ - Transactional mutation: `engine/orchestration/dispatch.js#mutateDispatch`
496
+ - Queue insertion and dedupe: `engine/orchestration/dispatch.js#addToDispatch`
497
+ - PR/branch lock detection: `engine/orchestration/dispatch.js#findActivePrOrBranchLock`
498
+ - Completion: `engine/orchestration/dispatch.js#completeDispatch`
499
+ - Result enum: `engine/core/shared.js#DISPATCH_RESULT`
500
+ - Store implementation: `engine/persistence/dispatch-store.js`
496
501
 
497
502
  **Existing dashboard.** `dashboard/pages/engine.html` shows dispatch history and logs; home/work
498
503
  surfaces show active execution context.
@@ -515,14 +520,14 @@ execution workspace. A **Completion** report is its trusted exit contract.
515
520
  - `review[]` -- candidates rejected by the optional pre-dispatch acceptance gate
516
521
 
517
522
  **Where it lives.** `engine/state.db` table `dispatches`, reconstructed by
518
- `engine/dispatch-store.js#readDispatchSectioned`.
523
+ `engine/persistence/dispatch-store.js#readDispatchSectioned`.
519
524
 
520
525
  **Backing symbols.**
521
526
 
522
- - Dashboard/query view: `engine/queries.js#getDispatchQueue`
523
- - Queue mutation: `engine/dispatch.js#mutateDispatch`
524
- - Acceptance-review routing: `engine/dispatch.js#_routeToReviewQueue`
525
- - Concurrency default: `engine/shared.js#ENGINE_DEFAULTS.maxConcurrent` (default 5)
527
+ - Dashboard/query view: `engine/core/queries.js#getDispatchQueue`
528
+ - Queue mutation: `engine/orchestration/dispatch.js#mutateDispatch`
529
+ - Acceptance-review routing: `engine/orchestration/dispatch.js#_routeToReviewQueue`
530
+ - Concurrency default: `engine/core/shared.js#ENGINE_DEFAULTS.maxConcurrent` (default 5)
526
531
 
527
532
  The queue enforces Work Item and dispatch-key dedupe, fix-target and branch locks, dependency
528
533
  readiness, concurrency, retry policy, and budget/cooldown gates.
@@ -553,11 +558,11 @@ a mismatch invalidates every reported signal and fails the dispatch as
553
558
 
554
559
  **Backing symbols.**
555
560
 
556
- - Path builder: `engine/shared.js#dispatchCompletionReportPath`
557
- - Recognized core fields: `engine/shared.js#COMPLETION_FIELDS`
558
- - File parsing: `engine/lifecycle.js#parseCompletionReportFile`
559
- - Required-report gate: `engine/lifecycle.js#requiredCompletionReportFailure`
560
- - Dispatch terminalization: `engine/dispatch.js#completeDispatch`
561
+ - Path builder: `engine/core/shared.js#dispatchCompletionReportPath`
562
+ - Recognized core fields: `engine/core/shared.js#COMPLETION_FIELDS`
563
+ - File parsing: `engine/orchestration/lifecycle.js#parseCompletionReportFile`
564
+ - Required-report gate: `engine/orchestration/lifecycle.js#requiredCompletionReportFailure`
565
+ - Dispatch terminalization: `engine/orchestration/dispatch.js#completeDispatch`
561
566
 
562
567
  Core fields include `status`, `summary`, `files_changed`, `tests`, `pr`, `not_changed`,
563
568
  `failure_class`, `retryable`, `needs_rerun`, `verdict`, `artifacts`, `nonce`, and
@@ -582,16 +587,16 @@ review verdict, and Minions linkage. It is not the host PR itself.
582
587
 
583
588
  - PR records: `engine/state.db` table `pull_requests`
584
589
  - Cross-record links: `engine/state.db` table `pr_links`
585
- - Store facade: `engine/pull-requests-store.js`
590
+ - Store facade: `engine/persistence/pull-requests-store.js`
586
591
 
587
592
  **Backing symbols.**
588
593
 
589
- - Statuses and polling eligibility: `engine/shared.js#PR_STATUS` and
594
+ - Statuses and polling eligibility: `engine/core/shared.js#PR_STATUS` and
590
595
  `#PR_POLLABLE_STATUSES`
591
- - GitHub integration: `engine/github.js`
592
- - Azure DevOps integration: `engine/ado.js`
593
- - Agent-output/report sync: `engine/lifecycle.js#syncPrsFromOutput`
594
- - Required-attachment gate: `engine/lifecycle.js#isPrAttachmentRequired`
596
+ - GitHub integration: `engine/providers/github.js`
597
+ - Azure DevOps integration: `engine/ado/index.js`
598
+ - Agent-output/report sync: `engine/orchestration/lifecycle.js#syncPrsFromOutput`
599
+ - Required-attachment gate: `engine/orchestration/lifecycle.js#isPrAttachmentRequired`
595
600
 
596
601
  **Existing dashboard.** `dashboard/pages/prs.html` is the classic PR screen; Slim embeds that same
597
602
  screen for PR details.
@@ -622,18 +627,18 @@ constraint. The legacy config key `skills` is accepted only as a compatibility f
622
627
 
623
628
  **Where it lives.**
624
629
 
625
- - Default roster: `engine/shared.js#DEFAULT_AGENTS`
630
+ - Default roster: `engine/core/shared.js#DEFAULT_AGENTS`
626
631
  - Per-agent config: `config.json` under `agents.<id>`
627
632
  - Charter: `agents/<id>/charter.md`
628
633
  - Metrics and dispatch history: SQL-backed runtime state
629
634
 
630
635
  **Backing symbols.**
631
636
 
632
- - Roster/status projection: `engine/queries.js#getAgents`
633
- - Detail projection: `engine/queries.js#getAgentDetail`
634
- - Identity/charter prompt: `engine/playbook.js#buildSystemPrompt`
635
- - Soft re-review preference: `engine/lifecycle.js#pickReReviewAgentHints`
636
- - Runtime selection: `engine/shared.js#resolveAgentCli`
637
+ - Roster/status projection: `engine/core/queries.js#getAgents`
638
+ - Detail projection: `engine/core/queries.js#getAgentDetail`
639
+ - Identity/charter prompt: `engine/agents/playbook.js#buildSystemPrompt`
640
+ - Soft re-review preference: `engine/orchestration/lifecycle.js#pickReReviewAgentHints`
641
+ - Runtime selection: `engine/core/shared.js#resolveAgentCli`
637
642
  - Bundled adapters: `engine/runtimes/index.js` (`claude`, `copilot`, `codex`)
638
643
 
639
644
  **Existing dashboard.** Agent cards and detail views show status, runtime/model, charter, output,
@@ -672,11 +677,11 @@ work sources.
672
677
 
673
678
  **Backing symbols.**
674
679
 
675
- - Config projection: `engine/shared.js#getProjects`
676
- - Scope helpers: `engine/shared.js#stateScope`, `#readWorkItems`, and
680
+ - Config projection: `engine/core/shared.js#getProjects`
681
+ - Scope helpers: `engine/core/shared.js#stateScope`, `#readWorkItems`, and
677
682
  `#readPullRequests`
678
- - Checkout mode: `engine/shared.js#resolveCheckoutMode`
679
- - Canonical removal: `engine/projects.js#removeProject`
683
+ - Checkout mode: `engine/core/shared.js#resolveCheckoutMode`
684
+ - Canonical removal: `engine/planning/projects.js#removeProject`
680
685
 
681
686
  `checkoutMode: "worktree"` is the default isolated execution model.
682
687
  `checkoutMode: "live"` opts a project into guarded in-place execution.
@@ -715,10 +720,10 @@ Adapters may discover additional compatible roots without changing orchestration
715
720
 
716
721
  **Backing symbols.**
717
722
 
718
- - Frontmatter parser: `engine/shared.js#parseSkillFrontmatter`
719
- - Discovery: `engine/queries.js#collectSkillFiles`
720
- - Dashboard projections: `engine/queries.js#getSkills` and `#getSkillIndex`
721
- - Extraction: `engine/lifecycle.js#extractSkillsFromOutput`
723
+ - Frontmatter parser: `engine/core/shared.js#parseSkillFrontmatter`
724
+ - Discovery: `engine/core/queries.js#collectSkillFiles`
725
+ - Dashboard projections: `engine/core/queries.js#getSkills` and `#getSkillIndex`
726
+ - Extraction: `engine/orchestration/lifecycle.js#extractSkillsFromOutput`
722
727
  - Adapter contract: `getSkillRoots()` and `getSkillWriteTargets()` in
723
728
  `engine/runtimes/{claude,copilot,codex}.js`
724
729
 
@@ -748,7 +753,7 @@ configuration is runtime-native; repository/user harness files are not merged in
748
753
  **Backing symbols.**
749
754
 
750
755
  - Dashboard inventory: `dashboard.js#getMcpServers`
751
- - Watched config paths: `engine/queries.js` slow-state dependency collector
756
+ - Watched config paths: `engine/core/queries.js` slow-state dependency collector
752
757
  - Runtime preparation/discovery: `engine/runtimes/*`
753
758
  - Copilot built-in suppression: `engine.copilotDisableBuiltinMcps`
754
759
 
@@ -780,10 +785,10 @@ dispatch, work discovery, snapshots, and diagnostics.
780
785
  **Backing symbols.**
781
786
 
782
787
  - Tick: `engine.js#tick` / `#tickInner`
783
- - Defaults: `engine/shared.js#ENGINE_DEFAULTS`
788
+ - Defaults: `engine/core/shared.js#ENGINE_DEFAULTS`
784
789
  - Watch cadence: `ENGINE_DEFAULTS.watchPollEvery` (18 ticks by default)
785
- - Cold-process reattachment: `engine/cli.js` startup reattachment path
786
- - Stale-orphan grace: `engine/timeout.js` with `ENGINE_DEFAULTS.heartbeatTimeout`
790
+ - Cold-process reattachment: `engine/operations/cli.js` startup reattachment path
791
+ - Stale-orphan grace: `engine/orchestration/timeout.js` with `ENGINE_DEFAULTS.heartbeatTimeout`
787
792
 
788
793
  Tracked live agents are not killed merely for output silence. Cold agents can be reattached after
789
794
  an engine restart through persisted PID/session data and `agents/<id>/live-output.log`; pooled ACP
@@ -823,8 +828,8 @@ MCP/skill configuration remain owned and discovered by the selected CLI.
823
828
 
824
829
  **Backing symbols.**
825
830
 
826
- - Loader: `engine/queries.js#getConfig`
827
- - Defaults: `engine/shared.js#ENGINE_DEFAULTS`
831
+ - Loader: `engine/core/queries.js#getConfig`
832
+ - Defaults: `engine/core/shared.js#ENGINE_DEFAULTS`
828
833
  - Settings handlers: `dashboard.js#handleSettingsRead`, `#handleSettingsUpdate`,
829
834
  `#handleSettingsReset`, and `#handleSettingsRouting`
830
835
 
@@ -845,20 +850,20 @@ resolution are intentionally independent.
845
850
 
846
851
  ## 22. Feature Flag
847
852
 
848
- **What it is.** A temporary product/UX gate registered in `engine/features.js`. Resolution order
853
+ **What it is.** A temporary product/UX gate registered in `engine/core/features.js`. Resolution order
849
854
  is environment override (`MINIONS_FEATURE_<ID>`) -> `config.features[id]` -> registry default.
850
855
  Unknown flag IDs fail loudly.
851
856
 
852
857
  Feature flags are not a substitute for permanent `engine.*` configuration. The `slim-ux` flag gates
853
858
  the redesigned dashboard.
854
859
 
855
- **Where it lives.** `engine/features.js#FEATURES`.
860
+ **Where it lives.** `engine/core/features.js#FEATURES`.
856
861
 
857
862
  **Backing symbols.**
858
863
 
859
- - Resolver: `engine/features.js#isFeatureOn`
860
- - Listing: `engine/features.js#listFeatures`
861
- - Registry check: `engine/features.js#hasFeature`
864
+ - Resolver: `engine/core/features.js#isFeatureOn`
865
+ - Listing: `engine/core/features.js#listFeatures`
866
+ - Registry check: `engine/core/features.js#hasFeature`
862
867
 
863
868
  **Existing dashboard.** Settings exposes registered experimental flags and their current values.
864
869
 
@@ -884,11 +889,11 @@ uses the single global `ROUTING_PATH`.
884
889
 
885
890
  **Backing symbols.**
886
891
 
887
- - Path and reader: `engine/routing.js#ROUTING_PATH` and `#getRouting`
888
- - Parser: `engine/routing.js#parseRoutingTable`
889
- - Cache: `engine/routing.js#getRoutingTableCached`
890
- - Work-type lookup: `engine/routing.js#routeForWorkType`
891
- - Final resolution: `engine/routing.js#resolveAgent`
892
+ - Path and reader: `engine/orchestration/routing.js#ROUTING_PATH` and `#getRouting`
893
+ - Parser: `engine/orchestration/routing.js#parseRoutingTable`
894
+ - Cache: `engine/orchestration/routing.js#getRoutingTableCached`
895
+ - Work-type lookup: `engine/orchestration/routing.js#routeForWorkType`
896
+ - Final resolution: `engine/orchestration/routing.js#resolveAgent`
892
897
 
893
898
  **Existing dashboard.** Settings exposes the routing table editor.
894
899
 
@@ -910,8 +915,8 @@ of engagement. It is loaded into that Agent's system prompt for each dispatch.
910
915
 
911
916
  **Backing symbols.**
912
917
 
913
- - Prompt loading/injection: `engine/playbook.js#buildSystemPrompt`
914
- - Dashboard detail read: `engine/queries.js#getAgentDetail`
918
+ - Prompt loading/injection: `engine/agents/playbook.js#buildSystemPrompt`
919
+ - Dashboard detail read: `engine/core/queries.js#getAgentDetail`
915
920
  - Dashboard write handler: the `/api/agents/charter` route in `dashboard.js`
916
921
 
917
922
  The prompt and detail surfaces each read the charter at their respective system-prompt/detail
@@ -942,7 +947,7 @@ outcomes or the operator explicitly intervenes.
942
947
 
943
948
  **Backing symbols.**
944
949
 
945
- - Paths/status maps: `engine/meeting.js#MEETINGS_DIR`,
950
+ - Paths/status maps: `engine/orchestration/meeting.js#MEETINGS_DIR`,
946
951
  `#MEETING_NOTE_ARTIFACT_ROOT`, `#ROUND_STATUS_BY_NAME`, and
947
952
  `#ROUND_NUMBER_BY_NAME`
948
953
  - Round outcome helpers: `#getRoundFailures` and `#allParticipantsFinishedRound`