@moretea-labs/forge 1.8.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/AGENTS.md +70 -7
  2. package/CHANGELOG.md +14 -0
  3. package/CLAUDE.md +17 -2
  4. package/CONTRIBUTING.md +3 -2
  5. package/THIRD_PARTY_NOTICES.md +1 -1
  6. package/adapters/chatgpt/browser-delivery-host.ts +7 -1
  7. package/adapters/chatgpt/browser-delivery-runtime.ts +529 -56
  8. package/adapters/chatgpt/controller-binding-store.ts +101 -22
  9. package/adapters/chatgpt/controller-round-host.ts +15 -25
  10. package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
  11. package/adapters/chatgpt/provider-delivery.ts +228 -1
  12. package/adapters/chatgpt/work-conversation-binding-store.ts +79 -53
  13. package/adapters/computer/chatgpt-extension-target.ts +463 -0
  14. package/adapters/computer/chatgpt-target-router.ts +103 -0
  15. package/adapters/computer/chrome-extension/background.js +385 -0
  16. package/adapters/computer/chrome-extension/content.js +378 -0
  17. package/adapters/computer/chrome-extension/core.js +24 -0
  18. package/adapters/computer/chrome-extension/manifest.json +30 -0
  19. package/adapters/computer/desktop-operator-discovery.ts +11 -31
  20. package/adapters/computer/interaction-target-authority.ts +142 -18
  21. package/adapters/mcp/auth.ts +0 -1
  22. package/adapters/mcp/instructions.ts +5 -4
  23. package/adapters/mcp/multi-repository.ts +3 -19
  24. package/adapters/mcp/oauth.ts +73 -0
  25. package/adapters/mcp/paths.ts +4 -1
  26. package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +87 -0
  27. package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
  28. package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
  29. package/adapters/mcp/runtime-gateway/context-adapter.ts +411 -73
  30. package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +91 -0
  31. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
  32. package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
  33. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
  34. package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
  35. package/adapters/mcp/runtime-gateway/execution-tools.ts +8 -42
  36. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
  37. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +117 -45
  38. package/adapters/mcp/runtime-gateway/process-tools.ts +190 -22
  39. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
  40. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
  41. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
  42. package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
  43. package/adapters/mcp/runtime-gateway/router.ts +18 -504
  44. package/adapters/mcp/runtime-gateway/routing-policy.ts +499 -0
  45. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +14 -65
  46. package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
  47. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +113 -173
  48. package/adapters/mcp/runtime-gateway/runtime-tools.ts +15 -5
  49. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +1 -0
  50. package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
  51. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +358 -266
  52. package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +136 -0
  53. package/adapters/mcp/runtime-gateway/work-adapter.ts +261 -3122
  54. package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
  55. package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
  56. package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +246 -0
  57. package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
  58. package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
  59. package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
  60. package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
  61. package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
  62. package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +263 -0
  63. package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
  64. package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +156 -0
  65. package/adapters/mcp/server.ts +67 -23
  66. package/adapters/mcp/setup.ts +1 -3
  67. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +44 -170
  68. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +4 -9
  69. package/adapters/mcp/tool-mapping/repository-tools.ts +133 -142
  70. package/adapters/mcp/toolset-names.ts +5 -0
  71. package/adapters/mcp/toolset.ts +6 -5
  72. package/adapters/mcp/transports/http-observation.ts +365 -0
  73. package/adapters/mcp/transports/http.ts +154 -677
  74. package/adapters/mcp/transports/oauth-http.ts +322 -0
  75. package/adapters/mcp/transports/session-registry.ts +6 -0
  76. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
  77. package/assets/plugin-registry.v1.json +6 -4
  78. package/assets/reference-configs/agentic-development-flow.md +25 -0
  79. package/assets/reference-configs/global-working-rules.md +19 -0
  80. package/assets/skill-version.json +2 -2
  81. package/docs/architecture/CURRENT.md +111 -41
  82. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
  83. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
  84. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
  85. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
  86. package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
  87. package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
  88. package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +221 -0
  89. package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
  90. package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +72 -0
  91. package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +237 -0
  92. package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
  93. package/docs/architecture/domains/verification.md +1 -0
  94. package/docs/architecture/domains/workflow-engine.md +6 -0
  95. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  96. package/docs/forge-plugin-management.md +2 -2
  97. package/docs/operations/controller-performance-and-502.md +17 -0
  98. package/docs/operations/controller-reliability-runbook.md +2 -2
  99. package/docs/operations/features.md +1 -1
  100. package/docs/operations/features.zh-CN.md +1 -1
  101. package/docs/operations/homebrew.md +2 -2
  102. package/docs/operations/mcp-tool-exposure.md +2 -0
  103. package/docs/operations/releasing.md +2 -0
  104. package/docs/operations/standalone-disaster-recovery.md +14 -6
  105. package/docs/wiki/Implementation.md +1 -1
  106. package/package.json +25 -14
  107. package/packages/kernel/cognition/api/index.ts +6 -0
  108. package/packages/kernel/cognition/application/activation-service.ts +451 -0
  109. package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
  110. package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
  111. package/packages/kernel/cognition/application/memory-service.ts +64 -0
  112. package/packages/kernel/cognition/domain/learning.ts +106 -0
  113. package/packages/kernel/cognition/domain/memory.ts +254 -0
  114. package/packages/kernel/controller/api/index.ts +1 -0
  115. package/packages/kernel/controller/application/continuation-service.ts +281 -0
  116. package/packages/kernel/controller/application/controller-round-service.ts +12 -0
  117. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
  118. package/packages/kernel/controller/domain/controller-round.ts +4 -1
  119. package/packages/kernel/controller/domain/execution-quality.ts +3 -1
  120. package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
  121. package/packages/kernel/controller/infrastructure/controller-session-store.ts +297 -71
  122. package/packages/kernel/controller/ports/controller-host.ts +2 -0
  123. package/packages/kernel/identity/api/index.ts +10 -0
  124. package/packages/kernel/identity/domain/activity-projection.ts +43 -0
  125. package/packages/kernel/identity/domain/capability-broker.ts +60 -0
  126. package/packages/kernel/identity/domain/grant.ts +72 -0
  127. package/packages/kernel/identity/domain/owned-resource.ts +116 -0
  128. package/packages/kernel/identity/domain/user-request.ts +93 -0
  129. package/packages/kernel/identity/infrastructure/activity-projection-store.ts +77 -0
  130. package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
  131. package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
  132. package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
  133. package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
  134. package/packages/kernel/scheduler/api/index.ts +0 -2
  135. package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
  136. package/packages/kernel/scheduler/application/settlement.ts +0 -15
  137. package/packages/kernel/scheduler/domain/schedule.ts +87 -0
  138. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +153 -133
  139. package/packages/kernel/work/api/index.ts +3 -2
  140. package/packages/kernel/work/application/work-service.ts +17 -42
  141. package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
  142. package/packages/kernel/work/domain/engineering-design.ts +10 -5
  143. package/packages/kernel/work/domain/engineering-profile.ts +8 -12
  144. package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
  145. package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
  146. package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
  147. package/packages/kernel/work/domain/implementation-review.ts +14 -331
  148. package/packages/kernel/work/domain/objective-graph.ts +119 -0
  149. package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
  150. package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
  151. package/packages/kernel/work/domain/state-machine.ts +25 -63
  152. package/packages/kernel/work/domain/types.ts +57 -51
  153. package/packages/kernel/work/infrastructure/work-contract-store.ts +819 -728
  154. package/packages/kernel/work/ports/work-contract-store.ts +5 -2
  155. package/packages/plugin-runtime/browser/session-authority.ts +2 -1
  156. package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
  157. package/packages/plugin-runtime/computer/conversation-target.ts +143 -0
  158. package/packages/plugin-runtime/computer/index.ts +2 -0
  159. package/packages/plugin-runtime/computer/target-authority.ts +26 -1
  160. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
  161. package/packages/protocols/computer/contract.ts +27 -1
  162. package/scripts/activate-source-baseline.ts +7 -9
  163. package/scripts/canary-controller-semantic-wait.ts +12 -24
  164. package/scripts/check-mcp-compatibility.ts +48 -136
  165. package/scripts/check-runtime-architecture.mjs +622 -217
  166. package/scripts/forge-local-recovery-helper.mjs +93 -15
  167. package/scripts/lib/project-init-lib.sh +3 -0
  168. package/scripts/open-source-audit-allowlist.txt +1 -2
  169. package/scripts/run-bounded-command.mjs +5 -0
  170. package/scripts/run-governed-gate.ts +0 -1
  171. package/scripts/run-mobile-monitor-bridge.ts +0 -1
  172. package/scripts/smoke-control-plane-failure-domain.ts +94 -0
  173. package/scripts/smoke-mcp-http-runtime.ts +5 -0
  174. package/scripts/smoke-runtime-recovery.ts +12 -43
  175. package/scripts/smoke-schedule-engine.ts +23 -15
  176. package/scripts/smoke-unattended-transport-recovery.ts +223 -0
  177. package/scripts/smoke-user-request-continuation-restart.ts +232 -0
  178. package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +92 -0
  179. package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
  180. package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
  181. package/scripts/smoke-workflow-supervisor.ts +103 -0
  182. package/scripts/verify-forge-runtime.sh +2 -1
  183. package/src/cli/agent-jobs/executor-health.ts +11 -34
  184. package/src/cli/agent-jobs/integration.ts +18 -49
  185. package/src/cli/agent-jobs/job-manager.ts +7 -3
  186. package/src/cli/commands/brain-assistant.ts +27 -13
  187. package/src/cli/commands/brain.ts +13 -15
  188. package/src/cli/commands/chatgpt.ts +1 -163
  189. package/src/cli/commands/recovery.ts +135 -121
  190. package/src/cli/commands/runtime.ts +3 -3
  191. package/src/cli/commands/setup-profile.ts +8 -0
  192. package/src/cli/controller/check-runner.ts +13 -2
  193. package/src/cli/controller/completion-backlog.ts +3 -3
  194. package/src/cli/controller/completion-orchestrator.ts +4 -43
  195. package/src/cli/controller/completion-target.ts +3 -72
  196. package/src/cli/controller/context/source-materializer.ts +81 -100
  197. package/src/cli/controller/context-pack.ts +10 -8
  198. package/src/cli/controller/execution-completion.ts +4 -7
  199. package/src/cli/controller/execution-policy.ts +36 -153
  200. package/src/cli/controller/governance.ts +2 -3
  201. package/src/cli/controller/issue-store.ts +4 -99
  202. package/src/cli/controller/launch-agents.ts +59 -18
  203. package/src/cli/controller/operational-plan.ts +24 -51
  204. package/src/cli/controller/runtime-config.ts +5 -1
  205. package/src/cli/controller/stuck-state-migration.ts +2 -3
  206. package/src/cli/controller/systemd-user.ts +39 -1
  207. package/src/cli/editing/edit-session.ts +1 -7
  208. package/src/cli/local-bridge/console-automations.ts +18 -13
  209. package/src/cli/local-bridge/console-view-models.ts +3 -12
  210. package/src/cli/local-bridge/facade-api.ts +64 -191
  211. package/src/cli/local-bridge/server.ts +24 -147
  212. package/src/cli/local-bridge/types.ts +0 -1
  213. package/src/cli/mcp/oauth-client-retirement.ts +74 -0
  214. package/src/cli/repositories/command-executor.ts +29 -23
  215. package/src/cli/repositories/command-scope.ts +35 -16
  216. package/src/cli/repositories/controller-home.ts +48 -0
  217. package/src/cli/repositories/ephemeral-workspace.ts +20 -30
  218. package/src/cli/repositories/git-command-executor.ts +2 -2
  219. package/src/cli/repositories/registry.ts +77 -11
  220. package/src/cli/repositories/structured-git.ts +62 -2
  221. package/src/cli/repository/session-cache.ts +92 -6
  222. package/src/runtime/context/assistant-context.ts +20 -7
  223. package/src/runtime/context/assistant-work-context.ts +89 -27
  224. package/src/runtime/context/automatic-learning.ts +565 -0
  225. package/src/runtime/context/cognitive-attention.ts +173 -0
  226. package/src/runtime/context/cognitive-skill-canary.ts +158 -0
  227. package/src/runtime/context/context-closure.ts +46 -9
  228. package/src/runtime/context/context-pack-process.ts +103 -0
  229. package/src/runtime/context/context-plane.ts +1 -9
  230. package/src/runtime/context/direct-controller-learning.ts +298 -0
  231. package/src/runtime/context/semantic-navigation-contract.ts +9 -0
  232. package/src/runtime/context/semantic-navigation.ts +6 -34
  233. package/src/runtime/context/typescript-navigation-process.ts +145 -0
  234. package/src/runtime/context/typescript-navigation.ts +89 -3
  235. package/src/runtime/control-plane/cleanup-artifact-retention.ts +212 -9
  236. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
  237. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
  238. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
  239. package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
  240. package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
  241. package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
  242. package/src/runtime/control-plane/execution/session-store.ts +31 -1
  243. package/src/runtime/control-plane/execution/validation.ts +6 -8
  244. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
  245. package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
  246. package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
  247. package/src/runtime/control-plane/execution/work-delivery-service.ts +497 -0
  248. package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
  249. package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
  250. package/src/runtime/control-plane/execution/work-handle-authority.ts +188 -109
  251. package/src/runtime/control-plane/execution/work-handle-store.ts +19 -43
  252. package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
  253. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
  254. package/src/runtime/control-plane/execution/work-operation-service.ts +43 -27
  255. package/src/runtime/control-plane/execution/work-preparation-service.ts +126 -266
  256. package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
  257. package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
  258. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +173 -186
  259. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -84
  260. package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
  261. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
  262. package/src/runtime/control-plane/facade/capability-registry.ts +362 -37
  263. package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
  264. package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
  265. package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
  266. package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
  267. package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
  268. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
  269. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
  270. package/src/runtime/control-plane/facade/index.ts +0 -1
  271. package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
  272. package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
  273. package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
  274. package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
  275. package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
  276. package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
  277. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
  278. package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
  279. package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
  280. package/src/runtime/control-plane/facade/types.ts +49 -108
  281. package/src/runtime/control-plane/facade/work-continuation.ts +8 -8
  282. package/src/runtime/control-plane/generated-cache-retention.ts +97 -1
  283. package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
  284. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
  285. package/src/runtime/control-plane/global-scheduler/maintenance.ts +239 -112
  286. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +2 -1
  287. package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
  288. package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
  289. package/src/runtime/control-plane/governance/access-policy.ts +19 -2
  290. package/src/runtime/control-plane/governance/authorization.ts +20 -3
  291. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
  292. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +28 -300
  293. package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
  294. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
  295. package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
  296. package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
  297. package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
  298. package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
  299. package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
  300. package/src/runtime/control-plane/release-retention.ts +135 -47
  301. package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
  302. package/src/runtime/control-plane/runtime-cleanup.ts +290 -21
  303. package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
  304. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
  305. package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
  306. package/src/runtime/diagnostics/incident-repair.ts +313 -146
  307. package/src/runtime/diagnostics/mcp-timing.ts +114 -0
  308. package/src/runtime/evidence/artifact-store.ts +158 -40
  309. package/src/runtime/evidence/evidence-store.ts +112 -8
  310. package/src/runtime/evidence/output-handle-index.ts +225 -0
  311. package/src/runtime/evidence/result-store.ts +158 -44
  312. package/src/runtime/execution/jobs/store.ts +3 -4
  313. package/src/runtime/execution/managed-workspace.ts +57 -0
  314. package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
  315. package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
  316. package/src/runtime/execution/process-runtime/check-result.ts +105 -1
  317. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
  318. package/src/runtime/execution/process-runtime/command-facade.ts +79 -27
  319. package/src/runtime/execution/process-runtime/gc.ts +15 -2
  320. package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
  321. package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
  322. package/src/runtime/execution/process-runtime/index.ts +3 -0
  323. package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
  324. package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
  325. package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
  326. package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
  327. package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
  328. package/src/runtime/execution/process-runtime/runtime.ts +35 -2
  329. package/src/runtime/execution/process-runtime/store.ts +30 -2
  330. package/src/runtime/execution/process-runtime/types.ts +6 -1
  331. package/src/runtime/execution/workers/executor.ts +2 -6
  332. package/src/runtime/platform/service-inventory.ts +130 -0
  333. package/src/runtime/platform/service-manager.ts +8 -0
  334. package/src/runtime/plugins/action-application.ts +85 -28
  335. package/src/runtime/plugins/app-store-connect-adapter.ts +38 -14
  336. package/src/runtime/plugins/browser-adapter.ts +757 -34
  337. package/src/runtime/plugins/browser-automation-service.ts +23 -3
  338. package/src/runtime/plugins/browser-macos-bridge.ts +321 -29
  339. package/src/runtime/plugins/browser-manifest-surface.ts +45 -11
  340. package/src/runtime/plugins/browser-native-session-service.ts +63 -13
  341. package/src/runtime/plugins/browser-registration.ts +16 -0
  342. package/src/runtime/plugins/browser-runtime.ts +14 -1
  343. package/src/runtime/plugins/browser-session-authority.ts +2 -2
  344. package/src/runtime/plugins/browser-session-store.ts +46 -76
  345. package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
  346. package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +219 -0
  347. package/src/runtime/plugins/computer-chatgpt-macos-target.ts +891 -0
  348. package/src/runtime/plugins/computer-registration.ts +222 -11
  349. package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
  350. package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
  351. package/src/runtime/plugins/external-adapter.ts +42 -6
  352. package/src/runtime/plugins/external-registration.ts +21 -1
  353. package/src/runtime/plugins/gmail-adapter.ts +23 -2
  354. package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
  355. package/src/runtime/plugins/google-shared.ts +14 -7
  356. package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
  357. package/src/runtime/plugins/ios-adapter.ts +1 -1
  358. package/src/runtime/plugins/lightweight-action.ts +208 -2
  359. package/src/runtime/plugins/local-system-adapter.ts +12 -2
  360. package/src/runtime/plugins/managed-process-adapter.ts +12 -5
  361. package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
  362. package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
  363. package/src/runtime/plugins/store.ts +602 -428
  364. package/src/runtime/plugins/types.ts +20 -0
  365. package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
  366. package/src/runtime/projections/invalidation.ts +7 -3
  367. package/src/runtime/projections/materialized-view.ts +80 -36
  368. package/src/runtime/recovery/actions.ts +3 -3
  369. package/src/runtime/recovery/capability-action-application.ts +46 -45
  370. package/src/runtime/recovery/lifecycle-inventory.ts +29 -29
  371. package/src/runtime/recovery/maintenance-executor.ts +374 -123
  372. package/src/runtime/recovery/store.ts +29 -11
  373. package/src/runtime/release/release-coordinator.ts +296 -0
  374. package/src/runtime/release/release-session.ts +716 -0
  375. package/src/runtime/release/release-state-migration.ts +25 -0
  376. package/src/runtime/resources/leases/store.ts +56 -25
  377. package/src/runtime/root/computer-composition.ts +191 -6
  378. package/src/runtime/root/controller-progression-composition.ts +192 -0
  379. package/src/runtime/root/controller-round-composition.ts +20 -1
  380. package/src/runtime/root/deployment-topology.ts +106 -0
  381. package/src/runtime/root/entry.ts +4 -3
  382. package/src/runtime/root/known-good-recovery.ts +184 -0
  383. package/src/runtime/root/local-bridge.ts +0 -1
  384. package/src/runtime/root/mcp-transport.ts +111 -18
  385. package/src/runtime/root/ownership.ts +261 -9
  386. package/src/runtime/root/package-connector-service.ts +105 -19
  387. package/src/runtime/root/package-runtime-release.ts +117 -18
  388. package/src/runtime/root/package-runtime-service.ts +17 -11
  389. package/src/runtime/root/release-execution-canary.ts +44 -12
  390. package/src/runtime/root/release-loader.ts +90 -8
  391. package/src/runtime/root/release-manifest.ts +80 -6
  392. package/src/runtime/root/release-materialize.ts +372 -28
  393. package/src/runtime/root/release-store.ts +395 -36
  394. package/src/runtime/root/runtime-lane.ts +191 -0
  395. package/src/runtime/root/runtime.ts +159 -27
  396. package/src/runtime/root/scheduled-controller-composition.ts +28 -3
  397. package/src/runtime/root/service-runner.ts +2 -2
  398. package/src/runtime/root/service.ts +36 -33
  399. package/src/runtime/root/status.ts +48 -0
  400. package/src/runtime/root/types.ts +32 -3
  401. package/src/runtime/root/workflow-supervisor-composition.ts +493 -0
  402. package/src/runtime/root/workflow-supervisor-runtime.ts +209 -0
  403. package/src/runtime/root/write-fence.ts +50 -2
  404. package/src/runtime/safe-tooling/google-credential-store.ts +76 -21
  405. package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
  406. package/src/runtime/safe-tooling/workspace-auth.ts +1 -1
  407. package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
  408. package/src/runtime/shared/process-environment.ts +20 -9
  409. package/src/runtime/shared/response-budget.ts +1 -3
  410. package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
  411. package/src/runtime/standalone-recovery/core.ts +3702 -342
  412. package/src/runtime/standalone-recovery/entry.ts +469 -39
  413. package/src/runtime/standalone-recovery/installer.ts +262 -148
  414. package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
  415. package/src/runtime/standalone-recovery/operation-lock.ts +1 -1
  416. package/src/runtime/standalone-recovery/performance.ts +54 -16
  417. package/src/runtime/standalone-recovery/release.ts +53 -5
  418. package/src/runtime/standalone-recovery/service-labels.ts +5 -2
  419. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
  420. package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
  421. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +10 -3
  422. package/src/runtime/workflow/schedules/engine.ts +138 -172
  423. package/src/runtime/workflow/schedules/work-continuation.ts +44 -5
  424. package/src/runtime/workflows/runtime.ts +15 -19
  425. package/src/testing/test-governance.ts +5 -1
  426. package/supervisor/chatgpt-conversation.ts +23 -0
  427. package/supervisor/client.ts +201 -0
  428. package/supervisor/control-plane.ts +868 -0
  429. package/supervisor/entry.ts +15 -0
  430. package/supervisor/forge-validators.ts +80 -0
  431. package/supervisor/index.ts +5 -0
  432. package/supervisor/native-browser-adapter.ts +786 -0
  433. package/supervisor/native-messaging/host.ts +39 -0
  434. package/supervisor/native-messaging/manifest.ts +26 -0
  435. package/supervisor/native-messaging/protocol.ts +27 -0
  436. package/supervisor/paths.ts +18 -0
  437. package/supervisor/protocol.ts +202 -0
  438. package/supervisor/server.ts +404 -0
  439. package/supervisor/store.ts +1451 -0
  440. package/supervisor/tsconfig.json +8 -0
  441. package/supervisor/types.ts +255 -0
  442. package/adapters/chatgpt/controller-host.ts +0 -119
  443. package/adapters/mcp/controller-round-compatibility.ts +0 -184
  444. package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
  445. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
  446. package/packages/kernel/progression/api/index.ts +0 -2
  447. package/packages/kernel/progression/application/projector.ts +0 -211
  448. package/packages/kernel/progression/domain/types.ts +0 -116
  449. package/packages/kernel/progression/index.ts +0 -1
  450. package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
  451. package/packages/kernel/scheduler/domain/continuation.ts +0 -38
  452. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
  453. package/packages/kernel/work/domain/admission-policy.ts +0 -34
  454. package/scripts/benchmark-background-check-overlap.ts +0 -228
  455. package/scripts/benchmark-computer-hotpath.ts +0 -255
  456. package/scripts/benchmark-controller-hotpath.ts +0 -212
  457. package/scripts/benchmark-controller-round2.ts +0 -191
  458. package/scripts/benchmark-ios-agent-device.ts +0 -511
  459. package/scripts/benchmark-mcp-host.sh +0 -117
  460. package/scripts/benchmark-mcp-transport.ts +0 -169
  461. package/scripts/benchmark-operational-memory-activation.ts +0 -235
  462. package/scripts/benchmark-operational-shadow.ts +0 -28
  463. package/scripts/benchmark-quality-harness.ts +0 -146
  464. package/scripts/benchmark-route-session-concurrency.ts +0 -915
  465. package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
  466. package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
  467. package/scripts/benchmark-thin-harness.ts +0 -251
  468. package/scripts/benchmark-typescript-navigation.ts +0 -186
  469. package/scripts/benchmark-work-efficiency.ts +0 -334
  470. package/scripts/build-controller-ui.ts +0 -28
  471. package/scripts/check-npm-release.sh +0 -32
  472. package/scripts/check-public-release-surface.sh +0 -19
  473. package/scripts/check-release-published.sh +0 -57
  474. package/scripts/check-release-readiness.sh +0 -37
  475. package/scripts/check-release-version.mjs +0 -74
  476. package/scripts/check-tarball-install-smoke.sh +0 -150
  477. package/scripts/package-source-archive.sh +0 -147
  478. package/scripts/public-release-files.txt +0 -39
  479. package/scripts/public-release.ts +0 -174
  480. package/scripts/publish-release-tarball.sh +0 -27
  481. package/scripts/route-nl-vs-ts-eval.ts +0 -679
  482. package/scripts/stage-runtime-release.ts +0 -44
  483. package/src/cli/controller/progress.ts +0 -656
  484. package/src/cli/controller/work-mode.ts +0 -181
  485. package/src/cli/local-bridge/console-assets.ts +0 -17
  486. package/src/cli/local-bridge/dashboard.ts +0 -17
  487. package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
  488. package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
  489. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
  490. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
  491. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
  492. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
  493. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
  494. package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
  495. package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
  496. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
  497. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
  498. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
  499. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
  500. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
  501. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
  502. package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
  503. package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
  504. package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
  505. package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
  506. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
  507. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
  508. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
  509. package/src/cli/local-bridge/frontend/src/styles.css +0 -28
  510. package/src/cli/local-bridge/frontend/src/types.ts +0 -15
  511. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
  512. package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
  513. package/src/cli/local-bridge/ui-dist/app.css +0 -1
  514. package/src/cli/local-bridge/ui-dist/app.js +0 -11228
  515. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
  516. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
  517. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
  518. package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
  519. package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
  520. package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
  521. package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
  522. package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
  523. package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
  524. package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
  525. package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
  526. package/src/runtime/control-plane/routing/index.ts +0 -1
  527. package/src/runtime/control-plane/routing/route-policy.ts +0 -401
  528. package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
@@ -1,4 +1,5 @@
1
1
  import { assertImplementationReviewHistoryAppendOnly, validateImplementationReviewRecord } from './implementation-review';
2
+ import { normalizeWorkObjectiveRelationIds, validateWorkObjectiveRelationShape } from './objective-graph';
2
3
  import {
3
4
  WORK_PHASES,
4
5
  isDirectEditWorkCompletionReceipt,
@@ -10,7 +11,6 @@ import {
10
11
  type EvidenceState,
11
12
  type SuggestedNextAction,
12
13
  type WorkContract,
13
- type WorkContractStatus,
14
14
  type WorkPhase,
15
15
  type WorkPhaseEvidence,
16
16
  type WorkPhaseEvidenceMap,
@@ -24,7 +24,7 @@ export function transitionPhaseEvidence(
24
24
  current: Pick<WorkContract, 'phaseEvidence' | 'evidenceRefs'>,
25
25
  targetPhase: WorkPhase,
26
26
  input: {
27
- status: WorkContractStatus;
27
+ state?: WorkPhaseEvidence['state'];
28
28
  summary: string;
29
29
  evidenceRefs?: EvidenceRef[];
30
30
  recordedAt: string;
@@ -56,13 +56,7 @@ export function transitionPhaseEvidence(
56
56
  }
57
57
  }
58
58
  phaseEvidence[targetPhase] = {
59
- state: input.status === 'failed'
60
- ? 'failed'
61
- : input.status === 'cancelled'
62
- ? 'skipped'
63
- : input.status === 'blocked' || input.status === 'ready'
64
- ? 'blocked'
65
- : 'active',
59
+ state: input.state ?? 'active',
66
60
  source,
67
61
  summary: input.summary.trim().slice(0, 1_000) || `Work entered ${targetPhase}.`,
68
62
  evidenceRefs,
@@ -73,24 +67,8 @@ export function transitionPhaseEvidence(
73
67
 
74
68
  export function validateWorkSemantics(contract: WorkContract): WorkContract {
75
69
  if (!contract.objective.trim()) throw new Error('WORK_OBJECTIVE_REQUIRED');
76
- if (contract.status === 'completed' && !contract.completionReceipt) {
77
- throw new Error('WORK_COMPLETION_RECEIPT_REQUIRED');
78
- }
79
- const currentPhaseIndex = phaseIndex(contract.phase);
80
- for (const phase of WORK_PHASES) {
81
- const checkpoint = contract.phaseEvidence?.[phase];
82
- if (!checkpoint) throw new Error(`WORK_PHASE_EVIDENCE_REQUIRED: ${phase}`);
83
- const index = phaseIndex(phase);
84
- if (index < currentPhaseIndex && !['satisfied', 'skipped'].includes(checkpoint.state)) {
85
- throw new Error(`WORK_PHASE_EVIDENCE_PREVIOUS_NOT_SATISFIED: ${phase}`);
86
- }
87
- if (index === currentPhaseIndex && checkpoint.state === 'pending') {
88
- throw new Error(`WORK_PHASE_EVIDENCE_REQUIRED: ${phase}`);
89
- }
90
- if (index > currentPhaseIndex && checkpoint.state !== 'pending') {
91
- throw new Error(`WORK_PHASE_EVIDENCE_FUTURE_NOT_PENDING: ${phase}`);
92
- }
93
- }
70
+ validateWorkObjectiveRelationShape(contract);
71
+ if (!['open', 'completed', 'cancelled'].includes(contract.semanticState)) throw new Error('WORK_SEMANTIC_STATE_INVALID');
94
72
  for (const review of contract.implementationReviews ?? []) validateImplementationReviewRecord(review);
95
73
  if (contract.completionReceipt) {
96
74
  const receipt = contract.completionReceipt;
@@ -116,7 +94,9 @@ export function validateWorkSemantics(contract: WorkContract): WorkContract {
116
94
  if (receipt.workspaceChangedPaths.length !== 0) throw new Error('WORK_COMPLETION_RECEIPT_READ_ONLY_REVIEW_WORKSPACE_CHANGED');
117
95
  const reviewEvidence = contract.readOnlyReviewEvidence;
118
96
  if (!reviewEvidence || reviewEvidence.sourceRevision !== receipt.sourceRevision) throw new Error('WORK_COMPLETION_RECEIPT_READ_ONLY_REVIEW_EVIDENCE_REQUIRED');
119
- if (reviewEvidence.findings.length !== 0 || receipt.findingCount !== 0 || receipt.inspectedPaths.length === 0) throw new Error('WORK_COMPLETION_RECEIPT_READ_ONLY_REVIEW_CLEAN_SCOPE_REQUIRED');
97
+ // Findings are durable observations the model/user acts on; they never block
98
+ // terminal completion. Only the exact inspected scope must stay consistent.
99
+ if (receipt.inspectedPaths.length === 0) throw new Error('WORK_COMPLETION_RECEIPT_READ_ONLY_REVIEW_SCOPE_REQUIRED');
120
100
  const evidencePaths = [...new Set(reviewEvidence.inspectedPaths)].sort();
121
101
  const receiptPaths = [...new Set(receipt.inspectedPaths)].sort();
122
102
  if (evidencePaths.length !== receiptPaths.length || evidencePaths.some((path, index) => path !== receiptPaths[index])) {
@@ -143,29 +123,15 @@ export function validateWorkSemantics(contract: WorkContract): WorkContract {
143
123
  if (contract.completionOutcome !== 'completed_local') throw new Error('WORK_COMPLETION_RECEIPT_LOCAL_EFFECT_OUTCOME_REQUIRED');
144
124
  if (!receipt.operation.trim() || !receipt.target.id.trim()) throw new Error('WORK_COMPLETION_RECEIPT_LOCAL_EFFECT_TARGET_REQUIRED');
145
125
  }
146
- if (contract.status !== 'completed') throw new Error('WORK_COMPLETION_RECEIPT_REQUIRES_COMPLETED_WORK');
147
- for (const phase of WORK_PHASES) {
148
- if (!['satisfied', 'skipped'].includes(contract.phaseEvidence[phase].state)) {
149
- throw new Error(`WORK_COMPLETION_PHASE_NOT_SATISFIED: ${phase}`);
150
- }
151
- }
152
- for (const phase of ['delivery', 'cleanup'] as WorkPhase[]) {
153
- if (contract.phaseEvidence[phase].receiptId !== receipt.receiptId) {
154
- throw new Error(`WORK_COMPLETION_PHASE_RECEIPT_MISMATCH: ${phase}`);
155
- }
156
- }
126
+ // Delivery/effect receipts are mechanical evidence. They never require or imply semantic completion.
157
127
  }
158
128
  const outcome = contract.completionOutcome;
159
129
  if (!outcome) return contract;
160
- if (contract.status !== 'completed' || !contract.completionReceipt) {
161
- throw new Error(`WORK_SEMANTICS_INVALID: ${outcome} requires a completed Work receipt`);
162
- }
163
- if (contract.dispatchState !== 'terminal') {
164
- throw new Error(`WORK_SEMANTICS_INVALID: ${outcome} requires terminal dispatch`);
165
- }
166
- if (contract.evidenceState !== 'valid') {
167
- throw new Error(`WORK_SEMANTICS_INVALID: ${outcome} requires valid evidence`);
130
+ if (!contract.completionReceipt) {
131
+ throw new Error(`WORK_SEMANTICS_INVALID: ${outcome} requires a delivery/effect receipt`);
168
132
  }
133
+ // completionOutcome classifies the attached delivery/effect receipt only.
134
+ // Dispatch and generic evidence axes remain independent execution observations.
169
135
  if (outcome === 'completed_changed' && contract.workKind !== 'repository_change') {
170
136
  throw new Error('WORK_SEMANTICS_INVALID: completed_changed requires repository_change WorkKind');
171
137
  }
@@ -214,24 +180,12 @@ const EVIDENCE_TRANSITIONS: Readonly<Record<EvidenceState, readonly EvidenceStat
214
180
  export function validateWorkSemanticTransition(
215
181
  current: WorkContract,
216
182
  next: WorkContract,
217
- options: { allowRetainedCancelledResume?: boolean; allowPhaseRegression?: boolean } = {},
183
+ options: { allowPhaseRegression?: boolean } = {},
218
184
  ): WorkContract {
219
- const retryingFailedWork = current.status === 'failed'
220
- && !current.completionOutcome
221
- && ['claimed', 'launching', 'running', 'blocked'].includes(next.dispatchState);
222
- const resumingRetainedCancelledWork = options.allowRetainedCancelledResume === true
223
- && current.status === 'cancelled'
224
- && current.dispatchState === 'terminal'
225
- && current.phaseEvidence[current.phase].state === 'skipped'
226
- && !current.completionReceipt
227
- && !current.completionOutcome
228
- && next.status === 'running'
229
- && next.dispatchState === 'running'
230
- && next.phase === 'implementation';
231
185
  if (phaseIndex(next.phase) < phaseIndex(current.phase) && options.allowPhaseRegression !== true) {
232
186
  throw new Error(`WORK_SEMANTICS_TRANSITION_INVALID: phase ${current.phase} -> ${next.phase} requires explicit regression authority`);
233
187
  }
234
- if (!retryingFailedWork && !resumingRetainedCancelledWork && !DISPATCH_TRANSITIONS[current.dispatchState].includes(next.dispatchState)) {
188
+ if (!DISPATCH_TRANSITIONS[current.dispatchState].includes(next.dispatchState)) {
235
189
  throw new Error(`WORK_SEMANTICS_TRANSITION_INVALID: dispatch ${current.dispatchState} -> ${next.dispatchState}`);
236
190
  }
237
191
  if (!EVIDENCE_TRANSITIONS[current.evidenceState].includes(next.evidenceState)) {
@@ -246,6 +200,14 @@ export function validateWorkSemanticTransition(
246
200
  if (current.parentWorkId !== next.parentWorkId) {
247
201
  throw new Error('WORK_SEMANTICS_TRANSITION_INVALID: parentWorkId is immutable');
248
202
  }
203
+ if (current.semanticParentWorkId !== next.semanticParentWorkId) {
204
+ throw new Error('WORK_SEMANTICS_TRANSITION_INVALID: semanticParentWorkId requires semantic CAS');
205
+ }
206
+ const currentDependencies = normalizeWorkObjectiveRelationIds(current.dependsOnWorkIds).sort();
207
+ const nextDependencies = normalizeWorkObjectiveRelationIds(next.dependsOnWorkIds).sort();
208
+ if (currentDependencies.length !== nextDependencies.length || currentDependencies.some((id, index) => id !== nextDependencies[index])) {
209
+ throw new Error('WORK_SEMANTICS_TRANSITION_INVALID: dependsOnWorkIds requires semantic CAS');
210
+ }
249
211
  if (current.predecessorWorkId !== next.predecessorWorkId) {
250
212
  throw new Error('WORK_SEMANTICS_TRANSITION_INVALID: predecessorWorkId is immutable');
251
213
  }
@@ -253,7 +215,7 @@ export function validateWorkSemanticTransition(
253
215
  return next;
254
216
  }
255
217
 
256
- export function suggestedActionsForStatus(status: WorkContractStatus, actions: readonly SuggestedNextAction[]): SuggestedNextAction[] {
257
- if (status === 'completed' || status === 'cancelled') return [];
218
+ export function suggestedActionsForSemanticState(state: 'open' | 'completed' | 'cancelled', actions: readonly SuggestedNextAction[]): SuggestedNextAction[] {
219
+ if (state !== 'open') return [];
258
220
  return actions.slice(0, 8);
259
221
  }
@@ -1,12 +1,10 @@
1
1
  import type { ExecutionPlacement, ScopeRef } from '../../identity/api/index';
2
2
  import type { ProcessCheckReceiptEvidence } from './check-receipt';
3
- import type { WorkAccessMode, WorkRouteDecisionSnapshot } from './execution-snapshot';
3
+ import type { WorkAccessMode } from './execution-snapshot';
4
4
  import type { RepositoryCompletionReceipt } from './repository-completion-receipt';
5
5
  import type { WorkImplementationReviewRecord } from './implementation-review';
6
6
  import type { EngineeringContextReceipt } from './engineering-contracts';
7
7
 
8
- /** Work-persisted orchestration metadata is Kernel-owned; facade is a consumer. */
9
- export type ExecutionMode = 'direct_control' | 'goal_workloop' | 'handoff_only';
10
8
  export type FacadeDetailLevel = 'summary' | 'detail' | 'raw';
11
9
  export interface EvidenceRef {
12
10
  evidenceId?: string;
@@ -17,7 +15,7 @@ export interface EvidenceRef {
17
15
  }
18
16
  export interface WorkExecutionConcurrencyProjection {
19
17
  schemaVersion: 1;
20
- /** Projection only. Process Runtime leases and Controller ownership remain execution authority. */
18
+ /** Projection only. Concrete Process/resource owners remain execution authority. */
21
19
  status: 'waiting' | 'invalid';
22
20
  source: 'work_compatibility' | 'resource_lease' | 'scheduler_capacity';
23
21
  attemptId?: string;
@@ -31,7 +29,6 @@ export interface WorkExecutionConcurrencyProjection {
31
29
  wakeTrigger:
32
30
  | { kind: 'work_terminal'; workId: string }
33
31
  | { kind: 'resource_release'; resourceKeys: string[] }
34
- | { kind: 'controller_release'; workId: string }
35
32
  | { kind: 'scheduler_capacity'; capacityKey: string }
36
33
  | { kind: 'work_contract_change'; workId: string };
37
34
  recordedAt: string;
@@ -39,7 +36,7 @@ export interface WorkExecutionConcurrencyProjection {
39
36
 
40
37
  export interface SuggestedNextAction {
41
38
  label: string;
42
- tool: 'rh_access' | 'rh_status' | 'rh_inbox' | 'rh_context' | 'rh_work';
39
+ tool: 'rh_access' | 'rh_status' | 'rh_inbox' | 'rh_context' | 'rh_work' | 'capability_execute';
43
40
  operation: string;
44
41
  payload?: Record<string, unknown>;
45
42
  risk: 'readonly' | 'local_repo_write' | 'workspace_write' | 'remote_write' | 'destructive_remote' | 'destructive' | 'raw_secret_config' | 'unknown';
@@ -58,16 +55,28 @@ export interface PolicyDecision {
58
55
  }
59
56
 
60
57
  /** Canonical Kernel Work domain contracts. */
61
- export const WORK_CONTRACT_STATUSES = [
62
- 'open',
63
- 'running',
64
- 'blocked',
65
- 'ready',
66
- 'completed',
67
- 'failed',
68
- 'cancelled',
69
- ] as const;
70
- export type WorkContractStatus = (typeof WORK_CONTRACT_STATUSES)[number];
58
+ export const SEMANTIC_WORK_STATES = ['open', 'completed', 'cancelled'] as const;
59
+ /** Thin semantic Work state. Execution/runtime conditions never add states here. */
60
+ export type SemanticWorkState = (typeof SEMANTIC_WORK_STATES)[number];
61
+
62
+ export interface WorkSemanticView {
63
+ workId: string;
64
+ revision: number;
65
+ semanticScope: ScopeRef;
66
+ objective: string;
67
+ state: SemanticWorkState;
68
+ requirementId?: string;
69
+ requirementRevision?: number;
70
+ planId?: string;
71
+ planRevision?: number;
72
+ /** Objective decomposition parent. Distinct from execution-child parentWorkId and continuation lineage. */
73
+ semanticParentWorkId?: string;
74
+ /** Explicit semantic ordering dependencies. Absence/empty means siblings are independently runnable. */
75
+ dependsOnWorkIds?: string[];
76
+ resultRefs: string[];
77
+ createdAt: string;
78
+ updatedAt: string;
79
+ }
71
80
 
72
81
  /**
73
82
  * Work execution phases are intentionally small and technical. User-facing
@@ -95,13 +104,12 @@ export type WorkPhaseEvidenceMap = Record<WorkPhase, WorkPhaseEvidence>;
95
104
  export const WORK_RISKS = ['readonly', 'low', 'medium', 'high', 'destructive'] as const;
96
105
  export type WorkRisk = (typeof WORK_RISKS)[number];
97
106
 
98
- export const TERMINAL_WORK_CONTRACT_STATUSES: readonly WorkContractStatus[] = [
107
+ export const TERMINAL_SEMANTIC_WORK_STATES: readonly SemanticWorkState[] = [
99
108
  'completed',
100
- 'failed',
101
109
  'cancelled',
102
110
  ] as const;
103
111
 
104
- /** Independent semantic axes; `status` remains a compatibility projection. */
112
+ /** Independent execution/evidence classifications; none are Work lifecycle state. */
105
113
  export const WORK_KINDS = [
106
114
  'repository_change',
107
115
  'completed_no_change',
@@ -277,14 +285,10 @@ export interface WorkContractConstraints {
277
285
  allowMerge?: boolean;
278
286
  allowCleanup?: boolean;
279
287
  allowDestructive?: boolean;
280
- requireHandoffOnAmbiguity?: boolean;
281
288
  /** Immutable execution-policy snapshot captured when work starts. */
282
289
  accessMode?: WorkAccessMode;
283
- /** current is the stability-first default; isolated is opt-in or used for explicit parallelism. */
290
+ /** Explicit repository placement. `auto` is retained as the legacy durable-Work isolated/frozen-base default. */
284
291
  workspaceMode?: 'current' | 'isolated' | 'auto';
285
- requireWorktree?: boolean;
286
- /** Admission fence: repository mutation must not use the Direct Control/current-main lane. */
287
- directMainProhibited?: boolean;
288
292
  /** True when a change alters the agreed architecture direction rather than only implementation details. */
289
293
  architectureStrategyChange?: boolean;
290
294
  /** True when the proposed change weakens the thin-harness / high-performance execution policy. */
@@ -295,12 +299,6 @@ export interface WorkContractConstraints {
295
299
  remoteDeliveryRequired?: boolean;
296
300
  }
297
301
 
298
- export interface WorkContractDriverPolicy {
299
- preferred: 'direct_edit' | 'isolated_worktree' | 'external_controller' | 'handoff_only';
300
- allowWorker: boolean;
301
- allowDirectEdit: boolean;
302
- }
303
-
304
302
  export interface WorktreePolicy {
305
303
  required: boolean;
306
304
  reason?: string;
@@ -371,15 +369,15 @@ export interface WorkReconciliationRecord {
371
369
  }
372
370
 
373
371
  export interface WorkContract {
374
- schemaVersion: 1 | 2 | 3;
372
+ schemaVersion: 1 | 2 | 3 | 4;
375
373
  workId: string;
376
374
  /** Portable semantic scope. New records derive this from Requirement/Plan/Work identity, never local repository registration. */
377
375
  scopeRef?: ScopeRef;
378
- /** Replaceable node-local placement. repoId/checkoutId below remain compatibility fields during V2 migration. */
376
+ /** Replaceable node-local execution placement; never part of semantic Work identity. */
379
377
  executionPlacement?: ExecutionPlacement;
380
- /** @deprecated Node-local placement compatibility field; do not use as semantic Work identity. */
378
+ /** Repository relationship used for local execution lookup; never semantic lifecycle authority. */
381
379
  repoId: string;
382
- /** @deprecated Node-local placement compatibility field. Optional only for legacy/current-workspace records. */
380
+ /** Optional checkout relationship for local execution placement. */
383
381
  checkoutId?: string;
384
382
  principalId?: string;
385
383
  controllerInstanceId?: string;
@@ -387,10 +385,18 @@ export interface WorkContract {
387
385
  /** Authoritative repository baseline captured at Work admission. Absent means legacy/unknown, never implicitly unborn. */
388
386
  repositoryBaseState?: 'revision' | 'unborn';
389
387
  workspaceFingerprint?: string;
390
- routeDecisionFingerprint?: string;
391
- routeDecision?: WorkRouteDecisionSnapshot;
392
- mode: ExecutionMode;
393
388
  objective: string;
389
+ /** Independent authored-context revision. Mechanical Work writes never use the SQLite row revision as semantic CAS. */
390
+ semanticRevision?: number;
391
+ /** Timestamp of the authored semantic content; mechanical Work writes must not change it. */
392
+ semanticUpdatedAt?: string;
393
+ /** The single authored Work lifecycle state. Execution/runtime conditions never add states here. */
394
+ semanticState: SemanticWorkState;
395
+ /** Optional provenance links to the Requirement/Plan semantic revisions used when this Work was authored. */
396
+ requirementRevision?: number;
397
+ planRevision?: number;
398
+ /** Model/user-selected semantic result references, separate from mechanical evidence and delivery receipts. */
399
+ semanticResultRefs?: string[];
394
400
  acceptanceCriteria: string[];
395
401
  constraints: WorkContractConstraints;
396
402
  /** Risk is immutable contract input and is projected to legacy Task reads. */
@@ -399,16 +405,20 @@ export interface WorkContract {
399
405
  engineeringContext?: EngineeringContextReceipt;
400
406
  /** Actionable concurrency wait projection. Absence means no currently known semantic/resource blocker. */
401
407
  executionConcurrency?: WorkExecutionConcurrencyProjection;
402
- /** Technical phase; Requirement owns the user lifecycle. */
408
+ /** Repository-execution phase observation. Never semantic Work authority. */
403
409
  phase: WorkPhase;
404
- /** Work-owned phase checkpoints. Task/Run/Process records may contribute evidence but cannot write this map directly. */
410
+ /** Mechanical phase evidence for execution/delivery observation only. */
405
411
  phaseEvidence: WorkPhaseEvidenceMap;
406
- /** Explicit lifecycle semantics. `status` is retained as a compatibility/read projection, not transition authority. */
412
+ /** Execution/result classification. Semantic Work identity/state never depends on this field. */
407
413
  workKind: WorkKind;
408
414
  /** Primary is an objective-level business execution lane; execution_child is a resumable low-level operation handle owned by a primary Work or standalone caller. */
409
415
  lifecycleRole?: 'primary' | 'execution_child';
410
416
  /** Optional objective-level parent when this Work is only an execution child. */
411
417
  parentWorkId?: string;
418
+ /** Objective decomposition parent for primary semantic Work. Never execution ownership or continuation lineage. */
419
+ semanticParentWorkId?: string;
420
+ /** Explicit objective ordering dependencies for primary semantic Work. Never inferred from Plan items. */
421
+ dependsOnWorkIds?: string[];
412
422
  /** Immediate prior primary Work in the same semantic continuation lineage. Relationship evidence only; never execution or deletion authority. */
413
423
  predecessorWorkId?: string;
414
424
  /** Historical predecessors explicitly replaced by this Work. Relationship evidence only; never deletion authority. */
@@ -417,18 +427,18 @@ export interface WorkContract {
417
427
  supersededBy?: string;
418
428
  /** Bounded durable reason for the supersession edge. */
419
429
  supersessionReason?: string;
430
+ /** Mechanical execution/evidence projections; none may advance semanticState. */
420
431
  dispatchState: DispatchState;
421
432
  evidenceState: EvidenceState;
422
433
  completionOutcome?: CompletionOutcome;
423
- status: WorkContractStatus;
424
434
  createdAt: string;
425
435
  updatedAt: string;
426
- /** @deprecated Prefer Requirement/Plan/Work links; kept for compatibility reads only. */
436
+ /** Optional historical Issue/Task relationship identifiers; never lifecycle authority. */
427
437
  issueId?: string;
428
438
  taskId?: string;
429
439
  /** Stable Requirement authority that this Work may complete. */
430
440
  requirementId?: string;
431
- /** Work-owned completion receipt. Legacy Task receipts are projections only. */
441
+ /** Work-owned delivery/effect receipt. It never determines semantic completion. */
432
442
  completionReceipt?: WorkCompletionReceipt;
433
443
  /** Provenance for complex work dispatched from a durable PlanContract step. */
434
444
  planId?: string;
@@ -450,11 +460,7 @@ export interface WorkContract {
450
460
  readOnlyReviewEvidence?: ReadOnlyReviewEvidence;
451
461
  /** Explicit Controller-reviewed acceptance bindings. Mechanical evidence attribution alone never writes this field. */
452
462
  semanticAcceptanceEvidence?: WorkSemanticAcceptanceEvidence[];
453
- /** Explicit policy fence. This is not semantic completeness evidence. */
454
- allowedPaths: string[];
455
- forbiddenPaths: string[];
456
463
  checks: string[];
457
- driver: WorkContractDriverPolicy;
458
464
  worktreePolicy: WorktreePolicy;
459
465
  evidencePolicy: EvidencePolicy;
460
466
  approvalPolicy: ApprovalPolicy;
@@ -505,7 +511,7 @@ export function semanticScopeRefForWork(
505
511
  return { schemaVersion: 1, kind: 'work', id: work.workId.trim() };
506
512
  }
507
513
 
508
- /** Resolve replaceable execution placement from explicit V2 placement or compatibility fields. */
514
+ /** Resolve replaceable execution placement from explicit placement or stored repository relationships. */
509
515
  export function executionPlacementForWork(
510
516
  work: Pick<WorkContract, 'executionPlacement' | 'repoId' | 'checkoutId'>,
511
517
  ): ExecutionPlacement {
@@ -518,11 +524,11 @@ export function executionPlacementForWork(
518
524
  }
519
525
 
520
526
  export interface WorkContractStore {
521
- schemaVersion: 1 | 2 | 3;
527
+ schemaVersion: 1 | 2 | 3 | 4;
522
528
  updatedAt: string;
523
529
  contracts: WorkContract[];
524
530
  }
525
531
 
526
- export function isTerminalWorkContractStatus(status: WorkContractStatus): boolean {
527
- return TERMINAL_WORK_CONTRACT_STATUSES.includes(status);
532
+ export function isTerminalSemanticWorkState(state: SemanticWorkState): boolean {
533
+ return TERMINAL_SEMANTIC_WORK_STATES.includes(state);
528
534
  }