@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,103 +1,18 @@
1
1
  import { canonical_command } from '#scripts/josh/josh-aliases'
2
2
  import { josh_read_only } from '#scripts/josh/josh-read-only'
3
3
  import { gh_api } from '#scripts/rules/gh-api'
4
- import { git_argv, type ProgramCall } from '#scripts/rules/git-argv'
4
+ import type { ProgramCall } from '#scripts/rules/git-argv'
5
+ import {
6
+ implementation_shell_deny_expansion as expansion,
7
+ type Refusal,
8
+ } from './implementation-shell-deny-expansion'
9
+ import { implementation_shell_deny_git } from './implementation-shell-deny-git'
5
10
 
6
11
  // The calls a consultation scope refuses before execution (joshuafolkken/kit#6586): the ones no
7
12
  // later check can take back. Every other call runs — a runtime file it changes is restored after the
8
13
  // call (`bash-revert.ts`), but a ref, the shared stash, a GitHub record or an installed dependency is
9
14
  // not a runtime file.
10
15
 
11
- type Refusal = string | undefined
12
-
13
- // Subcommands that move a ref, the index, the worktree or the shared stash in every spelling.
14
- const GIT_WRITES: ReadonlySet<string> = new Set([
15
- 'add',
16
- 'am',
17
- 'apply',
18
- 'bisect',
19
- 'checkout',
20
- 'checkout-index',
21
- 'cherry-pick',
22
- 'clean',
23
- 'commit',
24
- 'credential',
25
- 'fetch',
26
- 'filter-branch',
27
- 'gc',
28
- 'init',
29
- 'maintenance',
30
- 'merge',
31
- 'mv',
32
- 'pack-refs',
33
- 'prune',
34
- 'prune-packed',
35
- 'pull',
36
- 'push',
37
- 'read-tree',
38
- 'rebase',
39
- 'repack',
40
- 'replace',
41
- 'reset',
42
- 'restore',
43
- 'revert',
44
- 'rm',
45
- 'send-email',
46
- 'sparse-checkout',
47
- 'stage',
48
- 'submodule',
49
- 'switch',
50
- 'symbolic-ref',
51
- 'update-index',
52
- 'update-ref',
53
- ])
54
- const BRANCH_CHANGE =
55
- /^--(?:delete|move|copy|force|set-upstream-to|unset-upstream|edit-description)/u
56
- const BRANCH_CHANGE_LETTERS = 'dDmMcCfu'
57
- const CONFIG_READ = /^(?:--get|--list$|-l$)/u
58
- // The flags that put `git branch` / `git tag` in list mode, where a name is a pattern, not a new ref.
59
- const LIST_MODE =
60
- /^(?:-l$|--list$|-n\d*$|--contains|--no-contains|--points-at|--merged|--no-merged)/u
61
- // List flags whose value is the next word, so the value is not read as a new ref's name.
62
- const LIST_VALUE_FLAGS: ReadonlySet<string> = new Set(['--sort', '--format'])
63
- const REFLOG_WRITES: ReadonlySet<string> = new Set(['expire', 'delete'])
64
- // A global that rewrites git's configuration or launcher, or an option that writes a file or runs one.
65
- const GIT_WRITE_FLAGS = /^-c$|^--(?:config-env|exec-path|output|ext-diff|textconv)/u
66
- // A word the shell expands before the call, so it may spell any subcommand or flag.
67
- const DYNAMIC = /[$`]/u
68
- const QUOTES = /['"\\]/gu
69
-
70
- function is_dynamic(word: string): boolean {
71
- return DYNAMIC.test(word)
72
- }
73
-
74
- function is_branch_change(argument: string): boolean {
75
- return BRANCH_CHANGE.test(argument) || git_argv.short_cluster_has(argument, BRANCH_CHANGE_LETTERS)
76
- }
77
-
78
- function names_a_reference(args: ReadonlyArray<string>): boolean {
79
- return args.some(
80
- (argument, index) => !argument.startsWith('-') && !LIST_VALUE_FLAGS.has(args[index - 1] ?? ''),
81
- )
82
- }
83
-
84
- // `git branch` / `git tag` only list when no word names a new ref, or a flag puts them in list mode.
85
- function is_listing(args: ReadonlyArray<string>): boolean {
86
- return !names_a_reference(args) || args.some((argument) => LIST_MODE.test(argument))
87
- }
88
-
89
- // Subcommands with a read spelling: the predicate says whether the arguments only read.
90
- const GIT_READ_FORMS: ReadonlyMap<string, (args: ReadonlyArray<string>) => boolean> = new Map([
91
- ['branch', (args) => is_listing(args) && args.every((argument) => !is_branch_change(argument))],
92
- ['stash', (args) => ['list', 'show'].includes(args[0] ?? '')],
93
- ['worktree', (args) => args[0] === 'list'],
94
- ['notes', (args) => ['list', 'show'].includes(args[0] ?? '')],
95
- ['remote', (args) => ['', '-v', 'show', 'get-url'].includes(args[0] ?? '')],
96
- ['config', (args) => args.some((argument) => CONFIG_READ.test(argument))],
97
- ['tag', is_listing],
98
- ['reflog', (args) => !REFLOG_WRITES.has(args[0] ?? '')],
99
- ])
100
-
101
16
  // A verb that changes a GitHub record or the checkout. The first verb after the group is the call's,
102
17
  // so a flag between the group and the verb (`gh issue -R o/r close`) does not hide it, and a read
103
18
  // verb's argument (`gh issue list --search close`) is not read as one.
@@ -218,45 +133,6 @@ const JOSH_SHARED_WRITES: ReadonlySet<string> = new Set([
218
133
  'uninstall',
219
134
  ])
220
135
 
221
- function expansion_refusal(program: string, word: string): string {
222
- return `\`${program} ${word}\`, an expansion that may spell a write`
223
- }
224
-
225
- // A read spelling holds only when every argument is literal: an expanded one may be `-D` or `expire`.
226
- function is_git_write(subcommand: string, args: ReadonlyArray<string>): boolean {
227
- if (GIT_WRITES.has(subcommand)) return true
228
-
229
- const read_form = GIT_READ_FORMS.get(subcommand)
230
- if (read_form === undefined) return false
231
-
232
- return args.some((argument) => is_dynamic(argument)) || !read_form(args)
233
- }
234
-
235
- // A quoted program runs as the bare one: `"git" push` is `git push`.
236
- function parsed_git(segment: string): ReturnType<typeof git_argv.parse> {
237
- return git_argv.parse(segment) ?? git_argv.parse(segment.replaceAll(QUOTES, ''))
238
- }
239
-
240
- // A quoted subcommand runs as the bare one too: `git 'push'` is `git push`.
241
- function subcommand_refusal(segment: string): Refusal {
242
- const call = parsed_git(segment)
243
- if (call?.subcommand === undefined) return undefined
244
- if (is_dynamic(call.subcommand)) return expansion_refusal('git', call.subcommand)
245
-
246
- const subcommand = call.subcommand.replaceAll(QUOTES, '')
247
- const args = call.args.map((argument) => argument.replaceAll(QUOTES, ''))
248
-
249
- return is_git_write(subcommand, args) ? `\`git ${subcommand}\`, a git write` : undefined
250
- }
251
-
252
- function git_refusal(segment: string, args: ReadonlyArray<string>): Refusal {
253
- if (args.some((argument) => GIT_WRITE_FLAGS.test(argument))) {
254
- return 'a git option that rewrites its configuration, runs a program or writes a file'
255
- }
256
-
257
- return subcommand_refusal(segment)
258
- }
259
-
260
136
  function is_gh_api_write(args: ReadonlyArray<string>): boolean {
261
137
  if (args.includes('graphql')) return args.some((argument) => GRAPHQL_MUTATION.test(argument))
262
138
 
@@ -264,15 +140,15 @@ function is_gh_api_write(args: ReadonlyArray<string>): boolean {
264
140
  }
265
141
 
266
142
  function is_gh_verb(argument: string): boolean {
267
- return GH_WRITES.has(argument) || GH_READS.has(argument) || is_dynamic(argument)
143
+ return GH_WRITES.has(argument) || GH_READS.has(argument) || expansion.is_dynamic(argument)
268
144
  }
269
145
 
270
146
  function verb_refusal(group: string, args: ReadonlyArray<string>): Refusal {
271
147
  const verb = args.slice(1).find((argument) => is_gh_verb(argument))
272
148
  if (verb === undefined || GH_READS.has(verb)) return undefined
273
149
 
274
- return is_dynamic(verb)
275
- ? expansion_refusal(`gh ${group}`, verb)
150
+ return expansion.is_dynamic(verb)
151
+ ? expansion.refusal(`gh ${group}`, verb)
276
152
  : `\`gh ${group} ${verb}\`, a GitHub write`
277
153
  }
278
154
 
@@ -280,7 +156,7 @@ function gh_refusal(args: ReadonlyArray<string>): Refusal {
280
156
  const group = args[0] ?? ''
281
157
  if (group === 'api') return is_gh_api_write(args) ? 'a `gh api` call other than GET' : undefined
282
158
 
283
- return is_dynamic(group) ? expansion_refusal('gh', group) : verb_refusal(group, args)
159
+ return expansion.is_dynamic(group) ? expansion.refusal('gh', group) : verb_refusal(group, args)
284
160
  }
285
161
 
286
162
  function is_flag(argument: string): boolean {
@@ -308,7 +184,7 @@ function package_actions(call: ProgramCall): Array<string> {
308
184
  }
309
185
 
310
186
  function action_refusal(manager: string, action: string): Refusal {
311
- if (is_dynamic(action)) return expansion_refusal(manager, action)
187
+ if (expansion.is_dynamic(action)) return expansion.refusal(manager, action)
312
188
 
313
189
  return PACKAGE_WRITES.has(action) ? `\`${action}\`, a dependency change` : undefined
314
190
  }
@@ -321,7 +197,7 @@ function package_refusal(call: ProgramCall): Refusal {
321
197
 
322
198
  function josh_refusal(args: ReadonlyArray<string>): Refusal {
323
199
  const command = canonical_command(args[0] ?? '')
324
- if (is_dynamic(command)) return expansion_refusal('josh', command)
200
+ if (expansion.is_dynamic(command)) return expansion.refusal('josh', command)
325
201
  if (!JOSH_SHARED_WRITES.has(command)) return undefined
326
202
 
327
203
  const rule = josh_read_only.refusal(args)
@@ -331,8 +207,8 @@ function josh_refusal(args: ReadonlyArray<string>): Refusal {
331
207
 
332
208
  // The irreversible operation the call is, or `undefined` when it runs.
333
209
  function refusal(segment: string, call: ProgramCall): Refusal {
334
- if (is_dynamic(call.name)) return `\`${call.name}\`, a program an expansion names`
335
- if (call.name === 'git') return git_refusal(segment, call.args)
210
+ if (expansion.is_dynamic(call.name)) return `\`${call.name}\`, a program an expansion names`
211
+ if (call.name === 'git') return implementation_shell_deny_git.refusal(segment, call.args)
336
212
  if (call.name === 'gh') return gh_refusal(call.args)
337
213
  if (call.name === 'josh') return josh_refusal(call.args)
338
214
 
@@ -35,10 +35,27 @@ const DYNAMIC_PATH = /[$`*?{}\\]/u
35
35
  // runs: `if x; then git push; fi` and `(cd x && git push)` launch `git push`.
36
36
  const COMPOUND_HEAD = /^\s*(?:[({!]\s*|(?:if|then|else|elif|while|until|do)\s+)+/u
37
37
  const COMPOUND_CLOSERS = new Set([')', '}', ' ', '\t', '\n'])
38
- const KEYWORDS: ReadonlySet<string> = new Set(['for', 'do', 'done', 'then', 'else', 'fi', 'esac'])
39
- // A `case` arm or a function body sits behind a pattern or a name the cut does not read, so the line is
40
- // refused rather than guessed.
41
- const UNREAD_BODY = /^(?:case|select|function)\s|^[\w.:-]+\s*\(\s*\)/u
38
+ const KEYWORDS: ReadonlySet<string> = new Set([
39
+ 'for',
40
+ 'do',
41
+ 'done',
42
+ 'then',
43
+ 'else',
44
+ 'fi',
45
+ 'case',
46
+ 'select',
47
+ 'function',
48
+ 'esac',
49
+ ])
50
+ // The shared cut reads a `case` arm and a `{` function body as segments of their own
51
+ // (joshuafolkken/kit#7340). What it leaves unread — a function head with another body, or an arm
52
+ // pattern still on its segment — is refused rather than guessed.
53
+ const FUNCTION_START = /^(?:function\s|[\w.:-]+\s*\(\s*\))/u
54
+ // `body_of` has stripped the head's closing `)` and trailing blanks with the other closers.
55
+ const FUNCTION_HEAD = /^(?:function\s+)?[\w.:-]+(?:\s*\()?$/u
56
+ // An arm's command may touch its `)` (`b)git push`), so a `)` anywhere in the first word, outside an
57
+ // expansion, is a pattern.
58
+ const UNREAD_ARMS: ReadonlyArray<RegExp> = [/^case\s[\s\S]*\)/u, /^[^\s$`]*\)/u]
42
59
  const ARGUMENT_QUOTES = /['"\\]/gu
43
60
  const TIME_PROGRAM = /(?:^|\/)time$/u
44
61
  const TIME_WRITE = /^-(?:[A-Za-z]*o|-o)/u
@@ -174,9 +191,15 @@ function command_refusal(segment: string, root: string): Refusal {
174
191
  return call === undefined ? undefined : call_refusal(body_of(segment), call, root)
175
192
  }
176
193
 
194
+ function is_unread_body(body: string): boolean {
195
+ if (FUNCTION_START.test(body)) return !FUNCTION_HEAD.test(body)
196
+
197
+ return UNREAD_ARMS.some((pattern) => pattern.test(body))
198
+ }
199
+
177
200
  function segment_refusal(segment: string, root: string): Refusal {
178
201
  if (wrapper_writes(segment)) return 'a time output file'
179
- if (UNREAD_BODY.test(body_of(segment))) return 'a `case` arm or function body'
202
+ if (is_unread_body(body_of(segment))) return 'a `case` arm or function body'
180
203
 
181
204
  const target = redirected_paths(segment).find((redirected) => unsafe_path(redirected, root))
182
205
 
@@ -12,9 +12,9 @@ import { test_declared_logic } from '#scripts/test/test-declared-logic'
12
12
  // code", so the hook that delivers it is the one that sees that write: the first `Edit` / `Write` of a
13
13
  // runtime file in the session.
14
14
  //
15
- // **A runtime file only.** What counts is `test_declared_logic.is_exempt`, the same classification
16
- // `pnpm josh test:declared` answers at the commit, so a doc or prompt edit neither shows the notice nor
17
- // spends it. A path outside the working tree (a memory file, a scratchpad) is not this project's code.
15
+ // **A runtime file only.** `test_declared_logic.is_exempt` shares the commit-time classification;
16
+ // project scratch records in `.josh/tmp` are also non-runtime. A doc, prompt or scratch record neither
17
+ // shows the notice nor spends it. A path outside the working tree is not this project's code.
18
18
  //
19
19
  // **Once per session**, on a stamp keyed by the transcript like every other guard record here. A stamp
20
20
  // that cannot be written stays silent rather than repeating the notice on every edit.
@@ -44,8 +44,8 @@ function is_external(relative: string): boolean {
44
44
  return relative.startsWith(PARENT_PREFIX) || path.isAbsolute(relative)
45
45
  }
46
46
 
47
- function is_scratch_record(file_path: string): boolean {
48
- const relative = path.relative(tmpdir(), file_path)
47
+ function is_scratch_record(file_path: string, scratch_root = tmpdir()): boolean {
48
+ const relative = path.relative(scratch_root, file_path)
49
49
  const is_scratch = !is_external(relative)
50
50
 
51
51
  return is_scratch && ['.md', '.json', '.txt'].includes(path.extname(file_path))
@@ -66,7 +66,10 @@ function is_runtime_file(
66
66
  ): boolean {
67
67
  const relative = path.relative(root, path.resolve(root, file_path))
68
68
 
69
- if (should_skip_external(relative, path.resolve(root, file_path), should_include_external)) {
69
+ if (
70
+ is_scratch_record(path.resolve(root, file_path), path.join(root, '.josh/tmp')) ||
71
+ should_skip_external(relative, path.resolve(root, file_path), should_include_external)
72
+ ) {
70
73
  return false
71
74
  }
72
75
 
@@ -2,6 +2,7 @@ import { git_gh_repo } from '#scripts/gh/git-gh-repo'
2
2
  import { issue_cite } from '#scripts/issue/issue-cite'
3
3
  import { session_cite } from '#scripts/issue/session-cite'
4
4
  import { bounded_pool } from '#scripts/lib/bounded-pool'
5
+ import { home_tilde } from '#scripts/lib/home-tilde'
5
6
  import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
6
7
  import { telegram_test } from '#scripts/notify/telegram-test'
7
8
  import type { CliValues } from '#scripts/notify/telegram-test-logic'
@@ -71,13 +72,14 @@ async function issue_url_of(issue: string): Promise<string | undefined> {
71
72
  }
72
73
  }
73
74
 
74
- // The body is the reply's opening copied into a Telegram, so its bare `#N` are linked (`issue-citation.md`).
75
+ // The body is the reply's opening copied into a Telegram, so its bare `#N` are linked (`issue-citation.md`)
76
+ // and its home directory is written as `~` before the cut (joshuafolkken/kit#7342).
75
77
  // The choices are the reply's own decision lines (joshuafolkken/kit#3961).
76
78
  function notify_values(issue_url: string | undefined, action: NotifyAction): CliValues {
77
79
  const { recommended, alternative } = action.decision
78
80
  const values: CliValues = {
79
81
  'task-type': 'confirmation',
80
- body: session_cite.text(summary_of(action.message)),
82
+ body: session_cite.text(summary_of(home_tilde.mask(action.message))),
81
83
  recommended,
82
84
  ...(alternative !== undefined && { alternative: [alternative] }),
83
85
  }
@@ -155,7 +155,7 @@ function carry_npmrc_setting(template: string, npmrc: string, setting: MovedNpmr
155
155
  }
156
156
 
157
157
  // Lines kit's own install needs but a consumer must not receive, fenced by `# kit-only:start` and
158
- // `# kit-only:end` — e.g. an override that only works with a patch kit does not publish (#5500).
158
+ // `# kit-only:end` — e.g. a cross-major override of ESLint's dependencies (#5500).
159
159
  const KIT_ONLY_REGION_PATTERN =
160
160
  /^[ \t]*# kit-only:start\b.*\n(?:.*\n)*?[ \t]*# kit-only:end\b.*\n/gmu
161
161
 
@@ -16,11 +16,11 @@ import { markdown_section } from './markdown-section'
16
16
  // of an Issue already open reuses `exclusion_of` rather than a second list (joshuafolkken/kit#3854).
17
17
  // The order: `--no-auto-ok`, a filing to another repository (whose own `backlogrun` would implement
18
18
  // and merge it though nobody opted that repository in), a label that keeps a person in the loop, and
19
- // last the body's judgement declaration (`JUDGEMENT_NEEDED` / `JUDGEMENT_NOT_NEEDED`): whether a
19
+ // last the body's recorded user prohibition or judgement declaration (`JUDGEMENT_NEEDED` / `JUDGEMENT_NOT_NEEDED`): whether a
20
20
  // policy decision, an external account or a human visual check is needed.
21
21
 
22
22
  interface AutoOkFiling {
23
- // `--no-auto-ok`: the filer declared the Issue needs a person's judgement.
23
+ // `--no-auto-ok`: an existing exclusion or a verified original user prohibition.
24
24
  is_opted_out: boolean
25
25
  is_cross_repository: boolean
26
26
  // Every label the filing carries, including the ones the body's declarations add.
@@ -53,6 +53,26 @@ const APPLIED: AutoOkDecision = {
53
53
  is_applied: true,
54
54
  reason: 'no exclusion holds and the body declares no judgement is needed',
55
55
  }
56
+ const CONSTRAINT_HEADING = issue_body_keys.heading('auto_execution_constraint')
57
+ const CONSTRAINT_SOURCE = `${issue_body_keys.prefix('constraint_source')} user`
58
+ const CONSTRAINT_REFERENCE = `${issue_body_keys.prefix('constraint_reference')} `
59
+ const CONSTRAINT_INSTRUCTION = `${issue_body_keys.prefix('constraint_instruction')} `
60
+ const CONSTRAINT_FIELDS = [CONSTRAINT_REFERENCE, CONSTRAINT_INSTRUCTION]
61
+ const CONSTRAINT_PROBLEM = `--no-auto-ok without an exclusion needs ${CONSTRAINT_HEADING}: ${CONSTRAINT_SOURCE}, ${CONSTRAINT_REFERENCE}<original user prompt or comment URL>, ${CONSTRAINT_INSTRUCTION}<verbatim prohibition>; verify the cited user instruction, not an agent inference or a later judgement. Kickoff ending at planning is not an opt-out.`
62
+ const USER_CONSTRAINT: AutoOkDecision = {
63
+ is_applied: false,
64
+ reason: 'a user prohibition is recorded under 自動実行の制約',
65
+ }
66
+
67
+ function user_constraint_of(body: string): AutoOkDecision | undefined {
68
+ const section = markdown_section.section_lines(body, CONSTRAINT_HEADING).join('\n')
69
+ const lines = markdown_section.unfenced_lines(section).map((line) => line.trim())
70
+ const has_fields = CONSTRAINT_FIELDS.every((prefix) =>
71
+ lines.some((line) => line.startsWith(prefix) && line.slice(prefix.length).trim() !== ''),
72
+ )
73
+
74
+ return has_fields && lines.includes(CONSTRAINT_SOURCE) ? USER_CONSTRAINT : undefined
75
+ }
56
76
 
57
77
  // The labels that keep a person in the loop, each with the reason it withholds `auto-ok`. A
58
78
  // `breaking-change` declared in the body arrives here as its label, added before the decision.
@@ -102,18 +122,37 @@ function decision_problem(body: string): string | undefined {
102
122
  return has_rule ? DECISION_PROBLEM : undefined
103
123
  }
104
124
 
125
+ function body_decision(body: string): AutoOkDecision {
126
+ return user_constraint_of(body) ?? (judgement_of(body) === false ? APPLIED : JUDGEMENT)
127
+ }
128
+
105
129
  function decide(filing: AutoOkFiling): AutoOkDecision {
106
130
  if (filing.is_opted_out) return OPTED_OUT
107
131
  if (filing.is_cross_repository) return CROSS_REPOSITORY
108
132
 
109
- return exclusion_of(filing.labels) ?? (judgement_of(filing.body) === false ? APPLIED : JUDGEMENT)
133
+ return exclusion_of(filing.labels) ?? body_decision(filing.body)
134
+ }
135
+
136
+ function opt_out_problem(filing: AutoOkFiling): string | undefined {
137
+ if (!filing.is_opted_out || user_constraint_of(filing.body) !== undefined) return undefined
138
+ const without_opt_out = decide({ ...filing, is_opted_out: false })
139
+
140
+ return without_opt_out.is_applied ? CONSTRAINT_PROBLEM : undefined
110
141
  }
111
142
 
112
143
  function line_of(decision: AutoOkDecision): string {
113
144
  return `auto-ok: ${decision.is_applied ? 'applied' : 'not applied'} — ${decision.reason}`
114
145
  }
115
146
 
116
- const issue_auto_ok = { declaration_problem, decide, decision_problem, exclusion_of, line_of }
147
+ const issue_auto_ok = {
148
+ declaration_problem,
149
+ decide,
150
+ decision_problem,
151
+ exclusion_of,
152
+ line_of,
153
+ opt_out_problem,
154
+ user_constraint_of,
155
+ }
117
156
 
118
157
  export type { AutoOkDecision, AutoOkFiling }
119
158
  export { issue_auto_ok }
@@ -42,6 +42,9 @@ const KEYS = {
42
42
  sample_gate: { ja: '実施可能条件', en: 'Sample gate' },
43
43
  not_before: { ja: '実施可能日', en: 'Not before' },
44
44
  source: { ja: '出どころ', en: 'Source' },
45
+ constraint_source: { ja: '出所', en: 'Constraint source' },
46
+ constraint_reference: { ja: '参照', en: 'Constraint reference' },
47
+ constraint_instruction: { ja: '指示', en: 'Constraint instruction' },
45
48
  } as const satisfies Record<string, Row>
46
49
 
47
50
  const VALUES = {
@@ -72,6 +75,7 @@ const HEADINGS = {
72
75
  baseline: { ja: 'ベースライン', en: 'Baseline' },
73
76
  reproduction: { ja: '再現', en: 'Reproduction' },
74
77
  expected_effect: { ja: '期待効果', en: 'Expected effect' },
78
+ auto_execution_constraint: { ja: '自動実行の制約', en: 'Automatic execution constraint' },
75
79
  } as const satisfies Record<string, Row>
76
80
 
77
81
  // The size estimate's value: `<files>` and `<lines>` stand for its counts.
@@ -3,6 +3,7 @@ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
3
3
  import { cli_body } from '#scripts/josh/cli-body'
4
4
  import { cli_flags } from '#scripts/lib/cli-flags'
5
5
  import { error_text } from '#scripts/lib/error-message'
6
+ import { issue_outcome } from './issue-outcome'
6
7
 
7
8
  // `josh issue:comment <N> --body <text> | --body-file <path>` — post one comment to an issue (a PR
8
9
  // comment is an issue comment over REST) and print the comment URL.
@@ -28,7 +29,12 @@ interface CommentRequest {
28
29
 
29
30
  // The read is strict: an unknown flag refuses the call rather than being
30
31
  // ignored. `cli_body.resolve` owns the both-flags-at-once refusal and the file read.
31
- const OPTIONS = { body: { type: 'string' }, 'body-file': { type: 'string' } } as const
32
+ const OPTIONS = {
33
+ body: { type: 'string' },
34
+ 'body-file': { type: 'string' },
35
+ outcome: { type: 'string' },
36
+ 'evidence-url': { type: 'string' },
37
+ } as const
32
38
 
33
39
  // `resolve` may throw when both body flags are given, which `run` reports — the message names the two
34
40
  // flags a caller must pick between.
@@ -47,7 +53,14 @@ function parse_request(argv: ReadonlyArray<string>): CommentRequest | undefined
47
53
 
48
54
  if (body === undefined || body.length === 0) return undefined
49
55
 
50
- return { issue_number, body }
56
+ return {
57
+ issue_number,
58
+ body: issue_outcome.body_of({
59
+ body,
60
+ summary: parsed.values.outcome,
61
+ url: parsed.values['evidence-url'],
62
+ }),
63
+ }
51
64
  }
52
65
 
53
66
  // A both-flags refusal and a file-read failure both surface as an `Error` from `resolve`, and its
@@ -4,6 +4,7 @@ import { cli_body } from '#scripts/josh/cli-body'
4
4
  import { cli_flags } from '#scripts/lib/cli-flags'
5
5
  import { error_text } from '#scripts/lib/error-message'
6
6
  import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
7
+ import { issue_outcome } from './issue-outcome'
7
8
 
8
9
  // The shape every evidence exit shares — `josh issue:already-done` and `josh issue:measured`: the
9
10
  // evidence comment, the exit's own finishing write, then the `run:release`, in that order.
@@ -14,7 +15,7 @@ import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
14
15
 
15
16
  const FAILURE_EXIT_CODE = 1
16
17
  const EVIDENCE_FILE_FLAG = '--evidence-file'
17
- const OPTIONS = { 'evidence-file': { type: 'string' } } as const
18
+ const OPTIONS = { 'evidence-file': { type: 'string' }, outcome: { type: 'string' } } as const
18
19
 
19
20
  interface EvidenceRequest {
20
21
  issue_number: string
@@ -41,7 +42,10 @@ function parse_request(argv: ReadonlyArray<string>): EvidenceRequest | undefined
41
42
  const evidence = cli_body.read_file_or_stdin(file_path).trim()
42
43
  if (evidence.length === 0) throw new Error(`Evidence file is empty: ${file_path}`)
43
44
 
44
- return { issue_number, evidence }
45
+ return {
46
+ issue_number,
47
+ evidence: issue_outcome.body_of({ body: evidence, summary: parsed.values.outcome }),
48
+ }
45
49
  }
46
50
 
47
51
  // A file-read failure or an empty file is an `Error` naming the path, printed as-is; every other
@@ -23,6 +23,7 @@ import { issue_file_deferral } from './issue-file-deferral'
23
23
  import { issue_file_fold } from './issue-file-fold'
24
24
  import { issue_file_interrupt } from './issue-file-interrupt'
25
25
  import { issue_file_pass, type Filing } from './issue-file-pass'
26
+ import { issue_file_worker } from './issue-file-worker'
26
27
  import { has_label_name, has_parked_label, RUN_SOLO_LABEL } from './issue-labels'
27
28
  import { issue_priority } from './issue-priority'
28
29
  import { issue_release_cli } from './issue-release-cli'
@@ -72,7 +73,10 @@ function party_refusal(target: string): string | undefined {
72
73
  // rather than printed, so it is printed here — otherwise the filing fails with no reason given. A label
73
74
  // the create applies is provisioned first, so it never arrives with a generated color.
74
75
  async function create(filing: Filing, labels: ReadonlyArray<string>): Promise<string | undefined> {
75
- repository_labels.ensure_labels(filing.target)
76
+ repository_labels.ensure_labels(
77
+ filing.target,
78
+ issue_file_worker.label_definitions(filing, labels),
79
+ )
76
80
  const request = git_gh_issue_write.issue_create_request({
77
81
  title: filing.args.title,
78
82
  body: filing.body,
@@ -2,10 +2,11 @@ import { git_gh_issue_list, MAX_SCANNED } from '#scripts/gh/git-gh-issue-list'
2
2
  import type { ImplementRate } from '#scripts/lane/lane-implement-rate'
3
3
  import { lane_net_read } from '#scripts/lane/lane-net-read'
4
4
  import type { SizeRatios } from '#scripts/lane/lane-size-stats'
5
- import { issue_auto_ok } from './issue-auto-ok'
5
+ import { issue_auto_ok, type AutoOkFiling } from './issue-auto-ok'
6
6
  import { issue_cap_files } from './issue-cap-files'
7
7
  import { issue_file, type FileArguments } from './issue-file'
8
8
  import { issue_file_lane_hint } from './issue-file-lane-hint'
9
+ import { issue_file_worker } from './issue-file-worker'
9
10
  import { issue_lint_cli } from './issue-lint-cli'
10
11
  import { issue_priority } from './issue-priority'
11
12
  import { issue_sample_required } from './issue-sample-required'
@@ -32,6 +33,15 @@ interface Filing {
32
33
  scouted?: ScoutOutcome | undefined
33
34
  }
34
35
 
36
+ function auto_ok_filing(filing: Filing): AutoOkFiling {
37
+ return {
38
+ is_opted_out: filing.args.is_auto_ok_opted_out,
39
+ is_cross_repository: !issue_file.is_same_repository(filing.target, filing.current),
40
+ labels: issue_file.labels_of(filing.args, filing.body),
41
+ body: filing.body,
42
+ }
43
+ }
44
+
35
45
  // Every refusal the body and the arguments carry, read locally — `[]` when the body is admitted.
36
46
  function refusals_of(
37
47
  filing: Filing,
@@ -43,6 +53,7 @@ function refusals_of(
43
53
  size_estimate.guide_problem(filing.body, filing.args.route, rate, growth),
44
54
  issue_sample_required.problem(filing.body),
45
55
  issue_auto_ok.declaration_problem(filing.body),
56
+ issue_auto_ok.opt_out_problem(auto_ok_filing(filing)),
46
57
  issue_priority.problem(filing.body, filing.args.labels),
47
58
  issue_file.origin_problem(filing.body, filing.target, filing.current),
48
59
  ]
@@ -157,12 +168,7 @@ async function is_scout_clear(filing: Filing): Promise<boolean> {
157
168
  // The decision reads the labels the body's declarations add, so a declared breaking change is excluded
158
169
  // like its label.
159
170
  function labels_of(filing: Filing): ReadonlyArray<string> | undefined {
160
- const auto_ok = issue_auto_ok.decide({
161
- is_opted_out: filing.args.is_auto_ok_opted_out,
162
- is_cross_repository: !issue_file.is_same_repository(filing.target, filing.current),
163
- labels: issue_file.labels_of(filing.args, filing.body),
164
- body: filing.body,
165
- })
171
+ const auto_ok = issue_auto_ok.decide(auto_ok_filing(filing))
166
172
 
167
173
  console.info(issue_auto_ok.line_of(auto_ok))
168
174
  const labels = issue_file.labels_of(filing.args, filing.body, auto_ok.is_applied)
@@ -224,6 +230,7 @@ async function labels_in_one_pass(filing: Filing): Promise<ReadonlyArray<string>
224
230
  const verdicts = [
225
231
  is_body_clear,
226
232
  labels !== undefined,
233
+ issue_file_worker.is_worker_clear(filing, labels ?? filing.args.labels),
227
234
  await is_source_clear(filing),
228
235
  await is_wip_clear(filing),
229
236
  await is_scout_clear(filing),