@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,447 +0,0 @@
1
- # Failure Recovery
2
-
3
- > Status: **Runtime Authority**
4
-
5
- ## 1. Objective
6
-
7
- Failure recovery preserves durable truth when client connections, Gateway sessions, Controller processes, Workers, Agents, external providers, repositories, or indexes fail independently.
8
-
9
- The recovery objective is not to turn every uncertain state into success. It is to determine what can be proven, preserve evidence, prevent duplicate unsafe execution, and expose an explicit next action.
10
-
11
- ## 2. Failure Domains
12
-
13
- The target runtime has distinct failure domains:
14
-
15
- ```text
16
- Client / MCP session
17
- Gateway
18
- Canonical Forge Runtime
19
- Repo Actor
20
- Worker
21
- Agent or command process tree
22
- External provider
23
- Repository checkout
24
- Controller Home storage
25
- Projection / index
26
- Network tunnel or reverse proxy
27
- ```
28
-
29
- A failure in one domain must not automatically terminate or corrupt another domain.
30
-
31
- ## 3. Client and Transport Failure
32
-
33
- An installed Controller Home has one Canonical Runtime Root as the core lifecycle owner. Accepted repository work is persisted before execution and is independent of the MCP request lifetime. Runtime status is a read-only owner-bound projection, while standalone Recovery reads that projection and the atomic whole-release authority; there is no Supervisor socket or component operation queue.
34
-
35
- Examples:
36
-
37
- - MCP client disconnects;
38
- - reverse proxy returns 502;
39
- - tunnel changes endpoint;
40
- - Streamable HTTP session is lost;
41
- - request exceeds proxy timeout;
42
- - response body is truncated.
43
-
44
- ### Target Behavior
45
-
46
- If a command was durably accepted before disconnection:
47
-
48
- - the Job continues according to its contract;
49
- - repeated request with the same idempotency key returns the existing Job;
50
- - the client can recover through `get_job`, `get_run`, or related detail tools;
51
- - the original connection is not execution ownership.
52
-
53
- If durable acceptance cannot be proven, the caller may retry using the same request ID.
54
-
55
- Transport sessions use one global registry across all HTTP MCP paths. A client SHOULD send DELETE when ending a session. The runtime MUST reclaim stream-only sessions through explicit prior-session replacement, bounded SSE lease, absolute lifetime, or oldest-safe capacity eviction. An active POST is protected from session-capacity eviction; an SSE GET by itself is not protected execution ownership.
56
-
57
- ### Health Requirement
58
-
59
- Gateway health endpoints and compact status queries must not wait for active long operations.
60
-
61
- `/health` proves liveness and reports actual global session counts. `/ready` additionally proves that a new initialize can be accepted safely. A full pool remains ready when it contains a safe eviction candidate; it becomes not-ready when every slot is protected by active POST work. A core failure makes whole-Runtime readiness false; any restart replaces the complete Runtime release rather than recovering an individual component.
62
-
63
- A 502 may describe Gateway or proxy availability. It must not be used as evidence that a Job failed or never started.
64
-
65
- ## 4. Gateway Failure
66
-
67
- The Gateway is stateless except for transport/session caches and bounded projections.
68
-
69
- After a whole-Runtime restart it must:
70
-
71
- 1. acquire the single Controller Home Runtime ownership claim;
72
- 2. validate the selected whole-release manifest and local schema compatibility;
73
- 3. initialize SQLite, Controller Services and repository identities;
74
- 4. recover scheduling, Leases, projections and bounded Worker ownership;
75
- 5. start the in-process Scheduler and MCP Transport;
76
- 6. reject stale MCP sessions cleanly;
77
- 7. avoid resubmitting accepted work without idempotency lookup;
78
- 8. publish `ready: true` only after the authenticated MCP end-to-end probe succeeds.
79
-
80
- A fatal MCP Transport, Controller Services, SQLite, or Scheduler failure makes the complete Runtime not ready and stops the one core process. No module restarts itself as an independently authoritative service.
81
-
82
- ## 5. Runtime core recovery
83
-
84
- The Runtime Root owns scheduling initialization, reconciliation, Schedule delivery, Lease management and core failure propagation.
85
-
86
- After restart it runs bounded recovery before publishing ready:
87
-
88
- ```text
89
- load enabled repository registry
90
- rebuild ExecutionJob active and requestId indexes from durable records
91
- reconcile running/active ExecutionJobs and dead workers
92
- reconcile Local Bridge compatibility Jobs
93
- remove or classify expired Leases
94
- rebuild every repository materialized projection from durable truth
95
- publish the one binary Runtime readiness result with structured diagnostic reason codes
96
- resume fair scheduling and normal asynchronous observation
97
- ```
98
-
99
- Projection rebuild is unconditional on daemon restart, so a stale persisted projection is repaired even when a dirty marker was lost. Recovery failures are isolated by repository and phase: one broken repository does not prevent healthy repositories from recovering, and a failure in one phase does not silently skip later Lease or projection repair. The Controller must not assume every persisted `running` entity is still running. It verifies Lease, heartbeat, process/provider state, and durable result evidence.
100
-
101
- ### Runtime source coherence and lifecycle handoff
102
-
103
- Runtime source coherence is part of the one binary readiness decision. A missing or stale startup Runtime source snapshot is a blocking condition, not a warning and not a metadata-maintenance candidate.
104
-
105
- The running Runtime never owns its own replacement. Recovery diagnostics may classify the condition and return a structured external lifecycle handoff, but they must not expose a Runtime/component restart action, detached restart coordinator, rollout slot, or autonomous source-repair fallback.
106
-
107
- The external lifecycle owner may replace only the existing single `forge-runtime` service. It must not start a second Runtime, create a component Runtime, mutate the source checkout as part of recovery, or introduce a rollout path. Readiness becomes true again only after the replacement Runtime has published a startup source snapshot and source-coherence evaluation proves that the configured Runtime source and active Runtime source agree.
108
-
109
- Local runtime maintenance remains limited to bounded Controller Home / repository runtime metadata repair. When that executor has no safe candidate, its continuation is an explicit handoff; it does not escalate to an invented lifecycle or source-repair action.
110
-
111
- ## 6. Repo Actor Recovery
112
-
113
- A Repo Actor is a logical single owner. Its mailbox and sequence position must be recoverable.
114
-
115
- Actor recovery reads:
116
-
117
- - repository enabled state;
118
- - active Jobs and Claims;
119
- - Leases and fencing tokens;
120
- - Task effective states;
121
- - Workspace and Worktree ownership;
122
- - Integration Queue;
123
- - release freeze;
124
- - pending Schedule Occurrences.
125
-
126
- Commands are applied idempotently by command ID or request ID. Replaying an already-applied command returns the recorded result.
127
-
128
- ## 7. Worker Failure
129
-
130
- A Worker may exit because of:
131
-
132
- - process crash;
133
- - host restart;
134
- - timeout termination;
135
- - explicit cancellation;
136
- - resource exhaustion;
137
- - launch error;
138
- - lost Controller connection.
139
-
140
- Worker liveness is not inferred only from a parent PID. Recovery considers:
141
-
142
- ```text
143
- Lease validity
144
- fencing token
145
- worker PID
146
- child and process-group state
147
- heartbeat
148
- result artifact
149
- stdout/stderr/event completion
150
- external provider state
151
- ```
152
-
153
- A dead Worker with a complete valid result may be reconciled to terminal success. A live descendant without a valid Lease must not retain state-write authority.
154
-
155
- ## 8. Process Tree Ownership
156
-
157
- Local execution must record enough data to identify the complete process tree or process group.
158
-
159
- Timeout or cancellation procedure:
160
-
161
- ```text
162
- record termination intent
163
- signal process group gracefully
164
- wait bounded grace period
165
- signal remaining group forcefully when allowed
166
- record observed exit state
167
- persist unresolved descendants if any
168
- release Lease only after ownership transition is durable
169
- ```
170
-
171
- A parent process exit is not sufficient evidence that compilers, tests, or Agent descendants have exited.
172
-
173
- ## 9. External Provider Failure
174
-
175
- For GitHub or another provider:
176
-
177
- - local Run stores provider session identity and links;
178
- - provider status is refreshed independently from MCP connection;
179
- - unavailable provider state yields a retriable external blocker or `unknown`, not fabricated success;
180
- - duplicate provider sessions are prevented by request identity;
181
- - external branch/PR existence is evidence, not automatic acceptance.
182
-
183
- ## 10. Storage Failure
184
-
185
- Controller Home and repository runtime bindings are durable state dependencies.
186
-
187
- On write failure:
188
-
189
- - do not start a new Worker;
190
- - do not advance lifecycle in memory only;
191
- - return a storage-blocked result;
192
- - preserve temporary files for diagnostics where safe;
193
- - avoid deleting the prior valid snapshot.
194
-
195
- Atomic-write protocol:
196
-
197
- ```text
198
- write temporary file
199
- flush when required by risk class
200
- rename atomically
201
- update index after entity snapshot
202
- append audit event or record repair anomaly
203
- ```
204
-
205
- If entity write succeeds and index update fails, reconciliation rebuilds the index from bounded durable entities.
206
-
207
- ## 11. Projection and Index Recovery
208
-
209
- Indexes are rebuildable projections.
210
-
211
- Target indexes include:
212
-
213
- ```text
214
- active Jobs
215
- requestId -> entity
216
- Task -> Run IDs
217
- active Claims and Leases
218
- pending Integration Queue
219
- active Schedule Occurrences
220
- Candidate Finding semantic keys
221
- recent attention items
222
- ```
223
-
224
- Rules:
225
-
226
- - hot reads use indexes;
227
- - index owner/version is persisted;
228
- - process restart may validate or rebuild active indexes;
229
- - a missing terminal-history index does not require scanning history on every request;
230
- - rebuild runs as a bounded reconciliation Job when history is large;
231
- - malformed entities are isolated and reported rather than silently discarded.
232
-
233
- ## 12. Lease Recovery and Fencing
234
-
235
- A Lease may be:
236
-
237
- ```text
238
- active
239
- expired
240
- released
241
- revoked
242
- orphaned
243
- ```
244
-
245
- Recovery procedure:
246
-
247
- 1. read persisted Lease and resource fencing counter;
248
- 2. determine whether current owner Job is non-terminal;
249
- 3. inspect heartbeat and execution evidence;
250
- 4. if ownership is uncertain, prevent new writes until expiry or explicit revocation;
251
- 5. grant new ownership with a higher fencing token;
252
- 6. reject late writes carrying the older token.
253
-
254
- Process PID reuse must not grant ownership. The Lease ID and fencing token are authoritative.
255
-
256
- ## 13. Orphan Classification
257
-
258
- Use `orphaned` when:
259
-
260
- - an active owner disappeared;
261
- - no valid terminal result proves success or failure;
262
- - repeating the operation may have side effects;
263
- - manual or policy-guided reconciliation is required.
264
-
265
- Orphan metadata includes:
266
-
267
- ```text
268
- lastHeartbeatAt
269
- leaseExpiredAt
270
- lastKnownPid/provider state
271
- lastEvent
272
- artifact completeness
273
- safeToRetry
274
- reconciliationReason
275
- ```
276
-
277
- ## 14. Unknown Run Classification
278
-
279
- A Run uses `unknown` when execution outcome cannot be proven, including startup ambiguity or provider uncertainty.
280
-
281
- Unknown does not mean failed, succeeded, or safe to retry. Task readiness must require explicit retry authorization after the Controller evaluates duplicate-execution risk.
282
-
283
- ## 15. Stale Classification
284
-
285
- Use `stale` when the operation may have executed correctly but cannot satisfy the original contract because a required precondition changed.
286
-
287
- Examples:
288
-
289
- - repository Revision changed;
290
- - Edit Session advanced to another Revision;
291
- - approval token snapshot changed;
292
- - integration target moved;
293
- - Schedule window was superseded;
294
- - repository identity or provider mapping changed.
295
-
296
- Stale evidence remains historical but cannot complete the current Task.
297
-
298
- ## 16. Timed-Out Classification
299
-
300
- A timeout requires:
301
-
302
- - a persisted deadline;
303
- - observed deadline expiry;
304
- - termination or provider cancellation attempt;
305
- - durable timeout event;
306
- - resource-release/reconciliation outcome.
307
-
308
- An in-memory timer firing without durable deadline identity is insufficient recovery evidence.
309
-
310
- ## 17. Retry Safety
311
-
312
- Before retry, determine operation class:
313
-
314
- ### Naturally idempotent
315
-
316
- Examples: bounded read, exact-revision check with cache key.
317
-
318
- May retry automatically within budget.
319
-
320
- ### Idempotent through request identity
321
-
322
- Examples: Job admission, Run creation, Schedule Occurrence creation.
323
-
324
- Retry returns the original entity.
325
-
326
- ### Requires reconciliation
327
-
328
- Examples: command may have modified files, Agent may still be alive, external provider session may exist.
329
-
330
- Do not retry until current outcome and resource ownership are reconciled.
331
-
332
- ### Explicitly non-repeatable
333
-
334
- Examples: publication, deployment, destructive mutation.
335
-
336
- Require human decision and operation-specific compensation or resume protocol.
337
-
338
- ## 18. Reconciliation Jobs
339
-
340
- Reconciliation is itself durable and bounded.
341
-
342
- Types include:
343
-
344
- - active Job reconciliation;
345
- - active Run reconciliation;
346
- - Lease reconciliation;
347
- - Worktree inventory reconciliation;
348
- - Integration Queue reconciliation;
349
- - repository registry identity reconciliation;
350
- - Schedule Occurrence reconciliation;
351
- - projection rebuild.
352
-
353
- Reconciliation Jobs must be idempotent and normally read-only except for lifecycle repair and index updates.
354
-
355
- ## 19. Startup Sequence
356
-
357
- Controller startup order:
358
-
359
- ```text
360
- 1. validate Controller Home
361
- 2. load repository registry
362
- 3. validate runtime storage bindings
363
- 4. load/rebuild global active indexes
364
- 5. instantiate Repo Actors
365
- 6. reconcile Claims and Leases
366
- 7. reconcile active Jobs/Runs/Occurrences
367
- 8. start Worker dispatch
368
- 9. deliver due Schedules
369
- 10. report readiness
370
- ```
371
-
372
- Gateway may report liveness before Controller readiness, but execution admission must wait for durable state readiness.
373
-
374
- ## 20. Health Model
375
-
376
- ### Liveness
377
-
378
- The process event loop responds.
379
-
380
- ### Readiness
381
-
382
- The component can safely perform its role.
383
-
384
- Suggested health surfaces:
385
-
386
- ```text
387
- Gateway /health
388
- Gateway /ready
389
- Controller status
390
- Worker pool status
391
- Repository-specific health
392
- ```
393
-
394
- Repository-specific degradation does not make Gateway liveness fail.
395
-
396
- ## 21. Recovery Notifications
397
-
398
- Notify only on material state change:
399
-
400
- - Job recovered to terminal outcome;
401
- - Job became orphaned/unknown;
402
- - retry is unsafe without user decision;
403
- - repository storage is blocked;
404
- - integration conflict requires action;
405
- - repeated Controller/Gateway instability crosses policy threshold.
406
-
407
- Do not repeatedly notify for an unchanged orphan or external blocker.
408
-
409
- ## 22. Recovery Testing
410
-
411
- Required test scenarios include:
412
-
413
- - client disconnect after Job acceptance;
414
- - Gateway restart during Worker execution;
415
- - Controller restart with running Jobs;
416
- - Worker crash before and after result persistence;
417
- - process descendants surviving parent exit;
418
- - expired Lease and late stale Worker write;
419
- - corrupt/missing active index rebuild;
420
- - repeated request ID after timeout;
421
- - external provider temporarily unavailable;
422
- - repository A recovery while repository B continues.
423
-
424
- ## 23. Current Implementation
425
-
426
- MCP Transport, Gateway Adapter, Controller Services, Scheduler and SQLite run in one Canonical Runtime process. Workers remain bounded child process roles. Accepted Jobs are persisted before Worker spawn. Job heartbeat, deadline, attempt, PID, Lease and fencing state are durable, and active/request indexes reconstruct scheduling after a whole-Runtime restart.
427
-
428
- Before an operation runs, the Worker writes an Operation Receipt. A completed receipt lets Reconciliation close a Job after a crash between side-effect completion and terminal-state persistence. A started-but-incomplete mutating receipt is treated as an uncertain side effect and becomes `human_attention_required`; it is not replayed. Safe read-only work may be requeued within attempt budget.
429
-
430
- Worker ownership is the tuple of Job ID, attempt, Worker PID and original Lease/fencing set. A stale Worker cannot heartbeat, renew or release replacement Leases, or publish a terminal result for a newer attempt.
431
-
432
- The Gateway does not infer execution failure from a disconnected request. Callers recover with the request ID or Job ID. Cancellation terminates the owned Worker, records a terminal state and releases only that attempt's Claims.
433
-
434
- ## 24. Recovery Invariants
435
-
436
- - MCP transport sessions never own Worker lifetime;
437
- - the restarted Canonical Runtime schedules from durable active indexes;
438
- - a stale Worker cannot write through an expired or replaced fencing token;
439
- - external effects are reconciled rather than blindly retried;
440
- - repository A recovery does not require locking repository B;
441
- - bounded projections remain readable while Workers execute.
442
-
443
- ## 26. Runtime Storage Recovery
444
-
445
- Every Controller Home runtime directory carries a repository/binding owner marker. Empty or terminal legacy storage is migrated and replaced with a repository-local link. Non-conflicting entries are merged. Name collisions are moved to a repository-scoped quarantine with a diagnostic path rather than overwritten or deleted.
446
-
447
- Active or unreadable Run and Local Job directories remain fail-closed. Worktree storage is recoverable because stale and partial entries can be preserved or quarantined without claiming execution readiness based on deletion.
@@ -1,213 +0,0 @@
1
- # Architecture Governance Contract
2
-
3
- > Status: **Runtime Authority**
4
-
5
- ## 1. Objective
6
-
7
- Architecture governance keeps implementation, execution policy, durable schemas, and documentation from evolving as independent stories.
8
-
9
- The goal is not to maximize documentation. The goal is to maintain one reviewable answer to each of these questions:
10
-
11
- - What owns a decision?
12
- - What owns the durable state?
13
- - What may run concurrently?
14
- - What must be serialized?
15
- - What can recover after disconnection or restart?
16
- - What evidence is required before completion?
17
- - Which statements describe current code and which describe the approved target?
18
-
19
- ## 2. Authority Hierarchy
20
-
21
- Architecture sources are ordered as follows:
22
-
23
- 1. `docs/architecture/current/` — approved Runtime Authority.
24
- 2. Accepted ADRs — temporary binding amendments until merged into the current set.
25
- 3. Executable code, schemas, and tests — evidence of Current Implementation.
26
- 4. Issues, plans, and architecture requests — proposed or in-progress change.
27
- 5. Historical version documents and snapshots — migration evidence.
28
- 6. Research reports — hypotheses and supporting evidence.
29
- 7. Diagrams and UI projections — explanatory views only.
30
-
31
- Code cannot silently redefine the Target Architecture. A code/document mismatch must be recorded as one of:
32
-
33
- - implementation defect;
34
- - intentional migration gap;
35
- - architecture change awaiting ADR;
36
- - obsolete target rule requiring explicit supersession.
37
-
38
- ## 3. Normative Language
39
-
40
- The current set uses these keywords:
41
-
42
- - **MUST / MUST NOT** — architecture invariant or safety boundary.
43
- - **SHOULD / SHOULD NOT** — default policy; deviations require recorded rationale.
44
- - **MAY** — supported option without default authority.
45
-
46
- Normative rules must identify their state:
47
-
48
- - **Current Implementation**
49
- - **Target Architecture**
50
- - **Migration Rule**
51
-
52
- A paragraph may include more than one state only when the gap is explicit.
53
-
54
- ## 4. Document Ownership
55
-
56
- | Document | Owns |
57
- | --- | --- |
58
- | `system-overview.md` | System boundary, layer responsibilities, process topology |
59
- | `architecture-invariants.md` | Non-negotiable cross-cutting rules |
60
- | `entity-model.md` | Entity meanings, identity, ownership, durable relationships |
61
- | `job-and-run-lifecycle.md` | Execution state machines and terminal semantics |
62
- | `dispatch-and-agent-strategy.md` | Work-mode and Agent-role selection |
63
- | `scheduler-and-resource-claims.md` | Claims, leases, conflicts, queues, workspace/worktree rules |
64
- | `multi-repository-execution.md` | Global quotas, fairness, portfolio workflows, repository isolation |
65
- | `automation-and-schedule-engine.md` | Schedule, occurrence, deduplication, budget and stop conditions |
66
- | `failure-recovery.md` | Process failure, orphan, stale, timeout, reconciliation and fencing |
67
- | `verification-and-release-gates.md` | Verification, acceptance, release freeze and human authorization |
68
- | `migration-roadmap.md` | Ordered convergence plan and evidence gates |
69
- | `governance.md` | Authority, terminology, change process and drift management |
70
-
71
- A rule must live in its owning document. Other documents should link to it instead of copying a second normative version.
72
-
73
- ## 5. Architecture Decision Records
74
-
75
- An ADR is required before intentionally changing:
76
-
77
- - the Thin Gateway / Controller / Worker boundary;
78
- - the single-owner semantics of a Per-Repository Actor;
79
- - Job, Run, Task, Edit Session, Verification, Schedule, Occurrence, Claim, or Lease identity;
80
- - request idempotency or retry behavior;
81
- - workspace or worktree conflict rules;
82
- - cross-repository ordering or failure isolation;
83
- - release and destructive-operation authority;
84
- - compatibility behavior of persisted runtime state.
85
-
86
- ADRs should be stored under `docs/architecture/decisions/` and contain:
87
-
88
- ```text
89
- Status
90
- Context
91
- Decision
92
- Alternatives
93
- Consequences
94
- Migration
95
- Verification
96
- Supersedes / Superseded by
97
- ```
98
-
99
- An accepted ADR must name the current documents it amends. The amended rules must be merged into the current set before the ADR is considered fully incorporated.
100
-
101
- ## 6. Architecture Drift
102
-
103
- Architecture drift exists when executable behavior and a current normative rule differ.
104
-
105
- Every drift item must record:
106
-
107
- ```text
108
- rule
109
- observed implementation
110
- risk
111
- temporary behavior
112
- owner Requirement/Work item or ADR
113
- target closure condition
114
- verification
115
- ```
116
-
117
- Drift is acceptable only when it is:
118
-
119
- - explicit;
120
- - bounded;
121
- - owned;
122
- - observable;
123
- - scheduled for closure or deliberate architecture revision.
124
-
125
- An unlabeled mismatch is a defect, not a migration strategy.
126
-
127
- ## 7. Historical Document Policy
128
-
129
- Versioned V5–V8 documents, old controller guides, migration snapshots, and retired workflow designs must remain available for audit, but they must begin with a visible notice:
130
-
131
- ```text
132
- Historical Design
133
- Not Runtime Authority
134
- Current architecture: docs/architecture/current/README.md
135
- ```
136
-
137
- Historical documents must not be incrementally edited to carry new target rules. New target rules belong in `current/`; historical documents may receive only:
138
-
139
- - the historical notice;
140
- - corrected links;
141
- - factual errata that do not make them appear current.
142
-
143
- ## 8. Diagram Policy
144
-
145
- The semantic Markdown text is authoritative. Mermaid or HTML diagrams are projections.
146
-
147
- A diagram:
148
-
149
- - MUST link to its semantic source;
150
- - MUST NOT introduce an entity, state, dependency, or boundary absent from the source;
151
- - SHOULD be regenerated when the source topology changes;
152
- - MAY omit detail for readability if the omission is explicit.
153
-
154
- ## 9. Change Procedure
155
-
156
- For an architecture-sensitive change:
157
-
158
- 1. Classify the change and locate the owning current document.
159
- 2. Create an Issue, architecture request, or ADR with scope and acceptance evidence.
160
- 3. Update the current architecture before or with implementation.
161
- 4. Define Migration Rules where implementation cannot move atomically.
162
- 5. Implement in bounded Tasks.
163
- 6. Run focused checks and architecture consistency checks.
164
- 7. Verify exact links between the implementation Task, ADR/request, current document, and evidence.
165
- 8. Archive or supersede historical guidance that would otherwise conflict.
166
-
167
- For an urgent incident fix:
168
-
169
- 1. Restore safety or availability with the smallest reversible change.
170
- 2. Record the behavior as temporary drift.
171
- 3. Create the architecture follow-up before declaring the incident fully closed.
172
-
173
- ## 10. Review Checklist
174
-
175
- An architecture review must verify:
176
-
177
- - one component owns each mutable decision;
178
- - durable truth is not held only in memory or chat;
179
- - long operations are not bound to request lifetime;
180
- - concurrency rules identify explicit resources;
181
- - unknown write scope is treated conservatively;
182
- - retries preserve history and do not mutate prior attempts;
183
- - evidence binds to the exact repository revision;
184
- - multi-repository behavior has failure isolation and fair resource limits;
185
- - scheduled work has bounded occurrences and stop conditions;
186
- - destructive and externally visible actions remain explicitly authorized;
187
- - the target does not claim to be already implemented without evidence.
188
-
189
- ## 11. Automated Governance Gate
190
-
191
- The architecture check must eventually enforce at least:
192
-
193
- - presence of the required current document set;
194
- - the Runtime Authority declaration in this directory and the architecture index;
195
- - required Historical Design notices on versioned documents;
196
- - valid internal links;
197
- - stable terminology for core entities;
198
- - presence of key invariants such as durable-job execution and exact-revision verification.
199
-
200
- The automated gate protects structure and explicit contracts. It does not replace human review of architecture quality.
201
-
202
- ## 12. Baseline Freeze
203
-
204
- A current architecture baseline may be declared frozen when:
205
-
206
- - all required documents exist;
207
- - the architecture consistency gate passes;
208
- - known implementation gaps are listed in `migration-roadmap.md`;
209
- - every P0 gap has an owner;
210
- - versioned documents are marked historical;
211
- - the baseline has been reviewed against current source and persisted schemas.
212
-
213
- After baseline freeze, new architecture-sensitive implementation Tasks must cite the affected current document or an accepted ADR.