@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
@@ -348,7 +348,7 @@ Complete this inventory before implementation. If any line is unknown, keep the
348
348
 
349
349
  - **State/progress path**:
350
350
  - **Verification evidence**:
351
- - **Evaluator rubric**:
351
+ - **Impact review**:
352
352
  - **Stop condition**:
353
353
  - **Rollback surface**:
354
354
 
@@ -391,7 +391,7 @@ Describe the exact outcome this task must deliver.
391
391
  - Checks file: `.ai/harness/checks/latest.json`
392
392
  - Run snapshots: `.ai/harness/runs/`
393
393
  - Scope gate: edit only paths listed under `allowed_paths`; update this contract before widening scope.
394
- - Completion gate: `scripts/verify-sprint.sh` must see this contract pass, the review recommend pass, and `## External Acceptance Advice` pass or record a manual override.
394
+ - Completion evidence: `scripts/verify-sprint.sh` reports this contract's direct checks and declared scope. Then perform a fresh semantic impact review.
395
395
 
396
396
  ## Allowed Paths
397
397
 
@@ -473,48 +473,23 @@ CONTRACT_TEMPLATE_EOF
473
473
  > **Notes File**: {{NOTES_FILE}}
474
474
  > **Checks File**: {{CHECKS_FILE}}
475
475
  > **Last Updated**: {{TIMESTAMP}}
476
- > **Recommendation**: fail
476
+ > **Summary**:
477
477
 
478
- ## Human Review Card
478
+ ## Semantic Impact Review
479
479
 
480
- - Verdict: pending
481
- - Change type: code-change | docs-only | ledger-closeout | migration | eval-only | delegated-run
482
- - Intended files changed:
483
- - Actual files changed:
484
- - Commands passed:
485
- - External acceptance: unavailable
486
- - Residual risks:
487
- - Reviewer action required: inspect diff and card
488
- - Rollback:
480
+ - User intent:
481
+ - Affected domains and downstream consumers:
482
+ - State transitions and persistence/restart impact:
483
+ - Missing impact areas or uncertainty:
484
+ - Residual risks and recovery:
489
485
 
490
486
  ## Verification Evidence
491
487
 
492
- - Forge /review run:
488
+ - Focused/full checks:
493
489
  - Commands run:
494
490
  - Manual checks:
495
491
  - Supporting artifacts:
496
492
 
497
- ## External Acceptance Advice
498
-
499
- > **External Acceptance**: unavailable
500
- > **External Reviewer**:
501
- > **External Source**:
502
- > **External Started**:
503
- > **External Completed**:
504
-
505
- - P1 blockers:
506
- - P2 advisories:
507
- - Acceptance checklist:
508
-
509
- ## Scorecard
510
-
511
- | Dimension | Score | Notes |
512
- |-----------|-------|-------|
513
- | Functionality | 0/10 | |
514
- | Product depth | 0/10 | |
515
- | Design quality | 0/10 | |
516
- | Code quality | 0/10 | |
517
-
518
493
  ## Failing Items
519
494
 
520
495
  - ...
@@ -908,7 +883,7 @@ ARCHITECTURE_INDEX_EOF
908
883
  "plan_capture": {
909
884
  "script": "scripts/capture-plan.sh",
910
885
  "sources": ["host-plan-mode", "forge-plan"],
911
- "rule": "Forge /plan or host planning mode may capture decision-complete source plans into plans/plan-*.md; migrated lifecycle execution remains owned by Runtime Plan/Work state"
886
+ "rule": "Codex Plan mode and Waza think planning should capture decision-complete plans into plans/plan-*.md; implementation approval then projects the active approved plan through scripts/plan-to-todo.sh"
912
887
  },
913
888
  "planning": {
914
889
  "pending_orchestration_file": ".ai/harness/planning/pending.json",
@@ -916,8 +891,8 @@ ARCHITECTURE_INDEX_EOF
916
891
  },
917
892
  "guards": {
918
893
  "edit_plan_gate": "advice",
919
- "edit_plan_gate_modes": ["enforce", "advice", "off"],
920
- "rule": "pre-edit-guard advises when implementation lacks an active plan; execution remains available unless a real safety boundary blocks it"
894
+ "edit_plan_gate_modes": ["advice", "off"],
895
+ "rule": "pre-edit-guard may expose Plan/spec context, but Plan lifecycle never authorizes implementation; only real safety/resource boundaries block execution"
921
896
  },
922
897
  "sidecar_research": {
923
898
  "default": true,
@@ -998,16 +973,16 @@ ARCHITECTURE_INDEX_EOF
998
973
  "routing": {
999
974
  "primary": "forge",
1000
975
  "optional_complex_helper": "gstack",
1001
- "optional_small_helper": "waza",
976
+ "optional_daily_helper": "waza",
1002
977
  "optional_knowledge_helper": "gbrain"
1003
978
  },
1004
979
  "hosts": [
1005
980
  "claude-code",
1006
981
  "codex"
1007
982
  ],
1008
- "mode": "optional-enhancement",
983
+ "mode": "optional-enhancements",
1009
984
  "detection": "init-migrate",
1010
- "readiness_gate": "scripts/check-agent-tooling.sh --host codex",
985
+ "readiness_report": "scripts/check-agent-tooling.sh --host codex",
1011
986
  "waza": {
1012
987
  "source_repo": "tw93/Waza",
1013
988
  "source_url": "https://github.com/tw93/Waza.git",
@@ -1021,12 +996,12 @@ ARCHITECTURE_INDEX_EOF
1021
996
  "codex_automation_profile": {
1022
997
  "required_skills": [],
1023
998
  "optional_skills": ["health", "check", "mermaid"],
1024
- "mode": "codex-runtime-reference",
999
+ "mode": "optional-codex-runtime-reference",
1025
1000
  "source": "~/.codex/skills",
1026
1001
  "routes": {
1027
- "workflow_health": "forge:/debug",
1028
- "review_gate": "forge:/review",
1029
- "architecture_diagram": "mermaid-if-installed"
1002
+ "workflow_health_optional": "waza:health",
1003
+ "review_helper_optional": "waza:check",
1004
+ "architecture_diagram_optional": "mermaid"
1030
1005
  },
1031
1006
  "vendoring_policy": "do-not-vendor-skill-body"
1032
1007
  },
@@ -1047,7 +1022,7 @@ ARCHITECTURE_INDEX_EOF
1047
1022
  "codex_config_path": "~/.codex/config.toml",
1048
1023
  "claude_config_path": "~/.claude.json",
1049
1024
  "index_dir": ".codegraph",
1050
- "readiness": "optional-global-cli-mcp; bundled-rh-context-backend-is-runtime-owned",
1025
+ "readiness": "forge-bundled-backend; host-mcp-optional",
1051
1026
  "hook_policy": "do-not-block-hooks",
1052
1027
  "install_command": "bun add -g @colbymchenry/codegraph && forge tools configure codegraph --target codex --location global",
1053
1028
  "project_init_command": "codegraph init -i .",
@@ -1057,14 +1032,6 @@ ARCHITECTURE_INDEX_EOF
1057
1032
  },
1058
1033
  "agentic_development": {
1059
1034
  "routing": {
1060
- "small_bounded_change": "forge:/direct",
1061
- "planning": "forge:/plan",
1062
- "bug_or_regression": "forge:/debug",
1063
- "post_implementation_review": "forge:/review",
1064
- "release": "forge:/release",
1065
- "scale": "forge:/scale"
1066
- },
1067
- "optional_enhancements": {
1068
1035
  "direct": "forge:/direct",
1069
1036
  "plan": "forge:/plan",
1070
1037
  "debug": "forge:/debug",
@@ -1074,7 +1041,7 @@ ARCHITECTURE_INDEX_EOF
1074
1041
  },
1075
1042
  "due_diligence": {
1076
1043
  "levels": ["P1_GLOBAL_ARCHITECTURE", "P2_DATA_FLOW_TRACE", "P3_DESIGN_DECISION"],
1077
- "explicit_report_required_for": ["forge:/plan", "forge:/debug", "risky_refactor", "deployment", "auth_payment_data", "shared_contract"]
1044
+ "explicit_report_required_for": ["architecture", "debug", "risky_refactor", "deployment", "auth_payment_data", "shared_contract"]
1078
1045
  }
1079
1046
  },
1080
1047
  "enforcement": {
@@ -0,0 +1,265 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ BUN_BIN="${BUN_BIN:-bun}"
6
+ RUNTIME_PORT="${FORGE_CLOUD_MCP_RUNTIME_PORT:-18765}"
7
+ GATEWAY_PORT="${FORGE_CLOUD_MCP_GATEWAY_PORT:-18767}"
8
+ HOLD_SECONDS="${FORGE_CLOUD_MCP_HOLD_SECONDS:-1500}"
9
+ TUNNEL_ID="${FORGE_CLOUD_TUNNEL_ID:-}"
10
+ TUNNEL_ALIAS="${FORGE_CLOUD_TUNNEL_ALIAS:-forge-cloud-ci}"
11
+ TUNNEL_CLIENT_VERSION="${FORGE_TUNNEL_CLIENT_VERSION:-v0.0.12}"
12
+ MCP_AUTH_MODE="${FORGE_CLOUD_MCP_AUTH_MODE:-none}"
13
+ RUNTIME_API_KEY="${FORGE_CLOUD_TUNNEL_RUNTIME_API_KEY:-}"
14
+
15
+ if [[ -z "$TUNNEL_ID" ]]; then
16
+ echo 'FORGE_CLOUD_TUNNEL_ID is required' >&2
17
+ exit 2
18
+ fi
19
+ if [[ -z "$RUNTIME_API_KEY" ]]; then
20
+ echo 'FORGE_CLOUD_TUNNEL_RUNTIME_API_KEY is required' >&2
21
+ exit 2
22
+ fi
23
+ if ! [[ "$HOLD_SECONDS" =~ ^[0-9]+$ ]]; then
24
+ echo 'FORGE_CLOUD_MCP_HOLD_SECONDS must be a non-negative integer' >&2
25
+ exit 2
26
+ fi
27
+
28
+ TMP_ROOT="$(mktemp -d "${RUNNER_TEMP:-${TMPDIR:-/tmp}}/forge-cloud-mcp-e2e.XXXXXX")"
29
+ CONTROLLER_HOME="$TMP_ROOT/controller-home"
30
+ SETUP_LOG="$TMP_ROOT/setup.log"
31
+ INSTALL_JSON="$TMP_ROOT/runtime-install.json"
32
+ GATEWAY_LOG="$TMP_ROOT/gateway.log"
33
+ TUNNEL_ARCHIVE="$TMP_ROOT/tunnel-client.zip"
34
+ TUNNEL_DIR="$TMP_ROOT/tunnel-client"
35
+ TUNNEL_CLIENT="$TUNNEL_DIR/tunnel-client"
36
+ TUNNEL_STATUS_JSON="$TMP_ROOT/tunnel-status.json"
37
+ RUNTIME_PID=''
38
+ GATEWAY_PID=''
39
+
40
+ stop_pid() {
41
+ local pid="$1"
42
+ [[ -n "$pid" ]] || return 0
43
+ kill -0 "$pid" 2>/dev/null || return 0
44
+ kill "$pid" 2>/dev/null || true
45
+ for _ in $(seq 1 40); do
46
+ kill -0 "$pid" 2>/dev/null || return 0
47
+ sleep 0.25
48
+ done
49
+ kill -KILL "$pid" 2>/dev/null || true
50
+ for _ in $(seq 1 20); do
51
+ kill -0 "$pid" 2>/dev/null || return 0
52
+ sleep 0.1
53
+ done
54
+ return 1
55
+ }
56
+
57
+ tunnel_status_ready() {
58
+ "$TUNNEL_CLIENT" runtimes status "$TUNNEL_ALIAS" --json > "$TUNNEL_STATUS_JSON" 2>/dev/null || return 1
59
+ node - "$TUNNEL_STATUS_JSON" <<'NODE'
60
+ const fs = require('node:fs');
61
+ const status = JSON.parse(fs.readFileSync(process.argv[2], 'utf8'));
62
+ process.exit(status.process_running === true && status.healthy === true && status.ready === true ? 0 : 1);
63
+ NODE
64
+ }
65
+
66
+ print_tunnel_status_summary() {
67
+ if [[ ! -s "$TUNNEL_STATUS_JSON" ]]; then
68
+ printf 'FORGE_CLOUD_TUNNEL_STATUS unavailable\n' >&2
69
+ return
70
+ fi
71
+ node - "$TUNNEL_STATUS_JSON" <<'NODE'
72
+ const fs = require('node:fs');
73
+ try {
74
+ const status = JSON.parse(fs.readFileSync(process.argv[2], 'utf8'));
75
+ const flag = (name) => status[name] === true ? 'true' : status[name] === false ? 'false' : 'unknown';
76
+ console.error(`FORGE_CLOUD_TUNNEL_STATUS process_running=${flag('process_running')} healthy=${flag('healthy')} ready=${flag('ready')}`);
77
+ } catch {
78
+ console.error('FORGE_CLOUD_TUNNEL_STATUS unreadable');
79
+ }
80
+ NODE
81
+ }
82
+
83
+ wait_for_tunnel_ready() {
84
+ local attempts="$1"
85
+ for _ in $(seq 1 "$attempts"); do
86
+ if tunnel_status_ready; then
87
+ return 0
88
+ fi
89
+ sleep 1
90
+ done
91
+ print_tunnel_status_summary
92
+ return 1
93
+ }
94
+
95
+ cleanup() {
96
+ local original_status=$?
97
+ local cleanup_failed=0
98
+ trap - EXIT INT TERM
99
+ if [[ -x "$TUNNEL_CLIENT" ]]; then
100
+ "$TUNNEL_CLIENT" runtimes stop "$TUNNEL_ALIAS" --json >/dev/null 2>&1 || cleanup_failed=1
101
+ fi
102
+ stop_pid "$GATEWAY_PID" || cleanup_failed=1
103
+ stop_pid "$RUNTIME_PID" || cleanup_failed=1
104
+ unset RUNTIME_API_KEY
105
+ for _ in $(seq 1 20); do
106
+ rm -rf "$TMP_ROOT" 2>/dev/null || true
107
+ [[ ! -e "$TMP_ROOT" ]] && break
108
+ sleep 0.25
109
+ done
110
+ if [[ -e "$TMP_ROOT" ]]; then
111
+ echo 'FORGE_CLOUD_MCP_CLEANUP_FAILED: temporary root remained after bounded teardown' >&2
112
+ cleanup_failed=1
113
+ fi
114
+ if (( cleanup_failed != 0 )); then
115
+ exit 1
116
+ fi
117
+ exit "$original_status"
118
+ }
119
+ trap cleanup EXIT INT TERM
120
+
121
+ cd "$ROOT"
122
+
123
+ "$BUN_BIN" bin/forge.mjs mcp setup chatgpt \
124
+ --user-level \
125
+ --controller-home "$CONTROLLER_HOME" \
126
+ --host 127.0.0.1 \
127
+ --port "$RUNTIME_PORT" \
128
+ --local-controller-port $((RUNTIME_PORT + 1)) \
129
+ --connector-port "$GATEWAY_PORT" > "$SETUP_LOG"
130
+
131
+ # Package Runtime normally materializes its own persistent OAuth Connector from
132
+ # chatgpt.localEndpoint. This temporary Secure Tunnel benchmark owns the
133
+ # connector port itself with the explicit MCP_AUTH_MODE below, so suppress the
134
+ # package connector in this disposable Controller Home before installation.
135
+ MCP_LOCAL_CONFIG="$CONTROLLER_HOME/mcp/mcp.local.json"
136
+ node - "$MCP_LOCAL_CONFIG" <<'NODE'
137
+ const fs = require('node:fs');
138
+ const path = process.argv[2];
139
+ const config = JSON.parse(fs.readFileSync(path, 'utf8'));
140
+ if (!config.chatgpt || typeof config.chatgpt.localEndpoint !== 'string') {
141
+ console.error('FORGE_CLOUD_MCP_SETUP_LOCAL_ENDPOINT_MISSING');
142
+ process.exit(1);
143
+ }
144
+ delete config.chatgpt.localEndpoint;
145
+ fs.writeFileSync(path, `${JSON.stringify(config, null, 2)}\n`, { mode: 0o600 });
146
+ NODE
147
+
148
+ "$BUN_BIN" bin/forge.mjs repo register "$ROOT" \
149
+ --controller-home "$CONTROLLER_HOME" \
150
+ --json > "$TMP_ROOT/repository.json"
151
+
152
+ "$BUN_BIN" bin/forge.mjs runtime service install-package \
153
+ --controller-home "$CONTROLLER_HOME" \
154
+ --host 127.0.0.1 \
155
+ --port "$RUNTIME_PORT" \
156
+ --portable > "$INSTALL_JSON"
157
+ RUNTIME_PID="$(node -e "const x=require(process.argv[1]); const pid=x?.pid; if(!Number.isInteger(pid)||pid<=0) process.exit(2); process.stdout.write(String(pid))" "$INSTALL_JSON")"
158
+
159
+ curl --fail --silent --show-error \
160
+ --retry 30 --retry-delay 1 --retry-connrefused \
161
+ "http://127.0.0.1:${RUNTIME_PORT}/ready" > "$TMP_ROOT/runtime-ready.json"
162
+
163
+ FORGE_CONTROLLER_LIFECYCLE_OWNER=1 \
164
+ "$BUN_BIN" bin/forge.mjs mcp serve \
165
+ --repo "$ROOT" \
166
+ --controller-home "$CONTROLLER_HOME" \
167
+ --transport http \
168
+ --host 127.0.0.1 \
169
+ --port "$GATEWAY_PORT" \
170
+ --profile controller \
171
+ --auth "$MCP_AUTH_MODE" > "$GATEWAY_LOG" 2>&1 &
172
+ GATEWAY_PID=$!
173
+
174
+ case "$MCP_AUTH_MODE" in
175
+ oauth)
176
+ for _ in $(seq 1 30); do
177
+ if curl --fail --silent "http://127.0.0.1:${GATEWAY_PORT}/.well-known/oauth-authorization-server" > "$TMP_ROOT/local-oauth.json" 2>/dev/null; then
178
+ break
179
+ fi
180
+ if ! kill -0 "$GATEWAY_PID" 2>/dev/null; then
181
+ cat "$GATEWAY_LOG" >&2
182
+ exit 1
183
+ fi
184
+ sleep 1
185
+ done
186
+ test -s "$TMP_ROOT/local-oauth.json"
187
+ ;;
188
+ none)
189
+ MCP_INITIALIZE_HEADERS="$TMP_ROOT/mcp-initialize.headers"
190
+ MCP_INITIALIZE_BODY="$TMP_ROOT/mcp-initialize.body"
191
+ MCP_INITIALIZE_PAYLOAD='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"forge-cloud-readiness","version":"1"}}}'
192
+ for _ in $(seq 1 30); do
193
+ if curl --fail --silent --show-error \
194
+ --dump-header "$MCP_INITIALIZE_HEADERS" \
195
+ --output "$MCP_INITIALIZE_BODY" \
196
+ --request POST \
197
+ --header 'content-type: application/json' \
198
+ --header 'accept: application/json, text/event-stream' \
199
+ --data "$MCP_INITIALIZE_PAYLOAD" \
200
+ "http://127.0.0.1:${GATEWAY_PORT}/mcp" 2>/dev/null \
201
+ && grep -Eiq '^mcp-session-id:[[:space:]]*[^[:space:]]+' "$MCP_INITIALIZE_HEADERS" \
202
+ && grep -q 'forge-mcp' "$MCP_INITIALIZE_BODY"; then
203
+ break
204
+ fi
205
+ if ! kill -0 "$GATEWAY_PID" 2>/dev/null; then
206
+ cat "$GATEWAY_LOG" >&2
207
+ exit 1
208
+ fi
209
+ sleep 1
210
+ done
211
+ grep -Eiq '^mcp-session-id:[[:space:]]*[^[:space:]]+' "$MCP_INITIALIZE_HEADERS"
212
+ grep -q 'forge-mcp' "$MCP_INITIALIZE_BODY"
213
+ ;;
214
+ bearer)
215
+ echo 'FORGE_CLOUD_MCP_AUTH_MODE=bearer is not supported by the unauthenticated Secure Tunnel connector path; use oauth or none.' >&2
216
+ exit 2
217
+ ;;
218
+ *)
219
+ echo "unsupported FORGE_CLOUD_MCP_AUTH_MODE: $MCP_AUTH_MODE" >&2
220
+ exit 2
221
+ ;;
222
+ esac
223
+
224
+ mkdir -p "$TUNNEL_DIR"
225
+ TUNNEL_CLIENT_ASSET="tunnel-client-${TUNNEL_CLIENT_VERSION}-linux-amd64.zip"
226
+ curl -LfsS \
227
+ "https://github.com/openai/tunnel-client/releases/download/${TUNNEL_CLIENT_VERSION}/${TUNNEL_CLIENT_ASSET}" \
228
+ -o "$TUNNEL_ARCHIVE"
229
+ unzip -q "$TUNNEL_ARCHIVE" -d "$TUNNEL_DIR"
230
+ chmod +x "$TUNNEL_CLIENT" "$TUNNEL_DIR/cloudflared"
231
+
232
+ FORGE_RUNTIME_API_KEY="$RUNTIME_API_KEY" \
233
+ "$TUNNEL_CLIENT" runtimes connect \
234
+ --alias "$TUNNEL_ALIAS" \
235
+ --tunnel-id "$TUNNEL_ID" \
236
+ --runtime-api-key 'env:FORGE_RUNTIME_API_KEY' \
237
+ --mcp-server-url "http://127.0.0.1:${GATEWAY_PORT}/mcp" \
238
+ --profile "$TUNNEL_ALIAS" \
239
+ --profile-dir "$TMP_ROOT/tunnel-profiles" \
240
+ --json > "$TMP_ROOT/tunnel-connect.json"
241
+
242
+ if ! wait_for_tunnel_ready 30; then
243
+ echo 'FORGE_CLOUD_TUNNEL_NOT_READY' >&2
244
+ exit 1
245
+ fi
246
+
247
+ printf 'FORGE_CLOUD_TUNNEL_ID=%s\n' "$TUNNEL_ID"
248
+ printf 'FORGE_CLOUD_TUNNEL_ALIAS=%s\n' "$TUNNEL_ALIAS"
249
+ printf 'FORGE_CLOUD_MCP_RUN_ID=%s\n' "${GITHUB_RUN_ID:-unknown}"
250
+ printf 'FORGE_CLOUD_MCP_RUNNER_OS=%s\n' "${RUNNER_OS:-unknown}"
251
+ printf 'FORGE_CLOUD_MCP_RUNNER_ARCH=%s\n' "${RUNNER_ARCH:-unknown}"
252
+ printf 'FORGE_CLOUD_MCP_AUTH_MODE=%s\n' "$MCP_AUTH_MODE"
253
+
254
+ elapsed=0
255
+ while (( elapsed < HOLD_SECONDS )); do
256
+ kill -0 "$RUNTIME_PID" 2>/dev/null || { echo 'runtime exited' >&2; exit 1; }
257
+ kill -0 "$GATEWAY_PID" 2>/dev/null || { cat "$GATEWAY_LOG" >&2; exit 1; }
258
+ if ! wait_for_tunnel_ready 5; then
259
+ echo 'FORGE_CLOUD_TUNNEL_LOST_READINESS' >&2
260
+ exit 1
261
+ fi
262
+ sleep 60
263
+ elapsed=$((elapsed + 60))
264
+ printf 'FORGE_CLOUD_MCP_HEARTBEAT elapsed=%ss tunnel_id=%s\n' "$elapsed" "$TUNNEL_ID"
265
+ done
@@ -44,6 +44,22 @@ const recoveryTunnelService = launchdService(
44
44
  'RECOVERY_TUNNEL_SERVICE',
45
45
  );
46
46
  if (Boolean(recoveryTunnelService) !== Boolean(recoveryPublicUrl)) throw new Error('RECOVERY_PUBLIC_URL_AND_TUNNEL_SERVICE_MUST_BE_CONFIGURED_TOGETHER');
47
+ const primaryConnectorLocalUrl = endpointOption('--primary-connector-local-url');
48
+ const primaryConnectorBase = launchdService(
49
+ option('--primary-connector-service-label'),
50
+ option('--primary-connector-service-plist'),
51
+ 'RECOVERY_PRIMARY_CONNECTOR',
52
+ );
53
+ if (primaryConnectorLocalUrl && !primaryConnectorBase) throw new Error('RECOVERY_PRIMARY_CONNECTOR_LABEL_REQUIRED_FOR_LOCAL_URL');
54
+ const primaryConnectorService = primaryConnectorBase
55
+ ? { ...primaryConnectorBase, ...(primaryConnectorLocalUrl ? { localMcpUrl: primaryConnectorLocalUrl } : {}) }
56
+ : undefined;
57
+ const primaryPublicTunnelService = launchdService(
58
+ option('--primary-tunnel-service-label'),
59
+ option('--primary-tunnel-service-plist'),
60
+ 'RECOVERY_PRIMARY_TUNNEL',
61
+ );
62
+ if (primaryPublicTunnelService && !primaryConnectorService) throw new Error('RECOVERY_PRIMARY_CONNECTOR_REQUIRED_FOR_PRIMARY_TUNNEL');
47
63
 
48
64
  const result = await installStandaloneRecovery({
49
65
  controllerHome,
@@ -54,6 +70,8 @@ const result = await installStandaloneRecovery({
54
70
  publicMcpUrl,
55
71
  recoveryPublicUrl,
56
72
  recoveryTunnelService,
73
+ primaryPublicTunnelService,
74
+ primaryConnectorService,
57
75
  });
58
76
  const config = result.config;
59
77
  console.log(JSON.stringify({
@@ -70,5 +88,11 @@ console.log(JSON.stringify({
70
88
  recoveryTunnelService: config.recoveryTunnelService
71
89
  ? { platform: config.recoveryTunnelService.platform, label: config.recoveryTunnelService.label, plistPath: config.recoveryTunnelService.plistPath }
72
90
  : undefined,
91
+ primaryConnectorService: config.primaryConnectorService
92
+ ? { platform: config.primaryConnectorService.platform, label: config.primaryConnectorService.label, plistPath: config.primaryConnectorService.plistPath, localMcpUrl: config.primaryConnectorService.localMcpUrl }
93
+ : undefined,
94
+ primaryPublicTunnelService: config.primaryPublicTunnelService
95
+ ? { platform: config.primaryPublicTunnelService.platform, label: config.primaryPublicTunnelService.label, plistPath: config.primaryPublicTunnelService.plistPath }
96
+ : undefined,
73
97
  },
74
98
  }, null, 2));
@@ -64,8 +64,6 @@ tasks/.current.md.tmp.*
64
64
  .ai/harness/chatgpt/bridge-extension/
65
65
  .ai/harness/chatgpt/tmp/
66
66
  .ai/harness/chatgpt/sessions/
67
- .ai/harness/triage/*
68
- !.ai/harness/triage/.gitkeep
69
67
  .forge/chatgpt-browser.local.json
70
68
  .forge/chatgpt-browser.tokens.json
71
69
  .forge/interactions/
@@ -208,7 +206,7 @@ Complete this inventory before implementation. If any line is unknown, keep the
208
206
 
209
207
  - **State/progress path**:
210
208
  - **Verification evidence**:
211
- - **Evaluator rubric**:
209
+ - **Impact review**:
212
210
  - **Stop condition**:
213
211
  - **Rollback surface**:
214
212
 
@@ -249,7 +247,7 @@ Describe the exact outcome this task must deliver.
249
247
  - Checks file: `.ai/harness/checks/latest.json`
250
248
  - Run snapshots: `.ai/harness/runs/`
251
249
  - Scope gate: edit only paths listed under `allowed_paths`; update this contract before widening scope.
252
- - Completion gate: `scripts/verify-sprint.sh` must see this contract pass, the review recommend pass, and `## External Acceptance Advice` pass or record a manual override.
250
+ - Completion evidence: `scripts/verify-sprint.sh` reports the direct checks and declared scope. Then perform a fresh semantic impact review.
253
251
 
254
252
  ## Allowed Paths
255
253
 
@@ -302,7 +300,7 @@ exit_criteria:
302
300
  tests_pass:
303
301
  - path: tests/unit/{{TASK_SLUG}}.test.ts
304
302
  commands_succeed:
305
- - bun run typecheck
303
+ - bun run check:type
306
304
  files_contain:
307
305
  - path: src/modules/{{TASK_SLUG}}/index.ts
308
306
  pattern: "export"
@@ -329,40 +327,24 @@ PI_TEMPLATE_REVIEW=$(cat <<'EOF_TEMPLATE_REVIEW'
329
327
  > **Notes File**: {{NOTES_FILE}}
330
328
  > **Checks File**: {{CHECKS_FILE}}
331
329
  > **Last Updated**: {{TIMESTAMP}}
332
- > **Recommendation**: fail
330
+ > **Summary**:
333
331
 
334
- ## Human Review Card
332
+ ## Semantic Impact Review
335
333
 
336
- - Verdict: pending
337
- - Change type: code-change | docs-only | ledger-closeout | migration | eval-only | delegated-run
338
- - Intended files changed:
339
- - Actual files changed:
340
- - Commands passed:
341
- - External acceptance: unavailable
342
- - Residual risks:
343
- - Reviewer action required: inspect diff and card
344
- - Rollback:
334
+ - User intent:
335
+ - Affected domains and downstream consumers:
336
+ - State transitions and persistence/restart impact:
337
+ - Missing impact areas or uncertainty:
338
+ - Residual risks and recovery:
345
339
 
346
340
  ## Verification Evidence
347
341
 
348
- - Forge /review run:
342
+ - Focused/full checks:
349
343
  - Commands run:
350
344
  - Manual checks:
351
345
  - Supporting artifacts:
352
346
 
353
- ## External Acceptance Advice
354
-
355
- > **External Acceptance**: unavailable
356
- > **External Reviewer**:
357
- > **External Source**:
358
- > **External Started**:
359
- > **External Completed**:
360
-
361
- - P1 blockers:
362
- - P2 advisories:
363
- - Acceptance checklist:
364
-
365
- ## Behavior Diff Notes
347
+ ## Scenario Evidence
366
348
 
367
349
  - ...
368
350
 
@@ -370,15 +352,6 @@ PI_TEMPLATE_REVIEW=$(cat <<'EOF_TEMPLATE_REVIEW'
370
352
 
371
353
  - ...
372
354
 
373
- ## Scorecard
374
-
375
- | Dimension | Score | Notes |
376
- |-----------|-------|-------|
377
- | Functionality | 0/10 | |
378
- | Product depth | 0/10 | |
379
- | Design quality | 0/10 | |
380
- | Code quality | 0/10 | |
381
-
382
355
  ## Failing Items
383
356
 
384
357
  - ...
@@ -441,8 +414,8 @@ PI_EVALUATION_PROFILE_DEFAULT="browser-qa"
441
414
  PI_HANDOFF_PROFILE_DEFAULT="artifact-aware"
442
415
  PI_DOCUMENTATION_PROFILE_DEFAULT="minimal-agentic"
443
416
  PI_DEFAULT_LSP_PROFILE="typescript-lsp"
444
- PI_MINIMAL_REFERENCE_CONFIGS="harness-overview.md agentic-development-flow.md external-tooling.md sprint-contracts.md heartbeat-triage.md handoff-protocol.md document-generation.md global-working-rules.md"
445
- PI_FULL_REFERENCE_CONFIGS="agentic-development-flow.md ai-workflows.md changelog-versioning.md coding-standards.md development-protocol.md document-generation.md evaluator-rubric.md external-tooling.md git-strategy.md global-working-rules.md heartbeat-triage.md handoff-protocol.md harness-overview.md hook-operations.md release-deploy.md spa-day-protocol.md sprint-contracts.md workflow-orchestration.md"
417
+ PI_MINIMAL_REFERENCE_CONFIGS="harness-overview.md agentic-development-flow.md external-tooling.md sprint-contracts.md handoff-protocol.md document-generation.md global-working-rules.md"
418
+ PI_FULL_REFERENCE_CONFIGS="agentic-development-flow.md ai-workflows.md changelog-versioning.md coding-standards.md development-protocol.md document-generation.md evaluator-rubric.md external-tooling.md git-strategy.md global-working-rules.md handoff-protocol.md harness-overview.md hook-operations.md release-deploy.md spa-day-protocol.md sprint-contracts.md workflow-orchestration.md"
446
419
  PI_REFERENCE_CONFIG_STUB_MARKER="<!-- forge: reference-config-stub v1 -->"
447
420
 
448
421
  pi_write_file_if_apply() {
@@ -1066,7 +1039,7 @@ pi_install_helpers() {
1066
1039
  local target_dir="$1"
1067
1040
  local helpers_dir="$2"
1068
1041
  local mode="${3:-apply}"
1069
- local helper_names="${4:-new-spec.sh new-sprint.sh new-plan.sh capture-plan.sh plan-to-todo.sh contract-run.ts contract-worktree.sh ship-worktrees.sh archive-workflow.sh refresh-current-status.sh prepare-handoff.sh verify-contract.sh summarize-failures.sh verify-sprint.sh harness-trace-grade.sh sprint-backlog.sh check-task-sync.sh check-deploy-sql-order.sh check-architecture-sync.sh check-agent-tooling.sh check-context-files.sh check-brain-manifest.sh sync-brain-docs.sh check-skill-version.ts select-agent-context-blocks.sh ensure-task-workflow.sh check-task-workflow.sh maintenance-triage.sh heartbeat-triage.sh switch-plan.sh workflow-contract.ts inspect-project-state.ts migrate-workflow-docs.ts migrate-project-template.sh capability-resolver.ts architecture-event.ts capability-config.ts architecture-queue.sh archive-architecture-request.sh context-contract-sync.sh workstream-sync.sh prepare-codex-handoff.sh codex-handoff-resume.sh}"
1042
+ local helper_names="${4:-new-spec.sh new-sprint.sh new-plan.sh capture-plan.sh plan-to-todo.sh contract-run.ts contract-worktree.sh ship-worktrees.sh archive-workflow.sh refresh-current-status.sh prepare-handoff.sh verify-contract.sh summarize-failures.sh verify-sprint.sh sprint-backlog.sh check-task-sync.sh check-deploy-sql-order.sh check-architecture-sync.sh check-agent-tooling.sh check-context-files.sh check-brain-manifest.sh sync-brain-docs.sh check-skill-version.ts select-agent-context-blocks.sh ensure-task-workflow.sh check-task-workflow.sh switch-plan.sh workflow-contract.ts inspect-project-state.ts migrate-workflow-docs.ts migrate-project-template.sh capability-resolver.ts architecture-event.ts capability-config.ts architecture-queue.sh archive-architecture-request.sh context-contract-sync.sh workstream-sync.sh prepare-codex-handoff.sh codex-handoff-resume.sh}"
1070
1043
  local scripts_dir="$target_dir/scripts"
1071
1044
  local runtime_dir="$target_dir/.ai/harness/scripts"
1072
1045
  local helper_name
@@ -2411,7 +2384,6 @@ pi_ensure_harness_state_surface() {
2411
2384
  "$target_dir/.ai/harness/worktrees" \
2412
2385
  "$target_dir/.ai/harness/controller" \
2413
2386
  "$target_dir/.ai/harness/local-jobs" \
2414
- "$target_dir/.ai/harness/triage" \
2415
2387
  "$target_dir/docs/researches" \
2416
2388
  "$target_dir/docs/architecture/domains" \
2417
2389
  "$target_dir/docs/architecture/modules" \
@@ -2433,7 +2405,6 @@ pi_ensure_harness_state_surface() {
2433
2405
  [[ -f "$target_dir/.ai/harness/planning/.gitkeep" ]] || : > "$target_dir/.ai/harness/planning/.gitkeep"
2434
2406
  [[ -f "$target_dir/.ai/harness/worktrees/.gitkeep" ]] || : > "$target_dir/.ai/harness/worktrees/.gitkeep"
2435
2407
  [[ -f "$target_dir/.ai/harness/runs/.gitkeep" ]] || : > "$target_dir/.ai/harness/runs/.gitkeep"
2436
- [[ -f "$target_dir/.ai/harness/triage/.gitkeep" ]] || : > "$target_dir/.ai/harness/triage/.gitkeep"
2437
2408
  [[ -f "$target_dir/tasks/workstreams/.gitkeep" ]] || : > "$target_dir/tasks/workstreams/.gitkeep"
2438
2409
  if [[ ! -f "$target_dir/docs/researches/README.md" ]]; then
2439
2410
  cat > "$target_dir/docs/researches/README.md" <<'RESEARCH_README_EOF'