@moretea-labs/forge 1.6.0 → 1.7.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 (469) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +39 -0
  3. package/CLAUDE.md +4 -0
  4. package/README.md +2 -2
  5. package/README.zh-CN.md +1 -1
  6. package/SKILL.md +2 -2
  7. package/THIRD_PARTY_NOTICES.md +1 -1
  8. package/agents/openai.yaml +1 -1
  9. package/assets/hooks/hook-input.sh +11 -8
  10. package/assets/hooks/lib/session-state.sh +10 -7
  11. package/assets/hooks/lib/workflow-state.sh +13 -177
  12. package/assets/hooks/post-tool-observer.sh +8 -2
  13. package/assets/hooks/prompt-guard.sh +5 -81
  14. package/assets/hooks/session-start-context.sh +56 -1
  15. package/assets/partials/05-workflow.partial.md +1 -1
  16. package/assets/partials-agents/02-operating-mode.partial.md +2 -0
  17. package/assets/partials-agents/03-orchestration.partial.md +1 -1
  18. package/assets/plugin-registry.v1.json +3 -3
  19. package/assets/reference-configs/document-generation.md +1 -1
  20. package/assets/reference-configs/harness-overview.md +1 -1
  21. package/assets/reference-configs/sprint-contracts.md +3 -3
  22. package/assets/skill-version.json +2 -2
  23. package/assets/templates/contract.template.md +2 -7
  24. package/assets/templates/helpers/capture-plan.sh +2 -2
  25. package/assets/templates/helpers/check-architecture-sync.sh +17 -0
  26. package/assets/templates/helpers/check-task-workflow.sh +4 -4
  27. package/assets/templates/helpers/contract-worktree.sh +1 -21
  28. package/assets/templates/helpers/ensure-task-workflow.sh +11 -36
  29. package/assets/templates/helpers/inspect-project-state.ts +8 -6
  30. package/assets/templates/helpers/migrate-project-template.sh +22 -45
  31. package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
  32. package/assets/templates/helpers/new-plan.sh +1 -1
  33. package/assets/templates/helpers/plan-to-todo.sh +12 -37
  34. package/assets/templates/helpers/ship-worktrees.sh +2 -29
  35. package/assets/templates/helpers/verify-contract.sh +1 -111
  36. package/assets/templates/helpers/verify-sprint.sh +3 -180
  37. package/assets/templates/helpers/workflow-contract.ts +5 -1
  38. package/assets/templates/plan.template.md +1 -1
  39. package/assets/templates/review.template.md +9 -34
  40. package/assets/workflow-contract.v1.json +10 -19
  41. package/docs/README.md +10 -10
  42. package/docs/architecture/CURRENT.md +178 -0
  43. package/docs/architecture/EVOLUTION.md +42 -0
  44. package/docs/architecture/current/README.md +4 -156
  45. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
  46. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
  47. package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
  48. package/docs/architecture/history/README.md +7 -0
  49. package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
  50. package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
  51. package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
  52. package/docs/architecture/history.md +3 -34
  53. package/docs/architecture/index.md +15 -98
  54. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  55. package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
  56. package/docs/architecture/versions/1.6.md +38 -0
  57. package/docs/architecture/versions/1.7.md +41 -0
  58. package/docs/forge-chatgpt-browser-engine.md +2 -2
  59. package/docs/forge-chatgpt-mcp-setup.md +4 -28
  60. package/docs/forge-chatgpt-supervised-automation.md +3 -3
  61. package/docs/forge-github-issue-launcher.md +1 -1
  62. package/docs/forge-plugin-management.md +1 -1
  63. package/docs/forge-runtime-self-healing-loop.md +1 -1
  64. package/docs/operations/controller-browser-plugin.md +26 -6
  65. package/docs/operations/controller-performance-and-502.md +143 -0
  66. package/docs/operations/controller-reliability-runbook.md +1 -1
  67. package/docs/operations/features.md +2 -2
  68. package/docs/operations/github-repository.md +1 -1
  69. package/docs/operations/homebrew.md +2 -2
  70. package/docs/operations/mcp-tool-exposure.md +5 -3
  71. package/docs/wiki/Architecture.md +6 -6
  72. package/docs/wiki/Implementation.md +2 -2
  73. package/docs/wiki/Integrations.md +2 -2
  74. package/docs/wiki/Work-Lifecycle.md +1 -1
  75. package/package.json +33 -11
  76. package/scripts/activate-source-baseline.ts +17 -13
  77. package/scripts/architecture-event.ts +2 -820
  78. package/scripts/architecture-queue.sh +2 -645
  79. package/scripts/archive-architecture-request.sh +2 -242
  80. package/scripts/archive-workflow.sh +1 -291
  81. package/scripts/benchmark-background-check-overlap.ts +228 -0
  82. package/scripts/benchmark-mcp-host.sh +117 -0
  83. package/scripts/benchmark-mcp-transport.ts +170 -0
  84. package/scripts/benchmark-quality-harness.ts +146 -0
  85. package/scripts/benchmark-route-session-concurrency.ts +207 -6
  86. package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
  87. package/scripts/benchmark-typescript-navigation.ts +186 -0
  88. package/scripts/benchmark-work-efficiency.ts +334 -0
  89. package/scripts/capability-config.ts +2 -392
  90. package/scripts/capability-resolver.ts +2 -503
  91. package/scripts/capture-plan.sh +1 -332
  92. package/scripts/check-agent-tooling.sh +2 -1558
  93. package/scripts/check-architecture-sync.sh +2 -371
  94. package/scripts/check-brain-manifest.sh +2 -253
  95. package/scripts/check-context-files.sh +2 -47
  96. package/scripts/check-deploy-sql-order.sh +2 -115
  97. package/scripts/check-mcp-compatibility.ts +14 -0
  98. package/scripts/check-runtime-architecture.mjs +349 -79
  99. package/scripts/check-skill-version.ts +3 -191
  100. package/scripts/check-source-duplication.mjs +61 -0
  101. package/scripts/check-stable-baseline.ts +92 -0
  102. package/scripts/check-task-sync.sh +2 -63
  103. package/scripts/check-task-workflow.sh +2 -1000
  104. package/scripts/codex-handoff-resume.sh +2 -267
  105. package/scripts/context-contract-sync.sh +2 -514
  106. package/scripts/contract-run.ts +2 -463
  107. package/scripts/contract-worktree.sh +1 -722
  108. package/scripts/ensure-task-workflow.sh +1 -1225
  109. package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
  110. package/scripts/inspect-project-state.ts +4 -279
  111. package/scripts/install-standalone-recovery.ts +24 -0
  112. package/scripts/lib/project-init-lib.sh +22 -46
  113. package/scripts/lib/run-forge-helper.sh +19 -0
  114. package/scripts/lib/run-forge-helper.ts +26 -0
  115. package/scripts/migrate-project-template.sh +1 -1189
  116. package/scripts/migrate-workflow-docs.ts +4 -412
  117. package/scripts/new-plan.sh +1 -180
  118. package/scripts/new-spec.sh +1 -47
  119. package/scripts/new-sprint.sh +1 -46
  120. package/scripts/plan-to-todo.sh +1 -796
  121. package/scripts/prepare-codex-handoff.sh +2 -201
  122. package/scripts/prepare-handoff.sh +1 -78
  123. package/scripts/refresh-current-status.sh +2 -467
  124. package/scripts/run-governed-gate.ts +5 -1
  125. package/scripts/select-agent-context-blocks.sh +2 -64
  126. package/scripts/ship-worktrees.sh +1 -558
  127. package/scripts/smoke-ios-physical-device.ts +4 -2
  128. package/scripts/smoke-runtime-recovery.ts +1 -35
  129. package/scripts/smoke-schedule-engine.ts +1 -20
  130. package/scripts/sprint-backlog.sh +1 -834
  131. package/scripts/stage-runtime-release.ts +2 -1
  132. package/scripts/summarize-failures.sh +2 -123
  133. package/scripts/switch-plan.sh +1 -150
  134. package/scripts/sync-brain-docs.sh +2 -379
  135. package/scripts/sync-generated-authority.mjs +175 -0
  136. package/scripts/verify-contract.sh +2 -703
  137. package/scripts/verify-forge-runtime.sh +0 -1
  138. package/scripts/verify-sprint.sh +1 -677
  139. package/scripts/workflow-contract.ts +4 -205
  140. package/scripts/workstream-sync.sh +2 -261
  141. package/src/cli/agent-jobs/executor-health.ts +1 -1
  142. package/src/cli/commands/init-hook.ts +3 -3
  143. package/src/cli/commands/mcp.ts +9 -5
  144. package/src/cli/commands/plugin.ts +12 -3
  145. package/src/cli/commands/recovery.ts +25 -3
  146. package/src/cli/commands/runtime.ts +55 -3
  147. package/src/cli/commands/security.ts +12 -1
  148. package/src/cli/commands/setup-profile.ts +31 -21
  149. package/src/cli/controller/check-runner.ts +113 -5
  150. package/src/cli/controller/composite-result.ts +1 -1
  151. package/src/cli/controller/context/focus.ts +51 -0
  152. package/src/cli/controller/context/instruction-context.ts +114 -0
  153. package/src/cli/controller/context/known-paths.ts +76 -0
  154. package/src/cli/controller/context/query-planning.ts +110 -0
  155. package/src/cli/controller/context/rule-resolution.ts +532 -0
  156. package/src/cli/controller/context/source-materializer.ts +278 -0
  157. package/src/cli/controller/context/structural.ts +16 -0
  158. package/src/cli/controller/context/types.ts +286 -0
  159. package/src/cli/controller/context-pack.ts +828 -487
  160. package/src/cli/controller/launch-agents.ts +77 -2
  161. package/src/cli/controller/operational-plan.ts +2 -2
  162. package/src/cli/controller/work-mode.ts +6 -4
  163. package/src/cli/editing/edit-session.ts +60 -7
  164. package/src/cli/github/contracts.ts +16 -0
  165. package/src/cli/github/github.ts +135 -16
  166. package/src/cli/github/session.ts +2 -1
  167. package/src/cli/installer/managed-entries.ts +15 -1
  168. package/src/cli/local-bridge/console-automations.ts +54 -78
  169. package/src/cli/local-bridge/console-view-models.ts +1 -35
  170. package/src/cli/local-bridge/facade-api.ts +37 -264
  171. package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
  172. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +23 -13
  173. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
  174. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +6 -4
  175. package/src/cli/local-bridge/frontend/src/lib/api.ts +1 -6
  176. package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
  177. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +2 -2
  178. package/src/cli/local-bridge/frontend/src/styles.css +1 -1
  179. package/src/cli/local-bridge/frontend/src/types.ts +5 -8
  180. package/src/cli/local-bridge/job-store.ts +1 -490
  181. package/src/cli/local-bridge/server.ts +2 -515
  182. package/src/cli/local-bridge/ui-dist/app.css +1 -1
  183. package/src/cli/local-bridge/ui-dist/app.js +3703 -3757
  184. package/src/cli/mcp/auth.ts +5 -5
  185. package/src/cli/mcp/instructions.ts +3 -2
  186. package/src/cli/mcp/legacy-tool-service.ts +10 -222
  187. package/src/cli/mcp/multi-repository.ts +16 -5
  188. package/src/cli/mcp/oauth.ts +175 -26
  189. package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
  190. package/src/cli/mcp/repository-tools.ts +282 -146
  191. package/src/cli/mcp/server.ts +586 -116
  192. package/src/cli/mcp/tool-capability-cache.ts +1 -1
  193. package/src/cli/mcp/tool-contract.ts +14 -0
  194. package/src/cli/mcp/toolset-selection.ts +1 -1
  195. package/src/cli/mcp/toolset.ts +44 -7
  196. package/src/cli/mcp/transports/http.ts +124 -14
  197. package/src/cli/mcp/transports/session-registry.ts +43 -5
  198. package/src/cli/mcp/types.ts +3 -3
  199. package/src/cli/repositories/command-classifier.ts +103 -21
  200. package/src/cli/repositories/command-executor.ts +78 -526
  201. package/src/cli/repositories/command-process.ts +108 -0
  202. package/src/cli/repositories/command-scope.ts +99 -41
  203. package/src/cli/repositories/controller-home.ts +7 -8
  204. package/src/cli/repositories/git-command-executor.ts +2 -0
  205. package/src/cli/repositories/locks.ts +53 -16
  206. package/src/cli/repositories/repository-snapshot.ts +124 -0
  207. package/src/cli/repositories/selected-path-actions.ts +17 -9
  208. package/src/cli/repositories/structured-git.ts +118 -6
  209. package/src/cli/repository/inspector.ts +563 -65
  210. package/src/cli/repository/session-cache.ts +58 -17
  211. package/src/cli/v81-entry.ts +1 -4
  212. package/src/effects/fs-transaction.ts +85 -17
  213. package/src/runtime/context/codegraph-read-provider.ts +233 -2
  214. package/src/runtime/context/codegraph-sidecar.cjs +74 -40
  215. package/src/runtime/context/generic-lsp-provider.ts +355 -0
  216. package/src/runtime/context/lsp-client.ts +283 -0
  217. package/src/runtime/context/semantic-navigation-contract.ts +61 -0
  218. package/src/runtime/context/semantic-navigation.ts +223 -0
  219. package/src/runtime/context/swift-navigation.ts +565 -0
  220. package/src/runtime/context/typescript-navigation.ts +226 -0
  221. package/src/runtime/control-plane/dispatch-priority.ts +28 -0
  222. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +48 -16
  223. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
  224. package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
  225. package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
  226. package/src/runtime/control-plane/execution/session-store.ts +18 -0
  227. package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
  228. package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
  229. package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
  230. package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
  231. package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
  232. package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
  233. package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
  234. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
  235. package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
  236. package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
  237. package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
  238. package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
  239. package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
  240. package/src/runtime/control-plane/execution/work-task-receipt.ts +22 -18
  241. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +156 -11
  242. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +22 -14
  243. package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
  244. package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
  245. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +90 -9
  246. package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
  247. package/src/runtime/control-plane/facade/controller-round-relay.ts +1118 -0
  248. package/src/runtime/control-plane/facade/controller-session-store.ts +302 -12
  249. package/src/runtime/control-plane/facade/goal-workloop-access.ts +17 -1
  250. package/src/runtime/control-plane/facade/goal-workloop.ts +928 -190
  251. package/src/runtime/control-plane/facade/index.ts +3 -0
  252. package/src/runtime/control-plane/facade/plan-contract-store.ts +275 -42
  253. package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
  254. package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
  255. package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
  256. package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
  257. package/src/runtime/control-plane/facade/types.ts +90 -10
  258. package/src/runtime/control-plane/facade/work-contract-store.ts +157 -261
  259. package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
  260. package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
  261. package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
  262. package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
  263. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
  264. package/src/runtime/control-plane/global-scheduler/maintenance.ts +152 -0
  265. package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
  266. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
  267. package/src/runtime/control-plane/global-scheduler/scheduler.ts +278 -543
  268. package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
  269. package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
  270. package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
  271. package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
  272. package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
  273. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
  274. package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
  275. package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
  276. package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
  277. package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
  278. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +63 -0
  279. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +365 -117
  280. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +89 -0
  281. package/src/runtime/control-plane/launcher/thin-launcher.ts +244 -11
  282. package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
  283. package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
  284. package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
  285. package/src/runtime/control-plane/release-retention.ts +62 -2
  286. package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
  287. package/src/runtime/control-plane/routing/route-policy.ts +24 -21
  288. package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
  289. package/src/runtime/control-plane/runtime-status-client.ts +0 -2
  290. package/src/runtime/diagnostics/mcp-timing.ts +13 -0
  291. package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
  292. package/src/runtime/diagnostics/performance.ts +24 -1
  293. package/src/runtime/evidence/event-ledger.ts +1 -1
  294. package/src/runtime/evidence/process-check-execution.ts +18 -0
  295. package/src/runtime/execution/jobs/child-reference.ts +6 -2
  296. package/src/runtime/execution/jobs/store.ts +58 -4
  297. package/src/runtime/execution/jobs/types.ts +1 -1
  298. package/src/runtime/execution/managed-workspace.ts +203 -1
  299. package/src/runtime/execution/process-runtime/check-facade.ts +51 -4
  300. package/src/runtime/execution/process-runtime/check-result.ts +88 -0
  301. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
  302. package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
  303. package/src/runtime/execution/process-runtime/command-facade.ts +367 -40
  304. package/src/runtime/execution/process-runtime/gc.ts +38 -6
  305. package/src/runtime/execution/process-runtime/lightweight-managed.ts +1201 -0
  306. package/src/runtime/execution/process-runtime/persisted-check.ts +51 -5
  307. package/src/runtime/execution/process-runtime/resource-claims.ts +10 -6
  308. package/src/runtime/execution/process-runtime/runtime.ts +53 -3
  309. package/src/runtime/execution/process-runtime/store.ts +1 -0
  310. package/src/runtime/execution/process-runtime/types.ts +4 -12
  311. package/src/runtime/execution/thin-harness/async-process.ts +12 -2
  312. package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
  313. package/src/runtime/execution/work-activity.ts +21 -0
  314. package/src/runtime/execution/workers/executor.ts +18 -61
  315. package/src/runtime/gateway/mcp/execution-tools.ts +35 -1852
  316. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
  317. package/src/runtime/gateway/mcp/process-tools.ts +83 -37
  318. package/src/runtime/gateway/mcp/router.ts +186 -84
  319. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +565 -0
  320. package/src/runtime/gateway/mcp/runtime-tools.ts +2378 -1947
  321. package/src/runtime/plugins/app-store-connect-adapter.ts +216 -47
  322. package/src/runtime/plugins/browser-adapter.ts +2662 -829
  323. package/src/runtime/plugins/browser-automation-service.ts +10 -0
  324. package/src/runtime/plugins/browser-handoff-host.ts +2 -25
  325. package/src/runtime/plugins/browser-handoff.ts +110 -5
  326. package/src/runtime/plugins/browser-macos-bridge.ts +701 -63
  327. package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
  328. package/src/runtime/plugins/browser-native-session-service.ts +222 -0
  329. package/src/runtime/plugins/browser-node-bridge.ts +6 -34
  330. package/src/runtime/plugins/browser-provider-registry.ts +109 -0
  331. package/src/runtime/plugins/browser-runtime-contract.ts +154 -0
  332. package/src/runtime/plugins/browser-runtime.ts +193 -0
  333. package/src/runtime/plugins/browser-session-authority.ts +332 -0
  334. package/src/runtime/plugins/browser-session-store.ts +121 -0
  335. package/src/runtime/plugins/browser-session-types.ts +98 -0
  336. package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
  337. package/src/runtime/plugins/desktop-operator-registration.ts +10 -4
  338. package/src/runtime/plugins/external-adapter.ts +358 -3
  339. package/src/runtime/plugins/external-unix-socket.ts +7 -1
  340. package/src/runtime/plugins/first-party-registry.ts +2 -0
  341. package/src/runtime/plugins/github-adapter.ts +125 -0
  342. package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
  343. package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
  344. package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
  345. package/src/runtime/plugins/ios-adapter.ts +106 -16
  346. package/src/runtime/plugins/ios-agent-device.ts +234 -64
  347. package/src/runtime/plugins/ios-physical-device.ts +1143 -392
  348. package/src/runtime/plugins/lightweight-action.ts +153 -0
  349. package/src/runtime/plugins/local-system-adapter.ts +123 -6
  350. package/src/runtime/plugins/macos-capability-broker.ts +47 -9
  351. package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
  352. package/src/runtime/plugins/plugin-management-adapter.ts +49 -8
  353. package/src/runtime/plugins/resend-adapter.ts +1 -1
  354. package/src/runtime/plugins/store.ts +330 -33
  355. package/src/runtime/plugins/types.ts +38 -3
  356. package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
  357. package/src/runtime/projections/git-status-sampler.ts +16 -16
  358. package/src/runtime/projections/materialized-view.ts +28 -10
  359. package/src/runtime/recovery/maintenance-executor.ts +426 -25
  360. package/src/runtime/root/mcp-transport.ts +180 -10
  361. package/src/runtime/root/package-connector-service.ts +230 -10
  362. package/src/runtime/root/package-runtime-release.ts +143 -17
  363. package/src/runtime/root/package-runtime-service.ts +461 -22
  364. package/src/runtime/root/release-manifest.ts +144 -18
  365. package/src/runtime/root/release-materialize.ts +125 -32
  366. package/src/runtime/root/release-store.ts +48 -11
  367. package/src/runtime/root/runtime.ts +23 -5
  368. package/src/runtime/root/service.ts +100 -29
  369. package/src/runtime/root/types.ts +12 -0
  370. package/src/runtime/safe-tooling/ios-development.ts +321 -63
  371. package/src/runtime/shared/trusted-executable.ts +62 -0
  372. package/src/runtime/shared/trusted-node-executable.ts +48 -0
  373. package/src/runtime/standalone-recovery/core.ts +1079 -240
  374. package/src/runtime/standalone-recovery/entry.ts +100 -24
  375. package/src/runtime/standalone-recovery/installer.ts +20 -4
  376. package/src/runtime/standalone-recovery/service-labels.ts +2 -0
  377. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
  378. package/src/runtime/workflow/schedules/browser-probe.ts +81 -3
  379. package/src/runtime/workflow/schedules/engine.ts +364 -202
  380. package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
  381. package/src/runtime/workflow/schedules/settlement.ts +64 -17
  382. package/src/runtime/workflow/schedules/store.ts +209 -19
  383. package/src/runtime/workflow/schedules/types.ts +2 -4
  384. package/src/runtime/workflow/schedules/work-continuation.ts +26 -13
  385. package/src/testing/test-governance.ts +8 -40
  386. package/assets/reference-configs/heartbeat-triage.md +0 -57
  387. package/assets/templates/helpers/harness-trace-grade.sh +0 -150
  388. package/assets/templates/helpers/heartbeat-triage.sh +0 -361
  389. package/assets/templates/helpers/maintenance-triage.sh +0 -167
  390. package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
  391. package/docs/architecture/current/architecture-invariants.md +0 -331
  392. package/docs/architecture/current/automation-and-schedule-engine.md +0 -459
  393. package/docs/architecture/current/codegraph-context-provider.md +0 -238
  394. package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
  395. package/docs/architecture/current/controller-repository-decoupling.md +0 -148
  396. package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -373
  397. package/docs/architecture/current/entity-model.md +0 -612
  398. package/docs/architecture/current/external-plugin-governance.md +0 -396
  399. package/docs/architecture/current/failure-recovery.md +0 -447
  400. package/docs/architecture/current/governance.md +0 -213
  401. package/docs/architecture/current/human-interaction-plane.md +0 -87
  402. package/docs/architecture/current/implementation-status.md +0 -128
  403. package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
  404. package/docs/architecture/current/legacy-governance.md +0 -58
  405. package/docs/architecture/current/local-workspace-target-grants.md +0 -70
  406. package/docs/architecture/current/migration-roadmap.md +0 -105
  407. package/docs/architecture/current/multi-repository-execution.md +0 -371
  408. package/docs/architecture/current/operations-runbook.md +0 -45
  409. package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
  410. package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
  411. package/docs/architecture/current/repository-access-modes.md +0 -102
  412. package/docs/architecture/current/route-policy.md +0 -15
  413. package/docs/architecture/current/route-session-concurrency.md +0 -85
  414. package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
  415. package/docs/architecture/current/runtime-directory-map.md +0 -49
  416. package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
  417. package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
  418. package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
  419. package/docs/architecture/current/system-overview.md +0 -169
  420. package/docs/architecture/current/target-requirements-traceability.md +0 -202
  421. package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
  422. package/docs/architecture/current/thin-harness-v1.md +0 -321
  423. package/docs/architecture/current/verification-and-release-gates.md +0 -391
  424. package/docs/forge-autonomous-goal-loop.md +0 -9
  425. package/docs/forge-provider-configuration.md +0 -7
  426. package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -93
  427. package/docs/operations/gmail-assistant-routines.md +0 -186
  428. package/docs/operations/personal-assistant-operator-guide.md +0 -61
  429. package/docs/operations/provider-configuration.md +0 -31
  430. package/scripts/harness-trace-grade.sh +0 -150
  431. package/scripts/heartbeat-triage.sh +0 -361
  432. package/scripts/maintenance-triage.sh +0 -167
  433. package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
  434. package/src/cli/repositories/goal-registry.ts +0 -239
  435. package/src/runtime/assistant/action-proposals.ts +0 -279
  436. package/src/runtime/assistant/intent.ts +0 -395
  437. package/src/runtime/assistant/model-provider.ts +0 -460
  438. package/src/runtime/assistant/openapi.ts +0 -223
  439. package/src/runtime/assistant/policy.ts +0 -89
  440. package/src/runtime/assistant/readiness.ts +0 -258
  441. package/src/runtime/assistant/routine-runtime.ts +0 -477
  442. package/src/runtime/assistant/schedule-binding.ts +0 -171
  443. package/src/runtime/assistant/standing-grants.ts +0 -375
  444. package/src/runtime/assistant/store.ts +0 -243
  445. package/src/runtime/assistant/types.ts +0 -135
  446. package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
  447. package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
  448. package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
  449. package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
  450. package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
  451. package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
  452. package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
  453. package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
  454. package/src/runtime/control-plane/goal-loop/index.ts +0 -13
  455. package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
  456. package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
  457. package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
  458. package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
  459. package/src/runtime/control-plane/goal-loop/types.ts +0 -378
  460. package/src/runtime/control-plane/startup-recovery.ts +0 -198
  461. package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
  462. package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
  463. package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
  464. package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
  465. package/src/runtime/workflow/findings/store.ts +0 -204
  466. package/src/runtime/workflow/findings/types.ts +0 -58
  467. package/src/runtime/workflow/portfolio/engine.ts +0 -20
  468. package/src/runtime/workflow/portfolio/store.ts +0 -185
  469. package/src/runtime/workflow/portfolio/types.ts +0 -29
@@ -0,0 +1,205 @@
1
+ import { withControllerLock, withControllerLockAsync } from '../../../cli/repositories/locks';
2
+ import { sanitizeFileComponent } from '../../shared/json-files';
3
+ import { isTerminalPlanContractStatus, type PlanContract } from './types';
4
+
5
+ export const PLAN_ADMISSION_RELATIONS = ['extend', 'parallel'] as const;
6
+ export type PlanAdmissionRelation = (typeof PLAN_ADMISSION_RELATIONS)[number];
7
+
8
+ export type PlanAdmissionReason =
9
+ | 'exact_scope_authority'
10
+ | 'requirement_relation_required'
11
+ | 'extension_target_required'
12
+ | 'extend_existing'
13
+ | 'create_new';
14
+
15
+ export interface PlanAdmissionInput {
16
+ requirementId?: string;
17
+ scopeKey: string;
18
+ planRelation?: PlanAdmissionRelation;
19
+ relatedPlanId?: string;
20
+ }
21
+
22
+ export interface PlanAdmissionResolution {
23
+ admissionDecision: 'reuse_existing' | 'resolution_required' | 'extend_existing' | 'create_new';
24
+ resolutionRequired: boolean;
25
+ reason: PlanAdmissionReason;
26
+ normalizedScopeKey: string;
27
+ plan?: PlanContract;
28
+ candidates: PlanContract[];
29
+ allowedPlanRelations?: readonly PlanAdmissionRelation[];
30
+ }
31
+
32
+ export function normalizePlanScopeKey(value: string): string {
33
+ const raw = String(value ?? '').trim();
34
+ if (!raw) return '';
35
+ const normalized = sanitizeFileComponent(raw).toLowerCase().slice(0, 160);
36
+ return normalized === 'unknown' ? '' : normalized;
37
+ }
38
+
39
+ export function resolvePlanAdmission(
40
+ plans: readonly PlanContract[],
41
+ input: PlanAdmissionInput,
42
+ ): PlanAdmissionResolution {
43
+ const activePlans = plans.filter((plan) => !isTerminalPlanContractStatus(plan.status));
44
+ const normalizedScopeKey = normalizePlanScopeKey(input.scopeKey);
45
+ const requirementId = input.requirementId?.trim() || undefined;
46
+ const requirementPlans = requirementId
47
+ ? activePlans.filter((candidate) => candidate.requirementId === requirementId)
48
+ : [];
49
+ const relatedPlanId = input.relatedPlanId?.trim() || undefined;
50
+ const explicitlyRelatedPlan = relatedPlanId
51
+ ? activePlans.find((candidate) => candidate.planId === relatedPlanId)
52
+ : undefined;
53
+ const relatedPlan = explicitlyRelatedPlan && (!requirementId || explicitlyRelatedPlan.requirementId === requirementId)
54
+ ? explicitlyRelatedPlan
55
+ : !relatedPlanId && requirementPlans.length === 1 ? requirementPlans[0] : undefined;
56
+ const exactScopeAuthority = normalizedScopeKey
57
+ ? activePlans.find((candidate) => candidate.scopeKey === normalizedScopeKey)
58
+ : undefined;
59
+
60
+ // An explicit extension is a serial replan, not a second active Plan. Resolve
61
+ // it before exact-scope reuse so a successor may retain the predecessor scope.
62
+ // If another Plan owns the requested successor scope, preserve that authority.
63
+ if (input.planRelation === 'extend') {
64
+ if (!relatedPlan) {
65
+ return {
66
+ admissionDecision: 'resolution_required',
67
+ resolutionRequired: true,
68
+ reason: 'extension_target_required',
69
+ normalizedScopeKey,
70
+ candidates: (requirementPlans.length > 0 ? requirementPlans : activePlans).slice(0, 8),
71
+ allowedPlanRelations: PLAN_ADMISSION_RELATIONS,
72
+ };
73
+ }
74
+ if (exactScopeAuthority && exactScopeAuthority.planId !== relatedPlan.planId) {
75
+ return {
76
+ admissionDecision: 'reuse_existing',
77
+ resolutionRequired: false,
78
+ reason: 'exact_scope_authority',
79
+ normalizedScopeKey,
80
+ plan: exactScopeAuthority,
81
+ candidates: [exactScopeAuthority],
82
+ };
83
+ }
84
+ return {
85
+ admissionDecision: 'extend_existing',
86
+ resolutionRequired: false,
87
+ reason: 'extend_existing',
88
+ normalizedScopeKey,
89
+ plan: relatedPlan,
90
+ candidates: requirementPlans.length > 0 ? requirementPlans.slice(0, 8) : [relatedPlan],
91
+ };
92
+ }
93
+
94
+ if (exactScopeAuthority) {
95
+ return {
96
+ admissionDecision: 'reuse_existing',
97
+ resolutionRequired: false,
98
+ reason: 'exact_scope_authority',
99
+ normalizedScopeKey,
100
+ plan: exactScopeAuthority,
101
+ candidates: [exactScopeAuthority],
102
+ };
103
+ }
104
+
105
+ if (requirementPlans.length > 0 && !input.planRelation) {
106
+ return {
107
+ admissionDecision: 'resolution_required',
108
+ resolutionRequired: true,
109
+ reason: 'requirement_relation_required',
110
+ normalizedScopeKey,
111
+ candidates: requirementPlans.slice(0, 8),
112
+ allowedPlanRelations: PLAN_ADMISSION_RELATIONS,
113
+ };
114
+ }
115
+
116
+ return {
117
+ admissionDecision: 'create_new',
118
+ resolutionRequired: false,
119
+ reason: 'create_new',
120
+ normalizedScopeKey,
121
+ candidates: requirementPlans.slice(0, 8),
122
+ };
123
+ }
124
+
125
+ /**
126
+ * Short per-repository semantic admission critical section. The fixed task key
127
+ * keeps admission independent from repository/worktree execution locks while
128
+ * still coordinating competing controller processes for the same repository.
129
+ */
130
+ const planAdmissionLockKey = (repoId: string) => ({
131
+ scope: 'task' as const,
132
+ repoId,
133
+ taskId: 'semantic-plan-admission',
134
+ });
135
+
136
+ export function withPlanAdmissionLock<T>(
137
+ options: { controllerHome?: string; repoId?: string },
138
+ operation: () => T,
139
+ ): T {
140
+ if (!options.controllerHome?.trim() || !options.repoId?.trim()) return operation();
141
+ return withControllerLock(
142
+ options.controllerHome,
143
+ planAdmissionLockKey(options.repoId),
144
+ 'semantic-plan-admission',
145
+ operation,
146
+ );
147
+ }
148
+
149
+ /** Gateway-facing admission waits briefly for a competing controller to finish
150
+ * its tiny create/approve decision, then re-reads canonical state under lock. */
151
+ export async function withPlanAdmissionLockAsync<T>(
152
+ options: { controllerHome?: string; repoId?: string },
153
+ operation: () => T | Promise<T>,
154
+ ): Promise<T> {
155
+ if (!options.controllerHome?.trim() || !options.repoId?.trim()) return await operation();
156
+ return await withControllerLockAsync(
157
+ options.controllerHome,
158
+ planAdmissionLockKey(options.repoId),
159
+ 'semantic-plan-admission',
160
+ async () => await operation(),
161
+ undefined,
162
+ 500,
163
+ );
164
+ }
165
+
166
+ const primaryWorkAdmissionLockKey = (repoId: string) => ({
167
+ scope: 'task' as const,
168
+ repoId,
169
+ taskId: 'semantic-primary-work-admission',
170
+ });
171
+
172
+ /**
173
+ * Primary Work admission protects only canonical ownership resolution and
174
+ * persistence. It must never span workspace materialization, dependency prep,
175
+ * checks, worker launch, or the Work execution lifetime.
176
+ */
177
+ export function withPrimaryWorkAdmissionLock<T>(
178
+ options: { controllerHome?: string; repoId?: string },
179
+ operation: () => T,
180
+ ): T {
181
+ if (!options.controllerHome?.trim() || !options.repoId?.trim()) return operation();
182
+ return withControllerLock(
183
+ options.controllerHome,
184
+ primaryWorkAdmissionLockKey(options.repoId),
185
+ 'semantic-primary-work-admission',
186
+ operation,
187
+ );
188
+ }
189
+
190
+ /** Gateway callers wait briefly for a competing admission, then re-read the
191
+ * canonical Plan/Work state while holding the same short critical section. */
192
+ export async function withPrimaryWorkAdmissionLockAsync<T>(
193
+ options: { controllerHome?: string; repoId?: string },
194
+ operation: () => T | Promise<T>,
195
+ ): Promise<T> {
196
+ if (!options.controllerHome?.trim() || !options.repoId?.trim()) return await operation();
197
+ return await withControllerLockAsync(
198
+ options.controllerHome,
199
+ primaryWorkAdmissionLockKey(options.repoId),
200
+ 'semantic-primary-work-admission',
201
+ async () => await operation(),
202
+ undefined,
203
+ 500,
204
+ );
205
+ }
@@ -11,10 +11,13 @@ function expectedActionRisk(action: SuggestedNextAction): SuggestedNextAction['r
11
11
  case 'delegate':
12
12
  case 'controller_claim':
13
13
  case 'controller_release':
14
+ case 'controller_disposition':
14
15
  case 'launcher_start':
16
+ case 'requirement_create':
15
17
  case 'schedule_create':
16
18
  case 'schedule_pause':
17
19
  case 'schedule_resume':
20
+ case 'schedule_delete':
18
21
  case 'schedule_trigger':
19
22
  return 'workspace_write';
20
23
  case 'controller_get_owner':
@@ -26,6 +29,7 @@ function expectedActionRisk(action: SuggestedNextAction): SuggestedNextAction['r
26
29
  case 'plan_list':
27
30
  return 'readonly';
28
31
  case 'plan_approve':
32
+ case 'plan_accept_step':
29
33
  case 'plan_supersede':
30
34
  return 'workspace_write';
31
35
  case 'finalize':
@@ -40,7 +44,7 @@ const ALLOWED_FACADE_OPERATIONS: Record<FacadeTool, readonly string[]> = {
40
44
  rh_status: ['list', 'get', 'repair'],
41
45
  rh_inbox: ['list', 'get', 'ack', 'accept', 'resolve', 'dismiss', 'create'],
42
46
  rh_context: ['list', 'get', 'search'],
43
- rh_work: ['start', 'continue', 'verify', 'repair', 'finalize', 'stop', 'delegate', 'controller_claim', 'controller_release', 'controller_get_owner', 'launcher_start', 'plan_create', 'plan_get', 'plan_list', 'plan_approve', 'plan_supersede', 'schedule_create', 'schedule_list', 'schedule_get', 'schedule_pause', 'schedule_resume', 'schedule_trigger'],
47
+ rh_work: ['start', 'continue', 'verify', 'repair', 'finalize', 'stop', 'delegate', 'controller_claim', 'controller_release', 'controller_disposition', 'controller_get_owner', 'launcher_start', 'requirement_create', 'plan_create', 'plan_get', 'plan_list', 'plan_approve', 'plan_accept_step', 'plan_supersede', 'schedule_create', 'schedule_list', 'schedule_get', 'schedule_pause', 'schedule_resume', 'schedule_delete', 'schedule_trigger'],
44
48
  };
45
49
 
46
50
  export interface SuggestedActionValidationOptions {
@@ -1,13 +1,14 @@
1
1
  import type { ProcessCheckReceiptEvidence } from '../../evidence/process-check-receipt';
2
2
  import type { CompletionReceipt as RepositoryCompletionReceipt } from '../../../cli/controller/types';
3
3
  import type { AccessMode } from '../governance/access-policy';
4
- import { decideRoute, type RouteDecision, type RoutePolicyInput } from '../routing/route-policy';
4
+ import { decideRoute, type ExplicitTaskMode, type RouteDecision, type RoutePolicyInput } from '../routing/route-policy';
5
5
 
6
6
  export const EXECUTION_MODES = ['direct_control', 'goal_workloop', 'handoff_only'] as const;
7
7
  export type ExecutionMode = (typeof EXECUTION_MODES)[number];
8
8
 
9
9
  export const FACADE_TOOLS = ['rh_access', 'rh_status', 'rh_inbox', 'rh_context', 'rh_work'] as const;
10
10
  export type FacadeTool = (typeof FACADE_TOOLS)[number];
11
+ export type CapabilityExecutionSurface = FacadeTool | 'plugin_action_execute';
11
12
 
12
13
  export const FACADE_STATUSES = ['ok', 'blocked', 'failed', 'approval_required', 'not_found'] as const;
13
14
  export type FacadeStatus = (typeof FACADE_STATUSES)[number];
@@ -119,6 +120,7 @@ export const TERMINAL_WORK_CONTRACT_STATUSES: readonly WorkContractStatus[] = [
119
120
  export const WORK_KINDS = [
120
121
  'repository_change',
121
122
  'completed_no_change',
123
+ 'read_only_review',
122
124
  'investigation',
123
125
  'local_effect',
124
126
  'remote_effect',
@@ -136,6 +138,44 @@ export type EvidenceState = (typeof EVIDENCE_STATES)[number];
136
138
  export const COMPLETION_OUTCOMES = ['completed_changed', 'completed_no_change', 'completed_local', 'completed_remote', 'superseded'] as const;
137
139
  export type CompletionOutcome = (typeof COMPLETION_OUTCOMES)[number];
138
140
 
141
+ /** Source-bound semantic evidence accumulated by a recoverable read-only review. */
142
+ export interface ReadOnlyReviewEvidence {
143
+ sourceRevision: string;
144
+ workspaceFingerprint?: string;
145
+ inspectedPaths: string[];
146
+ findings: string[];
147
+ recordedAt: string;
148
+ }
149
+
150
+ /** Controller-reviewed binding from one exact Work acceptance criterion to durable evidence. */
151
+ export interface WorkSemanticAcceptanceEvidence {
152
+ criterion: string;
153
+ evidenceIds: string[];
154
+ rationale: string;
155
+ recordedAt: string;
156
+ }
157
+
158
+ /**
159
+ * Terminal authority for a clean read-only review. This deliberately does not
160
+ * impersonate repository delivery: it proves the reviewed source stayed at the
161
+ * frozen base revision with no workspace delta and records the bounded review
162
+ * scope that justified completed_no_change.
163
+ */
164
+ export interface ReadOnlyReviewCompletionReceipt {
165
+ schemaVersion: 1;
166
+ receiptId: string;
167
+ source: 'read_only_review';
168
+ workId: string;
169
+ baseRevision: string;
170
+ sourceRevision: string;
171
+ workspaceFingerprint?: string;
172
+ /** Explicit unchanged-workspace proof captured by the trusted finalizer. Must be empty. */
173
+ workspaceChangedPaths: string[];
174
+ inspectedPaths: string[];
175
+ findingCount: 0;
176
+ recordedAt: string;
177
+ }
178
+
139
179
  /**
140
180
  * Terminal receipt for a bounded Controller-local side effect that is not a
141
181
  * repository delivery. Repository Task/Issue completion keeps using the
@@ -156,18 +196,21 @@ export interface LocalEffectCompletionReceipt {
156
196
  recordedAt: string;
157
197
  }
158
198
 
159
- /** Durable completion authority for one typed remote plugin effect. */
199
+ /** Durable completion authority for one typed remote effect. */
160
200
  export interface RemoteEffectCompletionReceipt {
161
201
  schemaVersion: 1;
162
- /** Reuse the authoritative PLG-* receipt id rather than manufacturing parallel evidence. */
202
+ /** Plugin receipts retain their PLG-* id; repository Process effects use their canonical Process id. */
163
203
  receiptId: string;
164
204
  source: 'remote_effect';
165
205
  workId: string;
166
- pluginId: string;
206
+ /** Historical receipts omit this field and are interpreted as plugin_action. */
207
+ authority?: 'plugin_action' | 'repository_process';
208
+ pluginId?: string;
167
209
  actionId: string;
168
210
  requestId: string;
169
211
  semanticKey: string;
170
212
  resultDigest: string;
213
+ processId?: string;
171
214
  recordedAt: string;
172
215
  }
173
216
 
@@ -196,12 +239,21 @@ export interface DirectEditWorkCompletionReceipt {
196
239
  recordedAt: string;
197
240
  }
198
241
 
199
- export type WorkCompletionReceipt = RepositoryCompletionReceipt | DirectEditWorkCompletionReceipt | LocalEffectCompletionReceipt | RemoteEffectCompletionReceipt;
242
+ export type WorkCompletionReceipt = RepositoryCompletionReceipt | DirectEditWorkCompletionReceipt | ReadOnlyReviewCompletionReceipt | LocalEffectCompletionReceipt | RemoteEffectCompletionReceipt;
200
243
 
201
244
  export function isRepositoryCompletionReceipt(
202
245
  receipt: WorkCompletionReceipt,
203
246
  ): receipt is RepositoryCompletionReceipt {
204
- return receipt.source !== 'local_effect' && receipt.source !== 'remote_effect' && receipt.source !== 'direct_edit_work';
247
+ return receipt.source !== 'local_effect'
248
+ && receipt.source !== 'remote_effect'
249
+ && receipt.source !== 'direct_edit_work'
250
+ && receipt.source !== 'read_only_review';
251
+ }
252
+
253
+ export function isReadOnlyReviewCompletionReceipt(
254
+ receipt: WorkCompletionReceipt,
255
+ ): receipt is ReadOnlyReviewCompletionReceipt {
256
+ return receipt.source === 'read_only_review';
205
257
  }
206
258
 
207
259
  export function isRemoteEffectCompletionReceipt(
@@ -347,12 +399,16 @@ export interface WorkContractConstraints {
347
399
  /** current is the stability-first default; isolated is opt-in or used for explicit parallelism. */
348
400
  workspaceMode?: 'current' | 'isolated' | 'auto';
349
401
  requireWorktree?: boolean;
402
+ /** Admission fence: repository mutation must not use the Direct Control/current-main lane. */
403
+ directMainProhibited?: boolean;
350
404
  /** True when a change alters the agreed architecture direction rather than only implementation details. */
351
405
  architectureStrategyChange?: boolean;
352
406
  /** True when the proposed change weakens the thin-harness / high-performance execution policy. */
353
407
  conflictsWithThinHarnessPolicy?: boolean;
354
408
  /** True when the change alters the default routing or execution mode visible to users. */
355
409
  changesDefaultExecutionStrategy?: boolean;
410
+ /** Repository-change delivery must publish the exact integrated revision before Work terminalization. */
411
+ remoteDeliveryRequired?: boolean;
356
412
  }
357
413
 
358
414
  export interface WorkContractDriverPolicy {
@@ -476,6 +532,22 @@ export interface WorkContract {
476
532
  planStepId?: string;
477
533
  planSourceRevision?: string;
478
534
  scopeSummary?: string;
535
+ /**
536
+ * Discovery evidence, never an authorization boundary. Initial guesses,
537
+ * inspected paths, and observed changes remain distinct so early retrieval
538
+ * cannot masquerade as complete implementation scope.
539
+ */
540
+ scopeEvidence?: {
541
+ initialLikelyPaths: string[];
542
+ inspectedPaths: string[];
543
+ actualChangedPaths: string[];
544
+ recordedAt: string;
545
+ };
546
+ /** Source-bound semantic findings/scope for first-class recoverable read-only review Work. */
547
+ readOnlyReviewEvidence?: ReadOnlyReviewEvidence;
548
+ /** Explicit Controller-reviewed acceptance bindings. Mechanical evidence attribution alone never writes this field. */
549
+ semanticAcceptanceEvidence?: WorkSemanticAcceptanceEvidence[];
550
+ /** Explicit policy fence. This is not semantic completeness evidence. */
479
551
  allowedPaths: string[];
480
552
  forbiddenPaths: string[];
481
553
  checks: string[];
@@ -495,13 +567,12 @@ export interface WorkContract {
495
567
  continuationPrompt?: string;
496
568
  worktreeRef?: string;
497
569
  workerRef?: string;
498
- /** Stable idempotency key when this Work was accepted via work_submit. */
499
570
  requestId?: string;
500
- /** Accepted Kernel operation envelope. Does not imply ExecutionJob creation. */
571
+ /** Typed execution metadata; it does not imply ExecutionJob creation. */
501
572
  submittedOperation?: SubmittedWorkOperation;
502
573
  }
503
574
 
504
- /** Operation metadata retained on WorkContracts accepted through work_submit. */
575
+ /** Typed execution metadata retained on execution-child WorkContracts. */
505
576
  export interface SubmittedWorkOperation {
506
577
  name: string;
507
578
  semanticKey: string;
@@ -630,7 +701,7 @@ export interface CapabilityDescriptor {
630
701
  group: CapabilityGroup;
631
702
  operationClass: CapabilityOperationClass;
632
703
  risk: CapabilityRisk;
633
- exposedVia: FacadeTool;
704
+ exposedVia: CapabilityExecutionSurface;
634
705
  schemaExposure: CapabilitySchemaExposure;
635
706
  summary: string;
636
707
  }
@@ -639,6 +710,7 @@ export interface CapabilityGroupSummary {
639
710
  group: CapabilityGroup;
640
711
  capabilityCount: number;
641
712
  domains: CapabilityDomain[];
713
+ executionSurfaces: CapabilityExecutionSurface[];
642
714
  facadeTools: FacadeTool[];
643
715
  operationClasses: CapabilityOperationClass[];
644
716
  risks: CapabilityRisk[];
@@ -664,9 +736,14 @@ export interface ExecutionModeSelectionInput {
664
736
  workspaceDirty?: boolean;
665
737
  workspaceFingerprint?: string;
666
738
  checkoutId?: string;
739
+ /** Canonical typed placement constraint; never inferred from objective text. */
740
+ workspacePlacement?: 'current' | 'isolated' | 'auto';
741
+ /** Admission fence that has precedence over explicit Direct routing. */
742
+ directMainProhibited?: boolean;
667
743
  requiresInvestigation?: boolean;
668
744
  requiresLongRunningChecks?: boolean;
669
745
  requiresParallelism?: boolean;
746
+ explicitMode?: ExplicitTaskMode;
670
747
  needsDependencies?: boolean;
671
748
  requiresRecovery?: boolean;
672
749
  /** True only when the user explicitly requested an agent/worker executor. Complexity alone must not enable workers. */
@@ -717,6 +794,7 @@ export function selectExecutionMode(input: ExecutionModeSelectionInput): Executi
717
794
  requiresInvestigation: input.requiresInvestigation,
718
795
  requiresLongRunningChecks: input.requiresLongRunningChecks,
719
796
  requiresParallelism: input.requiresParallelism,
797
+ explicitMode: input.explicitMode,
720
798
  needsDependencies: input.needsDependencies,
721
799
  agentRequested: input.requiresWorker,
722
800
  },
@@ -725,6 +803,8 @@ export function selectExecutionMode(input: ExecutionModeSelectionInput): Executi
725
803
  dirty: input.workspaceDirty,
726
804
  checkoutId: input.checkoutId,
727
805
  fingerprint: input.workspaceFingerprint,
806
+ placement: input.workspacePlacement,
807
+ directMainProhibited: input.directMainProhibited,
728
808
  },
729
809
  policy: {
730
810
  risk: input.risk,