@moretea-labs/forge 1.7.1 → 1.8.0

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 (685) hide show
  1. package/AGENTS.md +58 -62
  2. package/CHANGELOG.md +39 -0
  3. package/CLAUDE.md +42 -62
  4. package/README.md +2 -2
  5. package/SKILL.md +0 -1
  6. package/THIRD_PARTY_NOTICES.md +5 -2
  7. package/adapters/browser/index.ts +2 -0
  8. package/adapters/chatgpt/browser-delivery-host.ts +71 -0
  9. package/adapters/chatgpt/browser-delivery-runtime.ts +783 -0
  10. package/adapters/chatgpt/controller-binding-store.ts +55 -0
  11. package/adapters/chatgpt/controller-host.ts +119 -0
  12. package/adapters/chatgpt/controller-round-host.ts +78 -0
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +45 -0
  14. package/adapters/chatgpt/provider-delivery.ts +113 -0
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +192 -0
  16. package/adapters/chatgpt/wsl-bridge-delivery-host.ts +63 -0
  17. package/adapters/computer/desktop-operator-contract.ts +7 -0
  18. package/adapters/computer/desktop-operator-discovery.ts +201 -0
  19. package/adapters/computer/desktop-operator-negotiation.ts +174 -0
  20. package/adapters/computer/desktop-operator-provider.ts +312 -0
  21. package/adapters/computer/index.ts +1 -0
  22. package/adapters/computer/interaction-target-authority.ts +944 -0
  23. package/adapters/controller-process/binding-store.ts +34 -0
  24. package/adapters/controller-process/controller-host.ts +26 -0
  25. package/adapters/mcp/access-mode.ts +132 -0
  26. package/adapters/mcp/audit.ts +32 -0
  27. package/adapters/mcp/auth.ts +407 -0
  28. package/adapters/mcp/controller-round-compatibility.ts +184 -0
  29. package/adapters/mcp/frozen-client-semantic-compatibility.ts +292 -0
  30. package/adapters/mcp/instructions.ts +36 -0
  31. package/adapters/mcp/legacy-context.ts +18 -0
  32. package/adapters/mcp/multi-repository.ts +437 -0
  33. package/adapters/mcp/oauth.ts +391 -0
  34. package/adapters/mcp/paths.ts +140 -0
  35. package/adapters/mcp/policy.ts +232 -0
  36. package/adapters/mcp/proxy-env.ts +62 -0
  37. package/adapters/mcp/readiness-projection.ts +24 -0
  38. package/adapters/mcp/redaction.ts +21 -0
  39. package/adapters/mcp/repo.ts +24 -0
  40. package/adapters/mcp/runtime-gateway/artifact-adapter.ts +52 -0
  41. package/adapters/mcp/runtime-gateway/context-adapter.ts +829 -0
  42. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +191 -0
  43. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +147 -0
  44. package/adapters/mcp/runtime-gateway/execution-control-adapter.ts +28 -0
  45. package/adapters/mcp/runtime-gateway/execution-tools.ts +207 -0
  46. package/adapters/mcp/runtime-gateway/filesystem-adapter.ts +38 -0
  47. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +411 -0
  48. package/adapters/mcp/runtime-gateway/legacy-ios-tool-adapter.ts +105 -0
  49. package/adapters/mcp/runtime-gateway/maintenance-adapter.ts +44 -0
  50. package/adapters/mcp/runtime-gateway/model-adapter.ts +63 -0
  51. package/adapters/mcp/runtime-gateway/persisted-check-process.ts +3 -0
  52. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +308 -0
  53. package/adapters/mcp/runtime-gateway/process-tools.ts +289 -0
  54. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +76 -0
  55. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +268 -0
  56. package/adapters/mcp/runtime-gateway/recovery-client-adapter.ts +70 -0
  57. package/adapters/mcp/runtime-gateway/recovery-tool-contract.ts +99 -0
  58. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +110 -0
  59. package/adapters/mcp/runtime-gateway/result-adapter.ts +108 -0
  60. package/adapters/mcp/runtime-gateway/router.ts +728 -0
  61. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1251 -0
  62. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +634 -0
  63. package/adapters/mcp/runtime-gateway/runtime-tool-shared.ts +27 -0
  64. package/adapters/mcp/runtime-gateway/runtime-tools.ts +68 -0
  65. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +186 -0
  66. package/adapters/mcp/runtime-gateway/shared-adapter.ts +25 -0
  67. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +870 -0
  68. package/adapters/mcp/runtime-gateway/work-adapter.ts +3186 -0
  69. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +502 -0
  70. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +1 -0
  71. package/adapters/mcp/server.ts +1048 -0
  72. package/adapters/mcp/setup.ts +791 -0
  73. package/adapters/mcp/tool-capability-cache.ts +87 -0
  74. package/adapters/mcp/tool-mapping/access-tools.ts +387 -0
  75. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +5265 -0
  76. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +150 -0
  77. package/adapters/mcp/tool-mapping/repository-tools.ts +1691 -0
  78. package/adapters/mcp/tool-mapping/tools.ts +9 -0
  79. package/adapters/mcp/tool-mapping/umbrella-tools.ts +117 -0
  80. package/adapters/mcp/toolset-names.ts +74 -0
  81. package/adapters/mcp/toolset-selection.ts +41 -0
  82. package/adapters/mcp/toolset.ts +336 -0
  83. package/adapters/mcp/transports/http.ts +1456 -0
  84. package/adapters/mcp/transports/session-registry.ts +513 -0
  85. package/adapters/mcp/transports/stdio.ts +8 -0
  86. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +139 -0
  87. package/adapters/mcp/types.ts +41 -0
  88. package/assets/AGENTS.md +2 -16
  89. package/assets/CLAUDE.md +2 -16
  90. package/assets/hooks/AGENTS.md +3 -14
  91. package/assets/hooks/CLAUDE.md +3 -14
  92. package/assets/hooks/hook-input.sh +9 -2
  93. package/assets/hooks/lib/workflow-state.sh +28 -10
  94. package/assets/hooks/prompt-guard.sh +63 -37
  95. package/assets/hooks/security-sentinel.sh +2 -1
  96. package/assets/hooks/session-start-context.sh +7 -5
  97. package/assets/hooks/stop-orchestrator.sh +13 -3
  98. package/assets/initializer-question-pack.v4.json +11 -7
  99. package/assets/partials/05-workflow.partial.md +18 -73
  100. package/assets/partials/07-footer.partial.md +1 -1
  101. package/assets/partials-agents/02-operating-mode.partial.md +1 -2
  102. package/assets/partials-agents/04-task-protocol.partial.md +14 -59
  103. package/assets/partials-agents/06-quality-safety.partial.md +11 -16
  104. package/assets/partials-agents/08-deep-docs.partial.md +1 -2
  105. package/assets/plan-map.json +11 -11
  106. package/assets/plugin-registry.v1.json +9 -3
  107. package/assets/plugin-trust-policy.v1.json +6 -0
  108. package/assets/recovery/ForgeRecovery.ps1 +100 -0
  109. package/assets/recovery/forge-wsl-rescue +271 -0
  110. package/assets/reference-configs/development-protocol.md +11 -15
  111. package/assets/reference-configs/document-generation.md +1 -1
  112. package/assets/reference-configs/global-working-rules.md +9 -1
  113. package/assets/reference-configs/harness-overview.md +22 -112
  114. package/assets/reference-configs/hook-operations.md +1 -1
  115. package/assets/reference-configs/sprint-contracts.md +2 -2
  116. package/assets/skill-version.json +2 -2
  117. package/assets/templates/helpers/architecture-event.ts +3 -34
  118. package/assets/templates/helpers/architecture-queue.sh +61 -10
  119. package/assets/templates/helpers/archive-workflow.sh +90 -180
  120. package/assets/templates/helpers/capability-config.ts +8 -11
  121. package/assets/templates/helpers/capability-resolver.ts +37 -19
  122. package/assets/templates/helpers/capture-plan.sh +2 -2
  123. package/assets/templates/helpers/check-architecture-sync.sh +1 -9
  124. package/assets/templates/helpers/check-task-sync.sh +82 -11
  125. package/assets/templates/helpers/check-task-workflow.sh +1 -3
  126. package/assets/templates/helpers/context-contract-sync.sh +1 -12
  127. package/assets/templates/helpers/contract-worktree.sh +26 -24
  128. package/assets/templates/helpers/ensure-task-workflow.sh +6 -8
  129. package/assets/templates/helpers/inspect-project-state.ts +1 -1
  130. package/assets/templates/helpers/migrate-project-template.sh +1 -1
  131. package/assets/templates/helpers/migrate-workflow-docs.ts +53 -239
  132. package/assets/templates/helpers/new-plan.sh +2 -2
  133. package/assets/templates/helpers/plan-to-todo.sh +3 -31
  134. package/assets/templates/helpers/sprint-backlog.sh +1 -1
  135. package/assets/templates/helpers/switch-plan.sh +1 -1
  136. package/assets/templates/helpers/workflow-contract.ts +1 -0
  137. package/assets/workflow-contract.v1.json +63 -171
  138. package/assets/workflows/xiaohongshu/xiaohongshu.collect-metrics.v1.draft.json +118 -0
  139. package/assets/workflows/xiaohongshu/xiaohongshu.publish-image-note.v1.draft.json +316 -0
  140. package/assets/workflows/xiaohongshu/xiaohongshu.publish-long-text.v1.draft.json +324 -0
  141. package/docs/architecture/CURRENT.md +148 -13
  142. package/docs/architecture/EVOLUTION.md +13 -0
  143. package/docs/architecture/decisions/20260801-controller-home-sqlite-state.md +2 -1
  144. package/docs/architecture/decisions/20260831-independent-windows-wsl-host-rescue.md +59 -0
  145. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +120 -0
  146. package/docs/architecture/decisions/20260904-repository-runtime-data-boundary.md +42 -0
  147. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +35 -0
  148. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +296 -0
  149. package/docs/architecture/decisions/20260907-maintenance-diagnosis-bounded-read.md +39 -0
  150. package/docs/architecture/domains/verification.md +7 -0
  151. package/docs/architecture/domains/workflow-engine.md +1 -1
  152. package/docs/architecture/index.md +3 -3
  153. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +19 -8
  154. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +124 -0
  155. package/docs/forge-chatgpt-mcp-setup.md +5 -3
  156. package/docs/forge-plugin-management.md +20 -4
  157. package/docs/forge-runtime-self-healing-loop.md +2 -0
  158. package/docs/operations/benchmark-cross-version-freeze.md +38 -0
  159. package/docs/operations/controller-browser-plugin.md +3 -1
  160. package/docs/operations/homebrew.md +2 -2
  161. package/docs/operations/platform-support.md +16 -8
  162. package/docs/operations/platform-support.zh-CN.md +2 -2
  163. package/docs/operations/standalone-disaster-recovery.md +26 -1
  164. package/docs/operations/uu-remote-rescue.md +41 -0
  165. package/docs/operations/windows-wsl-host-rescue.md +133 -0
  166. package/docs/public-usage-guide.md +1 -1
  167. package/docs/public-usage-guide.zh-CN.md +1 -1
  168. package/docs/tutorials/01-install-and-start.md +1 -1
  169. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  170. package/docs/tutorials/02-connect-chatgpt.md +4 -4
  171. package/docs/tutorials/02-connect-chatgpt.zh-CN.md +4 -4
  172. package/docs/wiki/Implementation.md +1 -1
  173. package/package.json +23 -14
  174. package/packages/kernel/controller/api/index.ts +2 -0
  175. package/packages/kernel/controller/application/controller-round-service.ts +29 -0
  176. package/packages/kernel/controller/application/controller-service.ts +30 -0
  177. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +308 -0
  178. package/packages/kernel/controller/domain/controller-round.ts +107 -0
  179. package/packages/kernel/controller/domain/execution-quality.ts +133 -0
  180. package/packages/kernel/controller/domain/types.ts +56 -0
  181. package/packages/kernel/controller/index.ts +1 -0
  182. package/packages/kernel/controller/infrastructure/controller-binding-store.ts +84 -0
  183. package/packages/kernel/controller/infrastructure/controller-round-store.ts +1384 -0
  184. package/packages/kernel/controller/infrastructure/controller-session-store.ts +578 -0
  185. package/packages/kernel/controller/ports/controller-host.ts +16 -0
  186. package/packages/kernel/goal/api/index.ts +1 -0
  187. package/packages/kernel/goal/domain/types.ts +40 -0
  188. package/packages/kernel/goal/index.ts +1 -0
  189. package/packages/kernel/identity/api/index.ts +5 -0
  190. package/packages/kernel/identity/application/identity-service.ts +67 -0
  191. package/packages/kernel/identity/domain/scope.ts +63 -0
  192. package/packages/kernel/identity/domain/semantic-sync.ts +81 -0
  193. package/packages/kernel/identity/domain/types.ts +44 -0
  194. package/packages/kernel/identity/domain/workspace.ts +56 -0
  195. package/packages/kernel/identity/index.ts +1 -0
  196. package/packages/kernel/identity/infrastructure/identity-store.ts +75 -0
  197. package/packages/kernel/memory/api/index.ts +5 -0
  198. package/packages/kernel/memory/application/experience-service.ts +118 -0
  199. package/packages/kernel/memory/application/outcome-service.ts +77 -0
  200. package/packages/kernel/memory/domain/experience.ts +103 -0
  201. package/packages/kernel/memory/domain/operational-prior.ts +92 -0
  202. package/packages/kernel/memory/index.ts +1 -0
  203. package/packages/kernel/progression/api/index.ts +2 -0
  204. package/packages/kernel/progression/application/projector.ts +211 -0
  205. package/packages/kernel/progression/domain/types.ts +116 -0
  206. package/packages/kernel/progression/index.ts +1 -0
  207. package/packages/kernel/scheduler/api/index.ts +6 -0
  208. package/packages/kernel/scheduler/application/continuation-service.ts +212 -0
  209. package/packages/kernel/scheduler/application/eligibility.ts +252 -0
  210. package/packages/kernel/scheduler/application/schedule-service.ts +24 -0
  211. package/packages/kernel/scheduler/application/settlement.ts +197 -0
  212. package/packages/kernel/scheduler/domain/continuation.ts +38 -0
  213. package/packages/kernel/scheduler/domain/schedule.ts +149 -0
  214. package/packages/kernel/scheduler/index.ts +1 -0
  215. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +38 -0
  216. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +785 -0
  217. package/packages/kernel/work/api/index.ts +15 -0
  218. package/packages/kernel/work/application/work-service.ts +148 -0
  219. package/packages/kernel/work/domain/admission-policy.ts +34 -0
  220. package/packages/kernel/work/domain/check-receipt.ts +43 -0
  221. package/packages/kernel/work/domain/context-closure-receipt.ts +32 -0
  222. package/packages/kernel/work/domain/engineering-contracts.ts +157 -0
  223. package/packages/kernel/work/domain/engineering-design.ts +281 -0
  224. package/packages/kernel/work/domain/engineering-profile.ts +242 -0
  225. package/packages/kernel/work/domain/execution-concurrency.ts +254 -0
  226. package/packages/kernel/work/domain/execution-snapshot.ts +33 -0
  227. package/packages/kernel/work/domain/implementation-review.ts +510 -0
  228. package/packages/kernel/work/domain/project-engineering-contract.ts +202 -0
  229. package/packages/kernel/work/domain/repository-completion-receipt.ts +73 -0
  230. package/packages/kernel/work/domain/state-machine.ts +259 -0
  231. package/packages/kernel/work/domain/types.ts +528 -0
  232. package/packages/kernel/work/index.ts +1 -0
  233. package/packages/kernel/work/infrastructure/work-contract-store.ts +1876 -0
  234. package/packages/kernel/work/ports/work-contract-store.ts +18 -0
  235. package/packages/plugin-runtime/browser/index.ts +3 -0
  236. package/packages/plugin-runtime/browser/provider-registry.ts +110 -0
  237. package/packages/plugin-runtime/browser/runtime-contract.ts +150 -0
  238. package/packages/plugin-runtime/browser/session-authority.ts +61 -0
  239. package/packages/plugin-runtime/computer/index.ts +6 -0
  240. package/packages/plugin-runtime/computer/provider-error.ts +26 -0
  241. package/packages/plugin-runtime/computer/provider-registration.ts +52 -0
  242. package/packages/plugin-runtime/computer/provider-registry.ts +63 -0
  243. package/packages/plugin-runtime/computer/provider.ts +19 -0
  244. package/packages/plugin-runtime/computer/target-authority.ts +190 -0
  245. package/packages/plugin-runtime/computer/target-persistence.ts +54 -0
  246. package/packages/plugin-runtime/external/index.ts +1 -0
  247. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +457 -0
  248. package/packages/plugin-runtime/index.ts +3 -0
  249. package/packages/protocols/browser/index.ts +1 -0
  250. package/packages/protocols/browser/session.ts +98 -0
  251. package/packages/protocols/computer/contract.ts +199 -0
  252. package/packages/protocols/computer/index.ts +1 -0
  253. package/packages/protocols/failure/contract.ts +158 -0
  254. package/packages/protocols/failure/index.ts +1 -0
  255. package/packages/protocols/handoff/index.ts +1 -0
  256. package/packages/protocols/handoff/status.ts +22 -0
  257. package/packages/protocols/mcp/execution-context.ts +11 -0
  258. package/packages/protocols/mcp/index.ts +2 -0
  259. package/packages/protocols/mcp/tool-contract.ts +42 -0
  260. package/packages/workflow-runtime/api/index.ts +2 -0
  261. package/packages/workflow-runtime/application/interpreter.ts +342 -0
  262. package/packages/workflow-runtime/domain/workflow-asset.ts +223 -0
  263. package/packages/workflow-runtime/index.ts +1 -0
  264. package/scripts/assemble-template.ts +1 -1
  265. package/scripts/benchmark-computer-hotpath.ts +255 -0
  266. package/scripts/benchmark-controller-round2.ts +54 -2
  267. package/scripts/benchmark-ios-agent-device.ts +3 -6
  268. package/scripts/benchmark-mcp-transport.ts +3 -4
  269. package/scripts/benchmark-operational-memory-activation.ts +235 -0
  270. package/scripts/benchmark-operational-shadow.ts +28 -0
  271. package/scripts/bootstrap-runtime-maintenance-recovery.sh +4 -1
  272. package/scripts/canary-chatgpt-provider-delivery.ts +97 -0
  273. package/scripts/canary-controller-semantic-wait.ts +195 -0
  274. package/scripts/canary-global-hook.sh +2 -2
  275. package/scripts/check-mcp-compatibility.ts +173 -7
  276. package/scripts/check-platform-support.mjs +28 -2
  277. package/scripts/check-public-docs.sh +1 -1
  278. package/scripts/check-release-readiness.sh +1 -1
  279. package/scripts/check-repository-hygiene.mjs +92 -0
  280. package/scripts/check-runtime-architecture.mjs +1206 -95
  281. package/scripts/check-source-duplication.mjs +9 -1
  282. package/scripts/check-tarball-install-smoke.sh +98 -15
  283. package/scripts/controller-ngrok-rotation.sh +5 -4
  284. package/scripts/create-project-dirs.sh +10 -74
  285. package/scripts/forge-local-recovery-helper.mjs +204 -0
  286. package/scripts/forge-uu-remote-rescue-helper.d.mts +31 -0
  287. package/scripts/forge-uu-remote-rescue-helper.mjs +409 -0
  288. package/scripts/forge-windows-host-recovery-helper.mjs +136 -0
  289. package/scripts/hook-shim.sh +2 -2
  290. package/scripts/init-project.sh +12 -70
  291. package/scripts/install-desktop-operator-registration.ts +4 -2
  292. package/scripts/install-independent-windows-wsl-recovery.ts +125 -0
  293. package/scripts/install-standalone-recovery.ts +122 -10
  294. package/scripts/install-uu-remote-rescue-registration.ts +74 -0
  295. package/scripts/install-windows-host-recovery-registration.ts +22 -0
  296. package/scripts/lib/controller-home-env.sh +6 -3
  297. package/scripts/lib/project-init-lib.sh +39 -582
  298. package/scripts/migrate-chatgpt-automation-schedules.ts +2 -2
  299. package/scripts/migrate-windows-wsl-controller-home.ts +306 -0
  300. package/scripts/open-source-audit-allowlist.txt +12 -1
  301. package/scripts/portability-bindings.mjs +70 -0
  302. package/scripts/run-bounded-command.mjs +55 -0
  303. package/scripts/run-bun-test-file.ts +22 -6
  304. package/scripts/run-governed-gate.ts +4 -1
  305. package/scripts/smoke-mcp-http-runtime.ts +1 -1
  306. package/scripts/smoke-runtime-recovery.ts +34 -1
  307. package/scripts/smoke-schedule-engine.ts +1 -1
  308. package/scripts/stage-runtime-release.ts +6 -1
  309. package/scripts/test-governance.ts +51 -2
  310. package/src/cli/agent-jobs/job-manager.ts +10 -1
  311. package/src/cli/chatgpt-browser/bind-server.ts +2 -1
  312. package/src/cli/chatgpt-browser/binding.ts +20 -10
  313. package/src/cli/chatgpt-browser/bridge-extension.ts +75 -0
  314. package/src/cli/chatgpt-browser/bridge-provider.ts +376 -11
  315. package/src/cli/chatgpt-browser/engine.ts +10 -11
  316. package/src/cli/chatgpt-browser/native-provider.ts +24 -83
  317. package/src/cli/chatgpt-browser/oracle-provider.ts +5 -3
  318. package/src/cli/chatgpt-browser/types.ts +1 -0
  319. package/src/cli/commands/bootstrap-control.ts +334 -0
  320. package/src/cli/commands/brain-assistant.ts +38 -0
  321. package/src/cli/commands/brain.ts +193 -40
  322. package/src/cli/commands/chatgpt.ts +127 -0
  323. package/src/cli/commands/computer.ts +437 -0
  324. package/src/cli/commands/doctor.ts +18 -1
  325. package/src/cli/commands/init-hook.ts +71 -61
  326. package/src/cli/commands/init.ts +3 -1
  327. package/src/cli/commands/mcp.ts +16 -10
  328. package/src/cli/commands/plugin.ts +38 -12
  329. package/src/cli/commands/recovery.ts +493 -80
  330. package/src/cli/commands/runtime.ts +9 -4
  331. package/src/cli/commands/setup-profile.ts +89 -39
  332. package/src/cli/commands/status.ts +2 -1
  333. package/src/cli/controller/check-runner.ts +487 -98
  334. package/src/cli/controller/context/types.ts +7 -1
  335. package/src/cli/controller/context-pack.ts +23 -3
  336. package/src/cli/controller/issue-store.ts +1 -1
  337. package/src/cli/controller/systemd-user.ts +110 -0
  338. package/src/cli/controller/types.ts +10 -70
  339. package/src/cli/controller/worklog.ts +67 -13
  340. package/src/cli/editing/edit-operation-contract.ts +92 -0
  341. package/src/cli/editing/edit-session.ts +289 -13
  342. package/src/cli/github/plugin.ts +17 -12
  343. package/src/cli/hook/route-registry.ts +3 -5
  344. package/src/cli/hook/runtime.ts +49 -3
  345. package/src/cli/index.ts +3 -0
  346. package/src/cli/local-bridge/connector-freshness.ts +2 -2
  347. package/src/cli/local-bridge/console-automations.ts +2 -2
  348. package/src/cli/local-bridge/facade-api.ts +41 -14
  349. package/src/cli/local-bridge/job-store.ts +1 -1
  350. package/src/cli/local-bridge/server.ts +24 -27
  351. package/src/cli/mcp/access-mode.ts +2 -132
  352. package/src/cli/mcp/access-tools.ts +2 -387
  353. package/src/cli/mcp/audit.ts +2 -32
  354. package/src/cli/mcp/auth.ts +2 -404
  355. package/src/cli/mcp/instructions.ts +2 -34
  356. package/src/cli/mcp/legacy-context.ts +2 -16
  357. package/src/cli/mcp/legacy-tool-service.ts +2 -5308
  358. package/src/cli/mcp/multi-repository.ts +2 -436
  359. package/src/cli/mcp/oauth.ts +2 -375
  360. package/src/cli/mcp/openai-secure-tunnel.ts +2 -0
  361. package/src/cli/mcp/paths.ts +2 -140
  362. package/src/cli/mcp/policy.ts +2 -232
  363. package/src/cli/mcp/post-finalize-work-attribution.ts +2 -150
  364. package/src/cli/mcp/proxy-env.ts +2 -62
  365. package/src/cli/mcp/readiness-projection.ts +2 -24
  366. package/src/cli/mcp/redaction.ts +2 -21
  367. package/src/cli/mcp/repo.ts +2 -24
  368. package/src/cli/mcp/repository-tools.ts +2 -1585
  369. package/src/cli/mcp/server.ts +2 -951
  370. package/src/cli/mcp/setup.ts +2 -737
  371. package/src/cli/mcp/tool-capability-cache.ts +2 -87
  372. package/src/cli/mcp/tool-contract.ts +2 -14
  373. package/src/cli/mcp/tools.ts +2 -9
  374. package/src/cli/mcp/toolset-names.ts +2 -70
  375. package/src/cli/mcp/toolset-selection.ts +2 -41
  376. package/src/cli/mcp/toolset.ts +2 -336
  377. package/src/cli/mcp/transports/AGENTS.md +1 -10
  378. package/src/cli/mcp/transports/CLAUDE.md +1 -10
  379. package/src/cli/mcp/transports/http.ts +2 -1414
  380. package/src/cli/mcp/transports/session-registry.ts +2 -490
  381. package/src/cli/mcp/transports/stdio.ts +2 -8
  382. package/src/cli/mcp/types.ts +2 -41
  383. package/src/cli/mcp/umbrella-tools.ts +2 -117
  384. package/src/cli/repositories/command-executor.ts +64 -18
  385. package/src/cli/repositories/command-scope.ts +117 -1
  386. package/src/cli/repositories/controller-home.ts +119 -1
  387. package/src/cli/repositories/identity.ts +13 -0
  388. package/src/cli/repositories/registry.ts +68 -49
  389. package/src/cli/repositories/repository-snapshot.ts +53 -7
  390. package/src/cli/repositories/runtime-storage.ts +27 -2
  391. package/src/cli/repositories/safe-patch.ts +34 -38
  392. package/src/cli/repositories/selected-path-actions.ts +22 -2
  393. package/src/cli/repositories/structured-git.ts +105 -25
  394. package/src/cli/runtime/helper-runner.ts +7 -0
  395. package/src/cli/runtime-invocation.ts +8 -1
  396. package/src/cli/tools/codegraph.ts +44 -25
  397. package/src/core/adoption/manifest-templates.ts +1 -1
  398. package/src/core/adoption/plan.ts +3 -26
  399. package/src/core/adoption/workflow-contract-plan.ts +17 -9
  400. package/src/effects/process-runner.ts +8 -14
  401. package/src/runtime/context/assistant-context.ts +154 -0
  402. package/src/runtime/context/assistant-work-context.ts +147 -0
  403. package/src/runtime/context/codegraph-cache-boundary.ts +255 -0
  404. package/src/runtime/context/codegraph-read-provider.ts +55 -22
  405. package/src/runtime/context/codegraph-sidecar.cjs +8 -1
  406. package/src/runtime/context/context-closure.ts +268 -0
  407. package/src/runtime/context/context-plane.ts +211 -0
  408. package/src/runtime/context/project-engineering-contract.ts +60 -0
  409. package/src/runtime/control-plane/bootstrap/capability-provider.ts +74 -0
  410. package/src/runtime/control-plane/bootstrap/control-api.ts +57 -0
  411. package/src/runtime/control-plane/bootstrap/index.ts +5 -0
  412. package/src/runtime/control-plane/bootstrap/state-machine.ts +141 -0
  413. package/src/runtime/control-plane/bootstrap/store.ts +21 -0
  414. package/src/runtime/control-plane/bootstrap/types.ts +87 -0
  415. package/src/runtime/control-plane/cleanup-artifact-retention.ts +328 -0
  416. package/src/runtime/control-plane/codegraph-cache-retention.ts +164 -0
  417. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +320 -0
  418. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +169 -0
  419. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +350 -0
  420. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +85 -0
  421. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +417 -100
  422. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +103 -15
  423. package/src/runtime/control-plane/execution/implementation-review-content.ts +95 -0
  424. package/src/runtime/control-plane/execution/repository-work-attribution.ts +2 -2
  425. package/src/runtime/control-plane/execution/retained-work-resume.ts +336 -6
  426. package/src/runtime/control-plane/execution/validation.ts +28 -3
  427. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +116 -0
  428. package/src/runtime/control-plane/execution/work-completion-authority.ts +44 -2
  429. package/src/runtime/control-plane/execution/work-evidence-policy.ts +34 -3
  430. package/src/runtime/control-plane/execution/work-execution-support.ts +42 -22
  431. package/src/runtime/control-plane/execution/work-finalization-service.ts +1103 -166
  432. package/src/runtime/control-plane/execution/work-handle-authority.ts +267 -16
  433. package/src/runtime/control-plane/execution/work-handle-store.ts +77 -0
  434. package/src/runtime/control-plane/execution/work-head-settlement.ts +75 -0
  435. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +145 -23
  436. package/src/runtime/control-plane/execution/work-operation-service.ts +49 -13
  437. package/src/runtime/control-plane/execution/work-preparation-service.ts +31 -15
  438. package/src/runtime/control-plane/execution/work-remote-delivery.ts +1 -1
  439. package/src/runtime/control-plane/execution/work-task-receipt.ts +20 -1
  440. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +407 -76
  441. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +88 -18
  442. package/src/runtime/control-plane/execution/work-verification-context.ts +1 -1
  443. package/src/runtime/control-plane/execution/work-verification-service.ts +258 -4
  444. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +200 -15
  445. package/src/runtime/control-plane/facade/capability-registry.ts +21 -10
  446. package/src/runtime/control-plane/facade/controller-round-relay.ts +3 -1118
  447. package/src/runtime/control-plane/facade/controller-session-store.ts +2 -488
  448. package/src/runtime/control-plane/facade/goal-workloop-access.ts +6 -3
  449. package/src/runtime/control-plane/facade/goal-workloop.ts +972 -137
  450. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +158 -0
  451. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +10 -0
  452. package/src/runtime/control-plane/facade/index.ts +4 -2
  453. package/src/runtime/control-plane/facade/operation-digest.ts +22 -58
  454. package/src/runtime/control-plane/facade/plan-contract-store.ts +1004 -38
  455. package/src/runtime/control-plane/facade/repository-work-admission.ts +19 -1
  456. package/src/runtime/control-plane/facade/requirement-authority.ts +218 -0
  457. package/src/runtime/control-plane/facade/requirement-board.ts +6 -1
  458. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +48 -0
  459. package/src/runtime/control-plane/facade/semantic-admission.ts +8 -16
  460. package/src/runtime/control-plane/facade/suggested-actions.ts +4 -1
  461. package/src/runtime/control-plane/facade/types.ts +189 -532
  462. package/src/runtime/control-plane/facade/work-admission-policy.ts +84 -35
  463. package/src/runtime/control-plane/facade/work-contract-store.ts +2 -1043
  464. package/src/runtime/control-plane/facade/work-implementation-review.ts +2 -0
  465. package/src/runtime/control-plane/facade/work-state-machine.ts +2 -250
  466. package/src/runtime/control-plane/generated-cache-retention.ts +239 -18
  467. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +12 -1
  468. package/src/runtime/control-plane/global-scheduler/maintenance.ts +76 -13
  469. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-entry.ts +55 -0
  470. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-process.ts +98 -0
  471. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -1
  472. package/src/runtime/control-plane/global-scheduler/scheduler-worker-entry.ts +10 -0
  473. package/src/runtime/control-plane/global-scheduler/scheduler.ts +173 -81
  474. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +18 -6
  475. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +397 -0
  476. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +2 -177
  477. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +301 -560
  478. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +20 -4
  479. package/src/runtime/control-plane/launcher/thin-launcher.ts +50 -4
  480. package/src/runtime/control-plane/lifecycle-retention-metrics.ts +60 -0
  481. package/src/runtime/control-plane/persistence/experience-store.ts +169 -0
  482. package/src/runtime/control-plane/persistence/operational-prior-store.ts +348 -0
  483. package/src/runtime/control-plane/persistence/requirement-store.ts +30 -22
  484. package/src/runtime/control-plane/persistence/sqlite-store.ts +545 -76
  485. package/src/runtime/control-plane/persistence/workflow-content-store.ts +98 -0
  486. package/src/runtime/control-plane/persistence/workflow-registry-store.ts +186 -0
  487. package/src/runtime/control-plane/persistence/workflow-run-store.ts +123 -0
  488. package/src/runtime/control-plane/release-retention.ts +56 -16
  489. package/src/runtime/control-plane/repository-namespace-retention.ts +208 -0
  490. package/src/runtime/control-plane/routing/route-policy.ts +19 -0
  491. package/src/runtime/control-plane/runtime-cleanup.ts +574 -37
  492. package/src/runtime/control-plane/runtime-generation.ts +6 -0
  493. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +465 -0
  494. package/src/runtime/control-plane/workspace/workspace-store.ts +80 -0
  495. package/src/runtime/diagnostics/incident-repair.ts +406 -0
  496. package/src/runtime/diagnostics/mcp-timing.ts +125 -6
  497. package/src/runtime/diagnostics/performance.ts +6 -14
  498. package/src/runtime/diagnostics/read-only-tool.ts +1 -1
  499. package/src/runtime/evidence/artifact-store.ts +65 -2
  500. package/src/runtime/evidence/operational-shadow.ts +38 -0
  501. package/src/runtime/evidence/process-check-receipt.ts +5 -43
  502. package/src/runtime/evidence/sensitive-output.ts +4 -4
  503. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -1
  504. package/src/runtime/execution/jobs/store.ts +121 -2
  505. package/src/runtime/execution/managed-workspace.ts +55 -5
  506. package/src/runtime/execution/process-runtime/canary.ts +19 -5
  507. package/src/runtime/execution/process-runtime/check-classification.ts +48 -0
  508. package/src/runtime/execution/process-runtime/check-facade.ts +23 -9
  509. package/src/runtime/execution/process-runtime/check-receipt.ts +1 -1
  510. package/src/runtime/execution/process-runtime/check-result-retention.ts +132 -0
  511. package/src/runtime/execution/process-runtime/check-result.ts +73 -2
  512. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -3
  513. package/src/runtime/execution/process-runtime/check-storage.ts +187 -0
  514. package/src/runtime/execution/process-runtime/command-facade.ts +38 -87
  515. package/src/runtime/execution/process-runtime/index.ts +1 -0
  516. package/src/runtime/execution/process-runtime/interactive-admission.ts +2 -1
  517. package/src/runtime/execution/process-runtime/lightweight-managed.ts +32 -1
  518. package/src/runtime/execution/process-runtime/persisted-check.ts +128 -21
  519. package/src/runtime/execution/process-runtime/resource-claims.ts +60 -3
  520. package/src/runtime/execution/process-runtime/runtime.ts +132 -15
  521. package/src/runtime/execution/process-runtime/types.ts +22 -0
  522. package/src/runtime/execution/workers/executor.ts +16 -13
  523. package/src/runtime/execution/workers/worker-entry.ts +1 -1
  524. package/src/runtime/gateway/mcp/execution-tools.ts +2 -207
  525. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +2 -61
  526. package/src/runtime/gateway/mcp/persisted-check-process.ts +2 -3
  527. package/src/runtime/gateway/mcp/process-tools.ts +2 -289
  528. package/src/runtime/gateway/mcp/router.ts +2 -1125
  529. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +2 -565
  530. package/src/runtime/gateway/mcp/runtime-tools.ts +2 -6651
  531. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +2 -1
  532. package/src/runtime/maintenance/cleanup.ts +38 -24
  533. package/src/runtime/platform/browser-product-discovery.ts +174 -0
  534. package/src/runtime/platform/computer-platform.ts +14 -0
  535. package/src/runtime/platform/executable-discovery.ts +54 -0
  536. package/src/runtime/platform/fetch-http-server.ts +90 -0
  537. package/src/runtime/platform/service-manager.ts +138 -0
  538. package/src/runtime/platform/windows-host-discovery.ts +118 -0
  539. package/src/runtime/platform/windows-recovery-deployment.ts +67 -0
  540. package/src/runtime/plugins/action-application.ts +135 -0
  541. package/src/runtime/plugins/app-store-connect-adapter.ts +9 -21
  542. package/src/runtime/plugins/browser-adapter.ts +140 -100
  543. package/src/runtime/plugins/browser-automation-service.ts +15 -36
  544. package/src/runtime/plugins/browser-macos-bridge.ts +69 -21
  545. package/src/runtime/plugins/browser-manifest-surface.ts +30 -6
  546. package/src/runtime/plugins/browser-native-session-service.ts +1 -1
  547. package/src/runtime/plugins/browser-provider-registry.ts +2 -109
  548. package/src/runtime/plugins/browser-registration.ts +16 -0
  549. package/src/runtime/plugins/browser-runtime-contract.ts +2 -154
  550. package/src/runtime/plugins/browser-runtime.ts +41 -9
  551. package/src/runtime/plugins/browser-session-authority.ts +101 -291
  552. package/src/runtime/plugins/browser-session-legacy-migration.ts +203 -0
  553. package/src/runtime/plugins/browser-session-store.ts +229 -36
  554. package/src/runtime/plugins/browser-session-types.ts +2 -98
  555. package/src/runtime/plugins/capability-authorization-grants.ts +17 -0
  556. package/src/runtime/plugins/catalog-trust.ts +82 -0
  557. package/src/runtime/plugins/computer-registration.ts +839 -0
  558. package/src/runtime/plugins/config-store.ts +119 -0
  559. package/src/runtime/plugins/desktop-operator-external-policy.ts +932 -0
  560. package/src/runtime/plugins/desktop-operator-registration.ts +111 -8
  561. package/src/runtime/plugins/errors.ts +8 -1
  562. package/src/runtime/plugins/external-adapter.ts +45 -322
  563. package/src/runtime/plugins/external-provider-policy.ts +48 -0
  564. package/src/runtime/plugins/external-registration.ts +9 -1
  565. package/src/runtime/plugins/external-unix-socket-probe.cjs +9 -3
  566. package/src/runtime/plugins/external-unix-socket.ts +64 -193
  567. package/src/runtime/plugins/first-party-external-registration.ts +163 -0
  568. package/src/runtime/plugins/first-party-registry.ts +3 -1
  569. package/src/runtime/plugins/github-adapter.ts +1 -2
  570. package/src/runtime/plugins/gmail-adapter.ts +6 -6
  571. package/src/runtime/plugins/google-calendar-adapter.ts +6 -6
  572. package/src/runtime/plugins/google-shared.ts +31 -46
  573. package/src/runtime/plugins/google-tasks-adapter.ts +6 -6
  574. package/src/runtime/plugins/ios-adapter.ts +1 -2
  575. package/src/runtime/plugins/local-system-adapter.ts +180 -0
  576. package/src/runtime/plugins/macos-capability-broker.ts +15 -105
  577. package/src/runtime/plugins/resend-adapter.ts +15 -24
  578. package/src/runtime/plugins/store.ts +493 -51
  579. package/src/runtime/plugins/types.ts +8 -1
  580. package/src/runtime/plugins/uu-remote-rescue-registration.ts +155 -0
  581. package/src/runtime/plugins/windows-host-recovery-install.ts +68 -0
  582. package/src/runtime/plugins/windows-host-recovery-registration.ts +85 -0
  583. package/src/runtime/plugins/xiaohongshu-publish.ts +86 -430
  584. package/src/runtime/projections/controller-context.ts +12 -6
  585. package/src/runtime/projections/git-status-sampler.ts +73 -22
  586. package/src/runtime/projections/materialized-view.ts +14 -8
  587. package/src/runtime/recovery/capability-action-application.ts +228 -0
  588. package/src/runtime/recovery/index.ts +3 -0
  589. package/src/runtime/recovery/lifecycle-inventory.ts +338 -0
  590. package/src/runtime/recovery/local-jobs-repair.ts +14 -14
  591. package/src/runtime/recovery/maintenance-executor.ts +358 -76
  592. package/src/runtime/recovery/quarantine-retention.ts +256 -0
  593. package/src/runtime/release/identity.ts +6 -0
  594. package/src/runtime/resources/leases/store.ts +1 -1
  595. package/src/runtime/root/active-execution-power-assertion.ts +139 -0
  596. package/src/runtime/root/assistant-learning-loop.ts +45 -0
  597. package/src/runtime/root/browser-session-composition.ts +59 -0
  598. package/src/runtime/root/computer-composition.ts +191 -0
  599. package/src/runtime/root/computer-target-composition.ts +16 -0
  600. package/src/runtime/root/computer-target-persistence.ts +39 -0
  601. package/src/runtime/root/controller-round-composition.ts +107 -0
  602. package/src/runtime/root/controller-services.ts +2 -0
  603. package/src/runtime/root/entry.ts +4 -3
  604. package/src/runtime/root/gateway-adapter.ts +3 -3
  605. package/src/runtime/root/local-bridge.ts +5 -2
  606. package/src/runtime/root/mcp-transport.ts +5 -5
  607. package/src/runtime/root/package-connector-service.ts +108 -56
  608. package/src/runtime/root/package-runtime-release.ts +86 -18
  609. package/src/runtime/root/package-runtime-service.ts +63 -86
  610. package/src/runtime/root/release-execution-canary.ts +71 -0
  611. package/src/runtime/root/release-loader.ts +68 -0
  612. package/src/runtime/root/release-manifest.ts +106 -2
  613. package/src/runtime/root/release-materialize.ts +103 -4
  614. package/src/runtime/root/release-store.ts +31 -2
  615. package/src/runtime/root/runtime.ts +240 -25
  616. package/src/runtime/root/scheduled-controller-composition.ts +51 -0
  617. package/src/runtime/root/scheduler.ts +12 -4
  618. package/src/runtime/root/service-runner.ts +1 -1
  619. package/src/runtime/root/service.ts +41 -16
  620. package/src/runtime/root/status.ts +1 -0
  621. package/src/runtime/root/types.ts +24 -1
  622. package/src/runtime/shared/local-bridge-surface.ts +1 -1
  623. package/src/runtime/shared/process-environment.ts +19 -4
  624. package/src/runtime/shared/storage-capacity.ts +68 -0
  625. package/src/runtime/standalone-recovery/controller-home-migration.ts +1116 -0
  626. package/src/runtime/standalone-recovery/core.ts +984 -230
  627. package/src/runtime/standalone-recovery/entry.ts +182 -51
  628. package/src/runtime/standalone-recovery/independent-host-rescue.ts +172 -0
  629. package/src/runtime/standalone-recovery/installer.ts +212 -104
  630. package/src/runtime/standalone-recovery/mcp-server.ts +243 -0
  631. package/src/runtime/standalone-recovery/mutation-identity-contract.ts +21 -0
  632. package/src/runtime/standalone-recovery/operation-lock.ts +160 -0
  633. package/src/runtime/standalone-recovery/performance.ts +135 -0
  634. package/src/runtime/standalone-recovery/release.ts +5 -0
  635. package/src/runtime/watchdog/workflow-watchdog.ts +1 -1
  636. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -1
  637. package/src/runtime/workflow/schedules/engine.ts +191 -343
  638. package/src/runtime/workflow/schedules/pending-activation.ts +1 -1
  639. package/src/runtime/workflow/schedules/settlement.ts +2 -191
  640. package/src/runtime/workflow/schedules/store.ts +2 -607
  641. package/src/runtime/workflow/schedules/types.ts +2 -127
  642. package/src/runtime/workflow/schedules/work-continuation.ts +180 -15
  643. package/src/runtime/workflows/first-party/xiaohongshu.ts +122 -0
  644. package/src/runtime/workflows/runtime.ts +486 -0
  645. package/src/testing/test-governance.ts +90 -29
  646. package/assets/templates/helpers/archive-architecture-request.sh +0 -244
  647. package/docs/architecture/history/README.md +0 -7
  648. package/docs/architecture/history/chatgpt-handoff-facade.md +0 -397
  649. package/docs/architecture/history/global-hook-runtime.md +0 -166
  650. package/docs/architecture/history/ios-semantic-automation-provider-v2.md +0 -170
  651. package/docs/architecture/requests/archive/2026/20260528-154740-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  652. package/docs/architecture/requests/archive/2026/20260528-154816-assets-hooks-assets-hooks-hook-input-sh.md +0 -59
  653. package/docs/architecture/requests/archive/2026/20260528-161851-ai-harness-workflow-contract-json-ai-harness-workflow-contract-json.md +0 -59
  654. package/docs/architecture/requests/archive/2026/20260528-161853-scripts-check-task-workflow-sh-scripts-check-task-workflow-sh.md +0 -59
  655. package/docs/architecture/requests/archive/2026/20260528-161911-assets-workflow-contract-v1-json-assets-workflow-contract-v1-json.md +0 -59
  656. package/docs/architecture/requests/archive/2026/20260528-222416-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  657. package/docs/architecture/requests/archive/2026/20260528-222444-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  658. package/docs/architecture/requests/archive/2026/20260528-222457-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  659. package/docs/architecture/requests/archive/2026/20260528-222648-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  660. package/docs/architecture/requests/archive/2026/20260528-222705-ai-hooks-ai-hooks-worktree-guard-sh.md +0 -59
  661. package/docs/architecture/requests/archive/2026/20260528-222726-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  662. package/docs/architecture/requests/archive/2026/20260528-222727-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  663. package/docs/architecture/requests/archive/2026/20260528-224736-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  664. package/docs/architecture/requests/archive/2026/20260528-233259-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  665. package/docs/architecture/requests/archive/2026/20260528-233335-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  666. package/docs/architecture/requests/archive/2026/20260528-233456-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  667. package/docs/architecture/requests/archive/2026/20260528-233457-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  668. package/docs/architecture/requests/archive/2026/20260528-233637-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  669. package/docs/architecture/requests/archive/2026/20260528-233638-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  670. package/docs/architecture/requests/archive/2026/20260529-000322-root-package-json.md +0 -59
  671. package/docs/architecture/requests/archive/2026/20260529-004238-ai-hooks-ai-hooks-lib-workflow-state-sh.md +0 -59
  672. package/docs/architecture/requests/archive/2026/20260529-020654-ai-harness-policy-json-ai-harness-policy-json.md +0 -63
  673. package/docs/architecture/requests/archive/2026/20260529-094236-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  674. package/docs/architecture/requests/archive/2026/20260529-094323-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  675. package/docs/architecture/requests/archive/2026/20260529-094331-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  676. package/docs/architecture/requests/archive/2026/20260529-094339-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  677. package/docs/architecture/requests/archive/2026/20260529-094430-assets-hooks-assets-hooks-session-start-context-sh.md +0 -60
  678. package/docs/architecture/requests/archive/2026/20260529-094446-ai-hooks-ai-hooks-session-start-context-sh.md +0 -60
  679. package/docs/architecture/requests/archive/2026/20260613-002040-runtime-harness-hook-adapters.md +0 -68
  680. package/docs/architecture/requests/archive/2026/root.md +0 -68
  681. package/docs/architecture/requests/archive/2026/runtime-harness-hook-adapters.md +0 -76
  682. package/docs/architecture/requests/archive/2026/verification-evals-checks.md +0 -68
  683. package/docs/architecture/requests/archive/2026/workflow-engine-contract-assets.md +0 -69
  684. package/scripts/archive-architecture-request.sh +0 -4
  685. package/scripts/run-skill-evals.ts +0 -1022
@@ -2,8 +2,14 @@ import { spawnSync } from 'child_process';
2
2
  import { existsSync, realpathSync } from 'fs';
3
3
  import { resolve } from 'path';
4
4
  import type { RepositoryRecord } from '../../../cli/repositories/types';
5
- import { listWorkContracts } from '../facade/work-contract-store';
5
+ import {
6
+ getWorkContract,
7
+ listWorkContracts,
8
+ readActiveWorkCandidates,
9
+ type WorkContract,
10
+ } from '../../../../packages/kernel/work/api/index';
6
11
  import { isTerminalWorkContractStatus } from '../facade/types';
12
+ import { listControlPlaneRecords } from '../persistence/sqlite-store';
7
13
  import { listWorkHandles } from './work-handle-store';
8
14
 
9
15
  export interface WorkLifecycleAttention {
@@ -14,6 +20,7 @@ export interface WorkLifecycleAttention {
14
20
 
15
21
  interface LinkedWorktree {
16
22
  path: string;
23
+ head?: string;
17
24
  branch?: string;
18
25
  }
19
26
 
@@ -55,6 +62,8 @@ function linkedWorktrees(repositoryRoot: string): LinkedWorktree[] {
55
62
  if (line.startsWith('worktree ')) {
56
63
  if (current) worktrees.push(current);
57
64
  current = { path: line.slice('worktree '.length) };
65
+ } else if (current && line.startsWith('HEAD ')) {
66
+ current.head = line.slice('HEAD '.length).trim() || undefined;
58
67
  } else if (current && line.startsWith('branch refs/heads/')) {
59
68
  current.branch = line.slice('branch refs/heads/'.length);
60
69
  }
@@ -84,9 +93,37 @@ function refReachableFromTarget(repositoryRoot: string, ref: string, targetBranc
84
93
  return undefined;
85
94
  }
86
95
 
87
- function branchIntegrated(repositoryRoot: string, branch: string, targetBranch: string): boolean | undefined {
88
- const reachable = refReachableFromTarget(repositoryRoot, branch, targetBranch);
89
- if (reachable !== false) return reachable;
96
+ const EXACT_COMMIT_REVISION = /^[0-9a-f]{40}$/i;
97
+
98
+ function reachableCommitSet(repositoryRoot: string, targetBranch: string): ReadonlySet<string> | undefined {
99
+ const output = git(repositoryRoot, ['rev-list', targetBranch]);
100
+ if (output === undefined) return undefined;
101
+ return new Set(output.split('\n').map((revision) => revision.trim()).filter(Boolean));
102
+ }
103
+
104
+ function exactCommitReachableFromTarget(
105
+ repositoryRoot: string,
106
+ ref: string,
107
+ targetBranch: string,
108
+ reachableCommits: ReadonlySet<string> | undefined,
109
+ ): boolean | undefined {
110
+ if (reachableCommits && EXACT_COMMIT_REVISION.test(ref)) return reachableCommits.has(ref);
111
+ return refReachableFromTarget(repositoryRoot, ref, targetBranch);
112
+ }
113
+
114
+ function branchIntegrated(
115
+ repositoryRoot: string,
116
+ branch: string,
117
+ targetBranch: string,
118
+ reachableCommits?: ReadonlySet<string>,
119
+ branchHead?: string,
120
+ ): boolean | undefined {
121
+ if (reachableCommits && branchHead && EXACT_COMMIT_REVISION.test(branchHead)) {
122
+ if (reachableCommits.has(branchHead)) return true;
123
+ } else {
124
+ const reachable = refReachableFromTarget(repositoryRoot, branch, targetBranch);
125
+ if (reachable !== false) return reachable;
126
+ }
90
127
 
91
128
  // Rebase/cherry-pick delivery can preserve every patch while changing ancestry.
92
129
  // Treat the branch as integrated only when Git proves it has no unique patches.
@@ -104,6 +141,59 @@ function attention(code: string, identity: string, message: string): WorkLifecyc
104
141
  return { jobId: `lifecycle:${code}:${identity}`, status: code, message };
105
142
  }
106
143
 
144
+ interface LifecycleWorkSnapshot {
145
+ contracts: WorkContract[];
146
+ invalid: Array<{ workId: string; error: string }>;
147
+ }
148
+
149
+ /**
150
+ * Keep lifecycle diagnostics available when one historical active Work row is malformed.
151
+ * Active Work semantics come only from the Kernel row-isolated projection. When that
152
+ * projection reports corruption, enumerate bounded durable identities and re-read each
153
+ * remaining row through exact Kernel authority so terminal receipt/cleanup diagnostics
154
+ * are preserved without reimplementing Work normalization here.
155
+ */
156
+ function readLifecycleWorkSnapshot(controllerHome: string, repoId: string): LifecycleWorkSnapshot {
157
+ const store = { controllerHome, repoId };
158
+ const active = readActiveWorkCandidates({ ...store, limit: 100 });
159
+ if (active.invalid.length === 0) {
160
+ return { contracts: listWorkContracts({ ...store, status: 'all', limit: 100 }), invalid: [] };
161
+ }
162
+
163
+ const contractsById = new Map(active.contracts.map((contract) => [contract.workId, contract]));
164
+ const invalidById = new Map(active.invalid.map((entry) => [entry.workId, { workId: entry.workId, error: entry.error }]));
165
+ const identities = listControlPlaneRecords<WorkContract>(controllerHome, {
166
+ namespace: 'work_contract',
167
+ scope: repoId,
168
+ limit: 5_000,
169
+ })
170
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))
171
+ .slice(0, 100);
172
+
173
+ for (const record of identities) {
174
+ const workId = record.key;
175
+ if (contractsById.has(workId) || invalidById.has(workId)) continue;
176
+ try {
177
+ const contract = getWorkContract(store, workId);
178
+ if (contract) contractsById.set(workId, contract);
179
+ } catch (error) {
180
+ invalidById.set(workId, {
181
+ workId,
182
+ error: error instanceof Error ? error.message : String(error),
183
+ });
184
+ }
185
+ }
186
+
187
+ return {
188
+ contracts: [...contractsById.values()]
189
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))
190
+ .slice(0, 100),
191
+ invalid: [...invalidById.values()]
192
+ .sort((left, right) => left.workId.localeCompare(right.workId))
193
+ .slice(0, 100),
194
+ };
195
+ }
196
+
107
197
  /**
108
198
  * Read-only reconciliation across canonical Work, WorkHandle, registry, and Git.
109
199
  * It reports contradictions and live Work through the existing Runtime projection;
@@ -113,27 +203,42 @@ export function collectWorkLifecycleAttention(
113
203
  controllerHome: string,
114
204
  repository: RepositoryRecord,
115
205
  ): WorkLifecycleAttention[] {
116
- const contracts = listWorkContracts({
117
- controllerHome,
118
- repoId: repository.repoId,
119
- status: 'all',
120
- limit: 100,
121
- });
206
+ const workSnapshot = readLifecycleWorkSnapshot(controllerHome, repository.repoId);
207
+ const contracts = workSnapshot.contracts;
122
208
  const handles = listWorkHandles(controllerHome, repository.repoId, 5_000);
123
209
  const contractsByWork = new Map(contracts.map((contract) => [contract.workId, contract]));
124
210
  const handlesByWork = new Map(handles.map((handle) => [handle.workContractId ?? handle.workId, handle]));
125
- const findings: WorkLifecycleAttention[] = [];
126
- const targetBranch = repository.defaultBranch || 'main';
211
+ const findings: WorkLifecycleAttention[] = workSnapshot.invalid.map((entry) => attention(
212
+ 'work_contract_invalid',
213
+ entry.workId,
214
+ `Work ${entry.workId} is unreadable by Kernel semantics and is excluded from valid lifecycle authority: ${entry.error.slice(0, 180)}`,
215
+ ));
216
+ const canonicalBranch = git(repository.canonicalRoot, ['branch', '--show-current'])?.trim();
217
+ const targetBranch = canonicalBranch || repository.defaultBranch || 'main';
218
+ const targetReachability = new Map<string, ReadonlySet<string> | undefined>();
219
+ const reachableFrom = (branch: string): ReadonlySet<string> | undefined => {
220
+ if (!targetReachability.has(branch)) {
221
+ targetReachability.set(branch, reachableCommitSet(repository.canonicalRoot, branch));
222
+ }
223
+ return targetReachability.get(branch);
224
+ };
127
225
 
128
226
  for (const contract of contracts) {
129
227
  const handle = handlesByWork.get(contract.workId);
130
228
  const terminal = isTerminalWorkContractStatus(contract.status);
131
229
  if (!terminal) {
132
- findings.push(attention(
133
- 'work_active',
134
- contract.workId,
135
- `Work ${contract.workId} is ${contract.status} in ${contract.phase}; continue, block with a handoff, or finalize it explicitly.`,
136
- ));
230
+ // Repository lifecycle attention is release-facing. A source-neutral Work
231
+ // (for example local UI automation) may legitimately remain active while
232
+ // an unrelated clean source candidate is released. Only source-mutating
233
+ // repository Work should make its mere liveness a release blocker; real
234
+ // structural contradictions below remain attention regardless of kind.
235
+ if (contract.workKind === 'repository_change') {
236
+ findings.push(attention(
237
+ 'work_active',
238
+ contract.workId,
239
+ `Work ${contract.workId} is ${contract.status} in ${contract.phase}; continue, block with a handoff, or finalize it explicitly.`,
240
+ ));
241
+ }
137
242
  if (contract.workKind === 'repository_change' && !handle) {
138
243
  findings.push(attention(
139
244
  'active_work_handle_missing',
@@ -161,7 +266,12 @@ export function collectWorkLifecycleAttention(
161
266
  if (contract.status === 'completed' && contract.completionReceipt?.source === 'controller_work') {
162
267
  const receiptTargetRevision = contract.completionReceipt.targetRevision?.trim();
163
268
  const receiptTargetBranch = contract.completionReceipt.targetBranch?.trim() || targetBranch;
164
- if (!receiptTargetRevision || refReachableFromTarget(repository.canonicalRoot, receiptTargetRevision, receiptTargetBranch) !== true) {
269
+ if (!receiptTargetRevision || exactCommitReachableFromTarget(
270
+ repository.canonicalRoot,
271
+ receiptTargetRevision,
272
+ receiptTargetBranch,
273
+ reachableFrom(receiptTargetBranch),
274
+ ) !== true) {
165
275
  findings.push(attention(
166
276
  'completion_receipt_target_not_integrated',
167
277
  contract.workId,
@@ -230,6 +340,14 @@ export function collectWorkLifecycleAttention(
230
340
  if (activeRegistryRoots.has(root)) continue;
231
341
  const isDirty = dirty(root);
232
342
  const handle = handleRoots.get(root);
343
+ if (isDirty === false) {
344
+ const integrated = worktree.branch
345
+ ? branchIntegrated(repository.canonicalRoot, worktree.branch, targetBranch, reachableFrom(targetBranch), worktree.head)
346
+ : worktree.head
347
+ ? exactCommitReachableFromTarget(repository.canonicalRoot, worktree.head, targetBranch, reachableFrom(targetBranch))
348
+ : undefined;
349
+ if (integrated === true) continue;
350
+ }
233
351
  const code = isDirty === true ? 'dirty_linked_worktree_unregistered' : 'linked_worktree_unregistered';
234
352
  findings.push(attention(
235
353
  code,
@@ -238,13 +356,17 @@ export function collectWorkLifecycleAttention(
238
356
  ));
239
357
  }
240
358
 
241
- const branches = git(repository.canonicalRoot, ['for-each-ref', '--format=%(refname:short)', 'refs/heads/work', 'refs/heads/codex'])
359
+ const branches = git(repository.canonicalRoot, ['for-each-ref', '--format=%(refname:short)%09%(objectname)', 'refs/heads/work', 'refs/heads/codex'])
242
360
  ?.split('\n')
243
- .map((branch) => branch.trim())
244
- .filter(Boolean) ?? [];
245
- for (const branch of branches) {
361
+ .map((line) => {
362
+ const [branch, head] = line.split('\t');
363
+ return { branch: branch?.trim() ?? '', head: head?.trim() };
364
+ })
365
+ .filter((entry) => Boolean(entry.branch)) ?? [];
366
+ const targetReachableCommits = reachableFrom(targetBranch);
367
+ for (const { branch, head } of branches) {
246
368
  if (activeBranches.has(branch) || retainedBranches.has(branch)) continue;
247
- if (branchIntegrated(repository.canonicalRoot, branch, targetBranch) !== false) continue;
369
+ if (branchIntegrated(repository.canonicalRoot, branch, targetBranch, targetReachableCommits, head) !== false) continue;
248
370
  findings.push(attention(
249
371
  'work_branch_not_integrated',
250
372
  branch,
@@ -1,11 +1,11 @@
1
1
  import { createHash, randomUUID } from 'crypto';
2
2
  import { isAbsolute, relative, resolve } from 'path';
3
- import type { MultiRepositoryMcpToolContext } from '../../../cli/mcp/multi-repository';
3
+ import type { McpExecutionContext } from '../../../../packages/protocols/mcp/execution-context';
4
4
  import { repositoryGitStatus, repositoryGitDiff } from '../../../cli/repositories/structured-git';
5
5
  import { classifyRepositoryCommand } from '../../../cli/repositories/command-classifier';
6
6
  import { listControllerChecks } from '../../../cli/controller/check-runner';
7
7
  import { readRepositoryAccessPolicy } from '../governance/access-policy';
8
- import { appendVerificationRecord } from '../facade/work-contract-store';
8
+ import { appendVerificationRecord } from '../../../../packages/kernel/work/api/index';
9
9
  import { validateWorkHandle } from './validation';
10
10
  import { commandFingerprint, effectiveVerificationEvidence, verificationInputFingerprint, workspaceValidationFingerprint, workValidationInputFingerprint } from './verification-evidence';
11
11
  import { executionIdentityForWork } from './execution-identity';
@@ -19,7 +19,7 @@ import { processCheckCompletionReceipt } from '../../execution/process-runtime/c
19
19
  import { classifyPersistedCheckTerminalEvidence } from '../../execution/process-runtime/check-result';
20
20
  import { claimProcessInvocation, getProcessRecord } from '../../execution/process-runtime/store';
21
21
  import { runPersistedCheckViaProcessRuntime } from '../../execution/process-runtime/persisted-check';
22
- import { markWorkValidationPending, projectWorkValidationOutcome } from './work-validation-reconciler';
22
+ import { markWorkValidationCurrentFromReusedEvidence, markWorkValidationPending, projectWorkValidationOutcome } from './work-validation-reconciler';
23
23
  import { assertWorkControllerOwnership, compactHandle, contractFor, gitHead, identityFor, makeBoundedWorkResult, reconcileTerminalCleanup, requireSession, terminalCleanupOutcome, workForSession } from './work-execution-support';
24
24
 
25
25
  function commandInputs(args: Record<string, unknown>): Array<Record<string, unknown>> {
@@ -38,7 +38,7 @@ function authorizationRisk(command: RepositoryCommandValue, classification: Retu
38
38
  return 'workspace_write';
39
39
  }
40
40
 
41
- export async function executeWork(ctx: MultiRepositoryMcpToolContext, args: Record<string, unknown>): Promise<Record<string, unknown>> {
41
+ export async function executeWork(ctx: McpExecutionContext, args: Record<string, unknown>): Promise<Record<string, unknown>> {
42
42
  const session = requireSession(ctx, args);
43
43
  const handle = workForSession(ctx, session, args);
44
44
  assertWorkControllerOwnership(ctx, session, handle, args);
@@ -213,7 +213,20 @@ export function selectDefaultWorkValidationChecks(
213
213
  });
214
214
  }
215
215
 
216
- export async function validateWork(ctx: MultiRepositoryMcpToolContext, args: Record<string, unknown>): Promise<Record<string, unknown>> {
216
+ export function workValidationCheckSemanticIdentity(input: {
217
+ sourceRevision: string;
218
+ workspaceFingerprint: string;
219
+ checkId: string;
220
+ requestedChecks: string[];
221
+ }): { requestSemanticFingerprint: string; verificationInputFingerprint: string } {
222
+ const fingerprint = verificationInputFingerprint(input);
223
+ return {
224
+ requestSemanticFingerprint: fingerprint,
225
+ verificationInputFingerprint: fingerprint,
226
+ };
227
+ }
228
+
229
+ export async function validateWork(ctx: McpExecutionContext, args: Record<string, unknown>): Promise<Record<string, unknown>> {
217
230
  const session = requireSession(ctx, args);
218
231
  const handle = workForSession(ctx, session, args, {
219
232
  reconcileValidation: false,
@@ -258,14 +271,29 @@ export async function validateWork(ctx: MultiRepositoryMcpToolContext, args: Rec
258
271
  resumeState: handle.state === 'committed' || handle.state === 'merged' ? handle.state : 'editing',
259
272
  processes: {},
260
273
  };
274
+ const available = new Set(listControllerChecks(validated.worktreeRepository.canonicalRoot).map((check) => check.id));
275
+ const hasReusableExactPass = (checkId: string): boolean => Boolean(contract
276
+ && available.has(checkId)
277
+ && [...effectiveVerificationEvidence(contract.checkRefs, {
278
+ sourceRevision: validationHead,
279
+ workspaceFingerprint,
280
+ checkId,
281
+ requestedChecks,
282
+ })].reverse().some((entry) => entry.current && entry.record.outcome === 'valid_pass' && Boolean(entry.record.receipt)));
283
+ const allRequestedChecksReusable = Boolean(contract) && requestedChecks.every(hasReusableExactPass);
261
284
  let current = transitionWorkHandle(ctx.controllerHome, handle, 'validating', {
262
285
  finalization: { ...handle.finalization, validation: 'pending', lastError: undefined },
263
286
  validationRun,
264
287
  });
265
- markWorkValidationPending(ctx.controllerHome, current);
266
- const available = new Set(listControllerChecks(validated.worktreeRepository.canonicalRoot).map((check) => check.id));
288
+ if (!allRequestedChecksReusable) markWorkValidationPending(ctx.controllerHome, current);
267
289
  const checks: Array<Record<string, unknown>> = [];
268
290
  for (const [index, checkId] of requestedChecks.entries()) {
291
+ const checkSemanticIdentity = workValidationCheckSemanticIdentity({
292
+ sourceRevision: validationHead,
293
+ workspaceFingerprint,
294
+ checkId,
295
+ requestedChecks,
296
+ });
269
297
  if (!available.has(checkId)) {
270
298
  checks.push({ checkId, ok: false, status: 'missing', summary: `Check not found: ${checkId}` });
271
299
  break;
@@ -301,6 +329,14 @@ export async function validateWork(ctx: MultiRepositoryMcpToolContext, args: Rec
301
329
  });
302
330
  break;
303
331
  }
332
+ if (process?.completed) {
333
+ // A completed Process may have been executed against an older Work
334
+ // verification snapshot even when the live checkout looks equivalent.
335
+ // Re-resolve the current snapshot through Process Runtime so its
336
+ // content-bound checkExecution authority decides whether the existing
337
+ // Process is reusable or a distinct execution is required.
338
+ process = undefined;
339
+ }
304
340
  if (!process) {
305
341
  const processRequestId = `${validationInvocationId}:check:${index + 1}`;
306
342
  const executed = await runPersistedCheckViaProcessRuntime({
@@ -314,6 +350,7 @@ export async function validateWork(ctx: MultiRepositoryMcpToolContext, args: Rec
314
350
  }),
315
351
  checkId,
316
352
  requestId: processRequestId,
353
+ requestSemanticFingerprint: checkSemanticIdentity.requestSemanticFingerprint,
317
354
  workId: handle.workId,
318
355
  commandId: processRequestId,
319
356
  verificationBinding: { executionSessionId: session.sessionId },
@@ -381,12 +418,7 @@ export async function validateWork(ctx: MultiRepositoryMcpToolContext, args: Rec
381
418
  recordedAt: receipt.finishedAt,
382
419
  sourceRevision: validationHead,
383
420
  workspaceFingerprint,
384
- verificationInputFingerprint: verificationInputFingerprint({
385
- sourceRevision: validationHead,
386
- workspaceFingerprint,
387
- checkId,
388
- requestedChecks,
389
- }),
421
+ verificationInputFingerprint: checkSemanticIdentity.verificationInputFingerprint,
390
422
  commandFingerprint: commandFingerprint(checkId, receipt.commandId),
391
423
  resultArtifactId: receipt.receiptId,
392
424
  startedAt: receipt.startedAt,
@@ -438,11 +470,15 @@ export async function validateWork(ctx: MultiRepositoryMcpToolContext, args: Rec
438
470
  ...(failureSummary ? { failureReason: failureSummary } : { failureReason: undefined }),
439
471
  });
440
472
  if (completed) {
473
+ if (passed && allRequestedChecksReusable) {
474
+ markWorkValidationCurrentFromReusedEvidence(ctx.controllerHome, next);
475
+ }
441
476
  projectWorkValidationOutcome(
442
477
  ctx.controllerHome,
443
478
  next,
444
479
  infrastructureFailure ? 'infrastructure_failure' : passed ? 'passed' : 'failed',
445
480
  failureSummary,
481
+ passed ? { sourceRevision: validationHead, workspaceFingerprint } : undefined,
446
482
  );
447
483
  }
448
484
  if (completed && acceptedFailure) {
@@ -1,15 +1,15 @@
1
1
  import { createHash } from 'crypto';
2
2
  import { spawnSync } from 'child_process';
3
- import type { MultiRepositoryMcpToolContext } from '../../../cli/mcp/multi-repository';
3
+ import type { McpExecutionContext } from '../../../../packages/protocols/mcp/execution-context';
4
4
  import type { RepositoryRecord } from '../../../cli/repositories/types';
5
5
  import { getRepository, resolveRepositorySelection, selectRepositoryCheckout } from '../../../cli/repositories/registry';
6
6
  import { repositoryGitStatus } from '../../../cli/repositories/structured-git';
7
7
  import { ensureManagedWorkspace } from '../../execution/managed-workspace';
8
8
  import { readRepositoryAccessPolicy } from '../governance/access-policy';
9
- import { appendWorkEvidence, getWorkContract, updateWorkContract } from '../facade/work-contract-store';
9
+ import { activateWorkContract, appendWorkEvidence, failWorkContract, getWorkContract, recordWorkEvidenceState, updateWorkContract } from '../../../../packages/kernel/work/api/index';
10
10
  import { admitPreparedRepositoryWorkContract } from '../facade/repository-work-admission';
11
11
  import { isTerminalWorkContractStatus, type WorkReconciliationRecord } from '../facade/types';
12
- import { claimControllerSession, getControllerSession, resumeControllerSession } from '../facade/controller-session-store';
12
+ import { claimControllerSession, getControllerSession, resumeControllerSession } from '../../../../packages/kernel/controller/api/index';
13
13
  import { updateExecutionSession, type ExecutionSessionContext } from './session-store';
14
14
  import { currentPermissionSnapshotVersion, validateWorkHandle } from './validation';
15
15
  import { assertExecutionIdentity, executionIdentityFromCoordinates } from './execution-identity';
@@ -25,7 +25,7 @@ function requireExplicitRepoId(args: Record<string, unknown>): string {
25
25
  return value;
26
26
  }
27
27
 
28
- function selectedRepository(ctx: MultiRepositoryMcpToolContext, session: ExecutionSessionContext, args: Record<string, unknown>, allowSession = true) {
28
+ function selectedRepository(ctx: McpExecutionContext, session: ExecutionSessionContext, args: Record<string, unknown>, allowSession = true) {
29
29
  const requested = typeof args.repo_id === 'string' && args.repo_id.trim() ? args.repo_id.trim() : undefined;
30
30
  const selectedRepoId = requested ?? (allowSession ? session.activeRepositoryId : undefined);
31
31
  if (!selectedRepoId) throw new Error('SESSION_REPOSITORY_REQUIRED: bind a repository before using this work tool');
@@ -75,7 +75,7 @@ function workPrepareFingerprint(input: {
75
75
  }
76
76
 
77
77
  function claimPreparedWorkOwnership(
78
- ctx: MultiRepositoryMcpToolContext,
78
+ ctx: McpExecutionContext,
79
79
  session: ExecutionSessionContext,
80
80
  handle: WorkHandleState,
81
81
  args: Record<string, unknown>,
@@ -96,7 +96,7 @@ function claimPreparedWorkOwnership(
96
96
  }
97
97
 
98
98
  function claimHeadAdoptionOwnership(
99
- ctx: MultiRepositoryMcpToolContext,
99
+ ctx: McpExecutionContext,
100
100
  session: ExecutionSessionContext,
101
101
  handle: WorkHandleState,
102
102
  args: Record<string, unknown>,
@@ -133,7 +133,7 @@ function claimHeadAdoptionOwnership(
133
133
  }
134
134
 
135
135
  function adoptExistingWorkHead(
136
- ctx: MultiRepositoryMcpToolContext,
136
+ ctx: McpExecutionContext,
137
137
  session: ExecutionSessionContext,
138
138
  repository: RepositoryRecord,
139
139
  handle: WorkHandleState,
@@ -251,12 +251,16 @@ function adoptExistingWorkHead(
251
251
  validatedInputFingerprint: undefined,
252
252
  });
253
253
  try {
254
- updateWorkContract({ controllerHome: ctx.controllerHome, repoId: handle.repositoryId }, contract.workId, {
255
- evidenceState: contract.checkRefs.length === 0
254
+ recordWorkEvidenceState(
255
+ { controllerHome: ctx.controllerHome, repoId: handle.repositoryId },
256
+ contract.workId,
257
+ contract.checkRefs.length === 0
256
258
  ? contract.evidenceState
257
259
  : contract.evidenceState === 'valid' || contract.evidenceState === 'stale'
258
260
  ? 'stale'
259
261
  : 'partial',
262
+ );
263
+ updateWorkContract({ controllerHome: ctx.controllerHome, repoId: handle.repositoryId }, contract.workId, {
260
264
  reconciliations: [reconciliation, ...contract.reconciliations.filter((entry) => entry.reconciliationId !== reconciliationId)],
261
265
  });
262
266
  appendWorkEvidence({ controllerHome: ctx.controllerHome, repoId: handle.repositoryId }, contract.workId, {
@@ -289,7 +293,7 @@ function adoptExistingWorkHead(
289
293
  };
290
294
  }
291
295
 
292
- function invalidateActiveWork(ctx: MultiRepositoryMcpToolContext, session: ExecutionSessionContext, reason: string): void {
296
+ function invalidateActiveWork(ctx: McpExecutionContext, session: ExecutionSessionContext, reason: string): void {
293
297
  if (!session.activeRepositoryId || !session.activeWorkId) return;
294
298
  const handle = readWorkHandle(ctx.controllerHome, session.activeRepositoryId, session.activeWorkId);
295
299
  if (!handle || handle.state === 'cleaned') return;
@@ -298,7 +302,7 @@ function invalidateActiveWork(ctx: MultiRepositoryMcpToolContext, session: Execu
298
302
  markWorkHandleFailed(ctx.controllerHome, handle, reason);
299
303
  }
300
304
 
301
- export function bindSessionRepository(ctx: MultiRepositoryMcpToolContext, args: Record<string, unknown>): Record<string, unknown> {
305
+ export function bindSessionRepository(ctx: McpExecutionContext, args: Record<string, unknown>): Record<string, unknown> {
302
306
  const session = requireSession(ctx, args);
303
307
  const repository = resolveRepositorySelection({ repoId: requireExplicitRepoId(args), checkoutId: typeof args.checkout_id === 'string' ? args.checkout_id : undefined, controllerHome: ctx.controllerHome, allowSoleRepository: false });
304
308
  const switching = session.activeRepositoryId !== undefined && (session.activeRepositoryId !== repository.repoId || session.activeCheckoutId !== repository.activeCheckoutId);
@@ -314,7 +318,7 @@ export function bindSessionRepository(ctx: MultiRepositoryMcpToolContext, args:
314
318
  return { session: next, repository: { repoId: repository.repoId, checkoutId: repository.activeCheckoutId, canonicalRoot: repository.canonicalRoot, branch: repository.checkouts.find((entry) => entry.checkoutId === repository.activeCheckoutId)?.branch ?? null }, switched: switching };
315
319
  }
316
320
 
317
- export function prepareWork(ctx: MultiRepositoryMcpToolContext, args: Record<string, unknown>): Record<string, unknown> {
321
+ export function prepareWork(ctx: McpExecutionContext, args: Record<string, unknown>): Record<string, unknown> {
318
322
  const session = requireSession(ctx, args);
319
323
  const repository = selectedRepository(ctx, session, args, true);
320
324
  if (!session.activeRepositoryId) {
@@ -392,7 +396,11 @@ export function prepareWork(ctx: MultiRepositoryMcpToolContext, args: Record<str
392
396
  };
393
397
  }
394
398
  if (existingContract.status === 'open' || existingContract.status === 'failed') {
395
- updateWorkContract({ controllerHome: ctx.controllerHome, repoId: repository.repoId }, createdWorkId, { status: 'running', worktreeRef: existingHandle.worktreePath });
399
+ activateWorkContract(
400
+ { controllerHome: ctx.controllerHome, repoId: repository.repoId },
401
+ createdWorkId,
402
+ { phase: 'implementation', summary: 'Prepared Work ownership resumed on the existing WorkHandle.', worktreeRef: existingHandle.worktreePath },
403
+ );
396
404
  }
397
405
  const delegation = createGoalDelegation({
398
406
  sessionId: session.sessionId,
@@ -467,12 +475,20 @@ export function prepareWork(ctx: MultiRepositoryMcpToolContext, args: Record<str
467
475
  cleanupResponsibility: { owner: 'work_finalizer', registeredAt: new Date().toISOString() },
468
476
  };
469
477
  writeWorkHandle(ctx.controllerHome, handle);
470
- updateWorkContract({ controllerHome: ctx.controllerHome, repoId: repository.repoId }, contract.workId, { status: 'running', worktreeRef: checkout.canonicalRoot });
478
+ activateWorkContract(
479
+ { controllerHome: ctx.controllerHome, repoId: repository.repoId },
480
+ contract.workId,
481
+ { phase: 'implementation', summary: 'Repository Work preparation completed and execution ownership is active.', worktreeRef: checkout.canonicalRoot },
482
+ );
471
483
  const nextSession = updateExecutionSession(ctx.controllerHome, identityFor(ctx, args), { activeRepositoryId: repository.repoId, activeCheckoutId: checkout.activeCheckoutId, activeWorkId: createdWorkId, permissionSnapshotVersion: policy.revision, goalDelegation: delegation, lastValidatedAt: new Date().toISOString() });
472
484
  claimPreparedWorkOwnership(ctx, nextSession, handle, args);
473
485
  return { session: nextSession, work: compactHandle(handle), reused: requestReused, isolation: workspace.mode, controllerClaimed: true };
474
486
  } catch (error) {
475
- updateWorkContract({ controllerHome: ctx.controllerHome, repoId: repository.repoId }, contract.workId, { status: 'failed' });
487
+ failWorkContract(
488
+ { controllerHome: ctx.controllerHome, repoId: repository.repoId },
489
+ contract.workId,
490
+ { phase: 'implementation', summary: `Repository Work preparation failed: ${error instanceof Error ? error.message : String(error)}` },
491
+ );
476
492
  throw error;
477
493
  }
478
494
  });
@@ -1,6 +1,6 @@
1
1
  import { spawnSync } from 'child_process';
2
2
  import type { RepositoryRecord } from '../../../cli/repositories/types';
3
- import { getWorkContract } from '../facade/work-contract-store';
3
+ import { getWorkContract } from '../../../../packages/kernel/work/api/index';
4
4
  import { isTerminalWorkContractStatus } from '../facade/types';
5
5
  import { executeRepositoryCommandViaProcessRuntime, waitRepositoryCommandProcess } from '../../execution/process-runtime/command-facade';
6
6
  import { executionIdentityForRepository } from './execution-identity';
@@ -3,7 +3,7 @@ import { spawnSync } from 'child_process';
3
3
  import { getIssue, listIssues, recordTaskVerification, acceptVerifiedTask, projectTaskFromWork } from '../../../cli/controller/issue-store';
4
4
  import { resolveCompletionTargetBranch } from '../../../cli/controller/completion-target';
5
5
  import type { CompletionReceipt, ControllerIssue } from '../../../cli/controller/types';
6
- import { getWorkContract, updateWorkContract } from '../facade/work-contract-store';
6
+ import { getWorkContract, updateWorkContract } from '../../../../packages/kernel/work/api/index';
7
7
  import { completeWorkWithReceipt } from './work-completion-authority';
8
8
  import { isRepositoryCompletionReceipt, WORK_RECONCILIATION_METHODS, WORK_RECONCILIATION_OUTCOMES } from '../facade/types';
9
9
  import type {
@@ -39,6 +39,25 @@ export function changedPaths(repoRoot: string, baseRevision: string, targetRevis
39
39
  return [...new Set(result.stdout.split('\0').filter(Boolean))].sort();
40
40
  }
41
41
 
42
+ /**
43
+ * Net tracked paths for a Work whose authoritative repository baseline was an
44
+ * unborn HEAD. The baseline is the empty repository, so every tracked path in
45
+ * the current target tree is a net implementation path. This remains correct
46
+ * after more than one commit, unlike a single-commit diff-tree comparison.
47
+ */
48
+ export function changedPathsFromUnbornBase(repoRoot: string, targetRevision: string): string[] {
49
+ const targetCommit = commitRevision(repoRoot, targetRevision, 'TARGET_REVISION');
50
+ const result = spawnSync('git', ['ls-tree', '-r', '--name-only', '-z', targetCommit], {
51
+ cwd: repoRoot,
52
+ encoding: 'utf-8',
53
+ maxBuffer: 8 * 1024 * 1024,
54
+ });
55
+ if (result.status !== 0 || result.error || typeof result.stdout !== 'string') {
56
+ throw new Error('CONTROLLER_WORK_RECEIPT_UNBORN_CHANGED_PATHS_UNAVAILABLE');
57
+ }
58
+ return [...new Set(result.stdout.split('\0').filter(Boolean))].sort();
59
+ }
60
+
42
61
 
43
62
  function completionReceiptChangedPaths(
44
63
  contract: NonNullable<ReturnType<typeof getWorkContract>>,