@cleocode/core 2026.10.1 → 2026.10.2

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 (385) hide show
  1. package/dist/build-provenance.json +2 -2
  2. package/dist/cloud/journal.d.ts +9 -5
  3. package/dist/cloud/journal.d.ts.map +1 -1
  4. package/dist/cloud/journal.js +29 -8
  5. package/dist/cloud/journal.js.map +1 -1
  6. package/dist/cloud/manifest-check.d.ts +140 -4
  7. package/dist/cloud/manifest-check.d.ts.map +1 -1
  8. package/dist/cloud/manifest-check.js +309 -10
  9. package/dist/cloud/manifest-check.js.map +1 -1
  10. package/dist/cloud/nexus-attach.d.ts +25 -0
  11. package/dist/cloud/nexus-attach.d.ts.map +1 -1
  12. package/dist/cloud/nexus-attach.js +81 -6
  13. package/dist/cloud/nexus-attach.js.map +1 -1
  14. package/dist/cloud/nexus-cloud-activity.d.ts +37 -0
  15. package/dist/cloud/nexus-cloud-activity.d.ts.map +1 -0
  16. package/dist/cloud/nexus-cloud-activity.js +79 -0
  17. package/dist/cloud/nexus-cloud-activity.js.map +1 -0
  18. package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
  19. package/dist/cloud/nexus-cloud-status.js +36 -0
  20. package/dist/cloud/nexus-cloud-status.js.map +1 -1
  21. package/dist/cloud/nexus-device.d.ts +1 -1
  22. package/dist/cloud/nexus-enrol.d.ts.map +1 -1
  23. package/dist/cloud/nexus-enrol.js +5 -0
  24. package/dist/cloud/nexus-enrol.js.map +1 -1
  25. package/dist/cloud/nexus-home.d.ts +74 -0
  26. package/dist/cloud/nexus-home.d.ts.map +1 -0
  27. package/dist/cloud/nexus-home.js +97 -0
  28. package/dist/cloud/nexus-home.js.map +1 -0
  29. package/dist/cloud/nexus-vault-keys.d.ts +129 -0
  30. package/dist/cloud/nexus-vault-keys.d.ts.map +1 -0
  31. package/dist/cloud/nexus-vault-keys.js +277 -0
  32. package/dist/cloud/nexus-vault-keys.js.map +1 -0
  33. package/dist/cloud/nexus-vault-state.d.ts +121 -0
  34. package/dist/cloud/nexus-vault-state.d.ts.map +1 -0
  35. package/dist/cloud/nexus-vault-state.js +274 -0
  36. package/dist/cloud/nexus-vault-state.js.map +1 -0
  37. package/dist/cloud/nexus-vault.d.ts +160 -0
  38. package/dist/cloud/nexus-vault.d.ts.map +1 -0
  39. package/dist/cloud/nexus-vault.js +1733 -0
  40. package/dist/cloud/nexus-vault.js.map +1 -0
  41. package/dist/cloud/signing.d.ts +24 -8
  42. package/dist/cloud/signing.d.ts.map +1 -1
  43. package/dist/cloud/signing.js +61 -15
  44. package/dist/cloud/signing.js.map +1 -1
  45. package/dist/docs/export-document.js +8137 -3318
  46. package/dist/docs/export-document.js.map +3 -3
  47. package/dist/doctor/migrations.d.ts +75 -0
  48. package/dist/doctor/migrations.d.ts.map +1 -0
  49. package/dist/doctor/migrations.js +136 -0
  50. package/dist/doctor/migrations.js.map +1 -0
  51. package/dist/doctor/sync-sealer.d.ts +48 -0
  52. package/dist/doctor/sync-sealer.d.ts.map +1 -0
  53. package/dist/doctor/sync-sealer.js +109 -0
  54. package/dist/doctor/sync-sealer.js.map +1 -0
  55. package/dist/doctor/sync-triggers.d.ts +53 -0
  56. package/dist/doctor/sync-triggers.d.ts.map +1 -0
  57. package/dist/doctor/sync-triggers.js +157 -0
  58. package/dist/doctor/sync-triggers.js.map +1 -0
  59. package/dist/init.d.ts.map +1 -1
  60. package/dist/init.js +5 -1
  61. package/dist/init.js.map +1 -1
  62. package/dist/internal.d.ts +1 -1
  63. package/dist/internal.d.ts.map +1 -1
  64. package/dist/internal.js +1 -1
  65. package/dist/internal.js.map +1 -1
  66. package/dist/llm/plugin-facade.js +8442 -3623
  67. package/dist/llm/plugin-facade.js.map +3 -3
  68. package/dist/nexus/projects-clean.d.ts +3 -0
  69. package/dist/nexus/projects-clean.d.ts.map +1 -1
  70. package/dist/nexus/projects-clean.js +9 -3
  71. package/dist/nexus/projects-clean.js.map +1 -1
  72. package/dist/nexus/registry-roots.d.ts +3 -1
  73. package/dist/nexus/registry-roots.d.ts.map +1 -1
  74. package/dist/nexus/registry-roots.js +5 -2
  75. package/dist/nexus/registry-roots.js.map +1 -1
  76. package/dist/nexus/registry.d.ts +8 -1
  77. package/dist/nexus/registry.d.ts.map +1 -1
  78. package/dist/nexus/registry.js +24 -10
  79. package/dist/nexus/registry.js.map +1 -1
  80. package/dist/nexus/workspace.d.ts +4 -1
  81. package/dist/nexus/workspace.d.ts.map +1 -1
  82. package/dist/nexus/workspace.js +10 -4
  83. package/dist/nexus/workspace.js.map +1 -1
  84. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  85. package/dist/orchestrate/spawn-ops.js +7 -2
  86. package/dist/orchestrate/spawn-ops.js.map +1 -1
  87. package/dist/orchestrate/worker-verify.d.ts +121 -12
  88. package/dist/orchestrate/worker-verify.d.ts.map +1 -1
  89. package/dist/orchestrate/worker-verify.js +172 -21
  90. package/dist/orchestrate/worker-verify.js.map +1 -1
  91. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  92. package/dist/orchestration/spawn-prompt.js +15 -9
  93. package/dist/orchestration/spawn-prompt.js.map +1 -1
  94. package/dist/release/ci-evidence.d.ts +9 -0
  95. package/dist/release/ci-evidence.d.ts.map +1 -1
  96. package/dist/release/ci-evidence.js +9 -2
  97. package/dist/release/ci-evidence.js.map +1 -1
  98. package/dist/resources/backend.d.ts +15 -3
  99. package/dist/resources/backend.d.ts.map +1 -1
  100. package/dist/resources/backend.js +7 -3
  101. package/dist/resources/backend.js.map +1 -1
  102. package/dist/resources/darwin-backend.d.ts +142 -0
  103. package/dist/resources/darwin-backend.d.ts.map +1 -0
  104. package/dist/resources/darwin-backend.js +288 -0
  105. package/dist/resources/darwin-backend.js.map +1 -0
  106. package/dist/resources/governor.d.ts +44 -1
  107. package/dist/resources/governor.d.ts.map +1 -1
  108. package/dist/resources/governor.js +100 -36
  109. package/dist/resources/governor.js.map +1 -1
  110. package/dist/resources/heavy-command.d.ts +132 -0
  111. package/dist/resources/heavy-command.d.ts.map +1 -0
  112. package/dist/resources/heavy-command.js +768 -0
  113. package/dist/resources/heavy-command.js.map +1 -0
  114. package/dist/resources/monitor.d.ts +50 -1
  115. package/dist/resources/monitor.d.ts.map +1 -1
  116. package/dist/resources/monitor.js +83 -1
  117. package/dist/resources/monitor.js.map +1 -1
  118. package/dist/resources/run-admission.d.ts +303 -0
  119. package/dist/resources/run-admission.d.ts.map +1 -0
  120. package/dist/resources/run-admission.js +648 -0
  121. package/dist/resources/run-admission.js.map +1 -0
  122. package/dist/resources/run-class.d.ts +111 -0
  123. package/dist/resources/run-class.d.ts.map +1 -0
  124. package/dist/resources/run-class.js +658 -0
  125. package/dist/resources/run-class.js.map +1 -0
  126. package/dist/resources/run-governed.d.ts +158 -0
  127. package/dist/resources/run-governed.d.ts.map +1 -0
  128. package/dist/resources/run-governed.js +406 -0
  129. package/dist/resources/run-governed.js.map +1 -0
  130. package/dist/resources/slot-holder.d.ts +267 -0
  131. package/dist/resources/slot-holder.d.ts.map +1 -0
  132. package/dist/resources/slot-holder.js +505 -0
  133. package/dist/resources/slot-holder.js.map +1 -0
  134. package/dist/resources/tool-groups.d.ts +74 -0
  135. package/dist/resources/tool-groups.d.ts.map +1 -0
  136. package/dist/resources/tool-groups.js +118 -0
  137. package/dist/resources/tool-groups.js.map +1 -0
  138. package/dist/routing/build-command-groups.d.ts.map +1 -1
  139. package/dist/routing/build-command-groups.js +1 -0
  140. package/dist/routing/build-command-groups.js.map +1 -1
  141. package/dist/selfimprove/fix-gen.js +8446 -3627
  142. package/dist/selfimprove/fix-gen.js.map +3 -3
  143. package/dist/sentient/cross-project-hygiene.d.ts +3 -2
  144. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  145. package/dist/sentient/cross-project-hygiene.js +5 -2
  146. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  147. package/dist/sentient/state.d.ts +7 -0
  148. package/dist/sentient/state.d.ts.map +1 -1
  149. package/dist/sentient/state.js.map +1 -1
  150. package/dist/sentient/tick.d.ts +14 -2
  151. package/dist/sentient/tick.d.ts.map +1 -1
  152. package/dist/sentient/tick.js +63 -4
  153. package/dist/sentient/tick.js.map +1 -1
  154. package/dist/store/backup-recover.d.ts.map +1 -1
  155. package/dist/store/backup-recover.js +5 -0
  156. package/dist/store/backup-recover.js.map +1 -1
  157. package/dist/store/data-accessor.d.ts +1 -0
  158. package/dist/store/data-accessor.d.ts.map +1 -1
  159. package/dist/store/data-accessor.js +7 -0
  160. package/dist/store/data-accessor.js.map +1 -1
  161. package/dist/store/dual-scope-db.d.ts +23 -1
  162. package/dist/store/dual-scope-db.d.ts.map +1 -1
  163. package/dist/store/dual-scope-db.js +126 -36
  164. package/dist/store/dual-scope-db.js.map +1 -1
  165. package/dist/store/exodus/recovery.d.ts.map +1 -1
  166. package/dist/store/exodus/recovery.js +15 -0
  167. package/dist/store/exodus/recovery.js.map +1 -1
  168. package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
  169. package/dist/store/legacy-tasks-lineage.js +5 -0
  170. package/dist/store/legacy-tasks-lineage.js.map +1 -1
  171. package/dist/store/lock.d.ts +8 -1
  172. package/dist/store/lock.d.ts.map +1 -1
  173. package/dist/store/lock.js +10 -2
  174. package/dist/store/lock.js.map +1 -1
  175. package/dist/store/migration-manager.d.ts +5 -0
  176. package/dist/store/migration-manager.d.ts.map +1 -1
  177. package/dist/store/migration-manager.js +11 -0
  178. package/dist/store/migration-manager.js.map +1 -1
  179. package/dist/store/migration-runner.d.ts +158 -0
  180. package/dist/store/migration-runner.d.ts.map +1 -0
  181. package/dist/store/migration-runner.js +493 -0
  182. package/dist/store/migration-runner.js.map +1 -0
  183. package/dist/store/portable-bundle-import.d.ts +15 -1
  184. package/dist/store/portable-bundle-import.d.ts.map +1 -1
  185. package/dist/store/portable-bundle-import.js +24 -4
  186. package/dist/store/portable-bundle-import.js.map +1 -1
  187. package/dist/store/portable-bundle-relocate.d.ts +43 -0
  188. package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
  189. package/dist/store/portable-bundle-relocate.js +79 -5
  190. package/dist/store/portable-bundle-relocate.js.map +1 -1
  191. package/dist/store/portable-bundle-scan.d.ts +20 -0
  192. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  193. package/dist/store/portable-bundle-scan.js +38 -3
  194. package/dist/store/portable-bundle-scan.js.map +1 -1
  195. package/dist/store/portable-bundle.d.ts +33 -0
  196. package/dist/store/portable-bundle.d.ts.map +1 -1
  197. package/dist/store/portable-bundle.js +34 -7
  198. package/dist/store/portable-bundle.js.map +1 -1
  199. package/dist/store/row-identity-registry.d.ts +137 -7
  200. package/dist/store/row-identity-registry.d.ts.map +1 -1
  201. package/dist/store/row-identity-registry.js +364 -9
  202. package/dist/store/row-identity-registry.js.map +1 -1
  203. package/dist/store/row-identity.d.ts.map +1 -1
  204. package/dist/store/row-identity.js +9 -10
  205. package/dist/store/row-identity.js.map +1 -1
  206. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  207. package/dist/store/sqlite-data-accessor.js +10 -0
  208. package/dist/store/sqlite-data-accessor.js.map +1 -1
  209. package/dist/store/sqlite.d.ts +31 -0
  210. package/dist/store/sqlite.d.ts.map +1 -1
  211. package/dist/store/sqlite.js +5 -1
  212. package/dist/store/sqlite.js.map +1 -1
  213. package/dist/store/sync/capture.d.ts +203 -0
  214. package/dist/store/sync/capture.d.ts.map +1 -0
  215. package/dist/store/sync/capture.js +562 -0
  216. package/dist/store/sync/capture.js.map +1 -0
  217. package/dist/store/sync/clock-store.d.ts.map +1 -1
  218. package/dist/store/sync/clock-store.js +2 -0
  219. package/dist/store/sync/clock-store.js.map +1 -1
  220. package/dist/store/sync/fk-orphans.d.ts +133 -0
  221. package/dist/store/sync/fk-orphans.d.ts.map +1 -0
  222. package/dist/store/sync/fk-orphans.js +265 -0
  223. package/dist/store/sync/fk-orphans.js.map +1 -0
  224. package/dist/store/sync/flags.d.ts +7 -0
  225. package/dist/store/sync/flags.d.ts.map +1 -1
  226. package/dist/store/sync/flags.js +16 -0
  227. package/dist/store/sync/flags.js.map +1 -1
  228. package/dist/store/sync/hlc.d.ts.map +1 -1
  229. package/dist/store/sync/hlc.js +4 -0
  230. package/dist/store/sync/hlc.js.map +1 -1
  231. package/dist/store/sync/identity-fill.d.ts +45 -0
  232. package/dist/store/sync/identity-fill.d.ts.map +1 -0
  233. package/dist/store/sync/identity-fill.js +85 -0
  234. package/dist/store/sync/identity-fill.js.map +1 -0
  235. package/dist/store/sync/machinery.d.ts +27 -0
  236. package/dist/store/sync/machinery.d.ts.map +1 -0
  237. package/dist/store/sync/machinery.js +44 -0
  238. package/dist/store/sync/machinery.js.map +1 -0
  239. package/dist/store/sync/netting.d.ts +120 -0
  240. package/dist/store/sync/netting.d.ts.map +1 -0
  241. package/dist/store/sync/netting.js +336 -0
  242. package/dist/store/sync/netting.js.map +1 -0
  243. package/dist/store/sync/replica.d.ts +27 -2
  244. package/dist/store/sync/replica.d.ts.map +1 -1
  245. package/dist/store/sync/replica.js +47 -3
  246. package/dist/store/sync/replica.js.map +1 -1
  247. package/dist/store/sync/schema.d.ts +12 -0
  248. package/dist/store/sync/schema.d.ts.map +1 -1
  249. package/dist/store/sync/schema.js +21 -0
  250. package/dist/store/sync/schema.js.map +1 -1
  251. package/dist/store/sync/seal-backlog.d.ts +21 -0
  252. package/dist/store/sync/seal-backlog.d.ts.map +1 -0
  253. package/dist/store/sync/seal-backlog.js +24 -0
  254. package/dist/store/sync/seal-backlog.js.map +1 -0
  255. package/dist/store/sync/sealer-values.d.ts +34 -0
  256. package/dist/store/sync/sealer-values.d.ts.map +1 -0
  257. package/dist/store/sync/sealer-values.js +53 -0
  258. package/dist/store/sync/sealer-values.js.map +1 -0
  259. package/dist/store/sync/sealer.d.ts +145 -0
  260. package/dist/store/sync/sealer.d.ts.map +1 -0
  261. package/dist/store/sync/sealer.js +906 -0
  262. package/dist/store/sync/sealer.js.map +1 -0
  263. package/dist/store/sync/structural.d.ts +63 -0
  264. package/dist/store/sync/structural.d.ts.map +1 -0
  265. package/dist/store/sync/structural.js +180 -0
  266. package/dist/store/sync/structural.js.map +1 -0
  267. package/dist/store/sync/timestamps.d.ts +92 -0
  268. package/dist/store/sync/timestamps.d.ts.map +1 -0
  269. package/dist/store/sync/timestamps.js +228 -0
  270. package/dist/store/sync/timestamps.js.map +1 -0
  271. package/dist/store/sync/tombstones.d.ts +75 -0
  272. package/dist/store/sync/tombstones.d.ts.map +1 -0
  273. package/dist/store/sync/tombstones.js +103 -0
  274. package/dist/store/sync/tombstones.js.map +1 -0
  275. package/dist/store/sync/trigger-classes.d.ts +221 -0
  276. package/dist/store/sync/trigger-classes.d.ts.map +1 -0
  277. package/dist/store/sync/trigger-classes.js +441 -0
  278. package/dist/store/sync/trigger-classes.js.map +1 -0
  279. package/dist/store/sync/trigger-suspend-at-path.d.ts +23 -0
  280. package/dist/store/sync/trigger-suspend-at-path.d.ts.map +1 -0
  281. package/dist/store/sync/trigger-suspend-at-path.js +44 -0
  282. package/dist/store/sync/trigger-suspend-at-path.js.map +1 -0
  283. package/dist/store/sync/writer-version.d.ts +43 -0
  284. package/dist/store/sync/writer-version.d.ts.map +1 -0
  285. package/dist/store/sync/writer-version.js +90 -0
  286. package/dist/store/sync/writer-version.js.map +1 -0
  287. package/dist/store/table-classification.d.ts.map +1 -1
  288. package/dist/store/table-classification.js +102 -0
  289. package/dist/store/table-classification.js.map +1 -1
  290. package/dist/store/trigger-suspend-schema.d.ts +44 -0
  291. package/dist/store/trigger-suspend-schema.d.ts.map +1 -0
  292. package/dist/store/trigger-suspend-schema.js +25 -0
  293. package/dist/store/trigger-suspend-schema.js.map +1 -0
  294. package/dist/store/vault-manifest.d.ts +365 -0
  295. package/dist/store/vault-manifest.d.ts.map +1 -0
  296. package/dist/store/vault-manifest.js +812 -0
  297. package/dist/store/vault-manifest.js.map +1 -0
  298. package/dist/store/writer-lease.d.ts +31 -0
  299. package/dist/store/writer-lease.d.ts.map +1 -1
  300. package/dist/store/writer-lease.js +65 -2
  301. package/dist/store/writer-lease.js.map +1 -1
  302. package/dist/system/health.d.ts.map +1 -1
  303. package/dist/system/health.js +21 -0
  304. package/dist/system/health.js.map +1 -1
  305. package/dist/system/project-health.d.ts.map +1 -1
  306. package/dist/system/project-health.js +3 -1
  307. package/dist/system/project-health.js.map +1 -1
  308. package/dist/tasks/affected-packages.d.ts +58 -0
  309. package/dist/tasks/affected-packages.d.ts.map +1 -1
  310. package/dist/tasks/affected-packages.js +75 -6
  311. package/dist/tasks/affected-packages.js.map +1 -1
  312. package/dist/tasks/affected-scope.d.ts +150 -23
  313. package/dist/tasks/affected-scope.d.ts.map +1 -1
  314. package/dist/tasks/affected-scope.js +320 -32
  315. package/dist/tasks/affected-scope.js.map +1 -1
  316. package/dist/tasks/change-set.d.ts +96 -0
  317. package/dist/tasks/change-set.d.ts.map +1 -1
  318. package/dist/tasks/change-set.js +169 -4
  319. package/dist/tasks/change-set.js.map +1 -1
  320. package/dist/tasks/complete-ci.d.ts +115 -0
  321. package/dist/tasks/complete-ci.d.ts.map +1 -0
  322. package/dist/tasks/complete-ci.js +171 -0
  323. package/dist/tasks/complete-ci.js.map +1 -0
  324. package/dist/tasks/complete.d.ts.map +1 -1
  325. package/dist/tasks/complete.js +50 -17
  326. package/dist/tasks/complete.js.map +1 -1
  327. package/dist/tasks/compute-task-view.d.ts.map +1 -1
  328. package/dist/tasks/compute-task-view.js +7 -0
  329. package/dist/tasks/compute-task-view.js.map +1 -1
  330. package/dist/tasks/done-plan.d.ts.map +1 -1
  331. package/dist/tasks/done-plan.js +51 -30
  332. package/dist/tasks/done-plan.js.map +1 -1
  333. package/dist/tasks/done-record.d.ts +6 -0
  334. package/dist/tasks/done-record.d.ts.map +1 -1
  335. package/dist/tasks/done-record.js +9 -3
  336. package/dist/tasks/done-record.js.map +1 -1
  337. package/dist/tasks/evidence.d.ts +3 -2
  338. package/dist/tasks/evidence.d.ts.map +1 -1
  339. package/dist/tasks/evidence.js +143 -12
  340. package/dist/tasks/evidence.js.map +1 -1
  341. package/dist/tasks/gate-notes.d.ts +22 -0
  342. package/dist/tasks/gate-notes.d.ts.map +1 -0
  343. package/dist/tasks/gate-notes.js +33 -0
  344. package/dist/tasks/gate-notes.js.map +1 -0
  345. package/dist/tasks/index.d.ts +2 -1
  346. package/dist/tasks/index.d.ts.map +1 -1
  347. package/dist/tasks/index.js +2 -1
  348. package/dist/tasks/index.js.map +1 -1
  349. package/dist/tasks/test-run-binding.d.ts +117 -0
  350. package/dist/tasks/test-run-binding.d.ts.map +1 -0
  351. package/dist/tasks/test-run-binding.js +365 -0
  352. package/dist/tasks/test-run-binding.js.map +1 -0
  353. package/dist/tasks/tool-cache-env.d.ts +123 -0
  354. package/dist/tasks/tool-cache-env.d.ts.map +1 -0
  355. package/dist/tasks/tool-cache-env.js +287 -0
  356. package/dist/tasks/tool-cache-env.js.map +1 -0
  357. package/dist/tasks/tool-cache-failed-first.d.ts +155 -0
  358. package/dist/tasks/tool-cache-failed-first.d.ts.map +1 -0
  359. package/dist/tasks/tool-cache-failed-first.js +285 -0
  360. package/dist/tasks/tool-cache-failed-first.js.map +1 -0
  361. package/dist/tasks/tool-cache.d.ts +375 -55
  362. package/dist/tasks/tool-cache.d.ts.map +1 -1
  363. package/dist/tasks/tool-cache.js +912 -303
  364. package/dist/tasks/tool-cache.js.map +1 -1
  365. package/dist/tasks/tool-resolver.d.ts +4 -3
  366. package/dist/tasks/tool-resolver.d.ts.map +1 -1
  367. package/dist/tasks/tool-resolver.js +15 -4
  368. package/dist/tasks/tool-resolver.js.map +1 -1
  369. package/dist/tasks/tool-semaphore.d.ts +67 -7
  370. package/dist/tasks/tool-semaphore.d.ts.map +1 -1
  371. package/dist/tasks/tool-semaphore.js +134 -56
  372. package/dist/tasks/tool-semaphore.js.map +1 -1
  373. package/dist/upgrade.d.ts.map +1 -1
  374. package/dist/upgrade.js +4 -0
  375. package/dist/upgrade.js.map +1 -1
  376. package/dist/validation/engine-ops.d.ts +6 -0
  377. package/dist/validation/engine-ops.d.ts.map +1 -1
  378. package/dist/validation/engine-ops.js +8 -0
  379. package/dist/validation/engine-ops.js.map +1 -1
  380. package/migrations/drizzle-cleo-project/20260930170000_t12819-trigger-suspend-clause/migration.sql +367 -0
  381. package/migrations/sync-journal/20260930120000_t12343-capture/migration.sql +47 -0
  382. package/migrations/sync-journal/20261001170000_t12984-sealer/migration.sql +101 -0
  383. package/package.json +13 -13
  384. package/templates/CLEO-INJECTION.md +5 -5
  385. package/templates/CLEO-REFERENCE.md +8 -4
@@ -1,26 +1,48 @@
1
1
  /**
2
- * When an affected-scope `testsPassed` stops counting (owner decision D11150).
2
+ * When a scoped `testsPassed` stops counting (owner decision D11150).
3
3
  *
4
- * A `tool:test-affected` run proves the packages a branch diff touches before
5
- * merge. Once the change has merged, only merged CI (`ci:<pr>`) or a full
6
- * `tool:test` proves `testsPassed`. This module is the single place that rule
7
- * lives: `cleo done` planning and `cleo complete` both ask it.
4
+ * A scoped run (`tool:test-affected`, a scope-aware `tool:test` that chose the
5
+ * affected packages, or a targeted `test-run:` report) proves what it ran
6
+ * before merge. Once the change has merged, only merged CI (`ci:<pr>`) or a
7
+ * full `tool:test` proves `testsPassed`. A tree-bound `test-run:` also stops
8
+ * counting as soon as the tree it ran on moves (T12965). This module
9
+ * is the single place both rules live: `cleo done` planning and
10
+ * `cleo complete` ask {@link testsPassedSupersededReason}, and they and a
11
+ * scope-aware `tool:test` all judge the merge — and the PR whose CI proves
12
+ * it — through {@link taskChangeMergeState} (T12959, T12656 AC2).
8
13
  *
9
14
  * @task T12656
15
+ * @task T12959
16
+ * @task T12960
17
+ * @task T12965
10
18
  */
11
- import type { ChangeSetMergeState, EvidenceAtom, Task, TaskChangeSet } from '@cleocode/contracts';
12
- import type { ChangeSetDeps } from './change-set.js';
19
+ import type { ChangeSetMergeState, EvidenceAtom, TaskChangeSet } from '@cleocode/contracts';
20
+ import type { ChangeSetDeps, ChangeSetTask, PatchEquivalenceUnknown } from './change-set.js';
13
21
  /** Whether the task's change has merged to the default branch. */
14
22
  export type ChangeMergeState = ChangeSetMergeState;
23
+ /** A merge state and, when a lookup it needed failed, which one (T12959 review). */
24
+ export interface MergeVerdict {
25
+ /** Merge state of the task's latest implementation. */
26
+ state: ChangeMergeState;
27
+ /**
28
+ * Why a lookup failed — `gh` unreachable, or commits missing from the
29
+ * local object store. With `state: 'unknown'` it is why the state is
30
+ * unknown; with `state: 'merged'` and no PR named, why the PR that carries
31
+ * the change is unknown.
32
+ */
33
+ lookupFailed?: string;
34
+ }
15
35
  /**
16
- * Recorded `testsPassed` evidence whose only verification result is an
17
- * affected-scope run (no `ci:`, `test-run:` or full `tool:` result).
36
+ * Recorded `testsPassed` evidence whose only verification results are scoped:
37
+ * affected-scope tool runs and targeted `test-run:` reports (no `ci:` and no
38
+ * full `tool:` result).
18
39
  *
19
40
  * @param atoms - The gate's recorded atoms.
20
- * @returns True when every result atom is a `scope: 'affected'` tool run.
41
+ * @returns True when every result atom is scoped.
21
42
  * @task T12656
43
+ * @task T12965
22
44
  */
23
- export declare function isAffectedOnly(atoms: ReadonlyArray<EvidenceAtom>): boolean;
45
+ export declare function isScopedOnly(atoms: ReadonlyArray<EvidenceAtom>): boolean;
24
46
  /**
25
47
  * The merge state a derived change set implies. What the PR lookup found
26
48
  * decides (`mergeState`), never `source` alone: a merged PR whose `pr:`
@@ -34,26 +56,131 @@ export declare function isAffectedOnly(atoms: ReadonlyArray<EvidenceAtom>): bool
34
56
  */
35
57
  export declare function mergeStateOfChangeSet(changeSet: Pick<TaskChangeSet, 'source' | 'prDiscoveryFailed' | 'mergeState'>): ChangeMergeState;
36
58
  /**
37
- * Why a recorded `testsPassed` no longer stands, or null when it does.
38
- * Fails closed: an affected-only result whose merge state is unknown does not
39
- * stand either, since a scoped run counts before merge ONLY.
59
+ * Why a scoped-only `testsPassed` no longer stands, or null when it does.
60
+ * Fails closed: a scoped result whose merge state is unknown does not stand
61
+ * either, since a scoped run counts before merge ONLY.
40
62
  *
41
63
  * @param atoms - Recorded `testsPassed` atoms.
42
64
  * @param state - Merge state of the task's change.
65
+ * @param lookupFailed - With `state: 'unknown'`, why (defaults to `gh` unreachable).
43
66
  * @returns The reason, or null.
44
67
  * @task T12656
45
68
  */
46
- export declare function affectedScopeSupersededReason(atoms: ReadonlyArray<EvidenceAtom>, state: ChangeMergeState): string | null;
69
+ export declare function scopedRunSupersededReason(atoms: ReadonlyArray<EvidenceAtom>, state: ChangeMergeState, lookupFailed?: string): string | null;
47
70
  /**
48
- * The same rule for a stored task, deriving the merge state only when the
49
- * recorded `testsPassed` is affected-only (so ordinary completions pay
50
- * nothing). A recorded `pr:` implemented atom proves the merge on its own.
71
+ * Why a recorded `testsPassed` resting on a tree-bound `test-run:` no longer
72
+ * stands, or null when it does (T12965). A targeted report proves the tree it
73
+ * ran on; once that content moved, it proves nothing about the code
74
+ * being completed. A `ci:<pr>` or a full tool run in the same gate carries the
75
+ * gate on its own, and atoms recorded before T12965 (no `treeHash`) are not
76
+ * judged.
51
77
  *
52
- * @param task - The task being completed.
53
- * @param storeRoot - CLEO store root.
54
- * @param deps - Change-set I/O (tests inject `gh`).
55
- * @returns The reason `testsPassed` no longer stands, or null.
78
+ * @param atoms - Recorded `testsPassed` atoms.
79
+ * @param current - The current tree hash of the execution root, or null when
80
+ * it cannot be computed (not a git checkout, or git failed).
81
+ * @returns The reason, or null.
82
+ * @task T12965
83
+ */
84
+ export declare function testRunTreeMismatchReason(atoms: ReadonlyArray<EvidenceAtom>, current: string | null): string | null;
85
+ /**
86
+ * Whether the recorded `testsPassed` atoms carry a tree-bound `test-run:`
87
+ * that {@link testRunTreeMismatchReason} would judge, so callers compute the
88
+ * current tree hash only when it matters.
89
+ *
90
+ * @param atoms - Recorded `testsPassed` atoms.
91
+ * @returns True when a tree-bound test-run is present.
92
+ * @task T12965
93
+ */
94
+ export declare function hasTreeBoundTestRun(atoms: ReadonlyArray<EvidenceAtom>): boolean;
95
+ /**
96
+ * The one rule for whether a recorded `testsPassed` still stands — shared by
97
+ * `cleo done` planning and `cleo complete` (T12656 AC2). A moved tree under a
98
+ * targeted test-run (T12965) is checked first, then a scoped-only result
99
+ * after (or with unknown) merge (D11150). Each input is resolved lazily, only
100
+ * when the recorded atoms make it relevant.
101
+ *
102
+ * @param atoms - Recorded `testsPassed` atoms.
103
+ * @param probe - Lazy merge state (with why a lookup failed, when known) and
104
+ * current tree hash.
105
+ * @returns The reason it no longer stands, or null.
56
106
  * @task T12656
107
+ * @task T12965
108
+ */
109
+ export declare function testsPassedSupersededReason(atoms: ReadonlyArray<EvidenceAtom>, probe: {
110
+ mergeState: () => Promise<ChangeMergeState | MergeVerdict> | ChangeMergeState | MergeVerdict;
111
+ currentTree: () => Promise<string | null> | string | null;
112
+ }): Promise<string | null>;
113
+ /** Git and `gh` probes {@link taskChangeMergeState} uses; injectable for tests. */
114
+ export interface MergeProbeDeps {
115
+ /**
116
+ * Change-set I/O for the merged-PR lookup (tests inject `gh`). Its `viewPr`
117
+ * also lists a PR's own commits for the containment check, and its
118
+ * `listPrsForCommit` finds the PRs GitHub associates with a commit.
119
+ */
120
+ changeSet?: ChangeSetDeps;
121
+ /** A change set already derived for this task (`cleo done` planning), so it is not derived twice. */
122
+ derived?: TaskChangeSet;
123
+ /**
124
+ * Repository the implementation commits live in; defaults to the task's
125
+ * change-set root (its worktree when one is registered, T12965 review).
126
+ */
127
+ executionRoot?: string;
128
+ /**
129
+ * Whether `sha` is on origin's default branch; defaults to
130
+ * `git merge-base --is-ancestor`. A positive signal only: a local
131
+ * `origin/<default>` can be stale, and a squash or rebase merge never makes
132
+ * the recorded SHA an ancestor.
133
+ */
134
+ isLanded?: (root: string, sha: string) => boolean;
135
+ /** Whether `ancestor` is contained in `descendant`; defaults to `git merge-base --is-ancestor`. */
136
+ contains?: (root: string, ancestor: string, descendant: string) => boolean;
137
+ /**
138
+ * Whether `sha`'s patch is among `candidates`: null when git failed,
139
+ * `{ missing }` when commits it needs are not local; defaults to `git patch-id`.
140
+ */
141
+ equivalent?: (root: string, sha: string, candidates: readonly string[]) => boolean | null | PatchEquivalenceUnknown;
142
+ }
143
+ /** Where a task's change stands, and the PR whose CI would prove it. */
144
+ export interface TaskMergeInfo extends MergeVerdict {
145
+ /** The derived change set, when one was derived. */
146
+ changeSet: TaskChangeSet | null;
147
+ /**
148
+ * The merged PR that carries the latest implementation (`<n>` or
149
+ * `<component>@<n>`), or null when none is known. Never a PR that merely
150
+ * cites the task: its CI must have run the recorded commits.
151
+ */
152
+ prRef: string | null;
153
+ /**
154
+ * With `state: 'merged'`, no {@link prRef} and no `lookupFailed`: why no
155
+ * merged PR is named — every lookup answered, and none carries the change.
156
+ */
157
+ unproven?: string;
158
+ }
159
+ /**
160
+ * Whether a task's LATEST implementation has merged, and through which PR —
161
+ * the one function `cleo done` planning, `cleo complete` and a scope-aware
162
+ * `tool:test` all ask (T12656 AC2).
163
+ *
164
+ * With recorded `commit:` atoms, the commits decide, never "any merged PR
165
+ * that cites the task": the PR named is one that carries every commit (see
166
+ * {@link carriesAll}) — a recorded `pr:` atom first (newest), then the PR the
167
+ * change-set derivation found, then a merged PR into the default branch that
168
+ * GitHub associates with the commits. Landing on the local `origin/<default>`
169
+ * is a positive signal only (merged, but no PR proves it); its absence proves
170
+ * nothing, since the ref may be stale and squash and rebase merges rewrite
171
+ * SHAs. With no sign of a merge, the state is unmerged — or unknown when a
172
+ * lookup it needed failed. A landed change with no carrier and a failed lookup
173
+ * names that lookup (`lookupFailed`): the carrier is unknown, which is not
174
+ * "no PR carries it" (`unproven`). Without commit atoms, the newest recorded
175
+ * `pr:` atom, else the derivation, decides.
176
+ *
177
+ * @param task - The task whose change is examined.
178
+ * @param storeRoot - CLEO store root.
179
+ * @param deps - Change-set I/O and git/`gh` probes.
180
+ * @returns The merge state, the PR, the change set when one was derived, and
181
+ * any lookup that failed.
182
+ * @task T12959
183
+ * @task T12960
57
184
  */
58
- export declare function taskAffectedScopeSupersededReason(task: Task, storeRoot: string, deps?: ChangeSetDeps): Promise<string | null>;
185
+ export declare function taskChangeMergeState(task: ChangeSetTask, storeRoot: string, deps?: MergeProbeDeps): Promise<TaskMergeInfo>;
59
186
  //# sourceMappingURL=affected-scope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"affected-scope.d.ts","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,OAAO,CAK1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,mBAAmB,GAAG,YAAY,CAAC,GAC5E,gBAAgB,CAIlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,EAClC,KAAK,EAAE,gBAAgB,GACtB,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB"}
1
+ {"version":3,"file":"affected-scope.d.ts","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,41 @@
1
1
  /**
2
- * When an affected-scope `testsPassed` stops counting (owner decision D11150).
2
+ * When a scoped `testsPassed` stops counting (owner decision D11150).
3
3
  *
4
- * A `tool:test-affected` run proves the packages a branch diff touches before
5
- * merge. Once the change has merged, only merged CI (`ci:<pr>`) or a full
6
- * `tool:test` proves `testsPassed`. This module is the single place that rule
7
- * lives: `cleo done` planning and `cleo complete` both ask it.
4
+ * A scoped run (`tool:test-affected`, a scope-aware `tool:test` that chose the
5
+ * affected packages, or a targeted `test-run:` report) proves what it ran
6
+ * before merge. Once the change has merged, only merged CI (`ci:<pr>`) or a
7
+ * full `tool:test` proves `testsPassed`. A tree-bound `test-run:` also stops
8
+ * counting as soon as the tree it ran on moves (T12965). This module
9
+ * is the single place both rules live: `cleo done` planning and
10
+ * `cleo complete` ask {@link testsPassedSupersededReason}, and they and a
11
+ * scope-aware `tool:test` all judge the merge — and the PR whose CI proves
12
+ * it — through {@link taskChangeMergeState} (T12959, T12656 AC2).
8
13
  *
9
14
  * @task T12656
15
+ * @task T12959
16
+ * @task T12960
17
+ * @task T12965
10
18
  */
19
+ /** What a failed `gh` lookup means for the caller, and the first thing to check. */
20
+ const GH_UNREACHABLE = 'gh unreachable — check `gh auth status`';
21
+ /** A full (unscoped) tool run that actually executed. */
22
+ function isFullToolRun(a) {
23
+ return a.kind === 'tool' && a.scope !== 'affected' && a.notApplicable !== true;
24
+ }
11
25
  /**
12
- * Recorded `testsPassed` evidence whose only verification result is an
13
- * affected-scope run (no `ci:`, `test-run:` or full `tool:` result).
26
+ * Recorded `testsPassed` evidence whose only verification results are scoped:
27
+ * affected-scope tool runs and targeted `test-run:` reports (no `ci:` and no
28
+ * full `tool:` result).
14
29
  *
15
30
  * @param atoms - The gate's recorded atoms.
16
- * @returns True when every result atom is a `scope: 'affected'` tool run.
31
+ * @returns True when every result atom is scoped.
17
32
  * @task T12656
33
+ * @task T12965
18
34
  */
19
- export function isAffectedOnly(atoms) {
35
+ export function isScopedOnly(atoms) {
20
36
  const results = atoms.filter((a) => a.kind === 'tool' || a.kind === 'test-run' || a.kind === 'ci');
21
- return results.length > 0 && results.every((a) => a.kind === 'tool' && a.scope === 'affected');
37
+ return (results.length > 0 &&
38
+ results.every((a) => (a.kind === 'tool' && a.scope === 'affected') || a.kind === 'test-run'));
22
39
  }
23
40
  /**
24
41
  * The merge state a derived change set implies. What the PR lookup found
@@ -39,43 +56,314 @@ export function mergeStateOfChangeSet(changeSet) {
39
56
  return changeSet.prDiscoveryFailed === true ? 'unknown' : 'unmerged';
40
57
  }
41
58
  /**
42
- * Why a recorded `testsPassed` no longer stands, or null when it does.
43
- * Fails closed: an affected-only result whose merge state is unknown does not
44
- * stand either, since a scoped run counts before merge ONLY.
59
+ * Why a scoped-only `testsPassed` no longer stands, or null when it does.
60
+ * Fails closed: a scoped result whose merge state is unknown does not stand
61
+ * either, since a scoped run counts before merge ONLY.
45
62
  *
46
63
  * @param atoms - Recorded `testsPassed` atoms.
47
64
  * @param state - Merge state of the task's change.
65
+ * @param lookupFailed - With `state: 'unknown'`, why (defaults to `gh` unreachable).
48
66
  * @returns The reason, or null.
49
67
  * @task T12656
50
68
  */
51
- export function affectedScopeSupersededReason(atoms, state) {
52
- if (state === 'unmerged' || !isAffectedOnly(atoms))
69
+ export function scopedRunSupersededReason(atoms, state, lookupFailed) {
70
+ if (state === 'unmerged' || !isScopedOnly(atoms))
53
71
  return null;
54
72
  return state === 'merged'
55
- ? 'testsPassed was recorded from an affected-scope run; the merged change needs merged CI (ci:<pr>) or a full run (tool:test).'
56
- : 'testsPassed was recorded from an affected-scope run, which counts before merge only, and whether the change has merged cannot be determined because gh was unreachable (check `gh auth status`); retry, or record tool:test (or ci:<pr>).';
73
+ ? 'testsPassed was recorded from a scoped run (affected packages or a targeted test-run); the merged change needs merged CI (ci:<pr>) or a full run (tool:test).'
74
+ : `testsPassed was recorded from a scoped run (affected packages or a targeted test-run), which counts before merge only, and whether the change has merged cannot be determined (${lookupFailed ?? GH_UNREACHABLE}); retry, or record tool:test (or ci:<pr>).`;
57
75
  }
58
76
  /**
59
- * The same rule for a stored task, deriving the merge state only when the
60
- * recorded `testsPassed` is affected-only (so ordinary completions pay
61
- * nothing). A recorded `pr:` implemented atom proves the merge on its own.
77
+ * Why a recorded `testsPassed` resting on a tree-bound `test-run:` no longer
78
+ * stands, or null when it does (T12965). A targeted report proves the tree it
79
+ * ran on; once that content moved, it proves nothing about the code
80
+ * being completed. A `ci:<pr>` or a full tool run in the same gate carries the
81
+ * gate on its own, and atoms recorded before T12965 (no `treeHash`) are not
82
+ * judged.
62
83
  *
63
- * @param task - The task being completed.
64
- * @param storeRoot - CLEO store root.
65
- * @param deps - Change-set I/O (tests inject `gh`).
66
- * @returns The reason `testsPassed` no longer stands, or null.
84
+ * @param atoms - Recorded `testsPassed` atoms.
85
+ * @param current - The current tree hash of the execution root, or null when
86
+ * it cannot be computed (not a git checkout, or git failed).
87
+ * @returns The reason, or null.
88
+ * @task T12965
89
+ */
90
+ export function testRunTreeMismatchReason(atoms, current) {
91
+ if (atoms.some((a) => a.kind === 'ci' || isFullToolRun(a)))
92
+ return null;
93
+ const moved = atoms.filter((a) => a.kind === 'test-run' && typeof a.treeHash === 'string' && a.treeHash !== current);
94
+ const first = moved[0];
95
+ if (!first?.treeHash)
96
+ return null;
97
+ return current === null
98
+ ? `testsPassed rests on test-run:${first.path}, bound to tree ${first.treeHash.slice(0, 12)}, and the current tree cannot be computed here (not a git checkout?); complete from the checkout the report ran in, or record ci:<pr> once the PR merges.`
99
+ : `testsPassed rests on test-run:${first.path}, recorded on tree ${first.treeHash.slice(0, 12)}, but the tree is now ${current.slice(0, 12)}; the report no longer describes this code. Re-run the targeted tests and record a fresh test-run, or record ci:<pr> once the PR merges.`;
100
+ }
101
+ /**
102
+ * Whether the recorded `testsPassed` atoms carry a tree-bound `test-run:`
103
+ * that {@link testRunTreeMismatchReason} would judge, so callers compute the
104
+ * current tree hash only when it matters.
105
+ *
106
+ * @param atoms - Recorded `testsPassed` atoms.
107
+ * @returns True when a tree-bound test-run is present.
108
+ * @task T12965
109
+ */
110
+ export function hasTreeBoundTestRun(atoms) {
111
+ return atoms.some((a) => a.kind === 'test-run' && typeof a.treeHash === 'string');
112
+ }
113
+ /**
114
+ * The one rule for whether a recorded `testsPassed` still stands — shared by
115
+ * `cleo done` planning and `cleo complete` (T12656 AC2). A moved tree under a
116
+ * targeted test-run (T12965) is checked first, then a scoped-only result
117
+ * after (or with unknown) merge (D11150). Each input is resolved lazily, only
118
+ * when the recorded atoms make it relevant.
119
+ *
120
+ * @param atoms - Recorded `testsPassed` atoms.
121
+ * @param probe - Lazy merge state (with why a lookup failed, when known) and
122
+ * current tree hash.
123
+ * @returns The reason it no longer stands, or null.
67
124
  * @task T12656
125
+ * @task T12965
68
126
  */
69
- export async function taskAffectedScopeSupersededReason(task, storeRoot, deps) {
70
- const atoms = task.verification?.evidence?.testsPassed?.atoms ?? [];
71
- if (!isAffectedOnly(atoms))
127
+ export async function testsPassedSupersededReason(atoms, probe) {
128
+ if (hasTreeBoundTestRun(atoms)) {
129
+ const moved = testRunTreeMismatchReason(atoms, await probe.currentTree());
130
+ if (moved)
131
+ return moved;
132
+ }
133
+ if (!isScopedOnly(atoms))
72
134
  return null;
135
+ const merge = await probe.mergeState();
136
+ const verdict = typeof merge === 'string' ? { state: merge } : merge;
137
+ return scopedRunSupersededReason(atoms, verdict.state, verdict.lookupFailed);
138
+ }
139
+ function prRefOf(pr) {
140
+ return pr.componentPrNumber !== undefined
141
+ ? `${pr.componentPrNumber}@${pr.prNumber}`
142
+ : String(pr.prNumber);
143
+ }
144
+ function changeSetPrRef(cs) {
145
+ return cs.source === 'pr' && cs.prNumber !== undefined && cs.stackedOn === undefined
146
+ ? prRefOf({
147
+ prNumber: cs.prNumber,
148
+ ...(cs.componentPrNumber !== undefined ? { componentPrNumber: cs.componentPrNumber } : {}),
149
+ })
150
+ : null;
151
+ }
152
+ /** The same commit, whichever side is abbreviated. */
153
+ function sameCommit(a, b) {
154
+ const [x, y] = [a.toLowerCase(), b.toLowerCase()];
155
+ return x.length >= 7 && y.length >= 7 && (x.startsWith(y) || y.startsWith(x));
156
+ }
157
+ /** The first 12 characters of each commit, comma-separated. */
158
+ function shortShas(shas) {
159
+ return shas.map((sha) => sha.slice(0, 12)).join(', ');
160
+ }
161
+ /**
162
+ * Whether a merged PR carries every implementation commit, so its CI ran them
163
+ * (T12959 review). A commit is carried when it is an ancestor of the PR's
164
+ * merge commit, one of the PR's own commits as `gh` lists them (a squash or
165
+ * rebase merge rewrites the SHAs; a component's commits count for its
166
+ * integration PR), or a patch-equivalent of one of them (rebased before the
167
+ * PR merged). A commit built on top of the merge came after it and is never
168
+ * carried. `incomplete` names a lookup it needed that failed.
169
+ */
170
+ async function carriesAll(root, pr, commits, probes) {
171
+ const merge = pr.mergeCommitSha ?? null;
172
+ let rest = merge === null ? [...commits] : commits.filter((sha) => !probes.contains(root, sha, merge));
173
+ if (rest.length === 0)
174
+ return { carried: true, incomplete: null };
175
+ if (merge !== null && rest.some((sha) => probes.contains(root, merge, sha))) {
176
+ return { carried: false, incomplete: null };
177
+ }
178
+ let incomplete = null;
179
+ const own = [];
180
+ for (const n of [pr.prNumber, pr.componentPrNumber]) {
181
+ if (n === undefined)
182
+ continue;
183
+ const view = await probes.viewPr(n, root);
184
+ if (view === null)
185
+ incomplete ??= `gh pr view ${n} failed (${GH_UNREACHABLE})`;
186
+ else
187
+ own.push(...(view.commits ?? []));
188
+ }
189
+ rest = rest.filter((sha) => !own.some((oid) => sameCommit(oid, sha)));
190
+ if (rest.length === 0)
191
+ return { carried: true, incomplete: null };
192
+ for (const sha of rest) {
193
+ const equivalent = own.length > 0 ? probes.equivalent(root, sha, own) : false;
194
+ if (equivalent === true)
195
+ continue;
196
+ if (equivalent === null) {
197
+ incomplete ??= `git could not compare ${shortShas([sha])} with the commits of PR #${pr.prNumber}`;
198
+ }
199
+ else if (equivalent !== false) {
200
+ incomplete ??= `commit(s) ${shortShas(equivalent.missing)} are not in the local object store — run \`git fetch\``;
201
+ }
202
+ return { carried: false, incomplete };
203
+ }
204
+ return { carried: true, incomplete: null };
205
+ }
206
+ /**
207
+ * Merged PRs into the default branch that GitHub associates with every
208
+ * commit, newest first — candidates only, which {@link carriesAll} then
209
+ * checks. `failed` names a lookup that failed: a `gh` call, or the default
210
+ * branch, which comes from origin's ref, else from `gh` (a PR merged into any
211
+ * other branch, such as a stacked PR's base, never counts).
212
+ */
213
+ async function githubCarrierCandidates(root, commits, list, defaultBranch) {
214
+ const perCommit = [];
215
+ for (const sha of commits) {
216
+ const rows = await list(sha, root);
217
+ if (rows === null) {
218
+ return {
219
+ prs: [],
220
+ failed: `gh api commits/${shortShas([sha])}/pulls failed (${GH_UNREACHABLE})`,
221
+ };
222
+ }
223
+ const merged = new Map(rows.filter((pr) => pr.mergedAt !== null).map((pr) => [pr.number, pr]));
224
+ if (merged.size === 0)
225
+ return { prs: [], failed: null };
226
+ perCommit.push(merged);
227
+ }
228
+ const [first, ...others] = perCommit;
229
+ const common = [...(first?.values() ?? [])].filter((pr) => others.every((m) => m.has(pr.number)));
230
+ if (common.length === 0)
231
+ return { prs: [], failed: null };
232
+ const base = await defaultBranch();
233
+ if (base === null) {
234
+ return {
235
+ prs: [],
236
+ failed: `the default branch is unknown (no origin/HEAD, origin/main or origin/master, and gh repo view failed: ${GH_UNREACHABLE})`,
237
+ };
238
+ }
239
+ return {
240
+ prs: common
241
+ .filter((pr) => pr.baseRefName === base)
242
+ .sort((a, b) => (b.mergedAt ?? '').localeCompare(a.mergedAt ?? ''))
243
+ .map((pr) => ({ prNumber: pr.number, mergeCommitSha: pr.mergeCommitSha ?? null })),
244
+ failed: null,
245
+ };
246
+ }
247
+ /**
248
+ * Whether a task's LATEST implementation has merged, and through which PR —
249
+ * the one function `cleo done` planning, `cleo complete` and a scope-aware
250
+ * `tool:test` all ask (T12656 AC2).
251
+ *
252
+ * With recorded `commit:` atoms, the commits decide, never "any merged PR
253
+ * that cites the task": the PR named is one that carries every commit (see
254
+ * {@link carriesAll}) — a recorded `pr:` atom first (newest), then the PR the
255
+ * change-set derivation found, then a merged PR into the default branch that
256
+ * GitHub associates with the commits. Landing on the local `origin/<default>`
257
+ * is a positive signal only (merged, but no PR proves it); its absence proves
258
+ * nothing, since the ref may be stale and squash and rebase merges rewrite
259
+ * SHAs. With no sign of a merge, the state is unmerged — or unknown when a
260
+ * lookup it needed failed. A landed change with no carrier and a failed lookup
261
+ * names that lookup (`lookupFailed`): the carrier is unknown, which is not
262
+ * "no PR carries it" (`unproven`). Without commit atoms, the newest recorded
263
+ * `pr:` atom, else the derivation, decides.
264
+ *
265
+ * @param task - The task whose change is examined.
266
+ * @param storeRoot - CLEO store root.
267
+ * @param deps - Change-set I/O and git/`gh` probes.
268
+ * @returns The merge state, the PR, the change set when one was derived, and
269
+ * any lookup that failed.
270
+ * @task T12959
271
+ * @task T12960
272
+ */
273
+ export async function taskChangeMergeState(task, storeRoot, deps = {}) {
73
274
  const implemented = task.verification?.evidence?.implemented?.atoms ?? [];
74
- if (implemented.some((a) => a.kind === 'pr')) {
75
- return affectedScopeSupersededReason(atoms, 'merged');
275
+ const commits = implemented.flatMap((a) => (a.kind === 'commit' ? [a.sha] : []));
276
+ const prs = implemented
277
+ .filter((a) => a.kind === 'pr')
278
+ .toSorted((a, b) => (b.mergedAt ?? '').localeCompare(a.mergedAt ?? ''));
279
+ const cs = await import('./change-set.js');
280
+ const derive = async () => deps.derived ??
281
+ (await cs.deriveTaskChangeSet({ task, storeRoot, cwd: storeRoot }, deps.changeSet));
282
+ const failures = [];
283
+ const derivedFailure = (changeSet) => {
284
+ if (mergeStateOfChangeSet(changeSet) === 'unknown') {
285
+ failures.push(`the merged-PR lookup failed (${GH_UNREACHABLE})`);
286
+ }
287
+ };
288
+ const lookupFailed = () => failures.length > 0 ? { lookupFailed: [...new Set(failures)].join('; ') } : {};
289
+ if (commits.length === 0) {
290
+ const newest = prs[0];
291
+ if (newest)
292
+ return { state: 'merged', changeSet: null, prRef: prRefOf(newest) };
293
+ const changeSet = await derive();
294
+ derivedFailure(changeSet);
295
+ return {
296
+ state: mergeStateOfChangeSet(changeSet),
297
+ changeSet,
298
+ prRef: changeSetPrRef(changeSet),
299
+ ...lookupFailed(),
300
+ };
301
+ }
302
+ // T12965 review M2: the same root `cleo done` reads the change set from.
303
+ const at = deps.executionRoot ?? cs.resolveChangeSetRoot(storeRoot, task.id).root;
304
+ const probes = {
305
+ contains: deps.contains ?? cs.isAncestorCommit,
306
+ equivalent: deps.equivalent ?? cs.hasPatchEquivalent,
307
+ viewPr: deps.changeSet?.viewPr ?? cs.defaultViewPr,
308
+ };
309
+ const carries = async (pr) => {
310
+ const r = await carriesAll(at, pr, commits, probes);
311
+ if (r.incomplete !== null)
312
+ failures.push(r.incomplete);
313
+ return r.carried;
314
+ };
315
+ for (const pr of prs) {
316
+ if (await carries(pr))
317
+ return { state: 'merged', changeSet: null, prRef: prRefOf(pr) };
318
+ }
319
+ const changeSet = await derive();
320
+ derivedFailure(changeSet);
321
+ const derivedRef = changeSetPrRef(changeSet);
322
+ if (derivedRef !== null &&
323
+ changeSet.prNumber !== undefined &&
324
+ (await carries({
325
+ prNumber: changeSet.prNumber,
326
+ ...(changeSet.componentPrNumber !== undefined
327
+ ? { componentPrNumber: changeSet.componentPrNumber }
328
+ : {}),
329
+ mergeCommitSha: changeSet.mergeCommitSha ?? null,
330
+ }))) {
331
+ return { state: 'merged', changeSet, prRef: derivedRef };
332
+ }
333
+ // T12959 review: a PR GitHub associates with the commits is a candidate
334
+ // only; it is named when it carries them, like every other candidate.
335
+ const github = await githubCarrierCandidates(at, commits, deps.changeSet?.listPrsForCommit ?? cs.defaultListPrsForCommit, async () => {
336
+ const ref = cs.resolveOriginDefault(at);
337
+ if (ref !== null)
338
+ return ref.replace(/^origin\//, '');
339
+ const ask = deps.changeSet?.defaultBranch ??
340
+ (await import('../release/ci-evidence.js')).ghDefaultBranch;
341
+ return ask(at);
342
+ });
343
+ if (github.failed !== null)
344
+ failures.push(github.failed);
345
+ for (const pr of github.prs) {
346
+ if (await carries(pr))
347
+ return { state: 'merged', changeSet, prRef: prRefOf(pr) };
348
+ }
349
+ const isLanded = deps.isLanded ?? cs.isLandedOnOriginDefault;
350
+ if (commits.every((sha) => isLanded(at, sha))) {
351
+ // T12959 review: with a failed lookup the carrier is unknown, not absent.
352
+ if (failures.length > 0)
353
+ return { state: 'merged', changeSet, prRef: null, ...lookupFailed() };
354
+ return {
355
+ state: 'merged',
356
+ changeSet,
357
+ prRef: null,
358
+ unproven: `implementation commit(s) ${shortShas(commits)} reached the default branch, but no merged PR is known to carry them` +
359
+ (derivedRef !== null ? ` (PR #${derivedRef}, which cites ${task.id}, does not)` : ''),
360
+ };
76
361
  }
77
- const { deriveTaskChangeSet } = await import('./change-set.js');
78
- const changeSet = await deriveTaskChangeSet({ task, storeRoot, cwd: storeRoot }, deps);
79
- return affectedScopeSupersededReason(atoms, mergeStateOfChangeSet(changeSet));
362
+ return {
363
+ state: failures.length > 0 ? 'unknown' : 'unmerged',
364
+ changeSet,
365
+ prRef: null,
366
+ ...lookupFailed(),
367
+ };
80
368
  }
81
369
  //# sourceMappingURL=affected-scope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"affected-scope.js","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkC;IAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CACrE,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;AACjG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAA6E;IAE7E,IAAI,SAAS,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC,UAAU,CAAC;IACtD,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,SAAS,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAkC,EAClC,KAAuB;IAEvB,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,6HAA6H;QAC/H,CAAC,CAAC,2OAA2O,CAAC;AAClP,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAAU,EACV,SAAiB,EACjB,IAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IACpE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1E,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;IACvF,OAAO,6BAA6B,CAAC,KAAK,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"affected-scope.js","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0BH,oFAAoF;AACpF,MAAM,cAAc,GAAG,yCAAyC,CAAC;AAEjE,yDAAyD;AACzD,SAAS,aAAa,CAAC,CAAe;IACpC,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC;AACjF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,KAAkC;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CACrE,CAAC;IACF,OAAO,CACL,OAAO,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAC7F,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAA6E;IAE7E,IAAI,SAAS,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC,UAAU,CAAC;IACtD,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,SAAS,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACvE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAkC,EAClC,KAAuB,EACvB,YAAqB;IAErB,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,+JAA+J;QACjK,CAAC,CAAC,kLAAkL,YAAY,IAAI,cAAc,6CAA6C,CAAC;AACpQ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAkC,EAClC,OAAsB;IAEtB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CACxB,CAAC,CAAC,EAAoD,EAAE,CACtD,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CACpF,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,EAAE,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,OAAO,KAAK,IAAI;QACrB,CAAC,CAAC,iCAAiC,KAAK,CAAC,IAAI,mBAAmB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,2JAA2J;QACtP,CAAC,CAAC,iCAAiC,KAAK,CAAC,IAAI,sBAAsB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,0IAA0I,CAAC;AAC1R,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkC;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAkC,EAClC,KAGC;IAED,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,OAAO,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;AAC/E,CAAC;AAsDD,SAAS,OAAO,CAAC,EAAoD;IACnE,OAAO,EAAE,CAAC,iBAAiB,KAAK,SAAS;QACvC,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC1C,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,EAAiB;IACvC,OAAO,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS;QAClF,CAAC,CAAC,OAAO,CAAC;YACN,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,GAAG,CAAC,EAAE,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3F,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAgBD,sDAAsD;AACtD,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,+DAA+D;AAC/D,SAAS,SAAS,CAAC,IAAuB;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,UAAU,CACvB,IAAY,EACZ,EAAa,EACb,OAA0B,EAC1B,MAAqB;IAErB,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,IAAI,IAAI,CAAC;IACxC,IAAI,IAAI,GACN,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClE,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,KAAK,IAAI;YAAE,UAAU,KAAK,cAAc,CAAC,YAAY,cAAc,GAAG,CAAC;;YAC1E,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,IAAI,UAAU,KAAK,IAAI;YAAE,SAAS;QAClC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,UAAU,KAAK,yBAAyB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,4BAA4B,EAAE,CAAC,QAAQ,EAAE,CAAC;QACpG,CAAC;aAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAChC,UAAU,KAAK,aAAa,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,wDAAwD,CAAC;QACpH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,uBAAuB,CACpC,IAAY,EACZ,OAA0B,EAC1B,IAAoD,EACpD,aAA2C;IAE3C,MAAM,SAAS,GAAiC,EAAE,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO;gBACL,GAAG,EAAE,EAAE;gBACP,MAAM,EAAE,kBAAkB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,cAAc,GAAG;aAC9E,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACxD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,yGAAyG,cAAc,GAAG;SACnI,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,EAAE,MAAM;aACR,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC;aACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAmB,EACnB,SAAiB,EACjB,OAAuB,EAAE;IAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,WAAW;SACpB,MAAM,CAAC,CAAC,CAAC,EAA8C,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;SAC1E,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,KAAK,IAA4B,EAAE,CAChD,IAAI,CAAC,OAAO;QACZ,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAG,CAAC,SAAwB,EAAQ,EAAE;QACxD,IAAI,qBAAqB,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,gCAAgC,cAAc,GAAG,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,GAAuC,EAAE,CAC5D,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChF,MAAM,SAAS,GAAG,MAAM,MAAM,EAAE,CAAC;QACjC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO;YACL,KAAK,EAAE,qBAAqB,CAAC,SAAS,CAAC;YACvC,SAAS;YACT,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC;YAChC,GAAG,YAAY,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;IAClF,MAAM,MAAM,GAAkB;QAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,gBAAgB;QAC9C,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,kBAAkB;QACpD,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,aAAa;KACnD,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,EAAa,EAAoB,EAAE;QACxD,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,IACE,UAAU,KAAK,IAAI;QACnB,SAAS,CAAC,QAAQ,KAAK,SAAS;QAChC,CAAC,MAAM,OAAO,CAAC;YACb,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,CAAC,SAAS,CAAC,iBAAiB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,EAAE;gBACpD,CAAC,CAAC,EAAE,CAAC;YACP,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,IAAI;SACjD,CAAC,CAAC,EACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC3D,CAAC;IACD,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,EAAE,EACF,OAAO,EACP,IAAI,CAAC,SAAS,EAAE,gBAAgB,IAAI,EAAE,CAAC,uBAAuB,EAC9D,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GACP,IAAI,CAAC,SAAS,EAAE,aAAa;YAC7B,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9D,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CACF,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,MAAM,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,uBAAuB,CAAC;IAC7D,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9C,0EAA0E;QAC1E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,EAAE,CAAC;QAC/F,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,SAAS;YACT,KAAK,EAAE,IAAI;YACX,QAAQ,EACN,4BAA4B,SAAS,CAAC,OAAO,CAAC,sEAAsE;gBACpH,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,UAAU,iBAAiB,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;SACxF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QACnD,SAAS;QACT,KAAK,EAAE,IAAI;QACX,GAAG,YAAY,EAAE;KAClB,CAAC;AACJ,CAAC"}