@moretea-labs/forge 1.8.0 → 1.8.2

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 (695) hide show
  1. package/AGENTS.md +73 -7
  2. package/CHANGELOG.md +34 -0
  3. package/CLAUDE.md +17 -2
  4. package/CONTRIBUTING.md +3 -2
  5. package/README.en.md +24 -3
  6. package/README.md +10 -6
  7. package/README.zh-CN.md +5 -3
  8. package/THIRD_PARTY_NOTICES.md +1 -2
  9. package/adapters/chatgpt/browser-delivery-host.ts +7 -1
  10. package/adapters/chatgpt/browser-delivery-runtime.ts +531 -56
  11. package/adapters/chatgpt/controller-binding-store.ts +101 -22
  12. package/adapters/chatgpt/controller-round-host.ts +15 -25
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
  14. package/adapters/chatgpt/provider-delivery.ts +229 -2
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +99 -54
  16. package/adapters/computer/chatgpt-extension-target.ts +708 -0
  17. package/adapters/computer/chrome-extension/background.js +541 -0
  18. package/adapters/computer/chrome-extension/content.js +402 -0
  19. package/adapters/computer/chrome-extension/core.js +24 -0
  20. package/adapters/computer/chrome-extension/manifest.json +32 -0
  21. package/adapters/computer/desktop-operator-discovery.ts +11 -31
  22. package/adapters/computer/desktop-operator-provider.ts +18 -6
  23. package/adapters/computer/interaction-target-authority.ts +178 -24
  24. package/adapters/mcp/access-mode.ts +18 -39
  25. package/adapters/mcp/auth.ts +2 -7
  26. package/adapters/mcp/instructions.ts +6 -5
  27. package/adapters/mcp/multi-repository.ts +10 -47
  28. package/adapters/mcp/oauth.ts +73 -0
  29. package/adapters/mcp/paths.ts +4 -1
  30. package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
  31. package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
  32. package/adapters/mcp/runtime-gateway/context-adapter.ts +490 -113
  33. package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +83 -0
  34. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
  35. package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
  36. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
  37. package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
  38. package/adapters/mcp/runtime-gateway/execution-tools.ts +14 -54
  39. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
  40. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +132 -47
  41. package/adapters/mcp/runtime-gateway/process-tools.ts +173 -23
  42. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
  43. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
  44. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
  45. package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
  46. package/adapters/mcp/runtime-gateway/router.ts +19 -507
  47. package/adapters/mcp/runtime-gateway/routing-policy.ts +506 -0
  48. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +15 -66
  49. package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
  50. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +123 -178
  51. package/adapters/mcp/runtime-gateway/runtime-tools.ts +11 -5
  52. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +37 -1
  53. package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
  54. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +416 -270
  55. package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +140 -0
  56. package/adapters/mcp/runtime-gateway/work-adapter.ts +262 -3123
  57. package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
  58. package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
  59. package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +229 -0
  60. package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
  61. package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
  62. package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
  63. package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
  64. package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
  65. package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +320 -0
  66. package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
  67. package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +180 -0
  68. package/adapters/mcp/server.ts +91 -26
  69. package/adapters/mcp/setup.ts +5 -13
  70. package/adapters/mcp/tool-mapping/access-tools.ts +0 -6
  71. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +703 -3092
  72. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +5 -10
  73. package/adapters/mcp/tool-mapping/repository-tools.ts +170 -213
  74. package/adapters/mcp/toolset-names.ts +11 -37
  75. package/adapters/mcp/toolset.ts +19 -92
  76. package/{src/cli → adapters}/mcp/transports/AGENTS.md +5 -5
  77. package/{src/cli → adapters}/mcp/transports/CLAUDE.md +5 -5
  78. package/adapters/mcp/transports/http-observation.ts +377 -0
  79. package/adapters/mcp/transports/http-post-lifecycle.ts +19 -0
  80. package/adapters/mcp/transports/http.ts +200 -683
  81. package/adapters/mcp/transports/oauth-http.ts +322 -0
  82. package/adapters/mcp/transports/session-registry.ts +6 -0
  83. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
  84. package/adapters/mcp/types.ts +0 -6
  85. package/assets/hooks/lib/session-state.sh +0 -38
  86. package/assets/hooks/post-bash.sh +1 -1
  87. package/assets/hooks/post-tool-observer.sh +0 -5
  88. package/assets/hooks/prompt-guard.sh +0 -55
  89. package/assets/partials/04-project-structure.partial.md +1 -1
  90. package/assets/partials/07-footer.partial.md +1 -1
  91. package/assets/partials-agents/02-operating-mode.partial.md +1 -1
  92. package/assets/partials-agents/08-deep-docs.partial.md +1 -1
  93. package/assets/plugin-registry.v1.json +6 -4
  94. package/assets/reference-configs/agentic-development-flow.md +26 -1
  95. package/assets/reference-configs/external-tooling.md +0 -76
  96. package/assets/reference-configs/global-working-rules.md +19 -0
  97. package/assets/reference-configs/release-deploy.md +1 -1
  98. package/assets/templates/helpers/architecture-queue.sh +1 -1
  99. package/assets/templates/helpers/check-agent-tooling.sh +1 -327
  100. package/assets/templates/helpers/check-task-workflow.sh +1 -1
  101. package/assets/templates/helpers/ensure-task-workflow.sh +0 -14
  102. package/assets/templates/helpers/migrate-project-template.sh +2 -2
  103. package/assets/workflow-contract.v1.json +0 -2
  104. package/docs/README.md +5 -2
  105. package/docs/architecture/CURRENT.md +205 -51
  106. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
  107. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
  108. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +42 -0
  109. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
  110. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
  111. package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
  112. package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
  113. package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +234 -0
  114. package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
  115. package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +74 -0
  116. package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +342 -0
  117. package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
  118. package/docs/architecture/decisions/20261009-exact-code-context-discovery.md +19 -0
  119. package/docs/architecture/decisions/20261009-generated-xcode-cache-retention.md +37 -0
  120. package/docs/architecture/decisions/20261011-autonomous-continuation-convergence.md +597 -0
  121. package/docs/architecture/decisions/20261017-edit-session-finalization-reconciliation.md +17 -0
  122. package/docs/architecture/decisions/20261019-retire-host-skills.md +16 -0
  123. package/docs/architecture/diagrams/agentic-dev-plugin-architecture.html +1 -1
  124. package/docs/architecture/domains/public-surface.md +3 -5
  125. package/docs/architecture/domains/verification.md +6 -5
  126. package/docs/architecture/domains/workflow-engine.md +6 -0
  127. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +3 -3
  128. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +4 -4
  129. package/docs/architecture/reviews/20261015-code-search-runtime-acceptance.md +75 -0
  130. package/docs/forge-plugin-management.md +16 -4
  131. package/docs/operations/controller-browser-plugin.md +23 -0
  132. package/docs/operations/controller-performance-and-502.md +17 -0
  133. package/docs/operations/controller-reliability-runbook.md +2 -2
  134. package/docs/operations/features.md +6 -7
  135. package/docs/operations/features.zh-CN.md +1 -1
  136. package/docs/operations/github-repository.md +4 -4
  137. package/docs/operations/github-semantic-release-projection.md +20 -0
  138. package/docs/operations/homebrew.md +2 -2
  139. package/docs/operations/mcp-tool-exposure.md +13 -52
  140. package/docs/operations/releasing.md +2 -0
  141. package/docs/operations/runtime-performance-diagnostics.md +8 -0
  142. package/docs/operations/standalone-disaster-recovery.md +15 -7
  143. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  144. package/docs/tutorials/03-first-repository-task.md +2 -0
  145. package/docs/wiki/Computer-and-Plugins.md +78 -0
  146. package/docs/wiki/Computer-and-Plugins.zh-CN.md +88 -0
  147. package/docs/wiki/Home.md +16 -2
  148. package/docs/wiki/Implementation.md +25 -13
  149. package/docs/wiki/Installation.md +28 -32
  150. package/docs/wiki/Integrations.md +4 -0
  151. package/docs/wiki/Quick-Start.md +35 -22
  152. package/docs/wiki/Releases-and-Upgrades.md +15 -25
  153. package/docs/wiki/_Sidebar.md +5 -1
  154. package/package.json +25 -25
  155. package/packages/kernel/cognition/api/index.ts +6 -0
  156. package/packages/kernel/cognition/application/activation-service.ts +451 -0
  157. package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
  158. package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
  159. package/packages/kernel/cognition/application/memory-service.ts +64 -0
  160. package/packages/kernel/cognition/domain/learning.ts +106 -0
  161. package/packages/kernel/cognition/domain/memory.ts +254 -0
  162. package/packages/kernel/controller/api/index.ts +1 -0
  163. package/packages/kernel/controller/application/continuation-service.ts +281 -0
  164. package/packages/kernel/controller/application/controller-round-service.ts +12 -0
  165. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
  166. package/packages/kernel/controller/domain/controller-round.ts +4 -1
  167. package/packages/kernel/controller/domain/execution-quality.ts +3 -1
  168. package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
  169. package/packages/kernel/controller/infrastructure/controller-session-store.ts +348 -97
  170. package/packages/kernel/controller/ports/controller-host.ts +2 -0
  171. package/packages/kernel/identity/api/index.ts +10 -0
  172. package/packages/kernel/identity/domain/activity-projection.ts +43 -0
  173. package/packages/kernel/identity/domain/capability-broker.ts +60 -0
  174. package/packages/kernel/identity/domain/grant.ts +72 -0
  175. package/packages/kernel/identity/domain/owned-resource.ts +116 -0
  176. package/packages/kernel/identity/domain/user-request.ts +93 -0
  177. package/packages/kernel/identity/infrastructure/activity-projection-store.ts +87 -0
  178. package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
  179. package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
  180. package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
  181. package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
  182. package/packages/kernel/scheduler/api/index.ts +0 -2
  183. package/packages/kernel/scheduler/application/eligibility.ts +4 -1
  184. package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
  185. package/packages/kernel/scheduler/application/settlement.ts +0 -15
  186. package/packages/kernel/scheduler/domain/schedule.ts +87 -0
  187. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +166 -143
  188. package/packages/kernel/work/api/index.ts +3 -2
  189. package/packages/kernel/work/application/work-service.ts +18 -42
  190. package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
  191. package/packages/kernel/work/domain/engineering-design.ts +10 -5
  192. package/packages/kernel/work/domain/engineering-profile.ts +8 -12
  193. package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
  194. package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
  195. package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
  196. package/packages/kernel/work/domain/implementation-review.ts +14 -331
  197. package/packages/kernel/work/domain/objective-graph.ts +119 -0
  198. package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
  199. package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
  200. package/packages/kernel/work/domain/state-machine.ts +34 -65
  201. package/packages/kernel/work/domain/types.ts +57 -51
  202. package/packages/kernel/work/infrastructure/work-contract-store.ts +847 -729
  203. package/packages/kernel/work/ports/work-contract-store.ts +5 -2
  204. package/packages/plugin-runtime/browser/provider-registry.ts +12 -36
  205. package/packages/plugin-runtime/browser/session-authority.ts +2 -1
  206. package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
  207. package/packages/plugin-runtime/computer/conversation-target.ts +153 -0
  208. package/packages/plugin-runtime/computer/index.ts +2 -0
  209. package/packages/plugin-runtime/computer/target-authority.ts +26 -1
  210. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
  211. package/packages/protocols/computer/contract.ts +27 -1
  212. package/scripts/activate-source-baseline.ts +7 -9
  213. package/scripts/assemble-template.ts +11 -72
  214. package/scripts/canary-controller-semantic-wait.ts +12 -24
  215. package/scripts/check-mcp-compatibility.ts +94 -201
  216. package/scripts/check-package-identity.mjs +0 -5
  217. package/scripts/check-runtime-architecture.mjs +921 -239
  218. package/scripts/forge-local-recovery-helper.mjs +93 -15
  219. package/scripts/init-project.sh +0 -46
  220. package/scripts/install-ios-hid-toolchain.sh +60 -0
  221. package/scripts/install-standalone-recovery.ts +1 -1
  222. package/scripts/lib/project-init-lib.sh +6 -3
  223. package/scripts/migrate-windows-wsl-controller-home.ts +2 -0
  224. package/scripts/open-source-audit-allowlist.txt +1 -3
  225. package/scripts/run-bounded-command.mjs +5 -0
  226. package/scripts/run-governed-gate.ts +2 -1
  227. package/scripts/run-mobile-monitor-bridge.ts +0 -1
  228. package/scripts/smoke-control-plane-failure-domain.ts +94 -0
  229. package/scripts/smoke-ios-physical-device.ts +38 -10
  230. package/scripts/smoke-mcp-http-runtime.ts +12 -8
  231. package/scripts/smoke-mcp-tool-surface.ts +27 -41
  232. package/scripts/smoke-runtime-recovery.ts +12 -43
  233. package/scripts/smoke-schedule-engine.ts +23 -15
  234. package/scripts/smoke-unattended-transport-recovery.ts +223 -0
  235. package/scripts/smoke-user-request-continuation-restart.ts +232 -0
  236. package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +95 -0
  237. package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
  238. package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
  239. package/scripts/smoke-workflow-supervisor.ts +103 -0
  240. package/scripts/sync-generated-authority.mjs +0 -1
  241. package/scripts/verify-forge-runtime.sh +2 -1
  242. package/src/cli/agent-jobs/executor-health.ts +12 -35
  243. package/src/cli/agent-jobs/integration.ts +20 -51
  244. package/src/cli/agent-jobs/job-manager.ts +7 -3
  245. package/src/cli/chatgpt-browser/file-policy.ts +2 -2
  246. package/src/cli/commands/brain-assistant.ts +27 -13
  247. package/src/cli/commands/brain.ts +13 -15
  248. package/src/cli/commands/chatgpt.ts +1 -163
  249. package/src/cli/commands/doctor.ts +1 -143
  250. package/src/cli/commands/global-runtime.ts +3 -196
  251. package/src/cli/commands/init-hook.ts +6 -23
  252. package/src/cli/commands/init.ts +3 -252
  253. package/src/cli/commands/mcp.ts +0 -5
  254. package/src/cli/commands/prompt-guard-decision.ts +0 -2
  255. package/src/cli/commands/recovery.ts +137 -135
  256. package/src/cli/commands/repository.ts +17 -1
  257. package/src/cli/commands/runtime.ts +3 -3
  258. package/src/cli/commands/setup-execution.ts +41 -0
  259. package/src/cli/commands/setup-profile.ts +8 -0
  260. package/src/cli/controller/check-runner.ts +13 -2
  261. package/src/cli/controller/completion-backlog.ts +3 -3
  262. package/src/cli/controller/completion-orchestrator.ts +5 -44
  263. package/src/cli/controller/completion-target.ts +3 -72
  264. package/src/cli/controller/composite-operations.ts +1 -1
  265. package/src/cli/controller/context/instruction-context.ts +1 -1
  266. package/src/cli/controller/context/known-paths.ts +2 -2
  267. package/src/cli/controller/context/query-planning.ts +11 -4
  268. package/src/cli/controller/context/rule-resolution.ts +2 -2
  269. package/src/cli/controller/context/source-materializer.ts +83 -102
  270. package/src/cli/controller/context/structural-provider.ts +84 -0
  271. package/src/cli/controller/context/structural.ts +6 -6
  272. package/src/cli/controller/context/types.ts +8 -9
  273. package/src/cli/controller/context-pack.ts +107 -84
  274. package/src/cli/controller/execution-completion.ts +4 -7
  275. package/src/cli/controller/execution-policy.ts +36 -153
  276. package/src/cli/controller/governance.ts +2 -3
  277. package/src/cli/controller/issue-store.ts +4 -99
  278. package/src/cli/controller/launch-agents.ts +59 -18
  279. package/src/cli/controller/operational-plan.ts +25 -52
  280. package/src/cli/controller/runtime-config.ts +5 -1
  281. package/src/cli/controller/stuck-state-migration.ts +2 -3
  282. package/src/cli/controller/systemd-user.ts +42 -10
  283. package/src/cli/editing/edit-session.ts +18 -12
  284. package/src/cli/github/github.ts +4 -4
  285. package/src/cli/github/semantic-projection.ts +174 -0
  286. package/src/cli/hook/prompt-intents.ts +0 -9
  287. package/src/cli/index.ts +1 -43
  288. package/src/cli/local-bridge/connector-freshness.ts +1 -12
  289. package/src/cli/local-bridge/console-automations.ts +19 -14
  290. package/src/cli/local-bridge/console-view-models.ts +4 -13
  291. package/src/cli/local-bridge/facade-api.ts +64 -193
  292. package/src/cli/local-bridge/server.ts +24 -147
  293. package/src/cli/local-bridge/types.ts +0 -1
  294. package/src/cli/mcp/oauth-client-retirement.ts +74 -0
  295. package/src/cli/repositories/command-classifier.ts +0 -9
  296. package/src/cli/repositories/command-executor.ts +29 -23
  297. package/src/cli/repositories/command-scope.ts +37 -18
  298. package/src/cli/repositories/controller-home.ts +48 -0
  299. package/src/cli/repositories/ephemeral-workspace.ts +20 -30
  300. package/src/cli/repositories/git-command-executor.ts +2 -2
  301. package/src/cli/repositories/locks.ts +20 -0
  302. package/src/cli/repositories/registry.ts +79 -12
  303. package/src/cli/repositories/safe-patch.ts +2 -12
  304. package/src/cli/repositories/structured-git.ts +101 -5
  305. package/src/cli/repository/inspector.ts +185 -343
  306. package/src/cli/repository/session-cache.ts +92 -6
  307. package/src/effects/process-runner.ts +17 -1
  308. package/src/runtime/context/assistant-context.ts +20 -7
  309. package/src/runtime/context/assistant-work-context.ts +89 -27
  310. package/src/runtime/context/automatic-learning.ts +565 -0
  311. package/src/runtime/context/cognitive-attention.ts +173 -0
  312. package/src/runtime/context/cognitive-skill-canary.ts +158 -0
  313. package/src/runtime/context/context-closure.ts +46 -9
  314. package/src/runtime/context/context-pack-process.ts +103 -0
  315. package/src/runtime/context/context-plane.ts +1 -9
  316. package/src/runtime/context/direct-controller-learning.ts +298 -0
  317. package/src/runtime/context/generic-lsp-provider.ts +1 -1
  318. package/src/runtime/context/semantic-navigation-contract.ts +16 -0
  319. package/src/runtime/context/semantic-navigation.ts +7 -35
  320. package/src/runtime/context/typescript-navigation-process.ts +145 -0
  321. package/src/runtime/context/typescript-navigation.ts +89 -3
  322. package/src/runtime/control-plane/cleanup-artifact-retention.ts +215 -12
  323. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
  324. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
  325. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
  326. package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
  327. package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
  328. package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
  329. package/src/runtime/control-plane/execution/session-store.ts +31 -1
  330. package/src/runtime/control-plane/execution/validation.ts +6 -8
  331. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
  332. package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
  333. package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
  334. package/src/runtime/control-plane/execution/work-delivery-service.ts +616 -0
  335. package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
  336. package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
  337. package/src/runtime/control-plane/execution/work-handle-authority.ts +197 -110
  338. package/src/runtime/control-plane/execution/work-handle-store.ts +72 -44
  339. package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
  340. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
  341. package/src/runtime/control-plane/execution/work-operation-service.ts +60 -34
  342. package/src/runtime/control-plane/execution/work-preparation-service.ts +231 -267
  343. package/src/runtime/control-plane/execution/work-process-evidence.ts +2 -2
  344. package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
  345. package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
  346. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +201 -199
  347. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +33 -85
  348. package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
  349. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +6 -2
  350. package/src/runtime/control-plane/facade/capability-registry.ts +364 -37
  351. package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
  352. package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
  353. package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
  354. package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
  355. package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
  356. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
  357. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
  358. package/src/runtime/control-plane/facade/index.ts +0 -1
  359. package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
  360. package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
  361. package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
  362. package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
  363. package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
  364. package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
  365. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
  366. package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
  367. package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
  368. package/src/runtime/control-plane/facade/types.ts +49 -108
  369. package/src/runtime/control-plane/facade/work-continuation.ts +9 -9
  370. package/src/runtime/control-plane/generated-cache-retention.ts +206 -59
  371. package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
  372. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
  373. package/src/runtime/control-plane/global-scheduler/maintenance.ts +256 -117
  374. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -12
  375. package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
  376. package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
  377. package/src/runtime/control-plane/governance/access-policy.ts +19 -2
  378. package/src/runtime/control-plane/governance/authorization.ts +20 -3
  379. package/src/runtime/control-plane/governance/external-effects.ts +1 -1
  380. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
  381. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +29 -300
  382. package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
  383. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
  384. package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
  385. package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
  386. package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
  387. package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
  388. package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
  389. package/src/runtime/control-plane/release-retention.ts +135 -47
  390. package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
  391. package/src/runtime/control-plane/runtime-cleanup.ts +295 -107
  392. package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
  393. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
  394. package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
  395. package/src/runtime/diagnostics/incident-repair.ts +313 -146
  396. package/src/runtime/diagnostics/mcp-timing.ts +114 -0
  397. package/src/runtime/evidence/artifact-store.ts +158 -40
  398. package/src/runtime/evidence/evidence-store.ts +112 -8
  399. package/src/runtime/evidence/output-handle-index.ts +225 -0
  400. package/src/runtime/evidence/result-store.ts +158 -44
  401. package/src/runtime/evidence/sensitive-output.ts +22 -2
  402. package/src/runtime/execution/jobs/child-reference.ts +11 -0
  403. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -11
  404. package/src/runtime/execution/jobs/store.ts +3 -4
  405. package/src/runtime/execution/managed-workspace.ts +57 -0
  406. package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
  407. package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
  408. package/src/runtime/execution/process-runtime/check-result.ts +105 -1
  409. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
  410. package/src/runtime/execution/process-runtime/command-facade.ts +82 -30
  411. package/src/runtime/execution/process-runtime/gc.ts +15 -2
  412. package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
  413. package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
  414. package/src/runtime/execution/process-runtime/index.ts +3 -0
  415. package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
  416. package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
  417. package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
  418. package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
  419. package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
  420. package/src/runtime/execution/process-runtime/runtime.ts +55 -18
  421. package/src/runtime/execution/process-runtime/store.ts +30 -2
  422. package/src/runtime/execution/process-runtime/types.ts +6 -1
  423. package/src/runtime/execution/thin-harness/execution-router.ts +16 -16
  424. package/src/runtime/execution/thin-harness/fast-executor.ts +2 -2
  425. package/src/runtime/execution/thin-harness/search-worker.ts +2 -2
  426. package/src/runtime/execution/workers/executor.ts +3 -8
  427. package/src/runtime/maintenance/cleanup.ts +41 -5
  428. package/src/runtime/platform/service-inventory.ts +130 -0
  429. package/src/runtime/platform/service-manager.ts +8 -0
  430. package/src/runtime/plugins/action-application.ts +97 -29
  431. package/src/runtime/plugins/app-store-connect-adapter.ts +290 -18
  432. package/src/runtime/plugins/browser-adapter.ts +1124 -333
  433. package/src/runtime/plugins/browser-automation-service.ts +23 -3
  434. package/src/runtime/plugins/browser-macos-bridge.ts +431 -137
  435. package/src/runtime/plugins/browser-manifest-surface.ts +47 -12
  436. package/src/runtime/plugins/browser-native-session-service.ts +63 -13
  437. package/src/runtime/plugins/browser-registration.ts +18 -0
  438. package/src/runtime/plugins/browser-runtime.ts +40 -36
  439. package/src/runtime/plugins/browser-session-authority.ts +2 -2
  440. package/src/runtime/plugins/browser-session-store.ts +46 -76
  441. package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
  442. package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +228 -0
  443. package/src/runtime/plugins/computer-registration.ts +298 -20
  444. package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
  445. package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
  446. package/src/runtime/plugins/external-adapter.ts +42 -6
  447. package/src/runtime/plugins/external-registration.ts +21 -1
  448. package/src/runtime/plugins/github-adapter.ts +30 -3
  449. package/src/runtime/plugins/gmail-adapter.ts +189 -3
  450. package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
  451. package/src/runtime/plugins/google-shared.ts +24 -12
  452. package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
  453. package/src/runtime/plugins/ios/remote-xpc-hid.ts +70 -30
  454. package/src/runtime/plugins/ios-adapter.ts +46 -41
  455. package/src/runtime/plugins/ios-agent-device.ts +54 -4
  456. package/src/runtime/plugins/ios-device-ownership.ts +103 -0
  457. package/src/runtime/plugins/ios-physical-device.ts +497 -79
  458. package/src/runtime/plugins/lightweight-action.ts +208 -2
  459. package/src/runtime/plugins/local-system-adapter.ts +12 -100
  460. package/src/runtime/plugins/managed-process-adapter.ts +12 -5
  461. package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
  462. package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
  463. package/src/runtime/plugins/store.ts +682 -435
  464. package/src/runtime/plugins/types.ts +24 -0
  465. package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
  466. package/src/runtime/projections/git-status-sampler.ts +2 -19
  467. package/src/runtime/projections/invalidation.ts +7 -3
  468. package/src/runtime/projections/materialized-view.ts +80 -36
  469. package/src/runtime/recovery/actions.ts +4 -4
  470. package/src/runtime/recovery/capability-action-application.ts +46 -45
  471. package/src/runtime/recovery/lifecycle-inventory.ts +30 -40
  472. package/src/runtime/recovery/maintenance-executor.ts +374 -123
  473. package/src/runtime/recovery/probe.ts +2 -2
  474. package/src/runtime/recovery/store.ts +29 -11
  475. package/src/runtime/release/release-coordinator.ts +312 -0
  476. package/src/runtime/release/release-session.ts +716 -0
  477. package/src/runtime/release/release-state-migration.ts +25 -0
  478. package/src/runtime/resources/leases/store.ts +56 -25
  479. package/src/runtime/root/computer-composition.ts +191 -6
  480. package/src/runtime/root/controller-progression-composition.ts +254 -0
  481. package/src/runtime/root/controller-round-composition.ts +20 -1
  482. package/src/runtime/root/deployment-topology.ts +106 -0
  483. package/src/runtime/root/entry.ts +4 -3
  484. package/src/runtime/root/known-good-recovery.ts +184 -0
  485. package/src/runtime/root/local-bridge.ts +0 -1
  486. package/src/runtime/root/mcp-transport.ts +111 -18
  487. package/src/runtime/root/ownership.ts +261 -9
  488. package/src/runtime/root/package-connector-service.ts +227 -29
  489. package/src/runtime/root/package-runtime-release.ts +117 -30
  490. package/src/runtime/root/package-runtime-service.ts +24 -24
  491. package/src/runtime/root/release-execution-canary.ts +57 -12
  492. package/src/runtime/root/release-loader.ts +90 -8
  493. package/src/runtime/root/release-manifest.ts +80 -40
  494. package/src/runtime/root/release-materialize.ts +372 -106
  495. package/src/runtime/root/release-store.ts +395 -36
  496. package/src/runtime/root/runtime-lane.ts +191 -0
  497. package/src/runtime/root/runtime.ts +160 -29
  498. package/src/runtime/root/scheduled-controller-composition.ts +29 -3
  499. package/src/runtime/root/service-runner.ts +2 -2
  500. package/src/runtime/root/service.ts +126 -44
  501. package/src/runtime/root/status.ts +48 -0
  502. package/src/runtime/root/types.ts +32 -9
  503. package/src/runtime/root/workflow-supervisor-composition.ts +681 -0
  504. package/src/runtime/root/workflow-supervisor-runtime.ts +564 -0
  505. package/src/runtime/root/write-fence.ts +50 -2
  506. package/src/runtime/safe-tooling/google-credential-store.ts +67 -22
  507. package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
  508. package/src/runtime/safe-tooling/ios-development.ts +22 -8
  509. package/src/runtime/safe-tooling/job-summary.ts +1 -1
  510. package/src/runtime/safe-tooling/workspace-auth.ts +5 -2
  511. package/src/runtime/shared/atomic-text-file.ts +21 -0
  512. package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
  513. package/src/runtime/shared/json-files.ts +8 -3
  514. package/src/runtime/shared/process-environment.ts +20 -9
  515. package/src/runtime/shared/response-budget.ts +1 -3
  516. package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
  517. package/src/runtime/standalone-recovery/core.ts +3792 -417
  518. package/src/runtime/standalone-recovery/entry.ts +507 -45
  519. package/src/runtime/standalone-recovery/installer.ts +262 -148
  520. package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
  521. package/src/runtime/standalone-recovery/operation-lock.ts +12 -2
  522. package/src/runtime/standalone-recovery/performance.ts +54 -16
  523. package/src/runtime/standalone-recovery/release.ts +53 -5
  524. package/src/runtime/standalone-recovery/service-labels.ts +5 -2
  525. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
  526. package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
  527. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +11 -3
  528. package/src/runtime/workflow/schedules/engine.ts +166 -178
  529. package/src/runtime/workflow/schedules/pending-activation.ts +11 -4
  530. package/src/runtime/workflow/schedules/work-continuation.ts +95 -11
  531. package/src/runtime/workflows/runtime.ts +15 -19
  532. package/src/testing/test-governance.ts +5 -1
  533. package/supervisor/chatgpt-conversation.ts +23 -0
  534. package/supervisor/client.ts +218 -0
  535. package/supervisor/control-plane.ts +963 -0
  536. package/supervisor/entry.ts +15 -0
  537. package/supervisor/forge-validators.ts +147 -0
  538. package/supervisor/index.ts +5 -0
  539. package/supervisor/native-browser-adapter.ts +1151 -0
  540. package/supervisor/native-messaging/host.ts +58 -0
  541. package/supervisor/native-messaging/manifest.ts +26 -0
  542. package/supervisor/native-messaging/protocol.ts +27 -0
  543. package/supervisor/paths.ts +18 -0
  544. package/supervisor/protocol.ts +250 -0
  545. package/supervisor/server.ts +412 -0
  546. package/supervisor/store.ts +1870 -0
  547. package/supervisor/tsconfig.json +8 -0
  548. package/supervisor/types.ts +261 -0
  549. package/SKILL.md +0 -427
  550. package/adapters/chatgpt/controller-host.ts +0 -119
  551. package/adapters/mcp/controller-round-compatibility.ts +0 -184
  552. package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
  553. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
  554. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +0 -1
  555. package/adapters/mcp/toolset-selection.ts +0 -41
  556. package/agents/openai.yaml +0 -4
  557. package/assets/skill-hooks.json +0 -41
  558. package/assets/skill-version.json +0 -189
  559. package/assets/skills/claude-review/SKILL.md +0 -231
  560. package/assets/skills/codex-review/SKILL.md +0 -103
  561. package/assets/templates/helpers/check-skill-version.ts +0 -193
  562. package/packages/kernel/progression/api/index.ts +0 -2
  563. package/packages/kernel/progression/application/projector.ts +0 -211
  564. package/packages/kernel/progression/domain/types.ts +0 -116
  565. package/packages/kernel/progression/index.ts +0 -1
  566. package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
  567. package/packages/kernel/scheduler/domain/continuation.ts +0 -38
  568. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
  569. package/packages/kernel/work/domain/admission-policy.ts +0 -34
  570. package/scripts/benchmark-background-check-overlap.ts +0 -228
  571. package/scripts/benchmark-computer-hotpath.ts +0 -255
  572. package/scripts/benchmark-controller-hotpath.ts +0 -212
  573. package/scripts/benchmark-controller-round2.ts +0 -191
  574. package/scripts/benchmark-ios-agent-device.ts +0 -511
  575. package/scripts/benchmark-mcp-host.sh +0 -117
  576. package/scripts/benchmark-mcp-transport.ts +0 -169
  577. package/scripts/benchmark-operational-memory-activation.ts +0 -235
  578. package/scripts/benchmark-operational-shadow.ts +0 -28
  579. package/scripts/benchmark-quality-harness.ts +0 -146
  580. package/scripts/benchmark-route-session-concurrency.ts +0 -915
  581. package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
  582. package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
  583. package/scripts/benchmark-thin-harness.ts +0 -251
  584. package/scripts/benchmark-typescript-navigation.ts +0 -186
  585. package/scripts/benchmark-work-efficiency.ts +0 -334
  586. package/scripts/build-controller-ui.ts +0 -28
  587. package/scripts/check-npm-release.sh +0 -32
  588. package/scripts/check-public-release-surface.sh +0 -19
  589. package/scripts/check-release-published.sh +0 -57
  590. package/scripts/check-release-readiness.sh +0 -37
  591. package/scripts/check-release-version.mjs +0 -74
  592. package/scripts/check-skill-version.ts +0 -5
  593. package/scripts/check-tarball-install-smoke.sh +0 -150
  594. package/scripts/ensure-codegraph.sh +0 -16
  595. package/scripts/package-source-archive.sh +0 -147
  596. package/scripts/public-release-files.txt +0 -39
  597. package/scripts/public-release.ts +0 -174
  598. package/scripts/publish-release-tarball.sh +0 -27
  599. package/scripts/route-nl-vs-ts-eval.ts +0 -679
  600. package/scripts/run-skill-hook.ts +0 -244
  601. package/scripts/stage-runtime-release.ts +0 -44
  602. package/scripts/sync-codex-installed-copies.sh +0 -182
  603. package/src/cli/commands/tools.ts +0 -167
  604. package/src/cli/controller/progress.ts +0 -656
  605. package/src/cli/controller/work-mode.ts +0 -181
  606. package/src/cli/local-bridge/console-assets.ts +0 -17
  607. package/src/cli/local-bridge/dashboard.ts +0 -17
  608. package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
  609. package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
  610. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
  611. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
  612. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
  613. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
  614. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
  615. package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
  616. package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
  617. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
  618. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
  619. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
  620. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
  621. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
  622. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
  623. package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
  624. package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
  625. package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
  626. package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
  627. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
  628. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
  629. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
  630. package/src/cli/local-bridge/frontend/src/styles.css +0 -28
  631. package/src/cli/local-bridge/frontend/src/types.ts +0 -15
  632. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
  633. package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
  634. package/src/cli/local-bridge/ui-dist/app.css +0 -1
  635. package/src/cli/local-bridge/ui-dist/app.js +0 -11228
  636. package/src/cli/mcp/access-mode.ts +0 -2
  637. package/src/cli/mcp/access-tools.ts +0 -2
  638. package/src/cli/mcp/audit.ts +0 -2
  639. package/src/cli/mcp/auth.ts +0 -2
  640. package/src/cli/mcp/instructions.ts +0 -2
  641. package/src/cli/mcp/legacy-context.ts +0 -2
  642. package/src/cli/mcp/legacy-tool-service.ts +0 -2
  643. package/src/cli/mcp/multi-repository.ts +0 -2
  644. package/src/cli/mcp/oauth.ts +0 -2
  645. package/src/cli/mcp/openai-secure-tunnel.ts +0 -2
  646. package/src/cli/mcp/paths.ts +0 -2
  647. package/src/cli/mcp/policy.ts +0 -2
  648. package/src/cli/mcp/post-finalize-work-attribution.ts +0 -2
  649. package/src/cli/mcp/proxy-env.ts +0 -2
  650. package/src/cli/mcp/readiness-projection.ts +0 -2
  651. package/src/cli/mcp/redaction.ts +0 -2
  652. package/src/cli/mcp/repo.ts +0 -2
  653. package/src/cli/mcp/repository-tools.ts +0 -2
  654. package/src/cli/mcp/server.ts +0 -2
  655. package/src/cli/mcp/setup.ts +0 -2
  656. package/src/cli/mcp/tool-capability-cache.ts +0 -2
  657. package/src/cli/mcp/tool-contract.ts +0 -2
  658. package/src/cli/mcp/tools.ts +0 -2
  659. package/src/cli/mcp/toolset-names.ts +0 -2
  660. package/src/cli/mcp/toolset-selection.ts +0 -2
  661. package/src/cli/mcp/toolset.ts +0 -2
  662. package/src/cli/mcp/transports/http.ts +0 -2
  663. package/src/cli/mcp/transports/session-registry.ts +0 -2
  664. package/src/cli/mcp/transports/stdio.ts +0 -2
  665. package/src/cli/mcp/types.ts +0 -2
  666. package/src/cli/mcp/umbrella-tools.ts +0 -2
  667. package/src/cli/tools/codegraph.ts +0 -695
  668. package/src/core/adoption/helper-wrapper-plan.ts +0 -159
  669. package/src/runtime/context/codegraph-cache-boundary.ts +0 -255
  670. package/src/runtime/context/codegraph-read-provider.ts +0 -611
  671. package/src/runtime/context/codegraph-sidecar.cjs +0 -248
  672. package/src/runtime/control-plane/codegraph-cache-retention.ts +0 -164
  673. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
  674. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
  675. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
  676. package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
  677. package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
  678. package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
  679. package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
  680. package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
  681. package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
  682. package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
  683. package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
  684. package/src/runtime/control-plane/routing/index.ts +0 -1
  685. package/src/runtime/control-plane/routing/route-policy.ts +0 -401
  686. package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
  687. package/src/runtime/gateway/mcp/execution-tools.ts +0 -2
  688. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +0 -2
  689. package/src/runtime/gateway/mcp/persisted-check-process.ts +0 -2
  690. package/src/runtime/gateway/mcp/process-tools.ts +0 -2
  691. package/src/runtime/gateway/mcp/router.ts +0 -2
  692. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +0 -2
  693. package/src/runtime/gateway/mcp/runtime-tools.ts +0 -2
  694. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +0 -2
  695. package/src/runtime/plugins/browser-provider-registry.ts +0 -2
@@ -2,12 +2,10 @@ import { resolve } from 'path';
2
2
  import type { RepositoryRecord } from '../../../cli/repositories/types';
3
3
  import { getRepository, resolveRepositorySelection, selectRepositoryCheckout } from '../../../cli/repositories/registry';
4
4
  import { repositoryGitStatus } from '../../../cli/repositories/structured-git';
5
- import { appendWorkEvidence, getWorkContract, promoteWorkToRepositoryChange, updateWorkContract } from '../../../../packages/kernel/work/api/index';
6
- import { controllerSessionPrincipalId, getControllerSession } from '../../../../packages/kernel/controller/api/index';
7
- import { isTerminalWorkContractStatus } from '../facade/types';
5
+ import { appendWorkEvidence, getWorkContract, promoteWorkToRepositoryChange, recordWorkEvidenceState, semanticWorkState } from '../../../../packages/kernel/work/api/index';
8
6
  import { currentPermissionSnapshotVersion } from './validation';
9
7
  import { listWorkHandles, readWorkHandle, transitionWorkHandle, writeWorkHandle, type WorkHandleState } from './work-handle-store';
10
- import { inspectDirectCanonicalPreMutationReconciliation } from './direct-canonical-work-reconciliation';
8
+ import { gitIsAncestor } from './work-execution-support';
11
9
 
12
10
  export interface RepositoryWorkHandleControllerIdentity {
13
11
  sessionId: string;
@@ -46,10 +44,11 @@ export function assertCanonicalRepositoryMutationWorkHandleAvailable(input: {
46
44
  handle.workId,
47
45
  );
48
46
  // A stale physical handle cannot outlive canonical Work lifecycle authority.
49
- // Missing WorkContract evidence remains fail-closed for legacy/unreconciled
50
- // handles; only an explicit terminal status or completion receipt releases
51
- // durable canonical writer ownership.
52
- return !contract || (!isTerminalWorkContractStatus(contract.status) && !contract.completionReceipt);
47
+ // Delivery receipts are mechanical evidence only; an explicitly open Work
48
+ // continues to own its concrete mutation surface until semantic completion
49
+ // or cancellation releases that authority.
50
+ if (!contract) return false;
51
+ return semanticWorkState(contract) === 'open';
53
52
  })
54
53
  .sort((left, right) => left.workId.localeCompare(right.workId));
55
54
  if (owners.length === 0) return;
@@ -86,8 +85,9 @@ function resolveRepositoryWorkHandlePlacement(input: {
86
85
  }
87
86
 
88
87
  /**
89
- * Canonical compatibility repair for a goal-workloop Work whose durable
90
- * WorkContract exists but whose WorkHandle has not yet been materialized.
88
+ * Materialize concrete repository-mutation ownership for an optional semantic
89
+ * Work attribution. Thin Work does not classify execution kind; checkout/CAS
90
+ * placement and the WorkHandle resource fence own mutation safety.
91
91
  * Transport layers provide only the authenticated Controller identity.
92
92
  */
93
93
  export function ensureRepositoryWorkHandle(input: {
@@ -95,28 +95,35 @@ export function ensureRepositoryWorkHandle(input: {
95
95
  repository: RepositoryRecord;
96
96
  workId: string;
97
97
  identity: RepositoryWorkHandleControllerIdentity;
98
+ checkoutId?: string;
98
99
  allowEffectWork?: boolean;
99
100
  }): WorkHandleState | undefined {
100
101
  const existing = readWorkHandle(input.controllerHome, input.repository.repoId, input.workId);
101
- if (existing) return existing;
102
+ if (existing) {
103
+ if (input.checkoutId?.trim() && existing.checkoutId !== input.checkoutId.trim()) {
104
+ throw new Error(`WORK_HANDLE_PLACEMENT_CHECKOUT_MISMATCH: ${input.workId}`);
105
+ }
106
+ return existing;
107
+ }
102
108
  const contract = getWorkContract(
103
109
  { controllerHome: input.controllerHome, repoId: input.repository.repoId },
104
110
  input.workId,
105
111
  );
106
- const supportedKind = contract?.workKind === 'repository_change'
107
- || contract?.workKind === 'completed_no_change'
108
- || (input.allowEffectWork === true && (contract?.workKind === 'local_effect' || contract?.workKind === 'remote_effect'));
109
- if (!contract || !supportedKind || contract.mode !== 'goal_workloop' || !contract.checkoutId) {
110
- return undefined;
111
- }
112
+ // allowEffectWork is retained only for source compatibility while old
113
+ // repository callers cut over. workKind is no longer an execution authority.
114
+ void input.allowEffectWork;
115
+ const checkoutId = input.checkoutId?.trim() || contract?.checkoutId?.trim();
116
+ if (!contract || !checkoutId) return undefined;
112
117
  // Callers may already be scoped to the Work checkout. Re-read the unselected
113
118
  // registry record so WorkHandle source/delivery authority never mistakes an
114
- // isolated execution worktree for the canonical source checkout.
119
+ // isolated execution worktree for the canonical source checkout. Legacy
120
+ // WorkContract checkout/worktree fields remain migration-era placement hints;
121
+ // new Thin Work receives its concrete checkout from the repository target.
115
122
  const placement = resolveRepositoryWorkHandlePlacement({
116
123
  controllerHome: input.controllerHome,
117
124
  repositoryId: input.repository.repoId,
118
- checkoutId: contract.checkoutId,
119
- worktreeRef: contract.worktreeRef,
125
+ checkoutId,
126
+ worktreeRef: contract.checkoutId === checkoutId ? contract.worktreeRef : undefined,
120
127
  });
121
128
  const { registeredRepository, checkout, status, branch, managedWorktree } = placement;
122
129
  const sourceCheckoutId = registeredRepository.activeCheckoutId;
@@ -130,7 +137,7 @@ export function ensureRepositoryWorkHandle(input: {
130
137
  sessionId: input.identity.sessionId,
131
138
  principalId: input.identity.principalId,
132
139
  repositoryId: input.repository.repoId,
133
- checkoutId: contract.checkoutId,
140
+ checkoutId,
134
141
  worktreePath: checkout.canonicalRoot,
135
142
  branch,
136
143
  sourceCheckoutId,
@@ -164,7 +171,7 @@ export function reconcileRepositoryWorkHandlePlacement(input: {
164
171
  const existing = readWorkHandle(input.controllerHome, input.repositoryId, input.workId);
165
172
  if (!existing || existing.managedWorktree) return existing;
166
173
  const contract = getWorkContract({ controllerHome: input.controllerHome, repoId: input.repositoryId }, input.workId);
167
- if (!contract || contract.workKind !== 'repository_change' || contract.mode !== 'goal_workloop' || !contract.checkoutId) return existing;
174
+ if (!contract || !contract.checkoutId) return existing;
168
175
  if (contract.checkoutId !== existing.checkoutId) throw new Error(`WORK_HANDLE_PLACEMENT_CHECKOUT_MISMATCH: ${input.workId}`);
169
176
  const placement = resolveRepositoryWorkHandlePlacement({ controllerHome: input.controllerHome, repositoryId: input.repositoryId, checkoutId: contract.checkoutId, worktreeRef: contract.worktreeRef });
170
177
  if (!placement.managedWorktree) return existing;
@@ -174,58 +181,160 @@ export function reconcileRepositoryWorkHandlePlacement(input: {
174
181
  return writeWorkHandle(input.controllerHome, { ...existing, sourceCheckoutId: placement.registeredRepository.activeCheckoutId, managedWorktree: true });
175
182
  }
176
183
 
177
- function alignRepositoryMutationBase(input: {
184
+ export function assertManagedRepositoryMutationAuthority(input: {
185
+ repository: RepositoryRecord;
186
+ handle: WorkHandleState;
187
+ }): void {
188
+ if (!input.handle.managedWorktree) return;
189
+ if (input.handle.state !== 'prepared' && input.handle.state !== 'editing') {
190
+ throw new Error(`WORK_REPOSITORY_MUTATION_LIFECYCLE_INVALID: ${input.handle.workId}:${input.handle.state}`);
191
+ }
192
+ if (input.repository.activeCheckoutId !== input.handle.checkoutId) {
193
+ throw new Error(`WORK_REPOSITORY_MUTATION_CHECKOUT_MISMATCH: expected ${input.handle.checkoutId}, found ${input.repository.activeCheckoutId}`);
194
+ }
195
+ const status = repositoryGitStatus(input.repository);
196
+ if (status.branch !== input.handle.branch) {
197
+ throw new Error(`WORK_REPOSITORY_MUTATION_BRANCH_CHANGED: expected ${input.handle.branch}, found ${status.branch ?? 'detached'}`);
198
+ }
199
+ if (!input.handle.expectedHead || status.head !== input.handle.expectedHead) {
200
+ throw new Error(`WORK_REPOSITORY_MUTATION_HEAD_CHANGED: expected ${input.handle.expectedHead ?? 'missing'}, found ${status.head ?? 'missing'}`);
201
+ }
202
+ }
203
+
204
+ export function rearmFailedPreservedWorkHandle(input: {
178
205
  controllerHome: string;
179
206
  repository: RepositoryRecord;
180
207
  workId: string;
181
208
  contract: NonNullable<ReturnType<typeof getWorkContract>>;
182
209
  handle: WorkHandleState;
183
- freshlyMaterialized: boolean;
210
+ principalId: string;
211
+ sessionId: string;
184
212
  }): WorkHandleState {
185
- if (input.handle.managedWorktree || input.handle.state !== 'prepared') return input.handle;
186
- if (input.contract.phase !== 'implementation') {
187
- throw new Error(`WORK_DIRECT_PRE_MUTATION_PHASE_INVALID: ${input.workId}:${input.contract.phase}`);
213
+ const { handle } = input;
214
+ if (!handle.managedWorktree || handle.state !== 'failed') return handle;
215
+ const validationRecoverable = handle.finalization.validation === 'pending'
216
+ || handle.finalization.validation === 'failed';
217
+ if (!validationRecoverable
218
+ || handle.finalization.commit !== 'pending'
219
+ || handle.finalization.merge !== 'pending'
220
+ || handle.finalization.branchCleanup !== 'pending'
221
+ || handle.finalization.worktreeCleanup !== 'pending'
222
+ || handle.cleanupReceipt
223
+ || input.contract.completionReceipt
224
+ || input.contract.completionOutcome) {
225
+ return handle;
226
+ }
227
+ if (handle.principalId !== input.principalId) {
228
+ throw new Error(`WORK_REPOSITORY_MUTATION_PRINCIPAL_MISMATCH: ${input.workId}`);
188
229
  }
189
- if (!input.contract.checkoutId) throw new Error(`WORK_REPOSITORY_MUTATION_CHECKOUT_REQUIRED: ${input.workId}`);
190
-
191
230
  const placement = resolveRepositoryWorkHandlePlacement({
192
231
  controllerHome: input.controllerHome,
193
232
  repositoryId: input.repository.repoId,
194
- checkoutId: input.contract.checkoutId,
195
- worktreeRef: input.contract.worktreeRef,
233
+ checkoutId: handle.checkoutId,
234
+ worktreeRef: handle.worktreePath,
196
235
  });
197
- // A managed checkout has its own source lineage and does not participate in
198
- // shared-canonical target-base alignment.
199
- if (placement.managedWorktree) return input.handle;
236
+ if (!placement.managedWorktree || placement.registeredCheckout.lifecycle !== 'active') {
237
+ throw new Error(`WORK_REPOSITORY_MUTATION_FAILED_CHECKOUT_NOT_ACTIVE: ${input.workId}`);
238
+ }
239
+ if (resolve(placement.checkout.canonicalRoot) !== resolve(handle.worktreePath)
240
+ || placement.branch !== handle.branch
241
+ || (handle.expectedHead && placement.status.head !== handle.expectedHead)) {
242
+ throw new Error(`WORK_REPOSITORY_MUTATION_FAILED_CHECKOUT_OWNERSHIP_MISMATCH: ${input.workId}`);
243
+ }
244
+ if (input.contract.evidenceState === 'valid') {
245
+ recordWorkEvidenceState(
246
+ { controllerHome: input.controllerHome, repoId: input.repository.repoId },
247
+ input.workId,
248
+ 'stale',
249
+ );
250
+ }
251
+ const next = writeWorkHandle(input.controllerHome, {
252
+ ...handle,
253
+ principalId: input.principalId,
254
+ sessionId: input.sessionId,
255
+ state: 'editing',
256
+ validationRun: undefined,
257
+ validatedInputFingerprint: undefined,
258
+ failureReason: undefined,
259
+ finalization: { ...handle.finalization, validation: 'pending' },
260
+ updatedAt: new Date().toISOString(),
261
+ });
262
+ appendWorkEvidence(
263
+ { controllerHome: input.controllerHome, repoId: input.repository.repoId },
264
+ input.workId,
265
+ {
266
+ title: 'failed retained Work re-armed for same-Work mutation',
267
+ summary: `Re-armed preserved managed checkout ${handle.checkoutId} after proving the Work remained open, commit/merge/cleanup had not started, and exact checkout/path/branch/HEAD ownership still matched.`,
268
+ detailLevel: 'summary',
269
+ },
270
+ );
271
+ return next;
272
+ }
273
+
274
+ function rearmRetainedMergedWorkForMutation(input: {
275
+ controllerHome: string;
276
+ repository: RepositoryRecord;
277
+ workId: string;
278
+ contract: NonNullable<ReturnType<typeof getWorkContract>>;
279
+ handle: WorkHandleState;
280
+ }): WorkHandleState {
281
+ const { handle } = input;
282
+ if (!handle.managedWorktree || handle.state !== 'merged') return handle;
283
+ const retained = handle.terminalResourceDisposition;
284
+ if (retained?.mode !== 'retained_by_request' || retained.retainWorktree !== true || retained.retainBranch !== true) return handle;
285
+ if (semanticWorkState(input.contract) !== 'open') throw new Error(`WORK_RETAINED_REARM_SEMANTIC_STATE_INVALID: ${input.workId}`);
286
+ if (!handle.expectedHead?.trim()) throw new Error(`WORK_RETAINED_REARM_EXPECTED_HEAD_REQUIRED: ${input.workId}`);
200
287
 
201
- const targetBranch = input.handle.deliveryTargetBranch ?? placement.branch;
202
- const inspection = inspectDirectCanonicalPreMutationReconciliation({
203
- handle: input.handle,
204
- root: placement.checkout.canonicalRoot,
205
- targetBranch,
206
- status: placement.status,
207
- freshlyMaterialized: input.freshlyMaterialized,
288
+ const placement = resolveRepositoryWorkHandlePlacement({
289
+ controllerHome: input.controllerHome,
290
+ repositoryId: input.repository.repoId,
291
+ checkoutId: handle.checkoutId,
292
+ worktreeRef: input.contract.worktreeRef,
208
293
  });
209
- if (inspection.reason === 'no_target_advance') return input.handle;
210
- if (!inspection.alignable || !inspection.targetHead) {
211
- throw new Error(`WORK_DIRECT_PRE_MUTATION_RECONCILIATION_BLOCKED: ${inspection.reason}`);
294
+ if (!placement.managedWorktree || placement.registeredCheckout.lifecycle !== 'active') {
295
+ throw new Error(`WORK_RETAINED_REARM_CHECKOUT_NOT_ACTIVE: ${input.workId}`);
296
+ }
297
+ if (resolve(placement.checkout.canonicalRoot) !== resolve(handle.worktreePath) || placement.branch !== handle.branch) {
298
+ throw new Error(`WORK_RETAINED_REARM_OWNERSHIP_MISMATCH: ${input.workId}`);
299
+ }
300
+ if (!placement.status.clean) throw new Error(`WORK_RETAINED_REARM_WORKTREE_DIRTY: ${input.workId}`);
301
+ if (placement.status.head !== handle.expectedHead) {
302
+ throw new Error(`WORK_RETAINED_REARM_HEAD_CHANGED: expected ${handle.expectedHead}, found ${placement.status.head ?? 'missing'}`);
303
+ }
304
+ const sourceCheckout = selectRepositoryCheckout(
305
+ placement.registeredRepository,
306
+ handle.sourceCheckoutId ?? placement.registeredRepository.activeCheckoutId,
307
+ { allowArchived: true },
308
+ );
309
+ const targetBranch = handle.deliveryTargetBranch?.trim();
310
+ if (!targetBranch || !gitIsAncestor(sourceCheckout.canonicalRoot, handle.expectedHead, targetBranch)) {
311
+ throw new Error(`WORK_RETAINED_REARM_TARGET_CONTAINMENT_REQUIRED: ${input.workId}`);
212
312
  }
213
313
 
214
- const aligned = transitionWorkHandle(input.controllerHome, input.handle, input.handle.state, {
215
- deliveryBaseCommit: inspection.targetHead,
216
- expectedHead: inspection.targetHead,
314
+ const evidenceState = input.contract.evidenceState === 'valid' || input.contract.evidenceState === 'stale' ? 'stale' : 'partial';
315
+ if (input.contract.evidenceState !== evidenceState) recordWorkEvidenceState(
316
+ { controllerHome: input.controllerHome, repoId: input.repository.repoId }, input.workId, evidenceState,
317
+ );
318
+ const next = writeWorkHandle(input.controllerHome, {
319
+ ...handle,
320
+ state: 'editing',
321
+ terminalResourceDisposition: undefined,
322
+ validatedInputFingerprint: undefined,
323
+ validationRun: undefined,
324
+ cleanupReceipt: undefined,
217
325
  failureReason: undefined,
326
+ finalization: { validation: 'pending', commit: 'pending', merge: 'pending', branchCleanup: 'pending', worktreeCleanup: 'pending' },
218
327
  });
219
328
  appendWorkEvidence(
220
329
  { controllerHome: input.controllerHome, repoId: input.repository.repoId },
221
330
  input.workId,
222
331
  {
223
- title: 'direct canonical pre-mutation target base aligned',
224
- summary: `Before the first Work-owned repository mutation, canonical target ${targetBranch} advanced linearly ${inspection.previousDeliveryBase} -> ${inspection.targetHead} while the shared checkout remained clean. Forge advanced only deliveryBaseCommit/expectedHead; the Work remains prepared until the mutation surface proves that repository mutation actually started.`,
332
+ title: 'retained merged Work re-armed for same-Work mutation',
333
+ summary: `Re-armed retained merged Work at ${handle.expectedHead} only after proving semantic Work remains open, retained branch/worktree ownership, clean exact checkout identity, and target containment on ${targetBranch}. Prior validation/delivery authority is stale; no new Work was created.`,
225
334
  detailLevel: 'summary',
226
335
  },
227
336
  );
228
- return aligned;
337
+ return next;
229
338
  }
230
339
 
231
340
  export function markRepositoryMutationStarted(input: {
@@ -236,9 +345,7 @@ export function markRepositoryMutationStarted(input: {
236
345
  }): WorkHandleState | undefined {
237
346
  const store = { controllerHome: input.controllerHome, repoId: input.repository.repoId };
238
347
  const contract = getWorkContract(store, input.workId);
239
- if (contract?.workKind === 'local_effect' || contract?.workKind === 'remote_effect') {
240
- promoteWorkToRepositoryChange(store, input.workId);
241
- }
348
+ if (!contract) return undefined;
242
349
  const handle = readWorkHandle(input.controllerHome, input.repository.repoId, input.workId);
243
350
  if (!handle || handle.managedWorktree || handle.state !== 'prepared') return handle;
244
351
  const boundWorkId = handle.workContractId ?? handle.workId;
@@ -253,40 +360,30 @@ export function markRepositoryMutationStarted(input: {
253
360
  }
254
361
 
255
362
  /**
256
- * Upgrades an effect-only Work before the first governed repository mutation
257
- * and materializes the existing repository delivery authority. The durable
258
- * ControllerSession is the ownership source; the MCP transport session is not
259
- * allowed to become a second mutation authority.
363
+ * Materializes repository delivery authority for an optional semantic Work.
364
+ * Work is not a controller mutex or an execution-kind gate: authenticated caller
365
+ * identity is provenance while checkout/head/CAS/resource fences own mutation safety.
260
366
  */
261
367
  export function ensureRepositoryMutationWorkHandle(input: {
262
368
  controllerHome: string;
263
369
  repository: RepositoryRecord;
264
370
  workId: string;
265
371
  principalId: string;
372
+ sessionId?: string;
266
373
  deferEffectPromotion?: boolean;
267
- }): { handle: WorkHandleState; promotedFrom?: 'local_effect' | 'remote_effect' } {
374
+ }): { handle: WorkHandleState; promotedFrom?: 'investigation' | 'local_effect' | 'remote_effect' } {
268
375
  const store = { controllerHome: input.controllerHome, repoId: input.repository.repoId };
269
- let contract = getWorkContract(store, input.workId);
376
+ const contract = getWorkContract(store, input.workId);
270
377
  if (!contract) throw new Error(`WORK_NOT_FOUND: ${input.workId}`);
271
- if (isTerminalWorkContractStatus(contract.status) || contract.completionReceipt) {
378
+ if (semanticWorkState(contract) !== 'open') {
272
379
  throw new Error(`WORK_REPOSITORY_MUTATION_TERMINAL: ${input.workId}`);
273
380
  }
274
381
  const principalId = input.principalId.trim();
275
- if (!principalId) throw new Error(`WORK_CONTROLLER_AUTHENTICATED_PRINCIPAL_REQUIRED: ${input.workId}`);
276
- const owner = getControllerSession(store, input.workId);
277
- if (!owner) throw new Error(`WORK_CONTROLLER_CLAIM_REQUIRED: ${input.workId}`);
278
- if (controllerSessionPrincipalId(owner) !== principalId) {
279
- throw new Error(`WORK_CONTROLLER_OWNERSHIP_MISMATCH: ${input.workId}`);
280
- }
382
+ if (!principalId) throw new Error(`WORK_AUTHENTICATED_PRINCIPAL_REQUIRED: ${input.workId}`);
383
+ const provenanceSessionId = input.sessionId?.trim() || `sessionless:${principalId}`;
281
384
 
282
- let mutationCheckoutId = contract.checkoutId;
283
- if (!mutationCheckoutId) {
284
- if (contract.worktreeRef?.trim()) {
285
- throw new Error(`WORK_REPOSITORY_MUTATION_CHECKOUT_REQUIRED: ${input.workId}`);
286
- }
287
- mutationCheckoutId = input.repository.activeCheckoutId;
288
- contract = updateWorkContract(store, input.workId, { checkoutId: mutationCheckoutId });
289
- }
385
+ const mutationCheckoutId = contract.checkoutId?.trim() || input.repository.activeCheckoutId;
386
+ if (!mutationCheckoutId) throw new Error(`WORK_REPOSITORY_MUTATION_CHECKOUT_REQUIRED: ${input.workId}`);
290
387
  assertCanonicalRepositoryMutationWorkHandleAvailable({
291
388
  controllerHome: input.controllerHome,
292
389
  repositoryId: input.repository.repoId,
@@ -294,54 +391,44 @@ export function ensureRepositoryMutationWorkHandle(input: {
294
391
  workId: input.workId,
295
392
  });
296
393
 
297
- let promotedFrom: 'local_effect' | 'remote_effect' | undefined;
298
- if (contract.workKind === 'local_effect' || contract.workKind === 'remote_effect') {
299
- promotedFrom = contract.workKind;
300
- if (input.deferEffectPromotion !== true) {
301
- contract = promoteWorkToRepositoryChange(store, input.workId);
302
- }
303
- }
304
- if (contract.workKind !== 'repository_change' && input.deferEffectPromotion !== true) {
305
- throw new Error(`WORK_REPOSITORY_MUTATION_KIND_INVALID: ${input.workId}:${contract.workKind}`);
306
- }
394
+ // deferEffectPromotion is a compatibility input from the retired Work-kind
395
+ // lifecycle. Repository mutation is now admitted by the concrete target fence.
396
+ void input.deferEffectPromotion;
307
397
 
308
- const existingHandle = readWorkHandle(input.controllerHome, input.repository.repoId, input.workId);
309
398
  let handle = ensureRepositoryWorkHandle({
310
399
  controllerHome: input.controllerHome,
311
400
  repository: input.repository,
312
401
  workId: input.workId,
313
- identity: { sessionId: owner.sessionId, principalId },
314
- allowEffectWork: input.deferEffectPromotion === true,
402
+ identity: { sessionId: provenanceSessionId, principalId },
403
+ checkoutId: mutationCheckoutId,
404
+ allowEffectWork: true,
315
405
  });
316
406
  if (!handle) throw new Error(`WORK_REPOSITORY_MUTATION_HANDLE_REQUIRED: ${input.workId}`);
317
- handle = alignRepositoryMutationBase({
407
+ handle = rearmFailedPreservedWorkHandle({
318
408
  controllerHome: input.controllerHome,
319
409
  repository: input.repository,
320
410
  workId: input.workId,
321
411
  contract,
322
412
  handle,
323
- freshlyMaterialized: !existingHandle,
413
+ principalId,
414
+ sessionId: provenanceSessionId,
324
415
  });
325
- return { handle, ...(promotedFrom ? { promotedFrom } : {}) };
326
- }
327
-
328
- /**
329
- * Rebinds the durable WorkHandle to the Controller session that has already
330
- * been admitted by the ControllerSession authority. The compare-and-swap
331
- * revision on the read handle preserves fail-closed concurrent ownership.
332
- */
333
- export function rebindRepositoryWorkHandleControllerIdentity(input: {
334
- controllerHome: string;
335
- repositoryId: string;
336
- workId: string;
337
- identity: RepositoryWorkHandleControllerIdentity;
338
- }): WorkHandleState | undefined {
339
- const existing = readWorkHandle(input.controllerHome, input.repositoryId, input.workId);
340
- if (!existing) return undefined;
341
- if (existing.principalId === input.identity.principalId && existing.sessionId === input.identity.sessionId) return existing;
342
- return writeWorkHandle(input.controllerHome, {
343
- ...existing,
344
- principalId: input.identity.principalId,
345
- sessionId: input.identity.sessionId,
416
+ handle = rearmRetainedMergedWorkForMutation({
417
+ controllerHome: input.controllerHome,
418
+ repository: input.repository,
419
+ workId: input.workId,
420
+ contract,
421
+ handle,
346
422
  });
423
+ assertManagedRepositoryMutationAuthority({ repository: input.repository, handle });
424
+ // This is the first point at which concrete repository mutation has passed
425
+ // the exact WorkHandle checkout, ownership, and managed-worktree fences.
426
+ // WorkContract remains the sole writer for its semantic classification.
427
+ const promotedFrom = contract.workKind === 'investigation'
428
+ || contract.workKind === 'local_effect'
429
+ || contract.workKind === 'remote_effect'
430
+ ? contract.workKind
431
+ : undefined;
432
+ promoteWorkToRepositoryChange(store, input.workId);
433
+ return promotedFrom ? { handle, promotedFrom } : { handle };
347
434
  }
@@ -1,10 +1,11 @@
1
1
  import { randomUUID } from 'crypto';
2
2
  import { existsSync } from 'fs';
3
3
  import { join } from 'path';
4
- import { repositoryControllerRoot } from '../../../cli/repositories/controller-home';
4
+ import { scopedOperationRoot } from '../../../cli/repositories/controller-home';
5
5
  import { readJsonFile, sanitizeFileComponent } from '../../shared/json-files';
6
6
  import type { ProcessCheckExecutionIdentity } from '../../evidence/process-check-execution';
7
- import { listControlPlaneRecords, mutateControlPlaneRecord, readOrImportControlPlaneRecord, writeControlPlaneRecord } from '../persistence/sqlite-store';
7
+ import { listControlPlaneRecords, listControlPlaneRecordsWithinTransaction, mutateControlPlaneRecord, readControlPlaneRecordWithinTransaction, readOrImportControlPlaneRecord, writeControlPlaneRecord, writeControlPlaneRecordWithinTransaction } from '../persistence/sqlite-store';
8
+ import { updateWorkContractPlacementAtomically } from '../../../../packages/kernel/work/api/index';
8
9
 
9
10
  export const WORK_HANDLE_STATES = [
10
11
  'prepared',
@@ -227,7 +228,7 @@ export function resolveWorkDeliveryTargetBranch(
227
228
  }
228
229
 
229
230
  function workHandlePath(controllerHome: string, handle: Pick<WorkHandleState, 'repositoryId' | 'workId'>): string {
230
- return join(repositoryControllerRoot(controllerHome, handle.repositoryId), 'work-handles', `${sanitizeFileComponent(handle.workId)}.json`);
231
+ return join(scopedOperationRoot(controllerHome, handle.repositoryId), 'work-handles', `${sanitizeFileComponent(handle.workId)}.json`);
231
232
  }
232
233
 
233
234
  function now(): string {
@@ -304,6 +305,9 @@ function updateValidationIndexMembership(
304
305
  validating: boolean,
305
306
  ): void {
306
307
  const existing = readValidationIndex(controllerHome, repositoryId);
308
+ // The index describes pending validation membership, not WorkHandle activity.
309
+ // Other lifecycle writes do not change its membership or need an index CAS.
310
+ if (existing && existing.workIds.includes(workId) === validating) return;
307
311
  if (!existing) {
308
312
  // The WorkHandle write is already durable. Rebuild once from authoritative
309
313
  // handles so legacy repositories establish an exact index without a scan
@@ -376,6 +380,71 @@ export function writeWorkHandle(controllerHome: string, handle: WorkHandleState)
376
380
  return { ...record.value, recordRevision: record.revision };
377
381
  }
378
382
 
383
+ /**
384
+ * Atomically rebind the one existing execution handle and its Kernel Work
385
+ * placement. The application service already proved exact Git ancestry and
386
+ * clean exclusive target; this store owns only the two-record CAS mutation.
387
+ */
388
+ export function relocateWorkHandlePlacementAtomically(
389
+ controllerHome: string,
390
+ prior: WorkHandleState,
391
+ target: { checkoutId: string; root: string; branch: string; head: string },
392
+ ): WorkHandleState {
393
+ const moved: WorkHandleState = {
394
+ ...prior, checkoutId: target.checkoutId, worktreePath: target.root, branch: target.branch,
395
+ expectedHead: target.head, managedWorktree: true,
396
+ validationRun: undefined, validatedInputFingerprint: undefined,
397
+ finalization: { validation: 'pending', commit: 'pending', merge: 'pending', branchCleanup: 'pending', worktreeCleanup: 'pending' },
398
+ };
399
+ updateWorkContractPlacementAtomically({ controllerHome, repoId: prior.repositoryId }, prior.workId, {
400
+ checkoutId: target.checkoutId,
401
+ worktreeRef: target.root,
402
+ executionPlacement: { schemaVersion: 1, repositoryId: prior.repositoryId, checkoutId: target.checkoutId },
403
+ worktreePolicy: { required: true, reason: 'Explicit identity-preserving managed checkout relocation', ref: target.root },
404
+ }, (database, updatedContract) => {
405
+ if (updatedContract.checkoutId !== moved.checkoutId) throw new Error('WORK_RELOCATION_TRANSACTION_CONTRACT_MISMATCH');
406
+ const row = readControlPlaneRecordWithinTransaction<WorkHandleState>(
407
+ database, 'execution_work_handle', prior.repositoryId, prior.workId,
408
+ );
409
+ if (!row || row.revision !== prior.recordRevision || row.value.checkoutId !== prior.checkoutId
410
+ || row.value.expectedHead !== prior.expectedHead) {
411
+ throw new Error('WORK_RELOCATION_HANDLE_CAS_CONFLICT');
412
+ }
413
+ const competing = listControlPlaneRecordsWithinTransaction<WorkHandleState>(database, {
414
+ namespace: 'execution_work_handle', scope: prior.repositoryId, limit: 5000,
415
+ }).some((entry) => entry.value.workId !== prior.workId && entry.value.checkoutId === target.checkoutId
416
+ && entry.value.state !== 'cleaned');
417
+ if (competing) throw new Error('WORK_RELOCATION_TARGET_OWNED');
418
+ const { recordRevision: _revision, ...persisted } = moved;
419
+ writeControlPlaneRecordWithinTransaction(database, {
420
+ namespace: 'execution_work_handle', scope: prior.repositoryId, key: prior.workId,
421
+ schemaVersion: 1, expectedRevision: row.revision,
422
+ value: { ...persisted, updatedAt: new Date().toISOString() },
423
+ action: 'work_handle_checkout_relocated',
424
+ });
425
+ });
426
+ const refreshed = readWorkHandle(controllerHome, prior.repositoryId, prior.workId);
427
+ if (!refreshed || refreshed.checkoutId !== target.checkoutId) throw new Error('WORK_RELOCATION_COMMIT_NOT_VERIFIED');
428
+ return refreshed;
429
+ }
430
+
431
+ /**
432
+ * Refresh legacy controller identity fields as provenance only. Repository
433
+ * mutation authority remains WorkHandle CAS plus concrete checkout/resource fences.
434
+ */
435
+ export function rebindWorkHandleControllerIdentity(
436
+ controllerHome: string,
437
+ handle: WorkHandleState,
438
+ identity: { principalId: string; sessionId: string },
439
+ ): WorkHandleState {
440
+ if (handle.principalId === identity.principalId && handle.sessionId === identity.sessionId) return handle;
441
+ return writeWorkHandle(controllerHome, {
442
+ ...handle,
443
+ principalId: identity.principalId,
444
+ sessionId: identity.sessionId,
445
+ });
446
+ }
447
+
379
448
  const TRANSITIONS: Record<WorkHandleStateName, readonly WorkHandleStateName[]> = {
380
449
  prepared: ['editing', 'validating', 'committed', 'failed', 'failed_terminal_cleanup'],
381
450
  editing: ['validating', 'committed', 'merged', 'failed', 'failed_terminal_cleanup'],
@@ -404,47 +473,6 @@ export function transitionWorkHandle(
404
473
  });
405
474
  }
406
475
 
407
- export interface WorkHandleSuccessorAdoption {
408
- candidateHead: string;
409
- targetHead: string;
410
- }
411
-
412
- /**
413
- * Explicit WorkHandle authority transition for a conflict-repaired managed
414
- * candidate. Git lineage/scope/cleanliness must be proven by the finalizer
415
- * before this transition is called. Adopting a rewritten candidate never
416
- * transfers validation implicitly: the new source identity must obtain exact
417
- * verification/review authority before delivery can resume.
418
- */
419
- export function adoptWorkHandleSuccessorCandidate(
420
- controllerHome: string,
421
- handle: WorkHandleState,
422
- adoption: WorkHandleSuccessorAdoption,
423
- ): WorkHandleState {
424
- const candidateHead = adoption.candidateHead.trim();
425
- const targetHead = adoption.targetHead.trim();
426
- if (!handle.managedWorktree) throw new Error('WORK_SUCCESSOR_ADOPTION_MANAGED_CHECKOUT_REQUIRED');
427
- if (!candidateHead || !targetHead) throw new Error('WORK_SUCCESSOR_ADOPTION_REVISION_REQUIRED');
428
- if (candidateHead === handle.expectedHead) throw new Error('WORK_SUCCESSOR_ADOPTION_NO_CHANGE');
429
- return transitionWorkHandle(controllerHome, handle, 'validating', {
430
- deliveryBaseCommit: targetHead,
431
- expectedHead: candidateHead,
432
- failureReason: undefined,
433
- finalization: {
434
- ...handle.finalization,
435
- validation: 'pending',
436
- commit: 'done',
437
- merge: 'pending',
438
- branchCleanup: 'pending',
439
- worktreeCleanup: 'pending',
440
- failureCode: undefined, lastError: undefined,
441
- },
442
- validationRun: undefined,
443
- validatedInputFingerprint: undefined,
444
- cleanupReceipt: undefined,
445
- });
446
- }
447
-
448
476
  export function markWorkHandleFailed(controllerHome: string, handle: WorkHandleState, reason: string): WorkHandleState {
449
477
  return writeWorkHandle(controllerHome, {
450
478
  ...handle,