@moretea-labs/forge 1.7.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/AGENTS.md +58 -62
  2. package/CHANGELOG.md +39 -0
  3. package/CLAUDE.md +42 -62
  4. package/README.md +2 -2
  5. package/SKILL.md +0 -1
  6. package/THIRD_PARTY_NOTICES.md +5 -2
  7. package/adapters/browser/index.ts +2 -0
  8. package/adapters/chatgpt/browser-delivery-host.ts +71 -0
  9. package/adapters/chatgpt/browser-delivery-runtime.ts +783 -0
  10. package/adapters/chatgpt/controller-binding-store.ts +55 -0
  11. package/adapters/chatgpt/controller-host.ts +119 -0
  12. package/adapters/chatgpt/controller-round-host.ts +78 -0
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +45 -0
  14. package/adapters/chatgpt/provider-delivery.ts +113 -0
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +192 -0
  16. package/adapters/chatgpt/wsl-bridge-delivery-host.ts +63 -0
  17. package/adapters/computer/desktop-operator-contract.ts +7 -0
  18. package/adapters/computer/desktop-operator-discovery.ts +201 -0
  19. package/adapters/computer/desktop-operator-negotiation.ts +174 -0
  20. package/adapters/computer/desktop-operator-provider.ts +312 -0
  21. package/adapters/computer/index.ts +1 -0
  22. package/adapters/computer/interaction-target-authority.ts +944 -0
  23. package/adapters/controller-process/binding-store.ts +34 -0
  24. package/adapters/controller-process/controller-host.ts +26 -0
  25. package/adapters/mcp/access-mode.ts +132 -0
  26. package/adapters/mcp/audit.ts +32 -0
  27. package/adapters/mcp/auth.ts +407 -0
  28. package/adapters/mcp/controller-round-compatibility.ts +184 -0
  29. package/adapters/mcp/frozen-client-semantic-compatibility.ts +292 -0
  30. package/adapters/mcp/instructions.ts +36 -0
  31. package/adapters/mcp/legacy-context.ts +18 -0
  32. package/adapters/mcp/multi-repository.ts +437 -0
  33. package/adapters/mcp/oauth.ts +391 -0
  34. package/adapters/mcp/paths.ts +140 -0
  35. package/adapters/mcp/policy.ts +232 -0
  36. package/adapters/mcp/proxy-env.ts +62 -0
  37. package/adapters/mcp/readiness-projection.ts +24 -0
  38. package/adapters/mcp/redaction.ts +21 -0
  39. package/adapters/mcp/repo.ts +24 -0
  40. package/adapters/mcp/runtime-gateway/artifact-adapter.ts +52 -0
  41. package/adapters/mcp/runtime-gateway/context-adapter.ts +829 -0
  42. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +191 -0
  43. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +147 -0
  44. package/adapters/mcp/runtime-gateway/execution-control-adapter.ts +28 -0
  45. package/adapters/mcp/runtime-gateway/execution-tools.ts +207 -0
  46. package/adapters/mcp/runtime-gateway/filesystem-adapter.ts +38 -0
  47. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +411 -0
  48. package/adapters/mcp/runtime-gateway/legacy-ios-tool-adapter.ts +105 -0
  49. package/adapters/mcp/runtime-gateway/maintenance-adapter.ts +44 -0
  50. package/adapters/mcp/runtime-gateway/model-adapter.ts +63 -0
  51. package/adapters/mcp/runtime-gateway/persisted-check-process.ts +3 -0
  52. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +308 -0
  53. package/adapters/mcp/runtime-gateway/process-tools.ts +289 -0
  54. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +76 -0
  55. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +268 -0
  56. package/adapters/mcp/runtime-gateway/recovery-client-adapter.ts +70 -0
  57. package/adapters/mcp/runtime-gateway/recovery-tool-contract.ts +99 -0
  58. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +110 -0
  59. package/adapters/mcp/runtime-gateway/result-adapter.ts +108 -0
  60. package/adapters/mcp/runtime-gateway/router.ts +728 -0
  61. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1251 -0
  62. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +634 -0
  63. package/adapters/mcp/runtime-gateway/runtime-tool-shared.ts +27 -0
  64. package/adapters/mcp/runtime-gateway/runtime-tools.ts +68 -0
  65. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +186 -0
  66. package/adapters/mcp/runtime-gateway/shared-adapter.ts +25 -0
  67. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +870 -0
  68. package/adapters/mcp/runtime-gateway/work-adapter.ts +3186 -0
  69. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +502 -0
  70. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +1 -0
  71. package/adapters/mcp/server.ts +1048 -0
  72. package/adapters/mcp/setup.ts +791 -0
  73. package/adapters/mcp/tool-capability-cache.ts +87 -0
  74. package/adapters/mcp/tool-mapping/access-tools.ts +387 -0
  75. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +5265 -0
  76. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +150 -0
  77. package/adapters/mcp/tool-mapping/repository-tools.ts +1691 -0
  78. package/adapters/mcp/tool-mapping/tools.ts +9 -0
  79. package/adapters/mcp/tool-mapping/umbrella-tools.ts +117 -0
  80. package/adapters/mcp/toolset-names.ts +74 -0
  81. package/adapters/mcp/toolset-selection.ts +41 -0
  82. package/adapters/mcp/toolset.ts +336 -0
  83. package/adapters/mcp/transports/http.ts +1456 -0
  84. package/adapters/mcp/transports/session-registry.ts +513 -0
  85. package/adapters/mcp/transports/stdio.ts +8 -0
  86. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +139 -0
  87. package/adapters/mcp/types.ts +41 -0
  88. package/assets/AGENTS.md +2 -16
  89. package/assets/CLAUDE.md +2 -16
  90. package/assets/hooks/AGENTS.md +3 -14
  91. package/assets/hooks/CLAUDE.md +3 -14
  92. package/assets/hooks/hook-input.sh +9 -2
  93. package/assets/hooks/lib/workflow-state.sh +28 -10
  94. package/assets/hooks/prompt-guard.sh +63 -37
  95. package/assets/hooks/security-sentinel.sh +2 -1
  96. package/assets/hooks/session-start-context.sh +7 -5
  97. package/assets/hooks/stop-orchestrator.sh +13 -3
  98. package/assets/initializer-question-pack.v4.json +11 -7
  99. package/assets/partials/05-workflow.partial.md +18 -73
  100. package/assets/partials/07-footer.partial.md +1 -1
  101. package/assets/partials-agents/02-operating-mode.partial.md +1 -2
  102. package/assets/partials-agents/04-task-protocol.partial.md +14 -59
  103. package/assets/partials-agents/06-quality-safety.partial.md +11 -16
  104. package/assets/partials-agents/08-deep-docs.partial.md +1 -2
  105. package/assets/plan-map.json +11 -11
  106. package/assets/plugin-registry.v1.json +9 -3
  107. package/assets/plugin-trust-policy.v1.json +6 -0
  108. package/assets/recovery/ForgeRecovery.ps1 +100 -0
  109. package/assets/recovery/forge-wsl-rescue +271 -0
  110. package/assets/reference-configs/development-protocol.md +11 -15
  111. package/assets/reference-configs/document-generation.md +1 -1
  112. package/assets/reference-configs/global-working-rules.md +9 -1
  113. package/assets/reference-configs/harness-overview.md +22 -112
  114. package/assets/reference-configs/hook-operations.md +1 -1
  115. package/assets/reference-configs/sprint-contracts.md +2 -2
  116. package/assets/skill-version.json +2 -2
  117. package/assets/templates/helpers/architecture-event.ts +3 -34
  118. package/assets/templates/helpers/architecture-queue.sh +61 -10
  119. package/assets/templates/helpers/archive-workflow.sh +90 -180
  120. package/assets/templates/helpers/capability-config.ts +8 -11
  121. package/assets/templates/helpers/capability-resolver.ts +37 -19
  122. package/assets/templates/helpers/capture-plan.sh +2 -2
  123. package/assets/templates/helpers/check-architecture-sync.sh +1 -9
  124. package/assets/templates/helpers/check-task-sync.sh +82 -11
  125. package/assets/templates/helpers/check-task-workflow.sh +1 -3
  126. package/assets/templates/helpers/context-contract-sync.sh +1 -12
  127. package/assets/templates/helpers/contract-worktree.sh +26 -24
  128. package/assets/templates/helpers/ensure-task-workflow.sh +6 -8
  129. package/assets/templates/helpers/inspect-project-state.ts +1 -1
  130. package/assets/templates/helpers/migrate-project-template.sh +1 -1
  131. package/assets/templates/helpers/migrate-workflow-docs.ts +53 -239
  132. package/assets/templates/helpers/new-plan.sh +2 -2
  133. package/assets/templates/helpers/plan-to-todo.sh +3 -31
  134. package/assets/templates/helpers/sprint-backlog.sh +1 -1
  135. package/assets/templates/helpers/switch-plan.sh +1 -1
  136. package/assets/templates/helpers/workflow-contract.ts +1 -0
  137. package/assets/workflow-contract.v1.json +63 -171
  138. package/assets/workflows/xiaohongshu/xiaohongshu.collect-metrics.v1.draft.json +118 -0
  139. package/assets/workflows/xiaohongshu/xiaohongshu.publish-image-note.v1.draft.json +316 -0
  140. package/assets/workflows/xiaohongshu/xiaohongshu.publish-long-text.v1.draft.json +324 -0
  141. package/docs/architecture/CURRENT.md +148 -13
  142. package/docs/architecture/EVOLUTION.md +13 -0
  143. package/docs/architecture/decisions/20260801-controller-home-sqlite-state.md +2 -1
  144. package/docs/architecture/decisions/20260831-independent-windows-wsl-host-rescue.md +59 -0
  145. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +120 -0
  146. package/docs/architecture/decisions/20260904-repository-runtime-data-boundary.md +42 -0
  147. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +35 -0
  148. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +296 -0
  149. package/docs/architecture/decisions/20260907-maintenance-diagnosis-bounded-read.md +39 -0
  150. package/docs/architecture/domains/verification.md +7 -0
  151. package/docs/architecture/domains/workflow-engine.md +1 -1
  152. package/docs/architecture/index.md +3 -3
  153. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +19 -8
  154. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +124 -0
  155. package/docs/forge-chatgpt-mcp-setup.md +5 -3
  156. package/docs/forge-plugin-management.md +20 -4
  157. package/docs/forge-runtime-self-healing-loop.md +2 -0
  158. package/docs/operations/benchmark-cross-version-freeze.md +38 -0
  159. package/docs/operations/controller-browser-plugin.md +3 -1
  160. package/docs/operations/homebrew.md +2 -2
  161. package/docs/operations/platform-support.md +16 -8
  162. package/docs/operations/platform-support.zh-CN.md +2 -2
  163. package/docs/operations/standalone-disaster-recovery.md +26 -1
  164. package/docs/operations/uu-remote-rescue.md +41 -0
  165. package/docs/operations/windows-wsl-host-rescue.md +133 -0
  166. package/docs/public-usage-guide.md +1 -1
  167. package/docs/public-usage-guide.zh-CN.md +1 -1
  168. package/docs/tutorials/01-install-and-start.md +1 -1
  169. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  170. package/docs/tutorials/02-connect-chatgpt.md +4 -4
  171. package/docs/tutorials/02-connect-chatgpt.zh-CN.md +4 -4
  172. package/docs/wiki/Implementation.md +1 -1
  173. package/package.json +23 -14
  174. package/packages/kernel/controller/api/index.ts +2 -0
  175. package/packages/kernel/controller/application/controller-round-service.ts +29 -0
  176. package/packages/kernel/controller/application/controller-service.ts +30 -0
  177. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +308 -0
  178. package/packages/kernel/controller/domain/controller-round.ts +107 -0
  179. package/packages/kernel/controller/domain/execution-quality.ts +133 -0
  180. package/packages/kernel/controller/domain/types.ts +56 -0
  181. package/packages/kernel/controller/index.ts +1 -0
  182. package/packages/kernel/controller/infrastructure/controller-binding-store.ts +84 -0
  183. package/packages/kernel/controller/infrastructure/controller-round-store.ts +1384 -0
  184. package/packages/kernel/controller/infrastructure/controller-session-store.ts +578 -0
  185. package/packages/kernel/controller/ports/controller-host.ts +16 -0
  186. package/packages/kernel/goal/api/index.ts +1 -0
  187. package/packages/kernel/goal/domain/types.ts +40 -0
  188. package/packages/kernel/goal/index.ts +1 -0
  189. package/packages/kernel/identity/api/index.ts +5 -0
  190. package/packages/kernel/identity/application/identity-service.ts +67 -0
  191. package/packages/kernel/identity/domain/scope.ts +63 -0
  192. package/packages/kernel/identity/domain/semantic-sync.ts +81 -0
  193. package/packages/kernel/identity/domain/types.ts +44 -0
  194. package/packages/kernel/identity/domain/workspace.ts +56 -0
  195. package/packages/kernel/identity/index.ts +1 -0
  196. package/packages/kernel/identity/infrastructure/identity-store.ts +75 -0
  197. package/packages/kernel/memory/api/index.ts +5 -0
  198. package/packages/kernel/memory/application/experience-service.ts +118 -0
  199. package/packages/kernel/memory/application/outcome-service.ts +77 -0
  200. package/packages/kernel/memory/domain/experience.ts +103 -0
  201. package/packages/kernel/memory/domain/operational-prior.ts +92 -0
  202. package/packages/kernel/memory/index.ts +1 -0
  203. package/packages/kernel/progression/api/index.ts +2 -0
  204. package/packages/kernel/progression/application/projector.ts +211 -0
  205. package/packages/kernel/progression/domain/types.ts +116 -0
  206. package/packages/kernel/progression/index.ts +1 -0
  207. package/packages/kernel/scheduler/api/index.ts +6 -0
  208. package/packages/kernel/scheduler/application/continuation-service.ts +212 -0
  209. package/packages/kernel/scheduler/application/eligibility.ts +252 -0
  210. package/packages/kernel/scheduler/application/schedule-service.ts +24 -0
  211. package/packages/kernel/scheduler/application/settlement.ts +197 -0
  212. package/packages/kernel/scheduler/domain/continuation.ts +38 -0
  213. package/packages/kernel/scheduler/domain/schedule.ts +149 -0
  214. package/packages/kernel/scheduler/index.ts +1 -0
  215. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +38 -0
  216. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +785 -0
  217. package/packages/kernel/work/api/index.ts +15 -0
  218. package/packages/kernel/work/application/work-service.ts +148 -0
  219. package/packages/kernel/work/domain/admission-policy.ts +34 -0
  220. package/packages/kernel/work/domain/check-receipt.ts +43 -0
  221. package/packages/kernel/work/domain/context-closure-receipt.ts +32 -0
  222. package/packages/kernel/work/domain/engineering-contracts.ts +157 -0
  223. package/packages/kernel/work/domain/engineering-design.ts +281 -0
  224. package/packages/kernel/work/domain/engineering-profile.ts +242 -0
  225. package/packages/kernel/work/domain/execution-concurrency.ts +254 -0
  226. package/packages/kernel/work/domain/execution-snapshot.ts +33 -0
  227. package/packages/kernel/work/domain/implementation-review.ts +510 -0
  228. package/packages/kernel/work/domain/project-engineering-contract.ts +202 -0
  229. package/packages/kernel/work/domain/repository-completion-receipt.ts +73 -0
  230. package/packages/kernel/work/domain/state-machine.ts +259 -0
  231. package/packages/kernel/work/domain/types.ts +528 -0
  232. package/packages/kernel/work/index.ts +1 -0
  233. package/packages/kernel/work/infrastructure/work-contract-store.ts +1876 -0
  234. package/packages/kernel/work/ports/work-contract-store.ts +18 -0
  235. package/packages/plugin-runtime/browser/index.ts +3 -0
  236. package/packages/plugin-runtime/browser/provider-registry.ts +110 -0
  237. package/packages/plugin-runtime/browser/runtime-contract.ts +150 -0
  238. package/packages/plugin-runtime/browser/session-authority.ts +61 -0
  239. package/packages/plugin-runtime/computer/index.ts +6 -0
  240. package/packages/plugin-runtime/computer/provider-error.ts +26 -0
  241. package/packages/plugin-runtime/computer/provider-registration.ts +52 -0
  242. package/packages/plugin-runtime/computer/provider-registry.ts +63 -0
  243. package/packages/plugin-runtime/computer/provider.ts +19 -0
  244. package/packages/plugin-runtime/computer/target-authority.ts +190 -0
  245. package/packages/plugin-runtime/computer/target-persistence.ts +54 -0
  246. package/packages/plugin-runtime/external/index.ts +1 -0
  247. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +457 -0
  248. package/packages/plugin-runtime/index.ts +3 -0
  249. package/packages/protocols/browser/index.ts +1 -0
  250. package/packages/protocols/browser/session.ts +98 -0
  251. package/packages/protocols/computer/contract.ts +199 -0
  252. package/packages/protocols/computer/index.ts +1 -0
  253. package/packages/protocols/failure/contract.ts +158 -0
  254. package/packages/protocols/failure/index.ts +1 -0
  255. package/packages/protocols/handoff/index.ts +1 -0
  256. package/packages/protocols/handoff/status.ts +22 -0
  257. package/packages/protocols/mcp/execution-context.ts +11 -0
  258. package/packages/protocols/mcp/index.ts +2 -0
  259. package/packages/protocols/mcp/tool-contract.ts +42 -0
  260. package/packages/workflow-runtime/api/index.ts +2 -0
  261. package/packages/workflow-runtime/application/interpreter.ts +342 -0
  262. package/packages/workflow-runtime/domain/workflow-asset.ts +223 -0
  263. package/packages/workflow-runtime/index.ts +1 -0
  264. package/scripts/assemble-template.ts +1 -1
  265. package/scripts/benchmark-computer-hotpath.ts +255 -0
  266. package/scripts/benchmark-controller-round2.ts +54 -2
  267. package/scripts/benchmark-ios-agent-device.ts +3 -6
  268. package/scripts/benchmark-mcp-transport.ts +3 -4
  269. package/scripts/benchmark-operational-memory-activation.ts +235 -0
  270. package/scripts/benchmark-operational-shadow.ts +28 -0
  271. package/scripts/bootstrap-runtime-maintenance-recovery.sh +4 -1
  272. package/scripts/canary-chatgpt-provider-delivery.ts +97 -0
  273. package/scripts/canary-controller-semantic-wait.ts +195 -0
  274. package/scripts/canary-global-hook.sh +2 -2
  275. package/scripts/check-mcp-compatibility.ts +173 -7
  276. package/scripts/check-platform-support.mjs +28 -2
  277. package/scripts/check-public-docs.sh +1 -1
  278. package/scripts/check-release-readiness.sh +1 -1
  279. package/scripts/check-repository-hygiene.mjs +92 -0
  280. package/scripts/check-runtime-architecture.mjs +1206 -95
  281. package/scripts/check-source-duplication.mjs +9 -1
  282. package/scripts/check-tarball-install-smoke.sh +98 -15
  283. package/scripts/controller-ngrok-rotation.sh +5 -4
  284. package/scripts/create-project-dirs.sh +10 -74
  285. package/scripts/forge-local-recovery-helper.mjs +204 -0
  286. package/scripts/forge-uu-remote-rescue-helper.d.mts +31 -0
  287. package/scripts/forge-uu-remote-rescue-helper.mjs +409 -0
  288. package/scripts/forge-windows-host-recovery-helper.mjs +136 -0
  289. package/scripts/hook-shim.sh +2 -2
  290. package/scripts/init-project.sh +12 -70
  291. package/scripts/install-desktop-operator-registration.ts +4 -2
  292. package/scripts/install-independent-windows-wsl-recovery.ts +125 -0
  293. package/scripts/install-standalone-recovery.ts +122 -10
  294. package/scripts/install-uu-remote-rescue-registration.ts +74 -0
  295. package/scripts/install-windows-host-recovery-registration.ts +22 -0
  296. package/scripts/lib/controller-home-env.sh +6 -3
  297. package/scripts/lib/project-init-lib.sh +39 -582
  298. package/scripts/migrate-chatgpt-automation-schedules.ts +2 -2
  299. package/scripts/migrate-windows-wsl-controller-home.ts +306 -0
  300. package/scripts/open-source-audit-allowlist.txt +12 -1
  301. package/scripts/portability-bindings.mjs +70 -0
  302. package/scripts/run-bounded-command.mjs +55 -0
  303. package/scripts/run-bun-test-file.ts +22 -6
  304. package/scripts/run-governed-gate.ts +4 -1
  305. package/scripts/smoke-mcp-http-runtime.ts +1 -1
  306. package/scripts/smoke-runtime-recovery.ts +34 -1
  307. package/scripts/smoke-schedule-engine.ts +1 -1
  308. package/scripts/stage-runtime-release.ts +6 -1
  309. package/scripts/test-governance.ts +51 -2
  310. package/src/cli/agent-jobs/job-manager.ts +10 -1
  311. package/src/cli/chatgpt-browser/bind-server.ts +2 -1
  312. package/src/cli/chatgpt-browser/binding.ts +20 -10
  313. package/src/cli/chatgpt-browser/bridge-extension.ts +75 -0
  314. package/src/cli/chatgpt-browser/bridge-provider.ts +376 -11
  315. package/src/cli/chatgpt-browser/engine.ts +10 -11
  316. package/src/cli/chatgpt-browser/native-provider.ts +24 -83
  317. package/src/cli/chatgpt-browser/oracle-provider.ts +5 -3
  318. package/src/cli/chatgpt-browser/types.ts +1 -0
  319. package/src/cli/commands/bootstrap-control.ts +334 -0
  320. package/src/cli/commands/brain-assistant.ts +38 -0
  321. package/src/cli/commands/brain.ts +193 -40
  322. package/src/cli/commands/chatgpt.ts +127 -0
  323. package/src/cli/commands/computer.ts +437 -0
  324. package/src/cli/commands/doctor.ts +18 -1
  325. package/src/cli/commands/init-hook.ts +71 -61
  326. package/src/cli/commands/init.ts +3 -1
  327. package/src/cli/commands/mcp.ts +16 -10
  328. package/src/cli/commands/plugin.ts +38 -12
  329. package/src/cli/commands/recovery.ts +493 -80
  330. package/src/cli/commands/runtime.ts +9 -4
  331. package/src/cli/commands/setup-profile.ts +89 -39
  332. package/src/cli/commands/status.ts +2 -1
  333. package/src/cli/controller/check-runner.ts +487 -98
  334. package/src/cli/controller/context/types.ts +7 -1
  335. package/src/cli/controller/context-pack.ts +23 -3
  336. package/src/cli/controller/issue-store.ts +1 -1
  337. package/src/cli/controller/systemd-user.ts +110 -0
  338. package/src/cli/controller/types.ts +10 -70
  339. package/src/cli/controller/worklog.ts +67 -13
  340. package/src/cli/editing/edit-operation-contract.ts +92 -0
  341. package/src/cli/editing/edit-session.ts +289 -13
  342. package/src/cli/github/plugin.ts +17 -12
  343. package/src/cli/hook/route-registry.ts +3 -5
  344. package/src/cli/hook/runtime.ts +49 -3
  345. package/src/cli/index.ts +3 -0
  346. package/src/cli/local-bridge/connector-freshness.ts +2 -2
  347. package/src/cli/local-bridge/console-automations.ts +2 -2
  348. package/src/cli/local-bridge/facade-api.ts +41 -14
  349. package/src/cli/local-bridge/job-store.ts +1 -1
  350. package/src/cli/local-bridge/server.ts +24 -27
  351. package/src/cli/mcp/access-mode.ts +2 -132
  352. package/src/cli/mcp/access-tools.ts +2 -387
  353. package/src/cli/mcp/audit.ts +2 -32
  354. package/src/cli/mcp/auth.ts +2 -404
  355. package/src/cli/mcp/instructions.ts +2 -34
  356. package/src/cli/mcp/legacy-context.ts +2 -16
  357. package/src/cli/mcp/legacy-tool-service.ts +2 -5308
  358. package/src/cli/mcp/multi-repository.ts +2 -436
  359. package/src/cli/mcp/oauth.ts +2 -375
  360. package/src/cli/mcp/openai-secure-tunnel.ts +2 -0
  361. package/src/cli/mcp/paths.ts +2 -140
  362. package/src/cli/mcp/policy.ts +2 -232
  363. package/src/cli/mcp/post-finalize-work-attribution.ts +2 -150
  364. package/src/cli/mcp/proxy-env.ts +2 -62
  365. package/src/cli/mcp/readiness-projection.ts +2 -24
  366. package/src/cli/mcp/redaction.ts +2 -21
  367. package/src/cli/mcp/repo.ts +2 -24
  368. package/src/cli/mcp/repository-tools.ts +2 -1585
  369. package/src/cli/mcp/server.ts +2 -951
  370. package/src/cli/mcp/setup.ts +2 -737
  371. package/src/cli/mcp/tool-capability-cache.ts +2 -87
  372. package/src/cli/mcp/tool-contract.ts +2 -14
  373. package/src/cli/mcp/tools.ts +2 -9
  374. package/src/cli/mcp/toolset-names.ts +2 -70
  375. package/src/cli/mcp/toolset-selection.ts +2 -41
  376. package/src/cli/mcp/toolset.ts +2 -336
  377. package/src/cli/mcp/transports/AGENTS.md +1 -10
  378. package/src/cli/mcp/transports/CLAUDE.md +1 -10
  379. package/src/cli/mcp/transports/http.ts +2 -1414
  380. package/src/cli/mcp/transports/session-registry.ts +2 -490
  381. package/src/cli/mcp/transports/stdio.ts +2 -8
  382. package/src/cli/mcp/types.ts +2 -41
  383. package/src/cli/mcp/umbrella-tools.ts +2 -117
  384. package/src/cli/repositories/command-executor.ts +64 -18
  385. package/src/cli/repositories/command-scope.ts +117 -1
  386. package/src/cli/repositories/controller-home.ts +119 -1
  387. package/src/cli/repositories/identity.ts +13 -0
  388. package/src/cli/repositories/registry.ts +68 -49
  389. package/src/cli/repositories/repository-snapshot.ts +53 -7
  390. package/src/cli/repositories/runtime-storage.ts +27 -2
  391. package/src/cli/repositories/safe-patch.ts +34 -38
  392. package/src/cli/repositories/selected-path-actions.ts +22 -2
  393. package/src/cli/repositories/structured-git.ts +105 -25
  394. package/src/cli/runtime/helper-runner.ts +7 -0
  395. package/src/cli/runtime-invocation.ts +8 -1
  396. package/src/cli/tools/codegraph.ts +44 -25
  397. package/src/core/adoption/manifest-templates.ts +1 -1
  398. package/src/core/adoption/plan.ts +3 -26
  399. package/src/core/adoption/workflow-contract-plan.ts +17 -9
  400. package/src/effects/process-runner.ts +8 -14
  401. package/src/runtime/context/assistant-context.ts +154 -0
  402. package/src/runtime/context/assistant-work-context.ts +147 -0
  403. package/src/runtime/context/codegraph-cache-boundary.ts +255 -0
  404. package/src/runtime/context/codegraph-read-provider.ts +55 -22
  405. package/src/runtime/context/codegraph-sidecar.cjs +8 -1
  406. package/src/runtime/context/context-closure.ts +268 -0
  407. package/src/runtime/context/context-plane.ts +211 -0
  408. package/src/runtime/context/project-engineering-contract.ts +60 -0
  409. package/src/runtime/control-plane/bootstrap/capability-provider.ts +74 -0
  410. package/src/runtime/control-plane/bootstrap/control-api.ts +57 -0
  411. package/src/runtime/control-plane/bootstrap/index.ts +5 -0
  412. package/src/runtime/control-plane/bootstrap/state-machine.ts +141 -0
  413. package/src/runtime/control-plane/bootstrap/store.ts +21 -0
  414. package/src/runtime/control-plane/bootstrap/types.ts +87 -0
  415. package/src/runtime/control-plane/cleanup-artifact-retention.ts +328 -0
  416. package/src/runtime/control-plane/codegraph-cache-retention.ts +164 -0
  417. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +320 -0
  418. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +169 -0
  419. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +350 -0
  420. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +85 -0
  421. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +417 -100
  422. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +103 -15
  423. package/src/runtime/control-plane/execution/implementation-review-content.ts +95 -0
  424. package/src/runtime/control-plane/execution/repository-work-attribution.ts +2 -2
  425. package/src/runtime/control-plane/execution/retained-work-resume.ts +336 -6
  426. package/src/runtime/control-plane/execution/validation.ts +28 -3
  427. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +116 -0
  428. package/src/runtime/control-plane/execution/work-completion-authority.ts +44 -2
  429. package/src/runtime/control-plane/execution/work-evidence-policy.ts +34 -3
  430. package/src/runtime/control-plane/execution/work-execution-support.ts +42 -22
  431. package/src/runtime/control-plane/execution/work-finalization-service.ts +1103 -166
  432. package/src/runtime/control-plane/execution/work-handle-authority.ts +267 -16
  433. package/src/runtime/control-plane/execution/work-handle-store.ts +77 -0
  434. package/src/runtime/control-plane/execution/work-head-settlement.ts +75 -0
  435. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +145 -23
  436. package/src/runtime/control-plane/execution/work-operation-service.ts +49 -13
  437. package/src/runtime/control-plane/execution/work-preparation-service.ts +31 -15
  438. package/src/runtime/control-plane/execution/work-remote-delivery.ts +1 -1
  439. package/src/runtime/control-plane/execution/work-task-receipt.ts +20 -1
  440. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +407 -76
  441. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +88 -18
  442. package/src/runtime/control-plane/execution/work-verification-context.ts +1 -1
  443. package/src/runtime/control-plane/execution/work-verification-service.ts +258 -4
  444. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +200 -15
  445. package/src/runtime/control-plane/facade/capability-registry.ts +21 -10
  446. package/src/runtime/control-plane/facade/controller-round-relay.ts +3 -1118
  447. package/src/runtime/control-plane/facade/controller-session-store.ts +2 -488
  448. package/src/runtime/control-plane/facade/goal-workloop-access.ts +6 -3
  449. package/src/runtime/control-plane/facade/goal-workloop.ts +972 -137
  450. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +158 -0
  451. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +10 -0
  452. package/src/runtime/control-plane/facade/index.ts +4 -2
  453. package/src/runtime/control-plane/facade/operation-digest.ts +22 -58
  454. package/src/runtime/control-plane/facade/plan-contract-store.ts +1004 -38
  455. package/src/runtime/control-plane/facade/repository-work-admission.ts +19 -1
  456. package/src/runtime/control-plane/facade/requirement-authority.ts +218 -0
  457. package/src/runtime/control-plane/facade/requirement-board.ts +6 -1
  458. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +48 -0
  459. package/src/runtime/control-plane/facade/semantic-admission.ts +8 -16
  460. package/src/runtime/control-plane/facade/suggested-actions.ts +4 -1
  461. package/src/runtime/control-plane/facade/types.ts +189 -532
  462. package/src/runtime/control-plane/facade/work-admission-policy.ts +84 -35
  463. package/src/runtime/control-plane/facade/work-contract-store.ts +2 -1043
  464. package/src/runtime/control-plane/facade/work-implementation-review.ts +2 -0
  465. package/src/runtime/control-plane/facade/work-state-machine.ts +2 -250
  466. package/src/runtime/control-plane/generated-cache-retention.ts +239 -18
  467. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +12 -1
  468. package/src/runtime/control-plane/global-scheduler/maintenance.ts +76 -13
  469. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-entry.ts +55 -0
  470. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-process.ts +98 -0
  471. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -1
  472. package/src/runtime/control-plane/global-scheduler/scheduler-worker-entry.ts +10 -0
  473. package/src/runtime/control-plane/global-scheduler/scheduler.ts +173 -81
  474. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +18 -6
  475. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +397 -0
  476. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +2 -177
  477. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +301 -560
  478. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +20 -4
  479. package/src/runtime/control-plane/launcher/thin-launcher.ts +50 -4
  480. package/src/runtime/control-plane/lifecycle-retention-metrics.ts +60 -0
  481. package/src/runtime/control-plane/persistence/experience-store.ts +169 -0
  482. package/src/runtime/control-plane/persistence/operational-prior-store.ts +348 -0
  483. package/src/runtime/control-plane/persistence/requirement-store.ts +30 -22
  484. package/src/runtime/control-plane/persistence/sqlite-store.ts +545 -76
  485. package/src/runtime/control-plane/persistence/workflow-content-store.ts +98 -0
  486. package/src/runtime/control-plane/persistence/workflow-registry-store.ts +186 -0
  487. package/src/runtime/control-plane/persistence/workflow-run-store.ts +123 -0
  488. package/src/runtime/control-plane/release-retention.ts +56 -16
  489. package/src/runtime/control-plane/repository-namespace-retention.ts +208 -0
  490. package/src/runtime/control-plane/routing/route-policy.ts +19 -0
  491. package/src/runtime/control-plane/runtime-cleanup.ts +574 -37
  492. package/src/runtime/control-plane/runtime-generation.ts +6 -0
  493. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +465 -0
  494. package/src/runtime/control-plane/workspace/workspace-store.ts +80 -0
  495. package/src/runtime/diagnostics/incident-repair.ts +406 -0
  496. package/src/runtime/diagnostics/mcp-timing.ts +125 -6
  497. package/src/runtime/diagnostics/performance.ts +6 -14
  498. package/src/runtime/diagnostics/read-only-tool.ts +1 -1
  499. package/src/runtime/evidence/artifact-store.ts +65 -2
  500. package/src/runtime/evidence/operational-shadow.ts +38 -0
  501. package/src/runtime/evidence/process-check-receipt.ts +5 -43
  502. package/src/runtime/evidence/sensitive-output.ts +4 -4
  503. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -1
  504. package/src/runtime/execution/jobs/store.ts +121 -2
  505. package/src/runtime/execution/managed-workspace.ts +55 -5
  506. package/src/runtime/execution/process-runtime/canary.ts +19 -5
  507. package/src/runtime/execution/process-runtime/check-classification.ts +48 -0
  508. package/src/runtime/execution/process-runtime/check-facade.ts +23 -9
  509. package/src/runtime/execution/process-runtime/check-receipt.ts +1 -1
  510. package/src/runtime/execution/process-runtime/check-result-retention.ts +132 -0
  511. package/src/runtime/execution/process-runtime/check-result.ts +73 -2
  512. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -3
  513. package/src/runtime/execution/process-runtime/check-storage.ts +187 -0
  514. package/src/runtime/execution/process-runtime/command-facade.ts +38 -87
  515. package/src/runtime/execution/process-runtime/index.ts +1 -0
  516. package/src/runtime/execution/process-runtime/interactive-admission.ts +2 -1
  517. package/src/runtime/execution/process-runtime/lightweight-managed.ts +32 -1
  518. package/src/runtime/execution/process-runtime/persisted-check.ts +128 -21
  519. package/src/runtime/execution/process-runtime/resource-claims.ts +60 -3
  520. package/src/runtime/execution/process-runtime/runtime.ts +132 -15
  521. package/src/runtime/execution/process-runtime/types.ts +22 -0
  522. package/src/runtime/execution/workers/executor.ts +16 -13
  523. package/src/runtime/execution/workers/worker-entry.ts +1 -1
  524. package/src/runtime/gateway/mcp/execution-tools.ts +2 -207
  525. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +2 -61
  526. package/src/runtime/gateway/mcp/persisted-check-process.ts +2 -3
  527. package/src/runtime/gateway/mcp/process-tools.ts +2 -289
  528. package/src/runtime/gateway/mcp/router.ts +2 -1125
  529. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +2 -565
  530. package/src/runtime/gateway/mcp/runtime-tools.ts +2 -6651
  531. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +2 -1
  532. package/src/runtime/maintenance/cleanup.ts +38 -24
  533. package/src/runtime/platform/browser-product-discovery.ts +174 -0
  534. package/src/runtime/platform/computer-platform.ts +14 -0
  535. package/src/runtime/platform/executable-discovery.ts +54 -0
  536. package/src/runtime/platform/fetch-http-server.ts +90 -0
  537. package/src/runtime/platform/service-manager.ts +138 -0
  538. package/src/runtime/platform/windows-host-discovery.ts +118 -0
  539. package/src/runtime/platform/windows-recovery-deployment.ts +67 -0
  540. package/src/runtime/plugins/action-application.ts +135 -0
  541. package/src/runtime/plugins/app-store-connect-adapter.ts +9 -21
  542. package/src/runtime/plugins/browser-adapter.ts +140 -100
  543. package/src/runtime/plugins/browser-automation-service.ts +15 -36
  544. package/src/runtime/plugins/browser-macos-bridge.ts +69 -21
  545. package/src/runtime/plugins/browser-manifest-surface.ts +30 -6
  546. package/src/runtime/plugins/browser-native-session-service.ts +1 -1
  547. package/src/runtime/plugins/browser-provider-registry.ts +2 -109
  548. package/src/runtime/plugins/browser-registration.ts +16 -0
  549. package/src/runtime/plugins/browser-runtime-contract.ts +2 -154
  550. package/src/runtime/plugins/browser-runtime.ts +41 -9
  551. package/src/runtime/plugins/browser-session-authority.ts +101 -291
  552. package/src/runtime/plugins/browser-session-legacy-migration.ts +203 -0
  553. package/src/runtime/plugins/browser-session-store.ts +229 -36
  554. package/src/runtime/plugins/browser-session-types.ts +2 -98
  555. package/src/runtime/plugins/capability-authorization-grants.ts +17 -0
  556. package/src/runtime/plugins/catalog-trust.ts +82 -0
  557. package/src/runtime/plugins/computer-registration.ts +839 -0
  558. package/src/runtime/plugins/config-store.ts +119 -0
  559. package/src/runtime/plugins/desktop-operator-external-policy.ts +932 -0
  560. package/src/runtime/plugins/desktop-operator-registration.ts +111 -8
  561. package/src/runtime/plugins/errors.ts +8 -1
  562. package/src/runtime/plugins/external-adapter.ts +45 -322
  563. package/src/runtime/plugins/external-provider-policy.ts +48 -0
  564. package/src/runtime/plugins/external-registration.ts +9 -1
  565. package/src/runtime/plugins/external-unix-socket-probe.cjs +9 -3
  566. package/src/runtime/plugins/external-unix-socket.ts +64 -193
  567. package/src/runtime/plugins/first-party-external-registration.ts +163 -0
  568. package/src/runtime/plugins/first-party-registry.ts +3 -1
  569. package/src/runtime/plugins/github-adapter.ts +1 -2
  570. package/src/runtime/plugins/gmail-adapter.ts +6 -6
  571. package/src/runtime/plugins/google-calendar-adapter.ts +6 -6
  572. package/src/runtime/plugins/google-shared.ts +31 -46
  573. package/src/runtime/plugins/google-tasks-adapter.ts +6 -6
  574. package/src/runtime/plugins/ios-adapter.ts +1 -2
  575. package/src/runtime/plugins/local-system-adapter.ts +180 -0
  576. package/src/runtime/plugins/macos-capability-broker.ts +15 -105
  577. package/src/runtime/plugins/resend-adapter.ts +15 -24
  578. package/src/runtime/plugins/store.ts +493 -51
  579. package/src/runtime/plugins/types.ts +8 -1
  580. package/src/runtime/plugins/uu-remote-rescue-registration.ts +155 -0
  581. package/src/runtime/plugins/windows-host-recovery-install.ts +68 -0
  582. package/src/runtime/plugins/windows-host-recovery-registration.ts +85 -0
  583. package/src/runtime/plugins/xiaohongshu-publish.ts +86 -430
  584. package/src/runtime/projections/controller-context.ts +12 -6
  585. package/src/runtime/projections/git-status-sampler.ts +73 -22
  586. package/src/runtime/projections/materialized-view.ts +14 -8
  587. package/src/runtime/recovery/capability-action-application.ts +228 -0
  588. package/src/runtime/recovery/index.ts +3 -0
  589. package/src/runtime/recovery/lifecycle-inventory.ts +338 -0
  590. package/src/runtime/recovery/local-jobs-repair.ts +14 -14
  591. package/src/runtime/recovery/maintenance-executor.ts +358 -76
  592. package/src/runtime/recovery/quarantine-retention.ts +256 -0
  593. package/src/runtime/release/identity.ts +6 -0
  594. package/src/runtime/resources/leases/store.ts +1 -1
  595. package/src/runtime/root/active-execution-power-assertion.ts +139 -0
  596. package/src/runtime/root/assistant-learning-loop.ts +45 -0
  597. package/src/runtime/root/browser-session-composition.ts +59 -0
  598. package/src/runtime/root/computer-composition.ts +191 -0
  599. package/src/runtime/root/computer-target-composition.ts +16 -0
  600. package/src/runtime/root/computer-target-persistence.ts +39 -0
  601. package/src/runtime/root/controller-round-composition.ts +107 -0
  602. package/src/runtime/root/controller-services.ts +2 -0
  603. package/src/runtime/root/entry.ts +4 -3
  604. package/src/runtime/root/gateway-adapter.ts +3 -3
  605. package/src/runtime/root/local-bridge.ts +5 -2
  606. package/src/runtime/root/mcp-transport.ts +5 -5
  607. package/src/runtime/root/package-connector-service.ts +108 -56
  608. package/src/runtime/root/package-runtime-release.ts +86 -18
  609. package/src/runtime/root/package-runtime-service.ts +63 -86
  610. package/src/runtime/root/release-execution-canary.ts +71 -0
  611. package/src/runtime/root/release-loader.ts +68 -0
  612. package/src/runtime/root/release-manifest.ts +106 -2
  613. package/src/runtime/root/release-materialize.ts +103 -4
  614. package/src/runtime/root/release-store.ts +31 -2
  615. package/src/runtime/root/runtime.ts +240 -25
  616. package/src/runtime/root/scheduled-controller-composition.ts +51 -0
  617. package/src/runtime/root/scheduler.ts +12 -4
  618. package/src/runtime/root/service-runner.ts +1 -1
  619. package/src/runtime/root/service.ts +41 -16
  620. package/src/runtime/root/status.ts +1 -0
  621. package/src/runtime/root/types.ts +24 -1
  622. package/src/runtime/shared/local-bridge-surface.ts +1 -1
  623. package/src/runtime/shared/process-environment.ts +19 -4
  624. package/src/runtime/shared/storage-capacity.ts +68 -0
  625. package/src/runtime/standalone-recovery/controller-home-migration.ts +1116 -0
  626. package/src/runtime/standalone-recovery/core.ts +984 -230
  627. package/src/runtime/standalone-recovery/entry.ts +182 -51
  628. package/src/runtime/standalone-recovery/independent-host-rescue.ts +172 -0
  629. package/src/runtime/standalone-recovery/installer.ts +212 -104
  630. package/src/runtime/standalone-recovery/mcp-server.ts +243 -0
  631. package/src/runtime/standalone-recovery/mutation-identity-contract.ts +21 -0
  632. package/src/runtime/standalone-recovery/operation-lock.ts +160 -0
  633. package/src/runtime/standalone-recovery/performance.ts +135 -0
  634. package/src/runtime/standalone-recovery/release.ts +5 -0
  635. package/src/runtime/watchdog/workflow-watchdog.ts +1 -1
  636. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -1
  637. package/src/runtime/workflow/schedules/engine.ts +191 -343
  638. package/src/runtime/workflow/schedules/pending-activation.ts +1 -1
  639. package/src/runtime/workflow/schedules/settlement.ts +2 -191
  640. package/src/runtime/workflow/schedules/store.ts +2 -607
  641. package/src/runtime/workflow/schedules/types.ts +2 -127
  642. package/src/runtime/workflow/schedules/work-continuation.ts +180 -15
  643. package/src/runtime/workflows/first-party/xiaohongshu.ts +122 -0
  644. package/src/runtime/workflows/runtime.ts +486 -0
  645. package/src/testing/test-governance.ts +90 -29
  646. package/assets/templates/helpers/archive-architecture-request.sh +0 -244
  647. package/docs/architecture/history/README.md +0 -7
  648. package/docs/architecture/history/chatgpt-handoff-facade.md +0 -397
  649. package/docs/architecture/history/global-hook-runtime.md +0 -166
  650. package/docs/architecture/history/ios-semantic-automation-provider-v2.md +0 -170
  651. package/docs/architecture/requests/archive/2026/20260528-154740-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  652. package/docs/architecture/requests/archive/2026/20260528-154816-assets-hooks-assets-hooks-hook-input-sh.md +0 -59
  653. package/docs/architecture/requests/archive/2026/20260528-161851-ai-harness-workflow-contract-json-ai-harness-workflow-contract-json.md +0 -59
  654. package/docs/architecture/requests/archive/2026/20260528-161853-scripts-check-task-workflow-sh-scripts-check-task-workflow-sh.md +0 -59
  655. package/docs/architecture/requests/archive/2026/20260528-161911-assets-workflow-contract-v1-json-assets-workflow-contract-v1-json.md +0 -59
  656. package/docs/architecture/requests/archive/2026/20260528-222416-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  657. package/docs/architecture/requests/archive/2026/20260528-222444-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  658. package/docs/architecture/requests/archive/2026/20260528-222457-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  659. package/docs/architecture/requests/archive/2026/20260528-222648-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  660. package/docs/architecture/requests/archive/2026/20260528-222705-ai-hooks-ai-hooks-worktree-guard-sh.md +0 -59
  661. package/docs/architecture/requests/archive/2026/20260528-222726-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  662. package/docs/architecture/requests/archive/2026/20260528-222727-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  663. package/docs/architecture/requests/archive/2026/20260528-224736-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  664. package/docs/architecture/requests/archive/2026/20260528-233259-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  665. package/docs/architecture/requests/archive/2026/20260528-233335-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  666. package/docs/architecture/requests/archive/2026/20260528-233456-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  667. package/docs/architecture/requests/archive/2026/20260528-233457-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  668. package/docs/architecture/requests/archive/2026/20260528-233637-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  669. package/docs/architecture/requests/archive/2026/20260528-233638-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  670. package/docs/architecture/requests/archive/2026/20260529-000322-root-package-json.md +0 -59
  671. package/docs/architecture/requests/archive/2026/20260529-004238-ai-hooks-ai-hooks-lib-workflow-state-sh.md +0 -59
  672. package/docs/architecture/requests/archive/2026/20260529-020654-ai-harness-policy-json-ai-harness-policy-json.md +0 -63
  673. package/docs/architecture/requests/archive/2026/20260529-094236-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  674. package/docs/architecture/requests/archive/2026/20260529-094323-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  675. package/docs/architecture/requests/archive/2026/20260529-094331-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  676. package/docs/architecture/requests/archive/2026/20260529-094339-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  677. package/docs/architecture/requests/archive/2026/20260529-094430-assets-hooks-assets-hooks-session-start-context-sh.md +0 -60
  678. package/docs/architecture/requests/archive/2026/20260529-094446-ai-hooks-ai-hooks-session-start-context-sh.md +0 -60
  679. package/docs/architecture/requests/archive/2026/20260613-002040-runtime-harness-hook-adapters.md +0 -68
  680. package/docs/architecture/requests/archive/2026/root.md +0 -68
  681. package/docs/architecture/requests/archive/2026/runtime-harness-hook-adapters.md +0 -76
  682. package/docs/architecture/requests/archive/2026/verification-evals-checks.md +0 -68
  683. package/docs/architecture/requests/archive/2026/workflow-engine-contract-assets.md +0 -69
  684. package/scripts/archive-architecture-request.sh +0 -4
  685. package/scripts/run-skill-evals.ts +0 -1022
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Machine-readable lifecycle inventory for persisted/generated Runtime classes.
3
+ *
4
+ * This registry is descriptive, not a second cleanup authority. It records the
5
+ * current owner/protection/retention facts that v2c can prove and makes every
6
+ * remaining v2c2 closure obligation explicit. Runtime maintenance and the
7
+ * owning domain services remain the only mutation authorities.
8
+ */
9
+
10
+ export const RUNTIME_LIFECYCLE_DATA_CLASSES = [
11
+ 'semantic_authority',
12
+ 'execution_authority',
13
+ 'evidence',
14
+ 'provider_artifact',
15
+ 'derived',
16
+ 'cache',
17
+ 'temporary',
18
+ ] as const;
19
+ export type RuntimeLifecycleDataClass = (typeof RUNTIME_LIFECYCLE_DATA_CLASSES)[number];
20
+
21
+ export const RUNTIME_LIFECYCLE_CLOSURE_STATUSES = ['existing_bounded', 'needs_v2c2_closure'] as const;
22
+ export type RuntimeLifecycleClosureStatus = (typeof RUNTIME_LIFECYCLE_CLOSURE_STATUSES)[number];
23
+
24
+ export interface RuntimeLifecycleClassDefinition {
25
+ id: string;
26
+ owner: string;
27
+ scope: 'controller' | 'repository' | 'work' | 'process' | 'session' | 'provider';
28
+ dataClass: RuntimeLifecycleDataClass;
29
+ storage: string;
30
+ terminalCondition: string;
31
+ activeProtection: string;
32
+ retentionCapacity: string;
33
+ cleanupAuthority: string;
34
+ recoverySemantics: string;
35
+ closureStatus: RuntimeLifecycleClosureStatus;
36
+ evidencePaths: readonly string[];
37
+ }
38
+
39
+ function lifecycle(value: RuntimeLifecycleClassDefinition): RuntimeLifecycleClassDefinition {
40
+ return Object.freeze(value);
41
+ }
42
+
43
+ export const RUNTIME_LIFECYCLE_INVENTORY: readonly RuntimeLifecycleClassDefinition[] = Object.freeze([
44
+ lifecycle({
45
+ id: 'requirement', owner: 'Goal / Requirement authority', scope: 'controller', dataClass: 'semantic_authority',
46
+ storage: 'Controller Home SQLite requirement namespace',
47
+ terminalCondition: 'Requirement reaches done or cancelled through canonical semantic transition.',
48
+ activeProtection: 'The canonical transition table never returns done/cancelled Requirements to active authority, and optimistic revision fencing serializes every mutation.',
49
+ retentionCapacity: 'Permanent semantic/audit retention is the explicit policy: SQLite stores exactly one current row per requirementId and revisions update that row in place. Cardinality grows only when a new Requirement identity is deliberately admitted, never from retry/recovery cycles.',
50
+ cleanupAuthority: 'Requirement authority owns semantic retention. Runtime GC does not delete Requirement rows; replaceable execution evidence is reclaimed by its own lifecycle classes.',
51
+ recoverySemantics: 'done may only remain done or become cancelled; cancelled may only remain cancelled. Recovery consumes the retained identity instead of reconstructing or reopening it.',
52
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/persistence/requirement-store.ts','packages/kernel/goal/api/index.ts','tests/runtime/requirement-portfolio-migration.test.ts'],
53
+ }),
54
+ lifecycle({
55
+ id: 'plan', owner: 'Goal / Plan authority', scope: 'repository', dataClass: 'semantic_authority',
56
+ storage: 'Controller Home SQLite plan namespace',
57
+ terminalCondition: 'Plan is finalized, superseded, cancelled or invalidated by drift.',
58
+ activeProtection: 'Current-plan queries exclude terminal/superseded authority, successor obligation continuity is fenced explicitly, and every same-plan mutation is revision-CAS protected.',
59
+ retentionCapacity: 'Permanent semantic/audit retention is the explicit policy: SQLite stores one current row per planId and revisions update that row in place. Only an explicit successor creates another Plan identity, so retries do not multiply Plan rows.',
60
+ cleanupAuthority: 'Plan authority owns semantic retention. Runtime GC does not delete Plan rows; predecessor/successor lineage remains queryable while disposable validation/process evidence is reclaimed elsewhere.',
61
+ recoverySemantics: 'Recovery preserves predecessor/successor and obligation disposition facts and cannot make a terminal predecessor current.',
62
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/facade/plan-contract-store.ts','packages/kernel/goal/api/index.ts','tests/runtime/plan-contract-store.test.ts'],
63
+ }),
64
+ lifecycle({
65
+ id: 'work', owner: 'Kernel Work authority', scope: 'work', dataClass: 'execution_authority',
66
+ storage: 'Controller Home SQLite / Work authority records plus WorkHandle placement state',
67
+ terminalCondition: 'Work reaches completed, failed or cancelled with delivery/cleanup evidence as required.',
68
+ activeProtection: 'Work state machine, controller ownership, leases, delivery containment, active Plan bindings and revision-CAS updates protect live or explicitly resumable Work.',
69
+ retentionCapacity: 'Permanent semantic/audit retention is the explicit policy: SQLite stores one current row per workId and lifecycle mutations update that row in place. New rows correspond only to deliberately admitted Work identities; Process/log/check-result/artifact growth is bounded by separate lifecycle classes.',
70
+ cleanupAuthority: 'Work finalization/terminal cleanup releases owned execution resources, but Runtime GC does not delete the durable Work row or its completion identity.',
71
+ recoverySemantics: 'A retained cancelled Work can resume only through the explicit canonical resume contract; completed delivery identity and successor lineage remain durable and are never synthesized from deleted detail.',
72
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/work/api/index.ts','src/runtime/control-plane/execution/work-terminal-cleanup.ts','tests/runtime/repository-work-admission.test.ts'],
73
+ }),
74
+ lifecycle({
75
+ id: 'process_record_log', owner: 'Process Runtime', scope: 'process', dataClass: 'execution_authority',
76
+ storage: 'Controller Home repository process records/logs',
77
+ terminalCondition: 'Process is succeeded, failed, timed_out, cancelled, orphaned, completed_unknown or unknown after reconciliation.',
78
+ activeProtection: 'Active process index and live process identity are never GCd; stale active records require evidence-based reconciliation.',
79
+ retentionCapacity: 'Terminal records default to 7 days and 500 records per repository; malformed/unknown evidence is preserved fail-closed.',
80
+ cleanupAuthority: 'Process Runtime gcTerminalProcesses under Runtime writer fence.',
81
+ recoverySemantics: 'GC never fabricates terminality and never throws cleanup failure into the controller main loop.',
82
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/execution/process-runtime/gc.ts'],
83
+ }),
84
+ lifecycle({
85
+ id: 'execution_job', owner: 'Execution Job / Scheduler authority', scope: 'repository', dataClass: 'execution_authority',
86
+ storage: 'Controller Home execution-job store',
87
+ terminalCondition: 'Job reaches its canonical terminal lifecycle outcome.',
88
+ activeProtection: 'Active Job/lease/dependency state remains authoritative and cannot be reclaimed by artifact cleanup.',
89
+ retentionCapacity: 'ExecutionJob creation is retired fail-closed. Legacy terminal bundles use a 30-day horizon, retain at most 500 terminal records per repository, scan at most 5000 records and remove at most 32 bundles per selected-repository maintenance cycle.',
90
+ cleanupAuthority: 'ExecutionJob store owns retired-bundle cleanup; centralized Scheduler maintenance invokes it for the same bounded repository slot as Process GC.',
91
+ recoverySemantics: 'Active/nonterminal Jobs are protected. Terminal cleanup is fenced by the existing per-Job lock, removes Job-owned record/request/worker-receipt/per-job-event/artifact state, preserves the global audit ledger, and never replays an accepted external effect.',
92
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/execution/jobs/store.ts','src/runtime/evidence/artifact-store.ts','src/runtime/control-plane/global-scheduler/maintenance.ts','tests/runtime/runtime-cleanup.test.ts'],
93
+ }),
94
+ lifecycle({
95
+ id: 'check_receipt', owner: 'Verification / Process evidence authority', scope: 'work', dataClass: 'evidence',
96
+ storage: 'Controller Home Process/check receipt evidence',
97
+ terminalCondition: 'Check Process reaches terminal outcome and receipt is bound to exact input/source identity.',
98
+ activeProtection: 'Receipts required by active validation, completion, review or Operational Memory support evidence are protected.',
99
+ retentionCapacity: 'A Process check receipt has no separate mutable authority: it is derived from one terminal Process record and copied into Work VerificationRecord when consumed. Process records are bounded by the 7-day/500 policy; persisted check-result sidecars use 30-day/500 retention, a 5000-entry scan bound and at most 50 removals per selected-repository cleanup pass.',
100
+ cleanupAuthority: 'Process GC owns terminal Process/log source, Scheduler maintenance owns replaceable check-result sidecars, and Work lifecycle owns accepted VerificationRecord copies; none becomes a second receipt authority.',
101
+ recoverySemantics: 'Active Work cache identities protect required sidecars; truncated/malformed scans fail closed, and missing or changed evidence becomes stale/replay-gap rather than synthetic success.',
102
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/execution/process-runtime/check-receipt.ts','src/runtime/execution/process-runtime/gc.ts','src/runtime/execution/process-runtime/check-result-retention.ts','packages/kernel/work/api/index.ts','tests/runtime/check-result-retention.test.ts'],
103
+ }),
104
+ lifecycle({
105
+ id: 'controller_round', owner: 'Kernel ControllerRound authority', scope: 'work', dataClass: 'semantic_authority',
106
+ storage: 'Controller Home SQLite controller-round relay records',
107
+ terminalCondition: 'Exactly one semantic disposition settles the round: continue_immediately, wait, wait_for_user or goal_complete; failed/blocked are explicit recovery states.',
108
+ activeProtection: 'Relay scope, claim generation and opaque authority fence each live semantic round.',
109
+ retentionCapacity: 'Permanent semantic/audit retention is the explicit policy: controller_round_relay uses workId as its stable key and each round/recovery transition revision-updates that row. Round history lives in durable audit, so retries and additional semantic rounds do not create parallel current relay authority.',
110
+ cleanupAuthority: 'ControllerRound authority owns relay retention. Runtime GC does not delete relay rows; ControllerSession/lease and provider/browser artifacts are separate bounded lifecycle classes.',
111
+ recoverySemantics: 'failed and blocked remain explicit recoverable states, so their relay identity is retained. Transport/session replacement and ambiguous provider effect reconcile against the same fenced relay instead of fabricating a new semantic round.',
112
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/controller/api/index.ts','tests/runtime/autonomous-continuation-lifecycle.test.ts'],
113
+ }),
114
+ lifecycle({
115
+ id: 'controller_session_lease', owner: 'Kernel ControllerSession / resource lease authority', scope: 'session', dataClass: 'execution_authority',
116
+ storage: 'Controller Home ControllerSession authority plus repository-scoped active resource lease files.',
117
+ terminalCondition: 'Controller ownership is explicitly released/replaced, expires or is fenced by terminalization; resource leases expire or are released by their exact owner/terminal Process.',
118
+ activeProtection: 'Principal/controller type/Runtime instance/claim-generation fencing protects Controller ownership; resource key, owner identity and fencing token protect each live resource lease.',
119
+ retentionCapacity: 'ControllerSession ownership is capped at one hour, claim persistence drops expired sessions and release removes active ownership immediately. Resource leases default to 30 seconds with a five-second minimum; every active-lease read/acquire physically reaps expired or malformed files without truncating the live authoritative set, and periodic Runtime maintenance traverses that same active view.',
120
+ cleanupAuthority: 'ControllerSession claim/release/terminalization owns session expiry; the resource Lease store owns expiry/release under the repository Controller lock, while centralized Runtime maintenance invokes the same active-lease view rather than introducing a second lease authority.',
121
+ recoverySemantics: 'Expired/replaced Controller transports or resource leases cannot strand permanent Work ownership; claim generation and exact fencing tokens fail closed, while retained Controller identity remains audit/recovery evidence rather than an active lease.',
122
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/controller/api/index.ts','src/runtime/resources/leases/store.ts','src/runtime/control-plane/runtime-cleanup.ts','tests/runtime/controller-session-store.test.ts','tests/runtime/work-execution-concurrency.test.ts','tests/runtime/process-runtime.test.ts'],
123
+ }),
124
+ lifecycle({
125
+ id: 'scheduler_occurrence_history', owner: 'Kernel Scheduler authority', scope: 'repository', dataClass: 'execution_authority',
126
+ storage: 'Controller Home schedule occurrence/decision records plus a bounded active/recent index.',
127
+ terminalCondition: 'Occurrence settles and falls outside the 5,000-entry recent index; active created/queued/running occurrences remain protected independently of age.',
128
+ activeProtection: 'The active/recent index plus a per-schedule Controller lock is re-read immediately before deletion, so concurrent saveOccurrence and active wake lineage fail closed.',
129
+ retentionCapacity: 'The Scheduler index retains at most 5,000 recent and 5,000 active identities; centralized maintenance physically reclaims occurrence/decision files after they fall outside both sets under bounded scan/removal budgets.',
130
+ cleanupAuthority: 'Central Runtime maintenance invokes Scheduler-owned cleanup; Scheduler storage performs deletion under the same schedule task lock used by occurrence writes.',
131
+ recoverySemantics: 'Deleted history is disposable execution history backed by Runtime events; cleanup never recreates a deleted Schedule or resurrects terminal Work.',
132
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/scheduler/api/index.ts','src/runtime/control-plane/runtime-cleanup.ts','tests/runtime/runtime-cleanup.test.ts'],
133
+ }),
134
+ lifecycle({
135
+ id: 'managed_workspace_checkout', owner: 'Work finalization / managed workspace authority', scope: 'work', dataClass: 'provider_artifact',
136
+ storage: 'Controller-owned managed worktree/checkouts plus repository registry placement metadata',
137
+ terminalCondition: 'Delivery containment/integration is proven and Work no longer owns the isolated workspace.',
138
+ activeProtection: 'Active Work, delivery containment and source-preservation checks block unsafe worktree deletion.',
139
+ retentionCapacity: 'Orphaned managed worktrees use a six-hour default TTL, cleanup-pending ownership releases after one hour, and every pass is scan/removal-budget bounded; active Work, lease and explicit references remain protected.',
140
+ cleanupAuthority: 'Work finalization/terminal cleanup and centralized Runtime maintenance; both reuse the managed-workspace/registry authority and never infer semantic completion from deletion.',
141
+ recoverySemantics: 'Dirty/unintegrated source is preserved and surfaced for reconciliation; malformed/unknown ownership and active leases fail closed instead of deleting the workspace.',
142
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/execution/managed-workspace.ts','src/runtime/control-plane/execution/work-terminal-cleanup.ts','src/runtime/control-plane/runtime-cleanup.ts','tests/runtime/runtime-cleanup.test.ts'],
143
+ }),
144
+ lifecycle({
145
+ id: 'edit_session', owner: 'Edit Session authority', scope: 'work', dataClass: 'execution_authority',
146
+ storage: 'Controller Home repository edit-sessions namespace reached through the repository runtime-storage compatibility binding.',
147
+ terminalCondition: 'Edit session is finalized, superseded or rolled back and no non-terminal Work still references the session for review/delivery.',
148
+ activeProtection: 'Non-terminal sessions and terminal sessions whose workId belongs to a non-terminal Work are never physically reclaimed.',
149
+ retentionCapacity: 'Terminal unowned sessions retain at most the newest 200 identities and seven days of history; centralized cleanup uses bounded rotating scans/removal budgets.',
150
+ cleanupAuthority: 'Central Runtime maintenance invokes EditSession-owned physical retention after canonical Work liveness is read successfully.',
151
+ recoverySemantics: 'Stale fingerprints reconcile into explicit session state before terminality; physical cleanup removes disposable patch/session artifacts only and never implies Work semantic completion.',
152
+ closureStatus: 'existing_bounded', evidencePaths: ['src/cli/editing/edit-session.ts','src/cli/repositories/runtime-storage.ts','src/runtime/control-plane/runtime-cleanup.ts','tests/runtime/runtime-cleanup.test.ts'],
153
+ }),
154
+ lifecycle({
155
+ id: 'verification_snapshot', owner: 'Work verification authority', scope: 'work', dataClass: 'evidence',
156
+ storage: 'Controller Home Work verification snapshots/process evidence',
157
+ terminalCondition: 'Snapshot is superseded by changed source/workspace/input identity or Work terminal cleanup.',
158
+ activeProtection: 'Exact source/workspace fingerprints and active Work review/completion references protect applicable evidence.',
159
+ retentionCapacity: 'Marked snapshots use a six-hour TTL, unmarked in-progress snapshots a 24-hour grace, with 512-entry/50-removal defaults per retention pass; active nonterminal Work ids are protected and malformed markers fail closed.',
160
+ cleanupAuthority: "Explicit full Runtime maintenance calls the Work verification snapshot retention authority; snapshot creation no longer opportunistically deletes another Work's evidence.",
161
+ recoverySemantics: 'Stale snapshots are rebuildable evidence; active Work snapshots are protected, invalid markers are retained for recovery review, and source/workspace identity still forces revalidation rather than unsafe reuse.',
162
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/execution/work-verification-snapshot.ts','src/runtime/recovery/maintenance-executor.ts','tests/runtime/runtime-cleanup.test.ts'],
163
+ }),
164
+ lifecycle({
165
+ id: 'mcp_transport_session', owner: 'MCP HTTP transport lifecycle', scope: 'session', dataClass: 'execution_authority',
166
+ storage: 'Controller-owned MCP transport registry',
167
+ terminalCondition: 'Client DELETE, explicit replacement, lease expiry, absolute lifetime or oldest-safe capacity eviction.',
168
+ activeProtection: 'Active POST work cannot be evicted and authenticated principal/route must match stored session.',
169
+ retentionCapacity: 'Global maximum, lease expiry and absolute lifetime bound stream-only sessions.',
170
+ cleanupAuthority: 'MCP transport registry lifecycle.',
171
+ recoverySemantics: 'Closing transport state never cancels or completes a durably accepted Job.',
172
+ closureStatus: 'existing_bounded', evidencePaths: ['docs/architecture/modules/controller-runtime/transport-lifecycle.md','src/cli/mcp/transports'],
173
+ }),
174
+ lifecycle({
175
+ id: 'browser_session_profile', owner: 'Browser session/provider authority', scope: 'provider', dataClass: 'provider_artifact',
176
+ storage: 'Controller Home BrowserSession authority and provider profile roots',
177
+ terminalCondition: 'Session is explicitly closed/replaced/expired; reusable profile may outlive one session only by explicit ownership policy.',
178
+ activeProtection: 'Active session/profile ownership and user-owned browser resources must not be reclaimed as Forge disposable state.',
179
+ retentionCapacity: 'Active sessions remain authoritative; tombstoned sessions use a 30-day TTL plus a 5,000-record cap and bounded 100-removal maintenance pass. Legacy repo-local import is permanently fenced by one Controller-level cutover marker before tombstone GC is allowed.',
180
+ cleanupAuthority: 'Browser provider authority tombstones sessions; Scheduler maintenance invokes the same Browser authority tombstone retention after legacy cutover closure.',
181
+ recoverySemantics: 'Active sessions are never reclaimed; legacy import cannot reopen after cutover, and deleted tombstones remain audit history in SQLite rather than active provider state.',
182
+ closureStatus: 'existing_bounded', evidencePaths: ['adapters/browser/session-authority.ts','src/runtime/root/browser-session-persistence.ts','src/runtime/control-plane/global-scheduler/maintenance.ts','tests/runtime/browser-session-authority.test.ts'],
183
+ }),
184
+ lifecycle({
185
+ id: 'browser_disposable_artifact', owner: 'Browser provider artifact lifecycle', scope: 'provider', dataClass: 'provider_artifact',
186
+ storage: 'Controller Home captures/downloads/diagnostics/interactions',
187
+ terminalCondition: 'Owning browser interaction/round is settled and no active diagnostic/recovery reference remains.',
188
+ activeProtection: 'Artifacts referenced by active provider interaction or user-owned resources are protected.',
189
+ retentionCapacity: 'Controller Home screenshots/downloads/diagnostics use explicit TTLs plus per-class count/byte caps, a one-hour active grace, and bounded 1000-entry/16-removal maintenance budgets.',
190
+ cleanupAuthority: 'Scheduler periodic maintenance invokes the Browser disposable-artifact retention authority for one repository slot; legacy repo-local Browser artifacts remain import/cleanup-only.',
191
+ recoverySemantics: 'Artifact deletion is disposable cleanup only and cannot rewrite provider-effect or ControllerRound outcome; capacity that cannot be reduced without crossing active grace remains an explicit blocker.',
192
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/generated-cache-retention.ts','src/runtime/control-plane/global-scheduler/maintenance.ts','src/runtime/plugins/browser-session-store.ts','tests/runtime/generated-cache-retention.test.ts'],
193
+ }),
194
+ lifecycle({
195
+ id: 'computer_interaction_target', owner: 'Computer interaction target authority', scope: 'controller', dataClass: 'execution_authority',
196
+ storage: 'Controller Home computer_interaction_target records',
197
+ terminalCondition: 'Target/lease is released, replaced or becomes invalid against stable application/provider identity.',
198
+ activeProtection: 'Stable application identity and provider binding/lease fencing protect active interaction targets.',
199
+ retentionCapacity: 'Active targets are retained; tombstones use a 30-day TTL, a 256-record cap, a 1000-row scan bound and a 32-removal maintenance budget.',
200
+ cleanupAuthority: 'Computer target authority owns tombstone policy; centralized Scheduler maintenance invokes it and every delete is re-read under the existing per-target lock with revision CAS fencing.',
201
+ recoverySemantics: 'Missing/mismatched stable identity fails closed rather than retargeting an arbitrary foreground app; tombstone deletion cannot replay provider effects and lock contention is reported as a bounded blocker.',
202
+ closureStatus: 'existing_bounded', evidencePaths: ['adapters/computer/interaction-target-authority.ts','packages/plugin-runtime/computer/target-authority.ts','src/runtime/root/computer-target-persistence.ts','src/runtime/control-plane/global-scheduler/maintenance.ts','tests/runtime/computer-interaction-target.test.ts'],
203
+ }),
204
+ lifecycle({
205
+ id: 'plugin_config_profile', owner: 'Plugin configuration/trust authority', scope: 'controller', dataClass: 'execution_authority',
206
+ storage: 'Controller Home plugin config/registration/trust state',
207
+ terminalCondition: 'Registration/profile is disabled, removed or superseded by explicit configuration mutation.',
208
+ activeProtection: 'Exact Controller Home trust, principal grants and provider identity protect active plugin capability.',
209
+ retentionCapacity: 'Controller Home config/profile state has explicit replace/remove operations; legacy .forge/plugins and .repo-harness/plugins config is import-only, retired after cutover, and stale cross-Controller symlinks are unlinked without traversal. GitHub registry authority remains outside this config class.',
210
+ cleanupAuthority: 'Plugin configuration authority owns explicit replacement/removal; legacy import cleanup retires repository-local compatibility state without creating a second Runtime authority.',
211
+ recoverySemantics: 'Missing/unhealthy provider remains degraded/unsupported; authoritative malformed Controller Home config fails closed instead of falling back to legacy state, and cleanup cannot broaden trust or arbitrary-code authority.',
212
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/plugins/external-registration.ts','src/runtime/plugins/store.ts','tests/runtime/plugin-config-controller-home-boundary.test.ts','tests/cli/plugin-command.test.ts'],
213
+ }),
214
+ lifecycle({
215
+ id: 'release_artifact', owner: 'Runtime Release authority', scope: 'controller', dataClass: 'provider_artifact',
216
+ storage: 'Controller Home immutable release resources/manifests',
217
+ terminalCondition: 'Release is superseded and is neither active, known-good nor inside the required rollback/reference window.',
218
+ activeProtection: 'Active release, known-good/rollback identity and recovery references are never deleted.',
219
+ retentionCapacity: 'Superseded unreferenced Runtime releases use a 30-minute default grace and staging releases a six-hour grace under a shared bounded removal budget; active, previous, connector, Supervisor and Recovery current/previous references are protected.',
220
+ cleanupAuthority: 'Release retention runs under centralized Runtime maintenance for unreferenced immutable artifacts; activation, known-good attestation and rollback selection remain Recovery/Release authority only.',
221
+ recoverySemantics: 'Every candidate refreshes release authority before deletion; missing/malformed authority fails closed, while historical known-good attestations remain evidence without pinning obsolete artifacts forever.',
222
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/release-retention.ts','src/runtime/root/release-store.ts','src/runtime/root/release-manifest.ts','tests/runtime/release-retention.test.ts'],
223
+ }),
224
+ lifecycle({
225
+ id: 'recovery_backup', owner: 'Standalone Recovery authority', scope: 'controller', dataClass: 'provider_artifact',
226
+ storage: 'Recovery-owned backup/audit resources outside ordinary execution state',
227
+ terminalCondition: 'Backup is superseded, unreferenced and outside rollback/recovery retention policy.',
228
+ activeProtection: 'Active/known-good recovery target and required schema/database rollback evidence are protected.',
229
+ retentionCapacity: 'The exact previous-release database backup is protected; older unreferenced .sqlite backups share the release-retention grace/removal budget and report reclaimed bytes separately from immutable release artifacts.',
230
+ cleanupAuthority: 'Central release retention may prune only old unreferenced backup artifacts; Recovery remains the sole rollback/selection authority and ordinary cleanup cannot alter release selection.',
231
+ recoverySemantics: 'Backup authority is re-read immediately before deletion; missing/invalid previous-backup authority fails closed and the only referenced rollback backup is never reclaimed.',
232
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/release-retention.ts','src/runtime/standalone-recovery','docs/operations/standalone-disaster-recovery.md','tests/runtime/release-retention.test.ts'],
233
+ }),
234
+ lifecycle({
235
+ id: 'quarantine', owner: 'Runtime Recovery / migration quarantine', scope: 'repository', dataClass: 'provider_artifact',
236
+ storage: 'Controller Home quarantine namespaces',
237
+ terminalCondition: 'Quarantined artifact is reconciled/recovered or exceeds a safe retention window with no active audit/recovery hold.',
238
+ activeProtection: 'Unresolved/corrupt evidence is preserved until an explicit safe disposition exists.',
239
+ retentionCapacity: 'Local Job and retired legacy-check quarantine entries share a Controller Home 30-day default retention horizon, 200-entry and 256 MiB capacity bounds, plus one bounded scan/removal budget; legacy repo-local quarantine roots are migration-only and retired after evidence relocation.',
240
+ cleanupAuthority: 'Central Runtime full maintenance owns quarantine retention; repair/quarantine writers only relocate evidence into the Controller Home quarantine root and never infer semantic completion.',
241
+ recoverySemantics: 'Quarantine remains diagnostic evidence, never a shadow active authority; legacy symlinks are relocated without traversal, and repeated maintenance is idempotent and fail-closed on unreadable evidence.',
242
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/recovery/quarantine-retention.ts','src/runtime/recovery/maintenance-executor.ts','src/runtime/recovery/local-jobs-repair.ts','tests/runtime/capability-recovery.test.ts'],
243
+ }),
244
+ lifecycle({
245
+ id: 'codegraph_cache', owner: 'Context / CodeGraph cache lifecycle', scope: 'repository', dataClass: 'cache',
246
+ storage: 'Controller Home tool-cache/codegraph or explicit external cache root',
247
+ terminalCondition: 'Index is stale, superseded, repository-retired or evicted as rebuildable cache.',
248
+ activeProtection: 'Only a live process-scoped Forge locator fences Controller Home cache deletion; unreadable, truncated, or ambiguous locator evidence fails closed. Raw source remains authority when cache is missing/stale.',
249
+ retentionCapacity: 'Forge-owned Controller Home indexes use a 7-day default idle grace, 512 MiB per-repository cap, 2 GiB Controller aggregate cap, and bounded oldest-first scan/removal budgets. Inactive caches may be rebuilt and evicted under age or capacity pressure; explicit external cache roots remain outside Forge cleanup authority.',
250
+ cleanupAuthority: 'Central Runtime cleanup owns rebuildable Controller Home CodeGraph eviction; no semantic authority is deleted and non-owned/symlink entries fail closed.',
251
+ recoverySemantics: 'Missing/stale cache degrades explicitly to lexical/raw-source evidence and rebuilds on demand; removal is idempotent and bounded by the shared cleanup budget.',
252
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/context/codegraph-cache-boundary.ts','src/runtime/control-plane/codegraph-cache-retention.ts','src/runtime/control-plane/runtime-cleanup.ts','tests/runtime/codegraph-cache-retention.test.ts'],
253
+ }),
254
+ lifecycle({
255
+ id: 'operational_memory', owner: 'Kernel Memory shadow reducer', scope: 'controller', dataClass: 'derived',
256
+ storage: 'Controller Home derived operational Memory records backed by retained Process evidence',
257
+ terminalCondition: 'Support evidence expires/disappears, compatibility invalidates the prior, or the namespace is explicitly dropped.',
258
+ activeProtection: 'Only exact retained mechanical evidence supports a prior; semantic decisions/external effects/authorization are forbidden consumers.',
259
+ retentionCapacity: 'Signals have 7d/30d horizons, scope cardinality 128, compatibility cardinality 256 and per-target sample caps.',
260
+ cleanupAuthority: 'Operational Memory store/reducer; full namespace is droppable and rebuildable.',
261
+ recoverySemantics: 'Corrupt/missing/stale derived state fails open and rebuilds from authoritative retained Process evidence.',
262
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/memory/api/index.ts','tests/runtime/operational-prior-store.test.ts'],
263
+ }),
264
+ lifecycle({
265
+ id: 'context_record', owner: 'Context Plane projection authority', scope: 'controller', dataClass: 'derived',
266
+ storage: 'Controller Home SQLite context_record namespace',
267
+ terminalCondition: 'Record is superseded/stale/dropped and no longer selected by bounded context projection.',
268
+ activeProtection: 'Context is advisory only; missing context degrades routing/evidence readiness instead of changing authority.',
269
+ retentionCapacity: 'Record count is capped at 1000 and each record/query has explicit byte/item/token bounds.',
270
+ cleanupAuthority: 'Context Plane bounded projection maintenance.',
271
+ recoverySemantics: 'Loss is tolerated; source/control-plane authorities reconstruct current context.',
272
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/context/context-plane.ts'],
273
+ }),
274
+ lifecycle({
275
+ id: 'assistant_outcome_observation', owner: 'Kernel Memory outcome observation service', scope: 'controller', dataClass: 'evidence',
276
+ storage: 'Controller Home SQLite assistant_outcome_observation namespace; immutable schemaVersion 1 records.',
277
+ terminalCondition: 'One accepted observation per explicit collection identity; retries cannot create another fact.',
278
+ activeProtection: 'Controller claim, source Work scope and retained evidence gate writes; invalidated evidence excludes recall.',
279
+ retentionCapacity: 'At most 1000 immutable metadata observations per semantic scope. Admission stops at capacity; raw logs and credentials are excluded.',
280
+ cleanupAuthority: 'Controller Home evidence retention owns lifecycle; no automatic deletion or chat reconstruction is introduced by recall.',
281
+ recoverySemantics: 'Complete Runtime/SQLite backup restores observations. A missing source is a visible gap, never a fabricated zero.',
282
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/memory/api/index.ts', 'src/runtime/control-plane/persistence/experience-store.ts', 'tests/runtime/assistant-learning.test.ts'],
283
+ }),
284
+ lifecycle({
285
+ id: 'assistant_experience', owner: 'Kernel Memory experience service', scope: 'controller', dataClass: 'derived',
286
+ storage: 'Controller Home SQLite assistant_experience namespace; schemaVersion 1, portable scope and revision CAS',
287
+ terminalCondition: 'Explicit retraction/supersession or validity expiry; missing support evidence excludes recall immediately.',
288
+ activeProtection: 'Only the active Work Controller may submit scoped evidence-backed experience. Recall cannot grant authorization or decide acceptance.',
289
+ retentionCapacity: '1000 records per semantic scope, 16 KiB per record, 32 support/counterevidence references each; 30d observations, 90d hypotheses, explicit lesson expiry or durable rationale; terminal rows retire after 30d grace.',
290
+ cleanupAuthority: 'Central Runtime maintenance calls the Memory retirement adapter under its existing removal budget.',
291
+ recoverySemantics: 'Experience is not rebuilt from chat. Whole-release SQLite backup/restore preserves state; missing evidence produces an explicit recall gap. CAS and transactions prevent partial supersession.',
292
+ closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/memory/api/index.ts', 'src/runtime/control-plane/persistence/experience-store.ts', 'tests/runtime/assistant-learning.test.ts'],
293
+ }),
294
+ lifecycle({
295
+ id: 'repository_controller_home_namespace', owner: 'Repository Registry / Controller Home storage authority', scope: 'repository', dataClass: 'execution_authority',
296
+ storage: 'Controller Home repositories/<repoId> namespace',
297
+ terminalCondition: 'Repository is explicitly disabled/removed and all active Work/Process/session/provider/recovery references are closed.',
298
+ activeProtection: 'Registered active repository and every live child authority protect its namespace.',
299
+ retentionCapacity: 'Removed repositories enter a seven-day grace, then centralized maintenance may reclaim only an explicit allowlist of disposable Controller Home children under bounded scan/removal budgets. Semantic/audit/migration directories are never inferred as disposable.',
300
+ cleanupAuthority: 'Central Runtime maintenance invokes repository namespace retention only after live Work/Job/Process/Lease/Browser-session fences and Work cleanup evidence are closed.',
301
+ recoverySemantics: 'Unknown authority state, truncated Browser authority scans, symlinks and incomplete Work cleanup fail closed. Re-registration keeps Registry/SQLite/audit lineage while stale execution placement is rebuilt.',
302
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/repository-namespace-retention.ts','src/runtime/control-plane/runtime-cleanup.ts','src/cli/repositories/registry.ts','tests/runtime/runtime-cleanup.test.ts'],
303
+ }),
304
+ lifecycle({
305
+ id: 'sqlite_control_plane', owner: 'Controller Home SQLite persistence authority', scope: 'controller', dataClass: 'execution_authority',
306
+ storage: 'Controller Home control-plane.sqlite and bounded backup/recovery artifacts',
307
+ terminalCondition: 'Rows follow their owning domain lifecycle; free pages become reclaimable only after safe row cleanup.',
308
+ activeProtection: 'Transactions/CAS revisions and domain references protect current canonical rows.',
309
+ retentionCapacity: 'Central cleanup performs PASSIVE WAL checkpointing and only VACUUMs already-free pages after both the 64 MiB reclaimable-byte and 20% free-page thresholds are met; live-writer SQLITE_BUSY is a fail-closed retry-later blocker.',
310
+ cleanupAuthority: 'Central Runtime cleanup invokes bounded SQLite physical maintenance; owning domains remain the only row-retirement authority.',
311
+ recoverySemantics: 'Compaction never defines semantic terminality, preserves current rows/audit continuity, and re-runs integrity validation after VACUUM.',
312
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/persistence/sqlite-store.ts','src/runtime/control-plane/runtime-cleanup.ts'],
313
+ }),
314
+ lifecycle({
315
+ id: 'runtime_temp', owner: 'Runtime diagnostics/process scratch lifecycle', scope: 'process', dataClass: 'temporary',
316
+ storage: 'OS temporary roots / Controller-observed Runtime temp entries',
317
+ terminalCondition: 'Owning live Process is gone and entry exceeds the runtime temp retention threshold.',
318
+ activeProtection: 'collectRuntimeProcesses protects scratch still owned by a live Runtime process.',
319
+ retentionCapacity: 'RUNTIME_TEMP_RETENTION_MINUTES age threshold and bounded maintenance candidate scan.',
320
+ cleanupAuthority: 'Central Runtime maintenance removeRuntimeTempEntry.',
321
+ recoverySemantics: 'Temp cleanup is disposable and never participates in semantic completion or effect replay.',
322
+ closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/diagnostics/performance.ts','src/runtime/recovery/maintenance-executor.ts'],
323
+ }),
324
+ ]);
325
+
326
+ export function runtimeLifecycleClass(id: string): RuntimeLifecycleClassDefinition | undefined {
327
+ return RUNTIME_LIFECYCLE_INVENTORY.find((entry) => entry.id === id);
328
+ }
329
+
330
+ export function runtimeLifecycleClosureSummary(): { total: number; existingBounded: number; needsV2c2Closure: number; pendingIds: string[] } {
331
+ const pendingIds = RUNTIME_LIFECYCLE_INVENTORY.filter((entry) => entry.closureStatus === 'needs_v2c2_closure').map((entry) => entry.id);
332
+ return {
333
+ total: RUNTIME_LIFECYCLE_INVENTORY.length,
334
+ existingBounded: RUNTIME_LIFECYCLE_INVENTORY.length - pendingIds.length,
335
+ needsV2c2Closure: pendingIds.length,
336
+ pendingIds,
337
+ };
338
+ }
@@ -1,8 +1,10 @@
1
1
  import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from 'fs';
2
2
  import { basename, dirname, join, relative, resolve, sep } from 'path';
3
3
  import { randomUUID } from 'crypto';
4
+ import { assertStorageHeadroom } from '../shared/storage-capacity';
4
5
  import type { RepositoryRecord } from '../../cli/repositories/types';
5
6
  import { repositoryControllerRoot } from '../../cli/repositories/controller-home';
7
+ import { quarantineRuntimePath } from './quarantine-retention';
6
8
  import { findExecutionJob } from '../execution/jobs/store';
7
9
  import { isProcessAlive } from '../shared/process-tree';
8
10
  import type { LocalBridgeJob } from '../../cli/local-bridge/types';
@@ -61,10 +63,16 @@ const DEFAULT_MIN_AGE_MINUTES = 0;
61
63
  function now(): string { return new Date().toISOString(); }
62
64
 
63
65
  function atomicWriteJson(path: string, value: unknown): void {
66
+ const content = `${JSON.stringify(value, null, 2)}\n`;
67
+ assertStorageHeadroom(path, {
68
+ operation: 'local_jobs_repair_state_write',
69
+ requiredBytes: Buffer.byteLength(content),
70
+ reserveBytes: 16 * 1024 * 1024,
71
+ });
64
72
  mkdirSync(dirname(path), { recursive: true });
65
73
  const tmp = `${path}.${process.pid}.${randomUUID()}.tmp`;
66
74
  try {
67
- writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf-8');
75
+ writeFileSync(tmp, content, 'utf-8');
68
76
  renameSync(tmp, path);
69
77
  } finally {
70
78
  rmSync(tmp, { force: true });
@@ -276,11 +284,6 @@ export function previewRuntimeStorageRepair(
276
284
  };
277
285
  }
278
286
 
279
- function quarantinePath(repository: RepositoryRecord, candidate: RuntimeStorageRepairCandidate): string {
280
- const stamp = now().replace(/[:.]/g, '-');
281
- return join(repository.canonicalRoot, '.ai', 'harness', 'quarantine', 'local-jobs', `${stamp}-${candidate.rootKind}-${basename(candidate.jobDir)}`);
282
- }
283
-
284
287
  function terminalize(candidate: RuntimeStorageRepairCandidate): string {
285
288
  const jobPath = join(candidate.jobDir, 'job.json');
286
289
  const job = readJob(jobPath);
@@ -314,14 +317,11 @@ function terminalize(candidate: RuntimeStorageRepairCandidate): string {
314
317
  return job.error;
315
318
  }
316
319
 
317
- function quarantine(repository: RepositoryRecord, candidate: RuntimeStorageRepairCandidate): string {
318
- const target = quarantinePath(repository, candidate);
319
- mkdirSync(dirname(target), { recursive: true });
320
+ function quarantine(controllerHome: string, repository: RepositoryRecord, candidate: RuntimeStorageRepairCandidate): string {
320
321
  if (!safeContained(candidate.rootPath, candidate.jobDir)) throw new Error('candidate path escapes local-jobs root');
321
322
  const stat = lstatSync(candidate.jobDir);
322
323
  if (!stat.isDirectory() && !stat.isFile() && !stat.isSymbolicLink()) throw new Error('unsupported local job entry type');
323
- renameSync(candidate.jobDir, target);
324
- return target;
324
+ return quarantineRuntimePath(controllerHome, repository.repoId, candidate.jobDir, `${candidate.rootKind}-${basename(candidate.jobDir)}`);
325
325
  }
326
326
 
327
327
  function rebuildActiveIndex(rootPath: string): void {
@@ -365,7 +365,7 @@ export function applyRuntimeStorageRepair(
365
365
  try {
366
366
  const message = candidate.action === 'terminalize'
367
367
  ? terminalize(candidate)
368
- : quarantine(repository, candidate);
368
+ : quarantine(controllerHome, repository, candidate);
369
369
  applied.push({ candidateId: candidate.candidateId, action: candidate.action, path: candidate.jobDir, status: 'applied', message });
370
370
  } catch (error) {
371
371
  applied.push({ candidateId: candidate.candidateId, action: candidate.action, path: candidate.jobDir, status: 'failed', message: error instanceof Error ? error.message : String(error) });
@@ -374,7 +374,7 @@ export function applyRuntimeStorageRepair(
374
374
  for (const root of preview.inspectedRoots) {
375
375
  if (root.exists) rebuildActiveIndex(root.path);
376
376
  }
377
- const auditPath = join(repository.canonicalRoot, '.ai', 'harness', 'controller', 'runtime-storage-repair.jsonl');
377
+ const auditPath = join(repositoryControllerRoot(controllerHome, repository.repoId), 'audit', 'runtime-storage-repair.jsonl');
378
378
  appendJsonLine(auditPath, {
379
379
  schemaVersion: 1,
380
380
  at: now(),
@@ -388,6 +388,6 @@ export function applyRuntimeStorageRepair(
388
388
  generatedAt: now(),
389
389
  mutates: true,
390
390
  applied,
391
- auditPath: relative(repository.canonicalRoot, auditPath),
391
+ auditPath: relative(controllerHome, auditPath),
392
392
  };
393
393
  }