@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
@@ -139,7 +139,7 @@ plan_evidence_contract_error() {
139
139
  fi
140
140
 
141
141
  local label line value
142
- for label in "State/progress path" "Verification evidence" "Evaluator rubric" "Stop condition" "Rollback surface"; do
142
+ for label in "State/progress path" "Verification evidence" "Impact review|Evaluator rubric" "Stop condition" "Rollback surface"; do
143
143
  line="$(printf '%s\n' "$section" | grep -Ei "^[[:space:]]*-[[:space:]]*(\\*\\*)?${label}(\\*\\*)?[[:space:]]*:" | head -1 || true)"
144
144
  if [[ -z "$line" ]]; then
145
145
  echo "missing field: ${label}"
@@ -656,7 +656,6 @@ emit_forge_route_hint() {
656
656
 
657
657
  if pg_fact REVIEW_RELEASE; then
658
658
  echo "[ForgeRoute] Review/release intent detected. Use /review first; use /release only after review evidence is clear."
659
- emit_external_acceptance_prompt review
660
659
  emit_cross_review_hint merge
661
660
  fi
662
661
  }
@@ -684,50 +683,6 @@ emit_cross_review_hint() {
684
683
  esac
685
684
  }
686
685
 
687
- emit_external_acceptance_prompt() {
688
- local mode="${1:-review}"
689
- local expected_reviewer expected_source command active_plan_local contract_file_local review_file checks_file
690
-
691
- expected_reviewer="$(workflow_external_acceptance_expected_reviewer)"
692
- expected_source="$(workflow_external_acceptance_expected_source "$expected_reviewer")"
693
- if [ "$expected_source" = "claude-review" ]; then
694
- command="/claude-review"
695
- else
696
- command="codex-review"
697
- fi
698
-
699
- active_plan_local="$(get_active_plan || true)"
700
- contract_file_local="$(workflow_active_contract || true)"
701
- review_file="$(workflow_active_review || true)"
702
- checks_file="$(workflow_checks_file)"
703
-
704
- echo "[ExternalAcceptance] Review/release intent detected. Start peer acceptance in parallel with local /review and focused checks."
705
- echo "[ExternalAcceptance] Mode: $mode"
706
- echo "[ExternalAcceptance] Current active plan: ${active_plan_local:-"(none)"}"
707
- echo "[ExternalAcceptance] Current contract: ${contract_file_local:-"(none)"}"
708
- echo "[ExternalAcceptance] Current review: ${review_file:-tasks/reviews/<slug>.review.md}"
709
- echo "[ExternalAcceptance] Current checks: $checks_file"
710
- echo "[ExternalAcceptance] Peer reviewer: $expected_reviewer via $command"
711
- echo "[ExternalAcceptance] Diff scope for peer: branch diff against target, staged diff, unstaged diff, and untracked files."
712
- cat <<EOF_EXTERNAL_ACCEPTANCE
713
- [ExternalAcceptance] Prompt to send with $command:
714
- Review the current sprint for acceptance only. Do not run Forge /review or local checks. Do not edit files. Do not write files. Inspect the diff scope, contract, review evidence, and checks evidence, then return only a Markdown block that can be pasted into ${review_file:-tasks/reviews/<slug>.review.md}.
715
-
716
- ## External Acceptance Advice
717
- > **External Acceptance**: pass
718
- > **External Reviewer**: $expected_reviewer
719
- > **External Source**: $expected_source
720
- > **External Started**: YYYY-MM-DDTHH:MM:SS+0800
721
- > **External Completed**: YYYY-MM-DDTHH:MM:SS+0800
722
-
723
- - P1 blockers: none
724
- - P2 advisories:
725
- - Acceptance checklist: pass
726
-
727
- If the peer CLI is unavailable, record **External Acceptance**: unavailable and include the failure reason. That does not satisfy the completion gate unless a Manual Override: line with a concrete reason is also recorded.
728
- EOF_EXTERNAL_ACCEPTANCE
729
- }
730
-
731
686
  # --- Action rendering ---
732
687
  # Plan/spec/contract prompt gates are advisory (exit 0): pre-edit-guard.sh
733
688
  # enforces the same state deterministically at the edit boundary. Done-claim
@@ -768,7 +723,7 @@ render_prompt_guard_action() {
768
723
  exit 0
769
724
  ;;
770
725
  plan_status_no_active_block)
771
- echo "[PlanStatusGuard] Advisory: No active plan found in plans/. Implementation edits will be blocked at the edit layer until a plan is captured."
726
+ echo "[PlanStatusGuard] Legacy advisory: no active Plan found. Ordinary implementation is not gated by Plan presence."
772
727
  echo "[PlanStatusGuard] Capture the approved planning output with: bash scripts/capture-plan.sh --slug <slug> --title <title> --status Approved --execute"
773
728
  echo "[PlanStatusGuard] If there is no captured planning output yet, run: bash scripts/ensure-task-workflow.sh --slug <slug> --title <title>"
774
729
  exit 0
@@ -780,13 +735,13 @@ render_prompt_guard_action() {
780
735
  exit 0
781
736
  ;;
782
737
  plan_status_not_approved_block)
783
- echo "[PlanStatusGuard] Advisory: plan status is '$plan_status' in $active_plan. Complete the annotation cycle and move the plan to Approved; implementation edits are blocked at the edit layer until then."
738
+ echo "[PlanStatusGuard] Legacy advisory: plan status is '$plan_status' in $active_plan. This does not authorize or block ordinary implementation."
784
739
  exit 0
785
740
  ;;
786
741
  evidence_contract_block)
787
742
  echo "[EvidenceContractGuard] Advisory: plan Evidence Contract is incomplete in $active_plan:"
788
743
  printf '%s\n' "$evidence_error"
789
- echo "[EvidenceContractGuard] Fill ## Evidence Contract with state/progress path, verification evidence, evaluator rubric, stop condition, and rollback surface before implementation."
744
+ echo "[EvidenceContractGuard] Fill ## Evidence Contract with state/progress path, verification evidence, impact review, stop condition, and rollback surface before implementation."
790
745
  exit 0
791
746
  ;;
792
747
  plan_execution_scaffold_advice)
@@ -833,7 +788,7 @@ render_prompt_guard_action() {
833
788
  hook_structured_error \
834
789
  "EvidenceContractGuard" \
835
790
  "Done intent detected without a complete plan Evidence Contract." \
836
- "Fill ## Evidence Contract with state/progress path, verification evidence, evaluator rubric, stop condition, and rollback surface before marking work done." \
791
+ "Fill ## Evidence Contract with state/progress path, verification evidence, impact review, stop condition, and rollback surface before marking work done." \
837
792
  "quality_gate"
838
793
  exit 2
839
794
  ;;
@@ -962,38 +917,7 @@ if [ "$done_intent" -eq 1 ]; then
962
917
  echo "[ContractGuard] verify-contract.sh not found at scripts/verify-contract.sh (degraded mode: skipping strict verification)."
963
918
  fi
964
919
 
965
- review_file="$(workflow_active_review || true)"
966
- if [ -z "$review_file" ] || [ ! -f "$review_file" ]; then
967
- echo "[ReviewGuard] Missing sprint review: ${review_file:-tasks/reviews/<slug>.review.md}"
968
- hook_structured_error \
969
- "ReviewGuard" \
970
- "Done intent detected without a sprint review artifact." \
971
- "Run Forge /review after verification and record the evaluator recommendation in tasks/reviews/<slug>.review.md before marking work done." \
972
- "quality_gate"
973
- exit 2
974
- fi
975
-
976
- if ! workflow_review_recommends_pass "$review_file"; then
977
- echo "[ReviewGuard] Sprint review does not recommend pass: $review_file"
978
- hook_structured_error \
979
- "ReviewGuard" \
980
- "Sprint review is missing a passing recommendation." \
981
- "Run Forge /review with fresh verification evidence and record a pass recommendation before marking work done." \
982
- "quality_gate"
983
- exit 2
984
- fi
985
-
986
- external_status="$(workflow_external_acceptance_status "$review_file")"
987
- IFS=$'\t' read -r external_state external_reviewer external_source external_message <<< "$external_status"
988
- if [ "$external_state" != "pass" ] && [ "$external_state" != "manual_override" ]; then
989
- echo "[ExternalAcceptanceGuard] ${external_message:-External acceptance is missing.}"
990
- hook_structured_error \
991
- "ExternalAcceptanceGuard" \
992
- "${external_message:-External acceptance is missing from $review_file.}" \
993
- "Run peer acceptance via $(workflow_external_acceptance_expected_source) and record ## External Acceptance Advice in $review_file before marking work done." \
994
- "quality_gate"
995
- exit 2
996
- fi
920
+ echo "[Review] Before declaring completion, freshly re-evaluate user intent, affected domains, downstream consumers, and missing state transitions."
997
921
 
998
922
  checks_file="$(workflow_checks_file)"
999
923
  if [ ! -f "$checks_file" ]; then
@@ -1006,7 +930,7 @@ if [ "$done_intent" -eq 1 ]; then
1006
930
  exit 2
1007
931
  fi
1008
932
 
1009
- if ! checks_error="$(workflow_checks_pass "$checks_file" "$contract_file" "$review_file")"; then
933
+ if ! checks_error="$(workflow_checks_pass "$checks_file" "$contract_file")"; then
1010
934
  echo "[EvidenceGuard] $checks_error"
1011
935
  hook_structured_error \
1012
936
  "EvidenceGuard" \
@@ -397,16 +397,71 @@ current_status_field() {
397
397
  ' "$file" | xargs
398
398
  }
399
399
 
400
+ current_status_stale_after() {
401
+ local file="$1"
402
+ local value
403
+ value="$(current_status_field "$file" "Stale After" 2>/dev/null || true)"
404
+ if [[ -z "$value" ]]; then
405
+ value="$(sed -nE 's/^<!--[[:space:]]*stale_after:[[:space:]]*([^[:space:]]+)[[:space:]]*-->$/\1/p' "$file" 2>/dev/null | head -1)"
406
+ fi
407
+ printf '%s' "$value"
408
+ }
409
+
410
+ current_status_updated_epoch() {
411
+ local value="$1"
412
+ if date -d "$value" '+%s' >/dev/null 2>&1; then
413
+ date -d "$value" '+%s'
414
+ return 0
415
+ fi
416
+ date -j -f '%Y-%m-%dT%H:%M:%S%z' "$value" '+%s' 2>/dev/null
417
+ }
418
+
419
+ # Returns success when the declared freshness contract says the snapshot is
420
+ # expired. A malformed timestamp/duration fails closed once stale_after exists.
421
+ current_status_snapshot_is_stale() {
422
+ local updated="$1"
423
+ local stale_after="$2"
424
+ local amount unit multiplier updated_epoch now_epoch
425
+ [[ -n "$stale_after" ]] || return 1
426
+ if [[ ! "$stale_after" =~ ^([0-9]+)([smhd])$ ]]; then
427
+ return 0
428
+ fi
429
+ amount="${BASH_REMATCH[1]}"
430
+ unit="${BASH_REMATCH[2]}"
431
+ case "$unit" in
432
+ s) multiplier=1 ;;
433
+ m) multiplier=60 ;;
434
+ h) multiplier=3600 ;;
435
+ d) multiplier=86400 ;;
436
+ esac
437
+ updated_epoch="$(current_status_updated_epoch "$updated" || true)"
438
+ [[ "$updated_epoch" =~ ^[0-9]+$ ]] || return 0
439
+ now_epoch="${FORGE_CURRENT_STATUS_NOW_EPOCH:-$(date '+%s')}"
440
+ [[ "$now_epoch" =~ ^[0-9]+$ ]] || return 0
441
+ (( now_epoch - updated_epoch >= amount * multiplier ))
442
+ }
443
+
400
444
  current_status_snapshot_context() {
401
445
  local current_file="tasks/current.md"
402
- local target branch status updated source_commit target_status target_updated
446
+ local target branch status updated stale_after source_commit target_status target_updated
403
447
 
404
448
  target="$(workflow_target_branch)"
405
449
  branch="$(workflow_current_branch)"
406
450
  status="$(current_status_field "$current_file" "Status" 2>/dev/null || true)"
407
451
  updated="$(current_status_field "$current_file" "Updated At" 2>/dev/null || true)"
452
+ stale_after="$(current_status_stale_after "$current_file" 2>/dev/null || true)"
408
453
  source_commit="$(current_status_field "$current_file" "Source Commit" 2>/dev/null || true)"
409
454
 
455
+ if current_status_snapshot_is_stale "$updated" "$stale_after"; then
456
+ cat <<EOF_CONTEXT
457
+ # Stale Current Status Snapshot
458
+
459
+ - Ignored snapshot: `${current_file}` exceeded its declared freshness contract.
460
+ - Rule: do not use its status, source commit, or focus as current truth; rebuild from active plans, workstreams, handoff, checks, and the target branch.
461
+ EOF_CONTEXT
462
+ return 0
463
+ fi
464
+
410
465
  if [[ -z "$status" ]]; then
411
466
  if [[ "$branch" != "$target" ]] && git rev-parse --verify --quiet "$target" >/dev/null 2>&1 \
412
467
  && git show "${target}:tasks/current.md" >/dev/null 2>&1; then
@@ -28,7 +28,7 @@ PLAN_LOOP:
28
28
  LESSONS_FILE: tasks/lessons.md
29
29
  CONTEXT_MAP: .ai/context/context-map.json
30
30
  ANNOTATION_GUARD: do not implement until plan Status is "Approved"
31
- CONTRACT_GUARD: do not mark done until contract exit criteria pass and review recommends pass
31
+ CONTRACT_GUARD: do not mark done until contract exit criteria pass; then perform a fresh semantic impact review
32
32
  EXECUTION_CONTEXT: contract-level work starts in a linked codex/<slug> worktree when policy enables it; primary worktree warning by default; enforce via .claude/.require-worktree
33
33
  CONTRACT_WORKTREE_FINISH: run Forge /review, fill the review artifact from that verdict, then .ai/harness/scripts/contract-worktree.sh finish
34
34
  COMMIT_POLICY: explicit commits after green checks; no automatic checkpoint hook
@@ -34,7 +34,7 @@
34
34
  ### 6b. Contract Verification
35
35
  - Use task contracts in `tasks/contracts/` as completion gates.
36
36
  - Use implementation notes in `tasks/notes/` for task-local decisions that should not automatically become memory.
37
- - Validate exit criteria and the Forge `/review` review recommendation before any done/completed response.
37
+ - Validate direct exit criteria, then use Forge `/review` to reassess intent, downstream impact, and missing state transitions before any done/completed response.
38
38
 
39
39
  ### 7. Balanced Elegance
40
40
  - Redesign hacky non-trivial fixes before shipping.
@@ -1,8 +1,59 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "plugins": [
4
- {"id":"desktop_operator","name":"Forge Desktop Operator","version":"0.2.1","description":"Native macOS desktop automation provider for Forge.","repository":"https://github.com/moretea-labs/forge-desktop-operator.git","ref":"v0.2.1","installer":"forge-plugin-install.mjs","platforms":["darwin"]},
5
- {"id":"design","name":"Forge Design","version":"0.3.0","description":"Repository-native deterministic design workspace and design.md provider.","repository":"https://github.com/moretea-labs/forge-design.git","ref":"v0.3.0","installer":"forge-plugin-install.mjs","platforms":["darwin","linux","win32"]},
6
- {"id":"personal_knowledge","name":"Personal Knowledge Assistant","version":"0.2.1","description":"Local-first personal knowledge retrieval, memory, safe-write and analysis provider.","repository":"https://github.com/moretea-labs/personal-knowledge-assistant.git","ref":"v0.2.1","installer":"forge-plugin-install.mjs","platforms":["darwin","linux","win32"]}
4
+ {
5
+ "id": "desktop_operator",
6
+ "name": "Forge Desktop Operator",
7
+ "version": "0.2.1",
8
+ "description": "Native macOS desktop automation provider for Forge.",
9
+ "repository": "https://github.com/moretea-labs/forge-desktop-operator.git",
10
+ "ref": "v0.2.1",
11
+ "installer": "forge-plugin-install.mjs",
12
+ "providerVersion": "0.2.1",
13
+ "protocolVersion": "1.0",
14
+ "platforms": [
15
+ "darwin"
16
+ ]
17
+ },
18
+ {
19
+ "id": "design",
20
+ "name": "Forge Design",
21
+ "version": "0.3.0",
22
+ "description": "Repository-native deterministic design workspace and design.md provider.",
23
+ "repository": "https://github.com/moretea-labs/forge-design.git",
24
+ "ref": "v0.3.0",
25
+ "installer": "forge-plugin-install.mjs",
26
+ "platforms": [
27
+ "darwin",
28
+ "linux",
29
+ "win32"
30
+ ]
31
+ },
32
+ {
33
+ "id": "personal_knowledge",
34
+ "name": "Personal Knowledge Assistant",
35
+ "version": "0.2.1",
36
+ "description": "Local-first personal knowledge retrieval, memory, safe-write and analysis provider.",
37
+ "repository": "https://github.com/moretea-labs/personal-knowledge-assistant.git",
38
+ "ref": "v0.2.1",
39
+ "installer": "forge-plugin-install.mjs",
40
+ "platforms": [
41
+ "darwin",
42
+ "linux",
43
+ "win32"
44
+ ]
45
+ },
46
+ {
47
+ "id": "figma",
48
+ "name": "Forge Figma Bridge",
49
+ "version": "0.3.0",
50
+ "description": "Direct Figma Plugin API bridge for typed canvas inspection, editing and native review capture.",
51
+ "repository": "https://github.com/moretea-labs/forge-figma-bridge.git",
52
+ "ref": "v0.3.0",
53
+ "installer": "forge-plugin-install.mjs",
54
+ "platforms": [
55
+ "darwin"
56
+ ]
57
+ }
7
58
  ]
8
59
  }
@@ -31,7 +31,7 @@ Create these only when the agent has concrete repo evidence or the user asks:
31
31
  - Prefer short docs that name sources, owners, and verification commands.
32
32
  - Let capability `CLAUDE.md` and `AGENTS.md` carry local contract projections; root docs stay concise.
33
33
  - Keep complete workstream TODOs in `tasks/workstreams/<domain>/<capability>/`; contract blocks should link to them instead of becoming task logs.
34
- - Keep onboarding docs split by reader: agents read active source artifacts first; humans review the Human Review Card, diff, latest trace, and rollback first.
34
+ - Keep onboarding docs split by reader: agents read active source artifacts first; humans review the semantic-impact evidence, diff, latest checks, and recovery options first.
35
35
  - Hooks may create `docs/architecture/requests/*.md`; agents own semantic snapshots, embedded Mermaid, and optional `mermaid` HTML output.
36
36
  - Archive handled architecture requests with `.ai/harness/scripts/archive-architecture-request.sh`; keep `docs/architecture/requests/` pending-only and preserve handled requests under `docs/architecture/requests/archive/YYYY/`.
37
37
  - When both Mermaid and HTML exist, keep the Mermaid in Markdown as the semantic source and make the HTML link back to that Markdown source.
@@ -92,7 +92,7 @@ Required v1 fields:
92
92
  - `commands`, `guards`, `handoffs`, `files_changed`, and `allowed_paths_check`
93
93
  - `external_acceptance`, `failure_class`, and `next_step`
94
94
 
95
- `scripts/check-task-workflow.sh --strict` validates the latest trace shape when a non-empty latest checks file exists. `scripts/harness-trace-grade.sh --run <trace> --strict` applies the local graders used for workflow regression checks: active plan resolves, contract profile is valid, Human Review Card passes, command evidence exists, and changed files stay inside allowed paths.
95
+ `scripts/check-task-workflow.sh --strict` validates the latest trace shape when a non-empty latest checks file exists. Behavioral evidence comes from the selected checks and fresh controller review, not a score of plan or review metadata.
96
96
 
97
97
  ## Capability Context
98
98
 
@@ -18,7 +18,7 @@ Generated host adapter commands carry a 30 second timeout; long-running work bel
18
18
 
19
19
  `UserPromptSubmit.default` dispatches to the active `prompt-guard.sh` resolved by the central-first hook source decision. For ordinary repos that means the packaged/user-level runtime; `.ai/hooks/prompt-guard.sh` is active only when the repo pins `"hook_source": "repo"`. The shell layer parses host prompt JSON, reads workflow files, performs capture side effects, and renders host-safe output; it pipes `{"prompt": ...}` into `forge-hook prompt-guard-decide`, which owns every prompt-text intent classifier (Unicode-aware, in `src/cli/hook/prompt-intents.ts`) plus the intent x state decision table and returns one verdict JSON line (action, intent facts, derived strings). If the engine is unreachable or predates the protocol, the prompt layer degrades to a one-shot advisory instead of guessing; there is no shell fallback decision table.
20
20
 
21
- Prompt-layer plan/spec/contract gates are advisory routing only. `PreToolUse.edit` keeps real path/scope and private-surface safety checks authoritative, while the plan-state gate defaults to `advice`; repositories may opt into `enforce` or `off` through policy `.guards.edit_plan_gate` or `FORGE_EDIT_PLAN_GATE`. Done-claim gates block only on real failed or missing completion evidence, not on workflow ceremony.
21
+ Prompt-layer plan/spec/contract signals are advisory context only. `PreToolUse.edit` keeps real path/scope and private-surface safety checks authoritative; Plan/spec lifecycle is never a write-authorization gate. Legacy `.guards.edit_plan_gate=enforce` or `FORGE_EDIT_PLAN_GATE=enforce` is accepted as advisory compatibility, while `off` suppresses the guidance. Done-claim compatibility gates remain separate until goal-acceptance/evidence convergence removes workflow ceremony from completion.
22
22
 
23
23
  If you are asking "which hook file should I edit?", default to `assets/hooks/` for product changes and mirror into `.ai/hooks/` only for this self-host repo or another repo that pins `"hook_source": "repo"`; runtime pickup outside repo-pinned development happens on the next `install`/CLI upgrade because hooks resolve central-first.
24
24
  After installing or refreshing `~/.codex/hooks.json`, open Codex Settings and mark the user-level hook config as trusted; otherwise Codex will not execute it.
@@ -78,12 +78,12 @@ Existing contracts without this block remain valid. `.ai/harness/scripts/verify-
78
78
 
79
79
  ## Review Coupling
80
80
 
81
- - A contract is not truly done until the matching review file records a passing recommendation.
82
- - `tasks/reviews/<plan-stem>.review.md` should be filled from Waza `/check` after verification and cite the contract, implementation notes, checks file, run snapshot, `## External Acceptance Advice`, and any manual observations.
81
+ - After direct verification, use Forge `/review` for a fresh semantic impact review: user intent, affected domains, downstream consumers, missing state transitions, scenario evidence, and residual risks. The review is controller context, not a parser-owned completion gate.
82
+ - `tasks/reviews/<plan-stem>.review.md` may cite the contract, implementation notes, checks file, run snapshot, and manual observations when they clarify the impact review.
83
83
  - `tasks/notes/<plan-stem>.notes.md` captures task-local decisions and should be archived or promoted deliberately, not left as hidden long-term memory.
84
84
 
85
85
  ## Worktree Lifecycle
86
86
 
87
87
  - When `.ai/harness/policy.json` has `worktree_strategy.auto_for_contract_tasks: true`, `.ai/harness/scripts/plan-to-todo.sh --plan <approved-plan>` starts a linked `codex/<slug>` worktree instead of mutating the primary tree.
88
88
  - Execute the sprint in that linked worktree. The primary worktree remains a merge target and must stay clean before merge-back.
89
- - After implementation, run Waza `/check` so the review file recommends pass, record passing `## External Acceptance Advice` from the peer reviewer or a concrete manual override, then run `.ai/harness/scripts/contract-worktree.sh finish`. The finish command gates on external acceptance before `verify-sprint.sh`, commits the branch, and fast-forwards the target branch only when the target worktree is clean.
89
+ - After implementation, run Forge `/review` to reassess behavior beyond the changed files, then run `.ai/harness/scripts/contract-worktree.sh finish`. Completion uses direct contract checks and declared scope; the finish command commits the branch and fast-forwards the target only when that target worktree is clean.
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.5.1",
3
- "templateVersion": "1.5.1",
2
+ "version": "1.7.0",
3
+ "templateVersion": "1.7.0",
4
4
  "skillName": "forge",
5
5
  "contractId": "tasks-first-harness-v1",
6
6
  "compatibility": {
@@ -27,7 +27,7 @@ Describe the exact outcome this task must deliver.
27
27
  - Checks file: `.ai/harness/checks/latest.json`
28
28
  - Run snapshots: `.ai/harness/runs/`
29
29
  - Scope gate: edit only paths listed under `allowed_paths`; update this contract before widening scope.
30
- - 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.
30
+ - Completion evidence: `scripts/verify-sprint.sh` reports this contract's direct checks and declared scope. Then perform a fresh semantic impact review.
31
31
 
32
32
  ## Allowed Paths
33
33
 
@@ -84,12 +84,7 @@ exit_criteria:
84
84
  tests_pass:
85
85
  - path: tests/unit/{{TASK_SLUG}}.test.ts
86
86
  commands_succeed:
87
- - bun run typecheck
88
- qa_scores:
89
- - dimension: functionality
90
- min: 7
91
- manual_checks:
92
- - "Evaluator review file recommends pass"
87
+ - bun run check:type
93
88
  ```
94
89
 
95
90
  ## Acceptance Notes (Human Review)
@@ -302,8 +302,8 @@ See captured planning output.
302
302
 
303
303
  - **State/progress path**: \`${plan_file}\` task breakdown, \`tasks/todos.md\` deferred-goal ledger, \`tasks/contracts/${artifact_stem}.contract.md\`, \`tasks/reviews/${artifact_stem}.review.md\`, and \`tasks/notes/${artifact_stem}.notes.md\`
304
304
  - **Verification evidence**: \`.ai/harness/checks/latest.json\`, \`.ai/harness/runs/\`, and the commands named in the captured planning output
305
- - **Evaluator rubric**: \`tasks/reviews/${artifact_stem}.review.md\` must record a passing Forge /review style recommendation
306
- - **Stop condition**: all task breakdown items are complete, sprint verification passes, and the review recommends pass
305
+ - **Impact review**: after direct checks, reassess user intent, affected domains, downstream consumers, state transitions, and residual risks
306
+ - **Stop condition**: all task breakdown items are complete and sprint verification reports direct checks plus declared scope passing
307
307
  - **Rollback surface**: before execution remove \`${plan_file}\`; after execution revert branch \`codex/${slug}\` or the generated task artifacts
308
308
 
309
309
  ## Captured Planning Output
@@ -161,7 +161,7 @@ plan_evidence_contract_error() {
161
161
  fi
162
162
 
163
163
  local label line value
164
- for label in "State/progress path" "Verification evidence" "Evaluator rubric" "Stop condition" "Rollback surface"; do
164
+ for label in "State/progress path" "Verification evidence" "Impact review|Evaluator rubric" "Stop condition" "Rollback surface"; do
165
165
  line="$(printf '%s\n' "$section" | grep -Ei "^[[:space:]]*-[[:space:]]*(\\*\\*)?${label}(\\*\\*)?[[:space:]]*:" | head -1 || true)"
166
166
  if [[ -z "$line" ]]; then
167
167
  echo "missing field: ${label}"
@@ -189,7 +189,7 @@ check_plan_template_evidence_contract() {
189
189
  return
190
190
  }
191
191
 
192
- for label in "State/progress path" "Verification evidence" "Evaluator rubric" "Stop condition" "Rollback surface"; do
192
+ for label in "State/progress path" "Verification evidence" "Impact review" "Stop condition" "Rollback surface"; do
193
193
  if ! grep -Eiq "^[[:space:]]*-[[:space:]]*(\\*\\*)?${label}(\\*\\*)?[[:space:]]*:" "$file"; then
194
194
  report_issue "Plan template Evidence Contract is missing field '${label}': $file"
195
195
  fi
@@ -668,11 +668,11 @@ check_helper_runtime_files() {
668
668
  new-spec.sh new-sprint.sh new-plan.sh capture-plan.sh plan-to-todo.sh
669
669
  contract-run.ts contract-worktree.sh ship-worktrees.sh archive-workflow.sh
670
670
  refresh-current-status.sh prepare-handoff.sh verify-contract.sh summarize-failures.sh
671
- verify-sprint.sh harness-trace-grade.sh sprint-backlog.sh check-task-sync.sh check-deploy-sql-order.sh
671
+ verify-sprint.sh sprint-backlog.sh check-task-sync.sh check-deploy-sql-order.sh
672
672
  check-architecture-sync.sh check-agent-tooling.sh check-context-files.sh
673
673
  check-brain-manifest.sh sync-brain-docs.sh check-skill-version.ts
674
674
  select-agent-context-blocks.sh ensure-task-workflow.sh check-task-workflow.sh
675
- maintenance-triage.sh heartbeat-triage.sh switch-plan.sh workflow-contract.ts
675
+ switch-plan.sh workflow-contract.ts
676
676
  inspect-project-state.ts migrate-workflow-docs.ts migrate-project-template.sh
677
677
  capability-resolver.ts architecture-event.ts capability-config.ts architecture-queue.sh
678
678
  archive-architecture-request.sh context-contract-sync.sh workstream-sync.sh
@@ -456,8 +456,7 @@ finish_worktree() {
456
456
  exit 1
457
457
  fi
458
458
 
459
- local current_branch slug active_plan contract_file review_file target_worktree artifact_stem
460
- local external_status external_state external_reviewer external_source external_message
459
+ local current_branch slug active_plan contract_file target_worktree artifact_stem
461
460
  current_branch="$(git branch --show-current)"
462
461
  [[ -n "$current_branch" ]] || { echo "contract-worktree: detached HEAD is not supported" >&2; exit 1; }
463
462
  [[ "$current_branch" != "$target_branch" ]] || { echo "contract-worktree: already on target branch $target_branch" >&2; exit 1; }
@@ -470,7 +469,6 @@ finish_worktree() {
470
469
  active_plan="$(get_active_plan || true)"
471
470
  if [[ -n "$active_plan" ]]; then
472
471
  contract_file="$(workflow_active_contract || true)"
473
- review_file="$(workflow_active_review || true)"
474
472
  fi
475
473
  fi
476
474
 
@@ -483,27 +481,9 @@ finish_worktree() {
483
481
  contract_file="tasks/contracts/${artifact_stem}.contract.md"
484
482
  fi
485
483
  fi
486
- if [[ -n "${active_plan:-}" && -z "${review_file:-}" ]]; then
487
- artifact_stem="${artifact_stem:-$(derive_artifact_stem_from_plan "$active_plan")}"
488
- if [[ -f "tasks/reviews/${artifact_stem}.review.md" ]] || [[ ! -f "tasks/reviews/${slug}.review.md" ]]; then
489
- review_file="tasks/reviews/${artifact_stem}.review.md"
490
- fi
491
- fi
492
484
  contract_file="${contract_file:-tasks/contracts/${slug}.contract.md}"
493
- review_file="${review_file:-tasks/reviews/${slug}.review.md}"
494
485
 
495
486
  [[ -n "$contract_file" && -f "$contract_file" ]] || { echo "contract-worktree: no active sprint contract found" >&2; exit 1; }
496
- [[ -n "$review_file" && -f "$review_file" ]] || { echo "contract-worktree: no active sprint review found" >&2; exit 1; }
497
-
498
- if declare -F workflow_external_acceptance_status >/dev/null 2>&1; then
499
- external_status="$(workflow_external_acceptance_status "$review_file")"
500
- IFS=$'\t' read -r external_state external_reviewer external_source external_message <<< "$external_status"
501
- if [[ "$external_state" != "pass" && "$external_state" != "manual_override" ]]; then
502
- echo "contract-worktree: external acceptance gate failed: ${external_message:-missing external acceptance}" >&2
503
- echo "contract-worktree: record ## External Acceptance Advice in $review_file via $(workflow_external_acceptance_expected_source) before finish" >&2
504
- exit 1
505
- fi
506
- fi
507
487
 
508
488
  check_architecture_freshness "$target_branch"
509
489
  bash "scripts/verify-sprint.sh"
@@ -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
 
@@ -444,7 +444,7 @@ exit_criteria:
444
444
  tests_pass:
445
445
  - path: tests/unit/{{TASK_SLUG}}.test.ts
446
446
  commands_succeed:
447
- - bun run typecheck
447
+ - bun run check:type
448
448
  files_contain:
449
449
  - path: src/modules/{{TASK_SLUG}}/index.ts
450
450
  pattern: "export"
@@ -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
  - ...
@@ -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,