codex-orchestrator 0.1.51 → 2.0.1

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 (570) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +45 -389
  3. package/dist/src/index.d.ts +16 -46
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +8 -24
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/v2/acceptance-proof.d.ts +111 -0
  8. package/dist/src/v2/acceptance-proof.d.ts.map +1 -0
  9. package/dist/src/v2/acceptance-proof.js +427 -0
  10. package/dist/src/v2/acceptance-proof.js.map +1 -0
  11. package/dist/src/v2/adapters/command.d.ts.map +1 -0
  12. package/dist/src/v2/adapters/command.js.map +1 -0
  13. package/dist/src/v2/adapters/durable-atomic-file.d.ts.map +1 -0
  14. package/dist/src/v2/adapters/durable-atomic-file.js.map +1 -0
  15. package/dist/src/v2/adapters/gh-cli.d.ts.map +1 -0
  16. package/dist/src/v2/adapters/gh-cli.js.map +1 -0
  17. package/dist/src/v2/adapters/gh-issue-adapter.d.ts.map +1 -0
  18. package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -0
  19. package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts.map +1 -0
  20. package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -0
  21. package/dist/src/v2/adapters/issues.d.ts.map +1 -0
  22. package/dist/src/v2/adapters/issues.js.map +1 -0
  23. package/dist/src/v2/adapters/mission-coordinator-lock.d.ts.map +1 -0
  24. package/dist/src/v2/adapters/mission-coordinator-lock.js.map +1 -0
  25. package/dist/src/v2/adapters/path-policy.d.ts.map +1 -0
  26. package/dist/src/v2/adapters/path-policy.js.map +1 -0
  27. package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -0
  28. package/dist/src/v2/adapters/pull-requests.js.map +1 -0
  29. package/dist/src/v2/adapters/target-activity-fence.d.ts.map +1 -0
  30. package/dist/src/{runner → v2/adapters}/target-activity-fence.js +1 -1
  31. package/dist/src/v2/adapters/target-activity-fence.js.map +1 -0
  32. package/dist/src/{git → v2/adapters}/worktree.d.ts +1 -1
  33. package/dist/src/v2/adapters/worktree.d.ts.map +1 -0
  34. package/dist/src/{git → v2/adapters}/worktree.js +2 -2
  35. package/dist/src/v2/adapters/worktree.js.map +1 -0
  36. package/dist/src/v2/atomic-store.d.ts +36 -0
  37. package/dist/src/v2/atomic-store.d.ts.map +1 -0
  38. package/dist/src/v2/atomic-store.js +328 -0
  39. package/dist/src/v2/atomic-store.js.map +1 -0
  40. package/dist/src/v2/candidate-cli.d.ts +22 -0
  41. package/dist/src/v2/candidate-cli.d.ts.map +1 -0
  42. package/dist/src/v2/candidate-cli.js +161 -0
  43. package/dist/src/v2/candidate-cli.js.map +1 -0
  44. package/dist/src/v2/checked-change.d.ts +49 -0
  45. package/dist/src/v2/checked-change.d.ts.map +1 -0
  46. package/dist/src/v2/checked-change.js +139 -0
  47. package/dist/src/v2/checked-change.js.map +1 -0
  48. package/dist/src/v2/cli-contract.d.ts +8 -0
  49. package/dist/src/v2/cli-contract.d.ts.map +1 -0
  50. package/dist/src/v2/cli-contract.js +32 -0
  51. package/dist/src/v2/cli-contract.js.map +1 -0
  52. package/dist/src/v2/codex-process.d.ts +71 -0
  53. package/dist/src/v2/codex-process.d.ts.map +1 -0
  54. package/dist/src/v2/codex-process.js +404 -0
  55. package/dist/src/v2/codex-process.js.map +1 -0
  56. package/dist/src/v2/config.d.ts +45 -0
  57. package/dist/src/v2/config.d.ts.map +1 -0
  58. package/dist/src/v2/config.js +139 -0
  59. package/dist/src/v2/config.js.map +1 -0
  60. package/dist/src/v2/containment.d.ts +55 -0
  61. package/dist/src/v2/containment.d.ts.map +1 -0
  62. package/dist/src/v2/containment.js +370 -0
  63. package/dist/src/v2/containment.js.map +1 -0
  64. package/dist/src/v2/implementation-report.d.ts +18 -0
  65. package/dist/src/v2/implementation-report.d.ts.map +1 -0
  66. package/dist/src/v2/implementation-report.js +147 -0
  67. package/dist/src/v2/implementation-report.js.map +1 -0
  68. package/dist/src/v2/legacy-cutover.d.ts +52 -0
  69. package/dist/src/v2/legacy-cutover.d.ts.map +1 -0
  70. package/dist/src/v2/legacy-cutover.js +87 -0
  71. package/dist/src/v2/legacy-cutover.js.map +1 -0
  72. package/dist/src/v2/mobile-lease.d.ts +97 -0
  73. package/dist/src/v2/mobile-lease.d.ts.map +1 -0
  74. package/dist/src/v2/mobile-lease.js +253 -0
  75. package/dist/src/v2/mobile-lease.js.map +1 -0
  76. package/dist/src/v2/proof-report.d.ts +118 -0
  77. package/dist/src/v2/proof-report.d.ts.map +1 -0
  78. package/dist/src/v2/proof-report.js +703 -0
  79. package/dist/src/v2/proof-report.js.map +1 -0
  80. package/dist/src/v2/proof-store.d.ts +42 -0
  81. package/dist/src/v2/proof-store.d.ts.map +1 -0
  82. package/dist/src/v2/proof-store.js +180 -0
  83. package/dist/src/v2/proof-store.js.map +1 -0
  84. package/dist/src/v2/report-envelope.d.ts +4 -0
  85. package/dist/src/v2/report-envelope.d.ts.map +1 -0
  86. package/dist/src/v2/report-envelope.js +46 -0
  87. package/dist/src/v2/report-envelope.js.map +1 -0
  88. package/dist/src/v2/run-issue.d.ts +213 -0
  89. package/dist/src/v2/run-issue.d.ts.map +1 -0
  90. package/dist/src/v2/run-issue.js +906 -0
  91. package/dist/src/v2/run-issue.js.map +1 -0
  92. package/dist/src/v2/run-store.d.ts +136 -0
  93. package/dist/src/v2/run-store.d.ts.map +1 -0
  94. package/dist/src/v2/run-store.js +346 -0
  95. package/dist/src/v2/run-store.js.map +1 -0
  96. package/dist/src/v2/runtime-assets.d.ts +31 -0
  97. package/dist/src/v2/runtime-assets.d.ts.map +1 -0
  98. package/dist/src/v2/runtime-assets.js +473 -0
  99. package/dist/src/v2/runtime-assets.js.map +1 -0
  100. package/dist/src/v2/runtime.d.ts +137 -0
  101. package/dist/src/v2/runtime.d.ts.map +1 -0
  102. package/dist/src/v2/runtime.js +847 -0
  103. package/dist/src/v2/runtime.js.map +1 -0
  104. package/dist/src/v2/setup-cli.d.ts +5 -0
  105. package/dist/src/v2/setup-cli.d.ts.map +1 -0
  106. package/dist/src/v2/setup-cli.js +83 -0
  107. package/dist/src/v2/setup-cli.js.map +1 -0
  108. package/dist/src/v2/setup-runtime.d.ts +6 -0
  109. package/dist/src/v2/setup-runtime.d.ts.map +1 -0
  110. package/dist/src/v2/setup-runtime.js +213 -0
  111. package/dist/src/v2/setup-runtime.js.map +1 -0
  112. package/dist/src/v2/setup-store.d.ts +19 -0
  113. package/dist/src/v2/setup-store.d.ts.map +1 -0
  114. package/dist/src/v2/setup-store.js +208 -0
  115. package/dist/src/v2/setup-store.js.map +1 -0
  116. package/dist/src/v2/setup.d.ts +147 -0
  117. package/dist/src/v2/setup.d.ts.map +1 -0
  118. package/dist/src/v2/setup.js +529 -0
  119. package/dist/src/v2/setup.js.map +1 -0
  120. package/docs/deep-dive.md +54 -803
  121. package/internal-skills/acceptance-proof/SKILL.md +14 -0
  122. package/internal-skills/acceptance-proof/references/android.md +14 -0
  123. package/internal-skills/acceptance-proof/references/browser.md +13 -0
  124. package/internal-skills/acceptance-proof/references/ios.md +14 -0
  125. package/internal-skills/acceptance-proof/tools/android-lease.mjs +280 -0
  126. package/internal-skills/acceptance-proof/tools/ios-lease.mjs +288 -0
  127. package/internal-skills/agent-auto/SKILL.md +14 -0
  128. package/package.json +11 -18
  129. package/bridge-runtime.json +0 -2719
  130. package/dist/src/bridge-runtime.d.ts +0 -17
  131. package/dist/src/bridge-runtime.d.ts.map +0 -1
  132. package/dist/src/bridge-runtime.js +0 -170
  133. package/dist/src/bridge-runtime.js.map +0 -1
  134. package/dist/src/cli.d.ts +0 -3
  135. package/dist/src/cli.d.ts.map +0 -1
  136. package/dist/src/cli.js +0 -569
  137. package/dist/src/cli.js.map +0 -1
  138. package/dist/src/codex/command-adapter.d.ts +0 -47
  139. package/dist/src/codex/command-adapter.d.ts.map +0 -1
  140. package/dist/src/codex/command-adapter.js +0 -169
  141. package/dist/src/codex/command-adapter.js.map +0 -1
  142. package/dist/src/codex/mobile-device-guard.d.ts +0 -7
  143. package/dist/src/codex/mobile-device-guard.d.ts.map +0 -1
  144. package/dist/src/codex/mobile-device-guard.js +0 -63
  145. package/dist/src/codex/mobile-device-guard.js.map +0 -1
  146. package/dist/src/config/constants.d.ts +0 -6
  147. package/dist/src/config/constants.d.ts.map +0 -1
  148. package/dist/src/config/constants.js +0 -19
  149. package/dist/src/config/constants.js.map +0 -1
  150. package/dist/src/config/schema.d.ts +0 -234
  151. package/dist/src/config/schema.d.ts.map +0 -1
  152. package/dist/src/config/schema.js +0 -673
  153. package/dist/src/config/schema.js.map +0 -1
  154. package/dist/src/fs/durable-atomic-file.d.ts.map +0 -1
  155. package/dist/src/fs/durable-atomic-file.js.map +0 -1
  156. package/dist/src/git/base-branch.d.ts +0 -26
  157. package/dist/src/git/base-branch.d.ts.map +0 -1
  158. package/dist/src/git/base-branch.js +0 -45
  159. package/dist/src/git/base-branch.js.map +0 -1
  160. package/dist/src/git/worktree.d.ts.map +0 -1
  161. package/dist/src/git/worktree.js.map +0 -1
  162. package/dist/src/github/gh-cli.d.ts.map +0 -1
  163. package/dist/src/github/gh-cli.js.map +0 -1
  164. package/dist/src/github/gh-issue-adapter.d.ts.map +0 -1
  165. package/dist/src/github/gh-issue-adapter.js.map +0 -1
  166. package/dist/src/github/gh-pull-request-adapter.d.ts.map +0 -1
  167. package/dist/src/github/gh-pull-request-adapter.js.map +0 -1
  168. package/dist/src/github/issues.d.ts.map +0 -1
  169. package/dist/src/github/issues.js.map +0 -1
  170. package/dist/src/github/pull-requests.d.ts.map +0 -1
  171. package/dist/src/github/pull-requests.js.map +0 -1
  172. package/dist/src/package-info.d.ts +0 -6
  173. package/dist/src/package-info.d.ts.map +0 -1
  174. package/dist/src/package-info.js +0 -13
  175. package/dist/src/package-info.js.map +0 -1
  176. package/dist/src/path-policy.d.ts.map +0 -1
  177. package/dist/src/path-policy.js.map +0 -1
  178. package/dist/src/process/command.d.ts.map +0 -1
  179. package/dist/src/process/command.js.map +0 -1
  180. package/dist/src/review-handoff.d.ts +0 -3
  181. package/dist/src/review-handoff.d.ts.map +0 -1
  182. package/dist/src/review-handoff.js +0 -8
  183. package/dist/src/review-handoff.js.map +0 -1
  184. package/dist/src/runner/acceptance-proof-loop.d.ts +0 -97
  185. package/dist/src/runner/acceptance-proof-loop.d.ts.map +0 -1
  186. package/dist/src/runner/acceptance-proof-loop.js +0 -404
  187. package/dist/src/runner/acceptance-proof-loop.js.map +0 -1
  188. package/dist/src/runner/acceptance-proof-runner.d.ts +0 -24
  189. package/dist/src/runner/acceptance-proof-runner.d.ts.map +0 -1
  190. package/dist/src/runner/acceptance-proof-runner.js +0 -121
  191. package/dist/src/runner/acceptance-proof-runner.js.map +0 -1
  192. package/dist/src/runner/acceptance-proof.d.ts +0 -189
  193. package/dist/src/runner/acceptance-proof.d.ts.map +0 -1
  194. package/dist/src/runner/acceptance-proof.js +0 -594
  195. package/dist/src/runner/acceptance-proof.js.map +0 -1
  196. package/dist/src/runner/agent-attempt.d.ts +0 -105
  197. package/dist/src/runner/agent-attempt.d.ts.map +0 -1
  198. package/dist/src/runner/agent-attempt.js +0 -245
  199. package/dist/src/runner/agent-attempt.js.map +0 -1
  200. package/dist/src/runner/android-visual-proof-command.d.ts +0 -26
  201. package/dist/src/runner/android-visual-proof-command.d.ts.map +0 -1
  202. package/dist/src/runner/android-visual-proof-command.js +0 -592
  203. package/dist/src/runner/android-visual-proof-command.js.map +0 -1
  204. package/dist/src/runner/auto-visual-proof-command.d.ts +0 -15
  205. package/dist/src/runner/auto-visual-proof-command.d.ts.map +0 -1
  206. package/dist/src/runner/auto-visual-proof-command.js +0 -64
  207. package/dist/src/runner/auto-visual-proof-command.js.map +0 -1
  208. package/dist/src/runner/browser-proof-contract.d.ts +0 -134
  209. package/dist/src/runner/browser-proof-contract.d.ts.map +0 -1
  210. package/dist/src/runner/browser-proof-contract.js +0 -400
  211. package/dist/src/runner/browser-proof-contract.js.map +0 -1
  212. package/dist/src/runner/browser-visual-proof-command.d.ts +0 -101
  213. package/dist/src/runner/browser-visual-proof-command.d.ts.map +0 -1
  214. package/dist/src/runner/browser-visual-proof-command.js +0 -532
  215. package/dist/src/runner/browser-visual-proof-command.js.map +0 -1
  216. package/dist/src/runner/command-utils.d.ts +0 -15
  217. package/dist/src/runner/command-utils.d.ts.map +0 -1
  218. package/dist/src/runner/command-utils.js +0 -228
  219. package/dist/src/runner/command-utils.js.map +0 -1
  220. package/dist/src/runner/completion-report.d.ts +0 -121
  221. package/dist/src/runner/completion-report.d.ts.map +0 -1
  222. package/dist/src/runner/completion-report.js +0 -381
  223. package/dist/src/runner/completion-report.js.map +0 -1
  224. package/dist/src/runner/context-snapshot.d.ts +0 -33
  225. package/dist/src/runner/context-snapshot.d.ts.map +0 -1
  226. package/dist/src/runner/context-snapshot.js +0 -99
  227. package/dist/src/runner/context-snapshot.js.map +0 -1
  228. package/dist/src/runner/daemon-command.d.ts +0 -30
  229. package/dist/src/runner/daemon-command.d.ts.map +0 -1
  230. package/dist/src/runner/daemon-command.js +0 -262
  231. package/dist/src/runner/daemon-command.js.map +0 -1
  232. package/dist/src/runner/doctor-command.d.ts +0 -41
  233. package/dist/src/runner/doctor-command.d.ts.map +0 -1
  234. package/dist/src/runner/doctor-command.js +0 -177
  235. package/dist/src/runner/doctor-command.js.map +0 -1
  236. package/dist/src/runner/durable-run-summary.d.ts +0 -80
  237. package/dist/src/runner/durable-run-summary.d.ts.map +0 -1
  238. package/dist/src/runner/durable-run-summary.js +0 -200
  239. package/dist/src/runner/durable-run-summary.js.map +0 -1
  240. package/dist/src/runner/flutter-sdk-discovery.d.ts +0 -5
  241. package/dist/src/runner/flutter-sdk-discovery.d.ts.map +0 -1
  242. package/dist/src/runner/flutter-sdk-discovery.js +0 -103
  243. package/dist/src/runner/flutter-sdk-discovery.js.map +0 -1
  244. package/dist/src/runner/fresh-context-review.d.ts +0 -22
  245. package/dist/src/runner/fresh-context-review.d.ts.map +0 -1
  246. package/dist/src/runner/fresh-context-review.js +0 -177
  247. package/dist/src/runner/fresh-context-review.js.map +0 -1
  248. package/dist/src/runner/handoff-evidence.d.ts +0 -141
  249. package/dist/src/runner/handoff-evidence.d.ts.map +0 -1
  250. package/dist/src/runner/handoff-evidence.js +0 -543
  251. package/dist/src/runner/handoff-evidence.js.map +0 -1
  252. package/dist/src/runner/hygiene-cleanup.d.ts +0 -15
  253. package/dist/src/runner/hygiene-cleanup.d.ts.map +0 -1
  254. package/dist/src/runner/hygiene-cleanup.js +0 -25
  255. package/dist/src/runner/hygiene-cleanup.js.map +0 -1
  256. package/dist/src/runner/ios-visual-proof-command.d.ts +0 -25
  257. package/dist/src/runner/ios-visual-proof-command.d.ts.map +0 -1
  258. package/dist/src/runner/ios-visual-proof-command.js +0 -353
  259. package/dist/src/runner/ios-visual-proof-command.js.map +0 -1
  260. package/dist/src/runner/issue-state-machine.d.ts +0 -39
  261. package/dist/src/runner/issue-state-machine.d.ts.map +0 -1
  262. package/dist/src/runner/issue-state-machine.js +0 -124
  263. package/dist/src/runner/issue-state-machine.js.map +0 -1
  264. package/dist/src/runner/issue-tree.d.ts +0 -65
  265. package/dist/src/runner/issue-tree.d.ts.map +0 -1
  266. package/dist/src/runner/issue-tree.js +0 -474
  267. package/dist/src/runner/issue-tree.js.map +0 -1
  268. package/dist/src/runner/lifecycle-events.d.ts +0 -44
  269. package/dist/src/runner/lifecycle-events.d.ts.map +0 -1
  270. package/dist/src/runner/lifecycle-events.js +0 -108
  271. package/dist/src/runner/lifecycle-events.js.map +0 -1
  272. package/dist/src/runner/local-execution-session.d.ts +0 -112
  273. package/dist/src/runner/local-execution-session.d.ts.map +0 -1
  274. package/dist/src/runner/local-execution-session.js +0 -1064
  275. package/dist/src/runner/local-execution-session.js.map +0 -1
  276. package/dist/src/runner/local-state.d.ts +0 -44
  277. package/dist/src/runner/local-state.d.ts.map +0 -1
  278. package/dist/src/runner/local-state.js +0 -150
  279. package/dist/src/runner/local-state.js.map +0 -1
  280. package/dist/src/runner/mission-activation.d.ts +0 -29
  281. package/dist/src/runner/mission-activation.d.ts.map +0 -1
  282. package/dist/src/runner/mission-activation.js +0 -54
  283. package/dist/src/runner/mission-activation.js.map +0 -1
  284. package/dist/src/runner/mission-agent-broker.d.ts +0 -53
  285. package/dist/src/runner/mission-agent-broker.d.ts.map +0 -1
  286. package/dist/src/runner/mission-agent-broker.js +0 -182
  287. package/dist/src/runner/mission-agent-broker.js.map +0 -1
  288. package/dist/src/runner/mission-cancellation.d.ts +0 -77
  289. package/dist/src/runner/mission-cancellation.d.ts.map +0 -1
  290. package/dist/src/runner/mission-cancellation.js +0 -180
  291. package/dist/src/runner/mission-cancellation.js.map +0 -1
  292. package/dist/src/runner/mission-canonical-path.d.ts +0 -34
  293. package/dist/src/runner/mission-canonical-path.d.ts.map +0 -1
  294. package/dist/src/runner/mission-canonical-path.js +0 -121
  295. package/dist/src/runner/mission-canonical-path.js.map +0 -1
  296. package/dist/src/runner/mission-capability-kernel.d.ts +0 -34
  297. package/dist/src/runner/mission-capability-kernel.d.ts.map +0 -1
  298. package/dist/src/runner/mission-capability-kernel.js +0 -158
  299. package/dist/src/runner/mission-capability-kernel.js.map +0 -1
  300. package/dist/src/runner/mission-check-policy.d.ts +0 -17
  301. package/dist/src/runner/mission-check-policy.d.ts.map +0 -1
  302. package/dist/src/runner/mission-check-policy.js +0 -31
  303. package/dist/src/runner/mission-check-policy.js.map +0 -1
  304. package/dist/src/runner/mission-coordinator-lock.d.ts.map +0 -1
  305. package/dist/src/runner/mission-coordinator-lock.js.map +0 -1
  306. package/dist/src/runner/mission-deployment.d.ts +0 -21
  307. package/dist/src/runner/mission-deployment.d.ts.map +0 -1
  308. package/dist/src/runner/mission-deployment.js +0 -108
  309. package/dist/src/runner/mission-deployment.js.map +0 -1
  310. package/dist/src/runner/mission-evaluation.d.ts +0 -61
  311. package/dist/src/runner/mission-evaluation.d.ts.map +0 -1
  312. package/dist/src/runner/mission-evaluation.js +0 -183
  313. package/dist/src/runner/mission-evaluation.js.map +0 -1
  314. package/dist/src/runner/mission-executor-probe.d.ts +0 -10
  315. package/dist/src/runner/mission-executor-probe.d.ts.map +0 -1
  316. package/dist/src/runner/mission-executor-probe.js +0 -180
  317. package/dist/src/runner/mission-executor-probe.js.map +0 -1
  318. package/dist/src/runner/mission-git-contracts.d.ts +0 -75
  319. package/dist/src/runner/mission-git-contracts.d.ts.map +0 -1
  320. package/dist/src/runner/mission-git-contracts.js +0 -201
  321. package/dist/src/runner/mission-git-contracts.js.map +0 -1
  322. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts +0 -13
  323. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts.map +0 -1
  324. package/dist/src/runner/mission-git-runtime-owner-ref.js +0 -111
  325. package/dist/src/runner/mission-git-runtime-owner-ref.js.map +0 -1
  326. package/dist/src/runner/mission-git-transaction.d.ts +0 -97
  327. package/dist/src/runner/mission-git-transaction.d.ts.map +0 -1
  328. package/dist/src/runner/mission-git-transaction.js +0 -1009
  329. package/dist/src/runner/mission-git-transaction.js.map +0 -1
  330. package/dist/src/runner/mission-identifiers.d.ts +0 -31
  331. package/dist/src/runner/mission-identifiers.d.ts.map +0 -1
  332. package/dist/src/runner/mission-identifiers.js +0 -75
  333. package/dist/src/runner/mission-identifiers.js.map +0 -1
  334. package/dist/src/runner/mission-input-snapshot.d.ts +0 -21
  335. package/dist/src/runner/mission-input-snapshot.d.ts.map +0 -1
  336. package/dist/src/runner/mission-input-snapshot.js +0 -63
  337. package/dist/src/runner/mission-input-snapshot.js.map +0 -1
  338. package/dist/src/runner/mission-ownership.d.ts +0 -38
  339. package/dist/src/runner/mission-ownership.d.ts.map +0 -1
  340. package/dist/src/runner/mission-ownership.js +0 -88
  341. package/dist/src/runner/mission-ownership.js.map +0 -1
  342. package/dist/src/runner/mission-patch-audit.d.ts +0 -21
  343. package/dist/src/runner/mission-patch-audit.d.ts.map +0 -1
  344. package/dist/src/runner/mission-patch-audit.js +0 -186
  345. package/dist/src/runner/mission-patch-audit.js.map +0 -1
  346. package/dist/src/runner/mission-path-language.d.ts +0 -6
  347. package/dist/src/runner/mission-path-language.d.ts.map +0 -1
  348. package/dist/src/runner/mission-path-language.js +0 -106
  349. package/dist/src/runner/mission-path-language.js.map +0 -1
  350. package/dist/src/runner/mission-permit-authority.d.ts +0 -26
  351. package/dist/src/runner/mission-permit-authority.d.ts.map +0 -1
  352. package/dist/src/runner/mission-permit-authority.js +0 -145
  353. package/dist/src/runner/mission-permit-authority.js.map +0 -1
  354. package/dist/src/runner/mission-plan-parent-coordinator.d.ts +0 -87
  355. package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +0 -1
  356. package/dist/src/runner/mission-plan-parent-coordinator.js +0 -441
  357. package/dist/src/runner/mission-plan-parent-coordinator.js.map +0 -1
  358. package/dist/src/runner/mission-plan-parent.d.ts +0 -156
  359. package/dist/src/runner/mission-plan-parent.d.ts.map +0 -1
  360. package/dist/src/runner/mission-plan-parent.js +0 -589
  361. package/dist/src/runner/mission-plan-parent.js.map +0 -1
  362. package/dist/src/runner/mission-process-executor.d.ts +0 -25
  363. package/dist/src/runner/mission-process-executor.d.ts.map +0 -1
  364. package/dist/src/runner/mission-process-executor.js +0 -182
  365. package/dist/src/runner/mission-process-executor.js.map +0 -1
  366. package/dist/src/runner/mission-publication-git.d.ts +0 -21
  367. package/dist/src/runner/mission-publication-git.d.ts.map +0 -1
  368. package/dist/src/runner/mission-publication-git.js +0 -61
  369. package/dist/src/runner/mission-publication-git.js.map +0 -1
  370. package/dist/src/runner/mission-publication.d.ts +0 -192
  371. package/dist/src/runner/mission-publication.d.ts.map +0 -1
  372. package/dist/src/runner/mission-publication.js +0 -1001
  373. package/dist/src/runner/mission-publication.js.map +0 -1
  374. package/dist/src/runner/mission-quarantine-patch-executor.d.ts +0 -29
  375. package/dist/src/runner/mission-quarantine-patch-executor.d.ts.map +0 -1
  376. package/dist/src/runner/mission-quarantine-patch-executor.js +0 -121
  377. package/dist/src/runner/mission-quarantine-patch-executor.js.map +0 -1
  378. package/dist/src/runner/mission-repository-executor.d.ts +0 -54
  379. package/dist/src/runner/mission-repository-executor.d.ts.map +0 -1
  380. package/dist/src/runner/mission-repository-executor.js +0 -192
  381. package/dist/src/runner/mission-repository-executor.js.map +0 -1
  382. package/dist/src/runner/mission-repository-observer.d.ts +0 -8
  383. package/dist/src/runner/mission-repository-observer.d.ts.map +0 -1
  384. package/dist/src/runner/mission-repository-observer.js +0 -24
  385. package/dist/src/runner/mission-repository-observer.js.map +0 -1
  386. package/dist/src/runner/mission-reservations.d.ts +0 -15
  387. package/dist/src/runner/mission-reservations.d.ts.map +0 -1
  388. package/dist/src/runner/mission-reservations.js +0 -116
  389. package/dist/src/runner/mission-reservations.js.map +0 -1
  390. package/dist/src/runner/mission-resolution-loop.d.ts +0 -172
  391. package/dist/src/runner/mission-resolution-loop.d.ts.map +0 -1
  392. package/dist/src/runner/mission-resolution-loop.js +0 -318
  393. package/dist/src/runner/mission-resolution-loop.js.map +0 -1
  394. package/dist/src/runner/mission-runtime-owner.d.ts +0 -36
  395. package/dist/src/runner/mission-runtime-owner.d.ts.map +0 -1
  396. package/dist/src/runner/mission-runtime-owner.js +0 -174
  397. package/dist/src/runner/mission-runtime-owner.js.map +0 -1
  398. package/dist/src/runner/mission-safe-executor.d.ts +0 -96
  399. package/dist/src/runner/mission-safe-executor.d.ts.map +0 -1
  400. package/dist/src/runner/mission-safe-executor.js +0 -288
  401. package/dist/src/runner/mission-safe-executor.js.map +0 -1
  402. package/dist/src/runner/mission-sandbox.d.ts +0 -16
  403. package/dist/src/runner/mission-sandbox.d.ts.map +0 -1
  404. package/dist/src/runner/mission-sandbox.js +0 -91
  405. package/dist/src/runner/mission-sandbox.js.map +0 -1
  406. package/dist/src/runner/mission-scheduler.d.ts +0 -57
  407. package/dist/src/runner/mission-scheduler.d.ts.map +0 -1
  408. package/dist/src/runner/mission-scheduler.js +0 -205
  409. package/dist/src/runner/mission-scheduler.js.map +0 -1
  410. package/dist/src/runner/mission-scope-expansion.d.ts +0 -47
  411. package/dist/src/runner/mission-scope-expansion.d.ts.map +0 -1
  412. package/dist/src/runner/mission-scope-expansion.js +0 -147
  413. package/dist/src/runner/mission-scope-expansion.js.map +0 -1
  414. package/dist/src/runner/mission-state-machine.d.ts +0 -118
  415. package/dist/src/runner/mission-state-machine.d.ts.map +0 -1
  416. package/dist/src/runner/mission-state-machine.js +0 -316
  417. package/dist/src/runner/mission-state-machine.js.map +0 -1
  418. package/dist/src/runner/mission-state-store.d.ts +0 -70
  419. package/dist/src/runner/mission-state-store.d.ts.map +0 -1
  420. package/dist/src/runner/mission-state-store.js +0 -916
  421. package/dist/src/runner/mission-state-store.js.map +0 -1
  422. package/dist/src/runner/mobile-device-lease.d.ts +0 -11
  423. package/dist/src/runner/mobile-device-lease.d.ts.map +0 -1
  424. package/dist/src/runner/mobile-device-lease.js +0 -121
  425. package/dist/src/runner/mobile-device-lease.js.map +0 -1
  426. package/dist/src/runner/mobile-visual-proof-command.d.ts +0 -17
  427. package/dist/src/runner/mobile-visual-proof-command.d.ts.map +0 -1
  428. package/dist/src/runner/mobile-visual-proof-command.js +0 -168
  429. package/dist/src/runner/mobile-visual-proof-command.js.map +0 -1
  430. package/dist/src/runner/plan-auto-command.d.ts +0 -35
  431. package/dist/src/runner/plan-auto-command.d.ts.map +0 -1
  432. package/dist/src/runner/plan-auto-command.js +0 -918
  433. package/dist/src/runner/plan-auto-command.js.map +0 -1
  434. package/dist/src/runner/plan-auto-recovery.d.ts +0 -83
  435. package/dist/src/runner/plan-auto-recovery.d.ts.map +0 -1
  436. package/dist/src/runner/plan-auto-recovery.js +0 -303
  437. package/dist/src/runner/plan-auto-recovery.js.map +0 -1
  438. package/dist/src/runner/prompt.d.ts +0 -68
  439. package/dist/src/runner/prompt.d.ts.map +0 -1
  440. package/dist/src/runner/prompt.js +0 -202
  441. package/dist/src/runner/prompt.js.map +0 -1
  442. package/dist/src/runner/proof-routing.d.ts +0 -73
  443. package/dist/src/runner/proof-routing.d.ts.map +0 -1
  444. package/dist/src/runner/proof-routing.js +0 -182
  445. package/dist/src/runner/proof-routing.js.map +0 -1
  446. package/dist/src/runner/proof-strategy.d.ts +0 -21
  447. package/dist/src/runner/proof-strategy.d.ts.map +0 -1
  448. package/dist/src/runner/proof-strategy.js +0 -26
  449. package/dist/src/runner/proof-strategy.js.map +0 -1
  450. package/dist/src/runner/recovery.d.ts +0 -25
  451. package/dist/src/runner/recovery.d.ts.map +0 -1
  452. package/dist/src/runner/recovery.js +0 -89
  453. package/dist/src/runner/recovery.js.map +0 -1
  454. package/dist/src/runner/review-gate-policy.d.ts +0 -13
  455. package/dist/src/runner/review-gate-policy.d.ts.map +0 -1
  456. package/dist/src/runner/review-gate-policy.js +0 -241
  457. package/dist/src/runner/review-gate-policy.js.map +0 -1
  458. package/dist/src/runner/review-gates.d.ts +0 -28
  459. package/dist/src/runner/review-gates.d.ts.map +0 -1
  460. package/dist/src/runner/review-gates.js +0 -328
  461. package/dist/src/runner/review-gates.js.map +0 -1
  462. package/dist/src/runner/rework-policy.d.ts +0 -48
  463. package/dist/src/runner/rework-policy.d.ts.map +0 -1
  464. package/dist/src/runner/rework-policy.js +0 -150
  465. package/dist/src/runner/rework-policy.js.map +0 -1
  466. package/dist/src/runner/run-log.d.ts +0 -18
  467. package/dist/src/runner/run-log.d.ts.map +0 -1
  468. package/dist/src/runner/run-log.js +0 -53
  469. package/dist/src/runner/run-log.js.map +0 -1
  470. package/dist/src/runner/runner-handoff-decision.d.ts +0 -48
  471. package/dist/src/runner/runner-handoff-decision.d.ts.map +0 -1
  472. package/dist/src/runner/runner-handoff-decision.js +0 -93
  473. package/dist/src/runner/runner-handoff-decision.js.map +0 -1
  474. package/dist/src/runner/safety.d.ts +0 -14
  475. package/dist/src/runner/safety.d.ts.map +0 -1
  476. package/dist/src/runner/safety.js +0 -31
  477. package/dist/src/runner/safety.js.map +0 -1
  478. package/dist/src/runner/scope-isolation-policy.d.ts +0 -17
  479. package/dist/src/runner/scope-isolation-policy.d.ts.map +0 -1
  480. package/dist/src/runner/scope-isolation-policy.js +0 -82
  481. package/dist/src/runner/scope-isolation-policy.js.map +0 -1
  482. package/dist/src/runner/scoped-auto-command.d.ts +0 -90
  483. package/dist/src/runner/scoped-auto-command.d.ts.map +0 -1
  484. package/dist/src/runner/scoped-auto-command.js +0 -561
  485. package/dist/src/runner/scoped-auto-command.js.map +0 -1
  486. package/dist/src/runner/scoped-recovery.d.ts +0 -78
  487. package/dist/src/runner/scoped-recovery.d.ts.map +0 -1
  488. package/dist/src/runner/scoped-recovery.js +0 -601
  489. package/dist/src/runner/scoped-recovery.js.map +0 -1
  490. package/dist/src/runner/session-home.d.ts +0 -8
  491. package/dist/src/runner/session-home.d.ts.map +0 -1
  492. package/dist/src/runner/session-home.js +0 -18
  493. package/dist/src/runner/session-home.js.map +0 -1
  494. package/dist/src/runner/status-command.d.ts +0 -38
  495. package/dist/src/runner/status-command.d.ts.map +0 -1
  496. package/dist/src/runner/status-command.js +0 -97
  497. package/dist/src/runner/status-command.js.map +0 -1
  498. package/dist/src/runner/target-activity-fence.d.ts.map +0 -1
  499. package/dist/src/runner/target-activity-fence.js.map +0 -1
  500. package/dist/src/runner/terminal-outcome.d.ts +0 -58
  501. package/dist/src/runner/terminal-outcome.d.ts.map +0 -1
  502. package/dist/src/runner/terminal-outcome.js +0 -73
  503. package/dist/src/runner/terminal-outcome.js.map +0 -1
  504. package/dist/src/runner/visual-proof-runner.d.ts +0 -27
  505. package/dist/src/runner/visual-proof-runner.d.ts.map +0 -1
  506. package/dist/src/runner/visual-proof-runner.js +0 -379
  507. package/dist/src/runner/visual-proof-runner.js.map +0 -1
  508. package/dist/src/runner/worktree-cleanup.d.ts +0 -27
  509. package/dist/src/runner/worktree-cleanup.d.ts.map +0 -1
  510. package/dist/src/runner/worktree-cleanup.js +0 -63
  511. package/dist/src/runner/worktree-cleanup.js.map +0 -1
  512. package/dist/src/setup/codex-command-resolver.d.ts +0 -10
  513. package/dist/src/setup/codex-command-resolver.d.ts.map +0 -1
  514. package/dist/src/setup/codex-command-resolver.js +0 -91
  515. package/dist/src/setup/codex-command-resolver.js.map +0 -1
  516. package/dist/src/setup/github-label-adapter.d.ts +0 -13
  517. package/dist/src/setup/github-label-adapter.d.ts.map +0 -1
  518. package/dist/src/setup/github-label-adapter.js +0 -28
  519. package/dist/src/setup/github-label-adapter.js.map +0 -1
  520. package/dist/src/setup/labels.d.ts +0 -27
  521. package/dist/src/setup/labels.d.ts.map +0 -1
  522. package/dist/src/setup/labels.js +0 -42
  523. package/dist/src/setup/labels.js.map +0 -1
  524. package/dist/src/setup/project-config.d.ts +0 -24
  525. package/dist/src/setup/project-config.d.ts.map +0 -1
  526. package/dist/src/setup/project-config.js +0 -678
  527. package/dist/src/setup/project-config.js.map +0 -1
  528. package/dist/src/setup/prompt-sync.d.ts +0 -14
  529. package/dist/src/setup/prompt-sync.d.ts.map +0 -1
  530. package/dist/src/setup/prompt-sync.js +0 -228
  531. package/dist/src/setup/prompt-sync.js.map +0 -1
  532. package/dist/src/setup/setup-command.d.ts +0 -29
  533. package/dist/src/setup/setup-command.d.ts.map +0 -1
  534. package/dist/src/setup/setup-command.js +0 -304
  535. package/dist/src/setup/setup-command.js.map +0 -1
  536. package/dist/src/setup/skill-runtime-v2-preparation.d.ts +0 -56
  537. package/dist/src/setup/skill-runtime-v2-preparation.d.ts.map +0 -1
  538. package/dist/src/setup/skill-runtime-v2-preparation.js +0 -304
  539. package/dist/src/setup/skill-runtime-v2-preparation.js.map +0 -1
  540. package/dist/src/setup/workflows.d.ts +0 -10
  541. package/dist/src/setup/workflows.d.ts.map +0 -1
  542. package/dist/src/setup/workflows.js +0 -41
  543. package/dist/src/setup/workflows.js.map +0 -1
  544. package/prompts/setup-skill.md +0 -12
  545. package/prompts/workflows/acceptance-proof.md +0 -29
  546. package/prompts/workflows/breakdown-review.md +0 -48
  547. package/prompts/workflows/issue-breakdown.md +0 -155
  548. package/prompts/workflows/issue-tree-orchestration.md +0 -163
  549. package/prompts/workflows/prd.md +0 -80
  550. package/prompts/workflows/scoped-implementation.md +0 -129
  551. package/prompts/workflows/triage.md +0 -149
  552. /package/dist/src/{process → v2/adapters}/command.d.ts +0 -0
  553. /package/dist/src/{process → v2/adapters}/command.js +0 -0
  554. /package/dist/src/{fs → v2/adapters}/durable-atomic-file.d.ts +0 -0
  555. /package/dist/src/{fs → v2/adapters}/durable-atomic-file.js +0 -0
  556. /package/dist/src/{github → v2/adapters}/gh-cli.d.ts +0 -0
  557. /package/dist/src/{github → v2/adapters}/gh-cli.js +0 -0
  558. /package/dist/src/{github → v2/adapters}/gh-issue-adapter.d.ts +0 -0
  559. /package/dist/src/{github → v2/adapters}/gh-issue-adapter.js +0 -0
  560. /package/dist/src/{github → v2/adapters}/gh-pull-request-adapter.d.ts +0 -0
  561. /package/dist/src/{github → v2/adapters}/gh-pull-request-adapter.js +0 -0
  562. /package/dist/src/{github → v2/adapters}/issues.d.ts +0 -0
  563. /package/dist/src/{github → v2/adapters}/issues.js +0 -0
  564. /package/dist/src/{runner → v2/adapters}/mission-coordinator-lock.d.ts +0 -0
  565. /package/dist/src/{runner → v2/adapters}/mission-coordinator-lock.js +0 -0
  566. /package/dist/src/{path-policy.d.ts → v2/adapters/path-policy.d.ts} +0 -0
  567. /package/dist/src/{path-policy.js → v2/adapters/path-policy.js} +0 -0
  568. /package/dist/src/{github → v2/adapters}/pull-requests.d.ts +0 -0
  569. /package/dist/src/{github → v2/adapters}/pull-requests.js +0 -0
  570. /package/dist/src/{runner → v2/adapters}/target-activity-fence.d.ts +0 -0
@@ -1,1064 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { existsSync } from 'node:fs';
3
- import { readFile } from 'node:fs/promises';
4
- import { isAbsolute, join, relative, resolve } from 'node:path';
5
- import { mergeArtifacts, runConfiguredChecks } from './command-utils.js';
6
- import { readScopedCompletionReportDetailed, } from './completion-report.js';
7
- import { sessionPromptPath, writeDurablePrompt } from './prompt.js';
8
- import { sessionLogPath } from './run-log.js';
9
- import { evaluateReviewGates, shouldApplyVisualProofGate } from './review-gates.js';
10
- import { validateChangedPaths, validateCompletionReportSafety, validateNoAgentOwnedGitPublication, } from './safety.js';
11
- import { evaluateScopeIsolation } from './scope-isolation-policy.js';
12
- import { runRunnerVisualProofAdapter } from './visual-proof-runner.js';
13
- import { runAcceptanceProofAdapter, } from './acceptance-proof-runner.js';
14
- import { runAcceptanceProofLoopAttempt } from './acceptance-proof-loop.js';
15
- import { IDLE_TIMEOUT_BEFORE_CHANGE_REASON, INCOMPLETE_AFTER_PROGRESS_REASON, MISSING_COMPLETION_REPORT_REASON, OPTIONAL_FIGMA_MCP_FAILURE_REASON, REQUIRED_FIGMA_MCP_FAILURE_REASON, } from './rework-policy.js';
16
- import { cleanupSessionCodexHome, sessionCodexHomePath } from './session-home.js';
17
- export async function runLocalExecutionSession(input) {
18
- const phaseResults = [];
19
- for (const phaseId of input.phases) {
20
- const result = await input.executePhase({ phaseId, worktreePath: input.worktreePath });
21
- if (result.phaseId !== phaseId) {
22
- throw new Error(`Local execution phase ${phaseId} returned mismatched result for ${result.phaseId}`);
23
- }
24
- phaseResults.push(result);
25
- if (result.status === 'failed') {
26
- return {
27
- worktreePath: input.worktreePath,
28
- phaseResults,
29
- status: 'blocked',
30
- publishReady: false,
31
- };
32
- }
33
- }
34
- return {
35
- worktreePath: input.worktreePath,
36
- phaseResults,
37
- status: 'passed',
38
- publishReady: true,
39
- };
40
- }
41
- export async function runImplementationPublishabilityCheck(input) {
42
- const repairAttempts = [];
43
- const publicationViolations = input.config.runner.allowAgentLocalCommits
44
- ? []
45
- : validateNoAgentOwnedGitPublication(input.beforeHead, input.afterHead);
46
- if (publicationViolations.length > 0) {
47
- return blocked(publicationViolations.map((violation) => violation.message));
48
- }
49
- let report;
50
- const idleTimeout = isIdleTimeoutResult(input.codexResult);
51
- if (input.codexResult.exitCode !== 0) {
52
- const figmaReason = formatFigmaMcpFailureReason(input.codexResult);
53
- if (figmaReason) {
54
- return blocked([figmaReason]);
55
- }
56
- if (!idleTimeout) {
57
- return blocked([formatCodexExitReason(input.codexResult)]);
58
- }
59
- const reportResult = await readScopedCompletionReportDetailed(input.reportPath);
60
- const preparedReport = await resolveInitialReportRead(input, reportResult, {
61
- idleTimeout,
62
- repairAttempts,
63
- });
64
- if (preparedReport.kind === 'blocked') {
65
- return preparedReport.result;
66
- }
67
- report = preparedReport.report;
68
- }
69
- else {
70
- const reportResult = await readScopedCompletionReportDetailed(input.reportPath);
71
- const preparedReport = await resolveInitialReportRead(input, reportResult, {
72
- idleTimeout,
73
- repairAttempts,
74
- });
75
- if (preparedReport.kind === 'blocked') {
76
- return preparedReport.result;
77
- }
78
- report = preparedReport.report;
79
- }
80
- if (report.status === 'needs-promotion') {
81
- return { status: 'promotion-requested', report };
82
- }
83
- const localSession = await runLocalExecutionSession({
84
- worktreePath: input.worktreePath,
85
- phases: input.localPhases ?? [],
86
- executePhase: input.localPhaseExecutor ?? defaultPassingLocalPhaseExecutor,
87
- });
88
- if (!localSession.publishReady) {
89
- const changeSet = await input.git.collectSessionChangeSet({
90
- worktreePath: input.worktreePath,
91
- baseHead: input.beforeHead,
92
- });
93
- return {
94
- status: 'blocked',
95
- reasons: localSessionBlockReasons(localSession.phaseResults),
96
- changedFiles: changeSet.changedPaths,
97
- validation: [...report.validation, ...localSession.phaseResults.flatMap((phase) => phase.validation)],
98
- skippedChecks: applicableSkippedChecks(input, report, changeSet.changedPaths),
99
- residualRisks: [...report.residualRisks, ...localSession.phaseResults.flatMap((phase) => phase.residualRisks)],
100
- commits: changeSet.commits,
101
- ...repairAttemptsField(repairAttempts),
102
- };
103
- }
104
- report = {
105
- ...report,
106
- validation: [...report.validation, ...localSession.phaseResults.flatMap((phase) => phase.validation)],
107
- artifacts: mergeArtifacts(report.artifacts, localSession.phaseResults.flatMap((phase) => phase.artifacts)),
108
- residualRisks: [...report.residualRisks, ...localSession.phaseResults.flatMap((phase) => phase.residualRisks)],
109
- };
110
- let changeSet = await input.git.collectSessionChangeSet({
111
- worktreePath: input.worktreePath,
112
- baseHead: input.beforeHead,
113
- });
114
- let changedFiles = changeSet.changedPaths;
115
- report = {
116
- ...report,
117
- skippedChecks: applicableSkippedChecks(input, report, changedFiles),
118
- };
119
- if (changedFiles.length === 0) {
120
- return {
121
- status: 'blocked',
122
- reasons: ['Codex completed without file changes'],
123
- changedFiles: [],
124
- validation: report.validation,
125
- skippedChecks: report.skippedChecks,
126
- residualRisks: report.residualRisks,
127
- commits: changeSet.commits,
128
- ...repairAttemptsField(repairAttempts),
129
- };
130
- }
131
- const scopeIsolation = evaluateScopeIsolation({
132
- config: input.config,
133
- issue: input.issue,
134
- changedFiles,
135
- });
136
- if (scopeIsolation.blockers.length > 0) {
137
- return {
138
- status: 'blocked',
139
- reasons: scopeIsolation.blockers,
140
- changedFiles,
141
- validation: report.validation,
142
- skippedChecks: report.skippedChecks,
143
- residualRisks: report.residualRisks,
144
- commits: changeSet.commits,
145
- ...repairAttemptsField(repairAttempts),
146
- };
147
- }
148
- const violations = [
149
- ...validateChangedPaths(changedFiles, input.config),
150
- ...validateCompletionReportSafety(report),
151
- ];
152
- if (violations.length > 0) {
153
- return {
154
- status: 'blocked',
155
- reasons: violations.map((violation) => violation.message),
156
- changedFiles,
157
- validation: report.validation,
158
- skippedChecks: report.skippedChecks,
159
- residualRisks: report.residualRisks,
160
- commits: changeSet.commits,
161
- ...repairAttemptsField(repairAttempts),
162
- };
163
- }
164
- const validationBeforeChecks = report.validation.length;
165
- let validation = await runConfiguredChecks(input.config, input.worktreePath, input.shellExecutor, report.validation, { phase: 'child', changedFiles });
166
- const checkWarnings = validation
167
- .slice(validationBeforeChecks)
168
- .filter((line) => line.status === 'skipped')
169
- .map((line) => `Configured check warning: ${line.command} - ${line.summary}`);
170
- if (checkWarnings.length > 0) {
171
- report = {
172
- ...report,
173
- residualRisks: [...report.residualRisks, ...checkWarnings],
174
- };
175
- }
176
- const residualRisks = [...report.residualRisks];
177
- let acceptanceProofAttempt;
178
- let proofChangeSet;
179
- const proofOutcome = await runAcceptanceProofLoopAttempt({
180
- config: input.config,
181
- issue: input.issue,
182
- worktreePath: input.worktreePath,
183
- beforeHead: input.beforeHead,
184
- initialChangedFiles: changedFiles,
185
- implementationReport: report,
186
- adaptiveAdapterAvailable: Boolean(input.acceptanceProof),
187
- executeAdaptiveProof: input.acceptanceProof
188
- ? async () => {
189
- await input.acceptanceProof?.onAttemptEvent?.({ status: 'started' });
190
- return runAcceptanceProofAdapter({
191
- config: input.config,
192
- issue: input.issue,
193
- targetRoot: input.acceptanceProof.targetRoot,
194
- worktreePath: input.worktreePath,
195
- changedFiles,
196
- implementationReport: report,
197
- codexAdapter: input.acceptanceProof.codexAdapter,
198
- sessionId: input.acceptanceProof.sessionId,
199
- branchName: input.acceptanceProof.branchName,
200
- workflowPromptText: input.acceptanceProof.workflowPromptText,
201
- });
202
- }
203
- : undefined,
204
- executeAdaptiveProofRepair: input.acceptanceProof
205
- ? async ({ schemaErrors }) => runAcceptanceProofAdapter({
206
- config: input.config,
207
- issue: input.issue,
208
- targetRoot: input.acceptanceProof.targetRoot,
209
- worktreePath: input.worktreePath,
210
- changedFiles,
211
- implementationReport: report,
212
- codexAdapter: input.acceptanceProof.codexAdapter,
213
- sessionId: input.acceptanceProof.sessionId,
214
- branchName: input.acceptanceProof.branchName,
215
- workflowPromptText: input.acceptanceProof.workflowPromptText,
216
- repairSchemaErrors: schemaErrors,
217
- })
218
- : undefined,
219
- executeCommandProof: async () => {
220
- const result = await runRunnerVisualProofAdapter({
221
- config: input.config,
222
- issue: input.issue,
223
- issueNumber: input.issue.number,
224
- targetRoot: input.targetRoot,
225
- worktreePath: input.worktreePath,
226
- changedFiles,
227
- report,
228
- shellExecutor: input.shellExecutor,
229
- });
230
- if (!result) {
231
- throw new Error('Acceptance proof planning selected command proof, but runner visual proof adapter did not execute.');
232
- }
233
- return result;
234
- },
235
- collectChangeSet: async ({ worktreePath, baseHead }) => {
236
- proofChangeSet = await input.git.collectSessionChangeSet({ worktreePath, baseHead });
237
- return proofChangeSet;
238
- },
239
- evaluateScope: ({ changedFiles: finalChangedFiles }) => evaluateScopeIsolation({
240
- config: input.config,
241
- issue: input.issue,
242
- changedFiles: finalChangedFiles,
243
- }),
244
- artifactExists: (path) => existsSync(join(input.worktreePath, path)),
245
- });
246
- if (proofOutcome.status !== 'skipped') {
247
- validation = [...validation, ...proofOutcome.validation];
248
- acceptanceProofAttempt = proofOutcome.evidence ?? acceptanceProofAttempt;
249
- if (acceptanceProofAttempt) {
250
- await input.acceptanceProof?.onAttemptEvent?.({
251
- status: acceptanceProofAttempt.status,
252
- evidence: acceptanceProofAttempt,
253
- });
254
- }
255
- report = {
256
- ...report,
257
- artifacts: mergeArtifacts(report.artifacts, proofOutcome.artifacts),
258
- residualRisks: [...report.residualRisks, ...proofOutcome.residualRisks],
259
- };
260
- residualRisks.push(...proofOutcome.residualRisks);
261
- changedFiles = proofOutcome.changedFiles;
262
- if (proofChangeSet) {
263
- changeSet = proofChangeSet;
264
- }
265
- if (proofOutcome.status === 'blocked') {
266
- return {
267
- status: 'blocked',
268
- reasons: proofOutcome.blockers,
269
- changedFiles,
270
- validation,
271
- skippedChecks: report.skippedChecks,
272
- residualRisks,
273
- commits: changeSet.commits,
274
- acceptanceProofAttempt,
275
- ...repairAttemptsField(repairAttempts),
276
- };
277
- }
278
- }
279
- const isFailedValidation = (line) => line.status === 'failed' && !isStructuredTddRedEvidence(line);
280
- const failedReportValidation = validation
281
- .slice(0, validationBeforeChecks)
282
- .filter(isFailedValidation);
283
- if (failedReportValidation.length > 0) {
284
- residualRisks.push('One or more reported validation checks failed.');
285
- return {
286
- status: 'blocked',
287
- reasons: [
288
- 'One or more reported validation checks failed.',
289
- ...failedReportValidation.map((line) => `${line.command}: ${line.status} - ${line.summary}`),
290
- ],
291
- changedFiles,
292
- validation,
293
- skippedChecks: report.skippedChecks,
294
- residualRisks,
295
- commits: changeSet.commits,
296
- acceptanceProofAttempt,
297
- ...repairAttemptsField(repairAttempts),
298
- };
299
- }
300
- const failedConfiguredCheckWarnings = validation
301
- .slice(validationBeforeChecks)
302
- .filter(isFailedValidation)
303
- .map((line) => `Configured check warning: ${line.command} - ${line.summary}`);
304
- if (failedConfiguredCheckWarnings.length > 0) {
305
- residualRisks.push(...failedConfiguredCheckWarnings);
306
- report = {
307
- ...report,
308
- residualRisks: [...report.residualRisks, ...failedConfiguredCheckWarnings],
309
- };
310
- }
311
- const reviewGate = evaluateReviewGates({
312
- config: input.config,
313
- issue: input.issue,
314
- changedFiles,
315
- validation,
316
- skippedChecks: report.skippedChecks,
317
- report,
318
- worktreePath: input.worktreePath,
319
- });
320
- let reviewGateWarnings = reviewGate.warnings;
321
- if (!reviewGate.ok) {
322
- const evidenceRepair = await maybeRunEvidenceReportRepair(input, {
323
- report,
324
- reviewGate,
325
- changedFiles,
326
- changeSet,
327
- validation,
328
- residualRisks,
329
- acceptanceProofAttempt,
330
- repairAttempts,
331
- });
332
- if (evidenceRepair.kind === 'publish-ready') {
333
- report = evidenceRepair.report;
334
- validation = evidenceRepair.validation;
335
- reviewGateWarnings = evidenceRepair.reviewWarnings;
336
- }
337
- else if (evidenceRepair.kind === 'blocked') {
338
- return evidenceRepair.result;
339
- }
340
- else {
341
- return {
342
- status: 'blocked',
343
- reasons: reviewGate.reasons,
344
- blockers: reviewGate.blockers,
345
- changedFiles,
346
- validation,
347
- skippedChecks: report.skippedChecks,
348
- residualRisks,
349
- commits: changeSet.commits,
350
- acceptanceProofAttempt,
351
- ...repairAttemptsField(repairAttempts),
352
- };
353
- }
354
- }
355
- if (reviewGateWarnings.length > 0) {
356
- residualRisks.push(...reviewGateWarnings);
357
- report = {
358
- ...report,
359
- residualRisks: [...report.residualRisks, ...reviewGateWarnings],
360
- };
361
- }
362
- if (!(await input.git.isWorktreeClean(input.worktreePath))) {
363
- await input.git.commitAll({ worktreePath: input.worktreePath, message: input.commitMessage });
364
- changeSet = await input.git.collectSessionChangeSet({
365
- worktreePath: input.worktreePath,
366
- baseHead: input.beforeHead,
367
- });
368
- }
369
- return {
370
- status: 'publish-ready',
371
- report,
372
- changedFiles,
373
- validation,
374
- artifacts: report.artifacts,
375
- skippedChecks: report.skippedChecks,
376
- residualRisks,
377
- commits: changeSet.commits,
378
- acceptanceProofAttempt,
379
- ...repairAttemptsField(repairAttempts),
380
- };
381
- }
382
- async function resolveInitialReportRead(input, reportResult, state) {
383
- if (reportResult.kind === 'valid') {
384
- return { kind: 'valid', report: reportResult.report };
385
- }
386
- const repair = state.idleTimeout
387
- ? { kind: 'not-eligible' }
388
- : await maybeRunCompletionReportRepair(input, reportResult, state.repairAttempts);
389
- if (repair.kind === 'valid') {
390
- return repair;
391
- }
392
- if (repair.kind === 'blocked') {
393
- return repair;
394
- }
395
- if (reportResult.kind === 'missing') {
396
- if (!state.idleTimeout) {
397
- return {
398
- kind: 'blocked',
399
- result: blocked([MISSING_COMPLETION_REPORT_REASON], {
400
- blockers: [runnerBlocker('missing-completion-report', MISSING_COMPLETION_REPORT_REASON, 'completion-report', 'completion-report')],
401
- repairAttempts: state.repairAttempts,
402
- }),
403
- };
404
- }
405
- const changeSet = repair.changeSet ?? await input.git.collectSessionChangeSet({
406
- worktreePath: input.worktreePath,
407
- baseHead: input.beforeHead,
408
- });
409
- const changedFiles = changeSet.changedPaths;
410
- if (changedFiles.length === 0) {
411
- return {
412
- kind: 'blocked',
413
- result: blocked([IDLE_TIMEOUT_BEFORE_CHANGE_REASON], {
414
- blockers: [runnerBlocker('idle-timeout-before-change', IDLE_TIMEOUT_BEFORE_CHANGE_REASON, 'recovery', 'implementation-rework')],
415
- repairAttempts: state.repairAttempts,
416
- }),
417
- };
418
- }
419
- const changedPathViolations = validateChangedPaths(changedFiles, input.config);
420
- if (changedPathViolations.length > 0) {
421
- return {
422
- kind: 'blocked',
423
- result: blocked(changedPathViolations.map((violation) => violation.message), {
424
- changedFiles,
425
- commits: changeSet.commits,
426
- repairAttempts: state.repairAttempts,
427
- }),
428
- };
429
- }
430
- const scopeIsolation = evaluateScopeIsolation({
431
- config: input.config,
432
- issue: input.issue,
433
- changedFiles,
434
- });
435
- if (scopeIsolation.blockers.length > 0) {
436
- return {
437
- kind: 'blocked',
438
- result: blocked(scopeIsolation.blockers, {
439
- changedFiles,
440
- commits: changeSet.commits,
441
- repairAttempts: state.repairAttempts,
442
- }),
443
- };
444
- }
445
- return {
446
- kind: 'blocked',
447
- result: blocked([INCOMPLETE_AFTER_PROGRESS_REASON], {
448
- changedFiles,
449
- validation: [],
450
- commits: changeSet.commits,
451
- repairAttempts: state.repairAttempts,
452
- blockers: [runnerBlocker('incomplete-after-progress', INCOMPLETE_AFTER_PROGRESS_REASON, 'recovery', 'implementation-rework')],
453
- }),
454
- };
455
- }
456
- return {
457
- kind: 'blocked',
458
- result: blocked([reportResult.message], {
459
- blockers: [runnerBlocker('invalid-completion-report', reportResult.message, 'completion-report', 'completion-report')],
460
- repairAttempts: state.repairAttempts,
461
- }),
462
- };
463
- }
464
- async function maybeRunCompletionReportRepair(input, reportIssue, repairAttempts) {
465
- const changeSet = await input.git.collectSessionChangeSet({
466
- worktreePath: input.worktreePath,
467
- baseHead: input.beforeHead,
468
- });
469
- const changedFiles = changeSet.changedPaths;
470
- if (changedFiles.length === 0) {
471
- return { kind: 'not-eligible', changeSet };
472
- }
473
- const changedPathViolations = validateChangedPaths(changedFiles, input.config);
474
- if (changedPathViolations.length > 0) {
475
- return {
476
- kind: 'blocked',
477
- result: blocked(changedPathViolations.map((violation) => violation.message), {
478
- changedFiles,
479
- commits: changeSet.commits,
480
- }),
481
- };
482
- }
483
- const scopeIsolation = evaluateScopeIsolation({
484
- config: input.config,
485
- issue: input.issue,
486
- changedFiles,
487
- });
488
- if (scopeIsolation.blockers.length > 0) {
489
- return {
490
- kind: 'blocked',
491
- result: blocked(scopeIsolation.blockers, {
492
- changedFiles,
493
- commits: changeSet.commits,
494
- }),
495
- };
496
- }
497
- if (!input.reportRepair || !input.git.getHead) {
498
- return { kind: 'not-eligible', changeSet };
499
- }
500
- const repairSessionId = `${input.reportRepair.sessionId}-completion-report-repair`;
501
- const promptPath = sessionPromptPath({
502
- targetRoot: input.reportRepair.targetRoot,
503
- config: input.config,
504
- issueNumber: input.issue.number,
505
- sessionId: repairSessionId,
506
- });
507
- const logPath = sessionLogPath({
508
- targetRoot: input.reportRepair.targetRoot,
509
- config: input.config,
510
- issueNumber: input.issue.number,
511
- sessionId: repairSessionId,
512
- });
513
- const repairAttemptBase = {
514
- kind: 'completion-report',
515
- sessionId: repairSessionId,
516
- promptPath,
517
- reportPath: input.reportPath,
518
- logPath,
519
- };
520
- const preRepairHead = await input.git.getHead(input.worktreePath);
521
- const protectedBefore = await captureRepairProtectedFingerprint(input, changeSet);
522
- const promptText = buildCompletionReportRepairPrompt({
523
- input,
524
- reportIssue,
525
- changedFiles,
526
- });
527
- await writeDurablePrompt({
528
- targetRoot: input.reportRepair.targetRoot,
529
- config: input.config,
530
- issueNumber: input.issue.number,
531
- sessionId: repairSessionId,
532
- promptText,
533
- });
534
- const isolatedHomePath = sessionCodexHomePath({
535
- targetRoot: input.reportRepair.targetRoot,
536
- sessionId: repairSessionId,
537
- });
538
- let repairResult;
539
- try {
540
- repairResult = await input.reportRepair.codexAdapter.run({
541
- targetRoot: input.reportRepair.targetRoot,
542
- config: input.config,
543
- worktreePath: input.worktreePath,
544
- promptPath,
545
- promptText,
546
- reportPath: input.reportPath,
547
- isolatedHomePath,
548
- issueNumber: input.issue.number,
549
- sessionId: repairSessionId,
550
- branchName: input.reportRepair.branchName,
551
- phase: 'scoped-issue',
552
- logPath,
553
- env: {
554
- CODEX_ORCHESTRATOR_REPAIR_MODE: 'completion-report',
555
- },
556
- });
557
- }
558
- finally {
559
- await cleanupSessionCodexHome(isolatedHomePath);
560
- }
561
- if (repairResult.exitCode !== 0) {
562
- const reason = `Completion report repair failed: ${formatCodexExitReason(repairResult)}`;
563
- const blockers = [runnerBlocker('invalid-completion-report', reason, 'completion-report', 'none')];
564
- repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
565
- return {
566
- kind: 'blocked',
567
- result: blocked([reason], {
568
- changedFiles,
569
- commits: changeSet.commits,
570
- blockers,
571
- repairAttempts,
572
- }),
573
- };
574
- }
575
- const postRepairHead = await input.git.getHead(input.worktreePath);
576
- if (postRepairHead !== preRepairHead) {
577
- const reason = 'Completion report repair created or moved HEAD; repair sessions must not create local commits.';
578
- const blockers = [runnerBlocker('publication-violation', reason, 'safety', 'none')];
579
- repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
580
- return {
581
- kind: 'blocked',
582
- result: blocked([reason], {
583
- changedFiles,
584
- commits: changeSet.commits,
585
- blockers,
586
- repairAttempts,
587
- }),
588
- };
589
- }
590
- const postChangeSet = await input.git.collectSessionChangeSet({
591
- worktreePath: input.worktreePath,
592
- baseHead: input.beforeHead,
593
- });
594
- const protectedAfter = await captureRepairProtectedFingerprint(input, postChangeSet);
595
- if (protectedAfter !== protectedBefore) {
596
- const reason = 'Completion report repair changed protected worktree content; repair may only write the completion report JSON.';
597
- const blockers = [runnerBlocker('destructive-or-production-action', reason, 'safety', 'none')];
598
- repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
599
- return {
600
- kind: 'blocked',
601
- result: blocked([reason], {
602
- changedFiles: postChangeSet.changedPaths,
603
- commits: postChangeSet.commits,
604
- blockers,
605
- repairAttempts,
606
- }),
607
- };
608
- }
609
- const repairedReport = await readScopedCompletionReportDetailed(input.reportPath);
610
- if (repairedReport.kind === 'missing') {
611
- const reason = `${MISSING_COMPLETION_REPORT_REASON} Completion report repair did not write CODEX_ORCHESTRATOR_REPORT_FILE.`;
612
- const blockers = [runnerBlocker('missing-completion-report', reason, 'completion-report', 'none')];
613
- repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
614
- return {
615
- kind: 'blocked',
616
- result: blocked([reason], {
617
- changedFiles,
618
- commits: changeSet.commits,
619
- blockers,
620
- repairAttempts,
621
- }),
622
- };
623
- }
624
- if (repairedReport.kind === 'invalid') {
625
- const reason = `Completion report repair wrote an invalid report: ${repairedReport.message}`;
626
- const blockers = [runnerBlocker('invalid-completion-report', reason, 'completion-report', 'none')];
627
- repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
628
- return {
629
- kind: 'blocked',
630
- result: blocked([reason], {
631
- changedFiles,
632
- commits: changeSet.commits,
633
- blockers,
634
- repairAttempts,
635
- }),
636
- };
637
- }
638
- repairAttempts.push({ ...repairAttemptBase, status: 'passed', reason: 'Completion report repair wrote a valid scoped report.' });
639
- return { kind: 'valid', report: repairedReport.report };
640
- }
641
- async function maybeRunEvidenceReportRepair(input, context) {
642
- const repairableBlockers = (context.reviewGate.blockers ?? [])
643
- .filter((blocker) => blocker.repair === 'evidence'
644
- && (blocker.key === 'missing-quality-gate-evidence' || blocker.key === 'risk-routing-policy'));
645
- if (repairableBlockers.length === 0 || !input.reportRepair || !input.git.getHead) {
646
- return { kind: 'not-eligible' };
647
- }
648
- const repairSessionId = `${input.reportRepair.sessionId}-evidence-repair`;
649
- const promptPath = sessionPromptPath({
650
- targetRoot: input.reportRepair.targetRoot,
651
- config: input.config,
652
- issueNumber: input.issue.number,
653
- sessionId: repairSessionId,
654
- });
655
- const logPath = sessionLogPath({
656
- targetRoot: input.reportRepair.targetRoot,
657
- config: input.config,
658
- issueNumber: input.issue.number,
659
- sessionId: repairSessionId,
660
- });
661
- const repairAttemptBase = {
662
- kind: 'evidence',
663
- sessionId: repairSessionId,
664
- promptPath,
665
- reportPath: input.reportPath,
666
- logPath,
667
- };
668
- const preRepairHead = await input.git.getHead(input.worktreePath);
669
- const protectedBefore = await captureRepairProtectedFingerprint(input, context.changeSet);
670
- const promptText = buildEvidenceReportRepairPrompt({
671
- input,
672
- changedFiles: context.changedFiles,
673
- reviewGate: context.reviewGate,
674
- validation: context.validation,
675
- });
676
- await writeDurablePrompt({
677
- targetRoot: input.reportRepair.targetRoot,
678
- config: input.config,
679
- issueNumber: input.issue.number,
680
- sessionId: repairSessionId,
681
- promptText,
682
- });
683
- const isolatedHomePath = sessionCodexHomePath({
684
- targetRoot: input.reportRepair.targetRoot,
685
- sessionId: repairSessionId,
686
- });
687
- let repairResult;
688
- try {
689
- repairResult = await input.reportRepair.codexAdapter.run({
690
- targetRoot: input.reportRepair.targetRoot,
691
- config: input.config,
692
- worktreePath: input.worktreePath,
693
- promptPath,
694
- promptText,
695
- reportPath: input.reportPath,
696
- isolatedHomePath,
697
- issueNumber: input.issue.number,
698
- sessionId: repairSessionId,
699
- branchName: input.reportRepair.branchName,
700
- phase: 'scoped-issue',
701
- logPath,
702
- env: {
703
- CODEX_ORCHESTRATOR_REPAIR_MODE: 'evidence',
704
- },
705
- });
706
- }
707
- finally {
708
- await cleanupSessionCodexHome(isolatedHomePath);
709
- }
710
- if (repairResult.exitCode !== 0) {
711
- const reason = `Evidence repair failed: ${formatCodexExitReason(repairResult)}`;
712
- const blockers = [runnerBlocker('missing-quality-gate-evidence', reason, 'review-gate', 'none')];
713
- context.repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
714
- return {
715
- kind: 'blocked',
716
- result: blocked([reason], {
717
- changedFiles: context.changedFiles,
718
- validation: context.validation,
719
- skippedChecks: context.report.skippedChecks,
720
- residualRisks: context.residualRisks,
721
- commits: context.changeSet.commits,
722
- acceptanceProofAttempt: context.acceptanceProofAttempt,
723
- blockers,
724
- repairAttempts: context.repairAttempts,
725
- }),
726
- };
727
- }
728
- const postRepairHead = await input.git.getHead(input.worktreePath);
729
- if (postRepairHead !== preRepairHead) {
730
- const reason = 'Evidence repair created or moved HEAD; repair sessions must not create local commits.';
731
- const blockers = [runnerBlocker('publication-violation', reason, 'safety', 'none')];
732
- context.repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
733
- return {
734
- kind: 'blocked',
735
- result: blocked([reason], {
736
- changedFiles: context.changedFiles,
737
- validation: context.validation,
738
- skippedChecks: context.report.skippedChecks,
739
- residualRisks: context.residualRisks,
740
- commits: context.changeSet.commits,
741
- acceptanceProofAttempt: context.acceptanceProofAttempt,
742
- blockers,
743
- repairAttempts: context.repairAttempts,
744
- }),
745
- };
746
- }
747
- const postChangeSet = await input.git.collectSessionChangeSet({
748
- worktreePath: input.worktreePath,
749
- baseHead: input.beforeHead,
750
- });
751
- const protectedAfter = await captureRepairProtectedFingerprint(input, postChangeSet);
752
- if (protectedAfter !== protectedBefore) {
753
- const reason = 'Evidence repair changed protected worktree content; repair may only write corrected completion report evidence.';
754
- const blockers = [runnerBlocker('destructive-or-production-action', reason, 'safety', 'none')];
755
- context.repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
756
- return {
757
- kind: 'blocked',
758
- result: blocked([reason], {
759
- changedFiles: postChangeSet.changedPaths,
760
- validation: context.validation,
761
- skippedChecks: context.report.skippedChecks,
762
- residualRisks: context.residualRisks,
763
- commits: postChangeSet.commits,
764
- acceptanceProofAttempt: context.acceptanceProofAttempt,
765
- blockers,
766
- repairAttempts: context.repairAttempts,
767
- }),
768
- };
769
- }
770
- const repairedRead = await readScopedCompletionReportDetailed(input.reportPath);
771
- if (repairedRead.kind !== 'valid') {
772
- const reason = repairedRead.kind === 'missing'
773
- ? `${MISSING_COMPLETION_REPORT_REASON} Evidence repair did not write CODEX_ORCHESTRATOR_REPORT_FILE.`
774
- : `Evidence repair wrote an invalid report: ${repairedRead.message}`;
775
- const blockers = [runnerBlocker(repairedRead.kind === 'missing' ? 'missing-completion-report' : 'invalid-completion-report', reason, 'completion-report', 'none')];
776
- context.repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
777
- return {
778
- kind: 'blocked',
779
- result: blocked([reason], {
780
- changedFiles: context.changedFiles,
781
- validation: context.validation,
782
- skippedChecks: context.report.skippedChecks,
783
- residualRisks: context.residualRisks,
784
- commits: context.changeSet.commits,
785
- acceptanceProofAttempt: context.acceptanceProofAttempt,
786
- blockers,
787
- repairAttempts: context.repairAttempts,
788
- }),
789
- };
790
- }
791
- if (repairedRead.report.status !== context.report.status) {
792
- const reason = 'Evidence repair changed completion report status; repair may only correct review-gate evidence.';
793
- const blockers = [runnerBlocker('missing-quality-gate-evidence', reason, 'review-gate', 'none')];
794
- context.repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
795
- return {
796
- kind: 'blocked',
797
- result: blocked([reason], {
798
- changedFiles: context.changedFiles,
799
- validation: context.validation,
800
- skippedChecks: context.report.skippedChecks,
801
- residualRisks: context.residualRisks,
802
- commits: context.changeSet.commits,
803
- acceptanceProofAttempt: context.acceptanceProofAttempt,
804
- blockers,
805
- repairAttempts: context.repairAttempts,
806
- }),
807
- };
808
- }
809
- const externalValidation = context.validation.slice(context.report.validation.length);
810
- const repairedReport = {
811
- ...context.report,
812
- ...repairedRead.report,
813
- skippedChecks: applicableSkippedChecks(input, repairedRead.report, context.changedFiles),
814
- artifacts: mergeArtifacts(repairedRead.report.artifacts, context.report.artifacts),
815
- };
816
- const repairedValidation = [...repairedReport.validation, ...externalValidation];
817
- const repairedReviewGate = evaluateReviewGates({
818
- config: input.config,
819
- issue: input.issue,
820
- changedFiles: context.changedFiles,
821
- validation: repairedValidation,
822
- skippedChecks: repairedReport.skippedChecks,
823
- report: repairedReport,
824
- worktreePath: input.worktreePath,
825
- });
826
- if (!repairedReviewGate.ok) {
827
- const reason = `Evidence repair did not satisfy review gates: ${repairedReviewGate.reasons.join('; ')}`;
828
- const blockers = repairedReviewGate.blockers ?? repairableBlockers;
829
- context.repairAttempts.push({ ...repairAttemptBase, status: 'blocked', reason, blockers });
830
- return {
831
- kind: 'blocked',
832
- result: blocked(repairedReviewGate.reasons, {
833
- changedFiles: context.changedFiles,
834
- validation: repairedValidation,
835
- skippedChecks: repairedReport.skippedChecks,
836
- residualRisks: context.residualRisks,
837
- commits: context.changeSet.commits,
838
- acceptanceProofAttempt: context.acceptanceProofAttempt,
839
- blockers,
840
- repairAttempts: context.repairAttempts,
841
- }),
842
- };
843
- }
844
- context.repairAttempts.push({ ...repairAttemptBase, status: 'passed', reason: 'Evidence repair wrote review-gate evidence that passed rerun review gates.' });
845
- return {
846
- kind: 'publish-ready',
847
- report: repairedReport,
848
- validation: repairedValidation,
849
- reviewWarnings: repairedReviewGate.warnings,
850
- };
851
- }
852
- async function captureRepairProtectedFingerprint(input, changeSet) {
853
- const reportRelativePath = relativeReportPathInsideWorktree(input);
854
- const entries = [];
855
- for (const changedPath of changeSet.changedPaths) {
856
- if (reportRelativePath && changedPath === reportRelativePath) {
857
- continue;
858
- }
859
- const absolutePath = join(input.worktreePath, changedPath);
860
- try {
861
- const content = await readFile(absolutePath);
862
- entries.push({
863
- path: changedPath,
864
- state: 'file',
865
- sha256: createHash('sha256').update(content).digest('hex'),
866
- });
867
- }
868
- catch (error) {
869
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
870
- entries.push({ path: changedPath, state: 'missing' });
871
- continue;
872
- }
873
- throw error;
874
- }
875
- }
876
- return JSON.stringify(entries);
877
- }
878
- function relativeReportPathInsideWorktree(input) {
879
- const worktreePath = resolve(input.worktreePath);
880
- const reportPath = resolve(input.reportPath);
881
- const relativePath = relative(worktreePath, reportPath);
882
- if (relativePath === '' || relativePath.startsWith('..') || isAbsolute(relativePath)) {
883
- return undefined;
884
- }
885
- return relativePath.split(/[\\/]+/u).join('/');
886
- }
887
- function buildCompletionReportRepairPrompt(input) {
888
- const issue = input.input.issue;
889
- const reportIssueText = input.reportIssue.kind === 'missing'
890
- ? 'The completion report is missing.'
891
- : [
892
- input.reportIssue.message,
893
- ...input.reportIssue.errors,
894
- input.reportIssue.rawContent ? `Raw invalid report content (truncated):\n${input.reportIssue.rawContent}` : undefined,
895
- ].filter(Boolean).join('\n');
896
- return [
897
- '# Completion Report Repair',
898
- '',
899
- 'Repair only the completion report JSON at CODEX_ORCHESTRATOR_REPORT_FILE.',
900
- 'Do not edit product files. Do not edit GitHub. Do not create commits.',
901
- 'Use the changed files, issue text, schema errors/raw content, and validation/check evidence to write the corrected scoped completion report.',
902
- 'Final response raw JSON only.',
903
- '',
904
- `Issue #${issue.number}: ${issue.title}`,
905
- issue.body,
906
- '',
907
- 'Changed files:',
908
- ...input.changedFiles.map((file) => `- ${file}`),
909
- '',
910
- 'Report problem:',
911
- reportIssueText,
912
- '',
913
- 'Original workflow prompt:',
914
- input.input.reportRepair?.workflowPromptText ?? '',
915
- ].join('\n');
916
- }
917
- function buildEvidenceReportRepairPrompt(input) {
918
- const issue = input.input.issue;
919
- return [
920
- '# Evidence Repair',
921
- '',
922
- 'Repair only missing review-gate evidence in the completion report JSON at CODEX_ORCHESTRATOR_REPORT_FILE.',
923
- 'Do not edit product files. Do not edit GitHub. Do not create commits.',
924
- 'Only correct completion report JSON evidence fields such as validation, skippedChecks, residualRisks, and reviewHandoff.',
925
- 'You may run read-only review commands or review skills if needed, but final publication still depends on the runner rerunning gates.',
926
- 'Final response raw JSON only.',
927
- '',
928
- `Issue #${issue.number}: ${issue.title}`,
929
- issue.body,
930
- '',
931
- 'Changed files:',
932
- ...input.changedFiles.map((file) => `- ${file}`),
933
- '',
934
- 'Review gate reasons to repair:',
935
- ...input.reviewGate.reasons.map((reason) => `- ${reason}`),
936
- '',
937
- 'Typed blocker keys:',
938
- ...(input.reviewGate.blockers ?? []).map((blocker) => `- ${blocker.key}: ${blocker.reason}`),
939
- '',
940
- 'Current validation evidence:',
941
- ...input.validation.map((line) => `- ${line.command}: ${line.status} - ${line.summary}`),
942
- '',
943
- 'Original workflow prompt:',
944
- input.input.reportRepair?.workflowPromptText ?? '',
945
- ].join('\n');
946
- }
947
- function runnerBlocker(key, reason, source, repair) {
948
- return { key, reason, source, repair };
949
- }
950
- function applicableSkippedChecks(input, report, changedFiles) {
951
- if (shouldApplyVisualProofGate({ config: input.config, issue: input.issue, changedFiles })) {
952
- return report.skippedChecks;
953
- }
954
- return report.skippedChecks.filter((check) => !isRunnerOwnedVisualProofNonExecutionSkip(check));
955
- }
956
- function isRunnerOwnedVisualProofNonExecutionSkip(check) {
957
- return /\brunner-owned\b[\s\S]*\bvisual[- ]proof\b[\s\S]*\bnot executed\b/iu.test(check);
958
- }
959
- function isStructuredTddRedEvidence(line) {
960
- const evidence = line.evidence;
961
- return evidence?.kind === 'tdd-red-green'
962
- && evidence.red.status === 'failed'
963
- && evidence.red.command.trim().length > 0
964
- && evidence.red.summary.trim().length > 0
965
- && evidence.green.status === 'passed'
966
- && evidence.green.command.trim().length > 0
967
- && evidence.green.summary.trim().length > 0;
968
- }
969
- async function defaultPassingLocalPhaseExecutor(input) {
970
- return {
971
- phaseId: input.phaseId,
972
- status: 'passed',
973
- validation: [],
974
- artifacts: [],
975
- residualRisks: [],
976
- };
977
- }
978
- function localSessionBlockReasons(phaseResults) {
979
- return phaseResults.flatMap((phase) => {
980
- if (phase.status !== 'failed') {
981
- return [];
982
- }
983
- return [
984
- `Local phase ${phase.phaseId} failed`,
985
- ...phase.validation.map((line) => `${line.command}: ${line.status} - ${line.summary}`),
986
- ...phase.artifacts.map((artifact) => `${artifact.description}: ${artifact.url ?? artifact.path ?? 'missing-target'}`),
987
- ];
988
- });
989
- }
990
- function blocked(reasons, options = {}) {
991
- const result = {
992
- status: 'blocked',
993
- reasons,
994
- changedFiles: options.changedFiles ?? [],
995
- skippedChecks: options.skippedChecks ?? [],
996
- residualRisks: options.residualRisks ?? [],
997
- commits: options.commits ?? [],
998
- };
999
- if (options.validation) {
1000
- result.validation = options.validation;
1001
- }
1002
- if (options.blockers && options.blockers.length > 0) {
1003
- result.blockers = options.blockers;
1004
- }
1005
- if (options.repairAttempts && options.repairAttempts.length > 0) {
1006
- result.repairAttempts = options.repairAttempts;
1007
- }
1008
- if (options.acceptanceProofAttempt) {
1009
- result.acceptanceProofAttempt = options.acceptanceProofAttempt;
1010
- }
1011
- return result;
1012
- }
1013
- function repairAttemptsField(repairAttempts) {
1014
- return repairAttempts.length > 0 ? { repairAttempts } : {};
1015
- }
1016
- function formatCodexExitReason(result) {
1017
- const figmaReason = formatFigmaMcpFailureReason(result);
1018
- if (figmaReason) {
1019
- return figmaReason;
1020
- }
1021
- const output = [result.stderr, result.stdout]
1022
- .map((value) => value.trim())
1023
- .filter((value) => value.length > 0)
1024
- .join('\n');
1025
- const timeoutLine = output
1026
- .split(/\r?\n/u)
1027
- .map((line) => line.trim())
1028
- .reverse()
1029
- .find((line) => /timed out|timeout/iu.test(line));
1030
- const detail = timeoutLine ?? truncate(output, 600);
1031
- return detail
1032
- ? `Codex exited with code ${result.exitCode}: ${truncate(detail, 600)}`
1033
- : `Codex exited with code ${result.exitCode}`;
1034
- }
1035
- function isIdleTimeoutResult(result) {
1036
- if (result.exitCode !== 124) {
1037
- return false;
1038
- }
1039
- return `${result.stderr}\n${result.stdout}`
1040
- .split(/\r?\n/u)
1041
- .map((line) => line.trim())
1042
- .some((line) => /^Command idle timed out after [1-9][0-9]*ms\.$/u.test(line));
1043
- }
1044
- function formatFigmaMcpFailureReason(result) {
1045
- if (result.exitCode === 0 || result.figmaMcp?.enabled !== true) {
1046
- return undefined;
1047
- }
1048
- const output = `${result.stderr}\n${result.stdout}`;
1049
- const looksLikeFigmaMcpFailure = /\bfigma\b[\s\S]{0,120}\b(?:mcp|server|tool|connection|connect|timeout|timed out|401|403|auth|unauthorized|forbidden|unavailable|failed)\b/iu.test(output)
1050
- || /mcp_servers\.figma/iu.test(output);
1051
- if (!looksLikeFigmaMcpFailure) {
1052
- return undefined;
1053
- }
1054
- return result.figmaMcp.requirement === 'required'
1055
- ? REQUIRED_FIGMA_MCP_FAILURE_REASON
1056
- : OPTIONAL_FIGMA_MCP_FAILURE_REASON;
1057
- }
1058
- function truncate(value, maxLength) {
1059
- if (value.length <= maxLength) {
1060
- return value;
1061
- }
1062
- return `${value.slice(0, maxLength - 3)}...`;
1063
- }
1064
- //# sourceMappingURL=local-execution-session.js.map