@moretea-labs/forge 1.5.1 → 1.7.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 (434) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +46 -0
  3. package/CLAUDE.md +2 -0
  4. package/DESIGN.md +7 -2
  5. package/README.md +4 -4
  6. package/README.zh-CN.md +2 -2
  7. package/SKILL.md +2 -2
  8. package/THIRD_PARTY_NOTICES.md +1 -1
  9. package/agents/openai.yaml +1 -1
  10. package/assets/hooks/hook-input.sh +11 -8
  11. package/assets/hooks/lib/session-state.sh +10 -7
  12. package/assets/hooks/lib/workflow-state.sh +13 -177
  13. package/assets/hooks/post-tool-observer.sh +8 -2
  14. package/assets/hooks/pre-edit-guard.sh +8 -39
  15. package/assets/hooks/prompt-guard.sh +7 -83
  16. package/assets/hooks/session-start-context.sh +56 -1
  17. package/assets/partials/05-workflow.partial.md +1 -1
  18. package/assets/partials-agents/03-orchestration.partial.md +1 -1
  19. package/assets/plugin-registry.v1.json +54 -3
  20. package/assets/reference-configs/document-generation.md +1 -1
  21. package/assets/reference-configs/harness-overview.md +1 -1
  22. package/assets/reference-configs/hook-operations.md +1 -1
  23. package/assets/reference-configs/sprint-contracts.md +3 -3
  24. package/assets/skill-version.json +2 -2
  25. package/assets/templates/contract.template.md +2 -7
  26. package/assets/templates/helpers/capture-plan.sh +2 -2
  27. package/assets/templates/helpers/check-task-workflow.sh +4 -4
  28. package/assets/templates/helpers/contract-worktree.sh +1 -21
  29. package/assets/templates/helpers/ensure-task-workflow.sh +13 -38
  30. package/assets/templates/helpers/migrate-project-template.sh +22 -45
  31. package/assets/templates/helpers/new-plan.sh +1 -1
  32. package/assets/templates/helpers/plan-to-todo.sh +12 -37
  33. package/assets/templates/helpers/ship-worktrees.sh +2 -29
  34. package/assets/templates/helpers/sprint-backlog.sh +6 -6
  35. package/assets/templates/helpers/verify-contract.sh +1 -111
  36. package/assets/templates/helpers/verify-sprint.sh +3 -180
  37. package/assets/templates/plan.template.md +1 -1
  38. package/assets/templates/review.template.md +9 -34
  39. package/assets/workflow-contract.v1.json +10 -19
  40. package/docs/README.md +10 -10
  41. package/docs/architecture/CURRENT.md +170 -0
  42. package/docs/architecture/EVOLUTION.md +42 -0
  43. package/docs/architecture/current/README.md +4 -156
  44. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
  45. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
  46. package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
  47. package/docs/architecture/history/README.md +7 -0
  48. package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
  49. package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
  50. package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
  51. package/docs/architecture/history.md +3 -34
  52. package/docs/architecture/index.md +15 -98
  53. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  54. package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
  55. package/docs/architecture/versions/1.6.md +38 -0
  56. package/docs/architecture/versions/1.7.md +41 -0
  57. package/docs/forge-chatgpt-browser-engine.md +2 -2
  58. package/docs/forge-chatgpt-mcp-setup.md +4 -28
  59. package/docs/forge-chatgpt-supervised-automation.md +3 -3
  60. package/docs/forge-github-issue-launcher.md +1 -1
  61. package/docs/forge-runtime-self-healing-loop.md +1 -1
  62. package/docs/operations/controller-browser-plugin.md +38 -22
  63. package/docs/operations/controller-performance-and-502.md +124 -0
  64. package/docs/operations/controller-reliability-runbook.md +1 -1
  65. package/docs/operations/features.md +3 -3
  66. package/docs/operations/github-repository.md +1 -1
  67. package/docs/operations/homebrew.md +2 -2
  68. package/docs/operations/mcp-tool-exposure.md +5 -3
  69. package/docs/tutorials/01-install-and-start.md +1 -1
  70. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  71. package/docs/wiki/Architecture.md +6 -6
  72. package/docs/wiki/Implementation.md +2 -2
  73. package/docs/wiki/Installation.md +1 -1
  74. package/docs/wiki/Integrations.md +2 -2
  75. package/docs/wiki/Quick-Start.md +1 -1
  76. package/docs/wiki/Work-Lifecycle.md +1 -1
  77. package/package.json +29 -10
  78. package/scripts/activate-source-baseline.ts +17 -13
  79. package/scripts/benchmark-background-check-overlap.ts +228 -0
  80. package/scripts/benchmark-mcp-host.sh +117 -0
  81. package/scripts/benchmark-mcp-transport.ts +170 -0
  82. package/scripts/benchmark-quality-harness.ts +146 -0
  83. package/scripts/benchmark-route-session-concurrency.ts +207 -6
  84. package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
  85. package/scripts/benchmark-typescript-navigation.ts +186 -0
  86. package/scripts/benchmark-work-efficiency.ts +334 -0
  87. package/scripts/capture-plan.sh +3 -3
  88. package/scripts/check-agent-tooling.sh +8 -35
  89. package/scripts/check-architecture-sync.sh +17 -86
  90. package/scripts/check-mcp-compatibility.ts +14 -0
  91. package/scripts/check-public-docs.sh +14 -1
  92. package/scripts/check-runtime-architecture.mjs +107 -64
  93. package/scripts/check-stable-baseline.ts +92 -0
  94. package/scripts/check-task-workflow.sh +4 -4
  95. package/scripts/contract-worktree.sh +1 -21
  96. package/scripts/ensure-task-workflow.sh +22 -55
  97. package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
  98. package/scripts/install-standalone-recovery.ts +24 -0
  99. package/scripts/lib/project-init-lib.sh +15 -44
  100. package/scripts/migrate-chatgpt-automation-schedules.ts +64 -0
  101. package/scripts/migrate-project-template.sh +23 -1179
  102. package/scripts/new-plan.sh +1 -1
  103. package/scripts/plan-to-todo.sh +11 -36
  104. package/scripts/run-governed-gate.ts +2 -1
  105. package/scripts/ship-worktrees.sh +2 -29
  106. package/scripts/smoke-ios-physical-device.ts +4 -2
  107. package/scripts/smoke-runtime-recovery.ts +1 -35
  108. package/scripts/smoke-schedule-engine.ts +1 -20
  109. package/scripts/sprint-backlog.sh +1 -1
  110. package/scripts/verify-contract.sh +1 -111
  111. package/scripts/verify-forge-runtime.sh +0 -1
  112. package/scripts/verify-sprint.sh +3 -180
  113. package/scripts/workflow-contract.ts +1 -5
  114. package/src/cli/commands/chatgpt.ts +31 -2
  115. package/src/cli/commands/init-hook.ts +3 -3
  116. package/src/cli/commands/mcp.ts +9 -5
  117. package/src/cli/commands/plugin.ts +37 -10
  118. package/src/cli/commands/recovery.ts +25 -3
  119. package/src/cli/commands/runtime.ts +55 -3
  120. package/src/cli/commands/security.ts +12 -1
  121. package/src/cli/commands/setup-profile.ts +31 -21
  122. package/src/cli/controller/check-runner.ts +106 -3
  123. package/src/cli/controller/composite-result.ts +1 -1
  124. package/src/cli/controller/context/focus.ts +51 -0
  125. package/src/cli/controller/context/instruction-context.ts +114 -0
  126. package/src/cli/controller/context/known-paths.ts +76 -0
  127. package/src/cli/controller/context/query-planning.ts +110 -0
  128. package/src/cli/controller/context/rule-resolution.ts +532 -0
  129. package/src/cli/controller/context/source-materializer.ts +278 -0
  130. package/src/cli/controller/context/structural.ts +16 -0
  131. package/src/cli/controller/context/types.ts +286 -0
  132. package/src/cli/controller/context-pack.ts +898 -430
  133. package/src/cli/controller/launch-agents.ts +77 -2
  134. package/src/cli/controller/operational-plan.ts +2 -2
  135. package/src/cli/controller/work-mode.ts +6 -4
  136. package/src/cli/editing/edit-session.ts +60 -7
  137. package/src/cli/github/github.ts +133 -0
  138. package/src/cli/hook/prompt-guard-decision.ts +17 -18
  139. package/src/cli/hook/prompt-intents.ts +1 -1
  140. package/src/cli/installer/managed-entries.ts +15 -1
  141. package/src/cli/local-bridge/console-automations.ts +225 -67
  142. package/src/cli/local-bridge/console-view-models.ts +3 -35
  143. package/src/cli/local-bridge/facade-api.ts +2 -217
  144. package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
  145. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +153 -3
  146. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
  147. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +183 -3
  148. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +1 -1
  149. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +4 -3
  150. package/src/cli/local-bridge/frontend/src/lib/api.ts +18 -11
  151. package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
  152. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +1 -1
  153. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +4 -3
  154. package/src/cli/local-bridge/frontend/src/styles.css +27 -11
  155. package/src/cli/local-bridge/frontend/src/types.ts +8 -7
  156. package/src/cli/local-bridge/job-store.ts +1 -490
  157. package/src/cli/local-bridge/server.ts +29 -532
  158. package/src/cli/local-bridge/ui-dist/app.css +1 -1
  159. package/src/cli/local-bridge/ui-dist/app.js +5101 -4967
  160. package/src/cli/mcp/auth.ts +5 -5
  161. package/src/cli/mcp/instructions.ts +3 -2
  162. package/src/cli/mcp/legacy-tool-service.ts +0 -189
  163. package/src/cli/mcp/multi-repository.ts +16 -5
  164. package/src/cli/mcp/oauth.ts +175 -26
  165. package/src/cli/mcp/paths.ts +8 -2
  166. package/src/cli/mcp/repository-tools.ts +356 -101
  167. package/src/cli/mcp/server.ts +625 -54
  168. package/src/cli/mcp/tool-capability-cache.ts +1 -1
  169. package/src/cli/mcp/toolset-selection.ts +1 -1
  170. package/src/cli/mcp/toolset.ts +42 -5
  171. package/src/cli/mcp/transports/http.ts +125 -15
  172. package/src/cli/mcp/transports/session-registry.ts +67 -5
  173. package/src/cli/mcp/types.ts +3 -3
  174. package/src/cli/repositories/command-classifier.ts +209 -14
  175. package/src/cli/repositories/command-executor.ts +55 -521
  176. package/src/cli/repositories/command-process.ts +108 -0
  177. package/src/cli/repositories/command-scope.ts +99 -41
  178. package/src/cli/repositories/controller-home.ts +7 -8
  179. package/src/cli/repositories/git-command-executor.ts +2 -0
  180. package/src/cli/repositories/locks.ts +53 -16
  181. package/src/cli/repositories/repository-snapshot.ts +121 -0
  182. package/src/cli/repositories/safe-patch.ts +6 -4
  183. package/src/cli/repositories/selected-path-actions.ts +17 -9
  184. package/src/cli/repositories/structured-git.ts +110 -10
  185. package/src/cli/repository/inspector.ts +565 -62
  186. package/src/cli/repository/session-cache.ts +58 -17
  187. package/src/cli/v81-entry.ts +1 -4
  188. package/src/effects/fs-transaction.ts +85 -17
  189. package/src/runtime/context/codegraph-read-provider.ts +233 -2
  190. package/src/runtime/context/codegraph-sidecar.cjs +74 -40
  191. package/src/runtime/context/generic-lsp-provider.ts +355 -0
  192. package/src/runtime/context/lsp-client.ts +283 -0
  193. package/src/runtime/context/semantic-navigation.ts +275 -0
  194. package/src/runtime/context/swift-navigation.ts +565 -0
  195. package/src/runtime/context/typescript-navigation.ts +226 -0
  196. package/src/runtime/control-plane/dispatch-priority.ts +28 -0
  197. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +196 -2
  198. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
  199. package/src/runtime/control-plane/execution/execution-identity.ts +65 -14
  200. package/src/runtime/control-plane/execution/session-store.ts +18 -0
  201. package/src/runtime/control-plane/execution/validation.ts +15 -2
  202. package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
  203. package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
  204. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
  205. package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
  206. package/src/runtime/control-plane/execution/work-task-receipt.ts +54 -11
  207. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +175 -8
  208. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -21
  209. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +87 -9
  210. package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
  211. package/src/runtime/control-plane/facade/controller-round-relay.ts +991 -0
  212. package/src/runtime/control-plane/facade/controller-session-store.ts +144 -14
  213. package/src/runtime/control-plane/facade/goal-workloop-access.ts +9 -2
  214. package/src/runtime/control-plane/facade/goal-workloop.ts +885 -105
  215. package/src/runtime/control-plane/facade/index.ts +1 -0
  216. package/src/runtime/control-plane/facade/plan-contract-store.ts +211 -26
  217. package/src/runtime/control-plane/facade/requirement-board.ts +24 -8
  218. package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
  219. package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
  220. package/src/runtime/control-plane/facade/types.ts +55 -11
  221. package/src/runtime/control-plane/facade/work-contract-store.ts +204 -73
  222. package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
  223. package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
  224. package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
  225. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
  226. package/src/runtime/control-plane/global-scheduler/maintenance.ts +145 -0
  227. package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
  228. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
  229. package/src/runtime/control-plane/global-scheduler/scheduler.ts +273 -542
  230. package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
  231. package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
  232. package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
  233. package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
  234. package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
  235. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
  236. package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
  237. package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
  238. package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
  239. package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
  240. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +50 -0
  241. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +642 -51
  242. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +40 -0
  243. package/src/runtime/control-plane/launcher/thin-launcher.ts +194 -10
  244. package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
  245. package/src/runtime/control-plane/persistence/requirement-store.ts +15 -11
  246. package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
  247. package/src/runtime/control-plane/release-retention.ts +62 -2
  248. package/src/runtime/control-plane/routing/route-policy.ts +7 -16
  249. package/src/runtime/control-plane/runtime-status-client.ts +0 -2
  250. package/src/runtime/diagnostics/mcp-timing.ts +19 -0
  251. package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
  252. package/src/runtime/diagnostics/performance.ts +24 -1
  253. package/src/runtime/evidence/event-ledger.ts +1 -1
  254. package/src/runtime/execution/jobs/store.ts +58 -4
  255. package/src/runtime/execution/jobs/types.ts +1 -1
  256. package/src/runtime/execution/managed-workspace.ts +203 -1
  257. package/src/runtime/execution/process-runtime/check-facade.ts +52 -14
  258. package/src/runtime/execution/process-runtime/check-result.ts +63 -2
  259. package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
  260. package/src/runtime/execution/process-runtime/command-facade.ts +346 -40
  261. package/src/runtime/execution/process-runtime/gc.ts +98 -12
  262. package/src/runtime/execution/process-runtime/lightweight-managed.ts +1184 -0
  263. package/src/runtime/execution/process-runtime/persisted-check.ts +57 -6
  264. package/src/runtime/execution/process-runtime/resource-claims.ts +97 -8
  265. package/src/runtime/execution/process-runtime/runtime.ts +59 -4
  266. package/src/runtime/execution/process-runtime/store.ts +7 -0
  267. package/src/runtime/execution/process-runtime/types.ts +2 -0
  268. package/src/runtime/execution/thin-harness/async-process.ts +12 -2
  269. package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
  270. package/src/runtime/execution/workers/executor.ts +0 -48
  271. package/src/runtime/gateway/mcp/execution-tools.ts +1219 -126
  272. package/src/runtime/gateway/mcp/process-tools.ts +83 -37
  273. package/src/runtime/gateway/mcp/router.ts +185 -83
  274. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +546 -0
  275. package/src/runtime/gateway/mcp/runtime-tools.ts +2555 -1616
  276. package/src/runtime/model-clients/deepseek-adapter.ts +0 -32
  277. package/src/runtime/plugins/app-store-connect-adapter.ts +123 -19
  278. package/src/runtime/plugins/browser-adapter.ts +2925 -318
  279. package/src/runtime/plugins/browser-automation-service.ts +10 -0
  280. package/src/runtime/plugins/browser-handoff-host.ts +6 -31
  281. package/src/runtime/plugins/browser-handoff.ts +92 -5
  282. package/src/runtime/plugins/browser-macos-bridge.ts +586 -45
  283. package/src/runtime/plugins/browser-node-bridge.ts +6 -34
  284. package/src/runtime/plugins/browser-provider-registry.ts +109 -0
  285. package/src/runtime/plugins/browser-runtime-contract.ts +152 -0
  286. package/src/runtime/plugins/browser-runtime.ts +183 -0
  287. package/src/runtime/plugins/browser-session-authority.ts +332 -0
  288. package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
  289. package/src/runtime/plugins/desktop-operator-registration.ts +15 -12
  290. package/src/runtime/plugins/external-adapter.ts +324 -3
  291. package/src/runtime/plugins/external-registration.ts +84 -5
  292. package/src/runtime/plugins/external-unix-socket.ts +7 -1
  293. package/src/runtime/plugins/first-party-registry.ts +4 -2
  294. package/src/runtime/plugins/github-adapter.ts +125 -0
  295. package/src/runtime/plugins/gmail-adapter.ts +28 -2
  296. package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
  297. package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
  298. package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
  299. package/src/runtime/plugins/ios-adapter.ts +106 -16
  300. package/src/runtime/plugins/ios-agent-device.ts +234 -64
  301. package/src/runtime/plugins/ios-physical-device.ts +1143 -392
  302. package/src/runtime/plugins/lightweight-action.ts +153 -0
  303. package/src/runtime/plugins/local-system-adapter.ts +125 -8
  304. package/src/runtime/plugins/macos-capability-broker.ts +55 -9
  305. package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
  306. package/src/runtime/plugins/plugin-management-adapter.ts +181 -0
  307. package/src/runtime/plugins/resend-adapter.ts +1 -1
  308. package/src/runtime/plugins/store.ts +366 -24
  309. package/src/runtime/plugins/types.ts +39 -2
  310. package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
  311. package/src/runtime/projections/git-status-sampler.ts +16 -16
  312. package/src/runtime/projections/materialized-view.ts +28 -10
  313. package/src/runtime/recovery/actions.ts +0 -10
  314. package/src/runtime/recovery/classifier.ts +0 -9
  315. package/src/runtime/recovery/maintenance-executor.ts +415 -18
  316. package/src/runtime/recovery/probe.ts +0 -1
  317. package/src/runtime/recovery/types.ts +0 -1
  318. package/src/runtime/root/mcp-transport.ts +180 -10
  319. package/src/runtime/root/package-connector-service.ts +186 -8
  320. package/src/runtime/root/package-runtime-release.ts +143 -17
  321. package/src/runtime/root/package-runtime-service.ts +430 -22
  322. package/src/runtime/root/release-manifest.ts +7 -2
  323. package/src/runtime/root/release-materialize.ts +162 -19
  324. package/src/runtime/root/release-store.ts +48 -11
  325. package/src/runtime/root/runtime.ts +23 -5
  326. package/src/runtime/root/service.ts +100 -27
  327. package/src/runtime/root/types.ts +2 -0
  328. package/src/runtime/safe-tooling/index.ts +0 -1
  329. package/src/runtime/safe-tooling/ios-development.ts +321 -63
  330. package/src/runtime/safe-tooling/types.ts +0 -30
  331. package/src/runtime/shared/trusted-executable.ts +62 -0
  332. package/src/runtime/shared/trusted-node-executable.ts +48 -0
  333. package/src/runtime/standalone-recovery/core.ts +702 -94
  334. package/src/runtime/standalone-recovery/entry.ts +99 -23
  335. package/src/runtime/standalone-recovery/installer.ts +19 -3
  336. package/src/runtime/standalone-recovery/service-labels.ts +2 -0
  337. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
  338. package/src/runtime/workflow/schedules/browser-probe.ts +258 -0
  339. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +40 -0
  340. package/src/runtime/workflow/schedules/engine.ts +509 -80
  341. package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
  342. package/src/runtime/workflow/schedules/settlement.ts +48 -4
  343. package/src/runtime/workflow/schedules/store.ts +131 -10
  344. package/src/runtime/workflow/schedules/types.ts +6 -3
  345. package/src/runtime/workflow/schedules/work-continuation.ts +120 -34
  346. package/src/testing/test-governance.ts +8 -40
  347. package/assets/reference-configs/heartbeat-triage.md +0 -57
  348. package/assets/templates/helpers/harness-trace-grade.sh +0 -150
  349. package/assets/templates/helpers/heartbeat-triage.sh +0 -361
  350. package/assets/templates/helpers/maintenance-triage.sh +0 -167
  351. package/bin/forge-desktop-helper.mjs +0 -204
  352. package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
  353. package/docs/architecture/current/architecture-invariants.md +0 -331
  354. package/docs/architecture/current/automation-and-schedule-engine.md +0 -453
  355. package/docs/architecture/current/codegraph-context-provider.md +0 -226
  356. package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
  357. package/docs/architecture/current/controller-repository-decoupling.md +0 -148
  358. package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -354
  359. package/docs/architecture/current/entity-model.md +0 -592
  360. package/docs/architecture/current/external-plugin-governance.md +0 -396
  361. package/docs/architecture/current/failure-recovery.md +0 -447
  362. package/docs/architecture/current/governance.md +0 -213
  363. package/docs/architecture/current/human-interaction-plane.md +0 -87
  364. package/docs/architecture/current/implementation-status.md +0 -128
  365. package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
  366. package/docs/architecture/current/legacy-governance.md +0 -58
  367. package/docs/architecture/current/local-workspace-target-grants.md +0 -70
  368. package/docs/architecture/current/migration-roadmap.md +0 -105
  369. package/docs/architecture/current/multi-repository-execution.md +0 -371
  370. package/docs/architecture/current/operations-runbook.md +0 -45
  371. package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
  372. package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
  373. package/docs/architecture/current/repository-access-modes.md +0 -102
  374. package/docs/architecture/current/route-policy.md +0 -15
  375. package/docs/architecture/current/route-session-concurrency.md +0 -85
  376. package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
  377. package/docs/architecture/current/runtime-directory-map.md +0 -49
  378. package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
  379. package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
  380. package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
  381. package/docs/architecture/current/system-overview.md +0 -144
  382. package/docs/architecture/current/target-requirements-traceability.md +0 -202
  383. package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
  384. package/docs/architecture/current/thin-harness-v1.md +0 -311
  385. package/docs/architecture/current/verification-and-release-gates.md +0 -391
  386. package/docs/forge-autonomous-goal-loop.md +0 -9
  387. package/docs/forge-provider-configuration.md +0 -7
  388. package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -83
  389. package/docs/operations/controller-desktop-plugin.md +0 -112
  390. package/docs/operations/gmail-assistant-routines.md +0 -186
  391. package/docs/operations/personal-assistant-operator-guide.md +0 -61
  392. package/docs/operations/provider-configuration.md +0 -31
  393. package/scripts/harness-trace-grade.sh +0 -150
  394. package/scripts/heartbeat-triage.sh +0 -361
  395. package/scripts/maintenance-triage.sh +0 -167
  396. package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
  397. package/src/cli/repositories/goal-registry.ts +0 -239
  398. package/src/runtime/assistant/action-proposals.ts +0 -279
  399. package/src/runtime/assistant/intent.ts +0 -395
  400. package/src/runtime/assistant/model-provider.ts +0 -460
  401. package/src/runtime/assistant/openapi.ts +0 -223
  402. package/src/runtime/assistant/policy.ts +0 -89
  403. package/src/runtime/assistant/readiness.ts +0 -258
  404. package/src/runtime/assistant/routine-runtime.ts +0 -477
  405. package/src/runtime/assistant/schedule-binding.ts +0 -171
  406. package/src/runtime/assistant/standing-grants.ts +0 -375
  407. package/src/runtime/assistant/store.ts +0 -243
  408. package/src/runtime/assistant/types.ts +0 -135
  409. package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
  410. package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
  411. package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
  412. package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
  413. package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
  414. package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
  415. package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
  416. package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
  417. package/src/runtime/control-plane/goal-loop/index.ts +0 -13
  418. package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
  419. package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
  420. package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
  421. package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
  422. package/src/runtime/control-plane/goal-loop/types.ts +0 -378
  423. package/src/runtime/control-plane/startup-recovery.ts +0 -198
  424. package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
  425. package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
  426. package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
  427. package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
  428. package/src/runtime/plugins/desktop-adapter.ts +0 -374
  429. package/src/runtime/safe-tooling/browser-safe.ts +0 -133
  430. package/src/runtime/workflow/findings/store.ts +0 -204
  431. package/src/runtime/workflow/findings/types.ts +0 -58
  432. package/src/runtime/workflow/portfolio/engine.ts +0 -20
  433. package/src/runtime/workflow/portfolio/store.ts +0 -185
  434. package/src/runtime/workflow/portfolio/types.ts +0 -29
@@ -1,311 +0,0 @@
1
- # Thin Harness V1
2
-
3
- > Status: **Runtime Authority (additive)**
4
- > Baseline revision: feature branch `grok/thin-harness-v1`
5
- > Review remediation: round-3 P0.1a/b — ephemeral lease, no write-time repo lock, ownership abort, expanded claim overlap
6
-
7
- ## Purpose
8
-
9
- Reduce fixed middleware latency for everyday repository operations without weakening safety boundaries.
10
-
11
- Core principle:
12
-
13
- ```text
14
- Default to direct Fast Path execution.
15
- Escalate to Durable Work only when recovery, background, isolation,
16
- concurrent writes, or high-risk control is required.
17
- Use durable Goal Workloop plus PlanContract/Work only when multiple independent, long-lived deliverables need resumable coordination.
18
- ```
19
-
20
- ## Current Implementation
21
-
22
- ### Components
23
-
24
- | Component | Path | Responsibility |
25
- | --- | --- | --- |
26
- | Execution Router | `src/runtime/execution/thin-harness/execution-router.ts` | Decide `fast` / `durable` / `reject` |
27
- | Latency Trace | `src/runtime/execution/thin-harness/latency-trace.ts` | Mutually exclusive Fast Path segments |
28
- | Async Process | `src/runtime/execution/thin-harness/async-process.ts` | Bounded async spawn + process-tree kill + AbortSignal |
29
- | Mutation Ownership | `src/runtime/execution/thin-harness/mutation-gate.ts` | Fast/Durable shared ownership via Execution Lease arbiter (`workspace:<checkoutId>`) |
30
- | Request Ledger | `src/runtime/execution/thin-harness/request-ledger.ts` | Atomic create-if-absent idempotency before mutation |
31
- | Fast Executor | `src/runtime/execution/thin-harness/fast-executor.ts` | Async Fast Path execution |
32
- | Fast Receipt | `src/runtime/execution/thin-harness/fast-receipt.ts` | Bounded receipt; failures do not mask mutation success |
33
- | Batch Executor | `src/runtime/execution/thin-harness/batch-executor.ts` | Typed multi-step batch (≤20); one parent receipt; whole-batch write ownership |
34
- | Lightweight Lanes | `src/runtime/execution/thin-harness/lightweight-lanes.ts` | Read lanes (strict readonly effects) + patch_proposal_validate |
35
- | MCP integration | `src/cli/mcp/repository-tools.ts` | Fast path for eligible `repository_command_execute`; optional batch/lanes tools |
36
- | Command executor | `src/cli/repositories/command-executor.ts` | `repositorySnapshotAsync`, bounded non-persistent readonly execution, AbortSignal, process-group kill on async path |
37
-
38
- ### Execution modes
39
-
40
- ```ts
41
- interface ExecutionDecision {
42
- mode: "fast" | "durable" | "reject";
43
- reasons: string[];
44
- risk: string;
45
- estimatedClass: "short" | "long" | "unknown";
46
- requiresIsolation: boolean;
47
- requiresRecovery: boolean;
48
- suggestedOperation?: string;
49
- }
50
- ```
51
-
52
- ### Deterministic task tiers
53
-
54
- The sole Route Policy exposes three task-shape tiers. These are routing labels over existing execution primitives, not separate engines:
55
-
56
- 1. **Direct** — `direct_edit` + `direct_control` + `fast`. Use for small, scope-clear, low-risk work. Readonly work creates no Work; small mutations may retain lightweight Work lineage without Issue, Plan, or isolated worktree by default.
57
- 2. **Bounded Work** — `bounded_work` + `goal_workloop` + `durable`. Use for one-owner work that needs investigation, recovery, isolation, protected-path handling, or broader bounded scope. It uses the existing WorkContract / `rh_work` lifecycle and does **not** require an Issue or Plan.
58
- 3. **Coordinated durable Work** — `bounded_work` + `goal_workloop` + `durable`. Use when multiple independent deliverables need resumable coordination; decompose them with PlanContract/Work instead of a separate project-level lifecycle.
59
-
60
- `quick_agent` and `issue_task` remain executor/delegation-oriented modes when an Agent is explicitly requested. Provider choice never promotes a small task into a heavier lifecycle by itself. An explicit approved Plan may bind dependent Work steps, but Plan is optional for ordinary Bounded Work.
61
-
62
- ### Fast Path eligibility (default)
63
-
64
- - repository file read (size-capped)
65
- - bounded search (async `rg` preferred; inspector fallback after yield)
66
- - Git status / bounded Git diff (async spawn)
67
- - small path-scoped patch (pre-apply path validation + rollback)
68
- - path-scoped stage / commit under Checkout Mutation Gate
69
- - allowlisted typed argv **readonly** commands
70
- - **strict** focused checks only (typed argv + explicit file/filter; bare `bun test` / `npm test` / `pytest` → durable)
71
- - continuous local edits on one checkout
72
-
73
- ### Repository-free Target execution
74
-
75
- An authorized `local_system` Target Grant is a first-class bounded workspace target and does **not** require Repository Registry enrollment. It uses the existing `controllerHome/system/local-system/targets.json` authority and carries a stable `workspaceId`, owner scope, access mode, canonical root, and identity fingerprint.
76
-
77
- - file reads/writes remain symlink-safe and root-bounded;
78
- - `execute_command` accepts typed argv only, reuses the repository command classifier/scope policy and bounded process runner, and caps execution at 30 seconds;
79
- - readonly Target commands create no WorkContract;
80
- - Target mutations create one lightweight `direct_control` WorkContract and terminalize it in the same request with a `local_effect` completion receipt;
81
- - physical Target mutations are serialized by canonical filesystem root through existing Controller global resource locks; different roots remain concurrent, and multi-target copy/move acquires roots in deterministic order to avoid deadlock;
82
- - lock identity is the canonical root, not `targetKey`, owner, or `workspaceId`, so two grants pointing at the same physical directory cannot bypass write serialization;
83
- - readonly Target file/command actions remain outside the mutation lock path;
84
- - remote/destructive commands are rejected on Target execution;
85
- - `workspace_write` commands are fail-closed unless they are replay-safe local validation or part of the narrow path-governed filesystem mutation allowlist; unknown/system side effects require Repository promotion;
86
- - Git mutations are rejected until the target is promoted to a registered Repository/Checkout, because Git refs and worktree ownership require repository-scoped fencing;
87
- - long-running, recoverable, release, multi-checkout, or cross-session cache-heavy workflows should promote the target to a registered Repository instead of extending Target execution into a second scheduler/work model.
88
-
89
- This preserves repository-free local operation without inventing a fake RepositoryRecord, WorkspaceJob, or parallel route policy.
90
-
91
- ### Check semantic single-flight and evidence reuse
92
-
93
- `run_check` distinguishes **consumer identity** from **physical execution identity**. `requestId`, Session, Work, EditSession, and checkout coordinates remain consumer/audit bindings; they no longer define whether the same Check must run twice.
94
-
95
- The authoritative semantic Check identity reuses the existing Controller Check cache vocabulary and binds:
96
-
97
- - repository content revision (including dirty/untracked workspace content, excluding harness runtime artifacts);
98
- - immutable Check definition digest (`command`, `cwd`, declared effects, configured timeout/source);
99
- - bounded requested timeout contract;
100
- - non-secret child execution environment/toolchain fingerprint;
101
- - an explicit Check execution identity schema version.
102
-
103
- Process Runtime keeps one repo-scoped semantic binding from that identity to the existing persisted Process record. A matching active execution is single-flighted across request/session consumers. A matching successful terminal Process may be reused as completed evidence; failed, timed-out, cancelled, missing-stale, or identity-mismatched Processes are never treated as successful cache hits.
104
-
105
- Terminal Process lease cleanup remains a single retryable phase on the Process record. A failed exact-set, scope, or fencing check leaves `leaseReleaseState=pending` and records one redacted structured `leaseReleaseFailure` (code, message, attempt time, and count). Startup recovery retries the same canonical cleanup owner; success clears the diagnostic and moves the existing phase to `released`. The diagnostic does not authorize release, weaken fencing, or create another recovery state machine.
106
-
107
- Cross-checkout/worktree reuse is deliberately narrower than same-checkout reuse. It is allowed only when the consumer checkout is clean, the Check declares bounded effects with no workspace writes/network/shared temp, and its toolchain is explicitly fingerprintable. Otherwise the identity is checkout-scoped and a different checkout must execute independently. Dirty workspaces therefore never borrow evidence from another checkout merely because their Git HEAD matches.
108
-
109
- Verification receipts preserve the physical `processId` and source checkout while rebinding Session/Work/EditSession/request fields to the current consumer only after recomputing and exactly matching the current semantic Check identity. This prevents the first caller's identity from being attributed to later consumers.
110
-
111
- Successful semantic Check Process evidence is retained beyond the ordinary age cutoff so completed reuse survives across sessions, but it remains subject to the existing per-repository terminal Process budget. This is an index over the existing Process/check evidence authority, **not** a second Check cache, scheduler, Job store, or execution engine.
112
-
113
- ### Must use Durable Path
114
-
115
- - background / cross-session recovery
116
- - unfocused or full test suites
117
- - timeouts above Fast Path cap (**15s**)
118
- - remote writes (`git push`, PR merge/delete, publish)
119
- - deploy / release / supervisor switch
120
- - destructive operations
121
- - worker isolation / worktree / durable retry
122
- - Agent Run
123
- - untrusted / unclassified / shell commands
124
- - device / browser long interaction sessions
125
- - human handoff flows
126
- - checkout mutation busy (durable writer or competing fast writer)
127
-
128
- ### Must reject (or strong confirmation path)
129
-
130
- - out-of-scope repository writes
131
- - secret reads
132
- - shell injection / policy bypass
133
- - implicit remote writes
134
- - unsupported system-level mutation
135
-
136
- ## What Fast Path does **not** create
137
-
138
- For short **typed-argv** readonly repository commands, the bounded direct reader additionally creates **no Process record, execution Lease, or Controller audit write**. It performs full repository identity/scope validation and before/after read-only Git observation, but never needs Runtime writer authority. Shell-form reads, mutating commands, and managed/long checks continue to use Process Runtime + Lease fencing.
139
-
140
- - ExecutionJob
141
- - Local Job
142
- - Scheduler record
143
- - Worker process
144
- - Issue Task
145
- - Project Board records
146
- - full projection rebuild per step
147
- - per-step Evidence files
148
-
149
- ## What Fast Path retains
150
-
151
- - repository binding + checkout identity
152
- - path validation + command policy
153
- - permission snapshot / authorization for mutating commands
154
- - typed argv, timeout, **AbortSignal** cancellation, output caps (streamed, not unbounded buffer), secret redaction
155
- - before/after Git snapshot for commands
156
- - **Checkout Mutation Gate** shared with durable write leases (plus controller lock for serialization)
157
- - one final Fast Receipt (`receiptMode: standalone`); batch/lanes use parent receipt only (`receiptMode: none` on children)
158
- - optional `requestId` + `inputHash` idempotent replay for mutations
159
-
160
- ## Async execution model (P0)
161
-
162
- ```text
163
- Gateway
164
- ↓
165
- Fast Router
166
- ↓
167
- async Fast Executor
168
- ↓
169
- bounded child process (process group) / yielded search
170
- ```
171
-
172
- - `repository_command_execute` Fast Path uses `executeRepositoryCommandAsync`.
173
- - Git status/diff/stage use `runBoundedGit` (async spawn).
174
- - Timeout/cancel: SIGTERM process group → grace → SIGKILL via `terminateProcessTree`.
175
- - stdout/stderr collectors cap while streaming.
176
-
177
- ## Process output confidentiality
178
-
179
- Process Runtime applies one shared bounded redaction policy before stdout/stderr
180
- is written to durable log files. The same policy is applied defensively to
181
- Process records, MCP responses, large `resultRef` payloads, searches, and error
182
- messages. Command descriptors are mode `0600` and are removed by the independent
183
- Runner immediately after parsing and child spawn.
184
-
185
- Terminal historical logs and result payloads are sanitized in place on bounded
186
- read/recovery/maintenance paths. Maintenance reports contain counts and entity
187
- ids only, never the removed contents. Redaction or artifact replacement is not
188
- credential revocation: when a real credential may have appeared in any output,
189
- the credential owner must rotate it at the provider and review downstream use.
190
-
191
- ## Checkout Mutation Ownership (round-3)
192
-
193
- Fast and Durable share the **same** Execution Lease arbiter:
194
-
195
- ```text
196
- resourceKey = workspace:<checkoutId>
197
- mode = write
198
- visibility = ephemeral (Fast) | durable (Jobs)
199
- ownerJobId = fast:<session>:<op>:<requestId> | JOB-<durable>
200
- fencingToken = per-resource monotonic counter (lease store)
201
- ```
202
-
203
- Lock model (critical):
204
-
205
- ```text
206
- repository controller lock → ONLY acquire / renew / release lease metadata
207
- mutation lease → covers the full real write lifecycle
208
- ```
209
-
210
- - Fast uses `visibility: ephemeral` — active lease set + fencing only; **no** Runtime Event, **no** Projection dirty, **no** Scheduler wake.
211
- - Durable path remains default (events + projection + wake).
212
- - `workspace:<checkoutId>` overlaps `path:` (same/unscoped checkout), `git-index:<checkoutId>`, `git-head:<checkoutId>`, and `git-ref*` claims.
213
- - Snapshot is taken **after** lease acquire (never before).
214
- - Heartbeat renew every TTL/3; renew failure aborts a dedicated ownership `AbortSignal` (combined with caller signal) and fails closed.
215
- - Write path does **not** hold repository controller lock during `runBody` (so renew cannot `LOCK_HELD`).
216
- - Batch passes real `externalGate` + `externalHelpers` (assert/renew/signal) into each step.
217
- - Request Ledger: O_EXCL begin, CAS complete (never throws over mutation success), stale `in_progress` → `unknown` (reconcile).
218
-
219
- ## Batch API (typed)
220
-
221
- ```ts
222
- interface RepositoryBatchRequest {
223
- repoId: string;
224
- checkoutId?: string;
225
- mode?: "auto" | "fast" | "durable";
226
- steps: RepositoryBatchStep[]; // max 20
227
- stopOnError?: boolean; // default true
228
- requestId?: string;
229
- signal?: AbortSignal;
230
- }
231
- ```
232
-
233
- Allowed step kinds:
234
-
235
- ```text
236
- read_file | search | git_status | git_diff | apply_patch
237
- run_short_command | run_focused_check | stage_paths | commit_paths
238
- ```
239
-
240
- Rules:
241
-
242
- - one repository binding and one pre-execution route decision for the whole batch
243
- - never silently upgrade mid-batch; durable steps fail closed before any step runs
244
- - one primary Fast Receipt for the batch (no per-step receipts)
245
- - write batches: single mutation gate for all mutating steps
246
- - commit-containing batches are marked `nonAtomic=true` (no pseudo-transaction rollback)
247
- - large payloads may use existing result references
248
-
249
- ## Lightweight Lanes
250
-
251
- ### Read-only Analysis Lane
252
-
253
- - max concurrency 4
254
- - shared checkout, no branch / worktree / Issue
255
- - parent receipt only; child lanes use `receiptMode: none`
256
- - real overlap via async primitives; `concurrent` flag reports start/finish overlap
257
- - fail-fast optional (default continue)
258
-
259
- ### Patch Proposal Validate (not Agent analysis)
260
-
261
- - validates caller-supplied proposals for path conflicts only
262
- - returns `proposalId`, `baseRevision`, digests, writePaths
263
- - never writes the main checkout
264
- - Integrator rechecks revision, conflicts, writePaths subset, digests before apply
265
-
266
- ## Durable coordination boundary
267
-
268
- - Fast Path never depends on a project-level orchestration lifecycle.
269
- - Independent deliverables use Goal Workloop plus PlanContract/Work only when durable coordination is needed.
270
- - ordinary Direct Edit must not auto-upgrade merely because parallel analysis is possible.
271
-
272
- ## Latency measurement
273
-
274
- Fast Path local segments (mutually exclusive; not full Gateway fiction):
275
-
276
- ```text
277
- routingMs policyMs snapshotMs executionMs receiptMs totalMs
278
- ```
279
-
280
- Compatibility aliases may map:
281
-
282
- ```text
283
- gatewayValidationMs ← routingMs
284
- authorizationMs ← policyMs
285
- repositorySnapshotMs ← snapshotMs
286
- operationExecutionMs ← executionMs
287
- evidencePersistenceMs ← receiptMs
288
- ```
289
-
290
- Unmeasured durable pipeline stages stay 0 (not claimed as measured zero cost).
291
-
292
- Defaults return only `totalMs`. Full breakdown under `includeLatencyBreakdown`.
293
-
294
- Benchmark entrypoint (library path; A/B via real Gateway still recommended before merge claims):
295
-
296
- ```bash
297
- bun scripts/benchmark-thin-harness.ts
298
- bun scripts/benchmark-thin-harness.ts --json
299
- ```
300
-
301
- ## Public surface note
302
-
303
- Thin Harness is primarily a **library execution path** used by eligible repository operations (for example short readonly `repository_command_execute`). Optional batch/lanes/receipt tools exist on the repository tool definition set for `full` toolset / programmatic use. They are intentionally **not** bulk-added to the 128-cap stable ChatGPT schema in this slice.
304
-
305
- ## Migration Rule
306
-
307
- 1. Prefer Fast Path for short local work.
308
- 2. Escalate explicitly — never silent mid-flight upgrades.
309
- 3. Keep Durable Work / Scheduler / Worker unchanged for long and high-risk work.
310
- 4. Do not trade safety for speed.
311
- 5. Receipt persistence failure never rewrites a successful mutation outcome.
@@ -1,391 +0,0 @@
1
- # Verification and Release Gates
2
-
3
- > Status: **Runtime Authority**
4
-
5
- ## 1. Objective
6
-
7
- Verification determines whether evidence satisfies a declared contract for an exact repository state. Release gating determines whether the repository is ready for an externally visible delivery action.
8
-
9
- The system distinguishes:
10
-
11
- ```text
12
- execution success
13
- integration success
14
- verification success
15
- Task acceptance
16
- Issue completion
17
- release readiness
18
- release execution
19
- ```
20
-
21
- No step implies the next without its required evidence.
22
-
23
- ## 2. Evidence Principles
24
-
25
- Evidence must be:
26
-
27
- - generated by the Controller or a trusted repository system;
28
- - bound to stable repository and checkout identity;
29
- - bound to an exact Revision or artifact hash;
30
- - addressable through a durable artifact reference;
31
- - bounded when returned to clients;
32
- - honest about failure, timeout, truncation, or missing data;
33
- - reusable only while its cache/precondition contract remains valid.
34
-
35
- Worker or Agent prose is supplementary evidence, not authoritative pass/fail proof.
36
-
37
- ## 3. Verification Record
38
-
39
- A Verification Record contains:
40
-
41
- ```text
42
- repoId
43
- checkoutId
44
- revision
45
- issueId / taskId
46
- runId / editSessionId / integrationId
47
- reviewedDiffHash
48
- checkResults
49
- commandEvidence
50
- acceptanceResults
51
- reviewer
52
- verifiedAt
53
- environmentFingerprint
54
- artifact references
55
- staleAt / staleReason when invalidated
56
- ```
57
-
58
- A caller cannot satisfy required named checks by reporting `ok: true`. The Controller executes the check or verifies a trusted external artifact.
59
-
60
- ## 4. Exact Revision
61
-
62
- Verification applies to one Revision definition, normally derived from:
63
-
64
- ```text
65
- HEAD
66
- tracked working-tree diff
67
- relevant untracked files
68
- check configuration
69
- environment fingerprint
70
- ```
71
-
72
- The Revision contract excludes known runtime-only evidence directories.
73
-
74
- If relevant files change after verification:
75
-
76
- - the previous record remains historical;
77
- - completion logic treats it as stale;
78
- - required verification runs again for the new Revision.
79
-
80
- ## 5. Verification Layers
81
-
82
- ### Layer 1 — Patch Integrity
83
-
84
- For Direct Edit or integration:
85
-
86
- - allowed paths respected;
87
- - before/after hashes recorded;
88
- - diff is available;
89
- - change budget respected;
90
- - no unsupported binary/rename behavior hidden;
91
- - user changes outside scope preserved.
92
-
93
- ### Layer 2 — Focused Checks
94
-
95
- Run the smallest deterministic checks that directly cover the change.
96
-
97
- Examples:
98
-
99
- - one test file;
100
- - one package type check;
101
- - one domain test suite;
102
- - one architecture or documentation gate.
103
-
104
- ### Layer 3 — Task Contract
105
-
106
- Evaluate all Task-declared checks and acceptance criteria.
107
-
108
- Acceptance criteria must be observable and must not merely repeat “implementation complete.”
109
-
110
- ### Layer 4 — Integration Verification
111
-
112
- After an isolated Run is integrated:
113
-
114
- - verify target Revision, not only Worktree Revision;
115
- - verify integration record and reviewed diff hash;
116
- - rerun affected checks when target state changed;
117
- - retain Worktree until durable integration outcome exists.
118
-
119
- ### Layer 5 — Issue or System Integration
120
-
121
- Run broader checks required by the Issue, architecture boundary, or affected runtime subsystem.
122
-
123
- ### Layer 6 — Release Gate
124
-
125
- Run release-specific checks against a frozen candidate Revision.
126
-
127
- ## 6. Risk-Adaptive Verification
128
-
129
- ### Read-only
130
-
131
- Requires evidence of the requested observation. No diff gate.
132
-
133
- ### Low-risk change
134
-
135
- Focused checks when declared; may auto-complete after successful applicable evidence.
136
-
137
- ### Medium-risk change
138
-
139
- Declared checks and acceptance evidence apply. Auto-completion is allowed only when policy says no human decision is required.
140
-
141
- ### High-risk change
142
-
143
- Requires:
144
-
145
- - reviewed diff or integrated Revision;
146
- - required verification evidence;
147
- - acceptance criteria results;
148
- - explicit human acceptance.
149
-
150
- ### Destructive change
151
-
152
- Requires all high-risk evidence plus explicit same-request destructive authorization and operation-specific safety/rollback plan.
153
-
154
- ## 7. Task Acceptance
155
-
156
- Task acceptance occurs after verification policy passes.
157
-
158
- Acceptance action records:
159
-
160
- ```text
161
- acceptedBy
162
- acceptedAt
163
- verificationId
164
- revision
165
- note
166
- ```
167
-
168
- Dependent Tasks unlock only from accepted terminal semantics, not from a successful Run alone.
169
-
170
- For eligible low/medium-risk work, Controller policy may auto-accept and records that automation explicitly.
171
-
172
- ## 8. Failed Verification
173
-
174
- A real failed check or acceptance criterion moves work to `changes_requested` or a similarly explicit corrective state.
175
-
176
- Failure handling:
177
-
178
- 1. preserve check output and artifact;
179
- 2. classify failure as introduced, pre-existing, environmental, flaky, stale, or contract-related;
180
- 3. avoid claiming unrelated pre-existing failure was caused or fixed;
181
- 4. create a focused correction or blocker;
182
- 5. rerun only the necessary evidence after the Revision changes.
183
-
184
- A flaky check requires explicit flake evidence and retry policy. Repeating until green without recording attempts is forbidden.
185
-
186
- ## 9. Shared Check Evidence
187
-
188
- Identical check requests may share one execution when these match:
189
-
190
- ```text
191
- repoId
192
- checkoutId
193
- checkId
194
- revision
195
- timeout contract
196
- environment fingerprint
197
- ```
198
-
199
- Every subscriber links to the same immutable evidence. One subscriber cancellation must not terminate execution required by others.
200
-
201
- ## 10. Release Readiness
202
-
203
- A repository is `release_ready` only when all required conditions are true for the candidate Revision.
204
-
205
- Baseline gate:
206
-
207
- ```text
208
- repository identity valid
209
- remote/GitHub mapping diagnosed
210
- candidate Revision fixed
211
- Workspace ownership known
212
- no active write Job
213
- no active Agent Run
214
- no pending integration
215
- no unresolved integration conflict
216
- no dirty Edit Session
217
- no orphan/unknown execution affecting candidate
218
- required Tasks accepted
219
- required checks pass for candidate Revision
220
- architecture/document gates pass
221
- package/public metadata valid
222
- release manifest generated
223
- rollback or recovery plan recorded when required
224
- human authorization boundary identified
225
- ```
226
-
227
- A project may add stricter repository-specific gates.
228
-
229
- ## 11. Release Freeze
230
-
231
- Before final release verification, the Repo Actor acquires an exclusive release Claim and enters Release Freeze.
232
-
233
- During freeze:
234
-
235
- - new mutation Jobs wait;
236
- - active writers finish or are explicitly resolved;
237
- - Integration Queue drains;
238
- - read-only inspection continues;
239
- - release checks run against the fixed candidate;
240
- - Schedule mutation work pauses;
241
- - any relevant file change invalidates the candidate and requires a new gate.
242
-
243
- Release Freeze is released after:
244
-
245
- - release execution completes;
246
- - release is cancelled;
247
- - verification fails and the candidate returns to development;
248
- - Lease expires and recovery reconciles state.
249
-
250
- ## 12. Release Manifest
251
-
252
- The release gate produces a durable manifest:
253
-
254
- ```text
255
- repoId
256
- checkoutId
257
- candidateRevision
258
- branch
259
- target version or release identifier
260
- included Issues and Tasks
261
- verification records
262
- check artifact hashes
263
- known warnings
264
- known non-blocking pre-existing failures
265
- remote target
266
- release actions requiring authorization
267
- rollback/recovery instructions
268
- createdAt
269
- approvedBy / approvedAt when applicable
270
- ```
271
-
272
- The manifest is an execution input and audit record. It does not execute release actions by itself.
273
-
274
- ## 13. External Actions
275
-
276
- The following remain explicit external boundaries:
277
-
278
- - commit when user policy requires review;
279
- - push;
280
- - create/update remote PR when not already authorized by the Task;
281
- - merge;
282
- - tag;
283
- - package publication;
284
- - production deployment;
285
- - remote Issue closure;
286
- - destructive migration or data mutation.
287
-
288
- The Controller may prepare exact commands and evidence. It may execute only with explicit authorization appropriate to the operation.
289
-
290
- ## 14. Release Job
291
-
292
- Release execution, when authorized, is a durable Job.
293
-
294
- It records:
295
-
296
- ```text
297
- releaseManifestId
298
- requestId
299
- remote target
300
- operation sequence
301
- current step
302
- external identifiers
303
- stdout/stderr/artifacts
304
- partial outcome
305
- compensation or resume instructions
306
- ```
307
-
308
- A disconnected client does not make external outcome unknown if provider or command evidence can prove it. Otherwise the Release Job becomes orphaned/unknown and requires reconciliation before retry.
309
-
310
- ## 15. Partial Release
311
-
312
- Multi-step or multi-repository release may end partially complete.
313
-
314
- Partial outcome records:
315
-
316
- - completed external actions;
317
- - failed or unstarted actions;
318
- - current deployed/published versions;
319
- - safe compensation options;
320
- - actions that require human decision.
321
-
322
- The system must not collapse partial release into success or rerun all actions blindly.
323
-
324
- ## 16. Rollback and Recovery
325
-
326
- Rollback is not assumed universally safe.
327
-
328
- A release plan declares one of:
329
-
330
- ```text
331
- reversible with deterministic rollback
332
- forward-fix preferred
333
- feature-flag disable
334
- provider-native rollback
335
- manual recovery only
336
- ```
337
-
338
- Rollback itself is externally visible/destructive work and requires appropriate authorization and evidence.
339
-
340
- ## 17. Architecture Gate
341
-
342
- Architecture-sensitive releases must pass:
343
-
344
- - current architecture document presence;
345
- - Runtime Authority marker;
346
- - historical document marker policy;
347
- - architecture drift check;
348
- - relevant ADR linkage;
349
- - migration roadmap update when target gaps change.
350
-
351
- Architecture documentation is part of the release contract, not an optional afterthought.
352
-
353
- ## 18. Verification Performance
354
-
355
- Verification must remain proportional:
356
-
357
- - focused checks during iteration;
358
- - Task checks before acceptance;
359
- - broader Issue/system checks at integration boundaries;
360
- - full release gate once the candidate is frozen.
361
-
362
- Running the full release suite after every small patch wastes resources and increases queue contention. Running only focused checks before release is insufficient.
363
-
364
- Check results and revision-aware caches prevent unnecessary duplication without hiding stale evidence.
365
-
366
- ## 19. Current Implementation
367
-
368
- Verification evidence is bound to Job, repository and exact Git revision with an environment fingerprint. Revision changes invalidate reusable evidence. Oversized result bodies are stored as Artifacts and only bounded previews are returned through Job status.
369
-
370
- Release readiness is implemented as a durable `release-gate` Job holding an exclusive `release:<repoId>` Lease. The Gate checks Workspace cleanliness, active Execution Jobs, Agent Runs, Local compatibility Jobs, pending Worktree integration, unfinished Edit Sessions, other Leases, active-Issue Tasks, exact-revision verification, repository remote identity, GitHub mapping, Canonical Forge Runtime readiness and package metadata.
371
-
372
- A successful Gate returns a release manifest for the exact current revision. Push, merge, publish, deploy and destructive external operations still require a separate explicit user authorization.
373
-
374
- ## 20. Required Release Tests
375
-
376
- Runtime and release checks cover:
377
-
378
- - candidate revision changes invalidate evidence;
379
- - active writers block release;
380
- - pending Worktree integration blocks release;
381
- - dirty Edit Sessions block release;
382
- - remote and GitHub mapping drift block release;
383
- - release Lease blocks new writes;
384
- - a successful Gate does not execute an external side effect;
385
- - partial external outcomes never become global success.
386
-
387
- ## 21. Immutable Check Definition Snapshot
388
-
389
- A scheduled check stores the normalized command, cwd, timeout, source, registry revision, and definition digest at admission time. Execution validates the digest and repository-relative cwd, then uses that snapshot even if another checkout or a later commit changes the check registry.
390
-
391
- The snapshot stabilizes check identity; the produced evidence is still bound to the revision observed when execution starts and becomes stale if repository content changes while the command runs. This prevents both `check not found` after checkout switching and accidental reuse of evidence from a different repository revision.