@joshuafolkken/kit 1.3000.0 → 1.3041.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 (684) 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/dist/.inputs-verified.json +1 -1
  4. package/dist/commands/adopt.js +12 -12
  5. package/dist/commands/auto-ok-judge-cli.js +18 -14
  6. package/dist/commands/auto-ok-main.js +42 -40
  7. package/dist/commands/backlog-budget-main.js +3 -3
  8. package/dist/commands/backlog-drive-cli.js +276 -188
  9. package/dist/commands/backlog-next-main.js +77 -75
  10. package/dist/commands/backlog-offer-main.js +80 -78
  11. package/dist/commands/backlog-plan-cli.js +96 -97
  12. package/dist/commands/backlog-triage-cli.js +94 -92
  13. package/dist/commands/backlogrun-cli.js +212 -206
  14. package/dist/commands/behavior-cli.js +12 -13
  15. package/dist/commands/bump-version-main.js +2 -2
  16. package/dist/commands/bytes-command.js +61 -22
  17. package/dist/commands/check-related.js +61 -60
  18. package/dist/commands/{chunk-X7PN54LZ.js → chunk-22DVQCP6.js} +16 -6
  19. package/dist/commands/{chunk-7GHOFHUS.js → chunk-24ZDAWML.js} +3 -3
  20. package/dist/commands/{chunk-HBNB3TLG.js → chunk-2BB5ZR2F.js} +13 -7
  21. package/dist/commands/{chunk-F22G3VDB.js → chunk-2BC33QPY.js} +1 -1
  22. package/dist/commands/{chunk-72EW7AVI.js → chunk-2BJJUTZA.js} +2 -2
  23. package/dist/commands/{chunk-XDQOWUVT.js → chunk-2CXT6MBR.js} +4 -4
  24. package/dist/commands/{chunk-TVJE67O2.js → chunk-2EZTYLO4.js} +6 -6
  25. package/dist/commands/{chunk-JLYW7CP6.js → chunk-2PHOLX62.js} +1 -1
  26. package/dist/commands/{chunk-6EU5ZCDP.js → chunk-2QM72JCJ.js} +23 -87
  27. package/dist/commands/{chunk-EFHSCUFN.js → chunk-2VFPUPSG.js} +2 -2
  28. package/dist/commands/{chunk-ATRMETHT.js → chunk-2XAH3MHV.js} +1 -1
  29. package/dist/commands/{chunk-T2E724HN.js → chunk-34JJYCIY.js} +2 -2
  30. package/dist/commands/{chunk-REMKUFAC.js → chunk-34KZDKQJ.js} +1 -1
  31. package/dist/commands/{chunk-GK2KY4MO.js → chunk-352KLSFX.js} +3 -3
  32. package/dist/commands/{chunk-7S6VRZOH.js → chunk-3AEDZZNL.js} +5 -5
  33. package/dist/commands/{chunk-KVJDDECB.js → chunk-3B2HEFNO.js} +2 -2
  34. package/dist/commands/{chunk-HZBTXKT2.js → chunk-3Z425MM3.js} +2 -2
  35. package/dist/commands/{chunk-J3G2R64I.js → chunk-3ZOX4G4U.js} +3 -3
  36. package/dist/commands/{chunk-LRS2OS5J.js → chunk-452HWOJ7.js} +2 -2
  37. package/dist/commands/{chunk-HRT4KWP4.js → chunk-475EFIJV.js} +1 -1
  38. package/dist/commands/{chunk-4HBVHYNL.js → chunk-47UZB54M.js} +3 -3
  39. package/dist/commands/{chunk-H4LYG37R.js → chunk-4DN4XVPL.js} +6 -6
  40. package/dist/commands/{chunk-TMLNI3YW.js → chunk-4HERA2GY.js} +1 -1
  41. package/dist/commands/{chunk-W6V4DWC5.js → chunk-4JI35CVO.js} +1 -1
  42. package/dist/commands/{chunk-YT342DRV.js → chunk-4L4LNWZ7.js} +2 -2
  43. package/dist/commands/{chunk-ZZAH3YQP.js → chunk-4N32QKJZ.js} +6 -6
  44. package/dist/commands/{chunk-GDUK5YPO.js → chunk-4NRSFLG7.js} +12 -12
  45. package/dist/commands/{chunk-O5QZ2S6X.js → chunk-4OKRPAUT.js} +4 -4
  46. package/dist/commands/{chunk-QDFDB4CF.js → chunk-4Q64PG46.js} +13 -13
  47. package/dist/commands/{chunk-HO52D6JY.js → chunk-4UDTQVDD.js} +14 -14
  48. package/dist/commands/{chunk-HPVLI26Z.js → chunk-4WR2LEZL.js} +6 -6
  49. package/dist/commands/{chunk-DP7WIGQ4.js → chunk-4ZJOC6OK.js} +4 -4
  50. package/dist/commands/{chunk-WTRDWEUQ.js → chunk-4ZQM4I7R.js} +12 -12
  51. package/dist/commands/{chunk-OTZJXU2R.js → chunk-54X37JEJ.js} +8 -8
  52. package/dist/commands/{chunk-A5V7EWIX.js → chunk-56KW5EOK.js} +2 -2
  53. package/dist/commands/chunk-5CG3XU3O.js +74 -0
  54. package/dist/commands/{chunk-FC33R5UN.js → chunk-5ESZLHDZ.js} +13 -15
  55. package/dist/commands/{chunk-OVA7STGP.js → chunk-5FBRMARM.js} +9 -9
  56. package/dist/commands/{chunk-SK2LJBFS.js → chunk-5PCK53WP.js} +3 -3
  57. package/dist/commands/{chunk-6NV2F7QH.js → chunk-5RG4S66L.js} +1 -1
  58. package/dist/commands/{chunk-JOARHU3M.js → chunk-5UJGACVN.js} +1 -1
  59. package/dist/commands/{chunk-NKOET4FB.js → chunk-5Y7B7FDL.js} +2 -2
  60. package/dist/commands/{chunk-XMBRXCIE.js → chunk-5Z6E5ZUV.js} +4 -4
  61. package/dist/commands/{chunk-RZ4OKKPM.js → chunk-5ZNUH4LV.js} +2 -2
  62. package/dist/commands/{chunk-7CHCZBNF.js → chunk-6CFHLMKM.js} +4 -4
  63. package/dist/commands/{chunk-TXXYC7EV.js → chunk-6DDK5XWK.js} +1 -1
  64. package/dist/commands/{chunk-2TQXCH2K.js → chunk-6GQX752S.js} +3 -3
  65. package/dist/commands/{chunk-RY6ZDHKB.js → chunk-6MAZ55GF.js} +107 -84
  66. package/dist/commands/{chunk-SNFLV7VV.js → chunk-6RUWU2SB.js} +2 -2
  67. package/dist/commands/{chunk-D4SZK7H2.js → chunk-6TIVDEKG.js} +2 -2
  68. package/dist/commands/{chunk-RIQ75QWR.js → chunk-6UCWAFQY.js} +55 -43
  69. package/dist/commands/{chunk-4D5KWMFL.js → chunk-6YURRFRU.js} +19 -19
  70. package/dist/commands/{chunk-7MOZEEFJ.js → chunk-6YVURZAJ.js} +1 -1
  71. package/dist/commands/{chunk-73JOEKIC.js → chunk-6Z4YZG7P.js} +5 -5
  72. package/dist/commands/{chunk-NJ53AWJU.js → chunk-77BIN247.js} +9 -9
  73. package/dist/commands/{chunk-MZHOPRI6.js → chunk-7ABHNNY3.js} +7 -7
  74. package/dist/commands/{chunk-6WTVAL4D.js → chunk-7C7FOKJK.js} +1 -1
  75. package/dist/commands/{chunk-KVSSLDA3.js → chunk-7HAGC6SW.js} +5 -5
  76. package/dist/commands/{chunk-IG22Y5MA.js → chunk-7KKUFLH5.js} +1 -1
  77. package/dist/commands/{chunk-ZQ3CKRMP.js → chunk-7MJYLUF4.js} +2 -2
  78. package/dist/commands/{chunk-6UGFS3EU.js → chunk-7NHZCI5Y.js} +11 -11
  79. package/dist/commands/{chunk-FB3D7CX5.js → chunk-7OQ56DVW.js} +5 -7
  80. package/dist/commands/{chunk-EK327QOS.js → chunk-7VWPGTZO.js} +10 -10
  81. package/dist/commands/{chunk-WSOF74K4.js → chunk-7YZXS3AK.js} +3 -3
  82. package/dist/commands/{chunk-N6TYL3B2.js → chunk-AAUDI7WJ.js} +2 -2
  83. package/dist/commands/{chunk-3GF52L5F.js → chunk-AC26ZUG5.js} +12 -24
  84. package/dist/commands/{chunk-EK2Y6B4X.js → chunk-ACZ52JPI.js} +7 -7
  85. package/dist/commands/{chunk-VD72V5VX.js → chunk-AJ65WNJB.js} +4 -4
  86. package/dist/commands/{chunk-MYWRGF5A.js → chunk-AK7SEO4Y.js} +2 -2
  87. package/dist/commands/{chunk-IBEKFLWG.js → chunk-ALDAS2WG.js} +9 -9
  88. package/dist/commands/{chunk-W32DIQEP.js → chunk-ARFBIJFS.js} +1 -1
  89. package/dist/commands/{chunk-F3WBEEYC.js → chunk-AVVMDVGO.js} +5 -5
  90. package/dist/commands/chunk-AXXEMVRJ.js +23 -0
  91. package/dist/commands/{chunk-GIGKMIPQ.js → chunk-B3M5WSGN.js} +1 -1
  92. package/dist/commands/{chunk-4Z5723GA.js → chunk-B7ZNIEDV.js} +5 -4
  93. package/dist/commands/{chunk-B3XFOHDX.js → chunk-BCUDQWYK.js} +10 -4
  94. package/dist/commands/{chunk-PR3JCPP7.js → chunk-BMKWSWWE.js} +1 -1
  95. package/dist/commands/{chunk-RZJAUVMI.js → chunk-BMM4RHCG.js} +2 -2
  96. package/dist/commands/{chunk-LAKVPOJQ.js → chunk-BMTYUJNT.js} +2 -2
  97. package/dist/commands/{chunk-DAJCUSPG.js → chunk-BRHPRDDV.js} +3 -3
  98. package/dist/commands/{chunk-UZAU6UI6.js → chunk-BRUBX64M.js} +2 -2
  99. package/dist/commands/{chunk-BFLFPKQQ.js → chunk-BTZJDHQT.js} +4 -4
  100. package/dist/commands/{chunk-AI5K4QJO.js → chunk-BYFC6MD2.js} +1 -1
  101. package/dist/commands/{chunk-JGTLNFFE.js → chunk-BYGJ3BCJ.js} +10 -10
  102. package/dist/commands/{chunk-5HWZFL4D.js → chunk-C54QXJD6.js} +51 -18
  103. package/dist/commands/{chunk-LMS6N6GE.js → chunk-CBAKBWSZ.js} +7 -7
  104. package/dist/commands/{chunk-7EAMUVIO.js → chunk-CFHRNTE5.js} +1 -1
  105. package/dist/commands/{chunk-UIWAMLQH.js → chunk-CGYDIYHD.js} +2 -2
  106. package/dist/commands/{chunk-4QYW2IL7.js → chunk-CHKYPF5O.js} +1 -1
  107. package/dist/commands/{chunk-5HCPSV45.js → chunk-CJBW6BWG.js} +8 -8
  108. package/dist/commands/chunk-CKUKK7JG.js +252 -0
  109. package/dist/commands/{chunk-4PES3BAA.js → chunk-CMHGDCGN.js} +3 -3
  110. package/dist/commands/{chunk-F6OWP2AY.js → chunk-CNGTHSUS.js} +22 -22
  111. package/dist/commands/{chunk-B2EA2HCY.js → chunk-COGKULQH.js} +4 -4
  112. package/dist/commands/{chunk-S7XWXG4M.js → chunk-CP2J4RV2.js} +175 -81
  113. package/dist/commands/{chunk-YGDNUTTI.js → chunk-CQUZ6TNQ.js} +2 -2
  114. package/dist/commands/chunk-CQZI7RIK.js +72 -0
  115. package/dist/commands/chunk-CVJHQOI3.js +153 -0
  116. package/dist/commands/{chunk-2MJ4OCDL.js → chunk-CWCKCZS6.js} +1 -1
  117. package/dist/commands/chunk-D5OHVIPM.js +17 -0
  118. package/dist/commands/{chunk-TPKFVVJQ.js → chunk-D6D6WQR6.js} +2 -2
  119. package/dist/commands/{chunk-5PAEXYIY.js → chunk-D7JRJI44.js} +69 -6
  120. package/dist/commands/{chunk-LOSOLCCW.js → chunk-D7OAU32Z.js} +1 -1
  121. package/dist/commands/{chunk-VZHC2I3T.js → chunk-DAAX7XDS.js} +8 -8
  122. package/dist/commands/{chunk-OHVAEJSM.js → chunk-DEZF7QZZ.js} +5 -5
  123. package/dist/commands/{chunk-CA6F5OXK.js → chunk-DYZOOWVW.js} +124 -21
  124. package/dist/commands/{chunk-TKGBF75Y.js → chunk-EDKOSZ3K.js} +5 -5
  125. package/dist/commands/{chunk-YPNTORQD.js → chunk-EFDVE5P5.js} +1 -1
  126. package/dist/commands/{chunk-EH3LVYOX.js → chunk-EGIHAEMT.js} +1 -1
  127. package/dist/commands/{chunk-7P4X4TQL.js → chunk-EKLU6QR7.js} +4 -4
  128. package/dist/commands/{chunk-ILQZFUDC.js → chunk-ELY76WAR.js} +2 -2
  129. package/dist/commands/{chunk-2VLHFILE.js → chunk-EM3HAZF6.js} +2 -2
  130. package/dist/commands/{chunk-F2HFWLQR.js → chunk-EMTZAGT5.js} +20 -1
  131. package/dist/commands/{chunk-GA4VIFHD.js → chunk-ERG4QRNG.js} +2 -2
  132. package/dist/commands/{chunk-ICEMFE2V.js → chunk-EUGNQCYK.js} +1 -1
  133. package/dist/commands/{chunk-3HU3LPIF.js → chunk-EXDFKKMH.js} +2 -2
  134. package/dist/commands/{chunk-ISPBJVXM.js → chunk-EXWB34R2.js} +7 -7
  135. package/dist/commands/{chunk-FNOSSXLG.js → chunk-EYMPBHDN.js} +2 -2
  136. package/dist/commands/{chunk-7V5UVKFG.js → chunk-EZ7IPKIH.js} +2 -2
  137. package/dist/commands/{chunk-KQWSENCT.js → chunk-F6IQHZYY.js} +3 -3
  138. package/dist/commands/{chunk-7ZECP3J6.js → chunk-FDS65XOJ.js} +5 -5
  139. package/dist/commands/{chunk-KXRFGPZD.js → chunk-FGG7V473.js} +21 -5
  140. package/dist/commands/{chunk-PZ6VWHOO.js → chunk-FHFWNNUC.js} +1 -1
  141. package/dist/commands/{chunk-XBRD2BDL.js → chunk-FJX7AENO.js} +2 -2
  142. package/dist/commands/{chunk-M42SLJCD.js → chunk-FKZ5E4JD.js} +4 -4
  143. package/dist/commands/{chunk-F2J6DGDM.js → chunk-FMZWRDKH.js} +8 -8
  144. package/dist/commands/{chunk-DSBK66US.js → chunk-FOKCRIAN.js} +10 -10
  145. package/dist/commands/{chunk-OI7KM4K3.js → chunk-FQGWO2ZH.js} +2 -2
  146. package/dist/commands/{chunk-2IESYBZH.js → chunk-FURNDIT3.js} +3 -3
  147. package/dist/commands/chunk-FVDQNMP6.js +93 -0
  148. package/dist/commands/{chunk-PZU6FZO6.js → chunk-FWU3H4TX.js} +1 -1
  149. package/dist/commands/{chunk-RYZ3RQRH.js → chunk-G3HBYHFA.js} +1 -1
  150. package/dist/commands/{chunk-HCA5QG2U.js → chunk-G4E4M2P4.js} +2 -2
  151. package/dist/commands/{chunk-VJLZ3IQQ.js → chunk-G5KSL2Q2.js} +1 -1
  152. package/dist/commands/{chunk-Y5ZW3KN5.js → chunk-G6XC7V6Y.js} +2 -2
  153. package/dist/commands/{chunk-73EBNBUW.js → chunk-GCPP5XIG.js} +1 -1
  154. package/dist/commands/{chunk-Q3463XNL.js → chunk-GITT5A5A.js} +3 -3
  155. package/dist/commands/{chunk-T2IO4LEB.js → chunk-GLC47H7I.js} +10 -10
  156. package/dist/commands/{chunk-GA6E4VGO.js → chunk-GUR54ELE.js} +1 -1
  157. package/dist/commands/{chunk-7IT23HIR.js → chunk-GY4DMCKS.js} +2 -2
  158. package/dist/commands/{chunk-PZ4ITSLG.js → chunk-H6JQRHDC.js} +3 -3
  159. package/dist/commands/{chunk-ZHZSZNE2.js → chunk-HATKF6VX.js} +2 -2
  160. package/dist/commands/{chunk-ELWNRE6E.js → chunk-HH3CVIFU.js} +5 -5
  161. package/dist/commands/{chunk-7GMTJDO2.js → chunk-HHMMGDMP.js} +6 -6
  162. package/dist/commands/{chunk-VD5674LW.js → chunk-HI5WPM6C.js} +2 -2
  163. package/dist/commands/{chunk-JUUBDYFZ.js → chunk-HQSWPRUF.js} +4 -4
  164. package/dist/commands/{chunk-ZAJD6T6E.js → chunk-HVCQYZVD.js} +2 -2
  165. package/dist/commands/chunk-HWEZRNPL.js +66 -0
  166. package/dist/commands/{chunk-J6GIVMXI.js → chunk-HX3FFIO5.js} +18 -3
  167. package/dist/commands/{chunk-GU5ML3Y3.js → chunk-HXDTA5VU.js} +13 -68
  168. package/dist/commands/{chunk-BNXE3NVB.js → chunk-I2KCGKJI.js} +1 -1
  169. package/dist/commands/{chunk-LC7SBONO.js → chunk-IAD4WLLI.js} +1 -1
  170. package/dist/commands/{chunk-WWC5L3AO.js → chunk-IB5TT73I.js} +2 -2
  171. package/dist/commands/{chunk-HOSZITJM.js → chunk-IBAYXCMU.js} +2 -2
  172. package/dist/commands/{chunk-UTBVTCQN.js → chunk-IF3EIFK4.js} +267 -153
  173. package/dist/commands/chunk-IGDJNXX2.js +49 -0
  174. package/dist/commands/{chunk-OJ4LGBVD.js → chunk-ILIITIMQ.js} +3 -3
  175. package/dist/commands/{chunk-CUR2WNYB.js → chunk-IRGDMSTI.js} +3 -3
  176. package/dist/commands/{chunk-PZTWQYRI.js → chunk-IYJEBWW5.js} +3 -3
  177. package/dist/commands/{chunk-A3D2XHOJ.js → chunk-J22PSIXR.js} +40 -9
  178. package/dist/commands/{chunk-O27H6NN6.js → chunk-J66YBAAM.js} +3 -5
  179. package/dist/commands/{chunk-P6RGQXHI.js → chunk-J6WKZRV2.js} +2 -2
  180. package/dist/commands/{chunk-NFEBQED3.js → chunk-J7IO3AYH.js} +2 -2
  181. package/dist/commands/{chunk-T57W3UWK.js → chunk-JAKC2BHX.js} +1 -1
  182. package/dist/commands/{chunk-3EO2XN3A.js → chunk-JCAQ7B6J.js} +4 -4
  183. package/dist/commands/{chunk-QQZOQ7AM.js → chunk-JFLFGLE4.js} +1 -1
  184. package/dist/commands/{chunk-ZDSDPKCD.js → chunk-JIGBNCDR.js} +1 -1
  185. package/dist/commands/{chunk-Q5N2J2UF.js → chunk-JJHWTFWQ.js} +5 -7
  186. package/dist/commands/{chunk-EI6JG5DF.js → chunk-JKOGWGQM.js} +1 -1
  187. package/dist/commands/{chunk-RK4HE5NW.js → chunk-JM6EVOFN.js} +4 -4
  188. package/dist/commands/{chunk-EBNIX2TC.js → chunk-JV24VP2O.js} +1 -1
  189. package/dist/commands/{chunk-BCK5LW4F.js → chunk-JVKXJ763.js} +3 -3
  190. package/dist/commands/{chunk-D5TAR6TV.js → chunk-JZHY7D6D.js} +1 -1
  191. package/dist/commands/{chunk-CRNPPKP2.js → chunk-JZK33TA5.js} +1 -1
  192. package/dist/commands/{chunk-UOAG2XQT.js → chunk-K275REYP.js} +3 -3
  193. package/dist/commands/{chunk-HESMKHEB.js → chunk-K4G3HOKS.js} +2 -2
  194. package/dist/commands/{chunk-L6XN3EXI.js → chunk-K64EIHD2.js} +1 -1
  195. package/dist/commands/{chunk-RINVPTA2.js → chunk-KCFOP5RI.js} +28 -28
  196. package/dist/commands/{chunk-O26Y2FOJ.js → chunk-KGE4AS2Y.js} +1 -1
  197. package/dist/commands/{chunk-EWA72KO7.js → chunk-KK2SL42W.js} +2 -2
  198. package/dist/commands/{chunk-MMXZKLDU.js → chunk-KK7TEL5G.js} +10 -4
  199. package/dist/commands/{chunk-UEURNXE5.js → chunk-KKIMVXAP.js} +2 -2
  200. package/dist/commands/{chunk-MAGJFH5T.js → chunk-KODXWMBX.js} +6 -6
  201. package/dist/commands/{chunk-D4HNS43Q.js → chunk-KPSKWTOS.js} +17 -17
  202. package/dist/commands/{chunk-VFJYOAOQ.js → chunk-KTV2HNWB.js} +2 -2
  203. package/dist/commands/{chunk-OWR2TCOY.js → chunk-KWYQR5MK.js} +5 -5
  204. package/dist/commands/{chunk-FNQW6NY7.js → chunk-KXK2A2HB.js} +6 -2
  205. package/dist/commands/{chunk-O5FVBIRI.js → chunk-KZ5BBBMO.js} +5 -5
  206. package/dist/commands/{chunk-JUJFIATR.js → chunk-KZ7HD37E.js} +6 -6
  207. package/dist/commands/{chunk-2YCKPX3A.js → chunk-KZZWPUJW.js} +1 -1
  208. package/dist/commands/{chunk-MYNM3YMR.js → chunk-L7DAL54N.js} +3 -3
  209. package/dist/commands/{chunk-NOXLKIPR.js → chunk-LAR76BFA.js} +1 -1
  210. package/dist/commands/{chunk-ZA3W73PF.js → chunk-LB557AHJ.js} +3 -3
  211. package/dist/commands/{chunk-LYEKT3IN.js → chunk-LEB2VP7F.js} +1 -1
  212. package/dist/commands/{chunk-WQJ7O3C3.js → chunk-LJXKVLYI.js} +1 -1
  213. package/dist/commands/{chunk-CHX4QTP4.js → chunk-LJZERYLG.js} +1 -1
  214. package/dist/commands/{chunk-PF22VUWB.js → chunk-LOOFYHUM.js} +76 -26
  215. package/dist/commands/{chunk-HIPO6HUG.js → chunk-LPSULLNK.js} +1 -1
  216. package/dist/commands/{chunk-G47ZNQVG.js → chunk-LR22UK5W.js} +1 -1
  217. package/dist/commands/{chunk-SV4FHQE7.js → chunk-LT7QSHR4.js} +14 -14
  218. package/dist/commands/{chunk-HIB5G2X6.js → chunk-LUXWDMKI.js} +7 -7
  219. package/dist/commands/{chunk-XH6BGVVP.js → chunk-LX7TIEMI.js} +9 -36
  220. package/dist/commands/{chunk-OGNTJ5JB.js → chunk-LYO6TX5L.js} +1 -1
  221. package/dist/commands/{chunk-JLREFWJ4.js → chunk-LZ5QXE5N.js} +6 -6
  222. package/dist/commands/{chunk-5WIZR5SC.js → chunk-M4UV3BEV.js} +11 -11
  223. package/dist/commands/{chunk-LNBUIOK6.js → chunk-M6JDU5EK.js} +4 -4
  224. package/dist/commands/{chunk-VZSJCFRT.js → chunk-MFBNNTBM.js} +4 -4
  225. package/dist/commands/{chunk-KHWTJ4F7.js → chunk-MI2OS6TL.js} +3 -3
  226. package/dist/commands/{chunk-VZCQZFPH.js → chunk-MLW4S35K.js} +19 -8
  227. package/dist/commands/{chunk-RIUPRMLW.js → chunk-MN425CU6.js} +1 -1
  228. package/dist/commands/{chunk-7W3D3WRW.js → chunk-MOIOSCZM.js} +2 -2
  229. package/dist/commands/{chunk-3BNNMJOT.js → chunk-MRORPFSO.js} +20 -320
  230. package/dist/commands/{chunk-LA5WTOAM.js → chunk-MUGTOJUL.js} +12 -12
  231. package/dist/commands/{chunk-L6LU2633.js → chunk-MVHPRYHE.js} +1 -1
  232. package/dist/commands/{chunk-EKCKCX5S.js → chunk-MWO6FOSZ.js} +123 -21
  233. package/dist/commands/{chunk-AVUGMOHZ.js → chunk-N7QTMTST.js} +2 -2
  234. package/dist/commands/{chunk-LMSS4ARB.js → chunk-NDBX7LSS.js} +1 -1
  235. package/dist/commands/{chunk-BEE7OAQ5.js → chunk-NDWZTWXV.js} +21 -2
  236. package/dist/commands/{chunk-6TESOL3L.js → chunk-NEGJ77RV.js} +7 -7
  237. package/dist/commands/{chunk-LCEJXF7A.js → chunk-NEGRE5VW.js} +4 -4
  238. package/dist/commands/{chunk-IXX4SXIP.js → chunk-NFPD2P3V.js} +1 -1
  239. package/dist/commands/chunk-NHIW7JE6.js +335 -0
  240. package/dist/commands/{chunk-CJSFC5YI.js → chunk-NILSN7A4.js} +7 -7
  241. package/dist/commands/{chunk-W4J6YTFE.js → chunk-NOLFSPOB.js} +2 -2
  242. package/dist/commands/chunk-NT67QTZO.js +65 -0
  243. package/dist/commands/{chunk-NJT5L6IC.js → chunk-NU7W6QGT.js} +33 -4
  244. package/dist/commands/chunk-NUR4FQHM.js +21 -0
  245. package/dist/commands/{chunk-OKKQI4ZG.js → chunk-OAAVY2JK.js} +1 -1
  246. package/dist/commands/chunk-OF4BY4N7.js +32 -0
  247. package/dist/commands/{chunk-W47I2KDY.js → chunk-OGS2DK7I.js} +3 -3
  248. package/dist/commands/{chunk-MS6Q3Z7V.js → chunk-OIPV3PWW.js} +6 -6
  249. package/dist/commands/{chunk-T33QDAWD.js → chunk-OIX2363L.js} +1 -1
  250. package/dist/commands/{chunk-GPMSYXYO.js → chunk-OJ65BZBV.js} +283 -15
  251. package/dist/commands/{chunk-34LAULSC.js → chunk-OKZWEVR4.js} +3 -3
  252. package/dist/commands/{chunk-2CXAVVST.js → chunk-OL6IF4JC.js} +1 -1
  253. package/dist/commands/{chunk-6JVNRY5A.js → chunk-OMPRILFH.js} +1 -1
  254. package/dist/commands/{chunk-VGHSZLYQ.js → chunk-OOWGH2RG.js} +1 -1
  255. package/dist/commands/{chunk-ERGZPWKP.js → chunk-OP2RFVLS.js} +1 -1
  256. package/dist/commands/{chunk-UU6GCJGM.js → chunk-ORKVN2LO.js} +2 -2
  257. package/dist/commands/{chunk-RHII5XI6.js → chunk-OSBWXZJ4.js} +24 -24
  258. package/dist/commands/{chunk-D3SHCUBC.js → chunk-OVWPZDWP.js} +2 -2
  259. package/dist/commands/{chunk-Z4HYBFZD.js → chunk-OWYK2BEJ.js} +108 -46
  260. package/dist/commands/{chunk-P4O67FP5.js → chunk-OX3VQLV2.js} +6 -6
  261. package/dist/commands/{chunk-L6TU7FC2.js → chunk-OZJP77UM.js} +4 -4
  262. package/dist/commands/{chunk-SNO7CY2B.js → chunk-P3H3DKTE.js} +2 -2
  263. package/dist/commands/{chunk-2OIX4JLA.js → chunk-P5SOYWH2.js} +3 -3
  264. package/dist/commands/{chunk-M4PEC7YW.js → chunk-PHLOTUB7.js} +54 -37
  265. package/dist/commands/{chunk-73KBUQKI.js → chunk-PTNQCCIB.js} +2 -2
  266. package/dist/commands/{chunk-4P2LCVGO.js → chunk-PTZEFQUX.js} +8 -8
  267. package/dist/commands/{chunk-DJVMC3U2.js → chunk-Q426ZSZ4.js} +1 -1
  268. package/dist/commands/{chunk-US6X7JXC.js → chunk-Q7EEIOAD.js} +4 -4
  269. package/dist/commands/{chunk-LE7TFPMU.js → chunk-QABRNGQV.js} +2 -2
  270. package/dist/commands/{chunk-NGKB632X.js → chunk-QDFVVRQP.js} +3 -3
  271. package/dist/commands/{chunk-36M2UV6C.js → chunk-QGATHT4S.js} +38 -4
  272. package/dist/commands/{chunk-DIB2Z2OS.js → chunk-QJRVDE7T.js} +1 -1
  273. package/dist/commands/{chunk-KUJQWO6M.js → chunk-QKTTKAXM.js} +2 -2
  274. package/dist/commands/{chunk-DXZW4V7J.js → chunk-QMDKDQKW.js} +3 -3
  275. package/dist/commands/{chunk-VW5SGE7A.js → chunk-QOSC5RKD.js} +1 -1
  276. package/dist/commands/{chunk-ENLWXAHD.js → chunk-QV5FKMOU.js} +1 -1
  277. package/dist/commands/{chunk-32SNWQJP.js → chunk-R2THGPI3.js} +2 -2
  278. package/dist/commands/{chunk-RVHBWSIG.js → chunk-R54Z2Z3X.js} +2 -2
  279. package/dist/commands/{chunk-CJAA5GAF.js → chunk-RG53UFNW.js} +15 -15
  280. package/dist/commands/{chunk-HJKZDDDI.js → chunk-RHKCWJQX.js} +1 -1
  281. package/dist/commands/{chunk-RPDWFUQO.js → chunk-RKIAX4DZ.js} +36 -84
  282. package/dist/commands/{chunk-LE2T3FGJ.js → chunk-RLBFEHHC.js} +2 -4
  283. package/dist/commands/{chunk-5GBZ43UA.js → chunk-RMDLFLPE.js} +1 -1
  284. package/dist/commands/{chunk-U2UH4VM4.js → chunk-RN2YDNLF.js} +2 -2
  285. package/dist/commands/{chunk-GQHUFNXN.js → chunk-RRAIRS2T.js} +1 -1
  286. package/dist/commands/{chunk-DRCTDVI2.js → chunk-RUQY5TS3.js} +3 -3
  287. package/dist/commands/{chunk-WGULS5DA.js → chunk-RW64VHEB.js} +1 -0
  288. package/dist/commands/{chunk-4G7NKNAZ.js → chunk-RXYMJPJB.js} +3 -3
  289. package/dist/commands/{chunk-B33BTNB4.js → chunk-S4M6UWR2.js} +21 -5
  290. package/dist/commands/{chunk-4Q4FXBUQ.js → chunk-SASX3W2M.js} +2 -2
  291. package/dist/commands/{chunk-TIXJY22D.js → chunk-SJ2ZN575.js} +5 -5
  292. package/dist/commands/{chunk-NSZTSCBW.js → chunk-SP7DKYGU.js} +13 -13
  293. package/dist/commands/{chunk-T3FD3Q73.js → chunk-SRG6PKVS.js} +1 -1
  294. package/dist/commands/{chunk-QA22PBCJ.js → chunk-SSL6A3Y4.js} +3 -3
  295. package/dist/commands/{chunk-4BEIYKI2.js → chunk-SV4FZR24.js} +2 -0
  296. package/dist/commands/{chunk-HZSQI6TD.js → chunk-SVTS7ACS.js} +2 -2
  297. package/dist/commands/{chunk-F7XLEK55.js → chunk-SVV4U5AR.js} +1 -1
  298. package/dist/commands/{chunk-RRQFITJE.js → chunk-SXJM4DZ5.js} +1 -1
  299. package/dist/commands/{chunk-OIDMJASD.js → chunk-SYB3M632.js} +1 -1
  300. package/dist/commands/{chunk-UJOZ2MGX.js → chunk-SYOXIKB7.js} +6 -6
  301. package/dist/commands/{chunk-5SB37YDW.js → chunk-SZG5HDNP.js} +3 -3
  302. package/dist/commands/{chunk-R2CF6VZE.js → chunk-T4F33UKZ.js} +4 -4
  303. package/dist/commands/{chunk-ESQEEL4O.js → chunk-TAEGXID2.js} +2 -2
  304. package/dist/commands/chunk-TEPYEUYG.js +585 -0
  305. package/dist/commands/{chunk-LUMCYDGE.js → chunk-TFLHYC2F.js} +2 -2
  306. package/dist/commands/{chunk-V5OIPYA6.js → chunk-TJKM56WJ.js} +4 -4
  307. package/dist/commands/{chunk-CYQ3ZF7R.js → chunk-TLAB552K.js} +86 -13
  308. package/dist/commands/{chunk-ST32OGPY.js → chunk-TP6L4W3W.js} +5 -5
  309. package/dist/commands/{chunk-C26LKDBE.js → chunk-TR7WWYD5.js} +1 -1
  310. package/dist/commands/{chunk-PWYXY46Y.js → chunk-TYNH2R66.js} +15 -15
  311. package/dist/commands/{chunk-AZUE65NT.js → chunk-U5P6G3UV.js} +2 -2
  312. package/dist/commands/{chunk-REPANBLS.js → chunk-U7Y6RKLK.js} +1 -1
  313. package/dist/commands/{chunk-55I7OYHI.js → chunk-UIMMWH7U.js} +1 -1
  314. package/dist/commands/{chunk-72J2G2E7.js → chunk-UKBBWMLE.js} +20 -20
  315. package/dist/commands/{chunk-VTLL6CKO.js → chunk-UNMSZGSG.js} +14 -14
  316. package/dist/commands/chunk-UOVUUVDK.js +18 -0
  317. package/dist/commands/{chunk-JNWHX25C.js → chunk-URDT2O2K.js} +1 -1
  318. package/dist/commands/{chunk-FGZQSSGH.js → chunk-UREXZJDB.js} +1 -1
  319. package/dist/commands/{chunk-O4WBADCX.js → chunk-UTHUX7VU.js} +3 -3
  320. package/dist/commands/{chunk-PDDKRHHS.js → chunk-V5OUZFWK.js} +3 -3
  321. package/dist/commands/{chunk-N4O5I55P.js → chunk-VCPGFBMN.js} +8 -8
  322. package/dist/commands/{chunk-WN7NK3NY.js → chunk-VGPIQNDB.js} +1 -1
  323. package/dist/commands/{chunk-HOGFJHBT.js → chunk-VJS2MCLA.js} +1 -1
  324. package/dist/commands/{chunk-4YI4SLRJ.js → chunk-VK6D5CWA.js} +8 -8
  325. package/dist/commands/{chunk-4LWRCPS5.js → chunk-VOF3N4WO.js} +3 -3
  326. package/dist/commands/{chunk-AM44D7NF.js → chunk-VQRT32JB.js} +1 -1
  327. package/dist/commands/{chunk-AS3GWVAN.js → chunk-VQVPAVQ3.js} +1 -1
  328. package/dist/commands/{chunk-6VTJO5L2.js → chunk-VV4TQYGD.js} +3 -3
  329. package/dist/commands/{chunk-WIE7VUBE.js → chunk-W7DRUOF7.js} +5 -5
  330. package/dist/commands/{chunk-HH2KDLTP.js → chunk-WAEN2RTT.js} +2 -2
  331. package/dist/commands/{chunk-NKKH3PBE.js → chunk-WB4T3VY2.js} +18 -1
  332. package/dist/commands/{chunk-DNJC7X73.js → chunk-WCEUMOKK.js} +2 -2
  333. package/dist/commands/{chunk-BK6Q4VCA.js → chunk-WTH6NTXU.js} +4 -4
  334. package/dist/commands/{chunk-WG6GYBRJ.js → chunk-WWVYEHQT.js} +2 -1
  335. package/dist/commands/{chunk-P4CWLRT2.js → chunk-X3TNPALI.js} +1 -1
  336. package/dist/commands/{chunk-LZNYHWRO.js → chunk-XC6GG5JR.js} +3 -3
  337. package/dist/commands/{chunk-RI7EQYKL.js → chunk-XFWI6WHH.js} +2 -2
  338. package/dist/commands/{chunk-BY3POLIQ.js → chunk-XHGWMD3L.js} +7 -7
  339. package/dist/commands/{chunk-BPSJSHYD.js → chunk-XI2ABCRX.js} +2 -2
  340. package/dist/commands/{chunk-TS4ZK46L.js → chunk-XKSUBUIH.js} +5 -5
  341. package/dist/commands/{chunk-K7GL3BGI.js → chunk-XPBF5DG3.js} +4 -4
  342. package/dist/commands/{chunk-6SKMZGER.js → chunk-XUMYPESL.js} +20 -8
  343. package/dist/commands/{chunk-QS5USD4T.js → chunk-XXC32PVL.js} +5 -4
  344. package/dist/commands/{chunk-ORSI7Y55.js → chunk-XXN2EZBY.js} +1 -1
  345. package/dist/commands/{chunk-IZVM2TTH.js → chunk-XZQWEVR3.js} +2 -2
  346. package/dist/commands/{chunk-E3CXOVPQ.js → chunk-Y27PTXXI.js} +1 -1
  347. package/dist/commands/{chunk-337QQM4C.js → chunk-Y4EBUI6M.js} +106 -5
  348. package/dist/commands/{chunk-WRX3MINT.js → chunk-YAU3LYNF.js} +1 -1
  349. package/dist/commands/{chunk-JB7R3A4A.js → chunk-YDURQICF.js} +4 -4
  350. package/dist/commands/{chunk-RX5JSPPH.js → chunk-YGFOGA7C.js} +11 -11
  351. package/dist/commands/{chunk-S6SXMBF2.js → chunk-YHJ2AJMA.js} +2 -2
  352. package/dist/commands/{chunk-MVPUQLN5.js → chunk-YM77CF4D.js} +4 -4
  353. package/dist/commands/{chunk-ZYIMQHCB.js → chunk-YNPRJCEO.js} +6 -6
  354. package/dist/commands/{chunk-3UKJFWKS.js → chunk-YTBQAD5W.js} +3 -3
  355. package/dist/commands/{chunk-WW3TX742.js → chunk-Z3WGHIVB.js} +3 -3
  356. package/dist/commands/{chunk-KIVOZY2J.js → chunk-ZBZ5DDCH.js} +66 -64
  357. package/dist/commands/{chunk-TAPDXK34.js → chunk-ZLRUHSOP.js} +1 -1
  358. package/dist/commands/{chunk-XYAK53TK.js → chunk-ZNR75OXP.js} +2 -1
  359. package/dist/commands/{chunk-CADFBQJJ.js → chunk-ZSOR4ISJ.js} +4 -4
  360. package/dist/commands/{chunk-6NRTLH6I.js → chunk-ZYFHYQA7.js} +1 -1
  361. package/dist/commands/{chunk-Q7TV3OV6.js → chunk-ZZFFSQF4.js} +4 -4
  362. package/dist/commands/{chunk-PDAY76AN.js → chunk-ZZULXNC2.js} +1 -1
  363. package/dist/commands/{chunk-5Y7QQYTU.js → chunk-ZZXO6TFH.js} +1 -1
  364. package/dist/commands/code-symbol-cli.js +4 -4
  365. package/dist/commands/codex-hook-adapter.js +99 -100
  366. package/dist/commands/command-derive.js +10 -10
  367. package/dist/commands/cost-audit-main.js +94 -92
  368. package/dist/commands/cspell-cached.js +24 -23
  369. package/dist/commands/defect-origin-main.js +19 -18
  370. package/dist/commands/defect-report-main.js +15 -14
  371. package/dist/commands/disposition-cli.js +67 -64
  372. package/dist/commands/doctor.js +3 -3
  373. package/dist/commands/document-read-cli.js +89 -9
  374. package/dist/commands/document-section-main.js +89 -9
  375. package/dist/commands/edit-files-cli.js +1 -1
  376. package/dist/commands/effect-audit-cli.js +20 -19
  377. package/dist/commands/epic-audit-main.js +55 -53
  378. package/dist/commands/epic-bundle-main.js +87 -85
  379. package/dist/commands/epic-check.js +16 -15
  380. package/dist/commands/epic-main.js +93 -91
  381. package/dist/commands/epic-next-main.js +51 -49
  382. package/dist/commands/format-edited-cli.js +30 -32
  383. package/dist/commands/format.js +11 -10
  384. package/dist/commands/fresh-machine-cli.js +6 -6
  385. package/dist/commands/git-followup-workflow.js +137 -122
  386. package/dist/commands/git-workflow.js +28 -27
  387. package/dist/commands/github-release-cli.js +26 -3
  388. package/dist/commands/hook-ledger-cli.js +74 -126
  389. package/dist/commands/init-main.js +20 -19
  390. package/dist/commands/inputs.json +1907 -1876
  391. package/dist/commands/issue-ack-cli.js +5 -5
  392. package/dist/commands/issue-already-done-cli.js +63 -58
  393. package/dist/commands/issue-body-cli.js +44 -42
  394. package/dist/commands/issue-cite-main.js +11 -10
  395. package/dist/commands/issue-comment-main.js +15 -11
  396. package/dist/commands/issue-consolidate-cli.js +31 -30
  397. package/dist/commands/issue-file-main.js +114 -110
  398. package/dist/commands/issue-fold-existing-cli.js +88 -86
  399. package/dist/commands/issue-fold-main.js +26 -25
  400. package/dist/commands/issue-lint-main.js +38 -37
  401. package/dist/commands/issue-measured-cli.js +66 -61
  402. package/dist/commands/issue-plan-cli.js +103 -101
  403. package/dist/commands/issue-premise-unmet-cli.js +66 -61
  404. package/dist/commands/issue-priority-cli.js +13 -12
  405. package/dist/commands/issue-read-main.js +18 -17
  406. package/dist/commands/issue-release-class-cli.js +12 -11
  407. package/dist/commands/issue-release-main.js +13 -12
  408. package/dist/commands/issue-scout-main.js +89 -87
  409. package/dist/commands/issue-spill-main.js +114 -110
  410. package/dist/commands/issue-state-main.js +16 -15
  411. package/dist/commands/issue-tick-cli.js +14 -13
  412. package/dist/commands/josh-completion.js +10 -10
  413. package/dist/commands/lane-adopt-cli.js +19 -19
  414. package/dist/commands/lane-breakdown-cli.js +154 -126
  415. package/dist/commands/lane-cli.js +131 -125
  416. package/dist/commands/lane-launch-main.js +17 -17
  417. package/dist/commands/lane-limit-cli.js +81 -79
  418. package/dist/commands/lane-measure-cli.js +246 -130
  419. package/dist/commands/lane-pause-cli.js +15 -15
  420. package/dist/commands/lane-plan-cli.js +108 -101
  421. package/dist/commands/lane-resolve-cli.js +20 -19
  422. package/dist/commands/lane-restart-cli.js +124 -118
  423. package/dist/commands/lane-why-cli.js +85 -82
  424. package/dist/commands/lane-withdraw-cli.js +49 -48
  425. package/dist/commands/latest-corepack.js +3 -3
  426. package/dist/commands/latest-if-required-cli.js +9 -9
  427. package/dist/commands/latest-scope-main.js +5 -5
  428. package/dist/commands/latest-update.js +3 -3
  429. package/dist/commands/lines-command.js +3 -3
  430. package/dist/commands/lint-parallel-main.js +32 -31
  431. package/dist/commands/lint-related.js +79 -60
  432. package/dist/commands/lint-rule.js +32 -31
  433. package/dist/commands/lockfile-policy.js +11 -11
  434. package/dist/commands/main-merge-main.js +5 -5
  435. package/dist/commands/main-sync-main.js +5 -5
  436. package/dist/commands/managed-config-scope-cli.js +3 -3
  437. package/dist/commands/measure-rerun-cli.js +10 -10
  438. package/dist/commands/metrics-command.js +91 -58
  439. package/dist/commands/observation-record-cli.js +3 -3
  440. package/dist/commands/observations-flush-cli.js +27 -25
  441. package/dist/commands/oracle-list-cli.js +2 -2
  442. package/dist/commands/overrides-check.js +4 -4
  443. package/dist/commands/package-scout-cli.js +67 -26
  444. package/dist/commands/plan-consumers-main.js +4 -4
  445. package/dist/commands/plan-scaffold-cli.js +132 -91
  446. package/dist/commands/pr-classification-main.js +3 -3
  447. package/dist/commands/pre-commit-lint.js +11 -12
  448. package/dist/commands/pre-commit-type-check.js +25 -24
  449. package/dist/commands/pre-push-unit.js +33 -33
  450. package/dist/commands/pretool-guard-cli.js +90 -91
  451. package/dist/commands/project-profile-cli.js +5 -4
  452. package/dist/commands/propagate.js +15 -15
  453. package/dist/commands/prose-stale-cli.js +20 -19
  454. package/dist/commands/publishable-range-check.js +4 -4
  455. package/dist/commands/read-files-cli.js +2 -2
  456. package/dist/commands/read-set-cli.js +61 -24
  457. package/dist/commands/refactor-scan-cli.js +6 -6
  458. package/dist/commands/release-cli.js +64 -36
  459. package/dist/commands/release-scope-main.js +19 -18
  460. package/dist/commands/rename-cli.js +27 -29
  461. package/dist/commands/reserved-run.js +3 -3
  462. package/dist/commands/retrospective-cli.js +104 -102
  463. package/dist/commands/review-attest-cli.js +6 -6
  464. package/dist/commands/review-brief-main.js +127 -109
  465. package/dist/commands/review-findings-cli.js +2 -2
  466. package/dist/commands/review-pair-cli.js +110 -84
  467. package/dist/commands/review-record-main.js +108 -83
  468. package/dist/commands/review-round2-cli.js +46 -45
  469. package/dist/commands/review-stops-cli.js +16 -16
  470. package/dist/commands/review-submit-cli.js +127 -109
  471. package/dist/commands/rule-list.js +58 -60
  472. package/dist/commands/rule-value-cli.js +226 -74
  473. package/dist/commands/run-add-cli.js +28 -27
  474. package/dist/commands/run-board-main.js +136 -132
  475. package/dist/commands/run-carry-cli.js +127 -124
  476. package/dist/commands/run-chain-cli.js +116 -93
  477. package/dist/commands/run-cut-cli.js +124 -119
  478. package/dist/commands/run-ending-cli.js +19 -22
  479. package/dist/commands/run-entry-cli.js +183 -180
  480. package/dist/commands/run-event-cli.js +5 -5
  481. package/dist/commands/run-handoff-cli.js +52 -28
  482. package/dist/commands/run-handoff-lanes-cli.js +15 -15
  483. package/dist/commands/run-hold-main.js +64 -62
  484. package/dist/commands/run-liveness-cli.js +11 -11
  485. package/dist/commands/run-merge-main.js +119 -116
  486. package/dist/commands/run-next-cli.js +87 -86
  487. package/dist/commands/run-park-cli.js +111 -92
  488. package/dist/commands/run-pause-cli.js +147 -133
  489. package/dist/commands/run-pickup-cli.js +13 -13
  490. package/dist/commands/run-prep-main.js +83 -82
  491. package/dist/commands/run-prime-cli.js +107 -87
  492. package/dist/commands/run-progress-main.js +123 -107
  493. package/dist/commands/run-report-cli.js +25 -24
  494. package/dist/commands/run-review-cli.js +168 -149
  495. package/dist/commands/run-ship-cli.js +208 -203
  496. package/dist/commands/run-ship-evidence-cli.js +38 -37
  497. package/dist/commands/run-ship-wait-main.js +40 -37
  498. package/dist/commands/run-split-cli.js +127 -125
  499. package/dist/commands/run-stale-main.js +36 -35
  500. package/dist/commands/run-status-cli.js +16 -15
  501. package/dist/commands/run-step-cli.js +173 -164
  502. package/dist/commands/run-tail-cli.js +1 -1
  503. package/dist/commands/run-tidy-main.js +30 -29
  504. package/dist/commands/run-wake-main.js +137 -119
  505. package/dist/commands/run-watcher-guard-cli.js +30 -29
  506. package/dist/commands/secretlint-scan.js +2 -2
  507. package/dist/commands/selfcheck-cli.js +27 -26
  508. package/dist/commands/session-language-main.js +48 -28
  509. package/dist/commands/sonar-hotspots-cli.js +3 -3
  510. package/dist/commands/split-assess-cli.js +24 -23
  511. package/dist/commands/split-child-recover-cli.js +13 -12
  512. package/dist/commands/start.js +37 -35
  513. package/dist/commands/stash-pop-main.js +3 -3
  514. package/dist/commands/stash-push-main.js +3 -3
  515. package/dist/commands/stop-guard.js +144 -143
  516. package/dist/commands/sync-main.js +11 -10
  517. package/dist/commands/telegram-test-main.js +5 -5
  518. package/dist/commands/test-declared.js +9 -8
  519. package/dist/commands/test-e2e-guard.js +23 -22
  520. package/dist/commands/test-pinned-main.js +26 -25
  521. package/dist/commands/test-reach-cli.js +15 -14
  522. package/dist/commands/test-red-main.js +5 -5
  523. package/dist/commands/{test-related-ZT2AO62I.js → test-related-ZCNC46MS.js} +31 -31
  524. package/dist/commands/test-related-main.js +51 -50
  525. package/dist/commands/test-unit-guard-main.js +9 -8
  526. package/dist/commands/time-cli.js +24 -27
  527. package/dist/commands/time-density-cli.js +8 -9
  528. package/dist/commands/tree-status-cli.js +4 -4
  529. package/dist/commands/type-check-command.js +8 -7
  530. package/dist/commands/ui-shot-cli.js +4 -4
  531. package/dist/commands/uninstall.js +20 -19
  532. package/dist/commands/unused-members-cli.js +9 -8
  533. package/dist/commands/upstream-interrupt-main.js +115 -111
  534. package/dist/commands/verification-gate.js +46 -46
  535. package/dist/commands/version-check.js +5 -5
  536. package/dist/hooks/{chunk-LWD43Z3C.js → chunk-5CUXGQT6.js} +1667 -107
  537. package/dist/hooks/{chunk-4YXV2REH.js → chunk-5R5YFQR5.js} +8 -8
  538. package/dist/hooks/{chunk-LKQBEKBI.js → chunk-6RLY27FT.js} +8 -8
  539. package/dist/hooks/{chunk-CICKRHTB.js → chunk-AO4TOV4V.js} +119 -2679
  540. package/dist/hooks/{chunk-NUPVO7RI.js → chunk-G5WSPYJ6.js} +4296 -1687
  541. package/dist/hooks/{chunk-UU4PTPEZ.js → chunk-HHIVWGHX.js} +250 -125
  542. package/dist/hooks/{chunk-P7BPAU26.js → chunk-IURJANNZ.js} +2 -2
  543. package/dist/hooks/{chunk-6RR6JZSB.js → chunk-OV22V63P.js} +357 -1744
  544. package/dist/hooks/{chunk-RQXECHAS.js → chunk-SXABK6UV.js} +57 -45
  545. package/dist/hooks/codex-hook-adapter.js +11 -11
  546. package/dist/hooks/daemon.js +1053 -690
  547. package/dist/hooks/format-edited.js +5 -5
  548. package/dist/hooks/inputs.json +551 -536
  549. package/dist/hooks/pretool-guard.js +7 -7
  550. package/dist/hooks/session-lang.js +292 -15
  551. package/dist/hooks/stop-guard.js +225 -48
  552. package/dist/inputs.json +65 -65
  553. package/dist/josh.js +73 -19
  554. package/dist/self-sync-guard/index.js +18 -1
  555. package/dist/version/index.js +18 -1
  556. package/package.json +3 -3
  557. package/pnpm-workspace.yaml +5 -13
  558. package/prompts/collaboration-workflow/issue-template.en.md +56 -52
  559. package/scripts/agent/agent-argv.ts +20 -6
  560. package/scripts/agent/agent-phase-profile.ts +89 -0
  561. package/scripts/agent/agent-role-profile.ts +3 -71
  562. package/scripts/agent/agent-ship-cap.ts +44 -0
  563. package/scripts/agent/agent-worker-profile.ts +154 -0
  564. package/scripts/agent/claude-agent-argv.ts +1 -1
  565. package/scripts/agent/lane-instructions.ts +29 -3
  566. package/scripts/auto-ok/auto-ok-judge-cli.ts +3 -0
  567. package/scripts/auto-ok/auto-ok-judge-write.ts +2 -1
  568. package/scripts/auto-ok/auto-ok-judge.ts +4 -2
  569. package/scripts/backlog/backlog-drive-escalate.ts +115 -0
  570. package/scripts/backlog/backlog-drive-stalled-retry.ts +48 -10
  571. package/scripts/document/document-scan.ts +35 -1
  572. package/scripts/gh/git-pr-checks-failed.ts +24 -0
  573. package/scripts/hooks/implementation-shell-deny-expansion.ts +20 -0
  574. package/scripts/hooks/implementation-shell-deny-git.ts +128 -0
  575. package/scripts/hooks/implementation-shell-deny.ts +14 -138
  576. package/scripts/hooks/implementation-shell.ts +28 -5
  577. package/scripts/hooks/step-zero-notice.ts +9 -6
  578. package/scripts/hooks/stop-actions.ts +4 -2
  579. package/scripts/init/init-logic-workspace.ts +1 -1
  580. package/scripts/issue/issue-auto-ok.ts +43 -4
  581. package/scripts/issue/issue-body-keys.ts +4 -0
  582. package/scripts/issue/issue-comment-cli.ts +15 -2
  583. package/scripts/issue/issue-evidence-exit.ts +6 -2
  584. package/scripts/issue/issue-file-cli.ts +5 -1
  585. package/scripts/issue/issue-file-pass.ts +14 -7
  586. package/scripts/issue/issue-file-worker.ts +95 -0
  587. package/scripts/issue/issue-file.ts +1 -1
  588. package/scripts/issue/issue-outcome.ts +107 -0
  589. package/scripts/issue/issue-read.ts +12 -7
  590. package/scripts/issue/issue-watch-diff.ts +2 -1
  591. package/scripts/josh/josh-commands-ai.ts +2 -2
  592. package/scripts/josh/josh-commands-development.ts +21 -5
  593. package/scripts/josh/josh-commands-issue-write.ts +3 -2
  594. package/scripts/josh/josh-commands-lint.ts +1 -1
  595. package/scripts/josh/josh-commands-project.ts +7 -2
  596. package/scripts/josh/josh-commands-run.ts +10 -2
  597. package/scripts/josh/josh-commands-workflow.ts +5 -0
  598. package/scripts/lane/lane-breakdown-cli.ts +14 -4
  599. package/scripts/lane/lane-breakdown-text.ts +7 -0
  600. package/scripts/lane/lane-breakdown.ts +21 -1
  601. package/scripts/lane/lane-dispatch-prepare.ts +83 -0
  602. package/scripts/lane/lane-dispatch.ts +3 -53
  603. package/scripts/lane/lane-elapsed-time.ts +118 -0
  604. package/scripts/lane/lane-ledger-schema-ship.ts +4 -1
  605. package/scripts/lane/lane-net-time.ts +35 -7
  606. package/scripts/lane/lane-overrun.ts +1 -1
  607. package/scripts/lane/lane-plan-cli.ts +7 -3
  608. package/scripts/lane/lane-plan-estimate.ts +57 -0
  609. package/scripts/lane/lane-plan-size.ts +11 -20
  610. package/scripts/lane/lane-plan.ts +1 -0
  611. package/scripts/lane/lane-relaunch.ts +9 -4
  612. package/scripts/lane/lane-stage-budget.ts +6 -1
  613. package/scripts/lane/lane-stage-events.ts +103 -0
  614. package/scripts/lane/lane-stats-tables.ts +3 -0
  615. package/scripts/lane/lane-stop-check-stats.ts +117 -0
  616. package/scripts/lane/lane-stop-stats.ts +30 -6
  617. package/scripts/lane/lane-why-causes.ts +3 -11
  618. package/scripts/lane/openai-lane-supervisor-owner.ts +12 -0
  619. package/scripts/lane/openai-lane-supervisor.ts +36 -1
  620. package/scripts/lib/home-tilde.ts +24 -0
  621. package/scripts/lib/package-manifest.ts +27 -1
  622. package/scripts/observations/observation-ledger-archive.ts +180 -0
  623. package/scripts/observations/observation-ledger-home.ts +1 -0
  624. package/scripts/observations/observation-ledger.ts +5 -0
  625. package/scripts/observations/observations-flush-transaction.ts +358 -0
  626. package/scripts/observations/observations-flush.ts +72 -172
  627. package/scripts/plan/plan-scaffold-cli.ts +17 -6
  628. package/scripts/plan/plan-scaffold.ts +11 -0
  629. package/scripts/release/github-release-notes.ts +24 -0
  630. package/scripts/release/github-release-runs.ts +32 -6
  631. package/scripts/release/github-release.ts +10 -2
  632. package/scripts/release/release-progress.ts +22 -10
  633. package/scripts/release/release-publish-run.ts +39 -6
  634. package/scripts/repo/repository-labels.ts +23 -11
  635. package/scripts/review/review-comment-round.ts +10 -5
  636. package/scripts/rules/broad-investigation-shell.ts +2 -2
  637. package/scripts/rules/codex-prompt.ts +63 -0
  638. package/scripts/rules/direct-issue-comment.ts +62 -2
  639. package/scripts/rules/direct-issue-read.ts +55 -2
  640. package/scripts/rules/guard-remedy.ts +10 -4
  641. package/scripts/rules/issue-citation.ts +20 -9
  642. package/scripts/rules/last-prompt.ts +8 -4
  643. package/scripts/rules/rule-value-cli.ts +85 -4
  644. package/scripts/rules/rule-value-trend.ts +108 -0
  645. package/scripts/rules/shell-redirects.ts +19 -7
  646. package/scripts/rules/shell-segments.ts +145 -20
  647. package/scripts/rules/shell-tokens.ts +66 -0
  648. package/scripts/rules/standalone-gh-call.ts +63 -0
  649. package/scripts/rules/unasked-filing.ts +12 -4
  650. package/scripts/run/board/run-board-closed.ts +10 -1
  651. package/scripts/run/board/run-board-decision-read.ts +52 -12
  652. package/scripts/run/board/run-board-decision.ts +5 -0
  653. package/scripts/run/board/run-board-ending-reason.ts +21 -7
  654. package/scripts/run/board/run-board-github.ts +8 -1
  655. package/scripts/run/board/run-board-layout.ts +5 -3
  656. package/scripts/run/board/run-board-link.ts +2 -0
  657. package/scripts/run/board/run-board-operation.ts +6 -2
  658. package/scripts/run/board/run-board-pause-fixture.json +12 -0
  659. package/scripts/run/board/run-board-pause.ts +87 -0
  660. package/scripts/run/board/run-board-plan-shared.ts +2 -0
  661. package/scripts/run/board/run-board-render-condition.ts +10 -1
  662. package/scripts/run/board/run-board-render-title.ts +7 -0
  663. package/scripts/run/board/run-board-settle.ts +16 -2
  664. package/scripts/run/board/run-board-snapshot.ts +4 -0
  665. package/scripts/run/board/run-board-status.ts +11 -1
  666. package/scripts/run/cut/run-cut-cli.ts +2 -1
  667. package/scripts/run/park/run-park-cli.ts +13 -1
  668. package/scripts/run/park/run-park-escalate.ts +102 -0
  669. package/scripts/run/park/run-stalled.ts +29 -7
  670. package/scripts/run/review/run-review-early-push.ts +6 -6
  671. package/scripts/run/ship/run-ship-stop-cause.ts +12 -1
  672. package/scripts/split/split-assess.ts +14 -5
  673. package/scripts/test/test-related-touched.ts +21 -3
  674. package/scripts/test/test-related.ts +1 -1
  675. package/dist/commands/chunk-6WEVLIZE.js +0 -29
  676. package/dist/commands/chunk-E2ZCUKHT.js +0 -274
  677. package/dist/commands/chunk-NMLCPYBN.js +0 -134
  678. package/dist/commands/chunk-QEIO2ZNQ.js +0 -324
  679. package/dist/commands/chunk-QWX7EBC6.js +0 -112
  680. package/dist/commands/chunk-RQRLW4XK.js +0 -20
  681. package/dist/commands/chunk-UCQJDYE3.js +0 -21
  682. package/dist/commands/chunk-W4YH2DF3.js +0 -58
  683. package/dist/commands/{chunk-LRA3PXHS.js → chunk-ENKFCOVY.js} +3 -3
  684. package/dist/commands/{chunk-RUWV4INF.js → chunk-HQGNXR6I.js} +3 -3
@@ -5,6 +5,7 @@ import { document_section } from '#scripts/document/document-section'
5
5
  import { distributed_paths } from '#scripts/init/distributed-paths'
6
6
  import { find_package_directory } from '#scripts/josh/package-directory'
7
7
  import { stamp_file } from '#scripts/josh/stamp-file'
8
+ import { run_park_escalate } from '#scripts/run/park/run-park-escalate'
8
9
 
9
10
  interface LaneSet {
10
11
  text: string
@@ -28,6 +29,14 @@ const SETTINGS_FLAG = '--settings'
28
29
  const PROMPT_FILE_PREFIX = 'josh-lane-instructions-'
29
30
  const PROMPT_FILE_SUFFIX = '.md'
30
31
  const PACKAGE_DIRECTORY = find_package_directory(path.dirname(fileURLToPath(import.meta.url)))
32
+ // Appended only where `josh.worker.escalate` is true, so a repository without it keeps today's text
33
+ // to the byte (joshuafolkken/kit#7356).
34
+ const ESCALATION_GUIDE = [
35
+ '',
36
+ '## Escalation',
37
+ '',
38
+ '- This Issue needs a stronger model than the one you run on → `pnpm josh run:park <N> --escalate "<reason>"`, then stop. The reason is required and recorded; the lane resumes one profile up, or goes to a person at the top profile.',
39
+ ].join('\n')
31
40
 
32
41
  // An include that resolves to nothing is `undefined`, never an empty string, so a renamed heading
33
42
  // fails the whole composition rather than silently dropping a rule.
@@ -63,7 +72,7 @@ function composed_from(lane_markdown: string, rules_path: string): string | unde
63
72
  return rules === undefined ? undefined : compose(lane_markdown, rules)
64
73
  }
65
74
 
66
- function composed_set(cwd: string, package_directory: string): LaneSet | undefined {
75
+ function rules_set(cwd: string, package_directory: string): LaneSet | undefined {
67
76
  const lane_markdown = document_section.read_optional(path.join(package_directory, LANE_DOCUMENT))
68
77
 
69
78
  if (lane_markdown === undefined) return undefined
@@ -77,6 +86,19 @@ function composed_set(cwd: string, package_directory: string): LaneSet | undefin
77
86
  return undefined
78
87
  }
79
88
 
89
+ // Only a worker can declare an escalation: a review session never parks the Issue it reads.
90
+ function composed_set(
91
+ cwd: string,
92
+ package_directory: string,
93
+ is_worker = false,
94
+ ): LaneSet | undefined {
95
+ const set = rules_set(cwd, package_directory)
96
+
97
+ if (set === undefined || !is_worker || !run_park_escalate.is_enabled(cwd)) return set
98
+
99
+ return { ...set, text: `${set.text}${ESCALATION_GUIDE}` }
100
+ }
101
+
80
102
  function composed_in(
81
103
  cwd: string,
82
104
  package_directory: string = PACKAGE_DIRECTORY,
@@ -108,8 +130,7 @@ function excluded_settings(rules_path: string, cwd: string): string {
108
130
 
109
131
  // No flags when the set cannot be composed or safely written: the child then loads `CLAUDE.md` as
110
132
  // before, which costs tokens but never loses a rule.
111
- function flags(cwd: string = process.cwd()): ReadonlyArray<string> {
112
- const set = composed_set(cwd, PACKAGE_DIRECTORY)
133
+ function flags_of(set: LaneSet | undefined, cwd: string): ReadonlyArray<string> {
113
134
  const prompt_file = set === undefined ? undefined : written(set.text)
114
135
 
115
136
  if (set === undefined || prompt_file === undefined) return []
@@ -117,6 +138,11 @@ function flags(cwd: string = process.cwd()): ReadonlyArray<string> {
117
138
  return [PROMPT_FILE_FLAG, prompt_file, SETTINGS_FLAG, excluded_settings(set.rules_path, cwd)]
118
139
  }
119
140
 
141
+ // `is_worker` adds the escalation guide where the repository allows one (joshuafolkken/kit#7356).
142
+ function flags(cwd: string = process.cwd(), is_worker = false): ReadonlyArray<string> {
143
+ return flags_of(composed_set(cwd, PACKAGE_DIRECTORY, is_worker), cwd)
144
+ }
145
+
120
146
  function tokens_of(text: string): string {
121
147
  return cost_tokens.estimate(text).toLocaleString('en-US')
122
148
  }
@@ -67,6 +67,9 @@ function parse_request(argv: ReadonlyArray<string>): JudgeRequest | undefined {
67
67
  }
68
68
 
69
69
  async function list(): Promise<number> {
70
+ console.error(
71
+ 'Judge original user instructions separately from automated plans and prior decisions; kickoff planning alone is not an opt-out. Verify the reference and verbatim prohibition under 自動実行の制約 before treating it as a user constraint (docs/how-to/auto-ok-provenance.md).',
72
+ )
70
73
  const owed = await auto_ok_judge_read.owed()
71
74
 
72
75
  if (owed === undefined) {
@@ -89,7 +89,8 @@ async function apply_to(
89
89
  read: IssueRead,
90
90
  answers: RunLabelFlags,
91
91
  ): Promise<number> {
92
- const exclusion = issue_auto_ok.exclusion_of(read.labels)
92
+ const exclusion =
93
+ issue_auto_ok.exclusion_of(read.labels) ?? issue_auto_ok.user_constraint_of(read.body)
93
94
 
94
95
  if (exclusion !== undefined) return refused(issue, issue_auto_ok.line_of(exclusion))
95
96
 
@@ -26,9 +26,11 @@ interface JudgeIssue {
26
26
  is_trusted: boolean
27
27
  }
28
28
 
29
- const MARKER_PREFIX = '<!-- josh:auto-ok-judged body='
29
+ // Legacy records owe one reading under the provenance contract. Current records still use the
30
+ // existing body/person-comment invalidation, rather than re-judging every issue on every offer.
31
+ const MARKER_PREFIX = '<!-- josh:auto-ok-judged v=2 body='
30
32
  const MARKER_SUFFIX = ' -->'
31
- const MARKER_PATTERN = /<!-- josh:auto-ok-judged body=(?<digest>[\da-f]+) -->/u
33
+ const MARKER_PATTERN = /<!-- josh:auto-ok-judged v=2 body=(?<digest>[\da-f]+) -->/u
32
34
  const DIGEST_LENGTH = 16
33
35
  const CRLF = '\r\n'
34
36
  const LF = '\n'
@@ -0,0 +1,115 @@
1
+ import {
2
+ agent_worker_profile,
3
+ type WorkerProfile,
4
+ type WorkerSettings,
5
+ } from '#scripts/agent/agent-worker-profile'
6
+ import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
7
+ import { issue_cite } from '#scripts/issue/issue-cite'
8
+ import { NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
9
+ import { issue_park } from '#scripts/issue/issue-park'
10
+
11
+ // joshuafolkken/kit#7357: a worker's escalation park (joshuafolkken/kit#7356) resumes the same lane one
12
+ // `josh.worker` profile up. The Issue's `worker:<name>` label moves to the next profile, so the
13
+ // re-dispatch resolves it and records it in the lane's `.env`, and every later resume keeps it. At the
14
+ // top profile the Issue goes to a person. A repository without `josh.worker.escalate` is left as before.
15
+
16
+ interface EscalatePorts {
17
+ labels: () => Promise<ReadonlyArray<string> | undefined>
18
+ retry: (issue: number) => Promise<void>
19
+ }
20
+
21
+ interface Move {
22
+ from: WorkerProfile
23
+ to: WorkerProfile
24
+ }
25
+
26
+ function label_of(worker: WorkerProfile): string {
27
+ return `${agent_worker_profile.LABEL_PREFIX}${worker.name}`
28
+ }
29
+
30
+ function enabled_settings(directory: string): WorkerSettings | undefined {
31
+ const result = agent_worker_profile.read(directory)
32
+ if (result.kind !== 'settings') return undefined
33
+
34
+ return result.settings.escalate ? result.settings : undefined
35
+ }
36
+
37
+ async function current_worker(
38
+ settings: WorkerSettings,
39
+ read_labels: EscalatePorts['labels'],
40
+ ): Promise<WorkerProfile | undefined> {
41
+ const labels = await read_labels()
42
+ if (labels === undefined) return undefined
43
+ const result = agent_worker_profile.for_labels(settings, labels)
44
+
45
+ return result.kind === 'worker' ? result.worker : undefined
46
+ }
47
+
48
+ // The new label goes on before the old one comes off: a failure in between leaves two `worker:` labels,
49
+ // which the dispatch refuses, never a lane resumed on the old profile.
50
+ async function relabel(issue: string, move: Move): Promise<boolean> {
51
+ if (!(await git_gh_issue_write.issue_add_label(issue, label_of(move.to)))) return false
52
+
53
+ return await git_gh_issue_write.issue_clear_label(issue, label_of(move.from))
54
+ }
55
+
56
+ function agent_of(worker: WorkerProfile): string {
57
+ return `${worker.agent.model} / ${worker.agent.effort}`
58
+ }
59
+
60
+ function step_note(move: Move, reason: string): string {
61
+ return [
62
+ `Escalated the worker from \`${label_of(move.from)}\` (${agent_of(move.from)}) to \`${label_of(move.to)}\` (${agent_of(move.to)}); the lane resumes in the same worktree.`,
63
+ `- Reason: ${reason}`,
64
+ ].join('\n')
65
+ }
66
+
67
+ async function step_up(
68
+ issue: number,
69
+ move: Move,
70
+ reason: string,
71
+ retry: EscalatePorts['retry'],
72
+ ): Promise<void> {
73
+ if (!(await relabel(String(issue), move))) {
74
+ console.error(
75
+ `Could not move ${issue_cite.plain_for('program', issue)} to ${label_of(move.to)}. Left for a person.`,
76
+ )
77
+
78
+ return
79
+ }
80
+
81
+ await git_gh_issue_write.issue_try_comment(String(issue), step_note(move, reason))
82
+ await retry(issue)
83
+ }
84
+
85
+ function top_note(top: WorkerProfile, reason: string): string {
86
+ return [
87
+ `Parked with \`${NEEDS_DECISION_LABEL}\`: the worker asked for a stronger profile, but \`${label_of(top)}\` is the top of josh.worker.profiles.`,
88
+ `- Reason: ${reason}`,
89
+ '- Next: a person decides how to go on.',
90
+ ].join('\n')
91
+ }
92
+
93
+ async function hand_over(issue: number, top: WorkerProfile, reason: string): Promise<void> {
94
+ await issue_park.apply(String(issue), NEEDS_DECISION_LABEL, top_note(top, reason))
95
+ }
96
+
97
+ // The settings are read before the labels, so a repository without escalation costs no GitHub read.
98
+ async function escalate(
99
+ issue: number,
100
+ reason: string,
101
+ ports: EscalatePorts,
102
+ directory = process.cwd(),
103
+ ): Promise<void> {
104
+ const settings = enabled_settings(directory)
105
+ if (settings === undefined) return
106
+ const from = await current_worker(settings, ports.labels)
107
+ if (from === undefined) return
108
+ const to = agent_worker_profile.next(settings, from)
109
+
110
+ await (to === undefined
111
+ ? hand_over(issue, from, reason)
112
+ : step_up(issue, { from, to }, reason, ports.retry))
113
+ }
114
+
115
+ export const backlog_drive_escalate = { escalate }
@@ -19,6 +19,7 @@ import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
19
19
  import { run_stalled } from '#scripts/run/park/run-stalled'
20
20
  import { run_ship_stage } from '#scripts/run/ship/run-ship-stage'
21
21
  import { backlog_budget } from './backlog-budget'
22
+ import { backlog_drive_escalate } from './backlog-drive-escalate'
22
23
  import { backlog_drive_retry } from './backlog-drive-retry'
23
24
  import { backlog_yield_cap } from './backlog-yield-cap'
24
25
 
@@ -26,11 +27,13 @@ import { backlog_yield_cap } from './backlog-yield-cap'
26
27
  // park whose check shows its cause gone — through `run:add --retry`, at most `RETRY_CAP` times per
27
28
  // issue, counted off the whole stream so a restarted drive counts the retries before it. A recorded
28
29
  // ship stop is checked by its stage; a park with no stop by its cause: `run:merge`'s three wait for the
29
- // next sweep, a yield-cap park for its window. Any other park, or a protected label, stays for a person;
30
+ // next sweep, a yield-cap park for its window. A worker's escalation park is resumed one `josh.worker`
31
+ // profile up (`backlog-drive-escalate.ts`). Any other park, or a protected label, stays for a person;
30
32
  // one at the cap is restated once with `CAP_NOTE` and its cause, which its board row shows.
31
33
 
32
34
  const RETRY_CAP = 2
33
35
  const CAP_NOTE = `auto-retry cap ${String(RETRY_CAP)} reached`
36
+ const RESUME_REFUSED = 'escalated one profile up, but run:add refused the resume'
34
37
  const { PARK } = run_event_stream.EVENT_KIND
35
38
  const last_sweep = { at: -Infinity }
36
39
 
@@ -95,19 +98,23 @@ function latest_parks(events: ReadonlyArray<RunEvent>): ReadonlyMap<number, RunE
95
98
  return parks
96
99
  }
97
100
 
98
- // Still open, still `run:stalled` and free of a protected label `run:add` would refuse. An issue that
99
- // cannot be read is not re-offered.
100
- async function is_still_stalled(issue: number): Promise<boolean> {
101
+ // The labels of an issue still open, still `run:stalled` and free of a protected label `run:add` would
102
+ // refuse, else `undefined`. An issue that cannot be read is not re-offered.
103
+ async function stalled_labels(issue: number): Promise<ReadonlyArray<string> | undefined> {
101
104
  const read = await run_add_issue.read(issue)
102
105
 
103
- if (read === undefined) return false
106
+ if (read === undefined) return undefined
104
107
  const labels = epic_issue.label_names(read)
105
-
106
- return (
108
+ const is_stalled =
107
109
  epic_issue.is_open(read.state) &&
108
110
  has_label_name(labels, RUN_STALLED_LABEL) &&
109
111
  run_add.protected_label(labels) === undefined
110
- )
112
+
113
+ return is_stalled ? labels : undefined
114
+ }
115
+
116
+ async function is_still_stalled(issue: number): Promise<boolean> {
117
+ return (await stalled_labels(issue)) !== undefined
111
118
  }
112
119
 
113
120
  // The check a park's recorded stop has, or with no stop its cause; none for a stage or cause with no
@@ -137,14 +144,18 @@ async function note_cap(issue: number, park: RunEvent): Promise<void> {
137
144
 
138
145
  // A refused `run:add` (a settled or withdrawn issue, an unreadable lane, a failed label write) leaves the
139
146
  // park for a person instead of ending the drive.
140
- async function retry_cleared(issue: number): Promise<void> {
147
+ async function retry_cleared(issue: number): Promise<boolean> {
141
148
  try {
142
149
  await backlog_drive_retry.add_retry(
143
150
  issue,
144
151
  `${issue_cite.plain_for('program', issue)} automatically`,
145
152
  )
153
+
154
+ return true
146
155
  } catch (error) {
147
156
  console.error(`${String(error)} Left for a person.`)
157
+
158
+ return false
148
159
  }
149
160
  }
150
161
 
@@ -170,6 +181,33 @@ async function retry_park(issue: number, park: RunEvent, context: SweepContext):
170
181
  await (is_capped ? note_cap(issue, park) : retry_cleared(issue))
171
182
  }
172
183
 
184
+ function is_escalation(park: RunEvent): boolean {
185
+ const cause = run_stalled.cause_in(park.text) ?? ''
186
+
187
+ return run_stalled.class_of(cause) === run_stalled.ESCALATION_REQUESTED.short
188
+ }
189
+
190
+ // A refused resume restates the park with a cause of its own, so the next sweep does not read the
191
+ // escalation again and step the already moved label up a second time.
192
+ async function resume_escalated(issue: number): Promise<void> {
193
+ if (await retry_cleared(issue)) return
194
+
195
+ await run_event_stream_emit.emit(PARK, run_stalled.park_event(issue, RESUME_REFUSED))
196
+ }
197
+
198
+ // A worker's escalation is not retried on its profile but resumed one up (joshuafolkken/kit#7357);
199
+ // the retry cap does not count it, since the profile order bounds it.
200
+ async function escalate_park(issue: number, park: RunEvent): Promise<void> {
201
+ await backlog_drive_escalate.escalate(issue, run_stalled.cause_in(park.text) ?? '', {
202
+ labels: async () => await stalled_labels(issue),
203
+ retry: resume_escalated,
204
+ })
205
+ }
206
+
207
+ async function settle_park(issue: number, park: RunEvent, context: SweepContext): Promise<void> {
208
+ await (is_escalation(park) ? escalate_park(issue, park) : retry_park(issue, park, context))
209
+ }
210
+
173
211
  async function retry_all(
174
212
  parks: ReadonlyArray<[number, RunEvent]>,
175
213
  context: SweepContext,
@@ -177,7 +215,7 @@ async function retry_all(
177
215
  const [first, ...rest] = parks
178
216
 
179
217
  if (first === undefined) return
180
- await retry_park(first[0], first[1], context)
218
+ await settle_park(first[0], first[1], context)
181
219
  await retry_all(rest, context)
182
220
  }
183
221
 
@@ -6,6 +6,13 @@
6
6
  // would otherwise read "will" as a command name.
7
7
  const COMMAND_PATTERN = /`(?:pnpm )?josh ([a-z][a-z0-9:-]+)/gu
8
8
 
9
+ // A flag a command reference passes — `` `pnpm josh ship --detach` `` — read up to the next shell
10
+ // separator, so a flag of a chained command is not read as this command's (#7331).
11
+ const CODE_SPAN_PATTERN = /`([^`\n]+)`/gu
12
+ const COMMAND_SEPARATOR_PATTERN = /&&|\|\||[|;]/u
13
+ const INVOCATION_PATTERN = /\bjosh ([a-z][a-z0-9:-]+)/u
14
+ const FLAG_PATTERN = /(?<![\w-])--[a-z][a-z0-9-]*/gu
15
+
9
16
  // A label the documents operate on — applied (`labels[]=…`), removed (`…/labels/<name>`) or created
10
17
  // (`labels -f name=…`). Prose that merely names a label is not scanned; a mistyped name only breaks
11
18
  // where a command carries it.
@@ -54,6 +61,26 @@ function command_references(text: string): Array<string> {
54
61
  .filter((name) => !name.endsWith(':'))
55
62
  }
56
63
 
64
+ // The long flags a text spells, without a `=value`: `--shard=<n>` reads as `--shard`.
65
+ function flag_names(text: string): Array<string> {
66
+ return text.match(FLAG_PATTERN) ?? []
67
+ }
68
+
69
+ function invocation_flags(segment: string): Array<FlagReference> {
70
+ const match = INVOCATION_PATTERN.exec(segment)
71
+ if (match === null) return []
72
+ const [invocation, command = ''] = match
73
+ const rest = segment.slice(match.index + invocation.length)
74
+
75
+ return flag_names(rest).map((flag) => ({ command, flag }))
76
+ }
77
+
78
+ function command_flag_references(text: string): Array<FlagReference> {
79
+ return matches(text, CODE_SPAN_PATTERN)
80
+ .flatMap((span) => (span[1] ?? '').split(COMMAND_SEPARATOR_PATTERN))
81
+ .flatMap((segment) => invocation_flags(segment))
82
+ }
83
+
57
84
  // A `<placeholder>` inside a command, and `label:<n>` after the char class stops at `<`, both leave a
58
85
  // token that is not a real label. Real labels never end in a colon and never carry angle brackets.
59
86
  function is_real_label(token: string): boolean {
@@ -79,6 +106,11 @@ interface SectionReference {
79
106
  heading: string
80
107
  }
81
108
 
109
+ interface FlagReference {
110
+ command: string
111
+ flag: string
112
+ }
113
+
82
114
  function section_references(text: string): Array<SectionReference> {
83
115
  return matches(text.replaceAll(LINK_TARGET_PATTERN, ''), SECTION_PATTERN)
84
116
  .map(({ groups }) => ({ file: groups?.['file'] ?? '', heading: groups?.['heading'] ?? '' }))
@@ -127,7 +159,9 @@ function reference_forms(title: string): Array<string> {
127
159
  const document_scan = {
128
160
  adjacent_references,
129
161
  bare_arrow_references,
162
+ command_flag_references,
130
163
  command_references,
164
+ flag_names,
131
165
  label_references,
132
166
  link_targets,
133
167
  normalize_reference,
@@ -135,5 +169,5 @@ const document_scan = {
135
169
  section_references,
136
170
  }
137
171
 
138
- export type { SectionReference }
172
+ export type { FlagReference, SectionReference }
139
173
  export { document_scan }
@@ -0,0 +1,24 @@
1
+ import { FAILURE_REASON_CHECKS } from './git-pr-checks-eval'
2
+
3
+ // The check names a failed checks wait reported — `git-pr-checks-eval.ts`'s `PR checks failed
4
+ // (failed checks: <a>, <b>; …).` — read back by `josh lane:why` from a ship log and by `josh ship` into
5
+ // a followup `check` stop's record (joshuafolkken/kit#7333). The list ends at the next reason or the
6
+ // closing `).`, so a matrix name such as `Unit Tests (3/6)` stays whole.
7
+
8
+ const FAILED_CHECKS = new RegExp(
9
+ String.raw`${FAILURE_REASON_CHECKS}: (?<names>.+?)(?=; |\)\.$)`,
10
+ 'gmu',
11
+ )
12
+ const NAME_SEPARATOR = ', '
13
+
14
+ // Every check name `text` lists as failed, in order, each list read whole.
15
+ function names_of(text: string): Array<string> {
16
+ return [...text.matchAll(FAILED_CHECKS)]
17
+ .flatMap((match) => (match.groups?.['names'] ?? '').split(NAME_SEPARATOR))
18
+ .map((name) => name.trim())
19
+ .filter((name) => name !== '')
20
+ }
21
+
22
+ const git_pr_checks_failed = { names_of }
23
+
24
+ export { git_pr_checks_failed }
@@ -0,0 +1,20 @@
1
+ // What every consultation-scope refusal group shares (joshuafolkken/kit#6586): the refusal's shape and
2
+ // the word the shell expands before the call, which may spell any write.
3
+
4
+ type Refusal = string | undefined
5
+
6
+ // A word the shell expands before the call, so it may spell any subcommand or flag.
7
+ const DYNAMIC = /[$`]/u
8
+
9
+ function is_dynamic(word: string): boolean {
10
+ return DYNAMIC.test(word)
11
+ }
12
+
13
+ function refusal(program: string, word: string): string {
14
+ return `\`${program} ${word}\`, an expansion that may spell a write`
15
+ }
16
+
17
+ const implementation_shell_deny_expansion = { is_dynamic, refusal }
18
+
19
+ export { implementation_shell_deny_expansion }
20
+ export type { Refusal }
@@ -0,0 +1,128 @@
1
+ import { git_argv } from '#scripts/rules/git-argv'
2
+ import {
3
+ implementation_shell_deny_expansion as expansion,
4
+ type Refusal,
5
+ } from './implementation-shell-deny-expansion'
6
+
7
+ // The git calls a consultation scope refuses before execution (joshuafolkken/kit#6586).
8
+
9
+ // Subcommands that move a ref, the index, the worktree or the shared stash in every spelling.
10
+ const GIT_WRITES: ReadonlySet<string> = new Set([
11
+ 'add',
12
+ 'am',
13
+ 'apply',
14
+ 'bisect',
15
+ 'checkout',
16
+ 'checkout-index',
17
+ 'cherry-pick',
18
+ 'clean',
19
+ 'commit',
20
+ 'credential',
21
+ 'fetch',
22
+ 'filter-branch',
23
+ 'gc',
24
+ 'init',
25
+ 'maintenance',
26
+ 'merge',
27
+ 'mv',
28
+ 'pack-refs',
29
+ 'prune',
30
+ 'prune-packed',
31
+ 'pull',
32
+ 'push',
33
+ 'read-tree',
34
+ 'rebase',
35
+ 'repack',
36
+ 'replace',
37
+ 'reset',
38
+ 'restore',
39
+ 'revert',
40
+ 'rm',
41
+ 'send-email',
42
+ 'sparse-checkout',
43
+ 'stage',
44
+ 'submodule',
45
+ 'switch',
46
+ 'symbolic-ref',
47
+ 'update-index',
48
+ 'update-ref',
49
+ ])
50
+ const BRANCH_CHANGE =
51
+ /^--(?:delete|move|copy|force|set-upstream-to|unset-upstream|edit-description)/u
52
+ const BRANCH_CHANGE_LETTERS = 'dDmMcCfu'
53
+ const CONFIG_READ = /^(?:--get|--list$|-l$)/u
54
+ // The flags that put `git branch` / `git tag` in list mode, where a name is a pattern, not a new ref.
55
+ const LIST_MODE =
56
+ /^(?:-l$|--list$|-n\d*$|--contains|--no-contains|--points-at|--merged|--no-merged)/u
57
+ // List flags whose value is the next word, so the value is not read as a new ref's name.
58
+ const LIST_VALUE_FLAGS: ReadonlySet<string> = new Set(['--sort', '--format'])
59
+ const REFLOG_WRITES: ReadonlySet<string> = new Set(['expire', 'delete'])
60
+ // A global that rewrites git's configuration or launcher, or an option that writes a file or runs one.
61
+ const GIT_WRITE_FLAGS = /^-c$|^--(?:config-env|exec-path|output|ext-diff|textconv)/u
62
+ const QUOTES = /['"\\]/gu
63
+
64
+ function is_branch_change(argument: string): boolean {
65
+ return BRANCH_CHANGE.test(argument) || git_argv.short_cluster_has(argument, BRANCH_CHANGE_LETTERS)
66
+ }
67
+
68
+ function names_a_reference(args: ReadonlyArray<string>): boolean {
69
+ return args.some(
70
+ (argument, index) => !argument.startsWith('-') && !LIST_VALUE_FLAGS.has(args[index - 1] ?? ''),
71
+ )
72
+ }
73
+
74
+ // `git branch` / `git tag` only list when no word names a new ref, or a flag puts them in list mode.
75
+ function is_listing(args: ReadonlyArray<string>): boolean {
76
+ return !names_a_reference(args) || args.some((argument) => LIST_MODE.test(argument))
77
+ }
78
+
79
+ // Subcommands with a read spelling: the predicate says whether the arguments only read.
80
+ const GIT_READ_FORMS: ReadonlyMap<string, (args: ReadonlyArray<string>) => boolean> = new Map([
81
+ ['branch', (args) => is_listing(args) && args.every((argument) => !is_branch_change(argument))],
82
+ ['stash', (args) => ['list', 'show'].includes(args[0] ?? '')],
83
+ ['worktree', (args) => args[0] === 'list'],
84
+ ['notes', (args) => ['list', 'show'].includes(args[0] ?? '')],
85
+ ['remote', (args) => ['', '-v', 'show', 'get-url'].includes(args[0] ?? '')],
86
+ ['config', (args) => args.some((argument) => CONFIG_READ.test(argument))],
87
+ ['tag', is_listing],
88
+ ['reflog', (args) => !REFLOG_WRITES.has(args[0] ?? '')],
89
+ ])
90
+
91
+ // A read spelling holds only when every argument is literal: an expanded one may be `-D` or `expire`.
92
+ function is_git_write(subcommand: string, args: ReadonlyArray<string>): boolean {
93
+ if (GIT_WRITES.has(subcommand)) return true
94
+
95
+ const read_form = GIT_READ_FORMS.get(subcommand)
96
+ if (read_form === undefined) return false
97
+
98
+ return args.some((argument) => expansion.is_dynamic(argument)) || !read_form(args)
99
+ }
100
+
101
+ // A quoted program runs as the bare one: `"git" push` is `git push`.
102
+ function parsed_git(segment: string): ReturnType<typeof git_argv.parse> {
103
+ return git_argv.parse(segment) ?? git_argv.parse(segment.replaceAll(QUOTES, ''))
104
+ }
105
+
106
+ // A quoted subcommand runs as the bare one too: `git 'push'` is `git push`.
107
+ function subcommand_refusal(segment: string): Refusal {
108
+ const call = parsed_git(segment)
109
+ if (call?.subcommand === undefined) return undefined
110
+ if (expansion.is_dynamic(call.subcommand)) return expansion.refusal('git', call.subcommand)
111
+
112
+ const subcommand = call.subcommand.replaceAll(QUOTES, '')
113
+ const args = call.args.map((argument) => argument.replaceAll(QUOTES, ''))
114
+
115
+ return is_git_write(subcommand, args) ? `\`git ${subcommand}\`, a git write` : undefined
116
+ }
117
+
118
+ function refusal(segment: string, args: ReadonlyArray<string>): Refusal {
119
+ if (args.some((argument) => GIT_WRITE_FLAGS.test(argument))) {
120
+ return 'a git option that rewrites its configuration, runs a program or writes a file'
121
+ }
122
+
123
+ return subcommand_refusal(segment)
124
+ }
125
+
126
+ const implementation_shell_deny_git = { refusal }
127
+
128
+ export { implementation_shell_deny_git }