@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,11 +1,8 @@
1
1
  import {
2
2
  appendWorkEvidence as persistWorkEvidence,
3
3
  getWorkContract as readWorkContract,
4
- recordWorkCompletionReceipt as persistWorkCompletionReceipt,
4
+ recordWorkCompletionReceipt as persistWorkDeliveryReceipt,
5
5
  canonicalizeWorkContractForAuthority,
6
- rebindPlanBoundWorkContract as buildPlanBoundWorkRebind,
7
- refreshPlanBoundWorkRevision as buildPlanBoundWorkRevisionRefresh,
8
- retirePlanBoundWorkContract as buildPlanBoundWorkRetirement,
9
6
  } from '../infrastructure/work-contract-store';
10
7
  import type { WorkContract } from '../domain/types';
11
8
  import type { WorkContractStoreOptions } from '../ports/work-contract-store';
@@ -20,11 +17,10 @@ export interface CompleteRemoteEffectProcessInput {
20
17
  }
21
18
 
22
19
  /**
23
- * Application command for terminalizing a Work from one trusted repository
24
- * remote-effect Process receipt. Gateway supplies evidence identity only; Work
25
- * kind checks, evidence append, and terminal lifecycle mutation stay here.
20
+ * Record one trusted repository remote-effect Process receipt as Work evidence.
21
+ * This never changes semantic Work state; the model/user decides completion via complete.
26
22
  */
27
- export function completeRemoteEffectWorkFromProcessReceipt(
23
+ export function recordRemoteEffectWorkProcessReceipt(
28
24
  options: WorkContractStoreOptions,
29
25
  workId: string,
30
26
  input: CompleteRemoteEffectProcessInput,
@@ -34,7 +30,7 @@ export function completeRemoteEffectWorkFromProcessReceipt(
34
30
  if (work.workKind !== 'remote_effect') {
35
31
  throw new Error(`WORK_REMOTE_EFFECT_PROCESS_KIND_MISMATCH: ${workId} is ${work.workKind}, expected remote_effect`);
36
32
  }
37
- if (work.status === 'completed' && work.completionReceipt?.source === 'remote_effect') return work;
33
+ if (work.completionReceipt?.source === 'remote_effect') return work;
38
34
  if (!work.evidenceRefs.some((candidate) => candidate.evidenceId === input.processId)) {
39
35
  persistWorkEvidence(options, workId, {
40
36
  evidenceId: input.processId,
@@ -43,7 +39,7 @@ export function completeRemoteEffectWorkFromProcessReceipt(
43
39
  detailLevel: 'summary',
44
40
  });
45
41
  }
46
- return persistWorkCompletionReceipt(
42
+ return persistWorkDeliveryReceipt(
47
43
  options,
48
44
  workId,
49
45
  {
@@ -77,29 +73,33 @@ export {
77
73
  emptyWorkContractStore,
78
74
  readWorkContractStore,
79
75
  writeWorkContractStore,
76
+ createWorkSemanticContext,
80
77
  createWorkContract,
81
78
  getWorkContractByRequestId,
82
79
  acceptSubmittedWorkContract,
83
80
  listWorkContracts,
84
81
  readActiveWorkCandidates,
82
+ readWorkContractLineageSnapshot,
85
83
  initializeWorkCandidateIndex,
86
84
  isCurrentWorkContract,
87
85
  supersedeWorkContract,
88
86
  getWorkContract,
87
+ semanticWorkState,
88
+ workSemanticView,
89
+ listWorkSemanticRevisionRecords,
90
+ reviseWorkSemanticContext,
89
91
  summarizeWorkContract,
90
92
  updateWorkContract,
93
+ updateWorkContractPlacementAtomically,
91
94
  promoteWorkToRepositoryChange,
92
95
  recordWorkEvidenceState,
93
96
  activateWorkContract,
94
97
  failWorkContract,
95
98
  cancelWorkContract,
96
- resumeRetainedCancelledWorkContract,
99
+ recordCancelledWorkCleanupCompleted,
97
100
  recordWorkScopeEvidence,
98
101
  transitionWorkContractPhase,
99
- requestWorkImplementationReview,
100
102
  recordWorkImplementationReview,
101
- recordContentEquivalentCommitAuthorityTransfer,
102
- reconcileApprovedWorkImplementationReviewProjection,
103
103
  appendWorkEvidence,
104
104
  appendWorkHandoffRef,
105
105
  appendVerificationRecord,
@@ -107,42 +107,18 @@ export {
107
107
  canonicalizeWorkContractForAuthority,
108
108
  } from '../infrastructure/work-contract-store';
109
109
  export type {
110
+ CreateWorkSemanticInput,
110
111
  CreateWorkContractInput,
111
112
  ListWorkContractOptions,
112
113
  InvalidActiveWorkCandidate,
113
114
  ActiveWorkCandidateSnapshot,
115
+ WorkContractLineageSnapshot,
114
116
  SupersedeWorkContractInput,
115
117
  WorkContractSummary,
118
+ WorkSemanticRevisionRecord,
119
+ ReviseWorkSemanticInput,
116
120
  AcceptSubmittedWorkInput,
117
121
  WorkContractStoreLocation,
118
122
  WorkContractStoreOptions,
119
123
  WorkContractMetadataPatch,
120
124
  } from '../infrastructure/work-contract-store';
121
-
122
- /**
123
- * Public Work application command for constructing a validated scope-only
124
- * successor-Plan binding. Persistence remains with the caller so a higher-level
125
- * control-plane transaction can atomically update Plan + Work authority.
126
- */
127
- export function rebindPlanBoundWorkContract(
128
- current: WorkContract,
129
- input: Parameters<typeof buildPlanBoundWorkRebind>[1],
130
- ): WorkContract {
131
- return buildPlanBoundWorkRebind(current, input);
132
- }
133
-
134
- /** Build a validated terminal authority-retirement transition for a Work whose Plan is no longer current. */
135
- /** Refresh a Work against a newer revision of the same stable Plan identity. */
136
- export function refreshPlanBoundWorkRevision(
137
- current: WorkContract,
138
- input: Parameters<typeof buildPlanBoundWorkRevisionRefresh>[1],
139
- ): WorkContract {
140
- return buildPlanBoundWorkRevisionRefresh(current, input);
141
- }
142
-
143
- export function retirePlanBoundWorkContract(
144
- current: WorkContract,
145
- input: Parameters<typeof buildPlanBoundWorkRetirement>[1],
146
- ): WorkContract {
147
- return buildPlanBoundWorkRetirement(current, input);
148
- }
@@ -0,0 +1,104 @@
1
+ import type { ScopeRef } from '../../identity/api/index';
2
+ import { semanticScopeRefForWork, type WorkContract } from './types';
3
+
4
+ export interface CurrentTaskSemanticProjection {
5
+ schemaVersion: 1;
6
+ workId: string;
7
+ objective: string;
8
+ semanticScope: ScopeRef;
9
+ lifecycleRole: 'primary' | 'execution_child';
10
+ requirementId?: string;
11
+ planId?: string;
12
+ planStepId?: string;
13
+ parentWorkId?: string;
14
+ /** Objective graph metadata is projected for clients but never expands exact current-task authority. */
15
+ semanticParentWorkId?: string;
16
+ dependsOnWorkIds: string[];
17
+ predecessorWorkId?: string;
18
+ supersedes: string[];
19
+ supersededBy?: string;
20
+ }
21
+
22
+ /**
23
+ * Exact semantic identity for the task currently being executed.
24
+ * Broader Requirement/Plan membership is descriptive lineage metadata only.
25
+ */
26
+ export function currentTaskSemanticProjectionForWork(work: WorkContract): CurrentTaskSemanticProjection {
27
+ return {
28
+ schemaVersion: 1,
29
+ workId: work.workId,
30
+ objective: work.objective,
31
+ semanticScope: semanticScopeRefForWork(work),
32
+ lifecycleRole: work.lifecycleRole ?? 'primary',
33
+ ...(work.requirementId?.trim() ? { requirementId: work.requirementId.trim() } : {}),
34
+ ...(work.planId?.trim() ? { planId: work.planId.trim() } : {}),
35
+ ...(work.planStepId?.trim() ? { planStepId: work.planStepId.trim() } : {}),
36
+ ...(work.parentWorkId?.trim() ? { parentWorkId: work.parentWorkId.trim() } : {}),
37
+ ...(work.semanticParentWorkId?.trim() ? { semanticParentWorkId: work.semanticParentWorkId.trim() } : {}),
38
+ dependsOnWorkIds: [...new Set((work.dependsOnWorkIds ?? []).map((id) => id.trim()).filter(Boolean))].sort(),
39
+ ...(work.predecessorWorkId?.trim() ? { predecessorWorkId: work.predecessorWorkId.trim() } : {}),
40
+ supersedes: [...new Set((work.supersedes ?? []).map((id) => id.trim()).filter(Boolean))].sort(),
41
+ ...(work.supersededBy?.trim() ? { supersededBy: work.supersededBy.trim() } : {}),
42
+ };
43
+ }
44
+
45
+ /**
46
+ * Derive only explicit Work lineage. Broad Requirement/Plan membership is
47
+ * deliberately ignored because it is Goal scope, not current-task authority.
48
+ */
49
+ export function currentTaskLineageWorkIds(
50
+ originWorkIds: readonly string[],
51
+ contracts: readonly WorkContract[],
52
+ ): Set<string> {
53
+ const byId = new Map(contracts.map((contract) => [contract.workId, contract] as const));
54
+ const forward = new Set(originWorkIds.map((id) => id.trim()).filter((id) => id && byId.has(id)));
55
+
56
+ // Expand only *forward* from the exact origin(s). A child may include its
57
+ // parent as ancestry later, but that parent must never become a new forward
58
+ // seed that pulls sibling children into the current task.
59
+ let expanded = true;
60
+ while (expanded) {
61
+ expanded = false;
62
+ for (const work of contracts) {
63
+ if (forward.has(work.workId)) {
64
+ const explicitSuccessor = work.supersededBy?.trim();
65
+ if (explicitSuccessor && byId.has(explicitSuccessor) && !forward.has(explicitSuccessor)) {
66
+ forward.add(explicitSuccessor);
67
+ expanded = true;
68
+ }
69
+ continue;
70
+ }
71
+ const parentWorkId = work.parentWorkId?.trim();
72
+ const predecessorWorkId = work.predecessorWorkId?.trim();
73
+ const supersedes = (work.supersedes ?? []).map((id) => id.trim()).filter(Boolean);
74
+ if (
75
+ (parentWorkId && forward.has(parentWorkId))
76
+ || (predecessorWorkId && forward.has(predecessorWorkId))
77
+ || supersedes.some((id) => forward.has(id))
78
+ ) {
79
+ forward.add(work.workId);
80
+ expanded = true;
81
+ }
82
+ }
83
+ }
84
+
85
+ // Preserve explicit ancestry for audit/fencing, but never use ancestors as
86
+ // descendant-expansion seeds. That keeps fork siblings independent.
87
+ const linked = new Set(forward);
88
+ const upstream = [...forward];
89
+ while (upstream.length > 0) {
90
+ const work = byId.get(upstream.pop()!);
91
+ if (!work) continue;
92
+ const ancestors = [
93
+ work.parentWorkId,
94
+ work.predecessorWorkId,
95
+ ...(work.supersedes ?? []),
96
+ ].map((id) => id?.trim()).filter((id): id is string => Boolean(id));
97
+ for (const id of ancestors) {
98
+ if (!byId.has(id) || linked.has(id)) continue;
99
+ linked.add(id);
100
+ upstream.push(id);
101
+ }
102
+ }
103
+ return linked;
104
+ }
@@ -31,8 +31,8 @@ export const ENGINEERING_DECISION_AREAS = [
31
31
  ] as const;
32
32
  export type EngineeringDecisionArea = (typeof ENGINEERING_DECISION_AREAS)[number];
33
33
  export type EngineeringCritiqueDecision = 'approved' | 'changes_required' | 'blocked';
34
- export type EngineeringBlockerClassification = 'same_root_cause' | 'unrelated';
35
- export type EngineeringBlockerAction = 'return_to_design' | 'linked_work';
34
+ export type EngineeringBlockerClassification = 'same_root_cause' | 'same_root_cause_scope_extension' | 'unrelated';
35
+ export type EngineeringBlockerAction = 'return_to_design' | 'extend_candidate' | 'linked_work';
36
36
 
37
37
  const MAX_ITEMS = 64;
38
38
  const MAX_TEXT = 2_000;
@@ -256,15 +256,20 @@ export function buildEngineeringBlockerDispositionReceipt(input: {
256
256
  rationale: string;
257
257
  recordedAt: string;
258
258
  }): EngineeringBlockerDispositionReceipt {
259
- if (!['same_root_cause', 'unrelated'].includes(input.classification)) throw new Error('ENGINEERING_BLOCKER_CLASSIFICATION_INVALID');
259
+ if (!['same_root_cause', 'same_root_cause_scope_extension', 'unrelated'].includes(input.classification)) throw new Error('ENGINEERING_BLOCKER_CLASSIFICATION_INVALID');
260
260
  const linkedWorkId = input.linkedWorkId?.trim() || undefined;
261
+ const sameRootCause = input.classification !== 'unrelated';
261
262
  if (input.classification === 'unrelated' && !linkedWorkId) throw new Error('ENGINEERING_BLOCKER_LINKED_WORK_REQUIRED');
262
- if (input.classification === 'same_root_cause' && linkedWorkId) throw new Error('ENGINEERING_BLOCKER_LINKED_WORK_FORBIDDEN');
263
+ if (sameRootCause && linkedWorkId) throw new Error('ENGINEERING_BLOCKER_LINKED_WORK_FORBIDDEN');
263
264
  const core = {
264
265
  sourceRevision: text(input.sourceRevision, 'ENGINEERING_BLOCKER_SOURCE_REQUIRED'),
265
266
  blockerId: text(input.blockerId, 'ENGINEERING_BLOCKER_ID_REQUIRED'),
266
267
  classification: input.classification,
267
- action: input.classification === 'same_root_cause' ? 'return_to_design' as const : 'linked_work' as const,
268
+ action: input.classification === 'same_root_cause'
269
+ ? 'return_to_design' as const
270
+ : input.classification === 'same_root_cause_scope_extension'
271
+ ? 'extend_candidate' as const
272
+ : 'linked_work' as const,
268
273
  semanticScopeKeys: list(input.semanticScopeKeys ?? [], 'ENGINEERING_BLOCKER_SCOPE_INVALID', false),
269
274
  ...(linkedWorkId ? { linkedWorkId: text(linkedWorkId, 'ENGINEERING_BLOCKER_LINKED_WORK_INVALID') } : {}),
270
275
  rationale: text(input.rationale, 'ENGINEERING_BLOCKER_RATIONALE_REQUIRED'),
@@ -73,7 +73,9 @@ const PROFILES: Record<EngineeringRiskClass, EngineeringWorkProfile> = {
73
73
  schemaVersion: 1,
74
74
  profileVersion: ENGINEERING_WORK_PROFILE_VERSION,
75
75
  riskClass: 'high',
76
- admissionEnforcement: 'enforce',
76
+ // Engineering evidence is useful model/project guidance, never a Kernel
77
+ // mutation-admission authority. Safety/resource admission lives elsewhere.
78
+ admissionEnforcement: 'observe',
77
79
  evidenceRequirements: requirement('required', 'required', 'required', 'required', 'required', 'conditional', 'required', 'conditional', 'required'),
78
80
  admissionEvidence: ['project_contract', 'context_closure', 'product_dod', 'design_decision', 'independent_critique'],
79
81
  completionEvidence: ['focused_validation', 'fresh_review'],
@@ -82,7 +84,7 @@ const PROFILES: Record<EngineeringRiskClass, EngineeringWorkProfile> = {
82
84
  schemaVersion: 1,
83
85
  profileVersion: ENGINEERING_WORK_PROFILE_VERSION,
84
86
  riskClass: 'critical',
85
- admissionEnforcement: 'enforce',
87
+ admissionEnforcement: 'observe',
86
88
  evidenceRequirements: requirement('required', 'required', 'required', 'required', 'required', 'required', 'required', 'required', 'required'),
87
89
  admissionEvidence: ['project_contract', 'context_closure', 'product_dod', 'design_decision', 'independent_critique', 'semantic_tools'],
88
90
  completionEvidence: ['focused_validation', 'real_journey', 'fresh_review'],
@@ -208,16 +210,10 @@ export function evaluateEngineeringAdmission(input: {
208
210
  receipt: EngineeringContextReceipt;
209
211
  mutation: boolean;
210
212
  }): { allowed: true } | { allowed: false; code: string; missing: EngineeringEvidenceKind[] } {
211
- if (!input.mutation || input.profile.admissionEnforcement === 'observe') return { allowed: true };
212
- if (input.receipt.sourceIdentity.kind === 'unknown') {
213
- return { allowed: false, code: 'ENGINEERING_SOURCE_IDENTITY_REQUIRED', missing: input.receipt.missingAdmissionEvidence };
214
- }
215
- if (input.receipt.designState === 'revisit_required') {
216
- return { allowed: false, code: 'ENGINEERING_DESIGN_REVISIT_REQUIRED', missing: ['design_decision', 'independent_critique'] };
217
- }
218
- if (input.receipt.missingAdmissionEvidence.length > 0) {
219
- return { allowed: false, code: 'ENGINEERING_ADMISSION_EVIDENCE_REQUIRED', missing: input.receipt.missingAdmissionEvidence };
220
- }
213
+ // Forge records these receipts for model judgment, audit, and project-level
214
+ // acceptance. It must not prescribe an engineering methodology before a
215
+ // mutation. Source/CAS/security/resource safety is enforced by capabilities.
216
+ void input;
221
217
  return { allowed: true };
222
218
  }
223
219
 
@@ -0,0 +1,186 @@
1
+ import { createHash } from 'crypto';
2
+ import type { WorkImplementationReviewEvidenceIdentity } from './implementation-review';
3
+
4
+ export const EVALUATION_PROMOTION_RECEIPT_SCHEMA = 'forge-evaluation-promotion-receipt/v1' as const;
5
+ export const EVALUATION_PROMOTION_RECEIPT_AUTHORITY = 'evaluation_evidence_only' as const;
6
+ export const EVALUATION_CANDIDATE_IDENTITY_SCHEMA = 'forge-candidate-identity/v1' as const;
7
+
8
+ export interface EvaluationPromotionCandidateIdentity {
9
+ schemaVersion: typeof EVALUATION_CANDIDATE_IDENTITY_SCHEMA;
10
+ candidateId: string;
11
+ versionLabel: string;
12
+ artifactDigest: string;
13
+ sourceRevision?: string;
14
+ executionSurface: 'public_cli' | 'public_mcp';
15
+ }
16
+
17
+ export interface EvaluationPromotionReceipt {
18
+ schemaVersion: typeof EVALUATION_PROMOTION_RECEIPT_SCHEMA;
19
+ authority: typeof EVALUATION_PROMOTION_RECEIPT_AUTHORITY;
20
+ receiptId: string;
21
+ baseline: EvaluationPromotionCandidateIdentity;
22
+ candidate: EvaluationPromotionCandidateIdentity;
23
+ evidence: {
24
+ paired: {
25
+ protocolDigest: string;
26
+ environmentFingerprint: string;
27
+ pairCount: number;
28
+ evidenceDigest: string;
29
+ };
30
+ shadow: {
31
+ protocolDigest: string;
32
+ pairedScenarioCount: number;
33
+ evidenceDigest: string;
34
+ };
35
+ certification?: {
36
+ manifestDigest: string;
37
+ };
38
+ };
39
+ }
40
+
41
+ export type EvaluationPromotionReceiptCore = Omit<EvaluationPromotionReceipt, 'receiptId'>;
42
+
43
+ function requiredText(value: unknown, field: string): string {
44
+ const normalized = typeof value === 'string' ? value.trim() : '';
45
+ if (!normalized) throw new Error(`EVALUATION_PROMOTION_RECEIPT_${field.toUpperCase()}_REQUIRED`);
46
+ return normalized;
47
+ }
48
+
49
+ function nonNegativeInteger(value: unknown, field: string): number {
50
+ if (!Number.isInteger(value) || Number(value) < 0) {
51
+ throw new Error(`EVALUATION_PROMOTION_RECEIPT_${field.toUpperCase()}_INVALID`);
52
+ }
53
+ return Number(value);
54
+ }
55
+
56
+ function candidateIdentity(value: unknown, field: 'baseline' | 'candidate'): EvaluationPromotionCandidateIdentity {
57
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
58
+ throw new Error(`EVALUATION_PROMOTION_RECEIPT_${field.toUpperCase()}_REQUIRED`);
59
+ }
60
+ const input = value as Record<string, unknown>;
61
+ if (input.schemaVersion !== EVALUATION_CANDIDATE_IDENTITY_SCHEMA) {
62
+ throw new Error(`EVALUATION_PROMOTION_RECEIPT_${field.toUpperCase()}_SCHEMA_INVALID`);
63
+ }
64
+ if (input.executionSurface !== 'public_cli' && input.executionSurface !== 'public_mcp') {
65
+ throw new Error(`EVALUATION_PROMOTION_RECEIPT_${field.toUpperCase()}_SURFACE_INVALID`);
66
+ }
67
+ const sourceRevision = typeof input.sourceRevision === 'string' && input.sourceRevision.trim()
68
+ ? input.sourceRevision.trim()
69
+ : undefined;
70
+ return {
71
+ schemaVersion: EVALUATION_CANDIDATE_IDENTITY_SCHEMA,
72
+ candidateId: requiredText(input.candidateId, `${field}_candidate_id`),
73
+ versionLabel: requiredText(input.versionLabel, `${field}_version_label`),
74
+ artifactDigest: requiredText(input.artifactDigest, `${field}_artifact_digest`),
75
+ ...(sourceRevision ? { sourceRevision } : {}),
76
+ executionSurface: input.executionSurface,
77
+ };
78
+ }
79
+
80
+ function receiptCore(value: unknown): EvaluationPromotionReceiptCore {
81
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
82
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_INVALID');
83
+ }
84
+ const input = value as Record<string, unknown>;
85
+ if (input.schemaVersion !== EVALUATION_PROMOTION_RECEIPT_SCHEMA) {
86
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_SCHEMA_INVALID');
87
+ }
88
+ if (input.authority !== EVALUATION_PROMOTION_RECEIPT_AUTHORITY) {
89
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_AUTHORITY_INVALID');
90
+ }
91
+ if (!input.evidence || typeof input.evidence !== 'object' || Array.isArray(input.evidence)) {
92
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_EVIDENCE_REQUIRED');
93
+ }
94
+ const evidence = input.evidence as Record<string, unknown>;
95
+ if (!evidence.paired || typeof evidence.paired !== 'object' || Array.isArray(evidence.paired)) {
96
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_PAIRED_REQUIRED');
97
+ }
98
+ if (!evidence.shadow || typeof evidence.shadow !== 'object' || Array.isArray(evidence.shadow)) {
99
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_SHADOW_REQUIRED');
100
+ }
101
+ const paired = evidence.paired as Record<string, unknown>;
102
+ const shadow = evidence.shadow as Record<string, unknown>;
103
+ let certification: EvaluationPromotionReceipt['evidence']['certification'];
104
+ if (evidence.certification !== undefined) {
105
+ if (!evidence.certification || typeof evidence.certification !== 'object' || Array.isArray(evidence.certification)) {
106
+ throw new Error('EVALUATION_PROMOTION_RECEIPT_CERTIFICATION_INVALID');
107
+ }
108
+ certification = {
109
+ manifestDigest: requiredText(
110
+ (evidence.certification as Record<string, unknown>).manifestDigest,
111
+ 'certification_manifest_digest',
112
+ ),
113
+ };
114
+ }
115
+ return {
116
+ schemaVersion: EVALUATION_PROMOTION_RECEIPT_SCHEMA,
117
+ authority: EVALUATION_PROMOTION_RECEIPT_AUTHORITY,
118
+ baseline: candidateIdentity(input.baseline, 'baseline'),
119
+ candidate: candidateIdentity(input.candidate, 'candidate'),
120
+ evidence: {
121
+ paired: {
122
+ protocolDigest: requiredText(paired.protocolDigest, 'paired_protocol_digest'),
123
+ environmentFingerprint: requiredText(paired.environmentFingerprint, 'paired_environment_fingerprint'),
124
+ pairCount: nonNegativeInteger(paired.pairCount, 'paired_pair_count'),
125
+ evidenceDigest: requiredText(paired.evidenceDigest, 'paired_evidence_digest'),
126
+ },
127
+ shadow: {
128
+ protocolDigest: requiredText(shadow.protocolDigest, 'shadow_protocol_digest'),
129
+ pairedScenarioCount: nonNegativeInteger(shadow.pairedScenarioCount, 'shadow_paired_scenario_count'),
130
+ evidenceDigest: requiredText(shadow.evidenceDigest, 'shadow_evidence_digest'),
131
+ },
132
+ ...(certification ? { certification } : {}),
133
+ },
134
+ };
135
+ }
136
+
137
+ function receiptIdentity(core: EvaluationPromotionReceiptCore): string {
138
+ const digest = createHash('sha256')
139
+ .update(EVALUATION_PROMOTION_RECEIPT_SCHEMA)
140
+ .update('\0')
141
+ .update(JSON.stringify(core))
142
+ .digest('hex');
143
+ return `evaluation-promotion:sha256:${digest}`;
144
+ }
145
+
146
+ function deepFreeze<T>(value: T): T {
147
+ if (value && typeof value === 'object' && !Object.isFrozen(value)) {
148
+ for (const nested of Object.values(value as Record<string, unknown>)) deepFreeze(nested);
149
+ Object.freeze(value);
150
+ }
151
+ return value;
152
+ }
153
+
154
+ /**
155
+ * Identity constructor only. Eligibility authority remains in evaluation/.
156
+ * Callers outside the evaluator must not treat this helper as proof that A/B,
157
+ * shadow, or certification gates ran.
158
+ */
159
+ export function buildEvaluationPromotionReceipt(coreInput: EvaluationPromotionReceiptCore): EvaluationPromotionReceipt {
160
+ const core = receiptCore(coreInput);
161
+ return deepFreeze({ ...core, receiptId: receiptIdentity(core) });
162
+ }
163
+
164
+ export function validateEvaluationPromotionReceipt(value: unknown): EvaluationPromotionReceipt {
165
+ const core = receiptCore(value);
166
+ const receiptId = requiredText((value as Record<string, unknown>).receiptId, 'receipt_id');
167
+ const expected = receiptIdentity(core);
168
+ if (receiptId !== expected) throw new Error('EVALUATION_PROMOTION_RECEIPT_ID_INVALID');
169
+ return deepFreeze({ ...core, receiptId });
170
+ }
171
+
172
+ export function evaluationPromotionReceiptArchitectureEvidence(
173
+ value: unknown,
174
+ expectedSourceRevision: string,
175
+ ): WorkImplementationReviewEvidenceIdentity {
176
+ const receipt = validateEvaluationPromotionReceipt(value);
177
+ const sourceRevision = receipt.candidate.sourceRevision?.trim() ?? '';
178
+ const expected = expectedSourceRevision.trim();
179
+ if (!expected || !sourceRevision || sourceRevision !== expected) {
180
+ throw new Error(`EVALUATION_PROMOTION_RECEIPT_CANDIDATE_SOURCE_MISMATCH: expected=${expected || 'missing'} actual=${sourceRevision || 'missing'}`);
181
+ }
182
+ return {
183
+ evidenceId: receipt.receiptId,
184
+ digest: receipt.receiptId.slice('evaluation-promotion:'.length),
185
+ };
186
+ }
@@ -3,7 +3,6 @@ import type { WorkContract } from './types';
3
3
 
4
4
  export type WorkExecutionLane = 'read' | 'review' | 'isolated_write' | 'integration_write' | 'external_effect';
5
5
  export type WorkExecutionIsolation = 'shared' | 'isolated';
6
- export type WorkExecutionControllerRole = 'mutable_owner' | 'reviewer';
7
6
  export type WorkExecutionResourceMode = 'read' | 'write' | 'exclusive';
8
7
 
9
8
  export interface WorkExecutionResourceIntent {
@@ -14,13 +13,11 @@ export interface WorkExecutionResourceIntent {
14
13
  export type WorkExecutionWakeTrigger =
15
14
  | { kind: 'work_terminal'; workId: string }
16
15
  | { kind: 'resource_release'; resourceKeys: string[] }
17
- | { kind: 'controller_release'; workId: string }
18
16
  | { kind: 'scheduler_capacity'; capacityKey: string }
19
17
  | { kind: 'work_contract_change'; workId: string };
20
18
 
21
19
  export interface WorkExecutionConcurrencyBlocker {
22
20
  code:
23
- | 'reviewer_mutation_forbidden'
24
21
  | 'same_semantic_scope_mutation'
25
22
  | 'shared_mutation_lane_conflict'
26
23
  | 'integration_target_conflict'
@@ -44,7 +41,6 @@ export interface WorkExecutionConcurrencyContract {
44
41
  resourceIntents: WorkExecutionResourceIntent[];
45
42
  blockers: WorkExecutionConcurrencyBlocker[];
46
43
  isolation: WorkExecutionIsolation;
47
- controllerRole: WorkExecutionControllerRole;
48
44
  }
49
45
 
50
46
  export interface WorkExecutionConcurrencyInput {
@@ -81,7 +77,7 @@ function fallbackMutationClass(work: WorkContract): EngineeringMutationClass {
81
77
  || work.workKind === 'reconciliation'
82
78
  || work.workKind === 'superseded') return 'readonly';
83
79
  if (work.workKind === 'local_effect' || work.workKind === 'remote_effect') return 'external_effect';
84
- if (work.worktreePolicy.required || work.constraints.workspaceMode === 'isolated' || work.constraints.requireWorktree === true) {
80
+ if (work.worktreePolicy.required || work.constraints.workspaceMode === 'isolated') {
85
81
  return 'isolated_write';
86
82
  }
87
83
  return 'integration_write';
@@ -94,7 +90,20 @@ function semanticScopeKeys(work: WorkContract): string[] {
94
90
  return [`work:${work.workId}`];
95
91
  }
96
92
 
97
- function defaultLane(work: WorkContract, mutationClass: EngineeringMutationClass): WorkExecutionLane {
93
+ function defaultLane(
94
+ work: WorkContract,
95
+ mutationClass: EngineeringMutationClass,
96
+ resourceIntents: readonly WorkExecutionResourceIntent[],
97
+ requestedLane?: WorkExecutionLane,
98
+ ): WorkExecutionLane {
99
+ const hasMutableResourceIntent = resourceIntents.some((intent) => intent.mode !== 'read');
100
+ if (hasMutableResourceIntent && (!requestedLane || !workExecutionLaneMutates(requestedLane))) {
101
+ if (mutationClass === 'external_effect') return 'external_effect';
102
+ return work.worktreePolicy.required || work.constraints.workspaceMode === 'isolated'
103
+ ? 'isolated_write'
104
+ : 'integration_write';
105
+ }
106
+ if (requestedLane) return requestedLane;
98
107
  if (work.workKind === 'read_only_review') return 'review';
99
108
  if (mutationClass === 'readonly') return 'read';
100
109
  return mutationClass;
@@ -105,6 +114,7 @@ export function buildWorkExecutionConcurrencyContract(
105
114
  input: WorkExecutionConcurrencyInput = {},
106
115
  ): WorkExecutionConcurrencyContract {
107
116
  const mutationClass = work.engineeringContext?.semanticScope?.mutationClass ?? fallbackMutationClass(work);
117
+ const resourceIntents = normalizedResourceIntents(input.resourceIntents ?? []);
108
118
  return {
109
119
  schemaVersion: 1,
110
120
  workId: work.workId,
@@ -112,13 +122,12 @@ export function buildWorkExecutionConcurrencyContract(
112
122
  observedWorkUpdatedAt: work.updatedAt,
113
123
  semanticScopeKeys: semanticScopeKeys(work),
114
124
  mutationClass,
115
- lane: input.lane ?? defaultLane(work, mutationClass),
116
- resourceIntents: normalizedResourceIntents(input.resourceIntents ?? []),
125
+ lane: defaultLane(work, mutationClass, resourceIntents, input.lane),
126
+ resourceIntents,
117
127
  blockers: [...(input.blockers ?? [])],
118
- isolation: work.worktreePolicy.required || work.constraints.workspaceMode === 'isolated' || work.constraints.requireWorktree === true
128
+ isolation: work.worktreePolicy.required || work.constraints.workspaceMode === 'isolated'
119
129
  ? 'isolated'
120
130
  : 'shared',
121
- controllerRole: work.workKind === 'read_only_review' ? 'reviewer' : 'mutable_owner',
122
131
  };
123
132
  }
124
133
 
@@ -145,25 +154,11 @@ function sharedMutableResourceKeys(
145
154
  return mutableResourceKeys(left).filter((key) => rightKeys.has(key));
146
155
  }
147
156
 
148
- function invalidReviewerBlocker(contract: WorkExecutionConcurrencyContract): WorkExecutionConcurrencyBlocker | undefined {
149
- if (contract.controllerRole !== 'reviewer'
150
- || (!workExecutionLaneMutates(contract.lane) && mutableResourceKeys(contract).length === 0)) return undefined;
151
- return {
152
- code: 'reviewer_mutation_forbidden',
153
- disposition: 'invalid',
154
- semanticScopeKeys: contract.semanticScopeKeys,
155
- resourceKeys: mutableResourceKeys(contract),
156
- wakeTrigger: { kind: 'work_contract_change', workId: contract.workId },
157
- };
158
- }
159
-
160
157
  export function evaluateWorkExecutionCompatibility(
161
158
  candidate: WorkExecutionConcurrencyContract,
162
159
  active: readonly WorkExecutionConcurrencyContract[],
163
160
  ): WorkExecutionCompatibilityDecision {
164
161
  const blockers: WorkExecutionConcurrencyBlocker[] = [];
165
- const reviewerBlocker = invalidReviewerBlocker(candidate);
166
- if (reviewerBlocker) blockers.push(reviewerBlocker);
167
162
  if (candidate.lane === 'external_effect' && mutableResourceKeys(candidate).length === 0) {
168
163
  blockers.push({
169
164
  code: 'external_effect_target_unknown',
@@ -178,8 +173,6 @@ export function evaluateWorkExecutionCompatibility(
178
173
 
179
174
  for (const current of active) {
180
175
  if (current.workId === candidate.workId) continue;
181
- const currentReviewerBlocker = invalidReviewerBlocker(current);
182
- if (currentReviewerBlocker) continue;
183
176
  if (!workExecutionLaneMutates(current.lane)) continue;
184
177
 
185
178
  const overlap = scopesOverlap(candidate, current);
@@ -1,33 +1,2 @@
1
1
  /** Immutable access-policy value captured by a Work contract. */
2
2
  export type WorkAccessMode = 'request' | 'full_access';
3
-
4
- export type WorkRouteExecutionMode = 'direct_control' | 'goal_workloop' | 'handoff_only';
5
- export type WorkRouteMode = 'direct_edit' | 'bounded_work' | 'quick_agent' | 'issue_task';
6
- export type WorkRouteExecutionPath = 'fast' | 'durable';
7
- export type WorkRouteExecutorKind = 'direct_edit' | 'local_cli' | 'remote_api' | 'cloud_agent' | 'external_controller' | 'handoff_only';
8
- export type WorkRouteApprovalState = 'approval_not_required' | 'normal_authorization_required' | 'strong_confirmation_required' | 'blocked_by_policy';
9
-
10
- export interface WorkRouteReason {
11
- code: string;
12
- message: string;
13
- }
14
-
15
- /** Persistence-safe snapshot of a routing decision. The routing engine remains outside Kernel. */
16
- export interface WorkRouteDecisionSnapshot {
17
- executionMode: WorkRouteExecutionMode;
18
- executorKind: WorkRouteExecutorKind;
19
- selectedProviderId: string | null;
20
- workMode: WorkRouteMode;
21
- executionPath: WorkRouteExecutionPath;
22
- requiresWork: boolean;
23
- requiresApproval: boolean;
24
- requiresIsolation: boolean;
25
- requiresRecovery: boolean;
26
- createHandoff: boolean;
27
- waitForUser: boolean;
28
- approvalState: WorkRouteApprovalState;
29
- alternatives: string[];
30
- reasons: WorkRouteReason[];
31
- inputFingerprint: string;
32
- policyVersion: string;
33
- }