@mjasnikovs/pi-task 0.38.29 → 0.38.30

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 (370) hide show
  1. package/dist/config/config.d.ts +70 -70
  2. package/dist/config/config.js +26 -35
  3. package/dist/config/extension-list.d.ts +6 -5
  4. package/dist/config/extension-list.js +3 -2
  5. package/dist/config/reasoning-args.d.ts +9 -7
  6. package/dist/config/reasoning-args.js +12 -10
  7. package/dist/config/reasoning.d.ts +44 -105
  8. package/dist/config/reasoning.js +27 -704
  9. package/dist/config/register.d.ts +34 -48
  10. package/dist/config/register.js +41 -51
  11. package/dist/config/tool-list.d.ts +16 -16
  12. package/dist/config/tool-list.js +1 -1
  13. package/dist/remote/bridge.d.ts +19 -10
  14. package/dist/remote/bridge.js +3 -2
  15. package/dist/remote/broadcast.js +3 -1
  16. package/dist/remote/events.js +12 -11
  17. package/dist/remote/history.d.ts +1 -1
  18. package/dist/remote/protocol.d.ts +6 -3
  19. package/dist/remote/protocol.js +2 -1
  20. package/dist/remote/push.d.ts +16 -16
  21. package/dist/remote/push.js +27 -27
  22. package/dist/remote/register.d.ts +3 -3
  23. package/dist/remote/register.js +17 -19
  24. package/dist/remote/server.d.ts +9 -8
  25. package/dist/remote/server.js +15 -14
  26. package/dist/remote/session-state.d.ts +5 -4
  27. package/dist/remote/session-state.js +8 -5
  28. package/dist/remote/sw.d.ts +7 -6
  29. package/dist/remote/sw.js +7 -6
  30. package/dist/remote/tailscale.d.ts +4 -2
  31. package/dist/remote/tailscale.js +4 -2
  32. package/dist/remote/ui-highlight.js +6 -5
  33. package/dist/remote/ui-render.js +4 -4
  34. package/dist/remote/ui-script.js +24 -24
  35. package/dist/remote/ui-styles.d.ts +1 -1
  36. package/dist/remote/ui-styles.js +10 -13
  37. package/dist/remote/ui-tools.js +9 -6
  38. package/dist/shared/child-extensions.d.ts +29 -17
  39. package/dist/shared/child-extensions.js +29 -17
  40. package/dist/shared/child-output.d.ts +30 -24
  41. package/dist/shared/child-output.js +25 -17
  42. package/dist/shared/child-process.d.ts +47 -40
  43. package/dist/shared/child-process.js +50 -59
  44. package/dist/shared/command-watchdog.d.ts +22 -16
  45. package/dist/shared/command-watchdog.js +28 -21
  46. package/dist/shared/fs-text.d.ts +16 -10
  47. package/dist/shared/fs-text.js +16 -10
  48. package/dist/shared/git-runner.d.ts +25 -25
  49. package/dist/shared/git-runner.js +25 -25
  50. package/dist/shared/leaked-tool-call.d.ts +17 -11
  51. package/dist/shared/leaked-tool-call.js +23 -15
  52. package/dist/shared/model-endpoint.d.ts +29 -16
  53. package/dist/shared/model-endpoint.js +33 -21
  54. package/dist/shared/pi-invocation.d.ts +7 -4
  55. package/dist/shared/pi-invocation.js +12 -7
  56. package/dist/shared/pkg-version.d.ts +13 -5
  57. package/dist/shared/pkg-version.js +13 -5
  58. package/dist/shared/reasoning-capability.d.ts +35 -24
  59. package/dist/shared/reasoning-capability.js +35 -24
  60. package/dist/shared/stream-watchdog.d.ts +60 -44
  61. package/dist/shared/stream-watchdog.js +62 -45
  62. package/dist/task/accept-debt.d.ts +41 -43
  63. package/dist/task/accept-debt.js +73 -65
  64. package/dist/task/api-synthesis.d.ts +24 -21
  65. package/dist/task/api-synthesis.js +32 -26
  66. package/dist/task/apis-contract.d.ts +32 -64
  67. package/dist/task/apis-contract.js +32 -64
  68. package/dist/task/artifact-closure.d.ts +27 -13
  69. package/dist/task/artifact-closure.js +95 -67
  70. package/dist/task/auto-commit.d.ts +46 -35
  71. package/dist/task/auto-commit.js +51 -38
  72. package/dist/task/auto-io.d.ts +45 -25
  73. package/dist/task/auto-io.js +57 -29
  74. package/dist/task/auto-orchestrator.d.ts +26 -24
  75. package/dist/task/auto-orchestrator.js +178 -162
  76. package/dist/task/auto-prompts.d.ts +36 -24
  77. package/dist/task/auto-prompts.js +40 -26
  78. package/dist/task/autofix-ledger.d.ts +27 -25
  79. package/dist/task/autofix-ledger.js +29 -26
  80. package/dist/task/batch-test-task.d.ts +20 -12
  81. package/dist/task/batch-test-task.js +67 -60
  82. package/dist/task/boot-probe.d.ts +60 -44
  83. package/dist/task/boot-probe.js +91 -72
  84. package/dist/task/cancel-input.d.ts +30 -16
  85. package/dist/task/cancel-input.js +20 -11
  86. package/dist/task/cancel-points.d.ts +27 -20
  87. package/dist/task/cancel-points.js +30 -22
  88. package/dist/task/child-runner.d.ts +46 -51
  89. package/dist/task/child-runner.js +48 -49
  90. package/dist/task/child-status.d.ts +23 -16
  91. package/dist/task/child-status.js +23 -16
  92. package/dist/task/clamp-output.js +12 -5
  93. package/dist/task/command-run.d.ts +31 -28
  94. package/dist/task/command-run.js +44 -35
  95. package/dist/task/command-shrink.d.ts +25 -18
  96. package/dist/task/command-shrink.js +37 -31
  97. package/dist/task/command-watchdog.d.ts +9 -6
  98. package/dist/task/command-watchdog.js +21 -15
  99. package/dist/task/context-attribution.d.ts +34 -26
  100. package/dist/task/context-attribution.js +34 -26
  101. package/dist/task/context-silence.d.ts +39 -29
  102. package/dist/task/context-silence.js +35 -25
  103. package/dist/task/context-usage.d.ts +16 -9
  104. package/dist/task/context-usage.js +16 -9
  105. package/dist/task/contracts.d.ts +8 -4
  106. package/dist/task/contracts.js +25 -17
  107. package/dist/task/coverage-loop.d.ts +22 -18
  108. package/dist/task/coverage-loop.js +35 -30
  109. package/dist/task/critique-probes.d.ts +13 -14
  110. package/dist/task/critique-probes.js +50 -39
  111. package/dist/task/debug-log.d.ts +13 -5
  112. package/dist/task/debug-log.js +32 -20
  113. package/dist/task/decompose-fidelity.d.ts +11 -9
  114. package/dist/task/decompose-fidelity.js +38 -33
  115. package/dist/task/decompose-granularity.d.ts +41 -38
  116. package/dist/task/decompose-granularity.js +41 -38
  117. package/dist/task/deep-render-check.d.ts +22 -14
  118. package/dist/task/deep-render-check.js +40 -31
  119. package/dist/task/dropped-input.d.ts +12 -7
  120. package/dist/task/dropped-input.js +5 -2
  121. package/dist/task/enforce-attribution.d.ts +38 -47
  122. package/dist/task/enforce-attribution.js +46 -52
  123. package/dist/task/enforce-guidelines.d.ts +31 -20
  124. package/dist/task/enforce-guidelines.js +32 -21
  125. package/dist/task/enrichment.d.ts +7 -2
  126. package/dist/task/enrichment.js +26 -14
  127. package/dist/task/env-notes.d.ts +16 -7
  128. package/dist/task/env-notes.js +48 -31
  129. package/dist/task/env-template-closure.d.ts +4 -4
  130. package/dist/task/env-template-closure.js +42 -34
  131. package/dist/task/external-context.d.ts +28 -21
  132. package/dist/task/external-context.js +17 -12
  133. package/dist/task/failure-classifier.d.ts +4 -5
  134. package/dist/task/failure-classifier.js +6 -7
  135. package/dist/task/file-inventory.d.ts +15 -11
  136. package/dist/task/file-inventory.js +25 -22
  137. package/dist/task/final-gate-fix.d.ts +74 -86
  138. package/dist/task/final-gate-fix.js +97 -116
  139. package/dist/task/final-gate-progress.d.ts +29 -46
  140. package/dist/task/final-gate-progress.js +40 -51
  141. package/dist/task/final-gate.d.ts +64 -97
  142. package/dist/task/final-gate.js +192 -199
  143. package/dist/task/fix-child.d.ts +21 -27
  144. package/dist/task/fix-child.js +21 -27
  145. package/dist/task/foreign-path.d.ts +6 -5
  146. package/dist/task/foreign-path.js +0 -0
  147. package/dist/task/frozen-conflict.d.ts +9 -10
  148. package/dist/task/frozen-conflict.js +61 -64
  149. package/dist/task/frozen-path-guard.d.ts +35 -14
  150. package/dist/task/frozen-path-guard.js +56 -39
  151. package/dist/task/gate-child.d.ts +27 -28
  152. package/dist/task/gate-child.js +36 -35
  153. package/dist/task/gate-deps.d.ts +34 -27
  154. package/dist/task/gate-deps.js +169 -159
  155. package/dist/task/gate-tally.d.ts +77 -80
  156. package/dist/task/gate-tally.js +65 -68
  157. package/dist/task/git-state-guard.d.ts +15 -11
  158. package/dist/task/git-state-guard.js +76 -66
  159. package/dist/task/impl-widget.d.ts +25 -16
  160. package/dist/task/impl-widget.js +27 -17
  161. package/dist/task/implementation-thinking.d.ts +33 -31
  162. package/dist/task/implementation-thinking.js +5 -6
  163. package/dist/task/implementation-turn.d.ts +34 -31
  164. package/dist/task/implementation-turn.js +29 -27
  165. package/dist/task/inline-markdown.d.ts +20 -7
  166. package/dist/task/inline-markdown.js +15 -6
  167. package/dist/task/launch-config-gap.js +25 -39
  168. package/dist/task/launch-contract.d.ts +18 -21
  169. package/dist/task/launch-contract.js +28 -30
  170. package/dist/task/launch-manifest.d.ts +6 -2
  171. package/dist/task/launch-manifest.js +35 -34
  172. package/dist/task/ledger.js +16 -14
  173. package/dist/task/lint-fix.d.ts +6 -8
  174. package/dist/task/lint-fix.js +67 -69
  175. package/dist/task/loop-detector.d.ts +9 -8
  176. package/dist/task/loop-detector.js +16 -12
  177. package/dist/task/mid-run-input.d.ts +17 -15
  178. package/dist/task/mid-run-input.js +17 -15
  179. package/dist/task/orchestrator.d.ts +24 -28
  180. package/dist/task/orchestrator.js +62 -64
  181. package/dist/task/orientation.d.ts +18 -23
  182. package/dist/task/orientation.js +24 -31
  183. package/dist/task/owned-freeze-conflict.d.ts +21 -20
  184. package/dist/task/owned-freeze-conflict.js +52 -85
  185. package/dist/task/owned-freeze-reassign.d.ts +40 -60
  186. package/dist/task/owned-freeze-reassign.js +41 -61
  187. package/dist/task/parsers.d.ts +4 -2
  188. package/dist/task/parsers.js +4 -4
  189. package/dist/task/phases.d.ts +41 -48
  190. package/dist/task/phases.js +179 -248
  191. package/dist/task/plan-io.d.ts +6 -7
  192. package/dist/task/plan-io.js +6 -7
  193. package/dist/task/plan-orchestrator.d.ts +10 -8
  194. package/dist/task/plan-orchestrator.js +14 -10
  195. package/dist/task/plan-prompts.d.ts +6 -5
  196. package/dist/task/plan-prompts.js +6 -5
  197. package/dist/task/plan-readonly.d.ts +4 -5
  198. package/dist/task/plan-readonly.js +4 -5
  199. package/dist/task/plan-rounds.d.ts +17 -29
  200. package/dist/task/plan-rounds.js +21 -34
  201. package/dist/task/plan-session.d.ts +58 -72
  202. package/dist/task/plan-session.js +61 -83
  203. package/dist/task/probe-gaming.d.ts +28 -27
  204. package/dist/task/probe-gaming.js +0 -0
  205. package/dist/task/prohibition-probe.d.ts +14 -16
  206. package/dist/task/prompts.d.ts +3 -4
  207. package/dist/task/prompts.js +17 -26
  208. package/dist/task/qa-transcript.d.ts +15 -22
  209. package/dist/task/qa-transcript.js +15 -21
  210. package/dist/task/question-box.d.ts +17 -13
  211. package/dist/task/question-box.js +19 -15
  212. package/dist/task/question-dedup.d.ts +6 -7
  213. package/dist/task/question-dedup.js +13 -14
  214. package/dist/task/question-dialog.d.ts +22 -32
  215. package/dist/task/question-dialog.js +22 -32
  216. package/dist/task/question-source.d.ts +18 -44
  217. package/dist/task/question-source.js +22 -51
  218. package/dist/task/refuted-constraint.d.ts +11 -31
  219. package/dist/task/refuted-constraint.js +27 -51
  220. package/dist/task/regenerable-artifacts.d.ts +12 -31
  221. package/dist/task/regenerable-artifacts.js +12 -31
  222. package/dist/task/render-check.d.ts +11 -22
  223. package/dist/task/render-check.js +33 -46
  224. package/dist/task/repo-health-check.d.ts +10 -14
  225. package/dist/task/repo-health-check.js +17 -23
  226. package/dist/task/requirements.d.ts +38 -71
  227. package/dist/task/requirements.js +78 -126
  228. package/dist/task/research-fanout-budget.d.ts +51 -88
  229. package/dist/task/research-fanout-budget.js +51 -88
  230. package/dist/task/research-worker.d.ts +29 -39
  231. package/dist/task/research-worker.js +37 -61
  232. package/dist/task/resume-gap.d.ts +14 -15
  233. package/dist/task/root-cause-repair.d.ts +9 -9
  234. package/dist/task/root-cause-repair.js +28 -40
  235. package/dist/task/run-bracket.d.ts +10 -13
  236. package/dist/task/run-end.d.ts +12 -22
  237. package/dist/task/run-end.js +8 -16
  238. package/dist/task/run-final-gate.d.ts +19 -21
  239. package/dist/task/run-final-gate.js +62 -80
  240. package/dist/task/runner-globs.d.ts +12 -13
  241. package/dist/task/runner-globs.js +12 -13
  242. package/dist/task/runner-resolve.d.ts +9 -9
  243. package/dist/task/runner-resolve.js +22 -23
  244. package/dist/task/script-escape.d.ts +10 -12
  245. package/dist/task/script-escape.js +13 -14
  246. package/dist/task/serve-entry.d.ts +1 -1
  247. package/dist/task/serve-entry.js +22 -25
  248. package/dist/task/service-blocks.js +4 -2
  249. package/dist/task/shipped-source.d.ts +11 -29
  250. package/dist/task/shipped-source.js +11 -29
  251. package/dist/task/skip-escape.js +10 -14
  252. package/dist/task/spec-urls.d.ts +26 -65
  253. package/dist/task/spec-urls.js +26 -65
  254. package/dist/task/spec-validation.d.ts +17 -20
  255. package/dist/task/spec-validation.js +17 -20
  256. package/dist/task/stall-detector.d.ts +23 -30
  257. package/dist/task/stall-detector.js +23 -30
  258. package/dist/task/stream-watchdog.d.ts +14 -12
  259. package/dist/task/stream-watchdog.js +14 -12
  260. package/dist/task/substitution-probe.d.ts +17 -20
  261. package/dist/task/substitution-probe.js +17 -20
  262. package/dist/task/task-gates.d.ts +36 -41
  263. package/dist/task/task-gates.js +95 -106
  264. package/dist/task/task-io.d.ts +4 -4
  265. package/dist/task/task-io.js +4 -4
  266. package/dist/task/task-parsers.js +4 -3
  267. package/dist/task/task-provenance.d.ts +2 -2
  268. package/dist/task/task-provenance.js +11 -13
  269. package/dist/task/task-types.d.ts +4 -3
  270. package/dist/task/terminal-outcome.d.ts +14 -16
  271. package/dist/task/terminal-outcome.js +12 -14
  272. package/dist/task/test-assembly.d.ts +13 -20
  273. package/dist/task/test-assembly.js +13 -20
  274. package/dist/task/timings.d.ts +5 -3
  275. package/dist/task/timings.js +5 -3
  276. package/dist/task/title-label.d.ts +9 -4
  277. package/dist/task/title-label.js +9 -4
  278. package/dist/task/type-only-answer.d.ts +44 -52
  279. package/dist/task/type-only-answer.js +44 -52
  280. package/dist/task/unfailable-command.d.ts +18 -24
  281. package/dist/task/unfailable-command.js +21 -27
  282. package/dist/task/unknown-routing.d.ts +10 -4
  283. package/dist/task/unknown-routing.js +10 -4
  284. package/dist/task/user-directives.d.ts +5 -8
  285. package/dist/task/user-directives.js +5 -8
  286. package/dist/task/verify-quality.d.ts +18 -22
  287. package/dist/task/verify-quality.js +45 -46
  288. package/dist/task/verify-reconcile.d.ts +15 -10
  289. package/dist/task/verify-reconcile.js +45 -43
  290. package/dist/task/verify-resolution.d.ts +24 -20
  291. package/dist/task/verify-resolution.js +51 -50
  292. package/dist/task/verify-work.d.ts +59 -66
  293. package/dist/task/verify-work.js +101 -138
  294. package/dist/task/widget.d.ts +15 -14
  295. package/dist/task/widget.js +22 -17
  296. package/dist/task/wiring-claims.d.ts +25 -32
  297. package/dist/task/wiring-claims.js +30 -35
  298. package/dist/task/write-guard.d.ts +39 -39
  299. package/dist/task/write-guard.js +48 -51
  300. package/dist/task/yolo.d.ts +34 -30
  301. package/dist/task/yolo.js +42 -37
  302. package/dist/workers/abstention.d.ts +21 -41
  303. package/dist/workers/abstention.js +27 -48
  304. package/dist/workers/brave-search.d.ts +4 -3
  305. package/dist/workers/brave-search.js +5 -2
  306. package/dist/workers/brave-warning.d.ts +7 -4
  307. package/dist/workers/brave-warning.js +19 -7
  308. package/dist/workers/ddg-search.d.ts +6 -6
  309. package/dist/workers/ddg-search.js +18 -12
  310. package/dist/workers/docs-cache.js +5 -2
  311. package/dist/workers/docs-chunk.d.ts +30 -37
  312. package/dist/workers/docs-chunk.js +37 -41
  313. package/dist/workers/docs-core.d.ts +28 -44
  314. package/dist/workers/docs-core.js +25 -44
  315. package/dist/workers/docs-index.js +4 -3
  316. package/dist/workers/docs-lookup.d.ts +15 -22
  317. package/dist/workers/docs-lookup.js +12 -21
  318. package/dist/workers/docs-project.d.ts +15 -9
  319. package/dist/workers/docs-project.js +17 -10
  320. package/dist/workers/docs-resolve.d.ts +19 -20
  321. package/dist/workers/docs-resolve.js +35 -32
  322. package/dist/workers/docs-retrieve.d.ts +5 -6
  323. package/dist/workers/docs-retrieve.js +18 -15
  324. package/dist/workers/exa-search.d.ts +9 -6
  325. package/dist/workers/exa-search.js +23 -12
  326. package/dist/workers/fetch-core.d.ts +13 -16
  327. package/dist/workers/fetch-core.js +23 -23
  328. package/dist/workers/focused-extractor.d.ts +12 -12
  329. package/dist/workers/focused-extractor.js +16 -19
  330. package/dist/workers/html-clean.js +24 -14
  331. package/dist/workers/http-request.d.ts +28 -20
  332. package/dist/workers/http-request.js +22 -17
  333. package/dist/workers/npm-version.d.ts +28 -11
  334. package/dist/workers/npm-version.js +24 -15
  335. package/dist/workers/phantom-imports.d.ts +15 -12
  336. package/dist/workers/phantom-imports.js +30 -24
  337. package/dist/workers/pi-worker-core.d.ts +69 -71
  338. package/dist/workers/pi-worker-core.js +100 -109
  339. package/dist/workers/pi-worker-docs.d.ts +24 -19
  340. package/dist/workers/pi-worker-docs.js +67 -76
  341. package/dist/workers/pi-worker-fetch.d.ts +7 -3
  342. package/dist/workers/pi-worker-fetch.js +27 -19
  343. package/dist/workers/pi-worker-search.js +12 -8
  344. package/dist/workers/pi-worker.d.ts +9 -4
  345. package/dist/workers/pi-worker.js +21 -14
  346. package/dist/workers/reasoning-warning.d.ts +18 -17
  347. package/dist/workers/reasoning-warning.js +22 -20
  348. package/dist/workers/research-cache.js +50 -78
  349. package/dist/workers/search-core.js +7 -5
  350. package/dist/workers/search-types.d.ts +10 -9
  351. package/dist/workers/search-types.js +9 -8
  352. package/dist/workers/session-hint.d.ts +13 -14
  353. package/dist/workers/session-hint.js +8 -9
  354. package/dist/workers/shared.d.ts +21 -25
  355. package/dist/workers/shared.js +0 -0
  356. package/dist/workers/single-read-extension.d.ts +14 -7
  357. package/dist/workers/single-read-extension.js +14 -7
  358. package/dist/workers/single-read-guard.d.ts +25 -28
  359. package/dist/workers/single-read-guard.js +32 -32
  360. package/dist/workers/typeonly-log.d.ts +12 -9
  361. package/dist/workers/typeonly-log.js +29 -33
  362. package/dist/workers/worker-channels.d.ts +15 -23
  363. package/dist/workers/worker-channels.js +15 -23
  364. package/dist/workers/worker-failure.d.ts +38 -46
  365. package/dist/workers/worker-failure.js +31 -39
  366. package/dist/workers/worker-kill.d.ts +25 -26
  367. package/dist/workers/worker-kill.js +16 -19
  368. package/dist/workers/worker-profiles.d.ts +43 -53
  369. package/dist/workers/worker-profiles.js +30 -38
  370. package/package.json +10 -8
@@ -1,31 +1,22 @@
1
1
  /**
2
- * Deterministic synthesized-wiring scanner for a composed spec (run-8 F3, gen side).
2
+ * Deterministic synthesized-wiring scanner for a composed spec, wired as the
3
+ * `synthesized-wiring` critique probe.
3
4
  *
4
- * F3 (the dominant run-8 shipped defect): refine/compose invent a "uniform" wiring
5
- * table — one module → one mount prefix, `/api/<x>` → `<x>Routes` for every module
6
- * though the design pins ENDPOINTS, not mounts, and one module's pinned endpoints do
7
- * NOT all sit under a single prefix (photos: `POST /api/listings/:id/photos` AND
8
- * `GET/DELETE /api/photos/:id`). Mounting that module at `/api/photos` double-prefixes
9
- * the upload; consumers follow the pinned paths, assembly follows the invented table,
10
- * the seam ships broken. See [[contract-registry-f3]] (#4, the verify-side + registry
11
- * lever) — this is its GENERATION-side complement.
12
- *
13
- * A/B-measured on the live 27B (F3 critique trap): the CROSS-SLICE CONTRACTS registry
14
- * is NECESSARY but the prompt+registry alone is a WEAK catcher (A/B arms 0/8, +registry
15
- * only 1/8) — the model's attention goes to the obvious VERIFY weakness and it rarely
16
- * does the path-composition reasoning even with the facts in front of it. The reliable
17
- * lever is the SAME probe+rule pattern as [[skip-escape-scanner-f2]] / [[verify-
18
- * substitution-ab]]: a deterministic finding that NAMES the exact synthesized mappings
19
- * and juxtaposes the verbatim pinned facts, forcing focused reconciliation.
5
+ * The failure it catches: a spec states a "uniform" wiring table — one module to one
6
+ * mount prefix, `/api/<x>` → `<x>Routes` while the design pins ENDPOINTS, not
7
+ * mounts. When a module's pinned endpoints do NOT all sit under a single prefix
8
+ * (`POST /api/listings/:id/photos` AND `GET /api/photos/:id`), mounting it at
9
+ * `/api/photos` double-prefixes the upload. Consumers follow the pinned paths,
10
+ * assembly follows the invented table, and the seam ships broken.
20
11
  *
21
12
  * This scanner does NOT decide which mapping is wrong — that needs routing-composition
22
- * knowledge (a forbidden stack assumption). It surfaces every mapping that (a) is not a
23
- * verbatim substring of the design/registry (so it is INFERRED, not cited) AND (b) touches
24
- * a pinned cross-slice boundary (an operand appears in the registry) — i.e. it reshapes a
25
- * shared contract. The 4 coincidentally-correct mappings are surfaced too, but framed as
26
- * "reconcile each; keep the conforming ones" — the LLM decides, informed. Pure text/
27
- * substring analysis; no stack, framework, or routing assumptions. Empty registry (single
28
- * `/task`, or no shared boundary) no-op.
13
+ * knowledge, which would be a stack assumption. It surfaces every mapping that (a) is
14
+ * not a verbatim substring of the design or registry, so it is INFERRED rather than
15
+ * cited, AND (b) touches a pinned cross-slice boundary, meaning an operand appears in
16
+ * the registry. Conforming mappings are surfaced too, framed as "reconcile each; keep
17
+ * the conforming ones" — the model decides, informed. Pure text and substring analysis;
18
+ * no stack, framework, or routing assumptions. An empty registry (a single `/task`, or
19
+ * a design pinning no shared boundary) is a no-op.
29
20
  */
30
21
  import * as fs from 'node:fs';
31
22
  import * as path from 'node:path';
@@ -37,8 +28,9 @@ const ARROW = '(?:→|->|=>|⇒|↦)';
37
28
  const MAPPING_LINE_RE = new RegExp(`^[ \\t]*[-*]?[ \\t]*(.+?)[ \\t]*${ARROW}[ \\t]*(.+?)[ \\t]*$`);
38
29
  /** An operand shorter than this is too generic to anchor a boundary match. */
39
30
  const MIN_OPERAND_LENGTH = 4;
40
- /** Collapse whitespace + lowercase; drop markdown backticks so quoting formatting
41
- * differences don't defeat the substring match. Mirrors contracts.ts's normalise. */
31
+ /** Collapse whitespace + lowercase, and drop markdown backticks so a spec that
32
+ * quotes `/api/photos` still matches a design that writes it bare. That backtick
33
+ * strip is the one thing this does beyond contracts.ts's `normalise`. */
42
34
  function normalise(s) {
43
35
  return s.replace(/`/g, '').replace(/\s+/g, ' ').trim().toLowerCase();
44
36
  }
@@ -68,9 +60,9 @@ export function findSynthesizedWiring(spec, grounding, registry) {
68
60
  // Cited, not synthesized: the whole mapping appears verbatim in the source.
69
61
  if (groundHay.includes(key))
70
62
  continue;
71
- // Only a mapping that touches a PINNED shared boundary is an F3 suspect this
72
- // is the crisp discriminator that keeps internal-flow prose ("input → output")
73
- // out. An operand (long enough to be specific) must appear in the registry.
63
+ // Only a mapping that touches a PINNED shared boundary is a suspect. That is
64
+ // the discriminator keeping internal-flow prose ("input → output") out: an
65
+ // operand, long enough to be specific, must appear in the registry.
74
66
  const touchesBoundary = [from, to].some(op => {
75
67
  const n = normalise(op);
76
68
  return n.length >= MIN_OPERAND_LENGTH && regHay.includes(n);
@@ -111,22 +103,25 @@ export function wiringProbeText(findings, registry) {
111
103
  ].join('\n');
112
104
  }
113
105
  /**
114
- * Render findings as a critique-rewrite defect block (fed into the FOCUS list): the
115
- * rewrite must reconcile each mapping against the pinned facts and correct only the
116
- * one(s) that break. Mirrors skipEscapeDefectText's shape.
106
+ * The same text under the name the critique-rewrite defect path uses. One rendering
107
+ * serves both readers, so the probe the model sees and the defect the rewrite is
108
+ * handed can never drift apart.
117
109
  */
118
110
  export function wiringDefectText(findings, registry) {
119
111
  return wiringProbeText(findings, registry);
120
112
  }
121
113
  // An @-file mention in a spec ("@DESIGN/foo.md"), minus trailing prose punctuation.
122
- // Mirrors phantom-imports' mention rules so grounding sees the same source docs.
114
+ // Byte-identical to auto-orchestrator.ts's pair, so grounding resolves the same
115
+ // mentions the planner already resolved. `@` must follow start-of-string or
116
+ // whitespace, so "mail@DESIGN.md" is not a mention.
123
117
  const MENTION_RE = /(?:^|\s)@([^\s]+)/g;
124
118
  const MENTION_TRAILING_PUNCT = /[.,;:!?)\]}>"']+$/;
125
119
  /**
126
120
  * Concatenate the design/spec docs the given texts @-reference (best-effort, readable
127
121
  * files only) as extra grounding for findSynthesizedWiring — so a mapping the design
128
- * states verbatim is treated as CITED, not synthesized. Unreadable/absent mentions are
129
- * skipped; returns '' when nothing resolves.
122
+ * states verbatim is treated as CITED, not synthesized. Each path is read once across
123
+ * all texts; unreadable or absent mentions are skipped; returns '' when nothing
124
+ * resolves.
130
125
  */
131
126
  export function readReferencedDocs(cwd, ...texts) {
132
127
  const seen = new Set();
@@ -9,37 +9,33 @@ export interface TreeChangeSummary {
9
9
  }
10
10
  /**
11
11
  * Parse `git status --porcelain` output into the change summary. A rename entry
12
- * contributes its source to `deleted` and its target to `added` (unstaged child
13
- * edits show the same reality as separate ` D old` + `?? new` lines, so both
14
- * shapes classify identically). Deterministic and pure so it is unit-tested
15
- * without a repo.
12
+ * contributes its source to `deleted` and its target to `added`. An unstaged child
13
+ * edit shows the same reality as separate ` D old` + `A new` (or `?? new`) lines,
14
+ * and both shapes produce the identical summary which is what lets the
15
+ * relocation allowance below read either one. Deterministic and pure, so it is
16
+ * unit-tested without a repo.
16
17
  */
17
18
  export declare function parseTreeChanges(porcelain: string): TreeChangeSummary;
18
19
  /**
19
20
  * Parse `git diff --name-status` output (tab-separated: `M\tpath`, `A\tpath`,
20
- * `D\tpath`, `R100\told\tnew`, `C75\told\tnew`) into the same change summary. Used
21
- * where the working tree is already clean and the last COMMIT's diff is the record
22
- * of the task's changes (the post-enforce re-verify fallback). A rename entry
23
- * contributes its source to `deleted` and its target to `added`, matching
24
- * parseTreeChanges so the relocation allowance below reads both shapes identically;
25
- * a copy's source still exists, so only its target counts (as added).
21
+ * `D\tpath`, `R100\told\tnew`, `C100\told\tnew`) into the same change summary.
22
+ * Used where the working tree is already clean and the last COMMIT's diff is the
23
+ * record of the task's changes. A rename entry contributes its source to `deleted`
24
+ * and its target to `added`, matching parseTreeChanges so the relocation allowance
25
+ * below reads both shapes identically; a copy's source still exists, so only its
26
+ * target counts (as added).
26
27
  */
27
28
  export declare function parseNameStatusChanges(nameStatus: string): TreeChangeSummary;
28
29
  /**
29
- * The deletions a fix pass may NOT make: every deleted tracked file whose name does
30
- * not reappear among the added files (a relocation keeps the file, under the same
31
- * name, somewhere in the tree). Anything returned here rejects the whole fix
32
- * attempt run 11's `rm src/client/pages/admin.tsx` had no corresponding add and
33
- * destroyed a sibling task's verified deliverable.
30
+ * The deletions a fix pass may NOT make: every deleted tracked file whose BASENAME
31
+ * does not reappear among the added files. A relocation keeps the file, under the
32
+ * same name, somewhere in the tree; a RENAME does not, and is reported. Anything
33
+ * returned here makes final-gate-fix discard the whole attempt.
34
34
  *
35
- * REGENERABLE TEST-RUNNER OUTPUT IS EXEMPT (mx5 run 20). The guard is pure git: no
36
- * ecosystem, no exemption list, so three Playwright FAILURE screenshots that
37
- * TASK_0027's own `git add -A` had swept into a commit read as deliverables. Two
38
- * consecutive attempts were discarded whole over them — each taking a real
39
- * `src/client/api.test.tsx` repair with it, which attempt 3 then re-did and kept.
40
- * 6m14s of an 8m16s gate. And the pipeline committed those same three deletions at
41
- * the end anyway, in the stranded-fix commit (mx5 5d4147e), so the guard did not
42
- * even preserve what it rejected two attempts to protect.
35
+ * REGENERABLE TEST-RUNNER OUTPUT IS EXEMPT. Without an exemption the guard is pure
36
+ * git, so a failure screenshot a task's own `git add -A` swept into a commit reads
37
+ * as a deliverable and its removal discards a whole attempt including the real
38
+ * repair that attempt also made.
43
39
  *
44
40
  * The exempt list is a strict SUBSET of the verdict-level artifact list and lives
45
41
  * in `regenerable-artifacts.ts`. `dist/`, `build/`, `.next/`, `.turbo/` and
@@ -52,23 +48,27 @@ export declare function findForbiddenDeletions(changes: TreeChangeSummary): stri
52
48
  export type IgnoredClass = 'build-output' | 'dep-dir' | 'task-dir' | 'vcs-meta' | 'actionable';
53
49
  /**
54
50
  * Classify one repo-relative ignored path. `outdirs` are build output directories
55
- * parsed from the project's own build commands. Only `actionable` may produce a
56
- * finding everything else is reproducible from the repository by running the
51
+ * parsed from the project's own build commands (gate-deps' `parseBuildOutdirs`),
52
+ * matched by whole leading path SEGMENTS outdir `artifacts` matches
53
+ * `artifacts/a.js` and not `artifactsx/a.js`. Only `actionable` may produce a
54
+ * finding; everything else is reproducible from the repository by running the
57
55
  * project's own tooling, which is exactly what makes it not a gate concern.
58
56
  */
59
57
  export declare function classifyIgnoredPath(rel: string, outdirs: string[]): IgnoredClass;
60
58
  /** The ignored paths a gate may rule on: everything not exempt by mechanism. */
61
59
  export declare function findActionableIgnoredWrites(paths: string[], outdirs: string[]): string[];
62
60
  /**
63
- * A fingerprint per ignored path (`mtimeMs:size`, or a marker for a directory),
64
- * taken before and after a write-capable child so a write is ATTRIBUTED to that
65
- * child rather than to the tree's pre-existing state. Ignored files are untracked,
66
- * so git cannot tell "changed" from "was always there" — only the snapshot can.
61
+ * A fingerprint per ignored path (`<mtimeMs>:<size>` for a file, `dir:<mtimeMs>`
62
+ * for a directory), taken before and after a write-capable child so a write is
63
+ * ATTRIBUTED to that child rather than to the tree's pre-existing state. Ignored
64
+ * files are untracked, so git cannot tell "changed" from "was always there" — only
65
+ * the snapshot can.
67
66
  */
68
67
  export type IgnoredSnapshot = Record<string, string>;
69
68
  /**
70
- * Paths whose fingerprint appeared or changed across the child's window. Pure, so
71
- * the attribution rule is unit-testable without a repo.
69
+ * Paths whose fingerprint appeared or changed across the child's window, sorted.
70
+ * A path that VANISHED is not reported the channel exists to catch writes.
71
+ * Pure, so the attribution rule is unit-testable without a repo.
72
72
  */
73
73
  export declare function diffIgnoredSnapshots(before: IgnoredSnapshot, after: IgnoredSnapshot): string[];
74
74
  /**
@@ -80,19 +80,19 @@ export declare function ignoredWriteTrailLine(paths: string[]): string;
80
80
  /**
81
81
  * The durable debt reason for the same event. Path names only, same rule.
82
82
  *
83
- * The wording tracks what was actually PROVEN. `dependent === true` is the probe's
84
- * answer that the gate does not pass without these files; `undefined` is an
85
- * unanswered probe (the attempt never converged, or the probe could not run), which
86
- * is still worth carrying because the file is on disk and can green a LATER attempt.
87
- * A debt that overstates its evidence is the same defect this whole channel exists
88
- * to fix, one level up.
83
+ * The wording tracks what was actually PROVEN. Only `dependent === true` the
84
+ * probe's answer that the gate does not pass without these files earns the strong
85
+ * head. Anything else, `false` or an unanswered `undefined`, gets the weaker one:
86
+ * the write is still worth carrying because the file is on disk and can green a
87
+ * LATER attempt. A debt that overstates its evidence is the same defect this whole
88
+ * channel exists to fix, one level up.
89
89
  */
90
90
  export declare function ignoredWriteDebtReason(paths: string[], dependent?: boolean): string;
91
91
  /** The UNOBSERVED note that replaces such a PASS. Path names only, same rule. */
92
92
  export declare function ignoredWriteUnobservedNote(paths: string[]): string;
93
93
  /**
94
94
  * One-line summary for the gate debug log — the diff capture every write-capable
95
- * child gets so "what did this pass change" is answerable from artifacts (the
96
- * run-11 `rm` left no trace outside the bash stream).
95
+ * child gets, so "what did this pass change" is answerable from the artifacts
96
+ * rather than only from the child's bash stream.
97
97
  */
98
98
  export declare function formatTreeChanges(changes: TreeChangeSummary): string;
@@ -1,26 +1,24 @@
1
1
  /**
2
2
  * write-guard — deterministic tree-change accounting for WRITE-CAPABLE gate
3
- * children (mx5 run 11).
3
+ * children (`FINAL_FIX_TOOLS` and `LINT_FIX_TOOLS` are both `read,edit,bash`).
4
4
  *
5
- * The failure class: the final-gate autofix child (read,edit,bash) was added after
6
- * the run-8 guard generation and inherited NONE of the guards the other
7
- * write-capable passes carry — no diff capture, no frozen-path deny, no probe
8
- * scans, free `rm`. Run 11 it deleted `src/client/pages/admin.tsx` (TASK_0008's
9
- * verified deliverable) to satisfy a recorded debt claim, and the deletion was
10
- * invisible: nothing even logged what the pass changed.
5
+ * The failure class it exists for: a fix child with `bash` can `rm` a tracked
6
+ * file to satisfy a recorded claim, and nothing else in the gate would log what
7
+ * that pass changed.
11
8
  *
12
9
  * This module is the pure half of the guard stack: parse `git status --porcelain`
13
- * into a change summary (the diff-capture log line every write-capable child now
14
- * gets at the gate-deps seam), and classify tracked-file DELETIONS. A fix pass
15
- * exists to repair the assembled repository, not to shrink it: every tracked file
16
- * is a committed task's deliverable, so deleting one is rejected outright — with
17
- * one allowance, a RELOCATION (the same file name reappears as an added file
18
- * elsewhere, e.g. moving a test the runner was never meant to pick up out of its
19
- * glob — the legitimate fix shape from run 7). Pure text/path analysis; no git
20
- * execution, no stack assumptions.
10
+ * (or `git diff --name-status`) into a change summary the diff-capture log line
11
+ * every write-capable child gets at the gate-deps seam and classify tracked-file
12
+ * DELETIONS. A fix pass exists to repair the assembled repository, not to shrink
13
+ * it: every tracked file is a committed task's deliverable, so deleting one is
14
+ * rejected outright, with two allowances. A RELOCATION, where the same file NAME
15
+ * reappears among the added files (moving a test out of a runner's glob is a
16
+ * legitimate fix shape), and the regenerable test output `regenerable-artifacts.ts`
17
+ * exempts. Pure text and path analysis; no git execution, no stack assumptions.
21
18
  */
22
19
  import { isDeletionExemptArtifact } from './regenerable-artifacts.js';
23
- /** Porcelain v1 line: `XY <path>` or `XY <orig> -> <new>` (rename/copy). */
20
+ /** Porcelain v1 line: `XY <path>`, or `XY <orig> -> <new>` for a staged rename or
21
+ * copy. A path git had to quote arrives wrapped in `"` and is unwrapped here. */
24
22
  function splitEntry(raw) {
25
23
  if (raw.length < 4)
26
24
  return null;
@@ -41,10 +39,11 @@ function splitEntry(raw) {
41
39
  }
42
40
  /**
43
41
  * Parse `git status --porcelain` output into the change summary. A rename entry
44
- * contributes its source to `deleted` and its target to `added` (unstaged child
45
- * edits show the same reality as separate ` D old` + `?? new` lines, so both
46
- * shapes classify identically). Deterministic and pure so it is unit-tested
47
- * without a repo.
42
+ * contributes its source to `deleted` and its target to `added`. An unstaged child
43
+ * edit shows the same reality as separate ` D old` + `A new` (or `?? new`) lines,
44
+ * and both shapes produce the identical summary which is what lets the
45
+ * relocation allowance below read either one. Deterministic and pure, so it is
46
+ * unit-tested without a repo.
48
47
  */
49
48
  export function parseTreeChanges(porcelain) {
50
49
  const modified = new Set();
@@ -78,12 +77,12 @@ export function parseTreeChanges(porcelain) {
78
77
  }
79
78
  /**
80
79
  * Parse `git diff --name-status` output (tab-separated: `M\tpath`, `A\tpath`,
81
- * `D\tpath`, `R100\told\tnew`, `C75\told\tnew`) into the same change summary. Used
82
- * where the working tree is already clean and the last COMMIT's diff is the record
83
- * of the task's changes (the post-enforce re-verify fallback). A rename entry
84
- * contributes its source to `deleted` and its target to `added`, matching
85
- * parseTreeChanges so the relocation allowance below reads both shapes identically;
86
- * a copy's source still exists, so only its target counts (as added).
80
+ * `D\tpath`, `R100\told\tnew`, `C100\told\tnew`) into the same change summary.
81
+ * Used where the working tree is already clean and the last COMMIT's diff is the
82
+ * record of the task's changes. A rename entry contributes its source to `deleted`
83
+ * and its target to `added`, matching parseTreeChanges so the relocation allowance
84
+ * below reads both shapes identically; a copy's source still exists, so only its
85
+ * target counts (as added).
87
86
  */
88
87
  export function parseNameStatusChanges(nameStatus) {
89
88
  const modified = new Set();
@@ -121,20 +120,15 @@ const basename = (p) => {
121
120
  return i === -1 ? p : p.slice(i + 1);
122
121
  };
123
122
  /**
124
- * The deletions a fix pass may NOT make: every deleted tracked file whose name does
125
- * not reappear among the added files (a relocation keeps the file, under the same
126
- * name, somewhere in the tree). Anything returned here rejects the whole fix
127
- * attempt run 11's `rm src/client/pages/admin.tsx` had no corresponding add and
128
- * destroyed a sibling task's verified deliverable.
123
+ * The deletions a fix pass may NOT make: every deleted tracked file whose BASENAME
124
+ * does not reappear among the added files. A relocation keeps the file, under the
125
+ * same name, somewhere in the tree; a RENAME does not, and is reported. Anything
126
+ * returned here makes final-gate-fix discard the whole attempt.
129
127
  *
130
- * REGENERABLE TEST-RUNNER OUTPUT IS EXEMPT (mx5 run 20). The guard is pure git: no
131
- * ecosystem, no exemption list, so three Playwright FAILURE screenshots that
132
- * TASK_0027's own `git add -A` had swept into a commit read as deliverables. Two
133
- * consecutive attempts were discarded whole over them — each taking a real
134
- * `src/client/api.test.tsx` repair with it, which attempt 3 then re-did and kept.
135
- * 6m14s of an 8m16s gate. And the pipeline committed those same three deletions at
136
- * the end anyway, in the stranded-fix commit (mx5 5d4147e), so the guard did not
137
- * even preserve what it rejected two attempts to protect.
128
+ * REGENERABLE TEST-RUNNER OUTPUT IS EXEMPT. Without an exemption the guard is pure
129
+ * git, so a failure screenshot a task's own `git add -A` swept into a commit reads
130
+ * as a deliverable and its removal discards a whole attempt including the real
131
+ * repair that attempt also made.
138
132
  *
139
133
  * The exempt list is a strict SUBSET of the verdict-level artifact list and lives
140
134
  * in `regenerable-artifacts.ts`. `dist/`, `build/`, `.next/`, `.turbo/` and
@@ -176,8 +170,10 @@ const BUILD_DIR_NAMES = new Set([
176
170
  ]);
177
171
  /**
178
172
  * Classify one repo-relative ignored path. `outdirs` are build output directories
179
- * parsed from the project's own build commands. Only `actionable` may produce a
180
- * finding everything else is reproducible from the repository by running the
173
+ * parsed from the project's own build commands (gate-deps' `parseBuildOutdirs`),
174
+ * matched by whole leading path SEGMENTS outdir `artifacts` matches
175
+ * `artifacts/a.js` and not `artifactsx/a.js`. Only `actionable` may produce a
176
+ * finding; everything else is reproducible from the repository by running the
181
177
  * project's own tooling, which is exactly what makes it not a gate concern.
182
178
  */
183
179
  export function classifyIgnoredPath(rel, outdirs) {
@@ -210,8 +206,9 @@ export function findActionableIgnoredWrites(paths, outdirs) {
210
206
  return paths.filter(p => classifyIgnoredPath(p, outdirs) === 'actionable');
211
207
  }
212
208
  /**
213
- * Paths whose fingerprint appeared or changed across the child's window. Pure, so
214
- * the attribution rule is unit-testable without a repo.
209
+ * Paths whose fingerprint appeared or changed across the child's window, sorted.
210
+ * A path that VANISHED is not reported the channel exists to catch writes.
211
+ * Pure, so the attribution rule is unit-testable without a repo.
215
212
  */
216
213
  export function diffIgnoredSnapshots(before, after) {
217
214
  const out = [];
@@ -233,12 +230,12 @@ export function ignoredWriteTrailLine(paths) {
233
230
  /**
234
231
  * The durable debt reason for the same event. Path names only, same rule.
235
232
  *
236
- * The wording tracks what was actually PROVEN. `dependent === true` is the probe's
237
- * answer that the gate does not pass without these files; `undefined` is an
238
- * unanswered probe (the attempt never converged, or the probe could not run), which
239
- * is still worth carrying because the file is on disk and can green a LATER attempt.
240
- * A debt that overstates its evidence is the same defect this whole channel exists
241
- * to fix, one level up.
233
+ * The wording tracks what was actually PROVEN. Only `dependent === true` the
234
+ * probe's answer that the gate does not pass without these files earns the strong
235
+ * head. Anything else, `false` or an unanswered `undefined`, gets the weaker one:
236
+ * the write is still worth carrying because the file is on disk and can green a
237
+ * LATER attempt. A debt that overstates its evidence is the same defect this whole
238
+ * channel exists to fix, one level up.
242
239
  */
243
240
  export function ignoredWriteDebtReason(paths, dependent) {
244
241
  const head = dependent === true ?
@@ -258,8 +255,8 @@ export function ignoredWriteUnobservedNote(paths) {
258
255
  }
259
256
  /**
260
257
  * One-line summary for the gate debug log — the diff capture every write-capable
261
- * child gets so "what did this pass change" is answerable from artifacts (the
262
- * run-11 `rm` left no trace outside the bash stream).
258
+ * child gets, so "what did this pass change" is answerable from the artifacts
259
+ * rather than only from the child's bash stream.
263
260
  */
264
261
  export function formatTreeChanges(changes) {
265
262
  if (changes.modified.length === 0
@@ -2,10 +2,11 @@ import type { AutoAnswer } from './parsers.js';
2
2
  import type { ResolutionChoice } from './verify-resolution.js';
3
3
  import type { FinalGateChoice } from './final-gate-fix.js';
4
4
  /**
5
- * Visible provenance marker on EVERY artifact an auto-pick writes (gate trails,
6
- * task-file Q&A, the debt ledger's reason text). A later audit reading only the
7
- * artifacts must never mistake an auto-pick for a human decision — that is the
8
- * same confusion the accept-debt origins were introduced to prevent.
5
+ * Visible provenance marker on the artifacts an auto-pick writes: gate trail lines
6
+ * and the task file's Q&A record (qa-transcript.ts `QA_PROVENANCE`). A later audit
7
+ * reading only the artifacts must never mistake an auto-pick for a human decision.
8
+ * The debt ledger does not use this stamp — it carries the `'yolo-accepted'` ORIGIN
9
+ * instead, which is stronger: a typed field rather than text.
9
10
  */
10
11
  export declare const YOLO_STAMP = "(YOLO)";
11
12
  /** Is unattended auto-pick on for this run? The ONLY config read in this module. */
@@ -25,16 +26,17 @@ export type YoloPick = {
25
26
  note: string;
26
27
  } | null;
27
28
  /**
28
- * The clarify/grill policy: take the RECOMMENDED option — which is positional,
29
- * index 0 of the card list (question-box.ts tints it green), i.e. `suggested`,
30
- * falling back to the B-side `alt` when a fork offers only that.
29
+ * The clarify/grill policy: take the RECOMMENDED option — `suggested`, falling
30
+ * back to the B-side `alt` when a fork offers only that. Recommended is positional
31
+ * for a human too: bridge.ts marks card index 0, and question-box.ts tints the
32
+ * marked card green.
31
33
  *
32
34
  * `unsafe` is the step-aside channel: a caller that KNOWS the recommendation must
33
- * not be auto-accepted passes why, and the question is skipped instead. Its one
34
- * producer today is the anti-synthesis demotion — an answer proven to name a
35
- * hallucinated API identifier. Auto-accepting that would re-promote exactly the
36
- * invention the demotion was built to stop (it reached requirements AND the VERIFY
37
- * block in mx5 run 13), so a machine may never take it; a human still can.
35
+ * not be auto-accepted passes why, and the question is skipped instead. The only
36
+ * thing that supplies it is `yoloPickAutoAnswer` below, on the anti-synthesis
37
+ * demotion — an answer proven to name an unverified API identifier. Auto-accepting
38
+ * that would re-promote exactly the invention the demotion exists to stop, so a
39
+ * machine may never take it; a human still can.
38
40
  */
39
41
  export declare function yoloPickAnswer(enabled: boolean, opts: {
40
42
  suggested?: string;
@@ -42,33 +44,35 @@ export declare function yoloPickAnswer(enabled: boolean, opts: {
42
44
  unsafe?: string;
43
45
  }): YoloPick;
44
46
  /**
45
- * The same policy expressed over an {@link AutoAnswer}, for the grill site. Only
46
- * the ANTI-SYNTHESIS unknown is unsafe: the other two producers (an integration
47
- * unknown research could not ground, a child that threw) carry an ordinary
48
- * best-effort recommendation, which is precisely what a human would be shown as
49
- * the green card. The variants are told apart by the union's `reason` tag never
50
- * by pattern-matching the answer text.
47
+ * The same policy expressed over an {@link AutoAnswer}, for the grill site. Of the
48
+ * four `reason` tags an unknown can carry `api-synthesis`, `integration`,
49
+ * `threw`, `model-unknown` only ANTI-SYNTHESIS is unsafe. The other three carry
50
+ * an ordinary best-effort recommendation, which is precisely what a human would be
51
+ * shown as the green card. The variants are told apart by that tag, never by
52
+ * pattern-matching the answer text.
51
53
  */
52
54
  export declare function yoloPickAutoAnswer(enabled: boolean, auto: AutoAnswer): YoloPick;
53
55
  /**
54
56
  * The verify-FAIL picker policy: ACCEPT (and write a debt), never AUTOFIX.
55
57
  *
56
- * Not a preference — a bound. Every branch that REACHES this picker has already
57
- * spent its unattended budget: the loop auto-runs AUTOFIX while the research
58
- * recommends it, up to MAX_AUTO_AUTOFIX consecutive failures, and only then hands
59
- * over. Answering AUTOFIX here would restart that budget from a site whose whole
60
- * purpose is that the budget ran out. So YOLO takes the terminal option and
61
- * records the defect ('yolo-accepted' an origin a human never produces).
58
+ * Not a preference — a bound. task-gates.ts consults this only after its own
59
+ * unattended paths are exhausted: `autoFixNow` has run AUTOFIX up to
60
+ * MAX_AUTO_AUTOFIX times while the research recommended it, and the YOLO rescue has
61
+ * spent its one attempt on an ACCEPT recommendation with an untouched budget.
62
+ * Answering AUTOFIX here would restart that budget from the very site that proves
63
+ * it ran out. So YOLO takes the terminal option and records the defect under the
64
+ * `'yolo-accepted'` debt origin, which a human decision never produces.
62
65
  */
63
66
  export declare function yoloVerifyResolution(enabled: boolean): ResolutionChoice | null;
64
67
  /**
65
- * The final-integration-gate policy: keep autofixing WHILE the picker still
66
- * offers that card (the loop withdraws it after MAX_FINAL_GATE_AUTOFIX attempts),
67
- * then leave the run FAILED.
68
+ * The final-integration-gate policy: keep autofixing WHILE the picker still offers
69
+ * that card run-final-gate.ts withdraws it from `options` after
70
+ * MAX_FINAL_GATE_AUTOFIX attempts, and passes that as `canAutofix` — then leave the
71
+ * run FAILED.
68
72
  *
69
73
  * 'leave', not 'accept': an unattended run that cannot fix the whole-repo gate has
70
- * not produced a working project, and the honest terminal state is a failed run a
71
- * resume can re-enter mx5 run 13 ended "FAIL accepted by user" on an app that
72
- * 404'd at `/`, and that acceptance is what made the failure look like a success.
74
+ * not produced a working project. The honest terminal state is a failed run a
75
+ * resume can re-enter. Accepting instead would make the failure read as a success
76
+ * in every artifact that survives the run.
73
77
  */
74
78
  export declare function yoloFinalGateChoice(enabled: boolean, canAutofix: boolean): FinalGateChoice | null;