@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
@@ -1,4 +1,5 @@
1
1
  import { createHash } from 'crypto';
2
+ import { resolve } from 'path';
2
3
  import { controllerCheckExecutionIdentity, listControllerChecks, readLatestControllerCheckEvidence } from '../../../cli/controller/check-runner';
3
4
  import { repositoryGitStatus } from '../../../cli/repositories/structured-git';
4
5
  import type { RepositoryRecord } from '../../../cli/repositories/types';
@@ -6,20 +7,26 @@ import {
6
7
  DEFAULT_WORK_CHECK_LEASE_WAIT_MS,
7
8
  checkRequiresDurableWorkflow,
8
9
  getProcessRecord,
10
+ isManagedProcessActive,
11
+ listProcessRecords,
9
12
  processCheckCompletionReceipt,
10
13
  readPersistedCheckResultReceipt,
11
14
  runPersistedCheckViaProcessRuntime,
12
15
  } from '../../execution/process-runtime';
13
- import { classifyPersistedCheckTerminalEvidence } from '../../execution/process-runtime/check-result';
16
+ import { projectTerminalCheckVerification } from '../../execution/process-runtime/check-result';
14
17
  import { buildCheckExecutionSchedule } from '../../execution/process-runtime/check-scheduling';
15
18
  import { ingestCheckCompletionGraceProcess } from '../persistence/operational-prior-store';
16
19
  import { buildFacadeResult } from '../facade/facade-result';
17
20
  import { classifyVerificationOutcome, normalizeCheckIds } from '../facade/check-normalization';
18
- import { verifyGoalWorkloop } from '../facade/goal-workloop';
21
+ import { recordWorkCheckEvidence } from './work-check-evidence';
19
22
  import type { FacadeResult, VerificationRecord, WorkContract } from '../facade/types';
23
+
20
24
  import { executionIdentityForRepository } from './execution-identity';
21
25
  import { commandFingerprint, effectiveVerificationEvidence, verificationInputFingerprint, workspaceValidationFingerprint } from './verification-evidence';
22
26
  import { resolveWorkVerificationContext } from './work-verification-context';
27
+ import { listWorkBoundRepositoryProcessEvidence } from './work-process-evidence';
28
+ import { changedPaths as workChangedPaths, changedPathsFromUnbornBase } from './work-revision-diff';
29
+ import { readWorkHandle, workDeliveryBaseRevision } from './work-handle-store';
23
30
 
24
31
  export interface ExecuteWorkVerificationInput {
25
32
  controllerHome: string;
@@ -30,13 +37,13 @@ export interface ExecuteWorkVerificationInput {
30
37
  timeoutMs?: number;
31
38
  interactiveWaitMs?: number;
32
39
  leaseWaitMs?: number;
40
+ /** Exact terminal generic Check Processes to reconcile into this Work. */
41
+ reconcileProcessIds?: readonly string[];
33
42
  simulate?: {
34
43
  infrastructureFailed?: boolean;
35
44
  checkFailed?: boolean;
36
45
  skipped?: boolean;
37
46
  };
38
- /** Caller-supplied exact ownership proof for durable-class checks. */
39
- allowDurableCheckExecution?: (input: { work: WorkContract; checkId: string }) => boolean;
40
47
  }
41
48
 
42
49
  export interface ExecuteWorkVerificationResult {
@@ -48,6 +55,94 @@ function result(facade: FacadeResult, isError = false): ExecuteWorkVerificationR
48
55
  return { facade, isError };
49
56
  }
50
57
 
58
+ /**
59
+ * Derive the exact current implementation paths for the canonical Work
60
+ * verifier. Review admission cannot rely on Work scope evidence alone: a
61
+ * committed candidate in a managed checkout has no dirty-path signal, while
62
+ * a target-only advance must not become part of the Work candidate.
63
+ */
64
+ function trustedWorkspaceChangedPaths(input: {
65
+ controllerHome: string;
66
+ repository: RepositoryRecord;
67
+ work: WorkContract;
68
+ verificationStatus: ReturnType<typeof repositoryGitStatus>;
69
+ }): string[] {
70
+ const sourceRevision = input.verificationStatus.head;
71
+ const handle = readWorkHandle(input.controllerHome, input.repository.repoId, input.work.workId);
72
+ const deliveryBaseRevision = workDeliveryBaseRevision(handle ?? {}) ?? input.work.baseRevision;
73
+ const committedPaths = deliveryBaseRevision && sourceRevision
74
+ ? input.work.repositoryBaseState === 'unborn'
75
+ ? changedPathsFromUnbornBase(input.repository.canonicalRoot, sourceRevision)
76
+ : workChangedPaths(input.repository.canonicalRoot, deliveryBaseRevision, sourceRevision)
77
+ : input.work.scopeEvidence?.actualChangedPaths ?? [];
78
+ return [...new Set([
79
+ ...committedPaths,
80
+ ...input.verificationStatus.staged,
81
+ ...input.verificationStatus.unstaged,
82
+ ...input.verificationStatus.untracked,
83
+ ])].map((path) => path.trim()).filter(Boolean).sort();
84
+ }
85
+
86
+ function currentReusableVerificationRecord(input: {
87
+ workContract?: WorkContract;
88
+ checkId: string;
89
+ sourceRevision?: string;
90
+ workspaceFingerprint: string;
91
+ requestedChecks: string[];
92
+ }): VerificationRecord | undefined {
93
+ if (!input.workContract || !input.sourceRevision) return undefined;
94
+ return effectiveVerificationEvidence(input.workContract.checkRefs, {
95
+ sourceRevision: input.sourceRevision,
96
+ workspaceFingerprint: input.workspaceFingerprint,
97
+ checkId: input.checkId,
98
+ requestedChecks: input.requestedChecks,
99
+ }).find((entry) =>
100
+ entry.current
101
+ && (entry.record.outcome === 'valid_pass' || entry.record.outcome === 'valid_fail')
102
+ && Boolean(entry.record.receipt)
103
+ )?.record;
104
+ }
105
+
106
+ function reusedVerificationResult(
107
+ record: VerificationRecord,
108
+ input: {
109
+ workContract?: WorkContract;
110
+ sourceRevision?: string;
111
+ workspaceFingerprint: string;
112
+ workspaceChangedPaths?: readonly string[];
113
+ } = { workspaceFingerprint: '' },
114
+ reconciledProcessIds: string[] = [],
115
+ ): ExecuteWorkVerificationResult {
116
+ const receipt = record.receipt!;
117
+ const passed = record.outcome === 'valid_pass';
118
+ // Reused verification is durable evidence only. It never derives a Work next step.
119
+ void input.workContract;
120
+ void input.sourceRevision;
121
+ void input.workspaceFingerprint;
122
+ void input.workspaceChangedPaths;
123
+ return result(buildFacadeResult({
124
+ status: passed ? 'ok' : 'failed',
125
+ summary: `Reused exact current verification receipt for ${record.checkId}; no Process was re-executed.`,
126
+ data: {
127
+ verification: {
128
+ checkId: record.checkId,
129
+ outcome: record.outcome,
130
+ isAcceptanceFailure: !passed,
131
+ isInfrastructureIssue: false,
132
+ executed: false,
133
+ completed: true,
134
+ reused: true,
135
+ processId: receipt.processId,
136
+ processStatus: receipt.runtimeStatus,
137
+ ok: passed,
138
+ evidenceReceiptId: receipt.receiptId,
139
+ reconciledProcessIds,
140
+ },
141
+ },
142
+ rawAvailable: false,
143
+ }), !passed);
144
+ }
145
+
51
146
  export interface ContentEquivalentWorkVerificationTransferPlan {
52
147
  transferredRecords: VerificationRecord[];
53
148
  reusableCheckIds: string[];
@@ -164,6 +259,204 @@ function boundedCheckSchedulingPayload(schedule: ReturnType<typeof buildCheckExe
164
259
  * Every member still executes through executeWorkVerification so Work snapshot,
165
260
  * Failure Contract, VerificationRecord, and lifecycle semantics stay singular.
166
261
  */
262
+ export interface ReconcileTerminalWorkVerificationsResult {
263
+ repository?: RepositoryRecord;
264
+ verificationStatus?: ReturnType<typeof repositoryGitStatus>;
265
+ sourceRevision?: string;
266
+ workspaceFingerprint?: string;
267
+ reconciledProcessIds: string[];
268
+ workBoundProcessEvidenceIds: string[];
269
+ }
270
+
271
+ /**
272
+ * Reconcile terminal Work-bound verification Processes into canonical Work
273
+ * verification authority. MCP/other adapters may consume the resulting exact
274
+ * repository/content identity, but Process scanning, semantic fingerprint
275
+ * matching, receipt construction, terminal projection, and Work verification
276
+ * mutation remain owned here.
277
+ */
278
+ export function reconcileTerminalWorkVerifications(input: {
279
+ controllerHome: string;
280
+ repository: RepositoryRecord;
281
+ workId: string;
282
+ /** Explicit Process ids are required for generic run_check evidence. */
283
+ reconcileProcessIds?: readonly string[];
284
+ }): ReconcileTerminalWorkVerificationsResult {
285
+ const resolved = resolveWorkVerificationContext({
286
+ controllerHome: input.controllerHome,
287
+ repository: input.repository,
288
+ workId: input.workId,
289
+ });
290
+ if (!resolved.ok) return { reconciledProcessIds: [], workBoundProcessEvidenceIds: [] };
291
+ const { store, workContract, repository, checks: availableChecks } = resolved.context;
292
+ if (!workContract || workContract.completionReceipt) return { reconciledProcessIds: [], workBoundProcessEvidenceIds: [] };
293
+
294
+ const verificationStatus = repositoryGitStatus(repository);
295
+ const sourceRevision = verificationStatus.head ?? undefined;
296
+ if (!sourceRevision) return { repository, verificationStatus, reconciledProcessIds: [], workBoundProcessEvidenceIds: [] };
297
+ const workspaceFingerprint = workspaceValidationFingerprint(repository.canonicalRoot, verificationStatus);
298
+ const workspaceChangedPaths = trustedWorkspaceChangedPaths({
299
+ controllerHome: input.controllerHome,
300
+ repository,
301
+ work: workContract,
302
+ verificationStatus,
303
+ });
304
+ const workBoundProcessEvidenceIds = (
305
+ workContract.workKind === 'local_effect'
306
+ || (workContract.workKind === 'repository_change' && workContract.checks.length === 0)
307
+ )
308
+ ? listWorkBoundRepositoryProcessEvidence({
309
+ controllerHome: input.controllerHome,
310
+ repoId: input.repository.repoId,
311
+ checkoutId: repository.activeCheckoutId,
312
+ workId: input.workId,
313
+ }).map((evidence) => evidence.processId)
314
+ : [];
315
+ const seenChecks = new Set<string>();
316
+ const reconciledProcessIds: string[] = [];
317
+ const explicitProcessIds = new Set(
318
+ (input.reconcileProcessIds ?? [])
319
+ .map((processId) => processId.trim())
320
+ .filter(Boolean)
321
+ .slice(0, 32),
322
+ );
323
+ const recordsById = new Map(
324
+ listProcessRecords(input.controllerHome, input.repository.repoId, 500).map((record) => [record.processId, record] as const),
325
+ );
326
+ // An explicitly named Process may be older than the bounded recent scan.
327
+ // Fetching that one exact id preserves bounded reads without treating an
328
+ // arbitrary caller-supplied receipt as authority.
329
+ for (const processId of explicitProcessIds) {
330
+ if (!recordsById.has(processId)) {
331
+ const record = getProcessRecord(input.controllerHome, input.repository.repoId, processId);
332
+ if (record) recordsById.set(processId, record);
333
+ }
334
+ }
335
+ const candidates = [...recordsById.values()].filter((record) => {
336
+ const workSnapshot = (
337
+ record.workId === input.workId
338
+ && record.checkoutId === repository.activeCheckoutId
339
+ && !isManagedProcessActive(record)
340
+ && record.origin?.workVerificationSnapshot === true
341
+ && typeof record.origin?.checkId === 'string'
342
+ && typeof record.origin?.requestSemanticFingerprint === 'string'
343
+ );
344
+ if (workSnapshot) return true;
345
+ if (!explicitProcessIds.has(record.processId)) return false;
346
+
347
+ // Generic run_check records have no Work owner. They are eligible only
348
+ // when the caller names the exact terminal Process and the record proves
349
+ // the same repository/checkout, canonical checkout root, checkout-scoped
350
+ // Check execution, and check surface. The persisted semantic result is
351
+ // validated below before any Work mutation.
352
+ const executionIdentity = record.executionIdentity;
353
+ return (
354
+ record.repoId === repository.repoId
355
+ && record.checkoutId === repository.activeCheckoutId
356
+ && record.workId == null
357
+ && !isManagedProcessActive(record)
358
+ && record.origin?.surface === 'check'
359
+ && typeof record.origin?.checkId === 'string'
360
+ && executionIdentity?.repositoryId === repository.repoId
361
+ && executionIdentity.checkoutId === repository.activeCheckoutId
362
+ && resolve(executionIdentity.canonicalRoot) === resolve(repository.canonicalRoot)
363
+ && record.checkExecution?.reuseScope === 'checkout'
364
+ && record.checkExecution.scopeKey === `checkout:${repository.activeCheckoutId}`
365
+ );
366
+ });
367
+
368
+ for (const record of candidates) {
369
+ const checkId = record.origin?.checkId?.trim() ?? '';
370
+ if (!checkId || seenChecks.has(checkId)) continue;
371
+ seenChecks.add(checkId);
372
+ const classified = classifyVerificationOutcome({ checkId, available: availableChecks });
373
+ if (classified.outcome === 'invalid_check_id' || !classified.normalizedCheckId) continue;
374
+ const normalizedCheckId = classified.normalizedCheckId;
375
+ const requestedChecks = workContract.checks.length ? workContract.checks : [normalizedCheckId];
376
+ const currentFingerprint = verificationInputFingerprint({
377
+ sourceRevision,
378
+ workspaceFingerprint,
379
+ checkId: normalizedCheckId,
380
+ requestedChecks,
381
+ });
382
+ const workSnapshot = record.workId === input.workId && record.origin?.workVerificationSnapshot === true;
383
+ if (workSnapshot && (record.origin?.requestSemanticFingerprint !== currentFingerprint || !record.checkExecution)) continue;
384
+ if (!workSnapshot) {
385
+ const recordedExecution = record.checkExecution;
386
+ if (!recordedExecution) continue;
387
+ const currentExecution = controllerCheckExecutionIdentity(repository.canonicalRoot, normalizedCheckId);
388
+ if (
389
+ currentExecution.cacheKey !== recordedExecution.cacheKey
390
+ || currentExecution.revision !== recordedExecution.revision
391
+ || currentExecution.definitionDigest !== recordedExecution.definitionDigest
392
+ || currentExecution.environmentFingerprint !== recordedExecution.environmentFingerprint
393
+ || currentExecution.timeoutMs !== recordedExecution.timeoutMs
394
+ || currentExecution.reuseScope !== recordedExecution.reuseScope
395
+ ) continue;
396
+ const structuredReceipt = readPersistedCheckResultReceipt(record.origin?.checkResultReceiptPath);
397
+ if (
398
+ !structuredReceipt
399
+ || structuredReceipt.checkId !== normalizedCheckId
400
+ || structuredReceipt.cacheKey !== recordedExecution.cacheKey
401
+ || structuredReceipt.validatedRevision !== recordedExecution.revision
402
+ ) continue;
403
+ }
404
+ const checkExecution = record.checkExecution;
405
+ if (!checkExecution) continue;
406
+
407
+ try {
408
+ const receipt = processCheckCompletionReceipt(record, {
409
+ repoId: repository.repoId,
410
+ checkoutId: repository.activeCheckoutId,
411
+ workId: input.workId,
412
+ checkId: normalizedCheckId,
413
+ processId: record.processId,
414
+ requestId: record.origin?.requestId,
415
+ checkExecution: {
416
+ cacheKey: checkExecution.cacheKey,
417
+ revision: checkExecution.revision,
418
+ definitionDigest: checkExecution.definitionDigest,
419
+ environmentFingerprint: checkExecution.environmentFingerprint,
420
+ timeoutMs: checkExecution.timeoutMs,
421
+ scopeKey: checkExecution.scopeKey,
422
+ },
423
+ });
424
+ if (workContract.checkRefs.some((entry) => entry.receipt?.receiptId === receipt.receiptId)) continue;
425
+
426
+ const legacyEvidence = record.origin?.checkResultReceiptPath
427
+ ? undefined
428
+ : readLatestControllerCheckEvidence(repository.canonicalRoot, normalizedCheckId);
429
+ const projection = projectTerminalCheckVerification(record, normalizedCheckId, receipt, { legacyEvidence });
430
+ recordWorkCheckEvidence({
431
+ store,
432
+ workId: input.workId,
433
+ checkId: normalizedCheckId,
434
+ availableChecks,
435
+ sourceRevision,
436
+ workspaceFingerprint,
437
+ verificationInputFingerprint: currentFingerprint,
438
+ commandFingerprint: commandFingerprint(normalizedCheckId, receipt.commandId),
439
+ receipt,
440
+ infrastructureFailed: projection.isInfrastructureIssue,
441
+ checkFailed: projection.isAcceptanceFailure,
442
+ });
443
+ reconciledProcessIds.push(record.processId);
444
+ } catch {
445
+ // Exact receipt/process identity is mandatory. Any malformed, stale, or
446
+ // mismatched terminal Process remains non-authoritative and is ignored.
447
+ }
448
+ }
449
+
450
+ return {
451
+ repository,
452
+ verificationStatus,
453
+ sourceRevision,
454
+ workspaceFingerprint,
455
+ reconciledProcessIds,
456
+ workBoundProcessEvidenceIds,
457
+ };
458
+ }
459
+
167
460
  export async function executeWorkVerificationBatch(input: ExecuteWorkVerificationBatchInput): Promise<ExecuteWorkVerificationResult> {
168
461
  const workId = input.workId?.trim() ?? '';
169
462
  const requestedCheckIds = [...new Set(input.checkIds.map((value) => value.trim()).filter(Boolean))];
@@ -337,20 +630,14 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
337
630
  }), true);
338
631
  }
339
632
 
340
- const workloopCtx = {
341
- workStore: store,
342
- handoffStore: store,
343
- repoId: input.repository.repoId,
344
- availableChecks: checks,
345
- };
346
- if (workId && (!workContract || workContract.status === 'completed' || workContract.status === 'cancelled' || workContract.status === 'failed')) {
347
- const facade = verifyGoalWorkloop(workloopCtx, { workId, checkId });
633
+ if (workId && (!workContract || workContract.semanticState !== 'open')) {
634
+ const facade = recordWorkCheckEvidence({ store, workId, checkId, availableChecks: checks });
348
635
  return result(facade, facade.status === 'failed');
349
636
  }
350
637
 
351
638
  const classified = classifyVerificationOutcome({ checkId, available: checks });
352
639
  if (classified.outcome === 'invalid_check_id') {
353
- if (workId) return result(verifyGoalWorkloop(workloopCtx, { workId, checkId }));
640
+ if (workId) return result(recordWorkCheckEvidence({ store, workId, checkId, availableChecks: checks }));
354
641
  return result(buildFacadeResult({
355
642
  status: 'ok',
356
643
  summary: classified.summary,
@@ -384,9 +671,11 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
384
671
  },
385
672
  }), input.simulate.checkFailed === true);
386
673
  }
387
- const facade = verifyGoalWorkloop(workloopCtx, {
674
+ const facade = recordWorkCheckEvidence({
675
+ store,
388
676
  workId,
389
677
  checkId: classified.normalizedCheckId ?? checkId,
678
+ availableChecks: checks,
390
679
  infrastructureFailed: input.simulate.infrastructureFailed === true,
391
680
  checkFailed: input.simulate.checkFailed === true,
392
681
  skipped: input.simulate.skipped === true,
@@ -399,6 +688,14 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
399
688
  const verificationStatus = repositoryGitStatus(verificationRepository);
400
689
  const observedGitHead = verificationStatus.head;
401
690
  const workspaceFingerprint = workspaceValidationFingerprint(verificationRepository.canonicalRoot, verificationStatus);
691
+ const workspaceChangedPaths = workContract
692
+ ? trustedWorkspaceChangedPaths({
693
+ controllerHome: input.controllerHome,
694
+ repository: verificationRepository,
695
+ work: workContract,
696
+ verificationStatus,
697
+ })
698
+ : undefined;
402
699
  const requestedChecks = workContract?.checks.length ? workContract.checks : [normalizedCheckId];
403
700
  const verificationRequestFingerprint = observedGitHead ? verificationInputFingerprint({
404
701
  sourceRevision: observedGitHead,
@@ -406,6 +703,75 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
406
703
  checkId: normalizedCheckId,
407
704
  requestedChecks,
408
705
  }) : undefined;
706
+
707
+ const explicitReconciliationRequested = (input.reconcileProcessIds?.length ?? 0) > 0;
708
+ const currentReceipt = currentReusableVerificationRecord({
709
+ workContract: explicitReconciliationRequested ? undefined : workContract,
710
+ checkId: normalizedCheckId,
711
+ sourceRevision: observedGitHead ?? undefined,
712
+ workspaceFingerprint,
713
+ requestedChecks,
714
+ });
715
+ if (currentReceipt) {
716
+ return reusedVerificationResult(currentReceipt, {
717
+ workContract,
718
+ sourceRevision: observedGitHead ?? undefined,
719
+ workspaceFingerprint,
720
+ workspaceChangedPaths,
721
+ });
722
+ }
723
+
724
+ let reconciledProcessIds: string[] = [];
725
+ if (workContract && observedGitHead) {
726
+ const reconciled = reconcileTerminalWorkVerifications({
727
+ controllerHome: input.controllerHome,
728
+ repository: input.repository,
729
+ workId: workContract.workId,
730
+ reconcileProcessIds: input.reconcileProcessIds,
731
+ });
732
+ reconciledProcessIds = reconciled.reconciledProcessIds;
733
+ if (reconciled.reconciledProcessIds.length > 0) {
734
+ const refreshed = resolveWorkVerificationContext({
735
+ controllerHome: input.controllerHome,
736
+ repository: input.repository,
737
+ workId: workContract.workId,
738
+ });
739
+ if (refreshed.ok) {
740
+ const reconciledReceipt = currentReusableVerificationRecord({
741
+ workContract: refreshed.context.workContract,
742
+ checkId: normalizedCheckId,
743
+ sourceRevision: observedGitHead,
744
+ workspaceFingerprint,
745
+ requestedChecks,
746
+ });
747
+ if (reconciledReceipt) {
748
+ return reusedVerificationResult(reconciledReceipt, {
749
+ workContract: refreshed.context.workContract,
750
+ sourceRevision: observedGitHead,
751
+ workspaceFingerprint,
752
+ workspaceChangedPaths,
753
+ }, reconciled.reconciledProcessIds);
754
+ }
755
+ }
756
+ }
757
+ }
758
+ if (explicitReconciliationRequested) {
759
+ return result(buildFacadeResult({
760
+ status: 'blocked',
761
+ summary: 'No explicitly requested terminal Process could be reconciled into the exact Work verification authority.',
762
+ data: {
763
+ verification: {
764
+ checkId: normalizedCheckId,
765
+ outcome: 'reconciliation_not_authoritative',
766
+ isAcceptanceFailure: false,
767
+ isInfrastructureIssue: true,
768
+ reconciledProcessIds,
769
+ },
770
+ },
771
+ warnings: ['WORK_VERIFY_RECONCILIATION_NOT_AUTHORIZED: Forge did not re-execute the Check after explicit reconciliation failed.'],
772
+ }), true);
773
+ }
774
+
409
775
  const registeredCheck = checks.find((entry) => entry.id === normalizedCheckId);
410
776
  const durableClassCheck = checkRequiresDurableWorkflow(registeredCheck);
411
777
  const allowDurableCheckExecution = Boolean(
@@ -413,8 +779,7 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
413
779
  && workContract
414
780
  && workContract.checks.includes(normalizedCheckId)
415
781
  && !workContract.completionReceipt
416
- && workContract.status === 'running'
417
- && input.allowDurableCheckExecution?.({ work: workContract, checkId: normalizedCheckId }),
782
+ && workContract.dispatchState === 'running',
418
783
  );
419
784
 
420
785
  const executed = await runPersistedCheckViaProcessRuntime({
@@ -431,11 +796,8 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
431
796
  requestSemanticFingerprint: verificationRequestFingerprint,
432
797
  workId: workId || undefined,
433
798
  commandId: input.requestId,
434
- verificationSnapshot: workContract ? {
435
- workId: workContract.workId,
436
- allowedPaths: workContract.allowedPaths,
437
- forbiddenPaths: workContract.forbiddenPaths,
438
- } : undefined,
799
+ // A Work has semantic scope and evidence, not a mutable path fence.
800
+ // Candidate snapshot ownership is supplied only by a bound EditSession.
439
801
  allowDurableCheckExecution,
440
802
  });
441
803
 
@@ -453,14 +815,7 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
453
815
  observedGitHead,
454
816
  },
455
817
  },
456
- suggestedNextActions: workId ? [{
457
- label: 'Continue Work with the durable check requirement',
458
- tool: 'rh_work',
459
- operation: 'continue',
460
- payload: { work_id: workId },
461
- risk: 'workspace_write',
462
- confidence: 'high',
463
- }] : [],
818
+ suggestedNextActions: [],
464
819
  }), true);
465
820
  }
466
821
 
@@ -517,14 +872,10 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
517
872
  const legacyEvidence = record.origin?.checkResultReceiptPath
518
873
  ? undefined
519
874
  : readLatestControllerCheckEvidence(verificationRepository.canonicalRoot, normalizedCheckId);
520
- const evidenceState = classifyPersistedCheckTerminalEvidence(record, normalizedCheckId, { legacyEvidence });
521
- const failureClass = evidenceState.failureClass;
522
- const infrastructureFailed = receipt.timedOut
523
- || receipt.cancelled
524
- || evidenceState.state !== 'matched'
525
- || (!receipt.ok && failureClass !== 'acceptance_failure');
526
- const checkFailed = !receipt.ok && !infrastructureFailed;
527
- if (receipt.ok && evidenceState.state === 'matched') {
875
+ const projection = projectTerminalCheckVerification(record, normalizedCheckId, receipt, { legacyEvidence });
876
+ const infrastructureFailed = projection.isInfrastructureIssue;
877
+ const checkFailed = projection.isAcceptanceFailure;
878
+ if (projection.outcome === 'valid_pass') {
528
879
  try {
529
880
  ingestCheckCompletionGraceProcess({
530
881
  controllerHome: input.controllerHome,
@@ -538,17 +889,18 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
538
889
  }
539
890
  const commonVerification = {
540
891
  checkId: normalizedCheckId,
541
- outcome: infrastructureFailed ? 'infrastructure_failure' : receipt.ok ? 'valid_pass' : 'valid_fail',
542
- isAcceptanceFailure: checkFailed,
543
- isInfrastructureIssue: infrastructureFailed,
892
+ outcome: projection.outcome,
893
+ isAcceptanceFailure: projection.isAcceptanceFailure,
894
+ isInfrastructureIssue: projection.isInfrastructureIssue,
544
895
  executed: true,
545
896
  completed: true,
546
897
  processId: receipt.processId,
547
898
  processStatus: receipt.runtimeStatus,
548
- ok: receipt.ok,
899
+ ok: projection.outcome === 'valid_pass',
900
+ processOk: receipt.ok,
549
901
  timedOut: receipt.timedOut,
550
902
  cancelled: receipt.cancelled,
551
- failureClass: infrastructureFailed ? 'infrastructure_failure' : failureClass,
903
+ failureClass: projection.failureClass,
552
904
  deduplicated: handle.deduplicated === true,
553
905
  semanticDeduplicated: handle.semanticDeduplicated === true,
554
906
  checkContentRevision: receipt.checkRevision,
@@ -557,19 +909,21 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
557
909
  evidenceArtifactPath: record.origin?.workVerificationSnapshot ? undefined : receipt.artifactPath,
558
910
  evidenceReceiptId: receipt.receiptId,
559
911
  checkResultReceiptId: structuredCheckResult?.receiptId,
560
- ...(evidenceState.failureEvidence ? { failureEvidence: evidenceState.failureEvidence } : {}),
912
+ ...(projection.evidence.failureEvidence ? { failureEvidence: projection.evidence.failureEvidence } : {}),
561
913
  verificationIsolation: record.origin?.workVerificationSnapshot ? 'work_snapshot' : 'shared_checkout',
562
- boundedStatus: receipt.ok ? 'pass' : infrastructureFailed ? 'infrastructure_failure' : 'fail',
563
- evidenceState: evidenceState.state,
564
- ...(evidenceState.infrastructureReason ? { infrastructureReason: evidenceState.infrastructureReason } : {}),
914
+ boundedStatus: projection.boundedStatus,
915
+ evidenceState: projection.evidence.state,
916
+ ...(projection.infrastructureReason ? { infrastructureReason: projection.infrastructureReason } : {}),
565
917
  ...(record.error?.code ? { processErrorCode: record.error.code } : {}),
566
918
  };
567
919
 
568
920
  if (workId) {
569
921
  const sourceRevision = observedGitHead ?? undefined;
570
- const facade = verifyGoalWorkloop(workloopCtx, {
922
+ const facade = recordWorkCheckEvidence({
923
+ store,
571
924
  workId,
572
925
  checkId: normalizedCheckId,
926
+ availableChecks: checks,
573
927
  sourceRevision,
574
928
  workspaceFingerprint,
575
929
  verificationInputFingerprint: sourceRevision ? verificationRequestFingerprint : undefined,
@@ -588,7 +942,7 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
588
942
  },
589
943
  },
590
944
  warnings: infrastructureFailed
591
- ? [...facade.warnings, evidenceState.warning ?? 'infrastructure_failure is distinct from acceptance failure']
945
+ ? [...facade.warnings, projection.evidence.warning ?? 'infrastructure_failure is distinct from acceptance failure']
592
946
  : facade.warnings,
593
947
  }, facade.status === 'failed');
594
948
  }
@@ -601,15 +955,17 @@ export async function executeWorkVerification(input: ExecuteWorkVerificationInpu
601
955
  ? `Check ${normalizedCheckId} passed with persisted Process evidence.`
602
956
  : `Check ${normalizedCheckId} failed acceptance.`,
603
957
  data: { verification: commonVerification },
604
- warnings: infrastructureFailed ? [evidenceState.warning ?? 'infrastructure_failure is distinct from acceptance failure'] : [],
958
+ warnings: infrastructureFailed ? [projection.evidence.warning ?? 'infrastructure_failure is distinct from acceptance failure'] : [],
605
959
  rawAvailable: false,
606
960
  }), checkFailed);
607
961
  } catch (error) {
608
962
  const message = error instanceof Error ? error.message : String(error);
609
963
  if (workId) {
610
- const facade = verifyGoalWorkloop(workloopCtx, {
964
+ const facade = recordWorkCheckEvidence({
965
+ store,
611
966
  workId,
612
967
  checkId: classified.normalizedCheckId ?? checkId,
968
+ availableChecks: checks,
613
969
  infrastructureFailed: true,
614
970
  });
615
971
  return result({
@@ -18,7 +18,7 @@ import {
18
18
  import { dirname, join, resolve, sep } from 'path';
19
19
  import { spawnSync } from 'child_process';
20
20
  import { repositoryControllerRoot } from '../../../cli/repositories/controller-home';
21
- import { globMatches, normalizeMcpRelativePath } from '../../../cli/mcp/paths';
21
+ import { globMatches, normalizeMcpRelativePath } from '../../../../adapters/mcp/paths';
22
22
  import { sanitizeFileComponent } from '../../shared/json-files';
23
23
  import { measureReclaimablePath, RUNTIME_LIFECYCLE_RETENTION_POLICY_VERSION } from '../lifecycle-retention-metrics';
24
24
 
@@ -138,7 +138,11 @@ export function cleanupStaleWorkVerificationSnapshots(
138
138
  return report;
139
139
  }
140
140
  for (const entry of entries) {
141
- if (!entry.isDirectory() || !entry.name.startsWith('snapshot-')) continue;
141
+ // The canonical root is the ownership boundary. Historical producers did
142
+ // not all use the snapshot-* prefix, so name shape must not make stale
143
+ // physical evidence invisible. Dirent.isDirectory() deliberately excludes
144
+ // symlinks before any recursive removal is considered.
145
+ if (!entry.isDirectory()) continue;
142
146
  if (report.inspected >= maxEntries) { report.truncated = true; skip('scan_budget_exhausted'); break; }
143
147
  report.inspected += 1;
144
148
  const path = join(root, entry.name);