@moretea-labs/forge 1.7.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/AGENTS.md +58 -62
  2. package/CHANGELOG.md +26 -0
  3. package/CLAUDE.md +42 -62
  4. package/README.md +2 -2
  5. package/SKILL.md +0 -1
  6. package/THIRD_PARTY_NOTICES.md +5 -2
  7. package/adapters/browser/index.ts +2 -0
  8. package/adapters/chatgpt/browser-delivery-host.ts +71 -0
  9. package/adapters/chatgpt/browser-delivery-runtime.ts +783 -0
  10. package/adapters/chatgpt/controller-binding-store.ts +55 -0
  11. package/adapters/chatgpt/controller-host.ts +119 -0
  12. package/adapters/chatgpt/controller-round-host.ts +78 -0
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +45 -0
  14. package/adapters/chatgpt/provider-delivery.ts +113 -0
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +192 -0
  16. package/adapters/chatgpt/wsl-bridge-delivery-host.ts +63 -0
  17. package/adapters/computer/desktop-operator-contract.ts +7 -0
  18. package/adapters/computer/desktop-operator-discovery.ts +201 -0
  19. package/adapters/computer/desktop-operator-negotiation.ts +174 -0
  20. package/adapters/computer/desktop-operator-provider.ts +312 -0
  21. package/adapters/computer/index.ts +1 -0
  22. package/adapters/computer/interaction-target-authority.ts +944 -0
  23. package/adapters/controller-process/binding-store.ts +34 -0
  24. package/adapters/controller-process/controller-host.ts +26 -0
  25. package/adapters/mcp/access-mode.ts +132 -0
  26. package/adapters/mcp/audit.ts +32 -0
  27. package/adapters/mcp/auth.ts +407 -0
  28. package/adapters/mcp/controller-round-compatibility.ts +184 -0
  29. package/adapters/mcp/frozen-client-semantic-compatibility.ts +292 -0
  30. package/adapters/mcp/instructions.ts +36 -0
  31. package/adapters/mcp/legacy-context.ts +18 -0
  32. package/adapters/mcp/multi-repository.ts +437 -0
  33. package/adapters/mcp/oauth.ts +391 -0
  34. package/adapters/mcp/paths.ts +140 -0
  35. package/adapters/mcp/policy.ts +232 -0
  36. package/adapters/mcp/proxy-env.ts +62 -0
  37. package/adapters/mcp/readiness-projection.ts +24 -0
  38. package/adapters/mcp/redaction.ts +21 -0
  39. package/adapters/mcp/repo.ts +24 -0
  40. package/adapters/mcp/runtime-gateway/artifact-adapter.ts +52 -0
  41. package/adapters/mcp/runtime-gateway/context-adapter.ts +829 -0
  42. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +191 -0
  43. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +147 -0
  44. package/adapters/mcp/runtime-gateway/execution-control-adapter.ts +28 -0
  45. package/adapters/mcp/runtime-gateway/execution-tools.ts +207 -0
  46. package/adapters/mcp/runtime-gateway/filesystem-adapter.ts +38 -0
  47. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +411 -0
  48. package/adapters/mcp/runtime-gateway/legacy-ios-tool-adapter.ts +105 -0
  49. package/adapters/mcp/runtime-gateway/maintenance-adapter.ts +44 -0
  50. package/adapters/mcp/runtime-gateway/model-adapter.ts +63 -0
  51. package/adapters/mcp/runtime-gateway/persisted-check-process.ts +3 -0
  52. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +308 -0
  53. package/adapters/mcp/runtime-gateway/process-tools.ts +289 -0
  54. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +76 -0
  55. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +268 -0
  56. package/adapters/mcp/runtime-gateway/recovery-client-adapter.ts +70 -0
  57. package/adapters/mcp/runtime-gateway/recovery-tool-contract.ts +99 -0
  58. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +110 -0
  59. package/adapters/mcp/runtime-gateway/result-adapter.ts +108 -0
  60. package/adapters/mcp/runtime-gateway/router.ts +728 -0
  61. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1251 -0
  62. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +634 -0
  63. package/adapters/mcp/runtime-gateway/runtime-tool-shared.ts +27 -0
  64. package/adapters/mcp/runtime-gateway/runtime-tools.ts +68 -0
  65. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +186 -0
  66. package/adapters/mcp/runtime-gateway/shared-adapter.ts +25 -0
  67. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +870 -0
  68. package/adapters/mcp/runtime-gateway/work-adapter.ts +3186 -0
  69. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +502 -0
  70. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +1 -0
  71. package/adapters/mcp/server.ts +1048 -0
  72. package/adapters/mcp/setup.ts +791 -0
  73. package/adapters/mcp/tool-capability-cache.ts +87 -0
  74. package/adapters/mcp/tool-mapping/access-tools.ts +387 -0
  75. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +5265 -0
  76. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +150 -0
  77. package/adapters/mcp/tool-mapping/repository-tools.ts +1691 -0
  78. package/adapters/mcp/tool-mapping/tools.ts +9 -0
  79. package/adapters/mcp/tool-mapping/umbrella-tools.ts +117 -0
  80. package/adapters/mcp/toolset-names.ts +74 -0
  81. package/adapters/mcp/toolset-selection.ts +41 -0
  82. package/adapters/mcp/toolset.ts +336 -0
  83. package/adapters/mcp/transports/http.ts +1456 -0
  84. package/adapters/mcp/transports/session-registry.ts +513 -0
  85. package/adapters/mcp/transports/stdio.ts +8 -0
  86. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +139 -0
  87. package/adapters/mcp/types.ts +41 -0
  88. package/assets/AGENTS.md +2 -16
  89. package/assets/CLAUDE.md +2 -16
  90. package/assets/hooks/AGENTS.md +3 -14
  91. package/assets/hooks/CLAUDE.md +3 -14
  92. package/assets/hooks/hook-input.sh +9 -2
  93. package/assets/hooks/lib/workflow-state.sh +28 -10
  94. package/assets/hooks/prompt-guard.sh +63 -37
  95. package/assets/hooks/security-sentinel.sh +2 -1
  96. package/assets/hooks/session-start-context.sh +7 -5
  97. package/assets/hooks/stop-orchestrator.sh +13 -3
  98. package/assets/initializer-question-pack.v4.json +11 -7
  99. package/assets/partials/05-workflow.partial.md +18 -73
  100. package/assets/partials/07-footer.partial.md +1 -1
  101. package/assets/partials-agents/02-operating-mode.partial.md +1 -2
  102. package/assets/partials-agents/04-task-protocol.partial.md +14 -59
  103. package/assets/partials-agents/06-quality-safety.partial.md +11 -16
  104. package/assets/partials-agents/08-deep-docs.partial.md +1 -2
  105. package/assets/plan-map.json +11 -11
  106. package/assets/plugin-registry.v1.json +9 -3
  107. package/assets/plugin-trust-policy.v1.json +6 -0
  108. package/assets/recovery/ForgeRecovery.ps1 +100 -0
  109. package/assets/recovery/forge-wsl-rescue +271 -0
  110. package/assets/reference-configs/development-protocol.md +11 -15
  111. package/assets/reference-configs/document-generation.md +1 -1
  112. package/assets/reference-configs/global-working-rules.md +9 -1
  113. package/assets/reference-configs/harness-overview.md +22 -112
  114. package/assets/reference-configs/hook-operations.md +1 -1
  115. package/assets/reference-configs/sprint-contracts.md +2 -2
  116. package/assets/skill-version.json +2 -2
  117. package/assets/templates/helpers/architecture-event.ts +3 -34
  118. package/assets/templates/helpers/architecture-queue.sh +61 -10
  119. package/assets/templates/helpers/archive-workflow.sh +90 -180
  120. package/assets/templates/helpers/capability-config.ts +8 -11
  121. package/assets/templates/helpers/capability-resolver.ts +37 -19
  122. package/assets/templates/helpers/capture-plan.sh +2 -2
  123. package/assets/templates/helpers/check-architecture-sync.sh +1 -9
  124. package/assets/templates/helpers/check-task-sync.sh +82 -11
  125. package/assets/templates/helpers/check-task-workflow.sh +1 -3
  126. package/assets/templates/helpers/context-contract-sync.sh +1 -12
  127. package/assets/templates/helpers/contract-worktree.sh +26 -24
  128. package/assets/templates/helpers/ensure-task-workflow.sh +6 -8
  129. package/assets/templates/helpers/inspect-project-state.ts +1 -1
  130. package/assets/templates/helpers/migrate-project-template.sh +1 -1
  131. package/assets/templates/helpers/migrate-workflow-docs.ts +53 -239
  132. package/assets/templates/helpers/new-plan.sh +2 -2
  133. package/assets/templates/helpers/plan-to-todo.sh +3 -31
  134. package/assets/templates/helpers/sprint-backlog.sh +1 -1
  135. package/assets/templates/helpers/switch-plan.sh +1 -1
  136. package/assets/templates/helpers/workflow-contract.ts +1 -0
  137. package/assets/workflow-contract.v1.json +63 -171
  138. package/assets/workflows/xiaohongshu/xiaohongshu.collect-metrics.v1.draft.json +118 -0
  139. package/assets/workflows/xiaohongshu/xiaohongshu.publish-image-note.v1.draft.json +316 -0
  140. package/assets/workflows/xiaohongshu/xiaohongshu.publish-long-text.v1.draft.json +324 -0
  141. package/docs/architecture/CURRENT.md +148 -13
  142. package/docs/architecture/EVOLUTION.md +13 -0
  143. package/docs/architecture/decisions/20260801-controller-home-sqlite-state.md +2 -1
  144. package/docs/architecture/decisions/20260831-independent-windows-wsl-host-rescue.md +59 -0
  145. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +120 -0
  146. package/docs/architecture/decisions/20260904-repository-runtime-data-boundary.md +42 -0
  147. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +35 -0
  148. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +296 -0
  149. package/docs/architecture/decisions/20260907-maintenance-diagnosis-bounded-read.md +39 -0
  150. package/docs/architecture/domains/verification.md +7 -0
  151. package/docs/architecture/domains/workflow-engine.md +1 -1
  152. package/docs/architecture/index.md +3 -3
  153. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +19 -8
  154. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +124 -0
  155. package/docs/forge-chatgpt-mcp-setup.md +5 -3
  156. package/docs/forge-plugin-management.md +20 -4
  157. package/docs/forge-runtime-self-healing-loop.md +2 -0
  158. package/docs/operations/benchmark-cross-version-freeze.md +38 -0
  159. package/docs/operations/controller-browser-plugin.md +3 -1
  160. package/docs/operations/homebrew.md +2 -2
  161. package/docs/operations/platform-support.md +16 -8
  162. package/docs/operations/platform-support.zh-CN.md +2 -2
  163. package/docs/operations/standalone-disaster-recovery.md +26 -1
  164. package/docs/operations/uu-remote-rescue.md +41 -0
  165. package/docs/operations/windows-wsl-host-rescue.md +133 -0
  166. package/docs/public-usage-guide.md +1 -1
  167. package/docs/public-usage-guide.zh-CN.md +1 -1
  168. package/docs/tutorials/01-install-and-start.md +1 -1
  169. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  170. package/docs/tutorials/02-connect-chatgpt.md +4 -4
  171. package/docs/tutorials/02-connect-chatgpt.zh-CN.md +4 -4
  172. package/docs/wiki/Implementation.md +1 -1
  173. package/package.json +23 -14
  174. package/packages/kernel/controller/api/index.ts +2 -0
  175. package/packages/kernel/controller/application/controller-round-service.ts +29 -0
  176. package/packages/kernel/controller/application/controller-service.ts +30 -0
  177. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +308 -0
  178. package/packages/kernel/controller/domain/controller-round.ts +107 -0
  179. package/packages/kernel/controller/domain/execution-quality.ts +133 -0
  180. package/packages/kernel/controller/domain/types.ts +56 -0
  181. package/packages/kernel/controller/index.ts +1 -0
  182. package/packages/kernel/controller/infrastructure/controller-binding-store.ts +84 -0
  183. package/packages/kernel/controller/infrastructure/controller-round-store.ts +1384 -0
  184. package/packages/kernel/controller/infrastructure/controller-session-store.ts +578 -0
  185. package/packages/kernel/controller/ports/controller-host.ts +16 -0
  186. package/packages/kernel/goal/api/index.ts +1 -0
  187. package/packages/kernel/goal/domain/types.ts +40 -0
  188. package/packages/kernel/goal/index.ts +1 -0
  189. package/packages/kernel/identity/api/index.ts +5 -0
  190. package/packages/kernel/identity/application/identity-service.ts +67 -0
  191. package/packages/kernel/identity/domain/scope.ts +63 -0
  192. package/packages/kernel/identity/domain/semantic-sync.ts +81 -0
  193. package/packages/kernel/identity/domain/types.ts +44 -0
  194. package/packages/kernel/identity/domain/workspace.ts +56 -0
  195. package/packages/kernel/identity/index.ts +1 -0
  196. package/packages/kernel/identity/infrastructure/identity-store.ts +75 -0
  197. package/packages/kernel/memory/api/index.ts +5 -0
  198. package/packages/kernel/memory/application/experience-service.ts +118 -0
  199. package/packages/kernel/memory/application/outcome-service.ts +77 -0
  200. package/packages/kernel/memory/domain/experience.ts +103 -0
  201. package/packages/kernel/memory/domain/operational-prior.ts +92 -0
  202. package/packages/kernel/memory/index.ts +1 -0
  203. package/packages/kernel/progression/api/index.ts +2 -0
  204. package/packages/kernel/progression/application/projector.ts +211 -0
  205. package/packages/kernel/progression/domain/types.ts +116 -0
  206. package/packages/kernel/progression/index.ts +1 -0
  207. package/packages/kernel/scheduler/api/index.ts +6 -0
  208. package/packages/kernel/scheduler/application/continuation-service.ts +212 -0
  209. package/packages/kernel/scheduler/application/eligibility.ts +252 -0
  210. package/packages/kernel/scheduler/application/schedule-service.ts +24 -0
  211. package/packages/kernel/scheduler/application/settlement.ts +197 -0
  212. package/packages/kernel/scheduler/domain/continuation.ts +38 -0
  213. package/packages/kernel/scheduler/domain/schedule.ts +149 -0
  214. package/packages/kernel/scheduler/index.ts +1 -0
  215. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +38 -0
  216. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +785 -0
  217. package/packages/kernel/work/api/index.ts +15 -0
  218. package/packages/kernel/work/application/work-service.ts +148 -0
  219. package/packages/kernel/work/domain/admission-policy.ts +34 -0
  220. package/packages/kernel/work/domain/check-receipt.ts +43 -0
  221. package/packages/kernel/work/domain/context-closure-receipt.ts +32 -0
  222. package/packages/kernel/work/domain/engineering-contracts.ts +157 -0
  223. package/packages/kernel/work/domain/engineering-design.ts +281 -0
  224. package/packages/kernel/work/domain/engineering-profile.ts +242 -0
  225. package/packages/kernel/work/domain/execution-concurrency.ts +254 -0
  226. package/packages/kernel/work/domain/execution-snapshot.ts +33 -0
  227. package/packages/kernel/work/domain/implementation-review.ts +510 -0
  228. package/packages/kernel/work/domain/project-engineering-contract.ts +202 -0
  229. package/packages/kernel/work/domain/repository-completion-receipt.ts +73 -0
  230. package/packages/kernel/work/domain/state-machine.ts +259 -0
  231. package/packages/kernel/work/domain/types.ts +528 -0
  232. package/packages/kernel/work/index.ts +1 -0
  233. package/packages/kernel/work/infrastructure/work-contract-store.ts +1876 -0
  234. package/packages/kernel/work/ports/work-contract-store.ts +18 -0
  235. package/packages/plugin-runtime/browser/index.ts +3 -0
  236. package/packages/plugin-runtime/browser/provider-registry.ts +110 -0
  237. package/packages/plugin-runtime/browser/runtime-contract.ts +150 -0
  238. package/packages/plugin-runtime/browser/session-authority.ts +61 -0
  239. package/packages/plugin-runtime/computer/index.ts +6 -0
  240. package/packages/plugin-runtime/computer/provider-error.ts +26 -0
  241. package/packages/plugin-runtime/computer/provider-registration.ts +52 -0
  242. package/packages/plugin-runtime/computer/provider-registry.ts +63 -0
  243. package/packages/plugin-runtime/computer/provider.ts +19 -0
  244. package/packages/plugin-runtime/computer/target-authority.ts +190 -0
  245. package/packages/plugin-runtime/computer/target-persistence.ts +54 -0
  246. package/packages/plugin-runtime/external/index.ts +1 -0
  247. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +457 -0
  248. package/packages/plugin-runtime/index.ts +3 -0
  249. package/packages/protocols/browser/index.ts +1 -0
  250. package/packages/protocols/browser/session.ts +98 -0
  251. package/packages/protocols/computer/contract.ts +199 -0
  252. package/packages/protocols/computer/index.ts +1 -0
  253. package/packages/protocols/failure/contract.ts +158 -0
  254. package/packages/protocols/failure/index.ts +1 -0
  255. package/packages/protocols/handoff/index.ts +1 -0
  256. package/packages/protocols/handoff/status.ts +22 -0
  257. package/packages/protocols/mcp/execution-context.ts +11 -0
  258. package/packages/protocols/mcp/index.ts +2 -0
  259. package/packages/protocols/mcp/tool-contract.ts +42 -0
  260. package/packages/workflow-runtime/api/index.ts +2 -0
  261. package/packages/workflow-runtime/application/interpreter.ts +342 -0
  262. package/packages/workflow-runtime/domain/workflow-asset.ts +223 -0
  263. package/packages/workflow-runtime/index.ts +1 -0
  264. package/scripts/assemble-template.ts +1 -1
  265. package/scripts/benchmark-computer-hotpath.ts +255 -0
  266. package/scripts/benchmark-controller-round2.ts +54 -2
  267. package/scripts/benchmark-ios-agent-device.ts +3 -6
  268. package/scripts/benchmark-mcp-transport.ts +3 -4
  269. package/scripts/benchmark-operational-memory-activation.ts +235 -0
  270. package/scripts/benchmark-operational-shadow.ts +28 -0
  271. package/scripts/bootstrap-runtime-maintenance-recovery.sh +4 -1
  272. package/scripts/canary-chatgpt-provider-delivery.ts +97 -0
  273. package/scripts/canary-controller-semantic-wait.ts +195 -0
  274. package/scripts/canary-global-hook.sh +2 -2
  275. package/scripts/check-mcp-compatibility.ts +173 -7
  276. package/scripts/check-platform-support.mjs +28 -2
  277. package/scripts/check-public-docs.sh +1 -1
  278. package/scripts/check-release-readiness.sh +1 -1
  279. package/scripts/check-repository-hygiene.mjs +92 -0
  280. package/scripts/check-runtime-architecture.mjs +1206 -95
  281. package/scripts/check-source-duplication.mjs +9 -1
  282. package/scripts/check-tarball-install-smoke.sh +98 -15
  283. package/scripts/controller-ngrok-rotation.sh +5 -4
  284. package/scripts/create-project-dirs.sh +10 -74
  285. package/scripts/forge-local-recovery-helper.mjs +204 -0
  286. package/scripts/forge-uu-remote-rescue-helper.d.mts +31 -0
  287. package/scripts/forge-uu-remote-rescue-helper.mjs +409 -0
  288. package/scripts/forge-windows-host-recovery-helper.mjs +136 -0
  289. package/scripts/hook-shim.sh +2 -2
  290. package/scripts/init-project.sh +12 -70
  291. package/scripts/install-desktop-operator-registration.ts +4 -2
  292. package/scripts/install-independent-windows-wsl-recovery.ts +125 -0
  293. package/scripts/install-standalone-recovery.ts +122 -10
  294. package/scripts/install-uu-remote-rescue-registration.ts +74 -0
  295. package/scripts/install-windows-host-recovery-registration.ts +22 -0
  296. package/scripts/lib/controller-home-env.sh +6 -3
  297. package/scripts/lib/project-init-lib.sh +39 -582
  298. package/scripts/migrate-chatgpt-automation-schedules.ts +2 -2
  299. package/scripts/migrate-windows-wsl-controller-home.ts +306 -0
  300. package/scripts/open-source-audit-allowlist.txt +12 -1
  301. package/scripts/portability-bindings.mjs +70 -0
  302. package/scripts/run-bounded-command.mjs +55 -0
  303. package/scripts/run-bun-test-file.ts +22 -6
  304. package/scripts/run-governed-gate.ts +4 -1
  305. package/scripts/smoke-mcp-http-runtime.ts +1 -1
  306. package/scripts/smoke-runtime-recovery.ts +34 -1
  307. package/scripts/smoke-schedule-engine.ts +1 -1
  308. package/scripts/stage-runtime-release.ts +6 -1
  309. package/scripts/test-governance.ts +51 -2
  310. package/src/cli/agent-jobs/job-manager.ts +10 -1
  311. package/src/cli/chatgpt-browser/bind-server.ts +2 -1
  312. package/src/cli/chatgpt-browser/binding.ts +20 -10
  313. package/src/cli/chatgpt-browser/bridge-extension.ts +75 -0
  314. package/src/cli/chatgpt-browser/bridge-provider.ts +376 -11
  315. package/src/cli/chatgpt-browser/engine.ts +10 -11
  316. package/src/cli/chatgpt-browser/native-provider.ts +24 -83
  317. package/src/cli/chatgpt-browser/oracle-provider.ts +5 -3
  318. package/src/cli/chatgpt-browser/types.ts +1 -0
  319. package/src/cli/commands/bootstrap-control.ts +334 -0
  320. package/src/cli/commands/brain-assistant.ts +38 -0
  321. package/src/cli/commands/brain.ts +193 -40
  322. package/src/cli/commands/chatgpt.ts +127 -0
  323. package/src/cli/commands/computer.ts +437 -0
  324. package/src/cli/commands/doctor.ts +18 -1
  325. package/src/cli/commands/init-hook.ts +71 -61
  326. package/src/cli/commands/init.ts +3 -1
  327. package/src/cli/commands/mcp.ts +16 -10
  328. package/src/cli/commands/plugin.ts +38 -12
  329. package/src/cli/commands/recovery.ts +493 -80
  330. package/src/cli/commands/runtime.ts +9 -4
  331. package/src/cli/commands/setup-profile.ts +89 -39
  332. package/src/cli/commands/status.ts +2 -1
  333. package/src/cli/controller/check-runner.ts +487 -98
  334. package/src/cli/controller/context/types.ts +7 -1
  335. package/src/cli/controller/context-pack.ts +23 -3
  336. package/src/cli/controller/issue-store.ts +1 -1
  337. package/src/cli/controller/systemd-user.ts +110 -0
  338. package/src/cli/controller/types.ts +10 -70
  339. package/src/cli/controller/worklog.ts +67 -13
  340. package/src/cli/editing/edit-operation-contract.ts +92 -0
  341. package/src/cli/editing/edit-session.ts +289 -13
  342. package/src/cli/github/plugin.ts +17 -12
  343. package/src/cli/hook/route-registry.ts +3 -5
  344. package/src/cli/hook/runtime.ts +49 -3
  345. package/src/cli/index.ts +3 -0
  346. package/src/cli/local-bridge/connector-freshness.ts +2 -2
  347. package/src/cli/local-bridge/console-automations.ts +2 -2
  348. package/src/cli/local-bridge/facade-api.ts +41 -14
  349. package/src/cli/local-bridge/job-store.ts +1 -1
  350. package/src/cli/local-bridge/server.ts +24 -27
  351. package/src/cli/mcp/access-mode.ts +2 -132
  352. package/src/cli/mcp/access-tools.ts +2 -387
  353. package/src/cli/mcp/audit.ts +2 -32
  354. package/src/cli/mcp/auth.ts +2 -404
  355. package/src/cli/mcp/instructions.ts +2 -34
  356. package/src/cli/mcp/legacy-context.ts +2 -16
  357. package/src/cli/mcp/legacy-tool-service.ts +2 -5308
  358. package/src/cli/mcp/multi-repository.ts +2 -436
  359. package/src/cli/mcp/oauth.ts +2 -375
  360. package/src/cli/mcp/openai-secure-tunnel.ts +2 -0
  361. package/src/cli/mcp/paths.ts +2 -140
  362. package/src/cli/mcp/policy.ts +2 -232
  363. package/src/cli/mcp/post-finalize-work-attribution.ts +2 -150
  364. package/src/cli/mcp/proxy-env.ts +2 -62
  365. package/src/cli/mcp/readiness-projection.ts +2 -24
  366. package/src/cli/mcp/redaction.ts +2 -21
  367. package/src/cli/mcp/repo.ts +2 -24
  368. package/src/cli/mcp/repository-tools.ts +2 -1613
  369. package/src/cli/mcp/server.ts +2 -951
  370. package/src/cli/mcp/setup.ts +2 -737
  371. package/src/cli/mcp/tool-capability-cache.ts +2 -87
  372. package/src/cli/mcp/tool-contract.ts +2 -14
  373. package/src/cli/mcp/tools.ts +2 -9
  374. package/src/cli/mcp/toolset-names.ts +2 -70
  375. package/src/cli/mcp/toolset-selection.ts +2 -41
  376. package/src/cli/mcp/toolset.ts +2 -336
  377. package/src/cli/mcp/transports/AGENTS.md +1 -10
  378. package/src/cli/mcp/transports/CLAUDE.md +1 -10
  379. package/src/cli/mcp/transports/http.ts +2 -1414
  380. package/src/cli/mcp/transports/session-registry.ts +2 -490
  381. package/src/cli/mcp/transports/stdio.ts +2 -8
  382. package/src/cli/mcp/types.ts +2 -41
  383. package/src/cli/mcp/umbrella-tools.ts +2 -117
  384. package/src/cli/repositories/command-executor.ts +64 -18
  385. package/src/cli/repositories/command-scope.ts +117 -1
  386. package/src/cli/repositories/controller-home.ts +119 -1
  387. package/src/cli/repositories/identity.ts +13 -0
  388. package/src/cli/repositories/registry.ts +68 -49
  389. package/src/cli/repositories/repository-snapshot.ts +53 -7
  390. package/src/cli/repositories/runtime-storage.ts +27 -2
  391. package/src/cli/repositories/safe-patch.ts +34 -38
  392. package/src/cli/repositories/selected-path-actions.ts +22 -2
  393. package/src/cli/repositories/structured-git.ts +105 -25
  394. package/src/cli/runtime/helper-runner.ts +7 -0
  395. package/src/cli/runtime-invocation.ts +8 -1
  396. package/src/cli/tools/codegraph.ts +44 -25
  397. package/src/core/adoption/manifest-templates.ts +1 -1
  398. package/src/core/adoption/plan.ts +3 -26
  399. package/src/core/adoption/workflow-contract-plan.ts +17 -9
  400. package/src/effects/process-runner.ts +8 -14
  401. package/src/runtime/context/assistant-context.ts +154 -0
  402. package/src/runtime/context/assistant-work-context.ts +147 -0
  403. package/src/runtime/context/codegraph-cache-boundary.ts +255 -0
  404. package/src/runtime/context/codegraph-read-provider.ts +55 -22
  405. package/src/runtime/context/codegraph-sidecar.cjs +8 -1
  406. package/src/runtime/context/context-closure.ts +268 -0
  407. package/src/runtime/context/context-plane.ts +211 -0
  408. package/src/runtime/context/project-engineering-contract.ts +60 -0
  409. package/src/runtime/control-plane/bootstrap/capability-provider.ts +74 -0
  410. package/src/runtime/control-plane/bootstrap/control-api.ts +57 -0
  411. package/src/runtime/control-plane/bootstrap/index.ts +5 -0
  412. package/src/runtime/control-plane/bootstrap/state-machine.ts +141 -0
  413. package/src/runtime/control-plane/bootstrap/store.ts +21 -0
  414. package/src/runtime/control-plane/bootstrap/types.ts +87 -0
  415. package/src/runtime/control-plane/cleanup-artifact-retention.ts +328 -0
  416. package/src/runtime/control-plane/codegraph-cache-retention.ts +164 -0
  417. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +320 -0
  418. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +169 -0
  419. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +350 -0
  420. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +85 -0
  421. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +369 -99
  422. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +103 -15
  423. package/src/runtime/control-plane/execution/implementation-review-content.ts +95 -0
  424. package/src/runtime/control-plane/execution/repository-work-attribution.ts +2 -2
  425. package/src/runtime/control-plane/execution/retained-work-resume.ts +336 -6
  426. package/src/runtime/control-plane/execution/validation.ts +28 -3
  427. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +116 -0
  428. package/src/runtime/control-plane/execution/work-completion-authority.ts +44 -2
  429. package/src/runtime/control-plane/execution/work-evidence-policy.ts +34 -3
  430. package/src/runtime/control-plane/execution/work-execution-support.ts +42 -22
  431. package/src/runtime/control-plane/execution/work-finalization-service.ts +1103 -166
  432. package/src/runtime/control-plane/execution/work-handle-authority.ts +219 -22
  433. package/src/runtime/control-plane/execution/work-handle-store.ts +77 -0
  434. package/src/runtime/control-plane/execution/work-head-settlement.ts +75 -0
  435. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +145 -23
  436. package/src/runtime/control-plane/execution/work-operation-service.ts +49 -13
  437. package/src/runtime/control-plane/execution/work-preparation-service.ts +31 -15
  438. package/src/runtime/control-plane/execution/work-remote-delivery.ts +1 -1
  439. package/src/runtime/control-plane/execution/work-task-receipt.ts +20 -1
  440. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +407 -76
  441. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +88 -18
  442. package/src/runtime/control-plane/execution/work-verification-context.ts +1 -1
  443. package/src/runtime/control-plane/execution/work-verification-service.ts +258 -4
  444. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +200 -15
  445. package/src/runtime/control-plane/facade/capability-registry.ts +21 -10
  446. package/src/runtime/control-plane/facade/controller-round-relay.ts +3 -1118
  447. package/src/runtime/control-plane/facade/controller-session-store.ts +2 -488
  448. package/src/runtime/control-plane/facade/goal-workloop-access.ts +6 -3
  449. package/src/runtime/control-plane/facade/goal-workloop.ts +972 -137
  450. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +158 -0
  451. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +10 -0
  452. package/src/runtime/control-plane/facade/index.ts +4 -2
  453. package/src/runtime/control-plane/facade/operation-digest.ts +22 -58
  454. package/src/runtime/control-plane/facade/plan-contract-store.ts +1004 -38
  455. package/src/runtime/control-plane/facade/repository-work-admission.ts +19 -1
  456. package/src/runtime/control-plane/facade/requirement-authority.ts +218 -0
  457. package/src/runtime/control-plane/facade/requirement-board.ts +6 -1
  458. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +48 -0
  459. package/src/runtime/control-plane/facade/semantic-admission.ts +8 -16
  460. package/src/runtime/control-plane/facade/suggested-actions.ts +4 -1
  461. package/src/runtime/control-plane/facade/types.ts +189 -532
  462. package/src/runtime/control-plane/facade/work-admission-policy.ts +84 -35
  463. package/src/runtime/control-plane/facade/work-contract-store.ts +2 -1043
  464. package/src/runtime/control-plane/facade/work-implementation-review.ts +2 -0
  465. package/src/runtime/control-plane/facade/work-state-machine.ts +2 -250
  466. package/src/runtime/control-plane/generated-cache-retention.ts +239 -18
  467. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +12 -1
  468. package/src/runtime/control-plane/global-scheduler/maintenance.ts +76 -13
  469. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-entry.ts +55 -0
  470. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-process.ts +98 -0
  471. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -1
  472. package/src/runtime/control-plane/global-scheduler/scheduler-worker-entry.ts +10 -0
  473. package/src/runtime/control-plane/global-scheduler/scheduler.ts +173 -81
  474. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +18 -6
  475. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +397 -0
  476. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +2 -177
  477. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +301 -560
  478. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +20 -4
  479. package/src/runtime/control-plane/launcher/thin-launcher.ts +50 -4
  480. package/src/runtime/control-plane/lifecycle-retention-metrics.ts +60 -0
  481. package/src/runtime/control-plane/persistence/experience-store.ts +169 -0
  482. package/src/runtime/control-plane/persistence/operational-prior-store.ts +348 -0
  483. package/src/runtime/control-plane/persistence/requirement-store.ts +30 -22
  484. package/src/runtime/control-plane/persistence/sqlite-store.ts +545 -76
  485. package/src/runtime/control-plane/persistence/workflow-content-store.ts +98 -0
  486. package/src/runtime/control-plane/persistence/workflow-registry-store.ts +186 -0
  487. package/src/runtime/control-plane/persistence/workflow-run-store.ts +123 -0
  488. package/src/runtime/control-plane/release-retention.ts +56 -16
  489. package/src/runtime/control-plane/repository-namespace-retention.ts +208 -0
  490. package/src/runtime/control-plane/routing/route-policy.ts +19 -0
  491. package/src/runtime/control-plane/runtime-cleanup.ts +574 -37
  492. package/src/runtime/control-plane/runtime-generation.ts +6 -0
  493. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +465 -0
  494. package/src/runtime/control-plane/workspace/workspace-store.ts +80 -0
  495. package/src/runtime/diagnostics/incident-repair.ts +406 -0
  496. package/src/runtime/diagnostics/mcp-timing.ts +125 -6
  497. package/src/runtime/diagnostics/performance.ts +6 -14
  498. package/src/runtime/diagnostics/read-only-tool.ts +1 -1
  499. package/src/runtime/evidence/artifact-store.ts +65 -2
  500. package/src/runtime/evidence/operational-shadow.ts +38 -0
  501. package/src/runtime/evidence/process-check-receipt.ts +5 -43
  502. package/src/runtime/evidence/sensitive-output.ts +4 -4
  503. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -1
  504. package/src/runtime/execution/jobs/store.ts +121 -2
  505. package/src/runtime/execution/managed-workspace.ts +55 -5
  506. package/src/runtime/execution/process-runtime/canary.ts +19 -5
  507. package/src/runtime/execution/process-runtime/check-classification.ts +48 -0
  508. package/src/runtime/execution/process-runtime/check-facade.ts +23 -9
  509. package/src/runtime/execution/process-runtime/check-receipt.ts +1 -1
  510. package/src/runtime/execution/process-runtime/check-result-retention.ts +132 -0
  511. package/src/runtime/execution/process-runtime/check-result.ts +73 -2
  512. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -3
  513. package/src/runtime/execution/process-runtime/check-storage.ts +187 -0
  514. package/src/runtime/execution/process-runtime/command-facade.ts +38 -87
  515. package/src/runtime/execution/process-runtime/index.ts +1 -0
  516. package/src/runtime/execution/process-runtime/interactive-admission.ts +2 -1
  517. package/src/runtime/execution/process-runtime/lightweight-managed.ts +32 -1
  518. package/src/runtime/execution/process-runtime/persisted-check.ts +128 -21
  519. package/src/runtime/execution/process-runtime/resource-claims.ts +60 -3
  520. package/src/runtime/execution/process-runtime/runtime.ts +132 -15
  521. package/src/runtime/execution/process-runtime/types.ts +22 -0
  522. package/src/runtime/execution/workers/executor.ts +16 -13
  523. package/src/runtime/execution/workers/worker-entry.ts +1 -1
  524. package/src/runtime/gateway/mcp/execution-tools.ts +2 -207
  525. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +2 -61
  526. package/src/runtime/gateway/mcp/persisted-check-process.ts +2 -3
  527. package/src/runtime/gateway/mcp/process-tools.ts +2 -289
  528. package/src/runtime/gateway/mcp/router.ts +2 -1125
  529. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +2 -565
  530. package/src/runtime/gateway/mcp/runtime-tools.ts +2 -6655
  531. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +2 -1
  532. package/src/runtime/maintenance/cleanup.ts +38 -24
  533. package/src/runtime/platform/browser-product-discovery.ts +174 -0
  534. package/src/runtime/platform/computer-platform.ts +14 -0
  535. package/src/runtime/platform/executable-discovery.ts +54 -0
  536. package/src/runtime/platform/fetch-http-server.ts +90 -0
  537. package/src/runtime/platform/service-manager.ts +138 -0
  538. package/src/runtime/platform/windows-host-discovery.ts +118 -0
  539. package/src/runtime/platform/windows-recovery-deployment.ts +67 -0
  540. package/src/runtime/plugins/action-application.ts +135 -0
  541. package/src/runtime/plugins/app-store-connect-adapter.ts +9 -21
  542. package/src/runtime/plugins/browser-adapter.ts +140 -100
  543. package/src/runtime/plugins/browser-automation-service.ts +15 -36
  544. package/src/runtime/plugins/browser-macos-bridge.ts +69 -21
  545. package/src/runtime/plugins/browser-manifest-surface.ts +30 -6
  546. package/src/runtime/plugins/browser-native-session-service.ts +1 -1
  547. package/src/runtime/plugins/browser-provider-registry.ts +2 -109
  548. package/src/runtime/plugins/browser-registration.ts +16 -0
  549. package/src/runtime/plugins/browser-runtime-contract.ts +2 -154
  550. package/src/runtime/plugins/browser-runtime.ts +41 -9
  551. package/src/runtime/plugins/browser-session-authority.ts +101 -291
  552. package/src/runtime/plugins/browser-session-legacy-migration.ts +203 -0
  553. package/src/runtime/plugins/browser-session-store.ts +229 -36
  554. package/src/runtime/plugins/browser-session-types.ts +2 -98
  555. package/src/runtime/plugins/capability-authorization-grants.ts +17 -0
  556. package/src/runtime/plugins/catalog-trust.ts +82 -0
  557. package/src/runtime/plugins/computer-registration.ts +839 -0
  558. package/src/runtime/plugins/config-store.ts +119 -0
  559. package/src/runtime/plugins/desktop-operator-external-policy.ts +932 -0
  560. package/src/runtime/plugins/desktop-operator-registration.ts +111 -8
  561. package/src/runtime/plugins/errors.ts +8 -1
  562. package/src/runtime/plugins/external-adapter.ts +45 -322
  563. package/src/runtime/plugins/external-provider-policy.ts +48 -0
  564. package/src/runtime/plugins/external-registration.ts +9 -1
  565. package/src/runtime/plugins/external-unix-socket-probe.cjs +9 -3
  566. package/src/runtime/plugins/external-unix-socket.ts +64 -193
  567. package/src/runtime/plugins/first-party-external-registration.ts +163 -0
  568. package/src/runtime/plugins/first-party-registry.ts +3 -1
  569. package/src/runtime/plugins/github-adapter.ts +1 -2
  570. package/src/runtime/plugins/gmail-adapter.ts +6 -6
  571. package/src/runtime/plugins/google-calendar-adapter.ts +6 -6
  572. package/src/runtime/plugins/google-shared.ts +31 -46
  573. package/src/runtime/plugins/google-tasks-adapter.ts +6 -6
  574. package/src/runtime/plugins/ios-adapter.ts +1 -2
  575. package/src/runtime/plugins/local-system-adapter.ts +180 -0
  576. package/src/runtime/plugins/macos-capability-broker.ts +15 -105
  577. package/src/runtime/plugins/resend-adapter.ts +15 -24
  578. package/src/runtime/plugins/store.ts +493 -51
  579. package/src/runtime/plugins/types.ts +8 -1
  580. package/src/runtime/plugins/uu-remote-rescue-registration.ts +155 -0
  581. package/src/runtime/plugins/windows-host-recovery-install.ts +68 -0
  582. package/src/runtime/plugins/windows-host-recovery-registration.ts +85 -0
  583. package/src/runtime/plugins/xiaohongshu-publish.ts +86 -430
  584. package/src/runtime/projections/controller-context.ts +12 -6
  585. package/src/runtime/projections/git-status-sampler.ts +73 -22
  586. package/src/runtime/projections/materialized-view.ts +14 -8
  587. package/src/runtime/recovery/capability-action-application.ts +228 -0
  588. package/src/runtime/recovery/index.ts +3 -0
  589. package/src/runtime/recovery/lifecycle-inventory.ts +338 -0
  590. package/src/runtime/recovery/local-jobs-repair.ts +14 -14
  591. package/src/runtime/recovery/maintenance-executor.ts +358 -76
  592. package/src/runtime/recovery/quarantine-retention.ts +256 -0
  593. package/src/runtime/release/identity.ts +6 -0
  594. package/src/runtime/resources/leases/store.ts +1 -1
  595. package/src/runtime/root/active-execution-power-assertion.ts +139 -0
  596. package/src/runtime/root/assistant-learning-loop.ts +45 -0
  597. package/src/runtime/root/browser-session-composition.ts +59 -0
  598. package/src/runtime/root/computer-composition.ts +191 -0
  599. package/src/runtime/root/computer-target-composition.ts +16 -0
  600. package/src/runtime/root/computer-target-persistence.ts +39 -0
  601. package/src/runtime/root/controller-round-composition.ts +107 -0
  602. package/src/runtime/root/controller-services.ts +2 -0
  603. package/src/runtime/root/entry.ts +4 -3
  604. package/src/runtime/root/gateway-adapter.ts +3 -3
  605. package/src/runtime/root/local-bridge.ts +5 -2
  606. package/src/runtime/root/mcp-transport.ts +5 -5
  607. package/src/runtime/root/package-connector-service.ts +108 -56
  608. package/src/runtime/root/package-runtime-release.ts +85 -18
  609. package/src/runtime/root/package-runtime-service.ts +60 -97
  610. package/src/runtime/root/release-execution-canary.ts +71 -0
  611. package/src/runtime/root/release-loader.ts +68 -0
  612. package/src/runtime/root/release-manifest.ts +106 -2
  613. package/src/runtime/root/release-materialize.ts +103 -4
  614. package/src/runtime/root/release-store.ts +31 -2
  615. package/src/runtime/root/runtime.ts +240 -25
  616. package/src/runtime/root/scheduled-controller-composition.ts +51 -0
  617. package/src/runtime/root/scheduler.ts +12 -4
  618. package/src/runtime/root/service-runner.ts +1 -1
  619. package/src/runtime/root/service.ts +41 -16
  620. package/src/runtime/root/status.ts +1 -0
  621. package/src/runtime/root/types.ts +24 -1
  622. package/src/runtime/shared/local-bridge-surface.ts +1 -1
  623. package/src/runtime/shared/process-environment.ts +19 -4
  624. package/src/runtime/shared/storage-capacity.ts +68 -0
  625. package/src/runtime/standalone-recovery/controller-home-migration.ts +1116 -0
  626. package/src/runtime/standalone-recovery/core.ts +984 -230
  627. package/src/runtime/standalone-recovery/entry.ts +182 -51
  628. package/src/runtime/standalone-recovery/independent-host-rescue.ts +172 -0
  629. package/src/runtime/standalone-recovery/installer.ts +212 -104
  630. package/src/runtime/standalone-recovery/mcp-server.ts +243 -0
  631. package/src/runtime/standalone-recovery/mutation-identity-contract.ts +21 -0
  632. package/src/runtime/standalone-recovery/operation-lock.ts +160 -0
  633. package/src/runtime/standalone-recovery/performance.ts +135 -0
  634. package/src/runtime/standalone-recovery/release.ts +5 -0
  635. package/src/runtime/watchdog/workflow-watchdog.ts +1 -1
  636. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -1
  637. package/src/runtime/workflow/schedules/engine.ts +191 -343
  638. package/src/runtime/workflow/schedules/pending-activation.ts +1 -1
  639. package/src/runtime/workflow/schedules/settlement.ts +2 -191
  640. package/src/runtime/workflow/schedules/store.ts +2 -607
  641. package/src/runtime/workflow/schedules/types.ts +2 -127
  642. package/src/runtime/workflow/schedules/work-continuation.ts +180 -15
  643. package/src/runtime/workflows/first-party/xiaohongshu.ts +122 -0
  644. package/src/runtime/workflows/runtime.ts +486 -0
  645. package/src/testing/test-governance.ts +90 -29
  646. package/assets/templates/helpers/archive-architecture-request.sh +0 -244
  647. package/docs/architecture/history/README.md +0 -7
  648. package/docs/architecture/history/chatgpt-handoff-facade.md +0 -397
  649. package/docs/architecture/history/global-hook-runtime.md +0 -166
  650. package/docs/architecture/history/ios-semantic-automation-provider-v2.md +0 -170
  651. package/docs/architecture/requests/archive/2026/20260528-154740-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  652. package/docs/architecture/requests/archive/2026/20260528-154816-assets-hooks-assets-hooks-hook-input-sh.md +0 -59
  653. package/docs/architecture/requests/archive/2026/20260528-161851-ai-harness-workflow-contract-json-ai-harness-workflow-contract-json.md +0 -59
  654. package/docs/architecture/requests/archive/2026/20260528-161853-scripts-check-task-workflow-sh-scripts-check-task-workflow-sh.md +0 -59
  655. package/docs/architecture/requests/archive/2026/20260528-161911-assets-workflow-contract-v1-json-assets-workflow-contract-v1-json.md +0 -59
  656. package/docs/architecture/requests/archive/2026/20260528-222416-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  657. package/docs/architecture/requests/archive/2026/20260528-222444-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  658. package/docs/architecture/requests/archive/2026/20260528-222457-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  659. package/docs/architecture/requests/archive/2026/20260528-222648-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  660. package/docs/architecture/requests/archive/2026/20260528-222705-ai-hooks-ai-hooks-worktree-guard-sh.md +0 -59
  661. package/docs/architecture/requests/archive/2026/20260528-222726-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  662. package/docs/architecture/requests/archive/2026/20260528-222727-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  663. package/docs/architecture/requests/archive/2026/20260528-224736-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  664. package/docs/architecture/requests/archive/2026/20260528-233259-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  665. package/docs/architecture/requests/archive/2026/20260528-233335-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  666. package/docs/architecture/requests/archive/2026/20260528-233456-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  667. package/docs/architecture/requests/archive/2026/20260528-233457-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  668. package/docs/architecture/requests/archive/2026/20260528-233637-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  669. package/docs/architecture/requests/archive/2026/20260528-233638-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  670. package/docs/architecture/requests/archive/2026/20260529-000322-root-package-json.md +0 -59
  671. package/docs/architecture/requests/archive/2026/20260529-004238-ai-hooks-ai-hooks-lib-workflow-state-sh.md +0 -59
  672. package/docs/architecture/requests/archive/2026/20260529-020654-ai-harness-policy-json-ai-harness-policy-json.md +0 -63
  673. package/docs/architecture/requests/archive/2026/20260529-094236-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  674. package/docs/architecture/requests/archive/2026/20260529-094323-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  675. package/docs/architecture/requests/archive/2026/20260529-094331-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  676. package/docs/architecture/requests/archive/2026/20260529-094339-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  677. package/docs/architecture/requests/archive/2026/20260529-094430-assets-hooks-assets-hooks-session-start-context-sh.md +0 -60
  678. package/docs/architecture/requests/archive/2026/20260529-094446-ai-hooks-ai-hooks-session-start-context-sh.md +0 -60
  679. package/docs/architecture/requests/archive/2026/20260613-002040-runtime-harness-hook-adapters.md +0 -68
  680. package/docs/architecture/requests/archive/2026/root.md +0 -68
  681. package/docs/architecture/requests/archive/2026/runtime-harness-hook-adapters.md +0 -76
  682. package/docs/architecture/requests/archive/2026/verification-evals-checks.md +0 -68
  683. package/docs/architecture/requests/archive/2026/workflow-engine-contract-assets.md +0 -69
  684. package/scripts/archive-architecture-request.sh +0 -4
  685. package/scripts/run-skill-evals.ts +0 -1022
@@ -0,0 +1,35 @@
1
+ # Assistant learning loop
2
+
3
+ Status: Accepted implementation decision; live promotion certification remains required after focused implementation validation.
4
+
5
+ Implementation note: Xiaohongshu platform-specific publishing choreography is migrated into versioned Workflow assets; Core retains only generic Workflow execution, reconciliation, evidence, and learning authorities; this decision document is not an operational state store.
6
+
7
+ Forge self-defect observed during this delivery: an accidentally isolated Work was terminalized before its active controller lease was released, so cleanup was blocked until a separate controller_release; a subsequent maintenance diagnosis also reported accumulated terminal edit-session/temp ownership records. Treat this as one lifecycle-cleanup root-cause family rather than adding per-call workarounds. Maintenance diagnosis for this state took 25-35 seconds despite no source investigation, so cleanup ownership cardinality is also a performance concern. Track under the existing lifecycle-cleanup/maintenance root-cause issue if present; otherwise create one before this delivery closes. Do not create a duplicate authority for the same defect family.
8
+
9
+ The accepted user outcome is two consecutive, evidence-linked assistant rounds for one explicitly bound project/account. The first-party Xiaohongshu workflow is the concrete certification case for this implementation; production execution must enter through rh_work rather than direct platform choreography, with Workflow Runtime as the sole external-effect owner and canonical receipt producer. Operational priors remain mechanical only. Controller reasoning produces observations, hypotheses and lessons; no autonomous compiler, scheduler, authorization owner or database is introduced.
10
+
11
+ ## Ownership and persistence
12
+
13
+ Kernel Memory owns the experience contract and application service. Its Controller Home adapter is the sole writer of `assistant_experience` records, scoped by portable project identity, with version 1 payloads, transactional revision CAS and bounded provenance. The active Controller claim authorizes writes; source Work/round and retained evidence must match the requested lineage. Observations default to 30 days and hypotheses to 90 days. Lessons require expiry or explicit durable applicability rationale. Supersession and retraction are terminal for recall; audit history remains in the existing SQLite audit authority. Central maintenance invokes bounded retirement after expiry/retraction grace. No chat-history reconstruction is allowed.
14
+
15
+ Outcome observations are typed evidence linked to an existing Work and retained receipt, not a campaign lifecycle. Missing metrics are explicit null values with reasons; cumulative snapshots are never summed automatically. Source removal invalidates dependent recall. Payloads are metadata-only and exclude credentials, cookies, binaries and raw logs. Schema rollback is whole Runtime plus its paired Controller Home backup.
16
+
17
+ ## Context and trust
18
+
19
+ Project contracts register exact knowledge sources. Repository mirrors remain projections of their repository originals; independent Brain documents retain their own authority. Context reads only registered sources within explicit roots, with realpath containment, bounded bytes/time/candidate counts, content digests and visible gaps. Chinese lexical retrieval is supported. Retrieved text and experience are advisory data, never instructions granting authority or weakening current task constraints. No persistent search index is required in v1.
20
+
21
+ Provider-neutral round preparation composes bounded context; host adapters only render it. Current Work and project identity must be revalidated after claim. Knowledge failure cannot silently permit a publish that needs missing product constraints. Account/channel applicability is exact; omission never widens access to account-specific experience.
22
+
23
+ ## Workflow and recovery
24
+
25
+ Preserve Workflow migration B/C/D/E obligations. The interpreter remains subordinate to Work, Process, provider effects and existing resource fencing. Outputs referenced by later steps must be retained with checkpoint identity. An effect dispatched before checkpoint failure is reconciled through the existing receipt authority before replay. Assets pin version/digest and inputs; changing them cannot reuse a run. Site choreography stays versioned asset data.
26
+
27
+ ## Concurrency, time and capacity
28
+
29
+ All experience mutations run in one SQLite transaction with expected revisions and bounded rows per project. Explicit timestamps drive expiry and tests; invalid/future observations fail validation. Reads filter scope before ranking and share existing Context item/byte/token ceilings. Read failures are visible gaps. Central lifecycle maintenance owns physical cleanup; retrieval does not become another persistent writer. No new process, cross-node replication or provider identity is introduced.
30
+
31
+ ## Delivery and retirement
32
+
33
+ Execution-quality observations reuse ControllerRound semantic fingerprints and exact check evidence. They are bounded advisory signals, not a `normal/degraded` persistent state or a second Supervisor. Legitimate wait/investigation is not failure; same-source pass/fail indicates possible flakiness, not proven code regression. Controller diagnosis and accepted design return-to-design gates retain semantic authority. Cross-task strategy A/B remains the existing benchmark's responsibility; differing task difficulty cannot establish policy superiority.
34
+
35
+ Keep existing operational-memory semantics and Workflow acceptance obligations. Replace modern Brain promotion's deleted-file inference with terminal Work evidence; retain old Git import only behind an explicit legacy flag until consumers migrate. No partial Runtime activation is part of this change. Focused fault tests and whole-candidate gates precede delivery; actual two-round publication and metrics evidence precede the claim that live assistant capability is complete.
@@ -0,0 +1,296 @@
1
+ # ControllerRound uses one provider-neutral transition policy
2
+
3
+ Status: Accepted design contract for PLAN-forge-v2-assistant-loop-execution-degradation-20260907-r3.
4
+
5
+ ## Decision
6
+
7
+ Every durable ControllerRound lifecycle mutation MUST pass through one provider-neutral Kernel transition policy. Scheduler, Launcher, MCP compatibility, ChatGPT/Browser adapters, recovery jobs, Runtime bootstrap/restart code and provider hosts may only:
8
+
9
+ 1. observe durable state,
10
+ 2. submit a typed lifecycle event plus bounded fenced evidence,
11
+ 3. perform an external effect explicitly authorized by the returned transition/effect intent, and
12
+ 4. persist only the transition decision produced by the canonical policy.
13
+
14
+ They MUST NOT directly invent status changes, clear blocker strings, reset budgets, rotate round authority, promote dispatch outcome, reopen waits, or create provider-specific recovery exceptions. Provider-specific facts are translated into provider-neutral evidence before reaching the Kernel.
15
+
16
+ The canonical owner belongs under `packages/kernel/controller/**`. Persistence remains atomic/CAS guarded, but persistence is an executor of the policy decision rather than a second lifecycle authority.
17
+
18
+ ## Why
19
+
20
+ The existing lifecycle has ten relay statuses and four lifecycle stages, but transition authority is distributed across initial launch, dispatch settlement, claim acknowledgement, stalled recovery, explicit authority recovery, disposition submission, release handling, successor handoff and terminal cleanup. `blocked` additionally carries several unrelated meanings. Local guards are individually sensible but the combined system permits gaps, duplicated recovery rules and route-dependent semantics.
21
+
22
+ The fix is not another blocked-reason branch. The invariant is one lifecycle decision authority.
23
+
24
+ ## Durable state classes
25
+
26
+ | Class | Relay status | Meaning | Automatic recovery |
27
+ | --- | --- | --- | --- |
28
+ | Open execution | `dispatching`, `dispatched`, `claimed`, `pending_release` | One semantic round is still mechanically open or closing | Yes, only idempotent recovery of the same semantic round |
29
+ | Semantic pause | `waiting`, `waiting_for_user` | Controller intentionally stopped semantic progression | No stalled-time recovery; requires an explicit legal event |
30
+ | Semantic terminal | `goal_complete`, `handed_off` | This lineage node is semantically closed | Never automatically reopened |
31
+ | Failure/fuse | `failed`, `blocked` | Mechanical failure or an explicit policy fuse | Only according to typed failure class and matching evidence |
32
+
33
+ `lifecycleStage` remains orthogonal evidence of the semantic boundary:
34
+
35
+ - `dispatching`
36
+ - `dispatch_confirmed`
37
+ - `controller_claimed`
38
+ - `semantic_round_closed`
39
+
40
+ A status and lifecycle stage combination not admitted by the transition policy is invalid durable state and must fail closed.
41
+
42
+ ## Canonical event model
43
+
44
+ External layers submit events, never target statuses. The exact TypeScript names may differ during implementation, but the semantics are frozen here.
45
+
46
+ | Event | Required evidence | Policy responsibility |
47
+ | --- | --- | --- |
48
+ | `occurrence_requested` | occurrence identity, origin, Work/Requirement state, caller authority | Decide whether this is a legal genuinely new occurrence or an illegal fuse/wait bypass |
49
+ | `provider_dispatch_succeeded` | exact round authority + relay scope + provider dispatch receipt/effect identity | Confirm dispatch, clear only provider-dispatch failure state for this round |
50
+ | `provider_dispatch_failed` | exact round identity + classified failure evidence | Increment provider-failure budget and choose retry/fail/fuse |
51
+ | `provider_dispatch_outcome_unknown` | exact effect identity, no contradictory settlement | Enter outcome-unknown reconciliation state; never blind replay |
52
+ | `provider_effect_reconciled` | exact previously unknown effect identity + confirmed executed/not-executed evidence | Confirm existing dispatch or authorize a new dispatch only when absence is proven |
53
+ | `controller_claim_observed` | active ControllerSession ownership + exact round authority/scope | Move the same round to claimed; never create a new semantic round |
54
+ | `semantic_disposition_submitted` | exact claimed round identity + disposition + required handoff/evidence | Close semantic round and consume semantic budgets exactly once |
55
+ | `controller_release_observed` | exact released controller epoch + already persisted disposition | Mechanically continue post-disposition flow without re-submitting disposition |
56
+ | `successor_bound` | completed predecessor + already-admitted successor lineage | Atomically close predecessor relay and create successor round according to authority rule |
57
+ | `stalled_round_observed` | exact current relay revision, liveness evidence, no active conflicting execution/claim | Recover only an unfinished open mechanical transition; elapsed time is never semantic evidence |
58
+ | `semantic_state_changed` | new mechanical/semantic fingerprint tied to exact relay lineage | May rearm `repeated_state`; cannot clear unrelated fuse classes |
59
+ | `provider_environment_recovered` | exact blocked relay revision + verified provider/runtime capability evidence + failure-class match | May rearm `consecutive_failures` for the same undispatched round without consuming another semantic round |
60
+ | `user_resume_requested` | explicit user authority + exact paused/failure lineage | Resume only states whose policy explicitly permits user resume |
61
+ | `terminal_work_observed` | failed/cancelled Work + no active claim | Retire surviving relay mechanically; never fabricate semantic completion |
62
+ | `authority_recovery_requested` | explicit authorized recovery + no active execution/claim + exact current relay | Rekey capability only where policy permits; never change semantic budgets |
63
+ | `runtime_or_session_evicted` | durable round still current, transport/session gone | Preserve semantic round and authority unless an explicit authority-recovery rule applies |
64
+
65
+ ## Blocked policy is typed, not a free-form string switch
66
+
67
+ `blockedReason` may remain as a compatibility projection, but policy decisions use a typed blocker class. At minimum:
68
+
69
+ | Blocker class | Meaning | Legal exit | Budget behavior | Authority behavior |
70
+ | --- | --- | --- | --- | --- |
71
+ | `repeated_state` | semantic continuation repeated without meaningful state progress | `semantic_state_changed` with a changed exact fingerprint | reset repeated-state counter only; round/provider-failure budgets preserved | same semantic-round authority when rearming the same undispatched/claimed lineage |
72
+ | `provider_unavailable` / `consecutive_failures` | provider/runtime path repeatedly failed before successful progression | `provider_environment_recovered` with exact relay and verified environment/provider evidence | provider failure streak may start a new recovery epoch; historical failures remain auditable; round/repeated budgets unchanged | preserve authority for the same undispatched semantic round |
73
+ | `round_budget_exhausted` | hard semantic continuation budget reached | no automatic exit; only explicit higher-level replanning/new authorized occurrence that does not pretend to be the same exhausted round | never reset because time passed or provider recovered | old round authority cannot be reused as a fresh semantic round |
74
+ | `provider_dispatch_outcome_unknown` | provider effect may already have happened | exact `provider_effect_reconciled`; positive evidence confirms existing effect, negative evidence may authorize one new dispatch | no blind retry; no semantic-round budget duplication | preserve same authority/effect identity until reconciled |
75
+ | `provider_user_action_required` | provider needs human/auth action | explicit user/handoff resolution followed by legal resume event | no background retry budget churn | same lineage; new semantic round only if policy says the resolved occurrence is new |
76
+
77
+ No generic `blocked -> dispatching` transition exists.
78
+
79
+ For the ChatGPT Controller provider, `provider_environment_recovered` is admitted only through exact ControllerRound authority plus a fresh non-semantic provider probe. The probe must use the same runtime provider selection as ordinary Controller dispatch, must not replay the blocked Work prompt, and must produce a server-authored durable Recovery audit record only after dispatch is confirmed. The audit identity is recovery evidence, not a second lifecycle authority: the Kernel still performs the exact relay-scope/authority/CAS checks and the canonical `provider_environment_recovered` transition. Failed, ambiguous, user-action-required, stale, or mismatched probes cannot rearm the fuse. MCP compatibility may expose this as a bounded repair intent, but it must not duplicate `controller.authority.recover` or invent a provider-specific round state.
80
+
81
+ ## Budget contract
82
+
83
+ ControllerRound has three independent budget dimensions. No code path may use one to reset another.
84
+
85
+ ### `roundCount`
86
+
87
+ Counts semantic `continue_immediately` progression rounds, not transport retries, Runtime restarts, claim migration, release recovery, provider recovery, outcome reconciliation or stalled-transition repair. It is consumed exactly once at semantic close/open according to the canonical policy.
88
+
89
+ ### `repeatedStateCount`
90
+
91
+ Measures semantic continuation without meaningful state fingerprint progress. It resets only when policy observes a changed canonical semantic/mechanical fingerprint. Provider health changes alone do not reset it.
92
+
93
+ ### Provider failure budget
94
+
95
+ Tracks failed provider dispatch/recovery attempts for the exact provider-neutral dispatch responsibility. A verified environment/provider repair may begin a bounded recovery epoch for the same semantic round, but must not erase historical failure evidence or change `roundCount`/`repeatedStateCount`. The implementation may store a typed recovery epoch or derive it from immutable evidence; either way, `consecutiveFailures = 0` alone is not sufficient evidence of recovery.
96
+
97
+ Time passage is never a budget reset signal.
98
+
99
+ ## Authority contract
100
+
101
+ There are distinct authorities and they must not be conflated:
102
+
103
+ - `authorityId`: opaque per-semantic-round ControllerRound capability.
104
+ - `relayScopeId`: durable semantic lineage scope.
105
+ - `claimGeneration`: ControllerSession ownership epoch.
106
+ - provider effect/dispatch identity: evidence identity for an external effect, never Controller authority.
107
+ - MCP/browser/session ids: transport identities only.
108
+
109
+ Rules:
110
+
111
+ 1. The same undispatched semantic round keeps `authorityId` through transport loss, Runtime restart, MCP eviction, stalled mechanical recovery and verified provider/environment recovery.
112
+ 2. A genuinely new semantic round rotates `authorityId`.
113
+ 3. Successor Work handoff creates the successor round under the same relay lineage and rotates to a new round capability.
114
+ 4. Claim/session migration changes ControllerSession identity/`claimGeneration`, not semantic round identity.
115
+ 5. Explicit authority recovery is a separate fenced capability-rekey operation. It must not silently consume a new round or reset budgets.
116
+ 6. Provider, Browser and MCP adapters can never mint lifecycle authority by presenting a transport/session id.
117
+
118
+ ## Fresh occurrence rule
119
+
120
+ `launcher_start` or a schedule/manual trigger is not automatically proof of a fresh semantic occurrence. The transition policy must classify `occurrence_requested` against the latest lineage.
121
+
122
+ A new occurrence is legal only when the prior semantic state and trigger contract explicitly allow it, for example a designed future schedule occurrence after a semantic `wait`, or an explicit higher-level user/replan action after a recoverable failure.
123
+
124
+ A launch request MUST NOT bypass:
125
+
126
+ - `round_budget_exhausted`,
127
+ - an unresolved `provider_dispatch_outcome_unknown`,
128
+ - `waiting_for_user`,
129
+ - `goal_complete`,
130
+ - `handed_off`, or
131
+ - a `consecutive_failures` fuse that lacks verified provider/environment recovery evidence.
132
+
133
+ Whether ordinary `waiting` permits a later scheduled occurrence is determined by the Schedule/occurrence contract and an explicit occurrence identity, not merely because `beginInitialControllerRoundDispatch` was called again.
134
+
135
+ ## Legal lifecycle skeleton
136
+
137
+ The policy must preserve this semantic ordering while allowing idempotent retries of each mechanical edge:
138
+
139
+ ```text
140
+ legal new occurrence
141
+ -> dispatching
142
+ -> dispatched (or blocked/failed/waiting_for_user by typed provider outcome)
143
+ -> claimed
144
+ -> semantic disposition
145
+ continue_immediately -> pending_release -> release -> next dispatching/new authority
146
+ wait -> waiting
147
+ wait_for_user -> waiting_for_user
148
+ goal_complete -> goal_complete
149
+
150
+ completed predecessor + admitted successor
151
+ -> predecessor handed_off + successor dispatching (atomic lineage transition)
152
+ ```
153
+
154
+ Recovery never skips semantic edges. It only completes or replays an idempotent mechanical edge of the same semantic decision.
155
+
156
+ ## Persistence boundary
157
+
158
+ The transition policy consumes an immutable current snapshot plus one event and returns one of:
159
+
160
+ - `accept`: exact next relay record and optional external-effect intent,
161
+ - `no_op`: idempotent duplicate with the already-authoritative record,
162
+ - `reject`: stable reason/error code,
163
+ - `needs_evidence`: missing exact evidence required to decide safely.
164
+
165
+ The store applies accepted decisions under the relay-scope lock / transaction using the expected record revision. External effects occur only where the policy explicitly emits an effect intent. After the effect, the adapter submits its receipt as a new event; it never writes the post-effect relay state directly.
166
+
167
+ This separates lifecycle decision authority from persistence and provider execution while preserving CAS fencing.
168
+
169
+ ## Crash-window contract
170
+
171
+ Each window has exactly one legal recovery interpretation.
172
+
173
+ | Crash window | Durable fact | Recovery rule | Forbidden shortcut |
174
+ | --- | --- | --- | --- |
175
+ | before provider dispatch starts | `dispatching`, no effect receipt | same-round dispatch may be authorized by policy | rotate authority or increment semantic round |
176
+ | after provider may have acted but before receipt persistence | effect outcome uncertain | enter/reconcile exact outcome-unknown identity | blind replay |
177
+ | after dispatch receipt, before relay becomes `dispatched` | durable receipt exists | replay `provider_dispatch_succeeded` idempotently | send provider effect again |
178
+ | after `dispatched`, before Controller claim | dispatch confirmed | claim same round from exact ownership evidence | create fresh occurrence |
179
+ | after claim persistence, before prompt/controller observes response | claimed + live/recoverable ownership | duplicate claim is no-op/migration if fenced | consume another round |
180
+ | after semantic disposition persistence, before controller release | `pending_release`/semantic terminal | retry release/post-disposition mechanics only | resubmit disposition |
181
+ | after controller release, before next round creation | closed disposition + released exact epoch | create/restore exactly one next round according to disposition | repeat prior round close |
182
+ | during predecessor/successor handoff | transaction must contain both lineage writes or neither | retry atomic handoff | independently mutate predecessor and successor |
183
+ | Runtime restart | durable relay survives transport | reconstruct from durable state and same round authority | treat restart as fresh occurrence |
184
+ | MCP/session eviction | transport lost only | reclaim/migrate ControllerSession if fenced; preserve relay identity | use new MCP session as authority |
185
+
186
+ ## Fault-injection matrix frozen for the next Plan step
187
+
188
+ The implementation step must add focused failures at least at:
189
+
190
+ 1. crash before provider call,
191
+ 2. provider call succeeds but receipt write is lost,
192
+ 3. receipt exists but `dispatched` transition is lost,
193
+ 4. `dispatched` exists but claim response is lost,
194
+ 5. claim persists then Runtime/MCP restarts,
195
+ 6. disposition persists then release fails,
196
+ 7. release persists then next-round creation fails,
197
+ 8. successor handoff crashes between predecessor/successor writes,
198
+ 9. repeated-state block with unchanged fingerprint,
199
+ 10. repeated-state block with changed fingerprint,
200
+ 11. provider failures reach fuse,
201
+ 12. verified provider/environment recovery for that exact fuse,
202
+ 13. stale/mismatched provider recovery evidence,
203
+ 14. outcome-unknown positive reconciliation,
204
+ 15. outcome-unknown proven-not-executed reconciliation,
205
+ 16. hard round-budget exhaustion,
206
+ 17. waiting scheduled occurrence with explicit occurrence identity,
207
+ 18. waiting_for_user without explicit user/handoff resolution,
208
+ 19. goal_complete/handed_off relaunch attempt,
209
+ 20. failed/cancelled Work terminal cleanup with and without active claim.
210
+
211
+ Assertions must cover status, lifecycleStage, `roundCount`, `repeatedStateCount`, provider-failure epoch/history, `authorityId`, `claimGeneration`, provider dispatch/effect receipt identity, duplicate-effect count and durable revision/CAS behavior.
212
+
213
+ ## Real Supervisor acceptance sequence
214
+
215
+ Production validation uses the existing Supervisor lineage. It may not manufacture a new Work/Requirement/relay to make the test pass.
216
+
217
+ 1. Build and activate one exact candidate Runtime containing the transition policy.
218
+ 2. Verify required provider/plugin capability on that installed Runtime before relay mutation.
219
+ 3. Re-read the exact existing Supervisor Work, Requirement, relay scope, authority, blocked class, budgets and current record revision.
220
+ 4. Submit verified provider/environment recovery evidence for the existing `consecutive_failures` block.
221
+ 5. Prove the same semantic round is rearmed without changing `roundCount`, `repeatedStateCount`, relay scope or per-round authority, and without erasing historical failure evidence.
222
+ 6. Prove provider dispatch occurs at most once and exact Controller claim succeeds.
223
+ 7. Let ChatGPT submit its semantic disposition.
224
+ 8. Prove at least one `continue_immediately -> pending_release -> controller release -> successor/next dispatch` sequence completes automatically without a human sending `继续`.
225
+ 9. Verify round authority rotates only at the true new-round boundary and no duplicate disposition/provider effect exists.
226
+ 10. Only after this sequence may the Automatic Progression acceptance step be considered complete.
227
+
228
+ ## Required implementation shape
229
+
230
+ The next Plan step must converge existing mutation helpers onto one policy rather than wrapping the old special cases with another layer of exceptions. A suitable shape is:
231
+
232
+ ```ts
233
+ type ControllerRoundEvent = ... // provider-neutral typed events
234
+ type ControllerRoundTransitionDecision = Accept | NoOp | Reject | NeedsEvidence
235
+
236
+ function decideControllerRoundTransition(
237
+ current: ControllerRoundAggregateSnapshot,
238
+ event: ControllerRoundEvent,
239
+ ): ControllerRoundTransitionDecision
240
+ ```
241
+
242
+ Existing public helpers may remain as compatibility facades during migration, but they become thin event builders around the canonical policy. Scheduler, Launcher, MCP and provider adapters must contain no independent status/blocker transition tables after convergence.
243
+
244
+ ## Explicit non-solutions
245
+
246
+ Do not:
247
+
248
+ - add a one-off `consecutive_failures` rearm branch,
249
+ - raise `maxFailures`/`maxRounds`,
250
+ - clear durable counters or edit SQLite by hand,
251
+ - use elapsed time as provider recovery proof,
252
+ - treat Browser/ChatGPT registration as Kernel-specific lifecycle logic,
253
+ - infer successful dispatch from a transport session id,
254
+ - reopen semantic terminal states from stalled recovery,
255
+ - create another Supervisor/relay to avoid the blocked lineage, or
256
+ - keep parallel mutation tables in Scheduler/Launcher/MCP while claiming a central policy exists.
257
+
258
+ This ADR is the acceptance authority for the r3 ControllerRound recovery-convergence implementation.
259
+
260
+ ## Explicit migration map from current implementation
261
+
262
+ Current `controller-round-store.ts` exposes ten lifecycle mutators and contains fifteen direct ControllerRound persistence write sites. Migration is complete only when these entry points no longer contain independent lifecycle decision tables.
263
+
264
+ | Current helper | Compatibility role after convergence | Policy event / responsibility |
265
+ | --- | --- | --- |
266
+ | `bindControllerRoundSuccessorWork` | thin facade | submit `successor_bound`; policy validates predecessor/successor lineage and atomic handoff eligibility |
267
+ | `submitControllerRoundDisposition` | thin facade | submit `semantic_disposition_submitted`; all semantic-close budget/status decisions move to policy |
268
+ | `beginInitialControllerRoundDispatch` | thin facade | submit `occurrence_requested`; policy decides whether occurrence is genuinely new and legal |
269
+ | `beginControllerRoundRelayAfterRelease` | thin facade | submit `controller_release_observed`; policy chooses same-lineage next-round transition and authority rotation |
270
+ | `reconcileControllerRoundAfterAbandonedRelease` | thin facade | submit released-without-disposition evidence; policy chooses mechanical failure/retirement only |
271
+ | `reconcileControllerRoundAfterTerminalWork` | thin facade | submit `terminal_work_observed`; policy retires failed/cancelled Work relay only |
272
+ | `finishControllerRoundRelayDispatch` | thin facade | submit one of dispatch succeeded/failed/outcome-unknown/user-action events; no local status ternary remains |
273
+ | `acknowledgeControllerRoundClaim` | thin facade | submit `controller_claim_observed`; repeated-state/outcome-unknown recovery must not live in claim code |
274
+ | `recoverControllerRoundRelayAuthority` | thin facade | submit `authority_recovery_requested`; policy validates state and emits capability rekey only |
275
+ | `claimStalledControllerRoundRelays` | scanner/orchestrator only | identify candidates and submit `stalled_round_observed` / evidence events; it must not write recovered relay states itself |
276
+
277
+ ### Persistence convergence
278
+
279
+ The current store has fifteen `writeControlPlaneRecord*` call sites associated with these lifecycle paths. The target is not necessarily one physical SQL statement, because successor handoff legitimately needs a two-record transaction, but there must be **one logical apply authority**:
280
+
281
+ - ordinary single-relay transitions go through one `applyControllerRoundTransitionDecision(...)` persistence executor;
282
+ - predecessor/successor handoff goes through one atomic `applyControllerRoundHandoffDecision(...)` executor produced by the same policy;
283
+ - no public mutation facade calls `writeControlPlaneRecord*` after making its own status/budget/blocker decision.
284
+
285
+ ### Outer-layer convergence
286
+
287
+ Current outer composition demonstrates why this is necessary:
288
+
289
+ - `chatgpt-round-continuation.ts` currently composes initial dispatch, dispatch finish, claim acknowledgement, disposition and release/next-round helpers; after migration it orchestrates provider effects around policy events only.
290
+ - Scheduler maintenance currently claims stalled relays and directly records dispatch success/failure; after migration it scans/authorizes wake, performs the provider effect intent, then submits the resulting receipt event.
291
+ - MCP runtime tools currently invoke claim, disposition, release, launch and dispatch settlement helpers directly; after migration MCP is a compatibility/event translation surface only.
292
+ - ChatGPT/Browser provider adapters remain responsible for provider-specific observation and effect execution, never lifecycle status selection.
293
+
294
+ ### Completion assertion
295
+
296
+ A static regression should fail if Scheduler, Launcher, MCP compatibility or provider adapters acquire a new direct ControllerRound status/blocker mutation table or write ControllerRound relay records outside the canonical apply executor. This is an architecture boundary, not a code-style preference.
@@ -0,0 +1,39 @@
1
+ # Runtime maintenance diagnosis uses bounded read-side inventory
2
+
3
+ Status: Accepted and implemented on 2026-09-07.
4
+
5
+ ## Problem
6
+
7
+ Runtime maintenance diagnosis had three multiplicative costs on repositories with long-lived Controller history:
8
+
9
+ - stale EditSession discovery called `reconcileEditSession` for every open-like candidate, which hashes tracked after-images, runs Git dirty-path inspection, and may persist reconciliation metadata;
10
+ - every stale Work/EditSession independently reloaded active Plans, Schedules, Controller ownership and up to 500 Process history records;
11
+ - stale Work repository source inspection ran before the visible `maxCandidates` bound, so expensive Git status/revision/containment checks could exceed the advertised candidate budget.
12
+
13
+ On the real Forge Controller Home with 637 WorkContracts and 388 EditSessions, the observed maintenance diagnosis path took roughly 25–35 seconds.
14
+
15
+ ## Decision
16
+
17
+ Maintenance status discovery is inventory, not repair:
18
+
19
+ 1. Resolve the existing repository runtime-storage binding first, then build one bounded authority snapshot for the status pass.
20
+ 2. Reuse Work, live Controller session, active Plan, Requirement, Schedule and Process ownership facts across all candidates in that pass.
21
+ 3. Read active Process authority from Process Runtime's recoverable index instead of enumerating terminal Process history.
22
+ 4. EditSession discovery reads summary/ownership metadata only. Workspace hashing, Git dirty checks, supersession and finalization occur only in explicit maintenance for a selected candidate.
23
+ 5. Sort and bound stale Work candidates before repository source Git inspection.
24
+ 6. Destructive stale-Work maintenance re-reads current authority at its mutation boundary; the status snapshot never becomes mutation authority.
25
+
26
+ The snapshot is a derived in-memory view for one diagnosis call. It is not persisted and is not a second lifecycle authority.
27
+
28
+ ## Verification
29
+
30
+ After implementation on the same real Controller data set:
31
+
32
+ - `buildRuntimeMaintenanceStatus`: 563.8 ms for 200 returned candidates;
33
+ - legacy `listProcessRecords(..., 500)`: 729.82 ms for 500 historical records;
34
+ - `listRecoverableProcessRecords`: 2.82 ms for the active/recoverable index in the same repository;
35
+ - targeted maintenance semantic regressions: 5 passed, 0 failed;
36
+ - Direct Edit / EditSession continuity consumers: 28 passed, 0 failed;
37
+ - `package:check:type`: passed.
38
+
39
+ The 25–35 second diagnosis regression is therefore removed without lowering lifecycle gates or hiding candidates.
@@ -17,6 +17,13 @@ repos, command facades, hooks, migration helpers, and installed runtime copies.
17
17
 
18
18
  - Self-host and generated behavior must be checked together when shared assets change.
19
19
  - `bun test` is the broad regression gate.
20
+ - Governed tests preserve typed per-file failure evidence (`source`, `fixture`, `infrastructure`, `interrupted`) in bounded receipts; Check/Work verification may collapse that evidence only to the existing acceptance-vs-infrastructure authority, never by reparsing human stderr.
21
+ - The active Runtime always owns Process admission, leases, terminal Process state, and Work verification receipts. For ordinary repositories, persisted checks execute through that Runtime's immutable Check Runner.
22
+ - Self-hosting Forge Work verification is the bounded exception to runner location, not to lifecycle authority: when the verified repository has the same durable `repoId` as the Runtime Source authority, a non-live verification snapshot executes the Check Runner from that exact candidate snapshot. Candidate runner/content identity is folded into the existing Check execution fingerprint so evidence cannot cross runner revisions.
23
+ - `live_controller_home` certification never uses the candidate snapshot runner because it is explicitly verifying the installed Runtime. A candidate snapshot missing its Forge-owned sidecar fails closed; no arbitrary executable override or second scheduler/store is introduced.
24
+ - Public `rh_work verify` accepts either one `check_id` or one non-empty `check_ids` batch, never both. A batch is admitted only when the registered checks form one ordinary resource-compatible wave according to Process Runtime `buildCheckExecutionSchedule`; invalid, cross-wave, release, and multi-phase batches fail closed before partial execution. Every admitted member still runs through the canonical Work verification service, Work snapshot, Process Runtime claims, Failure Contract, and VerificationRecord authority; batch aggregation is not a scheduler or lifecycle authority.
25
+ - Work verification persistence is one read-modify-write authority: any decision derived from current `checkRefs`, scope evidence, review state, or lifecycle state must read the latest Work and derive its patch inside the existing Work-store writer critical section. Synchronous writer contention remains fail-fast/retryable rather than sleeping on the Gateway path; a retry must re-read current state before deriving its mutation, so stale snapshots cannot silently erase compatible evidence.
26
+ - Legacy Work lifecycle inference is migration-only. The exact bounded historical shapes accepted by the compatibility migrator, including the pre-review-checkpoint schema-v3 row, are canonicalized and persisted once with revision-fenced Controller Home authority. Normal current-schema reads validate canonical state; malformed schema-v3 rows outside those historical shapes fail closed instead of receiving generic read-time repair.
20
27
  - `check-task-sync.sh` enforces that substantive repo changes update `tasks/`.
21
28
  - `check-task-workflow.sh --strict` is the repo-local harness readiness gate.
22
29
  - `sync-brain-docs.sh --check` verifies manifest-controlled repo-to-brain mirrors without making gbrain or MCP part of hook correctness.
@@ -18,7 +18,7 @@ verify without a live service.
18
18
  ## Stable Rules
19
19
 
20
20
  - `assets/workflow-contract.v1.json` is the canonical contract asset.
21
- - `.ai/harness/workflow-contract.json` is the installed runtime copy.
21
+ - `forge.config.json` (legacy `.ai/harness/workflow-contract.json` remains migration-only) is the installed runtime copy.
22
22
  - Migration deletes only manifest-owned `known_generated` surfaces.
23
23
  - User-authored legacy docs are preserved or archived before template refresh.
24
24
  - `_ref/`, `_ops/`, secrets, local env, and custom hooks are not product migration surfaces.
@@ -8,7 +8,7 @@ The canonical documentation model is intentionally small:
8
8
  - [`../ROADMAP.md`](../ROADMAP.md) — current and next architecture/product priorities.
9
9
  - [`EVOLUTION.md`](EVOLUTION.md) — append-only historical architecture change log.
10
10
  - [`versions/`](versions/) — per-version architecture snapshots.
11
- - [`history/`](history/) and [`history.md`](history.md) — archived historical evidence, never runtime authority.
11
+ - [`history.md`](history.md) — compatibility pointer to the evolution log and Git history; never runtime authority.
12
12
  - [`../../CHANGELOG.md`](../../CHANGELOG.md) — release history.
13
13
  - `decisions/` — accepted ADR rationale; accepted invariants are folded into `CURRENT.md` when they become ordinary current architecture.
14
14
  - `requests/` — pending architecture drift/change requests only.
@@ -19,7 +19,7 @@ Executable code and persisted schemas are authoritative for implementation facts
19
19
  ## Pending Architecture Requests
20
20
 
21
21
  <!-- BEGIN ARCHITECTURE PENDING REQUESTS -->
22
- - (none)
22
+ - [ ] 2026-09-04 [unknown] `unknown` -> [2026-09-04-computer-plugin-workflow-taxonomy](requests/2026-09-04-computer-plugin-workflow-taxonomy.md)
23
23
  <!-- END ARCHITECTURE PENDING REQUESTS -->
24
24
 
25
25
  ## Accepted Architecture Decisions
@@ -28,4 +28,4 @@ Existing accepted ADRs remain under [`decisions/`](decisions/). Once a decision
28
28
 
29
29
  ## Change discipline
30
30
 
31
- Do not create another current-architecture page for each refactor. Architecture-root Markdown is limited to `CURRENT.md`, `EVOLUTION.md`, `history.md`, and this index; historical pages belong under `history/`. Update `CURRENT.md` only when the architecture contract changes, update `ROADMAP.md` when priorities change, append `EVOLUTION.md` for material architecture transitions, and create/update a version snapshot only at a release/version boundary. Implementation phases, pending manual work, operator-local paths, and other execution status belong in durable Work/Plan evidence rather than maintained current architecture.
31
+ Do not create another current-architecture page for each refactor. Architecture-root Markdown is limited to `CURRENT.md`, `EVOLUTION.md`, `history.md`, and this index. Obsolete architecture evidence belongs in Git history rather than a maintained history tree. Update `CURRENT.md` only when the architecture contract changes, update `ROADMAP.md` when priorities change, append `EVOLUTION.md` for material architecture transitions, and create/update a version snapshot only at a release/version boundary. Implementation phases, pending manual work, operator-local paths, and other execution status belong in durable Work/Plan evidence rather than maintained current architecture.
@@ -5,20 +5,31 @@
5
5
 
6
6
  ## Responsibility
7
7
 
8
- `src/cli/mcp/transports/` owns HTTP authentication handoff, MCP Streamable HTTP session lifecycle, global admission capacity, transport leases, DELETE cleanup, and liveness/readiness metrics. It does not own durable Job execution or Gateway process recovery.
8
+ `src/cli/mcp/transports/` owns HTTP authentication handoff and protocol-era serving. MCP 2026-07-28 is the canonical public boundary and is served per request without protocol-level sessions. The session registry, global admission capacity, transport leases, and DELETE cleanup exist only for the explicit 2025-era compatibility path. The transport does not own durable Work/Process/ControllerRound authority or Gateway process recovery.
9
9
 
10
10
  ## Invariants
11
11
 
12
- - All public MCP HTTP routes share one registry and one global maximum.
13
- - Route and authenticated principal must match the stored session on GET, POST, and DELETE.
14
- - Active POST work is protected from capacity eviction.
15
- - Stream-only sessions are reclaimable through client DELETE, explicit prior-session replacement, lease expiry, absolute lifetime, or oldest-safe capacity eviction.
16
- - Initialize admission is an atomic registry reservation. Shared static-bearer clients use the global pool; per-principal fairness applies only where authentication provides a meaningful distinct principal.
17
- - Health metrics report actual global counts; readiness reflects whether initialize can be admitted safely.
18
- - Closing transport state never implies that a durably accepted Job is cancelled.
12
+ - Modern `server/discover` and subsequent 2026-07-28 requests are handled by the SDK v2 per-request handler and do not require or emit `Mcp-Session-Id`.
13
+ - Durable Work, Process, and ControllerRound identity is independent from both modern request bindings and legacy transport sessions.
14
+ - A newly created Work is claimed with an opaque Work-bound controller capability immediately; modern sessionless follow-up requests must present that exact authority. Legacy owner records without a capability digest require an explicit `controller_claim` authority upgrade and are never accepted by principal identity alone.
15
+ - Legacy 2025-era traffic is classified mechanically by the SDK and routed to one bounded stateful compatibility registry shared by all public MCP HTTP routes.
16
+ - On the legacy path, route and authenticated principal must match the stored session on GET, POST, and DELETE; active POST work is protected from capacity eviction.
17
+ - Legacy stream-only sessions are reclaimable through client DELETE, explicit prior-session replacement, lease expiry, absolute lifetime, or oldest-safe capacity eviction.
18
+ - Legacy initialize admission is an atomic registry reservation. Shared static-bearer clients use the global pool; per-principal fairness applies only where authentication provides a meaningful distinct principal.
19
+ - Legacy capacity readiness distinguishes `immediate`, `eviction`, and `blocked` admission. Capacity eviction releases registry routing/ownership synchronously before old transport cleanup; peer cleanup is best-effort and must never hold the serialized initialize admission lane after the old session is fenced out.
20
+ - Health session metrics describe only legacy compatibility state; modern request serving has no long-lived session capacity authority.
21
+ - Closing or replacing transport state never implies that a durably accepted Work or Process is cancelled.
22
+ - The Gateway-to-Canonical-Runtime client classifies structured SDK HTTP 404 as an expired inner session, reconnects once, and replays only an operation already proven replay-safe by its idempotency contract.
23
+ - The public Gateway may burst-scale a bounded shared pool of inner Canonical Runtime MCP lanes. A released lane remains hot only for a bounded idle lease; reuse cancels retirement, while expiry explicitly terminates the Streamable HTTP session before closing the local client so the Runtime does not retain an orphaned Server/transport graph. Durable Work, Process, and Controller authority is never coupled to that transport retention window.
19
24
 
20
25
  ## Verification
21
26
 
22
27
  ```text
23
28
  bun test tests/unit/fix-mcp-session-lifecycle.test.ts tests/cli/mcp-http.test.ts
24
29
  ```
30
+
31
+ ## MCP Runtime adapter decomposition boundary
32
+
33
+ The public MCP Tool Contract is frozen independently from implementation placement. `check:mcp-compatibility` records both the stable tool-name fingerprint and the canonical schema fingerprint, so moving a handler between adapters cannot silently change the connector ABI.
34
+
35
+ `runtime-tools.ts` and `router.ts` are currently migration debt, not architecture authorities. Runtime Architecture keeps shrinking inventories for their direct imports into Kernel/Context/Control Plane/Execution/Recovery/Plugin/Workflow/Repository domains and for the `callRuntimeTool` switch cases. A stage may remove an inventory entry only when ownership moves behind the correct domain adapter/application API; adding a new entry fails the architecture gate. This deliberately avoids source-line-count rules while making mega-adapter regrowth mechanically impossible.
@@ -0,0 +1,124 @@
1
+ # Computer / Plugin / Workflow taxonomy convergence
2
+
3
+ > **Status**: Pending
4
+ > **Detected**: 2026-09-04
5
+ > **Requirement**: `REQ-forge-v2-durable-agent-harness-foundation-20260902`
6
+ > **Predecessor plan**: `PLAN-kernel-v2-module-authority-computer-convergence-20260903-r2`
7
+ > **Captured successor draft**: `PLAN-kernel-v2-module-authority-computer-workflow-convergence-20260904-r3`
8
+ > **Source revision reviewed**: `18490210a328fac2c4585ee4f2d43771dec19d3d`
9
+
10
+ ## Why this request exists
11
+
12
+ The existing V2 Computer convergence plan already covers the important Computer-side architecture: `computer` as the single normal public interaction product, Browser/Desktop semantic namespaces, one durable interaction ownership graph, provider-only native Desktop Operator semantics, Process Runtime resource authority, and `outcome_unknown -> observe/reconcile`. It does **not** yet make the higher-level Plugin taxonomy or runtime Workflow model an explicit executable architecture boundary.
13
+
14
+ Current source proves the gap: `src/runtime/plugins/first-party-registry.ts` registers Computer, Browser, true API integrations and the Xiaohongshu publishing flow through the same `AssistantPluginAdapter` abstraction. `src/runtime/plugins/xiaohongshu-publish.ts` is a compiled Browser workflow: it owns site URLs, selectors, visible-text anchors, publish modes, auth/page-state classification, ordered Browser actions and post-publish verification, then executes the actual steps through the Browser capability. That is workflow content, not an independent plugin/provider authority.
15
+
16
+ ## Required taxonomy
17
+
18
+ V2 must explicitly distinguish four concepts even if compatibility transport still exposes `plugin_action_execute`:
19
+
20
+ 1. **Capability**: reusable semantic operation Forge can request.
21
+ 2. **Provider**: replaceable implementation of one or more capabilities.
22
+ 3. **Integration**: external-system owner justified by an independent protocol/auth/security/persistence/lifecycle boundary. Platform branding alone is insufficient.
23
+ 4. **Workflow / Recipe**: user-goal composition of capabilities. Site-specific URLs/selectors/visible-text/page-state/verification sequences belong here unless a real Integration boundary exists.
24
+
25
+ `Plugin` must not remain the only internal taxonomy. A shared tool/manifest transport does not grant equal authority semantics.
26
+
27
+ ## Computer boundary that must be preserved
28
+
29
+ - `computer` remains the single normal public interaction product.
30
+ - Browser and Desktop remain distinct semantic subdomains beneath Computer.
31
+ - Browser DOM/CDP/navigation/query/file-input semantics are preferred when stronger than physical input.
32
+ - Desktop Operator/native macOS is provider/device-driver only: OS/TCC/socket/handshake/capture/input/live handles. It does not own Forge workflows, policy, durable lifecycle, semantic completion, scheduling or independent retry/reconciliation.
33
+ - Browser session/Computer target state converges under one deliberate durable interaction ownership graph in Controller Home. Provider/browser/OS handles remain rebuildable observations.
34
+ - Non-idempotent mutations never blind-replay after `outcome_unknown`; existing observe/reconcile authority remains canonical.
35
+ - Process Runtime claims/leases remain the only execution concurrency authority.
36
+
37
+ ## Computer hot-path transport contract
38
+
39
+ The 2026-09-09 #200 latency review proved that the native Desktop Operator is not the dominant warm-path cost, so provider transport optimization must preserve the existing authority boundary rather than introduce another controller or durable provider session. The Computer runtime therefore uses the following transport contract:
40
+
41
+ - one live Desktop Operator provider binding is scoped to the current trusted registration identity/revision and endpoint contract;
42
+ - provider identity/capability negotiation is reused only while the same Unix-socket connection generation remains live;
43
+ - sequential Computer requests may reuse that bounded JSONL channel instead of reconnecting and handshaking for every action;
44
+ - registration fingerprint/revision or endpoint-contract change disposes the old provider binding before replacement;
45
+ - if the Unix connection changes after negotiation, the pending action is rejected before dispatch and the next explicit invocation must renegotiate; non-idempotent effects are never replayed automatically;
46
+ - timeout, cancellation, response-size and protocol-error bounds remain per request; transport reuse creates no new durable lifecycle or retry authority.
47
+ - Browser semantic mutations do not pay an unconditional fixed post-action sleep: provider primitives and bounded post-action identity/evidence are the normal completion path; `post_action_wait_ms` is explicit compatibility input only, while native foreground activation may retain a provider-specific verification budget because system foreground authority must be observed.
48
+ - Desktop target-bound semantic actions dispatch through the current leased provider binding without a `desktop_status(limit: 500)` preflight. Only an explicit provider `SESSION_NOT_FOUND` transported as a failed/pre-effect result may rebuild the binding from stable application identity and retry once; transport, timeout, and outcome-unknown failures are never replayed. Target close likewise calls the bound session close directly instead of enumerating provider sessions first.
49
+ - Desktop observe/input/capture product actions use the retained `ComputerProvider` channel instead of re-entering the legacy external-adapter transport for every semantic action. Target open/close remain low-frequency provider lifecycle operations; the hot path owns no parallel durable provider-session authority.
50
+ - the external Unix JSONL and `ComputerProviderError` failure contracts preserve `failed` versus `outcome_unknown` across adapter boundaries. A provider-declared failure keeps the negotiated connection alive; transport loss after an effectful request is dispatched invalidates negotiation and is never eligible for implicit replay.
51
+
52
+ The repeatable `benchmark:computer-hotpath` run on 2026-09-09 used 50 warm semantic samples after five warmups. The isolated real dispatch path measured cold first semantic action `4.398ms`; warm `p50=0.939ms`, `p95=1.511ms`, `max=1.894ms`. Across the 50 warm samples the provider observed exactly 50 semantic RPCs, zero new connections, zero handshakes, zero manifest preflights, zero `desktop_status` preflights, and zero session reopens. This benchmark is comparative evidence, not a machine-specific release threshold.
53
+
54
+ This is a transport/runtime optimization beneath the existing Computer authority. Browser/OS handles remain ephemeral observations, and Process Runtime plus existing unknown-outcome reconciliation remain authoritative for execution concurrency and effect recovery.
55
+
56
+ ## Workflow Asset Contract
57
+
58
+ Introduce the smallest generic versioned Workflow Asset model needed to move user-goal automation out of Core. Human-editable assets include:
59
+
60
+ - workflow definition / step composition;
61
+ - prompt guidance for semantic judgement;
62
+ - deterministic helper scripts;
63
+ - templates/selectors/resources;
64
+ - asset version and content digest.
65
+
66
+ Machine authority is separate and records only what the runtime must trust/decide, including installed/active workflow identity/version/digest, capability grants/bindings, and bounded execution receipts/checkpoints. Prompt/script bodies are not the primary SQLite authority.
67
+
68
+ Default active user workflow assets belong under Controller Home, not the Forge source repository or arbitrary target repositories. Project-owned workflow assets are allowed only through an explicit project contract and remain project data. Secrets are referenced through existing secret/authorization authority; workflow files must not become a new secret store.
69
+
70
+ ## Workflow Runtime boundary
71
+
72
+ The Workflow Runtime is a thin interpreter/composer, **not another Kernel**. It may validate inputs, resolve assets and capabilities, order steps, record subordinate checkpoints/receipts, and request reconciliation. It must not create competing authority for:
73
+
74
+ - Requirement / Work / ControllerRound lifecycle;
75
+ - semantic acceptance or goal completion;
76
+ - scheduler continuation;
77
+ - retry decisions after unknown external outcome;
78
+ - process/resource locking.
79
+
80
+ Durable or external-effect workflow execution is subordinate to an existing Work/run identity. Scripts execute only through existing Process Runtime, policy and resource-claim boundaries.
81
+
82
+ ## Xiaohongshu migration proof
83
+
84
+ Use Xiaohongshu publishing as the first bounded migration proof after Computer/plugin taxonomy convergence:
85
+
86
+ - remove compiled first-party workflow authority from `src/runtime/plugins/xiaohongshu-publish.ts`;
87
+ - express publish modes, Browser actions, auth markers, selectors, checkpoints and dual verification as versioned workflow data;
88
+ - do not recreate the same platform-specific TypeScript under `packages/workflow-runtime`;
89
+ - any temporary `xiaohongshu` plugin/action compatibility alias is translation-only, owns no workflow state, has bounded consumers and an explicit removal trigger.
90
+
91
+ If a future official Xiaohongshu API creates a true protocol/auth/resource boundary, only that protocol-facing owner becomes an Integration. User-goal orchestration remains Workflow.
92
+
93
+ ## Architecture gates
94
+
95
+ Extend the existing architecture checker with ownership-aware rules so new business/site workflows cannot quietly return to Kernel/Computer/provider/first-party integration code. The gate must reject end-user workflow orchestration embedded in generic layers unless an independent Integration boundary is explicitly justified, while still allowing legitimate endpoint/protocol constants inside a real Integration adapter. Prefer import/manifest/ownership rules over brittle string bans.
96
+
97
+ Workflow asset digest/version changes must invalidate stale binding/receipt reuse. Compatibility shims must have a named replacement owner, bounded consumers and removal trigger.
98
+
99
+ ## Required execution order
100
+
101
+ Do **not** start a parallel V2 implementation from this request. Preserve the predecessor plan order and execute only after current overlapping V2 Stage8/final-certification/portability work is reconciled:
102
+
103
+ 1. Stage B: shrink module/legacy ownership debt and strengthen existing architecture gates.
104
+ 2. Stage C: finish Controller/MCP/composition convergence.
105
+ 3. Stage D: finish Computer/Browser/Desktop convergence **and** make Capability/Provider/Integration taxonomy explicit.
106
+ 4. Stage E: add Workflow Asset Contract + thin Workflow Runtime + Xiaohongshu migration + anti-regression gates.
107
+
108
+ Before implementation starts, refresh exact source revision and active path ownership. Never open a second Computer/Workflow plan merely to bypass an occupied or stale scope.
109
+
110
+ ## Plan metadata blocker discovered while capturing this request
111
+
112
+ The decision-complete successor was persisted as draft `PLAN-kernel-v2-module-authority-computer-workflow-convergence-20260904-r3`, with the four stages and detailed acceptance criteria above. Forge incorrectly persisted its `scopeKey` as `unknown`, so approval is blocked. Creating a successor with the intended scope `kernel-v2-module-authority-computer-convergence-20260903` is also blocked because the scope index still reports terminal predecessor `...-r1` as owner even though r1 already points to r2 and r2 was superseded during successor creation.
113
+
114
+ This is a Forge Plan authority/index defect, not permission to create a parallel scope. Future V2 mainline must first repair/reconcile the stale scope owner + draft scope-key persistence, then approve/recreate the captured successor under the original scope. Do not delete this request until an approved successor PlanContract with the correct scope exists.
115
+
116
+ ## Completion criteria for this request
117
+
118
+ This architecture request may be marked complete only when:
119
+
120
+ - one approved successor PlanContract under the original Computer-convergence scope contains the taxonomy, Workflow Asset, runtime authority and Xiaohongshu migration decisions above;
121
+ - predecessor/draft Plan metadata is reconciled with no duplicate active authority;
122
+ - later implementation proves the Stage D/E boundaries and their focused architecture/type/main checks;
123
+ - `docs/architecture/CURRENT.md` is updated **after** the implementation is true, not before;
124
+ - obsolete public Browser/workflow-plugin compatibility authority is removed or bounded with an explicit removal trigger.