@joshuafolkken/kit 1.3000.0 → 1.3044.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. package/.claude/skills/workflow-commands/backlogrun-steps.md +1 -1
  2. package/.claude/skills/workflow-commands/kickoff.md +6 -0
  3. package/.claude/skills/workflow-commands/progress-watcher.md +10 -8
  4. package/dist/.inputs-verified.json +1 -1
  5. package/dist/commands/adopt.js +12 -12
  6. package/dist/commands/auto-ok-judge-cli.js +18 -14
  7. package/dist/commands/auto-ok-main.js +42 -40
  8. package/dist/commands/backlog-budget-main.js +3 -3
  9. package/dist/commands/backlog-drive-cli.js +276 -188
  10. package/dist/commands/backlog-next-main.js +77 -75
  11. package/dist/commands/backlog-offer-main.js +80 -78
  12. package/dist/commands/backlog-plan-cli.js +96 -97
  13. package/dist/commands/backlog-triage-cli.js +94 -92
  14. package/dist/commands/backlogrun-cli.js +212 -206
  15. package/dist/commands/behavior-cli.js +12 -13
  16. package/dist/commands/bump-version-main.js +2 -2
  17. package/dist/commands/bytes-command.js +61 -22
  18. package/dist/commands/check-related.js +61 -60
  19. package/dist/commands/{chunk-X7PN54LZ.js → chunk-22DVQCP6.js} +16 -6
  20. package/dist/commands/{chunk-UTBVTCQN.js → chunk-24OATKOF.js} +301 -168
  21. package/dist/commands/{chunk-7GHOFHUS.js → chunk-24ZDAWML.js} +3 -3
  22. package/dist/commands/{chunk-HBNB3TLG.js → chunk-2BB5ZR2F.js} +13 -7
  23. package/dist/commands/{chunk-F22G3VDB.js → chunk-2BC33QPY.js} +1 -1
  24. package/dist/commands/{chunk-72EW7AVI.js → chunk-2BJJUTZA.js} +2 -2
  25. package/dist/commands/{chunk-XDQOWUVT.js → chunk-2CXT6MBR.js} +4 -4
  26. package/dist/commands/{chunk-TVJE67O2.js → chunk-2EZTYLO4.js} +6 -6
  27. package/dist/commands/{chunk-JLYW7CP6.js → chunk-2PHOLX62.js} +1 -1
  28. package/dist/commands/{chunk-6EU5ZCDP.js → chunk-2QM72JCJ.js} +23 -87
  29. package/dist/commands/{chunk-EFHSCUFN.js → chunk-2VFPUPSG.js} +2 -2
  30. package/dist/commands/{chunk-ATRMETHT.js → chunk-2XAH3MHV.js} +1 -1
  31. package/dist/commands/{chunk-T2E724HN.js → chunk-34JJYCIY.js} +2 -2
  32. package/dist/commands/{chunk-REMKUFAC.js → chunk-34KZDKQJ.js} +1 -1
  33. package/dist/commands/{chunk-GK2KY4MO.js → chunk-352KLSFX.js} +3 -3
  34. package/dist/commands/{chunk-7S6VRZOH.js → chunk-3AEDZZNL.js} +5 -5
  35. package/dist/commands/{chunk-KVJDDECB.js → chunk-3B2HEFNO.js} +2 -2
  36. package/dist/commands/{chunk-HZBTXKT2.js → chunk-3Z425MM3.js} +2 -2
  37. package/dist/commands/{chunk-J3G2R64I.js → chunk-3ZOX4G4U.js} +3 -3
  38. package/dist/commands/{chunk-LRS2OS5J.js → chunk-452HWOJ7.js} +2 -2
  39. package/dist/commands/{chunk-HRT4KWP4.js → chunk-475EFIJV.js} +1 -1
  40. package/dist/commands/{chunk-4HBVHYNL.js → chunk-47UZB54M.js} +3 -3
  41. package/dist/commands/{chunk-H4LYG37R.js → chunk-4DN4XVPL.js} +6 -6
  42. package/dist/commands/{chunk-TMLNI3YW.js → chunk-4HERA2GY.js} +1 -1
  43. package/dist/commands/{chunk-W6V4DWC5.js → chunk-4JI35CVO.js} +1 -1
  44. package/dist/commands/{chunk-YT342DRV.js → chunk-4L4LNWZ7.js} +2 -2
  45. package/dist/commands/{chunk-ZZAH3YQP.js → chunk-4N32QKJZ.js} +6 -6
  46. package/dist/commands/{chunk-GDUK5YPO.js → chunk-4NRSFLG7.js} +12 -12
  47. package/dist/commands/{chunk-O5QZ2S6X.js → chunk-4OKRPAUT.js} +4 -4
  48. package/dist/commands/{chunk-QDFDB4CF.js → chunk-4Q64PG46.js} +13 -13
  49. package/dist/commands/{chunk-HO52D6JY.js → chunk-4UDTQVDD.js} +14 -14
  50. package/dist/commands/{chunk-HPVLI26Z.js → chunk-4WR2LEZL.js} +6 -6
  51. package/dist/commands/{chunk-DP7WIGQ4.js → chunk-4ZJOC6OK.js} +4 -4
  52. package/dist/commands/{chunk-WTRDWEUQ.js → chunk-4ZQM4I7R.js} +12 -12
  53. package/dist/commands/{chunk-OTZJXU2R.js → chunk-54X37JEJ.js} +8 -8
  54. package/dist/commands/{chunk-A5V7EWIX.js → chunk-56KW5EOK.js} +2 -2
  55. package/dist/commands/chunk-5CG3XU3O.js +74 -0
  56. package/dist/commands/{chunk-FC33R5UN.js → chunk-5ESZLHDZ.js} +13 -15
  57. package/dist/commands/{chunk-OVA7STGP.js → chunk-5FBRMARM.js} +9 -9
  58. package/dist/commands/{chunk-SK2LJBFS.js → chunk-5PCK53WP.js} +3 -3
  59. package/dist/commands/{chunk-6NV2F7QH.js → chunk-5RG4S66L.js} +1 -1
  60. package/dist/commands/{chunk-JOARHU3M.js → chunk-5UJGACVN.js} +1 -1
  61. package/dist/commands/{chunk-NKOET4FB.js → chunk-5Y7B7FDL.js} +2 -2
  62. package/dist/commands/{chunk-XMBRXCIE.js → chunk-5Z6E5ZUV.js} +4 -4
  63. package/dist/commands/{chunk-RZ4OKKPM.js → chunk-5ZNUH4LV.js} +2 -2
  64. package/dist/commands/{chunk-7CHCZBNF.js → chunk-6CFHLMKM.js} +4 -4
  65. package/dist/commands/{chunk-TXXYC7EV.js → chunk-6DDK5XWK.js} +1 -1
  66. package/dist/commands/{chunk-2TQXCH2K.js → chunk-6GQX752S.js} +3 -3
  67. package/dist/commands/{chunk-RY6ZDHKB.js → chunk-6MAZ55GF.js} +107 -84
  68. package/dist/commands/{chunk-SNFLV7VV.js → chunk-6RUWU2SB.js} +2 -2
  69. package/dist/commands/{chunk-D4SZK7H2.js → chunk-6TIVDEKG.js} +2 -2
  70. package/dist/commands/{chunk-RIQ75QWR.js → chunk-6UCWAFQY.js} +55 -43
  71. package/dist/commands/{chunk-4D5KWMFL.js → chunk-6YURRFRU.js} +19 -19
  72. package/dist/commands/{chunk-7MOZEEFJ.js → chunk-6YVURZAJ.js} +1 -1
  73. package/dist/commands/{chunk-73JOEKIC.js → chunk-6Z4YZG7P.js} +5 -5
  74. package/dist/commands/{chunk-NJ53AWJU.js → chunk-77BIN247.js} +9 -9
  75. package/dist/commands/{chunk-MZHOPRI6.js → chunk-7ABHNNY3.js} +7 -7
  76. package/dist/commands/{chunk-6WTVAL4D.js → chunk-7C7FOKJK.js} +1 -1
  77. package/dist/commands/{chunk-KVSSLDA3.js → chunk-7HAGC6SW.js} +5 -5
  78. package/dist/commands/{chunk-IG22Y5MA.js → chunk-7KKUFLH5.js} +1 -1
  79. package/dist/commands/{chunk-ZQ3CKRMP.js → chunk-7MJYLUF4.js} +2 -2
  80. package/dist/commands/{chunk-6UGFS3EU.js → chunk-7NHZCI5Y.js} +11 -11
  81. package/dist/commands/{chunk-FB3D7CX5.js → chunk-7OQ56DVW.js} +5 -7
  82. package/dist/commands/{chunk-EK327QOS.js → chunk-7VWPGTZO.js} +10 -10
  83. package/dist/commands/{chunk-WSOF74K4.js → chunk-7YZXS3AK.js} +3 -3
  84. package/dist/commands/{chunk-N6TYL3B2.js → chunk-AAUDI7WJ.js} +2 -2
  85. package/dist/commands/{chunk-3GF52L5F.js → chunk-AC26ZUG5.js} +12 -24
  86. package/dist/commands/{chunk-EK2Y6B4X.js → chunk-ACZ52JPI.js} +7 -7
  87. package/dist/commands/{chunk-VD72V5VX.js → chunk-AJ65WNJB.js} +4 -4
  88. package/dist/commands/{chunk-MYWRGF5A.js → chunk-AK7SEO4Y.js} +2 -2
  89. package/dist/commands/{chunk-IBEKFLWG.js → chunk-ALDAS2WG.js} +9 -9
  90. package/dist/commands/{chunk-W32DIQEP.js → chunk-ARFBIJFS.js} +1 -1
  91. package/dist/commands/{chunk-F3WBEEYC.js → chunk-AVVMDVGO.js} +5 -5
  92. package/dist/commands/chunk-AXXEMVRJ.js +23 -0
  93. package/dist/commands/{chunk-GIGKMIPQ.js → chunk-B3M5WSGN.js} +1 -1
  94. package/dist/commands/{chunk-4Z5723GA.js → chunk-B7ZNIEDV.js} +5 -4
  95. package/dist/commands/{chunk-B3XFOHDX.js → chunk-BCUDQWYK.js} +10 -4
  96. package/dist/commands/{chunk-PR3JCPP7.js → chunk-BMKWSWWE.js} +1 -1
  97. package/dist/commands/{chunk-RZJAUVMI.js → chunk-BMM4RHCG.js} +2 -2
  98. package/dist/commands/{chunk-LAKVPOJQ.js → chunk-BMTYUJNT.js} +2 -2
  99. package/dist/commands/{chunk-DAJCUSPG.js → chunk-BRHPRDDV.js} +3 -3
  100. package/dist/commands/{chunk-UZAU6UI6.js → chunk-BRUBX64M.js} +2 -2
  101. package/dist/commands/{chunk-BFLFPKQQ.js → chunk-BTZJDHQT.js} +4 -4
  102. package/dist/commands/{chunk-AI5K4QJO.js → chunk-BYFC6MD2.js} +1 -1
  103. package/dist/commands/{chunk-JGTLNFFE.js → chunk-BYGJ3BCJ.js} +10 -10
  104. package/dist/commands/{chunk-5HWZFL4D.js → chunk-C54QXJD6.js} +51 -18
  105. package/dist/commands/{chunk-LMS6N6GE.js → chunk-CBAKBWSZ.js} +7 -7
  106. package/dist/commands/{chunk-7EAMUVIO.js → chunk-CFHRNTE5.js} +1 -1
  107. package/dist/commands/{chunk-UIWAMLQH.js → chunk-CGYDIYHD.js} +2 -2
  108. package/dist/commands/{chunk-4QYW2IL7.js → chunk-CHKYPF5O.js} +1 -1
  109. package/dist/commands/{chunk-5HCPSV45.js → chunk-CJBW6BWG.js} +8 -8
  110. package/dist/commands/chunk-CKUKK7JG.js +252 -0
  111. package/dist/commands/{chunk-4PES3BAA.js → chunk-CMHGDCGN.js} +3 -3
  112. package/dist/commands/{chunk-F6OWP2AY.js → chunk-CNGTHSUS.js} +22 -22
  113. package/dist/commands/{chunk-B2EA2HCY.js → chunk-COGKULQH.js} +4 -4
  114. package/dist/commands/{chunk-S7XWXG4M.js → chunk-CP2J4RV2.js} +175 -81
  115. package/dist/commands/{chunk-YGDNUTTI.js → chunk-CQUZ6TNQ.js} +2 -2
  116. package/dist/commands/chunk-CQZI7RIK.js +72 -0
  117. package/dist/commands/chunk-CVJHQOI3.js +153 -0
  118. package/dist/commands/{chunk-2MJ4OCDL.js → chunk-CWCKCZS6.js} +1 -1
  119. package/dist/commands/chunk-D5OHVIPM.js +17 -0
  120. package/dist/commands/{chunk-TPKFVVJQ.js → chunk-D6D6WQR6.js} +2 -2
  121. package/dist/commands/{chunk-5PAEXYIY.js → chunk-D7JRJI44.js} +69 -6
  122. package/dist/commands/{chunk-LOSOLCCW.js → chunk-D7OAU32Z.js} +1 -1
  123. package/dist/commands/{chunk-VZHC2I3T.js → chunk-DAAX7XDS.js} +8 -8
  124. package/dist/commands/{chunk-OHVAEJSM.js → chunk-DEZF7QZZ.js} +5 -5
  125. package/dist/commands/{chunk-CA6F5OXK.js → chunk-DYZOOWVW.js} +124 -21
  126. package/dist/commands/{chunk-TKGBF75Y.js → chunk-EDKOSZ3K.js} +5 -5
  127. package/dist/commands/{chunk-YPNTORQD.js → chunk-EFDVE5P5.js} +1 -1
  128. package/dist/commands/{chunk-EH3LVYOX.js → chunk-EGIHAEMT.js} +1 -1
  129. package/dist/commands/{chunk-7P4X4TQL.js → chunk-EKLU6QR7.js} +4 -4
  130. package/dist/commands/{chunk-ILQZFUDC.js → chunk-ELY76WAR.js} +2 -2
  131. package/dist/commands/{chunk-2VLHFILE.js → chunk-EM3HAZF6.js} +2 -2
  132. package/dist/commands/{chunk-F2HFWLQR.js → chunk-EMTZAGT5.js} +20 -1
  133. package/dist/commands/{chunk-GA4VIFHD.js → chunk-ERG4QRNG.js} +2 -2
  134. package/dist/commands/{chunk-ICEMFE2V.js → chunk-EUGNQCYK.js} +1 -1
  135. package/dist/commands/{chunk-3HU3LPIF.js → chunk-EXDFKKMH.js} +2 -2
  136. package/dist/commands/{chunk-ISPBJVXM.js → chunk-EXWB34R2.js} +7 -7
  137. package/dist/commands/{chunk-FNOSSXLG.js → chunk-EYMPBHDN.js} +2 -2
  138. package/dist/commands/{chunk-7V5UVKFG.js → chunk-EZ7IPKIH.js} +2 -2
  139. package/dist/commands/{chunk-KQWSENCT.js → chunk-F6IQHZYY.js} +3 -3
  140. package/dist/commands/{chunk-7ZECP3J6.js → chunk-FDS65XOJ.js} +5 -5
  141. package/dist/commands/{chunk-KXRFGPZD.js → chunk-FGG7V473.js} +21 -5
  142. package/dist/commands/{chunk-PZ6VWHOO.js → chunk-FHFWNNUC.js} +1 -1
  143. package/dist/commands/{chunk-XBRD2BDL.js → chunk-FJX7AENO.js} +2 -2
  144. package/dist/commands/{chunk-M42SLJCD.js → chunk-FKZ5E4JD.js} +4 -4
  145. package/dist/commands/{chunk-F2J6DGDM.js → chunk-FMZWRDKH.js} +8 -8
  146. package/dist/commands/{chunk-DSBK66US.js → chunk-FOKCRIAN.js} +10 -10
  147. package/dist/commands/{chunk-OI7KM4K3.js → chunk-FQGWO2ZH.js} +2 -2
  148. package/dist/commands/{chunk-2IESYBZH.js → chunk-FURNDIT3.js} +3 -3
  149. package/dist/commands/chunk-FVDQNMP6.js +93 -0
  150. package/dist/commands/{chunk-PZU6FZO6.js → chunk-FWU3H4TX.js} +1 -1
  151. package/dist/commands/{chunk-RYZ3RQRH.js → chunk-G3HBYHFA.js} +1 -1
  152. package/dist/commands/{chunk-HCA5QG2U.js → chunk-G4E4M2P4.js} +2 -2
  153. package/dist/commands/{chunk-VJLZ3IQQ.js → chunk-G5KSL2Q2.js} +1 -1
  154. package/dist/commands/{chunk-Y5ZW3KN5.js → chunk-G6XC7V6Y.js} +2 -2
  155. package/dist/commands/{chunk-73EBNBUW.js → chunk-GCPP5XIG.js} +1 -1
  156. package/dist/commands/{chunk-Q3463XNL.js → chunk-GITT5A5A.js} +3 -3
  157. package/dist/commands/{chunk-T2IO4LEB.js → chunk-GLC47H7I.js} +10 -10
  158. package/dist/commands/{chunk-GA6E4VGO.js → chunk-GUR54ELE.js} +1 -1
  159. package/dist/commands/{chunk-7IT23HIR.js → chunk-GY4DMCKS.js} +2 -2
  160. package/dist/commands/{chunk-PZ4ITSLG.js → chunk-H6JQRHDC.js} +3 -3
  161. package/dist/commands/{chunk-ZHZSZNE2.js → chunk-HATKF6VX.js} +2 -2
  162. package/dist/commands/{chunk-ELWNRE6E.js → chunk-HH3CVIFU.js} +5 -5
  163. package/dist/commands/{chunk-7GMTJDO2.js → chunk-HHMMGDMP.js} +6 -6
  164. package/dist/commands/{chunk-VD5674LW.js → chunk-HI5WPM6C.js} +2 -2
  165. package/dist/commands/{chunk-JUUBDYFZ.js → chunk-HQSWPRUF.js} +4 -4
  166. package/dist/commands/{chunk-ZAJD6T6E.js → chunk-HVCQYZVD.js} +2 -2
  167. package/dist/commands/chunk-HWEZRNPL.js +66 -0
  168. package/dist/commands/{chunk-J6GIVMXI.js → chunk-HX3FFIO5.js} +18 -3
  169. package/dist/commands/{chunk-GU5ML3Y3.js → chunk-HXDTA5VU.js} +13 -68
  170. package/dist/commands/{chunk-BNXE3NVB.js → chunk-I2KCGKJI.js} +1 -1
  171. package/dist/commands/{chunk-LC7SBONO.js → chunk-IAD4WLLI.js} +1 -1
  172. package/dist/commands/{chunk-WWC5L3AO.js → chunk-IB5TT73I.js} +2 -2
  173. package/dist/commands/{chunk-HOSZITJM.js → chunk-IBAYXCMU.js} +2 -2
  174. package/dist/commands/chunk-IGDJNXX2.js +49 -0
  175. package/dist/commands/{chunk-OJ4LGBVD.js → chunk-ILIITIMQ.js} +3 -3
  176. package/dist/commands/{chunk-CUR2WNYB.js → chunk-IRGDMSTI.js} +3 -3
  177. package/dist/commands/{chunk-PZTWQYRI.js → chunk-IYJEBWW5.js} +3 -3
  178. package/dist/commands/{chunk-A3D2XHOJ.js → chunk-J22PSIXR.js} +40 -9
  179. package/dist/commands/{chunk-O27H6NN6.js → chunk-J66YBAAM.js} +3 -5
  180. package/dist/commands/{chunk-P6RGQXHI.js → chunk-J6WKZRV2.js} +2 -2
  181. package/dist/commands/{chunk-NFEBQED3.js → chunk-J7IO3AYH.js} +2 -2
  182. package/dist/commands/{chunk-T57W3UWK.js → chunk-JAKC2BHX.js} +1 -1
  183. package/dist/commands/{chunk-3EO2XN3A.js → chunk-JCAQ7B6J.js} +4 -4
  184. package/dist/commands/{chunk-QQZOQ7AM.js → chunk-JFLFGLE4.js} +1 -1
  185. package/dist/commands/{chunk-ZDSDPKCD.js → chunk-JIGBNCDR.js} +1 -1
  186. package/dist/commands/{chunk-Q5N2J2UF.js → chunk-JJHWTFWQ.js} +5 -7
  187. package/dist/commands/{chunk-EI6JG5DF.js → chunk-JKOGWGQM.js} +1 -1
  188. package/dist/commands/{chunk-RK4HE5NW.js → chunk-JM6EVOFN.js} +4 -4
  189. package/dist/commands/{chunk-EBNIX2TC.js → chunk-JV24VP2O.js} +1 -1
  190. package/dist/commands/{chunk-BCK5LW4F.js → chunk-JVKXJ763.js} +3 -3
  191. package/dist/commands/{chunk-D5TAR6TV.js → chunk-JZHY7D6D.js} +1 -1
  192. package/dist/commands/{chunk-CRNPPKP2.js → chunk-JZK33TA5.js} +1 -1
  193. package/dist/commands/{chunk-UOAG2XQT.js → chunk-K275REYP.js} +3 -3
  194. package/dist/commands/{chunk-HESMKHEB.js → chunk-K4G3HOKS.js} +2 -2
  195. package/dist/commands/{chunk-L6XN3EXI.js → chunk-K64EIHD2.js} +1 -1
  196. package/dist/commands/{chunk-RINVPTA2.js → chunk-KCFOP5RI.js} +28 -28
  197. package/dist/commands/{chunk-O26Y2FOJ.js → chunk-KGE4AS2Y.js} +1 -1
  198. package/dist/commands/{chunk-EWA72KO7.js → chunk-KK2SL42W.js} +2 -2
  199. package/dist/commands/{chunk-MMXZKLDU.js → chunk-KK7TEL5G.js} +10 -4
  200. package/dist/commands/{chunk-UEURNXE5.js → chunk-KKIMVXAP.js} +2 -2
  201. package/dist/commands/{chunk-MAGJFH5T.js → chunk-KODXWMBX.js} +6 -6
  202. package/dist/commands/{chunk-D4HNS43Q.js → chunk-KPSKWTOS.js} +17 -17
  203. package/dist/commands/{chunk-VFJYOAOQ.js → chunk-KTV2HNWB.js} +2 -2
  204. package/dist/commands/{chunk-OWR2TCOY.js → chunk-KWYQR5MK.js} +5 -5
  205. package/dist/commands/{chunk-FNQW6NY7.js → chunk-KXK2A2HB.js} +6 -2
  206. package/dist/commands/{chunk-O5FVBIRI.js → chunk-KZ5BBBMO.js} +5 -5
  207. package/dist/commands/{chunk-JUJFIATR.js → chunk-KZ7HD37E.js} +6 -6
  208. package/dist/commands/{chunk-2YCKPX3A.js → chunk-KZZWPUJW.js} +1 -1
  209. package/dist/commands/{chunk-MYNM3YMR.js → chunk-L7DAL54N.js} +3 -3
  210. package/dist/commands/{chunk-NOXLKIPR.js → chunk-LAR76BFA.js} +1 -1
  211. package/dist/commands/{chunk-ZA3W73PF.js → chunk-LB557AHJ.js} +3 -3
  212. package/dist/commands/{chunk-LYEKT3IN.js → chunk-LEB2VP7F.js} +1 -1
  213. package/dist/commands/{chunk-WQJ7O3C3.js → chunk-LJXKVLYI.js} +1 -1
  214. package/dist/commands/{chunk-CHX4QTP4.js → chunk-LJZERYLG.js} +1 -1
  215. package/dist/commands/{chunk-PF22VUWB.js → chunk-LOOFYHUM.js} +76 -26
  216. package/dist/commands/{chunk-HIPO6HUG.js → chunk-LPSULLNK.js} +1 -1
  217. package/dist/commands/{chunk-G47ZNQVG.js → chunk-LR22UK5W.js} +1 -1
  218. package/dist/commands/{chunk-SV4FHQE7.js → chunk-LT7QSHR4.js} +14 -14
  219. package/dist/commands/{chunk-HIB5G2X6.js → chunk-LUXWDMKI.js} +7 -7
  220. package/dist/commands/{chunk-XH6BGVVP.js → chunk-LX7TIEMI.js} +9 -36
  221. package/dist/commands/{chunk-OGNTJ5JB.js → chunk-LYO6TX5L.js} +1 -1
  222. package/dist/commands/{chunk-JLREFWJ4.js → chunk-LZ5QXE5N.js} +6 -6
  223. package/dist/commands/{chunk-WW3TX742.js → chunk-LZPPSOTP.js} +4 -4
  224. package/dist/commands/{chunk-5WIZR5SC.js → chunk-M4UV3BEV.js} +11 -11
  225. package/dist/commands/{chunk-LNBUIOK6.js → chunk-M6JDU5EK.js} +4 -4
  226. package/dist/commands/{chunk-VZSJCFRT.js → chunk-MFBNNTBM.js} +4 -4
  227. package/dist/commands/{chunk-KHWTJ4F7.js → chunk-MI2OS6TL.js} +3 -3
  228. package/dist/commands/{chunk-VZCQZFPH.js → chunk-MLW4S35K.js} +19 -8
  229. package/dist/commands/{chunk-RIUPRMLW.js → chunk-MN425CU6.js} +1 -1
  230. package/dist/commands/{chunk-7W3D3WRW.js → chunk-MOIOSCZM.js} +2 -2
  231. package/dist/commands/{chunk-3BNNMJOT.js → chunk-MRORPFSO.js} +20 -320
  232. package/dist/commands/{chunk-LA5WTOAM.js → chunk-MUGTOJUL.js} +12 -12
  233. package/dist/commands/{chunk-L6LU2633.js → chunk-MVHPRYHE.js} +1 -1
  234. package/dist/commands/{chunk-EKCKCX5S.js → chunk-MWO6FOSZ.js} +123 -21
  235. package/dist/commands/{chunk-AVUGMOHZ.js → chunk-N7QTMTST.js} +2 -2
  236. package/dist/commands/{chunk-LMSS4ARB.js → chunk-NDBX7LSS.js} +1 -1
  237. package/dist/commands/{chunk-BEE7OAQ5.js → chunk-NDWZTWXV.js} +21 -2
  238. package/dist/commands/{chunk-6TESOL3L.js → chunk-NEGJ77RV.js} +7 -7
  239. package/dist/commands/{chunk-LCEJXF7A.js → chunk-NEGRE5VW.js} +4 -4
  240. package/dist/commands/{chunk-IXX4SXIP.js → chunk-NFPD2P3V.js} +1 -1
  241. package/dist/commands/chunk-NHIW7JE6.js +335 -0
  242. package/dist/commands/{chunk-CJSFC5YI.js → chunk-NILSN7A4.js} +7 -7
  243. package/dist/commands/{chunk-W4J6YTFE.js → chunk-NOLFSPOB.js} +2 -2
  244. package/dist/commands/chunk-NT67QTZO.js +65 -0
  245. package/dist/commands/{chunk-NJT5L6IC.js → chunk-NU7W6QGT.js} +33 -4
  246. package/dist/commands/chunk-NUR4FQHM.js +21 -0
  247. package/dist/commands/{chunk-OKKQI4ZG.js → chunk-OAAVY2JK.js} +1 -1
  248. package/dist/commands/chunk-OF4BY4N7.js +32 -0
  249. package/dist/commands/{chunk-W47I2KDY.js → chunk-OGS2DK7I.js} +3 -3
  250. package/dist/commands/{chunk-MS6Q3Z7V.js → chunk-OIPV3PWW.js} +6 -6
  251. package/dist/commands/{chunk-T33QDAWD.js → chunk-OIX2363L.js} +1 -1
  252. package/dist/commands/{chunk-GPMSYXYO.js → chunk-OJ65BZBV.js} +283 -15
  253. package/dist/commands/{chunk-34LAULSC.js → chunk-OKZWEVR4.js} +3 -3
  254. package/dist/commands/{chunk-2CXAVVST.js → chunk-OL6IF4JC.js} +1 -1
  255. package/dist/commands/{chunk-6JVNRY5A.js → chunk-OMPRILFH.js} +1 -1
  256. package/dist/commands/{chunk-VGHSZLYQ.js → chunk-OOWGH2RG.js} +1 -1
  257. package/dist/commands/{chunk-ERGZPWKP.js → chunk-OP2RFVLS.js} +1 -1
  258. package/dist/commands/{chunk-UU6GCJGM.js → chunk-ORKVN2LO.js} +2 -2
  259. package/dist/commands/{chunk-RHII5XI6.js → chunk-OSBWXZJ4.js} +24 -24
  260. package/dist/commands/{chunk-D3SHCUBC.js → chunk-OVWPZDWP.js} +2 -2
  261. package/dist/commands/{chunk-Z4HYBFZD.js → chunk-OWYK2BEJ.js} +108 -46
  262. package/dist/commands/{chunk-P4O67FP5.js → chunk-OX3VQLV2.js} +6 -6
  263. package/dist/commands/{chunk-L6TU7FC2.js → chunk-OZJP77UM.js} +4 -4
  264. package/dist/commands/{chunk-SNO7CY2B.js → chunk-P3H3DKTE.js} +2 -2
  265. package/dist/commands/{chunk-2OIX4JLA.js → chunk-P5SOYWH2.js} +3 -3
  266. package/dist/commands/{chunk-M4PEC7YW.js → chunk-PHLOTUB7.js} +54 -37
  267. package/dist/commands/{chunk-73KBUQKI.js → chunk-PTNQCCIB.js} +2 -2
  268. package/dist/commands/{chunk-4P2LCVGO.js → chunk-PTZEFQUX.js} +8 -8
  269. package/dist/commands/{chunk-DJVMC3U2.js → chunk-Q426ZSZ4.js} +1 -1
  270. package/dist/commands/{chunk-US6X7JXC.js → chunk-Q7EEIOAD.js} +4 -4
  271. package/dist/commands/{chunk-LE7TFPMU.js → chunk-QABRNGQV.js} +2 -2
  272. package/dist/commands/{chunk-NGKB632X.js → chunk-QDFVVRQP.js} +3 -3
  273. package/dist/commands/{chunk-36M2UV6C.js → chunk-QGATHT4S.js} +38 -4
  274. package/dist/commands/{chunk-DIB2Z2OS.js → chunk-QJRVDE7T.js} +1 -1
  275. package/dist/commands/{chunk-KUJQWO6M.js → chunk-QKTTKAXM.js} +2 -2
  276. package/dist/commands/{chunk-DXZW4V7J.js → chunk-QMDKDQKW.js} +3 -3
  277. package/dist/commands/{chunk-VW5SGE7A.js → chunk-QOSC5RKD.js} +1 -1
  278. package/dist/commands/{chunk-ENLWXAHD.js → chunk-QV5FKMOU.js} +1 -1
  279. package/dist/commands/{chunk-32SNWQJP.js → chunk-R2THGPI3.js} +2 -2
  280. package/dist/commands/{chunk-RVHBWSIG.js → chunk-R54Z2Z3X.js} +2 -2
  281. package/dist/commands/{chunk-CJAA5GAF.js → chunk-RG53UFNW.js} +15 -15
  282. package/dist/commands/{chunk-HJKZDDDI.js → chunk-RHKCWJQX.js} +1 -1
  283. package/dist/commands/{chunk-RPDWFUQO.js → chunk-RKIAX4DZ.js} +36 -84
  284. package/dist/commands/{chunk-LE2T3FGJ.js → chunk-RLBFEHHC.js} +2 -4
  285. package/dist/commands/{chunk-5GBZ43UA.js → chunk-RMDLFLPE.js} +1 -1
  286. package/dist/commands/{chunk-U2UH4VM4.js → chunk-RN2YDNLF.js} +2 -2
  287. package/dist/commands/{chunk-GQHUFNXN.js → chunk-RRAIRS2T.js} +1 -1
  288. package/dist/commands/{chunk-DRCTDVI2.js → chunk-RUQY5TS3.js} +3 -3
  289. package/dist/commands/{chunk-WGULS5DA.js → chunk-RW64VHEB.js} +1 -0
  290. package/dist/commands/{chunk-4G7NKNAZ.js → chunk-RXYMJPJB.js} +3 -3
  291. package/dist/commands/{chunk-B33BTNB4.js → chunk-S4M6UWR2.js} +21 -5
  292. package/dist/commands/{chunk-4Q4FXBUQ.js → chunk-SASX3W2M.js} +2 -2
  293. package/dist/commands/{chunk-TIXJY22D.js → chunk-SJ2ZN575.js} +5 -5
  294. package/dist/commands/{chunk-NSZTSCBW.js → chunk-SP7DKYGU.js} +13 -13
  295. package/dist/commands/{chunk-T3FD3Q73.js → chunk-SRG6PKVS.js} +1 -1
  296. package/dist/commands/{chunk-QA22PBCJ.js → chunk-SSL6A3Y4.js} +3 -3
  297. package/dist/commands/{chunk-4BEIYKI2.js → chunk-SV4FZR24.js} +2 -0
  298. package/dist/commands/{chunk-HZSQI6TD.js → chunk-SVTS7ACS.js} +2 -2
  299. package/dist/commands/{chunk-F7XLEK55.js → chunk-SVV4U5AR.js} +1 -1
  300. package/dist/commands/{chunk-RRQFITJE.js → chunk-SXJM4DZ5.js} +1 -1
  301. package/dist/commands/{chunk-OIDMJASD.js → chunk-SYB3M632.js} +1 -1
  302. package/dist/commands/{chunk-UJOZ2MGX.js → chunk-SYOXIKB7.js} +6 -6
  303. package/dist/commands/{chunk-5SB37YDW.js → chunk-SZG5HDNP.js} +3 -3
  304. package/dist/commands/{chunk-R2CF6VZE.js → chunk-T4F33UKZ.js} +4 -4
  305. package/dist/commands/{chunk-ESQEEL4O.js → chunk-TAEGXID2.js} +2 -2
  306. package/dist/commands/chunk-TEPYEUYG.js +585 -0
  307. package/dist/commands/{chunk-LUMCYDGE.js → chunk-TFLHYC2F.js} +2 -2
  308. package/dist/commands/{chunk-V5OIPYA6.js → chunk-TJKM56WJ.js} +4 -4
  309. package/dist/commands/{chunk-CYQ3ZF7R.js → chunk-TLAB552K.js} +86 -13
  310. package/dist/commands/{chunk-ST32OGPY.js → chunk-TP6L4W3W.js} +5 -5
  311. package/dist/commands/{chunk-C26LKDBE.js → chunk-TR7WWYD5.js} +1 -1
  312. package/dist/commands/{chunk-PWYXY46Y.js → chunk-TYNH2R66.js} +15 -15
  313. package/dist/commands/{chunk-AZUE65NT.js → chunk-U5P6G3UV.js} +2 -2
  314. package/dist/commands/{chunk-REPANBLS.js → chunk-U7Y6RKLK.js} +1 -1
  315. package/dist/commands/{chunk-55I7OYHI.js → chunk-UIMMWH7U.js} +1 -1
  316. package/dist/commands/{chunk-72J2G2E7.js → chunk-UKBBWMLE.js} +20 -20
  317. package/dist/commands/{chunk-VTLL6CKO.js → chunk-UNMSZGSG.js} +14 -14
  318. package/dist/commands/chunk-UOVUUVDK.js +18 -0
  319. package/dist/commands/{chunk-JNWHX25C.js → chunk-URDT2O2K.js} +1 -1
  320. package/dist/commands/{chunk-FGZQSSGH.js → chunk-UREXZJDB.js} +1 -1
  321. package/dist/commands/{chunk-O4WBADCX.js → chunk-UTHUX7VU.js} +3 -3
  322. package/dist/commands/{chunk-PDDKRHHS.js → chunk-V5OUZFWK.js} +3 -3
  323. package/dist/commands/{chunk-N4O5I55P.js → chunk-VCPGFBMN.js} +8 -8
  324. package/dist/commands/{chunk-WN7NK3NY.js → chunk-VGPIQNDB.js} +1 -1
  325. package/dist/commands/{chunk-HOGFJHBT.js → chunk-VJS2MCLA.js} +1 -1
  326. package/dist/commands/{chunk-4YI4SLRJ.js → chunk-VK6D5CWA.js} +8 -8
  327. package/dist/commands/{chunk-4LWRCPS5.js → chunk-VOF3N4WO.js} +3 -3
  328. package/dist/commands/{chunk-AM44D7NF.js → chunk-VQRT32JB.js} +1 -1
  329. package/dist/commands/{chunk-AS3GWVAN.js → chunk-VQVPAVQ3.js} +1 -1
  330. package/dist/commands/{chunk-6VTJO5L2.js → chunk-VV4TQYGD.js} +3 -3
  331. package/dist/commands/{chunk-WIE7VUBE.js → chunk-W7DRUOF7.js} +5 -5
  332. package/dist/commands/{chunk-HH2KDLTP.js → chunk-WAEN2RTT.js} +2 -2
  333. package/dist/commands/{chunk-NKKH3PBE.js → chunk-WB4T3VY2.js} +18 -1
  334. package/dist/commands/{chunk-DNJC7X73.js → chunk-WCEUMOKK.js} +2 -2
  335. package/dist/commands/{chunk-BK6Q4VCA.js → chunk-WTH6NTXU.js} +4 -4
  336. package/dist/commands/{chunk-WG6GYBRJ.js → chunk-WWVYEHQT.js} +2 -1
  337. package/dist/commands/{chunk-P4CWLRT2.js → chunk-X3TNPALI.js} +1 -1
  338. package/dist/commands/{chunk-LZNYHWRO.js → chunk-XC6GG5JR.js} +3 -3
  339. package/dist/commands/{chunk-RI7EQYKL.js → chunk-XFWI6WHH.js} +2 -2
  340. package/dist/commands/{chunk-BY3POLIQ.js → chunk-XHGWMD3L.js} +7 -7
  341. package/dist/commands/{chunk-BPSJSHYD.js → chunk-XI2ABCRX.js} +2 -2
  342. package/dist/commands/{chunk-TS4ZK46L.js → chunk-XKSUBUIH.js} +5 -5
  343. package/dist/commands/{chunk-K7GL3BGI.js → chunk-XPBF5DG3.js} +4 -4
  344. package/dist/commands/{chunk-6SKMZGER.js → chunk-XUMYPESL.js} +20 -8
  345. package/dist/commands/{chunk-QS5USD4T.js → chunk-XXC32PVL.js} +5 -4
  346. package/dist/commands/{chunk-ORSI7Y55.js → chunk-XXN2EZBY.js} +1 -1
  347. package/dist/commands/{chunk-IZVM2TTH.js → chunk-XZQWEVR3.js} +2 -2
  348. package/dist/commands/{chunk-E3CXOVPQ.js → chunk-Y27PTXXI.js} +1 -1
  349. package/dist/commands/{chunk-337QQM4C.js → chunk-Y4EBUI6M.js} +106 -5
  350. package/dist/commands/{chunk-WRX3MINT.js → chunk-YAU3LYNF.js} +1 -1
  351. package/dist/commands/{chunk-JB7R3A4A.js → chunk-YDURQICF.js} +4 -4
  352. package/dist/commands/{chunk-RX5JSPPH.js → chunk-YGFOGA7C.js} +11 -11
  353. package/dist/commands/{chunk-S6SXMBF2.js → chunk-YHJ2AJMA.js} +2 -2
  354. package/dist/commands/{chunk-MVPUQLN5.js → chunk-YM77CF4D.js} +4 -4
  355. package/dist/commands/{chunk-ZYIMQHCB.js → chunk-YNPRJCEO.js} +6 -6
  356. package/dist/commands/{chunk-3UKJFWKS.js → chunk-YTBQAD5W.js} +3 -3
  357. package/dist/commands/{chunk-KIVOZY2J.js → chunk-ZBZ5DDCH.js} +66 -64
  358. package/dist/commands/{chunk-TAPDXK34.js → chunk-ZLRUHSOP.js} +1 -1
  359. package/dist/commands/{chunk-XYAK53TK.js → chunk-ZNR75OXP.js} +2 -1
  360. package/dist/commands/{chunk-CADFBQJJ.js → chunk-ZSOR4ISJ.js} +4 -4
  361. package/dist/commands/{chunk-6NRTLH6I.js → chunk-ZYFHYQA7.js} +1 -1
  362. package/dist/commands/{chunk-Q7TV3OV6.js → chunk-ZZFFSQF4.js} +4 -4
  363. package/dist/commands/{chunk-PDAY76AN.js → chunk-ZZULXNC2.js} +1 -1
  364. package/dist/commands/{chunk-5Y7QQYTU.js → chunk-ZZXO6TFH.js} +1 -1
  365. package/dist/commands/code-symbol-cli.js +4 -4
  366. package/dist/commands/codex-hook-adapter.js +99 -100
  367. package/dist/commands/command-derive.js +10 -10
  368. package/dist/commands/cost-audit-main.js +94 -92
  369. package/dist/commands/cspell-cached.js +24 -23
  370. package/dist/commands/defect-origin-main.js +19 -18
  371. package/dist/commands/defect-report-main.js +15 -14
  372. package/dist/commands/disposition-cli.js +67 -64
  373. package/dist/commands/doctor.js +3 -3
  374. package/dist/commands/document-read-cli.js +89 -9
  375. package/dist/commands/document-section-main.js +89 -9
  376. package/dist/commands/edit-files-cli.js +1 -1
  377. package/dist/commands/effect-audit-cli.js +20 -19
  378. package/dist/commands/epic-audit-main.js +55 -53
  379. package/dist/commands/epic-bundle-main.js +87 -85
  380. package/dist/commands/epic-check.js +16 -15
  381. package/dist/commands/epic-main.js +93 -91
  382. package/dist/commands/epic-next-main.js +51 -49
  383. package/dist/commands/format-edited-cli.js +30 -32
  384. package/dist/commands/format.js +11 -10
  385. package/dist/commands/fresh-machine-cli.js +6 -6
  386. package/dist/commands/git-followup-workflow.js +137 -122
  387. package/dist/commands/git-workflow.js +28 -27
  388. package/dist/commands/github-release-cli.js +26 -3
  389. package/dist/commands/hook-ledger-cli.js +74 -126
  390. package/dist/commands/init-main.js +20 -19
  391. package/dist/commands/inputs.json +1909 -1878
  392. package/dist/commands/issue-ack-cli.js +5 -5
  393. package/dist/commands/issue-already-done-cli.js +63 -58
  394. package/dist/commands/issue-body-cli.js +44 -42
  395. package/dist/commands/issue-cite-main.js +11 -10
  396. package/dist/commands/issue-comment-main.js +15 -11
  397. package/dist/commands/issue-consolidate-cli.js +31 -30
  398. package/dist/commands/issue-file-main.js +114 -110
  399. package/dist/commands/issue-fold-existing-cli.js +88 -86
  400. package/dist/commands/issue-fold-main.js +26 -25
  401. package/dist/commands/issue-lint-main.js +38 -37
  402. package/dist/commands/issue-measured-cli.js +66 -61
  403. package/dist/commands/issue-plan-cli.js +103 -101
  404. package/dist/commands/issue-premise-unmet-cli.js +66 -61
  405. package/dist/commands/issue-priority-cli.js +13 -12
  406. package/dist/commands/issue-read-main.js +18 -17
  407. package/dist/commands/issue-release-class-cli.js +12 -11
  408. package/dist/commands/issue-release-main.js +13 -12
  409. package/dist/commands/issue-scout-main.js +89 -87
  410. package/dist/commands/issue-spill-main.js +114 -110
  411. package/dist/commands/issue-state-main.js +16 -15
  412. package/dist/commands/issue-tick-cli.js +14 -13
  413. package/dist/commands/josh-completion.js +10 -10
  414. package/dist/commands/lane-adopt-cli.js +19 -19
  415. package/dist/commands/lane-breakdown-cli.js +154 -126
  416. package/dist/commands/lane-cli.js +131 -125
  417. package/dist/commands/lane-launch-main.js +17 -17
  418. package/dist/commands/lane-limit-cli.js +81 -79
  419. package/dist/commands/lane-measure-cli.js +246 -130
  420. package/dist/commands/lane-pause-cli.js +15 -15
  421. package/dist/commands/lane-plan-cli.js +108 -101
  422. package/dist/commands/lane-resolve-cli.js +20 -19
  423. package/dist/commands/lane-restart-cli.js +124 -118
  424. package/dist/commands/lane-why-cli.js +85 -82
  425. package/dist/commands/lane-withdraw-cli.js +49 -48
  426. package/dist/commands/latest-corepack.js +3 -3
  427. package/dist/commands/latest-if-required-cli.js +9 -9
  428. package/dist/commands/latest-scope-main.js +5 -5
  429. package/dist/commands/latest-update.js +3 -3
  430. package/dist/commands/lines-command.js +3 -3
  431. package/dist/commands/lint-parallel-main.js +32 -31
  432. package/dist/commands/lint-related.js +79 -60
  433. package/dist/commands/lint-rule.js +32 -31
  434. package/dist/commands/lockfile-policy.js +11 -11
  435. package/dist/commands/main-merge-main.js +5 -5
  436. package/dist/commands/main-sync-main.js +5 -5
  437. package/dist/commands/managed-config-scope-cli.js +3 -3
  438. package/dist/commands/measure-rerun-cli.js +10 -10
  439. package/dist/commands/metrics-command.js +91 -58
  440. package/dist/commands/observation-record-cli.js +3 -3
  441. package/dist/commands/observations-flush-cli.js +27 -25
  442. package/dist/commands/oracle-list-cli.js +2 -2
  443. package/dist/commands/overrides-check.js +4 -4
  444. package/dist/commands/package-scout-cli.js +67 -26
  445. package/dist/commands/plan-consumers-main.js +4 -4
  446. package/dist/commands/plan-scaffold-cli.js +132 -91
  447. package/dist/commands/pr-classification-main.js +3 -3
  448. package/dist/commands/pre-commit-lint.js +11 -12
  449. package/dist/commands/pre-commit-type-check.js +25 -24
  450. package/dist/commands/pre-push-unit.js +33 -33
  451. package/dist/commands/pretool-guard-cli.js +90 -91
  452. package/dist/commands/project-profile-cli.js +5 -4
  453. package/dist/commands/propagate.js +15 -15
  454. package/dist/commands/prose-stale-cli.js +20 -19
  455. package/dist/commands/publishable-range-check.js +4 -4
  456. package/dist/commands/read-files-cli.js +2 -2
  457. package/dist/commands/read-set-cli.js +61 -24
  458. package/dist/commands/refactor-scan-cli.js +6 -6
  459. package/dist/commands/release-cli.js +64 -36
  460. package/dist/commands/release-scope-main.js +19 -18
  461. package/dist/commands/rename-cli.js +27 -29
  462. package/dist/commands/reserved-run.js +3 -3
  463. package/dist/commands/retrospective-cli.js +104 -102
  464. package/dist/commands/review-attest-cli.js +6 -6
  465. package/dist/commands/review-brief-main.js +127 -109
  466. package/dist/commands/review-findings-cli.js +2 -2
  467. package/dist/commands/review-pair-cli.js +110 -84
  468. package/dist/commands/review-record-main.js +108 -83
  469. package/dist/commands/review-round2-cli.js +46 -45
  470. package/dist/commands/review-stops-cli.js +16 -16
  471. package/dist/commands/review-submit-cli.js +127 -109
  472. package/dist/commands/rule-list.js +58 -60
  473. package/dist/commands/rule-value-cli.js +226 -74
  474. package/dist/commands/run-add-cli.js +28 -27
  475. package/dist/commands/run-board-main.js +136 -132
  476. package/dist/commands/run-carry-cli.js +127 -124
  477. package/dist/commands/run-chain-cli.js +116 -93
  478. package/dist/commands/run-cut-cli.js +124 -119
  479. package/dist/commands/run-ending-cli.js +19 -22
  480. package/dist/commands/run-entry-cli.js +183 -180
  481. package/dist/commands/run-event-cli.js +5 -5
  482. package/dist/commands/run-handoff-cli.js +52 -28
  483. package/dist/commands/run-handoff-lanes-cli.js +15 -15
  484. package/dist/commands/run-hold-main.js +64 -62
  485. package/dist/commands/run-liveness-cli.js +11 -11
  486. package/dist/commands/run-merge-main.js +119 -116
  487. package/dist/commands/run-next-cli.js +87 -86
  488. package/dist/commands/run-park-cli.js +111 -92
  489. package/dist/commands/run-pause-cli.js +147 -133
  490. package/dist/commands/run-pickup-cli.js +13 -13
  491. package/dist/commands/run-prep-main.js +83 -82
  492. package/dist/commands/run-prime-cli.js +107 -87
  493. package/dist/commands/run-progress-main.js +123 -107
  494. package/dist/commands/run-report-cli.js +25 -24
  495. package/dist/commands/run-review-cli.js +168 -149
  496. package/dist/commands/run-ship-cli.js +208 -203
  497. package/dist/commands/run-ship-evidence-cli.js +38 -37
  498. package/dist/commands/run-ship-wait-main.js +40 -37
  499. package/dist/commands/run-split-cli.js +127 -125
  500. package/dist/commands/run-stale-main.js +36 -35
  501. package/dist/commands/run-status-cli.js +16 -15
  502. package/dist/commands/run-step-cli.js +173 -164
  503. package/dist/commands/run-tail-cli.js +1 -1
  504. package/dist/commands/run-tidy-main.js +30 -29
  505. package/dist/commands/run-wake-main.js +137 -119
  506. package/dist/commands/run-watcher-guard-cli.js +30 -29
  507. package/dist/commands/secretlint-scan.js +2 -2
  508. package/dist/commands/selfcheck-cli.js +27 -26
  509. package/dist/commands/session-language-main.js +48 -28
  510. package/dist/commands/sonar-hotspots-cli.js +3 -3
  511. package/dist/commands/split-assess-cli.js +24 -23
  512. package/dist/commands/split-child-recover-cli.js +13 -12
  513. package/dist/commands/start.js +37 -35
  514. package/dist/commands/stash-pop-main.js +3 -3
  515. package/dist/commands/stash-push-main.js +3 -3
  516. package/dist/commands/stop-guard.js +144 -143
  517. package/dist/commands/sync-main.js +11 -10
  518. package/dist/commands/telegram-test-main.js +5 -5
  519. package/dist/commands/test-declared.js +9 -8
  520. package/dist/commands/test-e2e-guard.js +23 -22
  521. package/dist/commands/test-pinned-main.js +26 -25
  522. package/dist/commands/test-reach-cli.js +15 -14
  523. package/dist/commands/test-red-main.js +5 -5
  524. package/dist/commands/{test-related-ZT2AO62I.js → test-related-ZCNC46MS.js} +31 -31
  525. package/dist/commands/test-related-main.js +51 -50
  526. package/dist/commands/test-unit-guard-main.js +9 -8
  527. package/dist/commands/time-cli.js +24 -27
  528. package/dist/commands/time-density-cli.js +8 -9
  529. package/dist/commands/tree-status-cli.js +4 -4
  530. package/dist/commands/type-check-command.js +8 -7
  531. package/dist/commands/ui-shot-cli.js +4 -4
  532. package/dist/commands/uninstall.js +20 -19
  533. package/dist/commands/unused-members-cli.js +9 -8
  534. package/dist/commands/upstream-interrupt-main.js +115 -111
  535. package/dist/commands/verification-gate.js +46 -46
  536. package/dist/commands/version-check.js +5 -5
  537. package/dist/hooks/{chunk-LWD43Z3C.js → chunk-5CUXGQT6.js} +1667 -107
  538. package/dist/hooks/{chunk-4YXV2REH.js → chunk-5R5YFQR5.js} +8 -8
  539. package/dist/hooks/{chunk-LKQBEKBI.js → chunk-6RLY27FT.js} +8 -8
  540. package/dist/hooks/{chunk-CICKRHTB.js → chunk-AO4TOV4V.js} +119 -2679
  541. package/dist/hooks/{chunk-NUPVO7RI.js → chunk-G5WSPYJ6.js} +4296 -1687
  542. package/dist/hooks/{chunk-UU4PTPEZ.js → chunk-HHIVWGHX.js} +250 -125
  543. package/dist/hooks/{chunk-P7BPAU26.js → chunk-IURJANNZ.js} +2 -2
  544. package/dist/hooks/{chunk-6RR6JZSB.js → chunk-OV22V63P.js} +357 -1744
  545. package/dist/hooks/{chunk-RQXECHAS.js → chunk-SXABK6UV.js} +57 -45
  546. package/dist/hooks/codex-hook-adapter.js +11 -11
  547. package/dist/hooks/daemon.js +1053 -690
  548. package/dist/hooks/format-edited.js +5 -5
  549. package/dist/hooks/inputs.json +542 -527
  550. package/dist/hooks/pretool-guard.js +7 -7
  551. package/dist/hooks/session-lang.js +293 -16
  552. package/dist/hooks/stop-guard.js +225 -48
  553. package/dist/inputs.json +65 -65
  554. package/dist/josh.js +73 -19
  555. package/dist/self-sync-guard/index.js +18 -1
  556. package/dist/version/index.js +18 -1
  557. package/package.json +3 -3
  558. package/pnpm-workspace.yaml +5 -13
  559. package/prompts/collaboration-workflow/issue-template.en.md +56 -52
  560. package/scripts/agent/agent-argv.ts +20 -6
  561. package/scripts/agent/agent-phase-profile.ts +89 -0
  562. package/scripts/agent/agent-role-profile.ts +3 -71
  563. package/scripts/agent/agent-ship-cap.ts +44 -0
  564. package/scripts/agent/agent-worker-profile.ts +154 -0
  565. package/scripts/agent/claude-agent-argv.ts +1 -1
  566. package/scripts/agent/lane-instructions.ts +29 -3
  567. package/scripts/auto-ok/auto-ok-judge-cli.ts +3 -0
  568. package/scripts/auto-ok/auto-ok-judge-write.ts +2 -1
  569. package/scripts/auto-ok/auto-ok-judge.ts +4 -2
  570. package/scripts/backlog/backlog-drive-escalate.ts +115 -0
  571. package/scripts/backlog/backlog-drive-stalled-retry.ts +48 -10
  572. package/scripts/document/document-scan.ts +35 -1
  573. package/scripts/gh/git-pr-checks-failed.ts +24 -0
  574. package/scripts/hooks/implementation-shell-deny-expansion.ts +20 -0
  575. package/scripts/hooks/implementation-shell-deny-git.ts +128 -0
  576. package/scripts/hooks/implementation-shell-deny.ts +14 -138
  577. package/scripts/hooks/implementation-shell.ts +28 -5
  578. package/scripts/hooks/step-zero-notice.ts +9 -6
  579. package/scripts/hooks/stop-actions.ts +4 -2
  580. package/scripts/init/init-logic-workspace.ts +1 -1
  581. package/scripts/issue/issue-auto-ok.ts +43 -4
  582. package/scripts/issue/issue-body-keys.ts +4 -0
  583. package/scripts/issue/issue-comment-cli.ts +15 -2
  584. package/scripts/issue/issue-evidence-exit.ts +6 -2
  585. package/scripts/issue/issue-file-cli.ts +5 -1
  586. package/scripts/issue/issue-file-pass.ts +14 -7
  587. package/scripts/issue/issue-file-worker.ts +95 -0
  588. package/scripts/issue/issue-file.ts +1 -1
  589. package/scripts/issue/issue-outcome.ts +107 -0
  590. package/scripts/issue/issue-read.ts +12 -7
  591. package/scripts/issue/issue-watch-diff.ts +2 -1
  592. package/scripts/josh/josh-commands-ai.ts +2 -2
  593. package/scripts/josh/josh-commands-development.ts +21 -5
  594. package/scripts/josh/josh-commands-issue-write.ts +3 -2
  595. package/scripts/josh/josh-commands-lint.ts +1 -1
  596. package/scripts/josh/josh-commands-project.ts +7 -2
  597. package/scripts/josh/josh-commands-run.ts +10 -2
  598. package/scripts/josh/josh-commands-workflow.ts +5 -0
  599. package/scripts/josh/session-language-cli.ts +1 -1
  600. package/scripts/lane/lane-breakdown-cli.ts +14 -4
  601. package/scripts/lane/lane-breakdown-text.ts +7 -0
  602. package/scripts/lane/lane-breakdown.ts +21 -1
  603. package/scripts/lane/lane-dispatch-prepare.ts +83 -0
  604. package/scripts/lane/lane-dispatch.ts +3 -53
  605. package/scripts/lane/lane-elapsed-time.ts +118 -0
  606. package/scripts/lane/lane-ledger-schema-ship.ts +4 -1
  607. package/scripts/lane/lane-net-time.ts +35 -7
  608. package/scripts/lane/lane-overrun.ts +1 -1
  609. package/scripts/lane/lane-plan-cli.ts +7 -3
  610. package/scripts/lane/lane-plan-estimate.ts +57 -0
  611. package/scripts/lane/lane-plan-size.ts +11 -20
  612. package/scripts/lane/lane-plan.ts +1 -0
  613. package/scripts/lane/lane-relaunch.ts +9 -4
  614. package/scripts/lane/lane-stage-budget.ts +6 -1
  615. package/scripts/lane/lane-stage-events.ts +103 -0
  616. package/scripts/lane/lane-stats-tables.ts +3 -0
  617. package/scripts/lane/lane-stop-check-stats.ts +117 -0
  618. package/scripts/lane/lane-stop-stats.ts +30 -6
  619. package/scripts/lane/lane-why-causes.ts +3 -11
  620. package/scripts/lane/openai-lane-supervisor-owner.ts +12 -0
  621. package/scripts/lane/openai-lane-supervisor.ts +36 -1
  622. package/scripts/lib/home-tilde.ts +24 -0
  623. package/scripts/lib/package-manifest.ts +27 -1
  624. package/scripts/observations/observation-ledger-archive.ts +180 -0
  625. package/scripts/observations/observation-ledger-home.ts +1 -0
  626. package/scripts/observations/observation-ledger.ts +5 -0
  627. package/scripts/observations/observations-flush-transaction.ts +358 -0
  628. package/scripts/observations/observations-flush.ts +72 -172
  629. package/scripts/plan/plan-scaffold-cli.ts +17 -6
  630. package/scripts/plan/plan-scaffold.ts +11 -0
  631. package/scripts/release/github-release-notes.ts +24 -0
  632. package/scripts/release/github-release-runs.ts +32 -6
  633. package/scripts/release/github-release.ts +10 -2
  634. package/scripts/release/release-progress.ts +22 -10
  635. package/scripts/release/release-publish-run.ts +39 -6
  636. package/scripts/repo/repository-labels.ts +23 -11
  637. package/scripts/review/review-comment-round.ts +10 -5
  638. package/scripts/rules/broad-investigation-shell.ts +2 -2
  639. package/scripts/rules/codex-prompt.ts +63 -0
  640. package/scripts/rules/direct-issue-comment.ts +62 -2
  641. package/scripts/rules/direct-issue-read.ts +55 -2
  642. package/scripts/rules/guard-remedy.ts +10 -4
  643. package/scripts/rules/issue-citation.ts +20 -9
  644. package/scripts/rules/last-prompt.ts +8 -4
  645. package/scripts/rules/rule-value-cli.ts +85 -4
  646. package/scripts/rules/rule-value-trend.ts +108 -0
  647. package/scripts/rules/shell-redirects.ts +19 -7
  648. package/scripts/rules/shell-segments.ts +145 -20
  649. package/scripts/rules/shell-tokens.ts +66 -0
  650. package/scripts/rules/standalone-gh-call.ts +63 -0
  651. package/scripts/rules/unasked-filing.ts +12 -4
  652. package/scripts/run/board/run-board-closed.ts +10 -1
  653. package/scripts/run/board/run-board-decision-read.ts +52 -12
  654. package/scripts/run/board/run-board-decision.ts +5 -0
  655. package/scripts/run/board/run-board-ending-reason.ts +21 -7
  656. package/scripts/run/board/run-board-github.ts +8 -1
  657. package/scripts/run/board/run-board-header.ts +4 -5
  658. package/scripts/run/board/run-board-layout.ts +5 -3
  659. package/scripts/run/board/run-board-link.ts +2 -0
  660. package/scripts/run/board/run-board-operation.ts +6 -2
  661. package/scripts/run/board/run-board-pause-fixture.json +12 -0
  662. package/scripts/run/board/run-board-pause.ts +87 -0
  663. package/scripts/run/board/run-board-plan-shared.ts +2 -0
  664. package/scripts/run/board/run-board-read.ts +7 -1
  665. package/scripts/run/board/run-board-render-condition.ts +10 -1
  666. package/scripts/run/board/run-board-render-title.ts +7 -0
  667. package/scripts/run/board/run-board-roots.ts +25 -2
  668. package/scripts/run/board/run-board-settle.ts +16 -2
  669. package/scripts/run/board/run-board-setup.ts +13 -7
  670. package/scripts/run/board/run-board-snapshot.ts +4 -0
  671. package/scripts/run/board/run-board-status.ts +13 -1
  672. package/scripts/run/board/run-board-tick.ts +7 -1
  673. package/scripts/run/cut/run-cut-cli.ts +2 -1
  674. package/scripts/run/park/run-park-cli.ts +13 -1
  675. package/scripts/run/park/run-park-escalate.ts +102 -0
  676. package/scripts/run/park/run-stalled.ts +29 -7
  677. package/scripts/run/review/run-review-early-push.ts +6 -6
  678. package/scripts/run/ship/run-ship-stop-cause.ts +12 -1
  679. package/scripts/split/split-assess.ts +14 -5
  680. package/scripts/test/test-related-touched.ts +21 -3
  681. package/scripts/test/test-related.ts +1 -1
  682. package/dist/commands/chunk-6WEVLIZE.js +0 -29
  683. package/dist/commands/chunk-E2ZCUKHT.js +0 -274
  684. package/dist/commands/chunk-NMLCPYBN.js +0 -134
  685. package/dist/commands/chunk-QEIO2ZNQ.js +0 -324
  686. package/dist/commands/chunk-QWX7EBC6.js +0 -112
  687. package/dist/commands/chunk-RQRLW4XK.js +0 -20
  688. package/dist/commands/chunk-UCQJDYE3.js +0 -21
  689. package/dist/commands/chunk-W4YH2DF3.js +0 -58
  690. package/dist/commands/{chunk-LRA3PXHS.js → chunk-ENKFCOVY.js} +3 -3
  691. package/dist/commands/{chunk-RUWV4INF.js → chunk-HQGNXR6I.js} +3 -3
@@ -1,7 +1,7 @@
1
1
  import { process_identity } from '#scripts/josh/process-identity'
2
2
  import { lane_process_table, type TableRead } from '#scripts/lane/lane-process-table'
3
3
  import type { CarryRead } from '#scripts/run/carry/run-carry'
4
- import { run_wake } from '#scripts/run/wake/run-wake'
4
+ import { run_wake, type RunWake } from '#scripts/run/wake/run-wake'
5
5
  import type { ProcessRoots } from './run-board-process-groups'
6
6
 
7
7
  // The run's own processes the 💻 section names: the supervisor from its wake stamp and the parent
@@ -38,6 +38,29 @@ function roots_of(
38
38
  return { supervisor: supervisor_of(repository, is_same), parent: parent_of(read, is_same) }
39
39
  }
40
40
 
41
+ // A handed-back budget or the supervisor's own driver is no judgment session. Codex's pid-less
42
+ // carry uses the launch pid already recorded by the wake supervisor instead.
43
+ function is_session_owner(read: CarryRead): boolean {
44
+ return read.kind === 'carried' && read.carry.is_handed_off !== true
45
+ }
46
+
47
+ function live_session_pid(
48
+ pid: number | undefined,
49
+ start: string | undefined,
50
+ wake: RunWake | undefined,
51
+ is_same: SameProcess,
52
+ ): boolean {
53
+ return pid !== undefined && pid !== wake?.pid && is_same(pid, start) !== false
54
+ }
55
+
56
+ function session_is_active(repository: string, read: CarryRead, is_same: SameProcess): boolean {
57
+ if (read.kind !== 'carried' || !is_session_owner(read)) return false
58
+ const wake = run_wake.read_wake(run_wake.wake_path(repository))
59
+ const pid = read.carry.owner_pid ?? wake?.woke_pid
60
+
61
+ return live_session_pid(pid, read.carry.owner_start, wake, is_same)
62
+ }
63
+
41
64
  // `is_same_process` with each start time answered from the redraw's own `ps` snapshot, so the board's
42
65
  // read runs no `ps` of its own per pid (joshuafolkken/kit#4263). Without a snapshot no start is known,
43
66
  // and a recorded start reads as "cannot tell".
@@ -48,7 +71,7 @@ async function same_in(table: TableRead | undefined): Promise<SameProcess> {
48
71
  return (pid, start) => process_identity.is_same_process(pid, start, read)
49
72
  }
50
73
 
51
- const run_board_roots = { roots_of, same_in }
74
+ const run_board_roots = { roots_of, same_in, session_is_active }
52
75
 
53
76
  export { run_board_roots }
54
77
  export type { SameProcess }
@@ -1,3 +1,4 @@
1
+ import type { IssueOutcome } from '#scripts/issue/issue-outcome'
1
2
  import type { ItemState, ItemStatus } from './run-board-status'
2
3
 
3
4
  // What a child keeps of its run when it settles into a state other than running — shared by the
@@ -25,9 +26,22 @@ function kept_of(
25
26
  // The status a child settles into: its start and the track it had reached, so a settled row still
26
27
  // draws how it got there.
27
28
  function settled_as(previous: ItemStatus | undefined, state: ItemState): ItemStatus {
28
- return { state, started_ms: previous?.started_ms, ...kept_of(previous) }
29
+ return {
30
+ state,
31
+ started_ms: previous?.started_ms,
32
+ ...kept_of(previous),
33
+ ...(previous?.outcome !== undefined && { outcome: previous.outcome }),
34
+ }
35
+ }
36
+
37
+ const OUTCOME_STATES: ReadonlySet<ItemState> = new Set(['done', 'already_done', 'withdrawn'])
38
+
39
+ function with_outcome(status: ItemStatus, outcome: IssueOutcome | undefined): ItemStatus {
40
+ return outcome === undefined || !OUTCOME_STATES.has(status.state)
41
+ ? status
42
+ : { ...status, outcome }
29
43
  }
30
44
 
31
- const run_board_settle = { relaunch_of, settled_as }
45
+ const run_board_settle = { relaunch_of, settled_as, with_outcome }
32
46
 
33
47
  export { run_board_settle }
@@ -21,19 +21,25 @@ interface SetupRead {
21
21
 
22
22
  const NO_SETUP: SetupRead = { setup: undefined, setup_ms: undefined }
23
23
 
24
+ // Only these stages depend on the judgment session owning the carry.
25
+ const SESSION_STAGES: ReadonlySet<string> = new Set([STAGE.JUDGING, STAGE.SESSION])
26
+
24
27
  // The stages of a hand-back to a session, and of the retrospective unit the driver waits on at a drain
25
28
  // (joshuafolkken/kit#6745). Only the run's next stage ends one, whatever the session or the unit writes
26
29
  // to the stream meanwhile.
27
- const SESSION_STAGES: ReadonlySet<string> = new Set([
28
- STAGE.JUDGING,
29
- STAGE.SESSION,
30
- STAGE.RETROSPECTIVE,
31
- ])
30
+ const RETAINED_STAGES: ReadonlySet<string> = new Set([...SESSION_STAGES, STAGE.RETROSPECTIVE])
32
31
 
33
32
  function is_setup(event: RunEvent): boolean {
34
33
  return event.kind === KIND.SETUP
35
34
  }
36
35
 
36
+ // Session stages describe the last hand-off even after its owner has returned the budget.
37
+ function is_working(setup: string | undefined, is_session_active: boolean | undefined): boolean {
38
+ if (setup === undefined) return false
39
+
40
+ return !SESSION_STAGES.has(setup) || is_session_active !== false
41
+ }
42
+
37
43
  // A launch that returned without a child (`run_event_setup.no_child`): it ends its own lane's stage,
38
44
  // and prepares nothing a person waits on.
39
45
  function is_refusal(event: RunEvent): boolean {
@@ -65,7 +71,7 @@ function is_opening(events: ReadonlyArray<RunEvent>, stage: RunEvent): boolean {
65
71
  // Whether the run is at `stage` now: at any stage while it is starting; after that only at one it is
66
72
  // itself working through.
67
73
  function is_standing(events: ReadonlyArray<RunEvent>, stage: RunEvent): boolean {
68
- if (!has_started(events) || SESSION_STAGES.has(stage.text)) return true
74
+ if (!has_started(events) || RETAINED_STAGES.has(stage.text)) return true
69
75
 
70
76
  return is_opening(events, stage)
71
77
  }
@@ -119,7 +125,7 @@ function lane_stage(events: ReadonlyArray<RunEvent>, issue: number): LaneStage |
119
125
  return { text: step.text, at_ms: Date.parse(step.at) }
120
126
  }
121
127
 
122
- const run_board_setup = { is_refusal, lane_stage, read }
128
+ const run_board_setup = { is_refusal, is_working, lane_stage, read }
123
129
 
124
130
  export { run_board_setup }
125
131
  export type { LaneStage, SetupRead }
@@ -1,4 +1,5 @@
1
1
  import { PROJECT_ROOT } from '#scripts/init/init-paths'
2
+ import { issue_outcome } from '#scripts/issue/issue-outcome'
2
3
  import { stamp_file } from '#scripts/josh/stamp-file'
3
4
  import { z } from 'zod'
4
5
  import type { ClosedIssue } from './run-board-closed'
@@ -38,6 +39,9 @@ const label_names_schema = z.array(z.string())
38
39
  // A close time JSON dropped is read back as unknown.
39
40
  const closed_issue_schema = z
40
41
  .object({
42
+ outcome: z
43
+ .object({ summary: issue_outcome.summary_schema, url: issue_outcome.url_schema })
44
+ .optional(),
41
45
  title: z.string(),
42
46
  labels: label_names_schema,
43
47
  closed_ms: z.number().optional(),
@@ -1,4 +1,5 @@
1
1
  import type { AgentResult } from '#scripts/agent/agent-event'
2
+ import type { IssueOutcome } from '#scripts/issue/issue-outcome'
2
3
  import type { Span } from '#scripts/lane/lane-spans'
3
4
  import type { PrChecks } from '#scripts/run/event/run-event-checks'
4
5
  import { run_event_retry } from '#scripts/run/event/run-event-retry'
@@ -40,6 +41,7 @@ type ItemState =
40
41
  | 'unknown'
41
42
 
42
43
  interface ItemStatus {
44
+ outcome?: IssueOutcome | undefined
43
45
  state: ItemState
44
46
  // When the child first launched in this run — a re-dispatch or a restart does not move it.
45
47
  started_ms?: number | undefined
@@ -80,6 +82,8 @@ interface LatestEvent {
80
82
  // The run as a whole, read off the same stream. The setup half is `run-board-setup.ts`'s, absent
81
83
  // where a stream carries no stage.
82
84
  interface RunActivity extends Partial<SetupRead> {
85
+ // Runtime evidence for the stage, independent of its retained description.
86
+ is_setup_working?: boolean | undefined
83
87
  last_event_ms: number | undefined
84
88
  // The newest thing the run did — its newest position, or its newest event where it has none yet —
85
89
  // in the event's own words, and when.
@@ -395,7 +399,15 @@ function settle_closed(
395
399
  statuses: ReadonlyMap<number, ItemStatus>,
396
400
  read: OpenRead,
397
401
  ): ReadonlyMap<number, ItemStatus> {
398
- return new Map([...statuses].map(([issue, status]) => [issue, settled(issue, status, read)]))
402
+ return new Map(
403
+ [...statuses].map(([issue, status]) => {
404
+ const closed = read.closed.get(issue)
405
+ const outcome =
406
+ closed === undefined || is_closed_before_launch(status, closed) ? undefined : closed.outcome
407
+
408
+ return [issue, run_board_settle.with_outcome(settled(issue, status, read), outcome)]
409
+ }),
410
+ )
399
411
  }
400
412
 
401
413
  function is_run_stop(event: RunEvent | undefined): boolean {
@@ -14,6 +14,7 @@ import { run_board_reason, type ReasonRead } from './run-board-reason'
14
14
  import { run_board_released } from './run-board-released'
15
15
  import { run_board_render } from './run-board-render'
16
16
  import { run_board_seat, type SeatRead } from './run-board-seat'
17
+ import { run_board_setup } from './run-board-setup'
17
18
  import type { Known } from './run-board-snapshot'
18
19
  import { run_board_spin, type Spun } from './run-board-spin'
19
20
  import { run_board_state, type BoardPorts, type BoardState, type Pace } from './run-board-state'
@@ -82,10 +83,15 @@ function titles_of(state: BoardState): Titles {
82
83
 
83
84
  // A run `run:carry --end` closed and one nobody drives any more are both drawn as stopped.
84
85
  function activity_here(local: LocalRead): RunActivity {
85
- return run_board_status.activity_of(
86
+ const activity = run_board_status.activity_of(
86
87
  local.events,
87
88
  local.ended_ms !== undefined || local.is_stranded,
88
89
  )
90
+
91
+ return {
92
+ ...activity,
93
+ is_setup_working: run_board_setup.is_working(activity.setup, local.is_session_active),
94
+ }
89
95
  }
90
96
 
91
97
  // The already-read supervisor or parent drives retries until the run stops or becomes stranded.
@@ -129,7 +129,8 @@ function report_relaunch_failure(target: string, note: string): number {
129
129
  // A pre-gate resume drives the gate, commit, PR and merge — the mechanical
130
130
  // ship/bookkeeping region, lowered — while an implementation resume keeps the role default. The
131
131
  // phase-aware profile is `agent_argv.resume_argv`'s; a person's `JOSH_WORKER_EFFORT` still wins over it,
132
- // and a pre-gate resume moves to the ship model — Sonnet, or `JOSH_WORKER_SHIP_MODEL` when that is set.
132
+ // and a pre-gate resume moves to the ship model — Sonnet, or `JOSH_WORKER_SHIP_MODEL` when that is set,
133
+ // never above the Issue's `josh.worker` profile (`agent-ship-cap.ts`).
133
134
  async function relaunch(target: string, lane: LaneInfo, phase: string): Promise<number> {
134
135
  const notes: Array<string> = []
135
136
  const result = await lane_relaunch.resume(lane, phase, (note) => {
@@ -10,12 +10,15 @@ import { run_step_section } from '#scripts/run/run-step-section'
10
10
  import { run_park } from './run-park'
11
11
  import { run_park_answered } from './run-park-answered'
12
12
  import { run_park_body } from './run-park-body'
13
+ import { run_park_escalate } from './run-park-escalate'
13
14
  import { run_park_release } from './run-park-release'
14
15
  import { run_park_write } from './run-park-write'
15
16
 
16
17
  // `josh run:park <N> --body-file <path>` — park a lane child for a person's decision in one call: the
17
18
  // question as a comment, `needs-decision`, and the local record the `lane-park` guard reads.
18
19
  // `josh run:park <N> --clear` takes the park back off once the decision is recorded.
20
+ // `josh run:park <N> --escalate "<reason>"` parks a worker that needs a stronger profile
21
+ // (`run-park-escalate.ts`).
19
22
  //
20
23
  // **The park was two hand-typed commands, and a child could stop after either one**
21
24
  // (joshuafolkken/kit#4132). One call writes both, and only a park that has both is recorded, so the
@@ -35,7 +38,7 @@ const SUCCESS_EXIT_CODE = 0
35
38
  const FAILURE_EXIT_CODE = 1
36
39
  const ARGV_OFFSET = 2
37
40
  const CLEAR_FLAG = '--clear'
38
- const USAGE = `Usage: josh run:park <issue-number> --body-file <path> | <issue-number> ${CLEAR_FLAG}\n\n${run_park_body.FORMAT}`
41
+ const USAGE = `Usage: josh run:park <issue-number> --body-file <path> | <issue-number> ${CLEAR_FLAG} | <issue-number> ${run_park_escalate.ESCALATE_FLAG} "<reason>"\n\n${run_park_body.FORMAT}`
39
42
  const CLEAR_OPTIONS = { clear: { type: 'boolean' } } as const
40
43
 
41
44
  function clear_issue(argv: ReadonlyArray<string>): string | undefined {
@@ -94,11 +97,20 @@ async function run_clear(argv: ReadonlyArray<string>, directory: string): Promis
94
97
  return FAILURE_EXIT_CODE
95
98
  }
96
99
 
100
+ // **A worker's escalation is a mechanical stop, not a question** (joshuafolkken/kit#7356): no
101
+ // decision schema, the same release.
102
+ async function run_escalate(argv: ReadonlyArray<string>, directory: string): Promise<number> {
103
+ const issue_number = await run_park_escalate.park(argv, directory, USAGE)
104
+
105
+ return issue_number === undefined ? FAILURE_EXIT_CODE : await release(issue_number, directory)
106
+ }
107
+
97
108
  async function run(
98
109
  argv: ReadonlyArray<string>,
99
110
  directory: string = process.cwd(),
100
111
  ): Promise<number> {
101
112
  if (argv.includes(CLEAR_FLAG)) return await run_clear(argv, directory)
113
+ if (run_park_escalate.is_requested(argv)) return await run_escalate(argv, directory)
102
114
 
103
115
  const request = issue_comment_cli.resolve_request(argv, USAGE)
104
116
 
@@ -0,0 +1,102 @@
1
+ import { agent_worker_profile } from '#scripts/agent/agent-worker-profile'
2
+ import { RUN_STALLED_LABEL } from '#scripts/issue/issue-labels'
3
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
4
+ import { session_cite } from '#scripts/issue/session-cite'
5
+ import { cli_flags } from '#scripts/lib/cli-flags'
6
+ import { run_stalled } from './run-stalled'
7
+ import { run_stalled_park } from './run-stalled-park'
8
+
9
+ // `josh run:park <N> --escalate "<reason>"` (joshuafolkken/kit#7356): a worker declares that its Issue
10
+ // needs a stronger `josh.worker` profile and stops. Only a repository with `josh.worker.escalate: true`
11
+ // accepts it. The park is a `run:stalled` one whose cause has no retry check, so the drive never
12
+ // re-offers it on the same profile: it resumes the lane one profile up (joshuafolkken/kit#7357).
13
+
14
+ const ESCALATE_FLAG = '--escalate'
15
+ const OPTIONS = { escalate: { type: 'string' } } as const
16
+ const DISABLED_NOTE = `run:park ${ESCALATE_FLAG}: refused — this repository's package.json does not set josh.worker.escalate to true.`
17
+
18
+ interface Escalation {
19
+ issue: string
20
+ reason: string
21
+ }
22
+
23
+ function is_requested(argv: ReadonlyArray<string>): boolean {
24
+ return argv.some((token) => token === ESCALATE_FLAG || token.startsWith(`${ESCALATE_FLAG}=`))
25
+ }
26
+
27
+ // Whether the repository lets a worker declare an escalation at all.
28
+ function is_enabled(directory: string): boolean {
29
+ const result = agent_worker_profile.read(directory)
30
+
31
+ return result.kind === 'settings' && result.settings.escalate
32
+ }
33
+
34
+ function reason_of(value: string | undefined): string {
35
+ return value?.trim() ?? ''
36
+ }
37
+
38
+ // The Issue and a non-blank reason, or `undefined` when either is missing.
39
+ function escalation_of(argv: ReadonlyArray<string>): Escalation | undefined {
40
+ const parsed = cli_flags.arguments_of(argv, OPTIONS)
41
+ if (parsed === undefined) return undefined
42
+
43
+ const issue = issue_number_shape.single_of(parsed.positionals)
44
+ const reason = reason_of(parsed.values.escalate)
45
+
46
+ return issue === undefined || reason === '' ? undefined : { issue, reason }
47
+ }
48
+
49
+ // The note a declaration is refused with, or `undefined` once it is accepted.
50
+ function refusal_of(
51
+ escalation: Escalation | undefined,
52
+ directory: string,
53
+ usage: string,
54
+ ): string | undefined {
55
+ if (escalation === undefined) return usage
56
+
57
+ return is_enabled(directory) ? undefined : DISABLED_NOTE
58
+ }
59
+
60
+ function accepted(
61
+ argv: ReadonlyArray<string>,
62
+ directory: string,
63
+ usage: string,
64
+ ): Escalation | undefined {
65
+ const escalation = escalation_of(argv)
66
+ const refusal = refusal_of(escalation, directory, usage)
67
+
68
+ if (refusal !== undefined) console.error(refusal)
69
+
70
+ return refusal === undefined ? escalation : undefined
71
+ }
72
+
73
+ function comment_of(escalation: Escalation): string {
74
+ const { issue, reason } = escalation
75
+
76
+ return [
77
+ `Parked with \`${RUN_STALLED_LABEL}\`: ${run_stalled.ESCALATION_REQUESTED.why}`,
78
+ `- Reason: ${reason}`,
79
+ `- Next: the backlogrun drive resumes it one \`worker:<name>\` profile up, or hands it to a person at the top profile; without a drive, give it a stronger profile, ${run_stalled.next_step(issue)}.`,
80
+ ].join('\n')
81
+ }
82
+
83
+ // The parked Issue, or `undefined` when the declaration is refused or the park could not be written.
84
+ async function park(
85
+ argv: ReadonlyArray<string>,
86
+ directory: string,
87
+ usage: string,
88
+ ): Promise<string | undefined> {
89
+ const escalation = accepted(argv, directory, usage)
90
+ if (escalation === undefined) return undefined
91
+
92
+ const { short } = run_stalled.escalation_requested(escalation.reason)
93
+ const is_parked = await run_stalled_park.apply(escalation.issue, comment_of(escalation), short)
94
+
95
+ console.info(`escalate ${session_cite.issue(escalation.issue)} — parked: ${String(is_parked)}`)
96
+
97
+ return is_parked ? escalation.issue : undefined
98
+ }
99
+
100
+ const run_park_escalate = { ESCALATE_FLAG, is_enabled, is_requested, park }
101
+
102
+ export { run_park_escalate }
@@ -55,20 +55,40 @@ function next_step(child: number | string, cause = ''): string {
55
55
  return `${recovery}, then use \`${resume_of(child, true)}\` in the live backlogrun or resume it with \`${resume_of(child, false)}\``
56
56
  }
57
57
 
58
- const SESSION_UNFINISHED_LEAD = `${SESSION_UNFINISHED.short}: `
58
+ // The worker's own declaration that its Issue needs a stronger `josh.worker` profile
59
+ // (joshuafolkken/kit#7356). No retry check reads it, so `run:stalled`'s auto-retry never re-offers it
60
+ // on the same profile; the drive resumes it one profile up (joshuafolkken/kit#7357).
61
+ const ESCALATION_REQUESTED: StallCause = {
62
+ short: 'escalation requested',
63
+ why: 'the worker declared that its Issue needs a stronger josh.worker profile.',
64
+ }
59
65
 
60
- // The child's first message line rides behind its class, so a reader keyed on the class still finds it.
61
- function session_unfinished(message: string): StallCause {
66
+ const CARRYING_CLASSES = [SESSION_UNFINISHED, ESCALATION_REQUESTED]
67
+
68
+ function lead_of(cause: StallCause): string {
69
+ return `${cause.short}: `
70
+ }
71
+
72
+ // The message's first line rides behind its class, so a reader keyed on the class still finds it.
73
+ function carrying(cause: StallCause, message: string): StallCause {
62
74
  const first = message.split(/\r?\n/u, 1)[0]?.trim() ?? ''
63
75
 
64
- return first === ''
65
- ? SESSION_UNFINISHED
66
- : { short: `${SESSION_UNFINISHED_LEAD}${first}`, why: first }
76
+ return first === '' ? cause : { short: `${lead_of(cause)}${first}`, why: first }
77
+ }
78
+
79
+ function session_unfinished(message: string): StallCause {
80
+ return carrying(SESSION_UNFINISHED, message)
81
+ }
82
+
83
+ function escalation_requested(reason: string): StallCause {
84
+ return carrying(ESCALATION_REQUESTED, reason)
67
85
  }
68
86
 
69
87
  // The class a park's cause names: `session unfinished` for one carrying the child's message too.
70
88
  function class_of(cause: string): string {
71
- return cause.startsWith(SESSION_UNFINISHED_LEAD) ? SESSION_UNFINISHED.short : cause
89
+ const carried = CARRYING_CLASSES.find((known) => cause.startsWith(lead_of(known)))
90
+
91
+ return carried?.short ?? cause
72
92
  }
73
93
 
74
94
  function park_event(child: number | string, cause: string): string {
@@ -113,11 +133,13 @@ function waiting_text(waits: ReadonlyArray<string>): string {
113
133
 
114
134
  const run_stalled = {
115
135
  CUT_NOT_RELAUNCHED,
136
+ ESCALATION_REQUESTED,
116
137
  SESSION_UNFINISHED,
117
138
  STALE_HANDOFF,
118
139
  cause_in,
119
140
  cause_of,
120
141
  class_of,
142
+ escalation_requested,
121
143
  next_step,
122
144
  park_event,
123
145
  resume_of,
@@ -20,8 +20,8 @@ import { run_review_steps } from './run-review-steps'
20
20
  // already moved, pushes nothing and the ship's commit stage pushes as before. A round recorded once
21
21
  // the branch is pushed goes to the issue (`review-record-comment.ts`).
22
22
  //
23
- // Only a lane child's own open, briefing code alone: the ship's `--code-only` open commits through its
24
- // own sync stage, and an interaction review is still to come.
23
+ // Only a lane child's own open, after every due brief is written: the ship's `--code-only` open
24
+ // commits through its own sync stage. All due slots still have to attest before the ship can merge.
25
25
 
26
26
  const PUSH_FLAG = '--push'
27
27
  const RUN_REVIEW_COMMAND = 'run:review'
@@ -43,10 +43,10 @@ interface EarlyPushPlan {
43
43
 
44
44
  type Environment = Readonly<Record<string, string | undefined>>
45
45
 
46
- function is_code_alone(plan: EarlyPushPlan): boolean {
46
+ function is_full_open(plan: EarlyPushPlan): boolean {
47
47
  if (plan.is_code_only) return false
48
48
 
49
- return plan.slots.length === 1 && plan.slots[0] === review_attest.REVIEW_SLOT.CODE
49
+ return plan.slots.includes(review_attest.REVIEW_SLOT.CODE)
50
50
  }
51
51
 
52
52
  // The mark counts only in the checkout of the issue it names: a leaked one pushes nothing.
@@ -55,7 +55,7 @@ function is_due(
55
55
  environment: Environment = process.env,
56
56
  directory = PROJECT_ROOT,
57
57
  ): boolean {
58
- return lane_child_marker.is_child_of(directory, environment) && is_code_alone(plan)
58
+ return lane_child_marker.is_child_of(directory, environment) && is_full_open(plan)
59
59
  }
60
60
 
61
61
  // A clean tree is already committed; a refused commit says why and leaves the round to the ship.
@@ -77,7 +77,7 @@ function preparation_skip(
77
77
  if (!lane_child_marker.is_child_of(directory, environment)) return 'not-lane-child'
78
78
  if (plan.is_code_only) return 'code-only'
79
79
 
80
- return is_code_alone(plan) ? undefined : 'multiple-slots'
80
+ return is_full_open(plan) ? undefined : 'multiple-slots'
81
81
  }
82
82
 
83
83
  // Whether this open pushes early: due here, and the tree committed for the brief to attest.
@@ -3,6 +3,7 @@ import { RERUNS_SPENT_MESSAGE } from '#scripts/followup/followup-job-rerun'
3
3
  import { UNREADABLE_COMMENTS_STOP } from '#scripts/gh/git-gh-comments-unreadable'
4
4
  import { gh_retry } from '#scripts/gh/git-gh-retry'
5
5
  import { PR_CHECKS_TIMEOUT_MESSAGE } from '#scripts/gh/git-pr-checks'
6
+ import { git_pr_checks_failed } from '#scripts/gh/git-pr-checks-failed'
6
7
  import { is_blocked_cause } from '#scripts/gh/git-pr-checks-missing'
7
8
  import { NO_CHECKS_MESSAGE } from '#scripts/gh/git-pr-checks-watch'
8
9
  import { git_error } from '#scripts/git/git-error'
@@ -176,6 +177,13 @@ function findings_of(stage: Stage, cause: Cause, body: string): ReadonlyArray<st
176
177
  return is_finding_stop(stage, cause) ? run_ship_review.blocking_kinds(body) : []
177
178
  }
178
179
 
180
+ // The CI checks a followup `check` stop's wait reported failed (joshuafolkken/kit#7333).
181
+ function checks_of(stage: Stage, cause: Cause, body: string): ReadonlyArray<string> {
182
+ return stage === STAGE.FOLLOWUP && cause === CAUSE.CHECK
183
+ ? git_pr_checks_failed.names_of(body)
184
+ : []
185
+ }
186
+
179
187
  // Each finding that decided a review stop, whole, for the durable stop log (joshuafolkken/kit#4519).
180
188
  function details_of(stage: Stage, failed: StoppedOutput = NO_OUTPUT): ReadonlyArray<StopFinding> {
181
189
  if (!is_finding_stop(stage, cause_of(stage, failed))) return []
@@ -185,11 +193,13 @@ function details_of(stage: Stage, failed: StoppedOutput = NO_OUTPUT): ReadonlyAr
185
193
 
186
194
  // The lane ledger's record of one stop — the stage, its cause and, for a preflight, which
187
195
  // preconditions were unmet, so `lane:stats` counts the one worth meeting before a ship
188
- // (joshuafolkken/kit#4166); for a review, which kinds of finding stopped it (joshuafolkken/kit#4426).
196
+ // (joshuafolkken/kit#4166); for a review, which kinds of finding stopped it (joshuafolkken/kit#4426);
197
+ // for a followup red on a check, which checks failed (joshuafolkken/kit#7333).
189
198
  function record_of(issue: number, stage: Stage, failed: StoppedOutput = NO_OUTPUT): StopRecord {
190
199
  const { body, conflicts, preconditions } = failed
191
200
  const cause = cause_of(stage, failed)
192
201
  const findings = findings_of(stage, cause, body)
202
+ const checks = checks_of(stage, cause, body)
193
203
 
194
204
  return {
195
205
  issue,
@@ -197,6 +207,7 @@ function record_of(issue: number, stage: Stage, failed: StoppedOutput = NO_OUTPU
197
207
  cause,
198
208
  ...(preconditions !== undefined && { preconditions: [...preconditions] }),
199
209
  ...(findings.length > 0 && { findings: [...findings] }),
210
+ ...(checks.length > 0 && { checks: [...checks] }),
200
211
  }
201
212
  }
202
213
 
@@ -1,3 +1,4 @@
1
+ import { codex_hooks } from '#scripts/agent/codex-hooks'
1
2
  import { git_path_quoting } from '#scripts/git/git-path-quoting'
2
3
  import { issue_body_keys } from '#scripts/issue/issue-body-keys'
3
4
  import { run_record_path } from '#scripts/josh/run-record-path'
@@ -160,15 +161,21 @@ function partners_of(
160
161
 
161
162
  // The files grouped into what splits as one, each group at its first file: a new scripts module and an
162
163
  // importer of its directory count as one (joshuafolkken/kit#6635), for `lane:plan` and the split notice
163
- // alike (joshuafolkken/kit#6724). With no `added` file, every file stands alone.
164
+ // alike (joshuafolkken/kit#6724). A registered generated artifact also stays with its source (#7381);
165
+ // the two files' changed lines still count in full. Other files stand alone when none is added.
164
166
  function units_of(files: ReadonlyArray<string>, added: ReadonlySet<string>): Array<Array<string>> {
165
- const partners = partners_of(files, added)
167
+ const artifacts = codex_hooks.GENERATED_SOURCES
168
+ const sources = files.filter((file) => !files.includes(artifacts.get(file) ?? ''))
169
+ const partners = partners_of(sources, added)
166
170
 
167
- return files.flatMap((file) => {
171
+ return sources.flatMap((file) => {
168
172
  const partner = partners.get(file)
169
- if (partner === undefined) return [[file]]
173
+ const unit = partner === undefined ? [file] : [file, partner]
174
+ const generated = files.filter((path) => unit.includes(artifacts.get(path) ?? ''))
170
175
 
171
- return files.indexOf(partner) < files.indexOf(file) ? [] : [[file, partner]]
176
+ return partner !== undefined && sources.indexOf(partner) < sources.indexOf(file)
177
+ ? []
178
+ : [[...unit, ...generated]]
172
179
  })
173
180
  }
174
181
 
@@ -315,8 +322,10 @@ const split_assess = {
315
322
  SINGLE_VERDICT,
316
323
  assess,
317
324
  guide_for,
325
+ is_deliverable,
318
326
  is_over_cap,
319
327
  notice,
328
+ measure,
320
329
  parse_numstat,
321
330
  policy_text,
322
331
  reason,
@@ -1,5 +1,6 @@
1
1
  import { readdirSync } from 'node:fs'
2
2
  import path from 'node:path'
3
+ import { direct_importers } from './direct-importers'
3
4
  import { test_related_pins } from './test-related-pins'
4
5
  import { related_scope, type RelatedScope } from './test-related-scope'
5
6
 
@@ -7,7 +8,7 @@ import { related_scope, type RelatedScope } from './test-related-scope'
7
8
  // near a hub reaches hundreds of test files, and paying that reach after every small edit repeats it
8
9
  // minutes apart. **The touched scope reads no test-read map and no import graph**: it is the diff's own
9
10
  // test files and, for each changed module `foo.ts`, its colocated `foo.test.ts` and `foo.*.test.ts`,
10
- // plus the tests the change pins (`test-related-pins.ts`).
11
+ // plus the tests the change pins (`test-related-pins.ts`) and its modules' direct test importers.
11
12
  // The full-reach run checks further away. A touched green admits review round 2, and the lane ledger
12
13
  // records it under its own kind.
13
14
 
@@ -15,8 +16,8 @@ const TOUCHED_FLAG = '--touched'
15
16
  const TOUCHED_KIND = 'touched'
16
17
  const TEST_SUFFIX = '.test.ts'
17
18
  const TOUCHED_REASON =
18
- 'the diff test files, the tests named after its modules and the tests it pins'
19
- const NOTHING_TOUCHED_REASON = 'no test file is in the diff or named after a changed module'
19
+ "the diff test files, their modules' same-named tests, direct test importers and pinned tests"
20
+ const NOTHING_TOUCHED_REASON = 'no changed file reaches a touched test'
20
21
 
21
22
  type ListDirectory = (directory: string) => ReadonlyArray<string>
22
23
 
@@ -76,11 +77,28 @@ function touched_scope(
76
77
  return { mode: 'related', files, reason: TOUCHED_REASON }
77
78
  }
78
79
 
80
+ // A shared fixture often has no same-named test. Reuse the direct-import scan, without building
81
+ // a transitive graph, so its consuming suites run before the shipping checks (joshuafolkken/kit#7380).
82
+ async function read_scope(
83
+ root: string,
84
+ changed: ReadonlyArray<string> | undefined,
85
+ ): Promise<RelatedScope> {
86
+ if (changed === undefined) return touched_scope(root, changed)
87
+
88
+ const importers = await direct_importers.importers_of(
89
+ root,
90
+ changed.filter((file) => related_scope.is_relatable(file)),
91
+ )
92
+
93
+ return touched_scope(root, [...changed, ...[...importers.values()].flat()])
94
+ }
95
+
79
96
  const test_related_touched = {
80
97
  NOTHING_TOUCHED_REASON,
81
98
  TOUCHED_FLAG,
82
99
  TOUCHED_KIND,
83
100
  TOUCHED_REASON,
101
+ read_scope,
84
102
  touched_scope,
85
103
  touched_tests,
86
104
  }
@@ -369,7 +369,7 @@ async function run_touched(given: ReadonlyArray<string>): Promise<number> {
369
369
  const root = await changed_file_scope.repository_root_or_cwd()
370
370
  const explicit = explicit_files(root, command_arguments)
371
371
  const changed = explicit.length > 0 ? explicit : await branch_change()
372
- const scope = test_related_touched.touched_scope(root, changed)
372
+ const scope = await test_related_touched.read_scope(root, changed)
373
373
  const input = { scope, root, changed, synced: [], since_map: [], kind: TOUCHED_KIND }
374
374
 
375
375
  return await test_related_run.run_and_record(input, command_arguments)
@@ -1,29 +0,0 @@
1
- import {
2
- issue_park
3
- } from "./chunk-T33QDAWD.js";
4
- import {
5
- run_stalled
6
- } from "./chunk-B33BTNB4.js";
7
- import {
8
- run_event_stream_emit
9
- } from "./chunk-34LAULSC.js";
10
- import {
11
- run_event_stream
12
- } from "./chunk-NSAVEXVR.js";
13
- import {
14
- RUN_STALLED_LABEL
15
- } from "./chunk-QQBMVC5W.js";
16
-
17
- // scripts/run/park/run-stalled-park.ts
18
- var { PARK } = run_event_stream.EVENT_KIND;
19
- async function apply(issue, comment, cause, fields = {}) {
20
- const park_write = await issue_park.apply(issue, RUN_STALLED_LABEL, comment);
21
- if (!park_write.is_labelled) return false;
22
- await run_event_stream_emit.emit(PARK, run_stalled.park_event(issue, cause), /* @__PURE__ */ new Date(), fields);
23
- return true;
24
- }
25
- var run_stalled_park = { apply };
26
-
27
- export {
28
- run_stalled_park
29
- };