@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
@@ -71,55 +71,59 @@ The `en` column of `issue-template.md`'s template; its rules and label table →
71
71
 
72
72
  ### Correspondence table
73
73
 
74
- | Kind | ja | en |
75
- | ------- | -------------- | ---------------------- |
76
- | key | 種別 | Type |
77
- | key | 目的 | Purpose |
78
- | key | 互換性 | Compatibility |
79
- | key | リリース分類 | Release classification |
80
- | key | 人の判断 | Human judgement |
81
- | key | 判定規則 | Decision rule |
82
- | key | 中止条件 | Close condition |
83
- | key | 優先度 | Priority |
84
- | key | セキュリティ | Security |
85
- | key | 原因の park | Cause park |
86
- | key | 原因のレーン | Cause lane |
87
- | key | 原因の損失 | Cause loss |
88
- | key | 実施順 | Order |
89
- | key | 原因 | Cause |
90
- | key | 規模見積もり | Size estimate |
91
- | key | 分割しない理由 | No-split reason |
92
- | key | 行を増やさない | No added lines |
93
- | key | 先行リファクタ | Refactor first |
94
- | key | 強制 | Enforcement |
95
- | key | 計測 | Measurement |
96
- | key | 計測宣言 | Measure declaration |
97
- | key | 前提 | Premise |
98
- | key | 計測宣言なし | No measure declaration |
99
- | key | 実施可能条件 | Sample gate |
100
- | key | 実施可能日 | Not before |
101
- | key | 出どころ | Source |
102
- | value | 不具合 | defect |
103
- | value | 非不具合 | non-defect |
104
- | value | 振る舞い変更 | behavior change |
105
- | value | 機能追加 | feature |
106
- | value | 機能改善 | improvement |
107
- | value | 時間短縮 | time saving |
108
- | value | 不具合修正 | bug fix |
109
- | value | 破壊的変更 | breaking change |
110
- | value | 不要 | not needed |
111
- | value | 要 | needed |
112
- | value | 通常 | normal |
113
- | value | 高 | high |
114
- | value | 緊急 | critical |
115
- | value | 最後 | last |
116
- | value | 不明 | unknown |
117
- | value | なし | none |
118
- | heading | 背景 | Background |
119
- | heading | 現象 | Symptom |
120
- | heading | 期待結果 | Expected result |
121
- | heading | 受け入れ条件 | Acceptance criteria |
122
- | heading | 発火点 | Trigger |
123
- | heading | ベースライン | Baseline |
124
- | heading | 再現 | Reproduction |
125
- | heading | 期待効果 | Expected effect |
74
+ | Kind | ja | en |
75
+ | ------- | -------------- | ------------------------------ |
76
+ | key | 種別 | Type |
77
+ | key | 目的 | Purpose |
78
+ | key | 互換性 | Compatibility |
79
+ | key | リリース分類 | Release classification |
80
+ | key | 人の判断 | Human judgement |
81
+ | key | 判定規則 | Decision rule |
82
+ | key | 中止条件 | Close condition |
83
+ | key | 優先度 | Priority |
84
+ | key | セキュリティ | Security |
85
+ | key | 原因の park | Cause park |
86
+ | key | 原因のレーン | Cause lane |
87
+ | key | 原因の損失 | Cause loss |
88
+ | key | 実施順 | Order |
89
+ | key | 原因 | Cause |
90
+ | key | 規模見積もり | Size estimate |
91
+ | key | 分割しない理由 | No-split reason |
92
+ | key | 行を増やさない | No added lines |
93
+ | key | 先行リファクタ | Refactor first |
94
+ | key | 強制 | Enforcement |
95
+ | key | 計測 | Measurement |
96
+ | key | 計測宣言 | Measure declaration |
97
+ | key | 前提 | Premise |
98
+ | key | 計測宣言なし | No measure declaration |
99
+ | key | 実施可能条件 | Sample gate |
100
+ | key | 実施可能日 | Not before |
101
+ | key | 出どころ | Source |
102
+ | key | 出所 | Constraint source |
103
+ | key | 参照 | Constraint reference |
104
+ | key | 指示 | Constraint instruction |
105
+ | value | 不具合 | defect |
106
+ | value | 非不具合 | non-defect |
107
+ | value | 振る舞い変更 | behavior change |
108
+ | value | 機能追加 | feature |
109
+ | value | 機能改善 | improvement |
110
+ | value | 時間短縮 | time saving |
111
+ | value | 不具合修正 | bug fix |
112
+ | value | 破壊的変更 | breaking change |
113
+ | value | 不要 | not needed |
114
+ | value | 要 | needed |
115
+ | value | 通常 | normal |
116
+ | value | 高 | high |
117
+ | value | 緊急 | critical |
118
+ | value | 最後 | last |
119
+ | value | 不明 | unknown |
120
+ | value | なし | none |
121
+ | heading | 背景 | Background |
122
+ | heading | 現象 | Symptom |
123
+ | heading | 期待結果 | Expected result |
124
+ | heading | 受け入れ条件 | Acceptance criteria |
125
+ | heading | 発火点 | Trigger |
126
+ | heading | ベースライン | Baseline |
127
+ | heading | 再現 | Reproduction |
128
+ | heading | 期待効果 | Expected effect |
129
+ | heading | 自動実行の制約 | Automatic execution constraint |
@@ -7,6 +7,8 @@ import {
7
7
  type AgentRole,
8
8
  type ProfileResult,
9
9
  } from './agent-role-profile'
10
+ import { agent_ship_cap } from './agent-ship-cap'
11
+ import { agent_worker_profile } from './agent-worker-profile'
10
12
  import { claude_agent_argv } from './claude-agent-argv'
11
13
  import { codex_agent_argv } from './codex-agent-argv'
12
14
 
@@ -20,6 +22,12 @@ interface AgentArgv {
20
22
  type AgentArgvResult =
21
23
  { kind: 'argv'; argv: AgentArgv; profile: AgentProfile } | { kind: 'rejected'; note: string }
22
24
 
25
+ // Where a cut relaunch runs, and how it reads its Issue's labels when `josh.worker` asks for them.
26
+ interface ResumeSite {
27
+ cwd: string
28
+ labels: () => Promise<ReadonlyArray<string> | undefined>
29
+ }
30
+
23
31
  // **`session_id` forces the fresh session's id, and only the Claude path can honour it**.
24
32
  // Codex has no such flag, and the run-state report reads Claude transcripts
25
33
  // alone, so an OpenAI scheduler simply builds as before; whiff attribution is a Claude-transcript
@@ -105,19 +113,25 @@ function profiled_in(invocation: string, resolved: ProfileResult, cwd: string):
105
113
  // **A cut relaunch's profile, resolved for the phase the resumed child is entering**.
106
114
  // A stored lane profile takes the phase's model where the phase has one (pre-gate: Sonnet, or
107
115
  // `JOSH_WORKER_SHIP_MODEL`) and the phase's effort; a lane without one resolves the worker for the
108
- // phase. An env override wins over the phase in either path.
109
- function resume_argv(
116
+ // phase. An env override wins over the phase in either path. The phase's model is then capped at the
117
+ // Issue's `josh.worker` profile, whose labels `site.labels` reads only when the setting exists.
118
+ async function resume_argv(
110
119
  invocation: string,
111
120
  profile: AgentProfile | undefined,
112
121
  phase: string,
113
- cwd: string,
114
- ): AgentArgvResult {
122
+ site: ResumeSite,
123
+ ): Promise<AgentArgvResult> {
115
124
  const resolved =
116
125
  profile === undefined
117
126
  ? agent_role_profile.resolve(agent_role_profile.WORKER, process.env, phase)
118
127
  : agent_role_profile.with_phase(profile, phase)
128
+ const capped = await agent_ship_cap.capped(
129
+ resolved,
130
+ phase,
131
+ async () => await agent_worker_profile.resolve(site.cwd, site.labels),
132
+ )
119
133
 
120
- return profiled_in(invocation, resolved, cwd)
134
+ return profiled_in(invocation, capped, site.cwd)
121
135
  }
122
136
 
123
137
  function resolve_in(
@@ -155,5 +169,5 @@ const agent_argv = {
155
169
  with_resume_in,
156
170
  }
157
171
 
158
- export type { AgentArgv, AgentArgvResult }
172
+ export type { AgentArgv, AgentArgvResult, ResumeSite }
159
173
  export { agent_argv }
@@ -0,0 +1,89 @@
1
+ import {
2
+ agent_profile_schema,
3
+ type AgentEffort,
4
+ type AgentPhase,
5
+ type AgentRole,
6
+ } from './agent-profile-schema'
7
+ import { agent_provider, type AgentEnvironment, type AgentProvider } from './agent-provider'
8
+
9
+ const { OPENAI_PROVIDER, trimmed } = agent_provider
10
+ const { PHASE_SCHEMA, PRE_GATE_PHASE } = agent_profile_schema
11
+
12
+ interface PhaseModel {
13
+ key: string
14
+ value: string
15
+ }
16
+
17
+ type PhaseTable<Value> = Readonly<Partial<Record<AgentRole, Partial<Record<AgentPhase, Value>>>>>
18
+
19
+ const SONNET_MODEL = 'claude-sonnet-5-5'
20
+
21
+ // **Effort as a function of the run phase, not the role alone**. For the first
22
+ // merge only the mechanical ship/bookkeeping region is lowered: the pre-gate resume drives the gate,
23
+ // commit, PR and merge, applying fixes the gate has already named — work delegation.md calls the opposite
24
+ // of judgement. The design-judgment implementation phases keep the role default, as does any role/phase
25
+ // with no entry, and the review's own judgement is the reviewer role's, untouched by lowering
26
+ // the worker here. The investigation phase — highest output density — is left for a later merge, once
27
+ // the delegation half of this Issue has moved its reading out.
28
+ const SHIP_EFFORT: AgentEffort = 'low'
29
+ const PHASE_EFFORT: PhaseTable<AgentEffort> = {
30
+ worker: { [PRE_GATE_PHASE]: SHIP_EFFORT },
31
+ }
32
+
33
+ // **The ship phase may run on a model of its own** (joshuafolkken/kit#5343), read from its key ahead of
34
+ // the role's and applied on the same cut relaunch as `SHIP_EFFORT`. Unset, the phase runs on its default:
35
+ // Sonnet held the ship phase's duration and stop rates against Opus across a lane trial (joshuafolkken/kit#5346).
36
+ const PHASE_MODELS: PhaseTable<PhaseModel> = {
37
+ worker: { [PRE_GATE_PHASE]: { key: 'JOSH_WORKER_SHIP_MODEL', value: SONNET_MODEL } },
38
+ }
39
+
40
+ function phase_model_keys(): ReadonlyArray<string> {
41
+ return Object.values(PHASE_MODELS).flatMap((phases) =>
42
+ Object.values(phases).map(({ key }) => key),
43
+ )
44
+ }
45
+
46
+ // A role's entry in a phase table; `undefined` for a phase-less or unrecognized phase, or no entry.
47
+ function phase_entry<Value>(
48
+ table: PhaseTable<Value>,
49
+ role: AgentRole,
50
+ phase: string | undefined,
51
+ ): Value | undefined {
52
+ const parsed = PHASE_SCHEMA.safeParse(phase)
53
+
54
+ return parsed.success ? table[role]?.[parsed.data] : undefined
55
+ }
56
+
57
+ // The phase's own model — its key when set, else its default; `undefined` for a phase with no entry or
58
+ // an OpenAI session, whose model is never read from env.
59
+ function phase_model(
60
+ role: AgentRole,
61
+ provider: AgentProvider,
62
+ phase: string | undefined,
63
+ environment: AgentEnvironment,
64
+ ): PhaseModel | undefined {
65
+ const entry = provider === OPENAI_PROVIDER ? undefined : phase_entry(PHASE_MODELS, role, phase)
66
+ if (entry === undefined) return undefined
67
+
68
+ return { key: entry.key, value: trimmed(environment[entry.key]) ?? entry.value }
69
+ }
70
+
71
+ // The effort a phase resolves to before any env override: the phase's own value where the table names
72
+ // one, otherwise the fallback. A phase-less or unrecognized call returns the
73
+ // fallback unchanged, which is what keeps every existing caller reading the current default.
74
+ function phase_effort(
75
+ role: AgentRole,
76
+ phase: string | undefined,
77
+ fallback: AgentEffort,
78
+ ): AgentEffort {
79
+ return phase_entry(PHASE_EFFORT, role, phase) ?? fallback
80
+ }
81
+
82
+ const agent_phase_profile = {
83
+ SONNET_MODEL,
84
+ phase_effort,
85
+ phase_model,
86
+ phase_model_keys,
87
+ }
88
+
89
+ export { agent_phase_profile }
@@ -1,8 +1,8 @@
1
1
  import { agent_consultation_model } from './agent-consultation-model'
2
+ import { agent_phase_profile } from './agent-phase-profile'
2
3
  import {
3
4
  agent_profile_schema,
4
5
  type AgentEffort,
5
- type AgentPhase,
6
6
  type AgentProfile,
7
7
  type AgentRole,
8
8
  } from './agent-profile-schema'
@@ -27,6 +27,7 @@ const {
27
27
  warn_of_default,
28
28
  } = agent_provider
29
29
  const { consultation_provider } = agent_consultation_model
30
+ const { SONNET_MODEL, phase_effort, phase_model, phase_model_keys } = agent_phase_profile
30
31
 
31
32
  const {
32
33
  DEFAULT_PROFILES,
@@ -34,7 +35,6 @@ const {
34
35
  IMPLEMENTATION_PHASE,
35
36
  OPENAI_MODEL,
36
37
  OPENAI_PROFILES,
37
- PHASE_SCHEMA,
38
38
  PRE_GATE_PHASE,
39
39
  REVIEWER,
40
40
  SCHEDULER,
@@ -52,13 +52,6 @@ interface Override {
52
52
  value: string | undefined
53
53
  }
54
54
 
55
- interface PhaseModel {
56
- key: string
57
- value: string
58
- }
59
-
60
- type PhaseTable<Value> = Readonly<Partial<Record<AgentRole, Partial<Record<AgentPhase, Value>>>>>
61
-
62
55
  // What a resolution is keyed on beyond the role: the run phase (effort) and the review round (profile).
63
56
  interface AgentStage {
64
57
  phase?: string | undefined
@@ -73,7 +66,6 @@ const PROVIDER_PROFILES = { anthropic: DEFAULT_PROFILES, openai: OPENAI_PROFILES
73
66
  // first only checks that the first round's findings were fixed, so its model and effort are set apart:
74
67
  // its own keys win, then the reviewer's, then its own default.
75
68
  const FIRST_REVIEW_ROUND = 1
76
- const SONNET_MODEL = 'claude-sonnet-5-5'
77
69
  const VERIFICATION_PROFILES: Readonly<Record<AgentProvider, AgentProfile>> = {
78
70
  anthropic: {
79
71
  ...DEFAULT_PROFILES.reviewer,
@@ -99,25 +91,6 @@ const INVESTIGATION_MODELS: Readonly<Record<AgentProvider, string>> = {
99
91
  }
100
92
  const INVESTIGATION_MODEL_KEY = 'JOSH_INVESTIGATION_MODEL'
101
93
 
102
- // **Effort as a function of the run phase, not the role alone**. For the first
103
- // merge only the mechanical ship/bookkeeping region is lowered: the pre-gate resume drives the gate,
104
- // commit, PR and merge, applying fixes the gate has already named — work delegation.md calls the opposite
105
- // of judgement. The design-judgment implementation phases keep the role default, as does any role/phase
106
- // with no entry, and the review's own judgement is the reviewer role's, untouched by lowering
107
- // the worker here. The investigation phase — highest output density — is left for a later merge, once
108
- // the delegation half of this Issue has moved its reading out.
109
- const SHIP_EFFORT: AgentEffort = 'low'
110
- const PHASE_EFFORT: PhaseTable<AgentEffort> = {
111
- worker: { [PRE_GATE_PHASE]: SHIP_EFFORT },
112
- }
113
-
114
- // **The ship phase may run on a model of its own** (joshuafolkken/kit#5343), read from its key ahead of
115
- // the role's and applied on the same cut relaunch as `SHIP_EFFORT`. Unset, the phase runs on its default:
116
- // Sonnet held the ship phase's duration and stop rates against Opus across a lane trial (joshuafolkken/kit#5346).
117
- const PHASE_MODELS: PhaseTable<PhaseModel> = {
118
- worker: { [PRE_GATE_PHASE]: { key: 'JOSH_WORKER_SHIP_MODEL', value: SONNET_MODEL } },
119
- }
120
-
121
94
  const ENV_KEYS: Readonly<Record<AgentRole, { model: string; effort: string }>> = {
122
95
  scheduler: { model: 'JOSH_SCHEDULER_MODEL', effort: 'JOSH_SCHEDULER_EFFORT' },
123
96
  worker: { model: 'JOSH_WORKER_MODEL', effort: 'JOSH_WORKER_EFFORT' },
@@ -126,12 +99,6 @@ const ENV_KEYS: Readonly<Record<AgentRole, { model: string; effort: string }>> =
126
99
 
127
100
  const LEGACY_WORKER_KEYS = { model: 'JOSH_LANE_MODEL', effort: 'JOSH_LANE_EFFORT' }
128
101
 
129
- function phase_model_keys(): ReadonlyArray<string> {
130
- return Object.values(PHASE_MODELS).flatMap((phases) =>
131
- Object.values(phases).map(({ key }) => key),
132
- )
133
- }
134
-
135
102
  // Every env key a profile is read from. The unit suite blanks them so a lane's model and effort never
136
103
  // reach its fixtures (joshuafolkken/kit#5863); its test pins each to the pattern its config blanks.
137
104
  const PROFILE_KEYS: ReadonlyArray<string> = [
@@ -175,31 +142,6 @@ function override_value(
175
142
  : { key, value: trimmed(environment[key]) }
176
143
  }
177
144
 
178
- // A role's entry in a phase table; `undefined` for a phase-less or unrecognized phase, or no entry.
179
- function phase_entry<Value>(
180
- table: PhaseTable<Value>,
181
- role: AgentRole,
182
- phase: string | undefined,
183
- ): Value | undefined {
184
- const parsed = PHASE_SCHEMA.safeParse(phase)
185
-
186
- return parsed.success ? table[role]?.[parsed.data] : undefined
187
- }
188
-
189
- // The phase's own model — its key when set, else its default; `undefined` for a phase with no entry or
190
- // an OpenAI session, whose model is never read from env.
191
- function phase_model(
192
- role: AgentRole,
193
- provider: AgentProvider,
194
- phase: string | undefined,
195
- environment: AgentEnvironment,
196
- ): PhaseModel | undefined {
197
- const entry = provider === OPENAI_PROVIDER ? undefined : phase_entry(PHASE_MODELS, role, phase)
198
- if (entry === undefined) return undefined
199
-
200
- return { key: entry.key, value: trimmed(environment[entry.key]) ?? entry.value }
201
- }
202
-
203
145
  function model_override(
204
146
  role: AgentRole,
205
147
  environment: AgentEnvironment,
@@ -237,17 +179,6 @@ function validate(profile: AgentProfile, model_key: string): ProfileResult {
237
179
  return { kind: 'profile', profile }
238
180
  }
239
181
 
240
- // The effort a phase resolves to before any env override: the phase's own value where the table names
241
- // one, otherwise the fallback. A phase-less or unrecognized call returns the
242
- // fallback unchanged, which is what keeps every existing caller reading the current default.
243
- function phase_effort(
244
- role: AgentRole,
245
- phase: string | undefined,
246
- fallback: AgentEffort,
247
- ): AgentEffort {
248
- return phase_entry(PHASE_EFFORT, role, phase) ?? fallback
249
- }
250
-
251
182
  // The effort a stored profile takes in a phase: an env override wins, then the phase value, then the
252
183
  // profile's own effort. A cut relaunch that keeps a lane's stored model resolves
253
184
  // the effort through this so a person's `JOSH_WORKER_EFFORT` is never overwritten by the phase value.
@@ -374,6 +305,7 @@ const agent_role_profile = {
374
305
  resolve,
375
306
  resolve_provider,
376
307
  resolve_review,
308
+ validate,
377
309
  warn_of_default,
378
310
  with_phase,
379
311
  }
@@ -0,0 +1,44 @@
1
+ import { agent_phase_profile } from './agent-phase-profile'
2
+ import type { AgentProfile, ProfileResult } from './agent-role-profile'
3
+ import type { WorkerResult } from './agent-worker-profile'
4
+
5
+ // **The ship phase never runs above the Issue's `josh.worker` profile** (joshuafolkken/kit#7354): a
6
+ // phase with a model of its own takes the weaker of that model and the Issue's, ranked by the order of
7
+ // `profiles`, weakest first. A ship model no profile names cannot be ranked, so it is kept: a cap never
8
+ // raises the phase above its own model. A repository without the setting, and a phase
9
+ // without a model of its own, keep the resolved profile and never read the setting or the labels.
10
+
11
+ type ResolvedWorker = Extract<WorkerResult, { kind: 'worker' }>
12
+
13
+ function has_phase_model(profile: AgentProfile, phase: string): boolean {
14
+ return agent_phase_profile.phase_model(profile.role, profile.provider, phase, {}) !== undefined
15
+ }
16
+
17
+ function weaker(profile: AgentProfile, resolved: ResolvedWorker): AgentProfile {
18
+ const { worker, settings } = resolved
19
+ const rank = settings.profiles.findIndex((entry) => entry.agent.model === profile.model)
20
+ const limit = settings.profiles.findIndex((entry) => entry.name === worker.name)
21
+
22
+ return rank <= limit ? profile : { ...profile, model: worker.agent.model }
23
+ }
24
+
25
+ function capped_by(profile: AgentProfile, result: WorkerResult): ProfileResult {
26
+ if (result.kind === 'unset') return { kind: 'profile', profile }
27
+
28
+ return result.kind === 'rejected' ? result : { kind: 'profile', profile: weaker(profile, result) }
29
+ }
30
+
31
+ // `worker` is called only for a phase with a model of its own, so every other relaunch reads nothing.
32
+ async function capped(
33
+ resolved: ProfileResult,
34
+ phase: string,
35
+ worker: () => Promise<WorkerResult>,
36
+ ): Promise<ProfileResult> {
37
+ if (resolved.kind === 'rejected' || !has_phase_model(resolved.profile, phase)) return resolved
38
+
39
+ return capped_by(resolved.profile, await worker())
40
+ }
41
+
42
+ const agent_ship_cap = { capped }
43
+
44
+ export { agent_ship_cap }
@@ -0,0 +1,154 @@
1
+ import { json_value } from '#scripts/lib/json-value'
2
+ import {
3
+ package_manifest,
4
+ type WorkerConfig,
5
+ type WorkerProfileDefinition,
6
+ } from '#scripts/lib/package-manifest'
7
+ import { file_reader } from '#scripts/lib/read-file'
8
+ import type { z } from 'zod'
9
+ import { agent_profile_schema, type AgentProfile } from './agent-profile-schema'
10
+ import type { Rejected } from './agent-provider'
11
+ import { agent_role_profile } from './agent-role-profile'
12
+
13
+ // The per-Issue worker profile a repository opts into with `josh.worker` in its `package.json`: the
14
+ // Issue's `worker:<name>` label picks a profile, else the configured default. A repository without the
15
+ // setting answers `unset` before any label is fetched, so it keeps today's launch unchanged.
16
+ const { EFFORT_SCHEMA, PROFILE_SCHEMA, WORKER } = agent_profile_schema
17
+ const CONFIG_KEY = 'josh.worker'
18
+ const LABEL_PREFIX = 'worker:'
19
+
20
+ interface WorkerProfile {
21
+ name: string
22
+ when: string
23
+ agent: AgentProfile
24
+ }
25
+
26
+ interface WorkerSettings {
27
+ default: string
28
+ escalate: boolean
29
+ profiles: ReadonlyArray<WorkerProfile>
30
+ }
31
+
32
+ interface Unset {
33
+ kind: 'unset'
34
+ }
35
+
36
+ type SettingsResult = Rejected | Unset | { kind: 'settings'; settings: WorkerSettings }
37
+ type WorkerResult =
38
+ Rejected | Unset | { kind: 'worker'; worker: WorkerProfile; settings: WorkerSettings }
39
+ type ProfileCheck = Rejected | { kind: 'profile'; worker: WorkerProfile }
40
+
41
+ const UNSET: Unset = { kind: 'unset' }
42
+
43
+ function rejected(note: string): Rejected {
44
+ return { kind: 'rejected', note: `${CONFIG_KEY} ${note}` }
45
+ }
46
+
47
+ // A schema rejection: its issue path already starts at `josh.worker`, so it is not prefixed again.
48
+ function schema_rejection(error: z.ZodError): Rejected {
49
+ const [issue] = error.issues
50
+ if (issue === undefined) return rejected('is invalid')
51
+
52
+ return { kind: 'rejected', note: `${issue.path.join('.')}: ${issue.message}` }
53
+ }
54
+
55
+ function checked_profile(definition: WorkerProfileDefinition): ProfileCheck {
56
+ const { name, model, effort, when } = definition
57
+ const parsed = PROFILE_SCHEMA.safeParse({ role: WORKER, model, effort })
58
+
59
+ if (!parsed.success) {
60
+ return rejected(
61
+ `profile ${name}: effort ${effort} is not one of ${EFFORT_SCHEMA.options.join(', ')}`,
62
+ )
63
+ }
64
+
65
+ const checked = agent_role_profile.validate(parsed.data, `${CONFIG_KEY} profile ${name} model`)
66
+
67
+ return checked.kind === 'rejected'
68
+ ? checked
69
+ : { kind: 'profile', worker: { name, when, agent: checked.profile } }
70
+ }
71
+
72
+ function checked_settings(config: WorkerConfig): SettingsResult {
73
+ const profiles: Array<WorkerProfile> = []
74
+
75
+ for (const definition of config.profiles) {
76
+ const checked = checked_profile(definition)
77
+ if (checked.kind === 'rejected') return checked
78
+ profiles.push(checked.worker)
79
+ }
80
+
81
+ return {
82
+ kind: 'settings',
83
+ settings: { default: config.default, escalate: config.escalate, profiles },
84
+ }
85
+ }
86
+
87
+ // A manifest that cannot be read or parsed names no setting, so it reads as an empty object.
88
+ function manifest_value(directory: string): unknown {
89
+ const text = file_reader.read_if_readable(package_manifest.manifest_path(directory))
90
+ if (text === undefined) return {}
91
+
92
+ return json_value.parse_or_undefined(text) ?? {}
93
+ }
94
+
95
+ // The repository's `josh.worker`: `unset` when the manifest names none (or cannot be read), a rejection
96
+ // with its reason when the setting breaks a rule, otherwise the checked profiles.
97
+ function read(directory: string): SettingsResult {
98
+ const parsed = package_manifest.josh_schemas.worker.safeParse(manifest_value(directory))
99
+ if (!parsed.success) return schema_rejection(parsed.error)
100
+
101
+ const config = parsed.data.josh?.worker
102
+
103
+ return config === undefined ? UNSET : checked_settings(config)
104
+ }
105
+
106
+ function profile_named(settings: WorkerSettings, name: string): WorkerProfile | undefined {
107
+ return settings.profiles.find((profile) => profile.name === name)
108
+ }
109
+
110
+ function for_labels(settings: WorkerSettings, labels: ReadonlyArray<string>): WorkerResult {
111
+ const names = labels
112
+ .filter((label) => label.startsWith(LABEL_PREFIX))
113
+ .map((label) => label.slice(LABEL_PREFIX.length))
114
+
115
+ if (names.length > 1) {
116
+ return rejected(`allows one ${LABEL_PREFIX}<name> label, got ${names.join(', ')}`)
117
+ }
118
+
119
+ const [name = settings.default] = names
120
+ const worker = profile_named(settings, name)
121
+ if (worker === undefined) return rejected(`has no profile for the label ${LABEL_PREFIX}${name}`)
122
+
123
+ return { kind: 'worker', worker, settings }
124
+ }
125
+
126
+ // The profile an Issue's worker runs on. `fetch_labels` is called only once a setting exists, so a
127
+ // repository without one never asks GitHub for the Issue's labels. A label read that fails answers
128
+ // `undefined` and is refused: falling back to the default could run a `worker:<name>` Issue on the
129
+ // wrong model.
130
+ async function resolve(
131
+ directory: string,
132
+ fetch_labels: () => Promise<ReadonlyArray<string> | undefined>,
133
+ ): Promise<WorkerResult> {
134
+ const result = read(directory)
135
+ if (result.kind !== 'settings') return result
136
+
137
+ const labels = await fetch_labels()
138
+ if (labels === undefined) return rejected('could not read the Issue labels')
139
+
140
+ return for_labels(result.settings, labels)
141
+ }
142
+
143
+ // The profile one step above `worker` in the escalation order, or `undefined` at the top.
144
+ function next(settings: WorkerSettings, worker: WorkerProfile): WorkerProfile | undefined {
145
+ const index = settings.profiles.findIndex((profile) => profile.name === worker.name)
146
+ if (index === -1) return undefined
147
+
148
+ return settings.profiles[index + 1]
149
+ }
150
+
151
+ const agent_worker_profile = { LABEL_PREFIX, for_labels, next, read, resolve }
152
+
153
+ export type { SettingsResult, WorkerProfile, WorkerResult, WorkerSettings }
154
+ export { agent_worker_profile }
@@ -110,7 +110,7 @@ function tool_flags(role: AgentRole, cwd: string = process.cwd()): ReadonlyArray
110
110
  function instruction_flags(profile: AgentProfile, cwd?: string): ReadonlyArray<string> {
111
111
  if (profile.role === agent_role_profile.SCHEDULER) return []
112
112
 
113
- return lane_instructions.flags(cwd)
113
+ return lane_instructions.flags(cwd, profile.role === agent_role_profile.WORKER)
114
114
  }
115
115
 
116
116
  function build(