@joshuafolkken/kit 1.3000.0 → 1.3041.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/workflow-commands/backlogrun-steps.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +6 -0
- package/dist/.inputs-verified.json +1 -1
- package/dist/commands/adopt.js +12 -12
- package/dist/commands/auto-ok-judge-cli.js +18 -14
- package/dist/commands/auto-ok-main.js +42 -40
- package/dist/commands/backlog-budget-main.js +3 -3
- package/dist/commands/backlog-drive-cli.js +276 -188
- package/dist/commands/backlog-next-main.js +77 -75
- package/dist/commands/backlog-offer-main.js +80 -78
- package/dist/commands/backlog-plan-cli.js +96 -97
- package/dist/commands/backlog-triage-cli.js +94 -92
- package/dist/commands/backlogrun-cli.js +212 -206
- package/dist/commands/behavior-cli.js +12 -13
- package/dist/commands/bump-version-main.js +2 -2
- package/dist/commands/bytes-command.js +61 -22
- package/dist/commands/check-related.js +61 -60
- package/dist/commands/{chunk-X7PN54LZ.js → chunk-22DVQCP6.js} +16 -6
- package/dist/commands/{chunk-7GHOFHUS.js → chunk-24ZDAWML.js} +3 -3
- package/dist/commands/{chunk-HBNB3TLG.js → chunk-2BB5ZR2F.js} +13 -7
- package/dist/commands/{chunk-F22G3VDB.js → chunk-2BC33QPY.js} +1 -1
- package/dist/commands/{chunk-72EW7AVI.js → chunk-2BJJUTZA.js} +2 -2
- package/dist/commands/{chunk-XDQOWUVT.js → chunk-2CXT6MBR.js} +4 -4
- package/dist/commands/{chunk-TVJE67O2.js → chunk-2EZTYLO4.js} +6 -6
- package/dist/commands/{chunk-JLYW7CP6.js → chunk-2PHOLX62.js} +1 -1
- package/dist/commands/{chunk-6EU5ZCDP.js → chunk-2QM72JCJ.js} +23 -87
- package/dist/commands/{chunk-EFHSCUFN.js → chunk-2VFPUPSG.js} +2 -2
- package/dist/commands/{chunk-ATRMETHT.js → chunk-2XAH3MHV.js} +1 -1
- package/dist/commands/{chunk-T2E724HN.js → chunk-34JJYCIY.js} +2 -2
- package/dist/commands/{chunk-REMKUFAC.js → chunk-34KZDKQJ.js} +1 -1
- package/dist/commands/{chunk-GK2KY4MO.js → chunk-352KLSFX.js} +3 -3
- package/dist/commands/{chunk-7S6VRZOH.js → chunk-3AEDZZNL.js} +5 -5
- package/dist/commands/{chunk-KVJDDECB.js → chunk-3B2HEFNO.js} +2 -2
- package/dist/commands/{chunk-HZBTXKT2.js → chunk-3Z425MM3.js} +2 -2
- package/dist/commands/{chunk-J3G2R64I.js → chunk-3ZOX4G4U.js} +3 -3
- package/dist/commands/{chunk-LRS2OS5J.js → chunk-452HWOJ7.js} +2 -2
- package/dist/commands/{chunk-HRT4KWP4.js → chunk-475EFIJV.js} +1 -1
- package/dist/commands/{chunk-4HBVHYNL.js → chunk-47UZB54M.js} +3 -3
- package/dist/commands/{chunk-H4LYG37R.js → chunk-4DN4XVPL.js} +6 -6
- package/dist/commands/{chunk-TMLNI3YW.js → chunk-4HERA2GY.js} +1 -1
- package/dist/commands/{chunk-W6V4DWC5.js → chunk-4JI35CVO.js} +1 -1
- package/dist/commands/{chunk-YT342DRV.js → chunk-4L4LNWZ7.js} +2 -2
- package/dist/commands/{chunk-ZZAH3YQP.js → chunk-4N32QKJZ.js} +6 -6
- package/dist/commands/{chunk-GDUK5YPO.js → chunk-4NRSFLG7.js} +12 -12
- package/dist/commands/{chunk-O5QZ2S6X.js → chunk-4OKRPAUT.js} +4 -4
- package/dist/commands/{chunk-QDFDB4CF.js → chunk-4Q64PG46.js} +13 -13
- package/dist/commands/{chunk-HO52D6JY.js → chunk-4UDTQVDD.js} +14 -14
- package/dist/commands/{chunk-HPVLI26Z.js → chunk-4WR2LEZL.js} +6 -6
- package/dist/commands/{chunk-DP7WIGQ4.js → chunk-4ZJOC6OK.js} +4 -4
- package/dist/commands/{chunk-WTRDWEUQ.js → chunk-4ZQM4I7R.js} +12 -12
- package/dist/commands/{chunk-OTZJXU2R.js → chunk-54X37JEJ.js} +8 -8
- package/dist/commands/{chunk-A5V7EWIX.js → chunk-56KW5EOK.js} +2 -2
- package/dist/commands/chunk-5CG3XU3O.js +74 -0
- package/dist/commands/{chunk-FC33R5UN.js → chunk-5ESZLHDZ.js} +13 -15
- package/dist/commands/{chunk-OVA7STGP.js → chunk-5FBRMARM.js} +9 -9
- package/dist/commands/{chunk-SK2LJBFS.js → chunk-5PCK53WP.js} +3 -3
- package/dist/commands/{chunk-6NV2F7QH.js → chunk-5RG4S66L.js} +1 -1
- package/dist/commands/{chunk-JOARHU3M.js → chunk-5UJGACVN.js} +1 -1
- package/dist/commands/{chunk-NKOET4FB.js → chunk-5Y7B7FDL.js} +2 -2
- package/dist/commands/{chunk-XMBRXCIE.js → chunk-5Z6E5ZUV.js} +4 -4
- package/dist/commands/{chunk-RZ4OKKPM.js → chunk-5ZNUH4LV.js} +2 -2
- package/dist/commands/{chunk-7CHCZBNF.js → chunk-6CFHLMKM.js} +4 -4
- package/dist/commands/{chunk-TXXYC7EV.js → chunk-6DDK5XWK.js} +1 -1
- package/dist/commands/{chunk-2TQXCH2K.js → chunk-6GQX752S.js} +3 -3
- package/dist/commands/{chunk-RY6ZDHKB.js → chunk-6MAZ55GF.js} +107 -84
- package/dist/commands/{chunk-SNFLV7VV.js → chunk-6RUWU2SB.js} +2 -2
- package/dist/commands/{chunk-D4SZK7H2.js → chunk-6TIVDEKG.js} +2 -2
- package/dist/commands/{chunk-RIQ75QWR.js → chunk-6UCWAFQY.js} +55 -43
- package/dist/commands/{chunk-4D5KWMFL.js → chunk-6YURRFRU.js} +19 -19
- package/dist/commands/{chunk-7MOZEEFJ.js → chunk-6YVURZAJ.js} +1 -1
- package/dist/commands/{chunk-73JOEKIC.js → chunk-6Z4YZG7P.js} +5 -5
- package/dist/commands/{chunk-NJ53AWJU.js → chunk-77BIN247.js} +9 -9
- package/dist/commands/{chunk-MZHOPRI6.js → chunk-7ABHNNY3.js} +7 -7
- package/dist/commands/{chunk-6WTVAL4D.js → chunk-7C7FOKJK.js} +1 -1
- package/dist/commands/{chunk-KVSSLDA3.js → chunk-7HAGC6SW.js} +5 -5
- package/dist/commands/{chunk-IG22Y5MA.js → chunk-7KKUFLH5.js} +1 -1
- package/dist/commands/{chunk-ZQ3CKRMP.js → chunk-7MJYLUF4.js} +2 -2
- package/dist/commands/{chunk-6UGFS3EU.js → chunk-7NHZCI5Y.js} +11 -11
- package/dist/commands/{chunk-FB3D7CX5.js → chunk-7OQ56DVW.js} +5 -7
- package/dist/commands/{chunk-EK327QOS.js → chunk-7VWPGTZO.js} +10 -10
- package/dist/commands/{chunk-WSOF74K4.js → chunk-7YZXS3AK.js} +3 -3
- package/dist/commands/{chunk-N6TYL3B2.js → chunk-AAUDI7WJ.js} +2 -2
- package/dist/commands/{chunk-3GF52L5F.js → chunk-AC26ZUG5.js} +12 -24
- package/dist/commands/{chunk-EK2Y6B4X.js → chunk-ACZ52JPI.js} +7 -7
- package/dist/commands/{chunk-VD72V5VX.js → chunk-AJ65WNJB.js} +4 -4
- package/dist/commands/{chunk-MYWRGF5A.js → chunk-AK7SEO4Y.js} +2 -2
- package/dist/commands/{chunk-IBEKFLWG.js → chunk-ALDAS2WG.js} +9 -9
- package/dist/commands/{chunk-W32DIQEP.js → chunk-ARFBIJFS.js} +1 -1
- package/dist/commands/{chunk-F3WBEEYC.js → chunk-AVVMDVGO.js} +5 -5
- package/dist/commands/chunk-AXXEMVRJ.js +23 -0
- package/dist/commands/{chunk-GIGKMIPQ.js → chunk-B3M5WSGN.js} +1 -1
- package/dist/commands/{chunk-4Z5723GA.js → chunk-B7ZNIEDV.js} +5 -4
- package/dist/commands/{chunk-B3XFOHDX.js → chunk-BCUDQWYK.js} +10 -4
- package/dist/commands/{chunk-PR3JCPP7.js → chunk-BMKWSWWE.js} +1 -1
- package/dist/commands/{chunk-RZJAUVMI.js → chunk-BMM4RHCG.js} +2 -2
- package/dist/commands/{chunk-LAKVPOJQ.js → chunk-BMTYUJNT.js} +2 -2
- package/dist/commands/{chunk-DAJCUSPG.js → chunk-BRHPRDDV.js} +3 -3
- package/dist/commands/{chunk-UZAU6UI6.js → chunk-BRUBX64M.js} +2 -2
- package/dist/commands/{chunk-BFLFPKQQ.js → chunk-BTZJDHQT.js} +4 -4
- package/dist/commands/{chunk-AI5K4QJO.js → chunk-BYFC6MD2.js} +1 -1
- package/dist/commands/{chunk-JGTLNFFE.js → chunk-BYGJ3BCJ.js} +10 -10
- package/dist/commands/{chunk-5HWZFL4D.js → chunk-C54QXJD6.js} +51 -18
- package/dist/commands/{chunk-LMS6N6GE.js → chunk-CBAKBWSZ.js} +7 -7
- package/dist/commands/{chunk-7EAMUVIO.js → chunk-CFHRNTE5.js} +1 -1
- package/dist/commands/{chunk-UIWAMLQH.js → chunk-CGYDIYHD.js} +2 -2
- package/dist/commands/{chunk-4QYW2IL7.js → chunk-CHKYPF5O.js} +1 -1
- package/dist/commands/{chunk-5HCPSV45.js → chunk-CJBW6BWG.js} +8 -8
- package/dist/commands/chunk-CKUKK7JG.js +252 -0
- package/dist/commands/{chunk-4PES3BAA.js → chunk-CMHGDCGN.js} +3 -3
- package/dist/commands/{chunk-F6OWP2AY.js → chunk-CNGTHSUS.js} +22 -22
- package/dist/commands/{chunk-B2EA2HCY.js → chunk-COGKULQH.js} +4 -4
- package/dist/commands/{chunk-S7XWXG4M.js → chunk-CP2J4RV2.js} +175 -81
- package/dist/commands/{chunk-YGDNUTTI.js → chunk-CQUZ6TNQ.js} +2 -2
- package/dist/commands/chunk-CQZI7RIK.js +72 -0
- package/dist/commands/chunk-CVJHQOI3.js +153 -0
- package/dist/commands/{chunk-2MJ4OCDL.js → chunk-CWCKCZS6.js} +1 -1
- package/dist/commands/chunk-D5OHVIPM.js +17 -0
- package/dist/commands/{chunk-TPKFVVJQ.js → chunk-D6D6WQR6.js} +2 -2
- package/dist/commands/{chunk-5PAEXYIY.js → chunk-D7JRJI44.js} +69 -6
- package/dist/commands/{chunk-LOSOLCCW.js → chunk-D7OAU32Z.js} +1 -1
- package/dist/commands/{chunk-VZHC2I3T.js → chunk-DAAX7XDS.js} +8 -8
- package/dist/commands/{chunk-OHVAEJSM.js → chunk-DEZF7QZZ.js} +5 -5
- package/dist/commands/{chunk-CA6F5OXK.js → chunk-DYZOOWVW.js} +124 -21
- package/dist/commands/{chunk-TKGBF75Y.js → chunk-EDKOSZ3K.js} +5 -5
- package/dist/commands/{chunk-YPNTORQD.js → chunk-EFDVE5P5.js} +1 -1
- package/dist/commands/{chunk-EH3LVYOX.js → chunk-EGIHAEMT.js} +1 -1
- package/dist/commands/{chunk-7P4X4TQL.js → chunk-EKLU6QR7.js} +4 -4
- package/dist/commands/{chunk-ILQZFUDC.js → chunk-ELY76WAR.js} +2 -2
- package/dist/commands/{chunk-2VLHFILE.js → chunk-EM3HAZF6.js} +2 -2
- package/dist/commands/{chunk-F2HFWLQR.js → chunk-EMTZAGT5.js} +20 -1
- package/dist/commands/{chunk-GA4VIFHD.js → chunk-ERG4QRNG.js} +2 -2
- package/dist/commands/{chunk-ICEMFE2V.js → chunk-EUGNQCYK.js} +1 -1
- package/dist/commands/{chunk-3HU3LPIF.js → chunk-EXDFKKMH.js} +2 -2
- package/dist/commands/{chunk-ISPBJVXM.js → chunk-EXWB34R2.js} +7 -7
- package/dist/commands/{chunk-FNOSSXLG.js → chunk-EYMPBHDN.js} +2 -2
- package/dist/commands/{chunk-7V5UVKFG.js → chunk-EZ7IPKIH.js} +2 -2
- package/dist/commands/{chunk-KQWSENCT.js → chunk-F6IQHZYY.js} +3 -3
- package/dist/commands/{chunk-7ZECP3J6.js → chunk-FDS65XOJ.js} +5 -5
- package/dist/commands/{chunk-KXRFGPZD.js → chunk-FGG7V473.js} +21 -5
- package/dist/commands/{chunk-PZ6VWHOO.js → chunk-FHFWNNUC.js} +1 -1
- package/dist/commands/{chunk-XBRD2BDL.js → chunk-FJX7AENO.js} +2 -2
- package/dist/commands/{chunk-M42SLJCD.js → chunk-FKZ5E4JD.js} +4 -4
- package/dist/commands/{chunk-F2J6DGDM.js → chunk-FMZWRDKH.js} +8 -8
- package/dist/commands/{chunk-DSBK66US.js → chunk-FOKCRIAN.js} +10 -10
- package/dist/commands/{chunk-OI7KM4K3.js → chunk-FQGWO2ZH.js} +2 -2
- package/dist/commands/{chunk-2IESYBZH.js → chunk-FURNDIT3.js} +3 -3
- package/dist/commands/chunk-FVDQNMP6.js +93 -0
- package/dist/commands/{chunk-PZU6FZO6.js → chunk-FWU3H4TX.js} +1 -1
- package/dist/commands/{chunk-RYZ3RQRH.js → chunk-G3HBYHFA.js} +1 -1
- package/dist/commands/{chunk-HCA5QG2U.js → chunk-G4E4M2P4.js} +2 -2
- package/dist/commands/{chunk-VJLZ3IQQ.js → chunk-G5KSL2Q2.js} +1 -1
- package/dist/commands/{chunk-Y5ZW3KN5.js → chunk-G6XC7V6Y.js} +2 -2
- package/dist/commands/{chunk-73EBNBUW.js → chunk-GCPP5XIG.js} +1 -1
- package/dist/commands/{chunk-Q3463XNL.js → chunk-GITT5A5A.js} +3 -3
- package/dist/commands/{chunk-T2IO4LEB.js → chunk-GLC47H7I.js} +10 -10
- package/dist/commands/{chunk-GA6E4VGO.js → chunk-GUR54ELE.js} +1 -1
- package/dist/commands/{chunk-7IT23HIR.js → chunk-GY4DMCKS.js} +2 -2
- package/dist/commands/{chunk-PZ4ITSLG.js → chunk-H6JQRHDC.js} +3 -3
- package/dist/commands/{chunk-ZHZSZNE2.js → chunk-HATKF6VX.js} +2 -2
- package/dist/commands/{chunk-ELWNRE6E.js → chunk-HH3CVIFU.js} +5 -5
- package/dist/commands/{chunk-7GMTJDO2.js → chunk-HHMMGDMP.js} +6 -6
- package/dist/commands/{chunk-VD5674LW.js → chunk-HI5WPM6C.js} +2 -2
- package/dist/commands/{chunk-JUUBDYFZ.js → chunk-HQSWPRUF.js} +4 -4
- package/dist/commands/{chunk-ZAJD6T6E.js → chunk-HVCQYZVD.js} +2 -2
- package/dist/commands/chunk-HWEZRNPL.js +66 -0
- package/dist/commands/{chunk-J6GIVMXI.js → chunk-HX3FFIO5.js} +18 -3
- package/dist/commands/{chunk-GU5ML3Y3.js → chunk-HXDTA5VU.js} +13 -68
- package/dist/commands/{chunk-BNXE3NVB.js → chunk-I2KCGKJI.js} +1 -1
- package/dist/commands/{chunk-LC7SBONO.js → chunk-IAD4WLLI.js} +1 -1
- package/dist/commands/{chunk-WWC5L3AO.js → chunk-IB5TT73I.js} +2 -2
- package/dist/commands/{chunk-HOSZITJM.js → chunk-IBAYXCMU.js} +2 -2
- package/dist/commands/{chunk-UTBVTCQN.js → chunk-IF3EIFK4.js} +267 -153
- package/dist/commands/chunk-IGDJNXX2.js +49 -0
- package/dist/commands/{chunk-OJ4LGBVD.js → chunk-ILIITIMQ.js} +3 -3
- package/dist/commands/{chunk-CUR2WNYB.js → chunk-IRGDMSTI.js} +3 -3
- package/dist/commands/{chunk-PZTWQYRI.js → chunk-IYJEBWW5.js} +3 -3
- package/dist/commands/{chunk-A3D2XHOJ.js → chunk-J22PSIXR.js} +40 -9
- package/dist/commands/{chunk-O27H6NN6.js → chunk-J66YBAAM.js} +3 -5
- package/dist/commands/{chunk-P6RGQXHI.js → chunk-J6WKZRV2.js} +2 -2
- package/dist/commands/{chunk-NFEBQED3.js → chunk-J7IO3AYH.js} +2 -2
- package/dist/commands/{chunk-T57W3UWK.js → chunk-JAKC2BHX.js} +1 -1
- package/dist/commands/{chunk-3EO2XN3A.js → chunk-JCAQ7B6J.js} +4 -4
- package/dist/commands/{chunk-QQZOQ7AM.js → chunk-JFLFGLE4.js} +1 -1
- package/dist/commands/{chunk-ZDSDPKCD.js → chunk-JIGBNCDR.js} +1 -1
- package/dist/commands/{chunk-Q5N2J2UF.js → chunk-JJHWTFWQ.js} +5 -7
- package/dist/commands/{chunk-EI6JG5DF.js → chunk-JKOGWGQM.js} +1 -1
- package/dist/commands/{chunk-RK4HE5NW.js → chunk-JM6EVOFN.js} +4 -4
- package/dist/commands/{chunk-EBNIX2TC.js → chunk-JV24VP2O.js} +1 -1
- package/dist/commands/{chunk-BCK5LW4F.js → chunk-JVKXJ763.js} +3 -3
- package/dist/commands/{chunk-D5TAR6TV.js → chunk-JZHY7D6D.js} +1 -1
- package/dist/commands/{chunk-CRNPPKP2.js → chunk-JZK33TA5.js} +1 -1
- package/dist/commands/{chunk-UOAG2XQT.js → chunk-K275REYP.js} +3 -3
- package/dist/commands/{chunk-HESMKHEB.js → chunk-K4G3HOKS.js} +2 -2
- package/dist/commands/{chunk-L6XN3EXI.js → chunk-K64EIHD2.js} +1 -1
- package/dist/commands/{chunk-RINVPTA2.js → chunk-KCFOP5RI.js} +28 -28
- package/dist/commands/{chunk-O26Y2FOJ.js → chunk-KGE4AS2Y.js} +1 -1
- package/dist/commands/{chunk-EWA72KO7.js → chunk-KK2SL42W.js} +2 -2
- package/dist/commands/{chunk-MMXZKLDU.js → chunk-KK7TEL5G.js} +10 -4
- package/dist/commands/{chunk-UEURNXE5.js → chunk-KKIMVXAP.js} +2 -2
- package/dist/commands/{chunk-MAGJFH5T.js → chunk-KODXWMBX.js} +6 -6
- package/dist/commands/{chunk-D4HNS43Q.js → chunk-KPSKWTOS.js} +17 -17
- package/dist/commands/{chunk-VFJYOAOQ.js → chunk-KTV2HNWB.js} +2 -2
- package/dist/commands/{chunk-OWR2TCOY.js → chunk-KWYQR5MK.js} +5 -5
- package/dist/commands/{chunk-FNQW6NY7.js → chunk-KXK2A2HB.js} +6 -2
- package/dist/commands/{chunk-O5FVBIRI.js → chunk-KZ5BBBMO.js} +5 -5
- package/dist/commands/{chunk-JUJFIATR.js → chunk-KZ7HD37E.js} +6 -6
- package/dist/commands/{chunk-2YCKPX3A.js → chunk-KZZWPUJW.js} +1 -1
- package/dist/commands/{chunk-MYNM3YMR.js → chunk-L7DAL54N.js} +3 -3
- package/dist/commands/{chunk-NOXLKIPR.js → chunk-LAR76BFA.js} +1 -1
- package/dist/commands/{chunk-ZA3W73PF.js → chunk-LB557AHJ.js} +3 -3
- package/dist/commands/{chunk-LYEKT3IN.js → chunk-LEB2VP7F.js} +1 -1
- package/dist/commands/{chunk-WQJ7O3C3.js → chunk-LJXKVLYI.js} +1 -1
- package/dist/commands/{chunk-CHX4QTP4.js → chunk-LJZERYLG.js} +1 -1
- package/dist/commands/{chunk-PF22VUWB.js → chunk-LOOFYHUM.js} +76 -26
- package/dist/commands/{chunk-HIPO6HUG.js → chunk-LPSULLNK.js} +1 -1
- package/dist/commands/{chunk-G47ZNQVG.js → chunk-LR22UK5W.js} +1 -1
- package/dist/commands/{chunk-SV4FHQE7.js → chunk-LT7QSHR4.js} +14 -14
- package/dist/commands/{chunk-HIB5G2X6.js → chunk-LUXWDMKI.js} +7 -7
- package/dist/commands/{chunk-XH6BGVVP.js → chunk-LX7TIEMI.js} +9 -36
- package/dist/commands/{chunk-OGNTJ5JB.js → chunk-LYO6TX5L.js} +1 -1
- package/dist/commands/{chunk-JLREFWJ4.js → chunk-LZ5QXE5N.js} +6 -6
- package/dist/commands/{chunk-5WIZR5SC.js → chunk-M4UV3BEV.js} +11 -11
- package/dist/commands/{chunk-LNBUIOK6.js → chunk-M6JDU5EK.js} +4 -4
- package/dist/commands/{chunk-VZSJCFRT.js → chunk-MFBNNTBM.js} +4 -4
- package/dist/commands/{chunk-KHWTJ4F7.js → chunk-MI2OS6TL.js} +3 -3
- package/dist/commands/{chunk-VZCQZFPH.js → chunk-MLW4S35K.js} +19 -8
- package/dist/commands/{chunk-RIUPRMLW.js → chunk-MN425CU6.js} +1 -1
- package/dist/commands/{chunk-7W3D3WRW.js → chunk-MOIOSCZM.js} +2 -2
- package/dist/commands/{chunk-3BNNMJOT.js → chunk-MRORPFSO.js} +20 -320
- package/dist/commands/{chunk-LA5WTOAM.js → chunk-MUGTOJUL.js} +12 -12
- package/dist/commands/{chunk-L6LU2633.js → chunk-MVHPRYHE.js} +1 -1
- package/dist/commands/{chunk-EKCKCX5S.js → chunk-MWO6FOSZ.js} +123 -21
- package/dist/commands/{chunk-AVUGMOHZ.js → chunk-N7QTMTST.js} +2 -2
- package/dist/commands/{chunk-LMSS4ARB.js → chunk-NDBX7LSS.js} +1 -1
- package/dist/commands/{chunk-BEE7OAQ5.js → chunk-NDWZTWXV.js} +21 -2
- package/dist/commands/{chunk-6TESOL3L.js → chunk-NEGJ77RV.js} +7 -7
- package/dist/commands/{chunk-LCEJXF7A.js → chunk-NEGRE5VW.js} +4 -4
- package/dist/commands/{chunk-IXX4SXIP.js → chunk-NFPD2P3V.js} +1 -1
- package/dist/commands/chunk-NHIW7JE6.js +335 -0
- package/dist/commands/{chunk-CJSFC5YI.js → chunk-NILSN7A4.js} +7 -7
- package/dist/commands/{chunk-W4J6YTFE.js → chunk-NOLFSPOB.js} +2 -2
- package/dist/commands/chunk-NT67QTZO.js +65 -0
- package/dist/commands/{chunk-NJT5L6IC.js → chunk-NU7W6QGT.js} +33 -4
- package/dist/commands/chunk-NUR4FQHM.js +21 -0
- package/dist/commands/{chunk-OKKQI4ZG.js → chunk-OAAVY2JK.js} +1 -1
- package/dist/commands/chunk-OF4BY4N7.js +32 -0
- package/dist/commands/{chunk-W47I2KDY.js → chunk-OGS2DK7I.js} +3 -3
- package/dist/commands/{chunk-MS6Q3Z7V.js → chunk-OIPV3PWW.js} +6 -6
- package/dist/commands/{chunk-T33QDAWD.js → chunk-OIX2363L.js} +1 -1
- package/dist/commands/{chunk-GPMSYXYO.js → chunk-OJ65BZBV.js} +283 -15
- package/dist/commands/{chunk-34LAULSC.js → chunk-OKZWEVR4.js} +3 -3
- package/dist/commands/{chunk-2CXAVVST.js → chunk-OL6IF4JC.js} +1 -1
- package/dist/commands/{chunk-6JVNRY5A.js → chunk-OMPRILFH.js} +1 -1
- package/dist/commands/{chunk-VGHSZLYQ.js → chunk-OOWGH2RG.js} +1 -1
- package/dist/commands/{chunk-ERGZPWKP.js → chunk-OP2RFVLS.js} +1 -1
- package/dist/commands/{chunk-UU6GCJGM.js → chunk-ORKVN2LO.js} +2 -2
- package/dist/commands/{chunk-RHII5XI6.js → chunk-OSBWXZJ4.js} +24 -24
- package/dist/commands/{chunk-D3SHCUBC.js → chunk-OVWPZDWP.js} +2 -2
- package/dist/commands/{chunk-Z4HYBFZD.js → chunk-OWYK2BEJ.js} +108 -46
- package/dist/commands/{chunk-P4O67FP5.js → chunk-OX3VQLV2.js} +6 -6
- package/dist/commands/{chunk-L6TU7FC2.js → chunk-OZJP77UM.js} +4 -4
- package/dist/commands/{chunk-SNO7CY2B.js → chunk-P3H3DKTE.js} +2 -2
- package/dist/commands/{chunk-2OIX4JLA.js → chunk-P5SOYWH2.js} +3 -3
- package/dist/commands/{chunk-M4PEC7YW.js → chunk-PHLOTUB7.js} +54 -37
- package/dist/commands/{chunk-73KBUQKI.js → chunk-PTNQCCIB.js} +2 -2
- package/dist/commands/{chunk-4P2LCVGO.js → chunk-PTZEFQUX.js} +8 -8
- package/dist/commands/{chunk-DJVMC3U2.js → chunk-Q426ZSZ4.js} +1 -1
- package/dist/commands/{chunk-US6X7JXC.js → chunk-Q7EEIOAD.js} +4 -4
- package/dist/commands/{chunk-LE7TFPMU.js → chunk-QABRNGQV.js} +2 -2
- package/dist/commands/{chunk-NGKB632X.js → chunk-QDFVVRQP.js} +3 -3
- package/dist/commands/{chunk-36M2UV6C.js → chunk-QGATHT4S.js} +38 -4
- package/dist/commands/{chunk-DIB2Z2OS.js → chunk-QJRVDE7T.js} +1 -1
- package/dist/commands/{chunk-KUJQWO6M.js → chunk-QKTTKAXM.js} +2 -2
- package/dist/commands/{chunk-DXZW4V7J.js → chunk-QMDKDQKW.js} +3 -3
- package/dist/commands/{chunk-VW5SGE7A.js → chunk-QOSC5RKD.js} +1 -1
- package/dist/commands/{chunk-ENLWXAHD.js → chunk-QV5FKMOU.js} +1 -1
- package/dist/commands/{chunk-32SNWQJP.js → chunk-R2THGPI3.js} +2 -2
- package/dist/commands/{chunk-RVHBWSIG.js → chunk-R54Z2Z3X.js} +2 -2
- package/dist/commands/{chunk-CJAA5GAF.js → chunk-RG53UFNW.js} +15 -15
- package/dist/commands/{chunk-HJKZDDDI.js → chunk-RHKCWJQX.js} +1 -1
- package/dist/commands/{chunk-RPDWFUQO.js → chunk-RKIAX4DZ.js} +36 -84
- package/dist/commands/{chunk-LE2T3FGJ.js → chunk-RLBFEHHC.js} +2 -4
- package/dist/commands/{chunk-5GBZ43UA.js → chunk-RMDLFLPE.js} +1 -1
- package/dist/commands/{chunk-U2UH4VM4.js → chunk-RN2YDNLF.js} +2 -2
- package/dist/commands/{chunk-GQHUFNXN.js → chunk-RRAIRS2T.js} +1 -1
- package/dist/commands/{chunk-DRCTDVI2.js → chunk-RUQY5TS3.js} +3 -3
- package/dist/commands/{chunk-WGULS5DA.js → chunk-RW64VHEB.js} +1 -0
- package/dist/commands/{chunk-4G7NKNAZ.js → chunk-RXYMJPJB.js} +3 -3
- package/dist/commands/{chunk-B33BTNB4.js → chunk-S4M6UWR2.js} +21 -5
- package/dist/commands/{chunk-4Q4FXBUQ.js → chunk-SASX3W2M.js} +2 -2
- package/dist/commands/{chunk-TIXJY22D.js → chunk-SJ2ZN575.js} +5 -5
- package/dist/commands/{chunk-NSZTSCBW.js → chunk-SP7DKYGU.js} +13 -13
- package/dist/commands/{chunk-T3FD3Q73.js → chunk-SRG6PKVS.js} +1 -1
- package/dist/commands/{chunk-QA22PBCJ.js → chunk-SSL6A3Y4.js} +3 -3
- package/dist/commands/{chunk-4BEIYKI2.js → chunk-SV4FZR24.js} +2 -0
- package/dist/commands/{chunk-HZSQI6TD.js → chunk-SVTS7ACS.js} +2 -2
- package/dist/commands/{chunk-F7XLEK55.js → chunk-SVV4U5AR.js} +1 -1
- package/dist/commands/{chunk-RRQFITJE.js → chunk-SXJM4DZ5.js} +1 -1
- package/dist/commands/{chunk-OIDMJASD.js → chunk-SYB3M632.js} +1 -1
- package/dist/commands/{chunk-UJOZ2MGX.js → chunk-SYOXIKB7.js} +6 -6
- package/dist/commands/{chunk-5SB37YDW.js → chunk-SZG5HDNP.js} +3 -3
- package/dist/commands/{chunk-R2CF6VZE.js → chunk-T4F33UKZ.js} +4 -4
- package/dist/commands/{chunk-ESQEEL4O.js → chunk-TAEGXID2.js} +2 -2
- package/dist/commands/chunk-TEPYEUYG.js +585 -0
- package/dist/commands/{chunk-LUMCYDGE.js → chunk-TFLHYC2F.js} +2 -2
- package/dist/commands/{chunk-V5OIPYA6.js → chunk-TJKM56WJ.js} +4 -4
- package/dist/commands/{chunk-CYQ3ZF7R.js → chunk-TLAB552K.js} +86 -13
- package/dist/commands/{chunk-ST32OGPY.js → chunk-TP6L4W3W.js} +5 -5
- package/dist/commands/{chunk-C26LKDBE.js → chunk-TR7WWYD5.js} +1 -1
- package/dist/commands/{chunk-PWYXY46Y.js → chunk-TYNH2R66.js} +15 -15
- package/dist/commands/{chunk-AZUE65NT.js → chunk-U5P6G3UV.js} +2 -2
- package/dist/commands/{chunk-REPANBLS.js → chunk-U7Y6RKLK.js} +1 -1
- package/dist/commands/{chunk-55I7OYHI.js → chunk-UIMMWH7U.js} +1 -1
- package/dist/commands/{chunk-72J2G2E7.js → chunk-UKBBWMLE.js} +20 -20
- package/dist/commands/{chunk-VTLL6CKO.js → chunk-UNMSZGSG.js} +14 -14
- package/dist/commands/chunk-UOVUUVDK.js +18 -0
- package/dist/commands/{chunk-JNWHX25C.js → chunk-URDT2O2K.js} +1 -1
- package/dist/commands/{chunk-FGZQSSGH.js → chunk-UREXZJDB.js} +1 -1
- package/dist/commands/{chunk-O4WBADCX.js → chunk-UTHUX7VU.js} +3 -3
- package/dist/commands/{chunk-PDDKRHHS.js → chunk-V5OUZFWK.js} +3 -3
- package/dist/commands/{chunk-N4O5I55P.js → chunk-VCPGFBMN.js} +8 -8
- package/dist/commands/{chunk-WN7NK3NY.js → chunk-VGPIQNDB.js} +1 -1
- package/dist/commands/{chunk-HOGFJHBT.js → chunk-VJS2MCLA.js} +1 -1
- package/dist/commands/{chunk-4YI4SLRJ.js → chunk-VK6D5CWA.js} +8 -8
- package/dist/commands/{chunk-4LWRCPS5.js → chunk-VOF3N4WO.js} +3 -3
- package/dist/commands/{chunk-AM44D7NF.js → chunk-VQRT32JB.js} +1 -1
- package/dist/commands/{chunk-AS3GWVAN.js → chunk-VQVPAVQ3.js} +1 -1
- package/dist/commands/{chunk-6VTJO5L2.js → chunk-VV4TQYGD.js} +3 -3
- package/dist/commands/{chunk-WIE7VUBE.js → chunk-W7DRUOF7.js} +5 -5
- package/dist/commands/{chunk-HH2KDLTP.js → chunk-WAEN2RTT.js} +2 -2
- package/dist/commands/{chunk-NKKH3PBE.js → chunk-WB4T3VY2.js} +18 -1
- package/dist/commands/{chunk-DNJC7X73.js → chunk-WCEUMOKK.js} +2 -2
- package/dist/commands/{chunk-BK6Q4VCA.js → chunk-WTH6NTXU.js} +4 -4
- package/dist/commands/{chunk-WG6GYBRJ.js → chunk-WWVYEHQT.js} +2 -1
- package/dist/commands/{chunk-P4CWLRT2.js → chunk-X3TNPALI.js} +1 -1
- package/dist/commands/{chunk-LZNYHWRO.js → chunk-XC6GG5JR.js} +3 -3
- package/dist/commands/{chunk-RI7EQYKL.js → chunk-XFWI6WHH.js} +2 -2
- package/dist/commands/{chunk-BY3POLIQ.js → chunk-XHGWMD3L.js} +7 -7
- package/dist/commands/{chunk-BPSJSHYD.js → chunk-XI2ABCRX.js} +2 -2
- package/dist/commands/{chunk-TS4ZK46L.js → chunk-XKSUBUIH.js} +5 -5
- package/dist/commands/{chunk-K7GL3BGI.js → chunk-XPBF5DG3.js} +4 -4
- package/dist/commands/{chunk-6SKMZGER.js → chunk-XUMYPESL.js} +20 -8
- package/dist/commands/{chunk-QS5USD4T.js → chunk-XXC32PVL.js} +5 -4
- package/dist/commands/{chunk-ORSI7Y55.js → chunk-XXN2EZBY.js} +1 -1
- package/dist/commands/{chunk-IZVM2TTH.js → chunk-XZQWEVR3.js} +2 -2
- package/dist/commands/{chunk-E3CXOVPQ.js → chunk-Y27PTXXI.js} +1 -1
- package/dist/commands/{chunk-337QQM4C.js → chunk-Y4EBUI6M.js} +106 -5
- package/dist/commands/{chunk-WRX3MINT.js → chunk-YAU3LYNF.js} +1 -1
- package/dist/commands/{chunk-JB7R3A4A.js → chunk-YDURQICF.js} +4 -4
- package/dist/commands/{chunk-RX5JSPPH.js → chunk-YGFOGA7C.js} +11 -11
- package/dist/commands/{chunk-S6SXMBF2.js → chunk-YHJ2AJMA.js} +2 -2
- package/dist/commands/{chunk-MVPUQLN5.js → chunk-YM77CF4D.js} +4 -4
- package/dist/commands/{chunk-ZYIMQHCB.js → chunk-YNPRJCEO.js} +6 -6
- package/dist/commands/{chunk-3UKJFWKS.js → chunk-YTBQAD5W.js} +3 -3
- package/dist/commands/{chunk-WW3TX742.js → chunk-Z3WGHIVB.js} +3 -3
- package/dist/commands/{chunk-KIVOZY2J.js → chunk-ZBZ5DDCH.js} +66 -64
- package/dist/commands/{chunk-TAPDXK34.js → chunk-ZLRUHSOP.js} +1 -1
- package/dist/commands/{chunk-XYAK53TK.js → chunk-ZNR75OXP.js} +2 -1
- package/dist/commands/{chunk-CADFBQJJ.js → chunk-ZSOR4ISJ.js} +4 -4
- package/dist/commands/{chunk-6NRTLH6I.js → chunk-ZYFHYQA7.js} +1 -1
- package/dist/commands/{chunk-Q7TV3OV6.js → chunk-ZZFFSQF4.js} +4 -4
- package/dist/commands/{chunk-PDAY76AN.js → chunk-ZZULXNC2.js} +1 -1
- package/dist/commands/{chunk-5Y7QQYTU.js → chunk-ZZXO6TFH.js} +1 -1
- package/dist/commands/code-symbol-cli.js +4 -4
- package/dist/commands/codex-hook-adapter.js +99 -100
- package/dist/commands/command-derive.js +10 -10
- package/dist/commands/cost-audit-main.js +94 -92
- package/dist/commands/cspell-cached.js +24 -23
- package/dist/commands/defect-origin-main.js +19 -18
- package/dist/commands/defect-report-main.js +15 -14
- package/dist/commands/disposition-cli.js +67 -64
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/document-read-cli.js +89 -9
- package/dist/commands/document-section-main.js +89 -9
- package/dist/commands/edit-files-cli.js +1 -1
- package/dist/commands/effect-audit-cli.js +20 -19
- package/dist/commands/epic-audit-main.js +55 -53
- package/dist/commands/epic-bundle-main.js +87 -85
- package/dist/commands/epic-check.js +16 -15
- package/dist/commands/epic-main.js +93 -91
- package/dist/commands/epic-next-main.js +51 -49
- package/dist/commands/format-edited-cli.js +30 -32
- package/dist/commands/format.js +11 -10
- package/dist/commands/fresh-machine-cli.js +6 -6
- package/dist/commands/git-followup-workflow.js +137 -122
- package/dist/commands/git-workflow.js +28 -27
- package/dist/commands/github-release-cli.js +26 -3
- package/dist/commands/hook-ledger-cli.js +74 -126
- package/dist/commands/init-main.js +20 -19
- package/dist/commands/inputs.json +1907 -1876
- package/dist/commands/issue-ack-cli.js +5 -5
- package/dist/commands/issue-already-done-cli.js +63 -58
- package/dist/commands/issue-body-cli.js +44 -42
- package/dist/commands/issue-cite-main.js +11 -10
- package/dist/commands/issue-comment-main.js +15 -11
- package/dist/commands/issue-consolidate-cli.js +31 -30
- package/dist/commands/issue-file-main.js +114 -110
- package/dist/commands/issue-fold-existing-cli.js +88 -86
- package/dist/commands/issue-fold-main.js +26 -25
- package/dist/commands/issue-lint-main.js +38 -37
- package/dist/commands/issue-measured-cli.js +66 -61
- package/dist/commands/issue-plan-cli.js +103 -101
- package/dist/commands/issue-premise-unmet-cli.js +66 -61
- package/dist/commands/issue-priority-cli.js +13 -12
- package/dist/commands/issue-read-main.js +18 -17
- package/dist/commands/issue-release-class-cli.js +12 -11
- package/dist/commands/issue-release-main.js +13 -12
- package/dist/commands/issue-scout-main.js +89 -87
- package/dist/commands/issue-spill-main.js +114 -110
- package/dist/commands/issue-state-main.js +16 -15
- package/dist/commands/issue-tick-cli.js +14 -13
- package/dist/commands/josh-completion.js +10 -10
- package/dist/commands/lane-adopt-cli.js +19 -19
- package/dist/commands/lane-breakdown-cli.js +154 -126
- package/dist/commands/lane-cli.js +131 -125
- package/dist/commands/lane-launch-main.js +17 -17
- package/dist/commands/lane-limit-cli.js +81 -79
- package/dist/commands/lane-measure-cli.js +246 -130
- package/dist/commands/lane-pause-cli.js +15 -15
- package/dist/commands/lane-plan-cli.js +108 -101
- package/dist/commands/lane-resolve-cli.js +20 -19
- package/dist/commands/lane-restart-cli.js +124 -118
- package/dist/commands/lane-why-cli.js +85 -82
- package/dist/commands/lane-withdraw-cli.js +49 -48
- package/dist/commands/latest-corepack.js +3 -3
- package/dist/commands/latest-if-required-cli.js +9 -9
- package/dist/commands/latest-scope-main.js +5 -5
- package/dist/commands/latest-update.js +3 -3
- package/dist/commands/lines-command.js +3 -3
- package/dist/commands/lint-parallel-main.js +32 -31
- package/dist/commands/lint-related.js +79 -60
- package/dist/commands/lint-rule.js +32 -31
- package/dist/commands/lockfile-policy.js +11 -11
- package/dist/commands/main-merge-main.js +5 -5
- package/dist/commands/main-sync-main.js +5 -5
- package/dist/commands/managed-config-scope-cli.js +3 -3
- package/dist/commands/measure-rerun-cli.js +10 -10
- package/dist/commands/metrics-command.js +91 -58
- package/dist/commands/observation-record-cli.js +3 -3
- package/dist/commands/observations-flush-cli.js +27 -25
- package/dist/commands/oracle-list-cli.js +2 -2
- package/dist/commands/overrides-check.js +4 -4
- package/dist/commands/package-scout-cli.js +67 -26
- package/dist/commands/plan-consumers-main.js +4 -4
- package/dist/commands/plan-scaffold-cli.js +132 -91
- package/dist/commands/pr-classification-main.js +3 -3
- package/dist/commands/pre-commit-lint.js +11 -12
- package/dist/commands/pre-commit-type-check.js +25 -24
- package/dist/commands/pre-push-unit.js +33 -33
- package/dist/commands/pretool-guard-cli.js +90 -91
- package/dist/commands/project-profile-cli.js +5 -4
- package/dist/commands/propagate.js +15 -15
- package/dist/commands/prose-stale-cli.js +20 -19
- package/dist/commands/publishable-range-check.js +4 -4
- package/dist/commands/read-files-cli.js +2 -2
- package/dist/commands/read-set-cli.js +61 -24
- package/dist/commands/refactor-scan-cli.js +6 -6
- package/dist/commands/release-cli.js +64 -36
- package/dist/commands/release-scope-main.js +19 -18
- package/dist/commands/rename-cli.js +27 -29
- package/dist/commands/reserved-run.js +3 -3
- package/dist/commands/retrospective-cli.js +104 -102
- package/dist/commands/review-attest-cli.js +6 -6
- package/dist/commands/review-brief-main.js +127 -109
- package/dist/commands/review-findings-cli.js +2 -2
- package/dist/commands/review-pair-cli.js +110 -84
- package/dist/commands/review-record-main.js +108 -83
- package/dist/commands/review-round2-cli.js +46 -45
- package/dist/commands/review-stops-cli.js +16 -16
- package/dist/commands/review-submit-cli.js +127 -109
- package/dist/commands/rule-list.js +58 -60
- package/dist/commands/rule-value-cli.js +226 -74
- package/dist/commands/run-add-cli.js +28 -27
- package/dist/commands/run-board-main.js +136 -132
- package/dist/commands/run-carry-cli.js +127 -124
- package/dist/commands/run-chain-cli.js +116 -93
- package/dist/commands/run-cut-cli.js +124 -119
- package/dist/commands/run-ending-cli.js +19 -22
- package/dist/commands/run-entry-cli.js +183 -180
- package/dist/commands/run-event-cli.js +5 -5
- package/dist/commands/run-handoff-cli.js +52 -28
- package/dist/commands/run-handoff-lanes-cli.js +15 -15
- package/dist/commands/run-hold-main.js +64 -62
- package/dist/commands/run-liveness-cli.js +11 -11
- package/dist/commands/run-merge-main.js +119 -116
- package/dist/commands/run-next-cli.js +87 -86
- package/dist/commands/run-park-cli.js +111 -92
- package/dist/commands/run-pause-cli.js +147 -133
- package/dist/commands/run-pickup-cli.js +13 -13
- package/dist/commands/run-prep-main.js +83 -82
- package/dist/commands/run-prime-cli.js +107 -87
- package/dist/commands/run-progress-main.js +123 -107
- package/dist/commands/run-report-cli.js +25 -24
- package/dist/commands/run-review-cli.js +168 -149
- package/dist/commands/run-ship-cli.js +208 -203
- package/dist/commands/run-ship-evidence-cli.js +38 -37
- package/dist/commands/run-ship-wait-main.js +40 -37
- package/dist/commands/run-split-cli.js +127 -125
- package/dist/commands/run-stale-main.js +36 -35
- package/dist/commands/run-status-cli.js +16 -15
- package/dist/commands/run-step-cli.js +173 -164
- package/dist/commands/run-tail-cli.js +1 -1
- package/dist/commands/run-tidy-main.js +30 -29
- package/dist/commands/run-wake-main.js +137 -119
- package/dist/commands/run-watcher-guard-cli.js +30 -29
- package/dist/commands/secretlint-scan.js +2 -2
- package/dist/commands/selfcheck-cli.js +27 -26
- package/dist/commands/session-language-main.js +48 -28
- package/dist/commands/sonar-hotspots-cli.js +3 -3
- package/dist/commands/split-assess-cli.js +24 -23
- package/dist/commands/split-child-recover-cli.js +13 -12
- package/dist/commands/start.js +37 -35
- package/dist/commands/stash-pop-main.js +3 -3
- package/dist/commands/stash-push-main.js +3 -3
- package/dist/commands/stop-guard.js +144 -143
- package/dist/commands/sync-main.js +11 -10
- package/dist/commands/telegram-test-main.js +5 -5
- package/dist/commands/test-declared.js +9 -8
- package/dist/commands/test-e2e-guard.js +23 -22
- package/dist/commands/test-pinned-main.js +26 -25
- package/dist/commands/test-reach-cli.js +15 -14
- package/dist/commands/test-red-main.js +5 -5
- package/dist/commands/{test-related-ZT2AO62I.js → test-related-ZCNC46MS.js} +31 -31
- package/dist/commands/test-related-main.js +51 -50
- package/dist/commands/test-unit-guard-main.js +9 -8
- package/dist/commands/time-cli.js +24 -27
- package/dist/commands/time-density-cli.js +8 -9
- package/dist/commands/tree-status-cli.js +4 -4
- package/dist/commands/type-check-command.js +8 -7
- package/dist/commands/ui-shot-cli.js +4 -4
- package/dist/commands/uninstall.js +20 -19
- package/dist/commands/unused-members-cli.js +9 -8
- package/dist/commands/upstream-interrupt-main.js +115 -111
- package/dist/commands/verification-gate.js +46 -46
- package/dist/commands/version-check.js +5 -5
- package/dist/hooks/{chunk-LWD43Z3C.js → chunk-5CUXGQT6.js} +1667 -107
- package/dist/hooks/{chunk-4YXV2REH.js → chunk-5R5YFQR5.js} +8 -8
- package/dist/hooks/{chunk-LKQBEKBI.js → chunk-6RLY27FT.js} +8 -8
- package/dist/hooks/{chunk-CICKRHTB.js → chunk-AO4TOV4V.js} +119 -2679
- package/dist/hooks/{chunk-NUPVO7RI.js → chunk-G5WSPYJ6.js} +4296 -1687
- package/dist/hooks/{chunk-UU4PTPEZ.js → chunk-HHIVWGHX.js} +250 -125
- package/dist/hooks/{chunk-P7BPAU26.js → chunk-IURJANNZ.js} +2 -2
- package/dist/hooks/{chunk-6RR6JZSB.js → chunk-OV22V63P.js} +357 -1744
- package/dist/hooks/{chunk-RQXECHAS.js → chunk-SXABK6UV.js} +57 -45
- package/dist/hooks/codex-hook-adapter.js +11 -11
- package/dist/hooks/daemon.js +1053 -690
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +551 -536
- package/dist/hooks/pretool-guard.js +7 -7
- package/dist/hooks/session-lang.js +292 -15
- package/dist/hooks/stop-guard.js +225 -48
- package/dist/inputs.json +65 -65
- package/dist/josh.js +73 -19
- package/dist/self-sync-guard/index.js +18 -1
- package/dist/version/index.js +18 -1
- package/package.json +3 -3
- package/pnpm-workspace.yaml +5 -13
- package/prompts/collaboration-workflow/issue-template.en.md +56 -52
- package/scripts/agent/agent-argv.ts +20 -6
- package/scripts/agent/agent-phase-profile.ts +89 -0
- package/scripts/agent/agent-role-profile.ts +3 -71
- package/scripts/agent/agent-ship-cap.ts +44 -0
- package/scripts/agent/agent-worker-profile.ts +154 -0
- package/scripts/agent/claude-agent-argv.ts +1 -1
- package/scripts/agent/lane-instructions.ts +29 -3
- package/scripts/auto-ok/auto-ok-judge-cli.ts +3 -0
- package/scripts/auto-ok/auto-ok-judge-write.ts +2 -1
- package/scripts/auto-ok/auto-ok-judge.ts +4 -2
- package/scripts/backlog/backlog-drive-escalate.ts +115 -0
- package/scripts/backlog/backlog-drive-stalled-retry.ts +48 -10
- package/scripts/document/document-scan.ts +35 -1
- package/scripts/gh/git-pr-checks-failed.ts +24 -0
- package/scripts/hooks/implementation-shell-deny-expansion.ts +20 -0
- package/scripts/hooks/implementation-shell-deny-git.ts +128 -0
- package/scripts/hooks/implementation-shell-deny.ts +14 -138
- package/scripts/hooks/implementation-shell.ts +28 -5
- package/scripts/hooks/step-zero-notice.ts +9 -6
- package/scripts/hooks/stop-actions.ts +4 -2
- package/scripts/init/init-logic-workspace.ts +1 -1
- package/scripts/issue/issue-auto-ok.ts +43 -4
- package/scripts/issue/issue-body-keys.ts +4 -0
- package/scripts/issue/issue-comment-cli.ts +15 -2
- package/scripts/issue/issue-evidence-exit.ts +6 -2
- package/scripts/issue/issue-file-cli.ts +5 -1
- package/scripts/issue/issue-file-pass.ts +14 -7
- package/scripts/issue/issue-file-worker.ts +95 -0
- package/scripts/issue/issue-file.ts +1 -1
- package/scripts/issue/issue-outcome.ts +107 -0
- package/scripts/issue/issue-read.ts +12 -7
- package/scripts/issue/issue-watch-diff.ts +2 -1
- package/scripts/josh/josh-commands-ai.ts +2 -2
- package/scripts/josh/josh-commands-development.ts +21 -5
- package/scripts/josh/josh-commands-issue-write.ts +3 -2
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-project.ts +7 -2
- package/scripts/josh/josh-commands-run.ts +10 -2
- package/scripts/josh/josh-commands-workflow.ts +5 -0
- package/scripts/lane/lane-breakdown-cli.ts +14 -4
- package/scripts/lane/lane-breakdown-text.ts +7 -0
- package/scripts/lane/lane-breakdown.ts +21 -1
- package/scripts/lane/lane-dispatch-prepare.ts +83 -0
- package/scripts/lane/lane-dispatch.ts +3 -53
- package/scripts/lane/lane-elapsed-time.ts +118 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +4 -1
- package/scripts/lane/lane-net-time.ts +35 -7
- package/scripts/lane/lane-overrun.ts +1 -1
- package/scripts/lane/lane-plan-cli.ts +7 -3
- package/scripts/lane/lane-plan-estimate.ts +57 -0
- package/scripts/lane/lane-plan-size.ts +11 -20
- package/scripts/lane/lane-plan.ts +1 -0
- package/scripts/lane/lane-relaunch.ts +9 -4
- package/scripts/lane/lane-stage-budget.ts +6 -1
- package/scripts/lane/lane-stage-events.ts +103 -0
- package/scripts/lane/lane-stats-tables.ts +3 -0
- package/scripts/lane/lane-stop-check-stats.ts +117 -0
- package/scripts/lane/lane-stop-stats.ts +30 -6
- package/scripts/lane/lane-why-causes.ts +3 -11
- package/scripts/lane/openai-lane-supervisor-owner.ts +12 -0
- package/scripts/lane/openai-lane-supervisor.ts +36 -1
- package/scripts/lib/home-tilde.ts +24 -0
- package/scripts/lib/package-manifest.ts +27 -1
- package/scripts/observations/observation-ledger-archive.ts +180 -0
- package/scripts/observations/observation-ledger-home.ts +1 -0
- package/scripts/observations/observation-ledger.ts +5 -0
- package/scripts/observations/observations-flush-transaction.ts +358 -0
- package/scripts/observations/observations-flush.ts +72 -172
- package/scripts/plan/plan-scaffold-cli.ts +17 -6
- package/scripts/plan/plan-scaffold.ts +11 -0
- package/scripts/release/github-release-notes.ts +24 -0
- package/scripts/release/github-release-runs.ts +32 -6
- package/scripts/release/github-release.ts +10 -2
- package/scripts/release/release-progress.ts +22 -10
- package/scripts/release/release-publish-run.ts +39 -6
- package/scripts/repo/repository-labels.ts +23 -11
- package/scripts/review/review-comment-round.ts +10 -5
- package/scripts/rules/broad-investigation-shell.ts +2 -2
- package/scripts/rules/codex-prompt.ts +63 -0
- package/scripts/rules/direct-issue-comment.ts +62 -2
- package/scripts/rules/direct-issue-read.ts +55 -2
- package/scripts/rules/guard-remedy.ts +10 -4
- package/scripts/rules/issue-citation.ts +20 -9
- package/scripts/rules/last-prompt.ts +8 -4
- package/scripts/rules/rule-value-cli.ts +85 -4
- package/scripts/rules/rule-value-trend.ts +108 -0
- package/scripts/rules/shell-redirects.ts +19 -7
- package/scripts/rules/shell-segments.ts +145 -20
- package/scripts/rules/shell-tokens.ts +66 -0
- package/scripts/rules/standalone-gh-call.ts +63 -0
- package/scripts/rules/unasked-filing.ts +12 -4
- package/scripts/run/board/run-board-closed.ts +10 -1
- package/scripts/run/board/run-board-decision-read.ts +52 -12
- package/scripts/run/board/run-board-decision.ts +5 -0
- package/scripts/run/board/run-board-ending-reason.ts +21 -7
- package/scripts/run/board/run-board-github.ts +8 -1
- package/scripts/run/board/run-board-layout.ts +5 -3
- package/scripts/run/board/run-board-link.ts +2 -0
- package/scripts/run/board/run-board-operation.ts +6 -2
- package/scripts/run/board/run-board-pause-fixture.json +12 -0
- package/scripts/run/board/run-board-pause.ts +87 -0
- package/scripts/run/board/run-board-plan-shared.ts +2 -0
- package/scripts/run/board/run-board-render-condition.ts +10 -1
- package/scripts/run/board/run-board-render-title.ts +7 -0
- package/scripts/run/board/run-board-settle.ts +16 -2
- package/scripts/run/board/run-board-snapshot.ts +4 -0
- package/scripts/run/board/run-board-status.ts +11 -1
- package/scripts/run/cut/run-cut-cli.ts +2 -1
- package/scripts/run/park/run-park-cli.ts +13 -1
- package/scripts/run/park/run-park-escalate.ts +102 -0
- package/scripts/run/park/run-stalled.ts +29 -7
- package/scripts/run/review/run-review-early-push.ts +6 -6
- package/scripts/run/ship/run-ship-stop-cause.ts +12 -1
- package/scripts/split/split-assess.ts +14 -5
- package/scripts/test/test-related-touched.ts +21 -3
- package/scripts/test/test-related.ts +1 -1
- package/dist/commands/chunk-6WEVLIZE.js +0 -29
- package/dist/commands/chunk-E2ZCUKHT.js +0 -274
- package/dist/commands/chunk-NMLCPYBN.js +0 -134
- package/dist/commands/chunk-QEIO2ZNQ.js +0 -324
- package/dist/commands/chunk-QWX7EBC6.js +0 -112
- package/dist/commands/chunk-RQRLW4XK.js +0 -20
- package/dist/commands/chunk-UCQJDYE3.js +0 -21
- package/dist/commands/chunk-W4YH2DF3.js +0 -58
- package/dist/commands/{chunk-LRA3PXHS.js → chunk-ENKFCOVY.js} +3 -3
- package/dist/commands/{chunk-RUWV4INF.js → chunk-HQGNXR6I.js} +3 -3
|
@@ -9,9 +9,10 @@ import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
|
9
9
|
import { time_reported_failure } from '#scripts/time-runtime/time-reported-failure'
|
|
10
10
|
import { z } from 'zod'
|
|
11
11
|
import { bash_triggers } from './bash-triggers'
|
|
12
|
+
import { codex_prompt } from './codex-prompt'
|
|
13
|
+
import { issue_citation } from './issue-citation'
|
|
12
14
|
import { last_prompt } from './last-prompt'
|
|
13
15
|
import { shell_segments } from './shell-segments'
|
|
14
|
-
import { turn_filings } from './turn-filings'
|
|
15
16
|
|
|
16
17
|
// The `unasked-filing` row of `delivered-rules.ts` (joshuafolkken/kit#7293). An interactive session
|
|
17
18
|
// files only on the person's instruction; an unattended run files without asking
|
|
@@ -61,20 +62,27 @@ const UNASKED_FILING_REASON =
|
|
|
61
62
|
'(`.claude/skills/workflow-commands/observation-filing.md`).'
|
|
62
63
|
|
|
63
64
|
function is_instructed(prompt: string): boolean {
|
|
64
|
-
const trimmed =
|
|
65
|
+
const trimmed = issue_citation
|
|
66
|
+
.prose_lines(prompt)
|
|
67
|
+
.join('\n')
|
|
68
|
+
.replaceAll(/(?<!`)(`+)(?!`)[\s\S]*?(?<!`)\1(?!`)/gu, '')
|
|
69
|
+
.replaceAll(/「[^「」\n]*」|『[^『』\n]*』|"[^"\n]*"|'[^'\n]*'/gu, '')
|
|
70
|
+
.trim()
|
|
65
71
|
|
|
66
72
|
return FILING_WORDS.some((pattern) => pattern.test(trimmed))
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
function reply_text(line: string): string {
|
|
70
|
-
const parsed = ASSISTANT_LINE_SCHEMA.safeParse(
|
|
76
|
+
const parsed = ASSISTANT_LINE_SCHEMA.safeParse(
|
|
77
|
+
json_value.parse_or_undefined(codex_prompt.normalize(line)),
|
|
78
|
+
)
|
|
71
79
|
|
|
72
80
|
return parsed.success ? time_reported_failure.result_text(parsed.data.message.content) : ''
|
|
73
81
|
}
|
|
74
82
|
|
|
75
83
|
// A prompt line the person wrote — not a skill body or a hand-back the harness wrote on a prompt line.
|
|
76
84
|
function is_person_line(line: string): boolean {
|
|
77
|
-
return
|
|
85
|
+
return last_prompt.person_prompt(line) !== undefined
|
|
78
86
|
}
|
|
79
87
|
|
|
80
88
|
// The model's last words before the person's last prompt — where the proposal a yes confirms sits.
|
|
@@ -4,6 +4,7 @@ import { issue_label_schema } from '#scripts/git/git-schemas'
|
|
|
4
4
|
import { parse_json_object_or_undefined } from '#scripts/git/parse-json-array'
|
|
5
5
|
import { ALREADY_DONE_LABEL, has_label_name } from '#scripts/issue/issue-labels'
|
|
6
6
|
import { issue_merged } from '#scripts/issue/issue-merged'
|
|
7
|
+
import { issue_outcome, type IssueOutcome } from '#scripts/issue/issue-outcome'
|
|
7
8
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
8
9
|
import { z } from 'zod'
|
|
9
10
|
import { run_board_closed_graphql, type ClosedSource } from './run-board-closed-graphql'
|
|
@@ -15,6 +16,7 @@ import { run_board_closed_graphql, type ClosedSource } from './run-board-closed-
|
|
|
15
16
|
// keeps the answer for the run and asks GitHub only about children it has not read yet.
|
|
16
17
|
|
|
17
18
|
interface ClosedIssue {
|
|
19
|
+
outcome?: IssueOutcome | undefined
|
|
18
20
|
title: string
|
|
19
21
|
// Its label names, so a closed row still draws its release category (joshuafolkken/kit#3577).
|
|
20
22
|
labels: ReadonlyArray<string>
|
|
@@ -115,7 +117,14 @@ async function read_closed(issue: number, source?: ClosedSource): Promise<Closed
|
|
|
115
117
|
|
|
116
118
|
const is_not_planned = view.stateReason === NOT_PLANNED_REASON
|
|
117
119
|
|
|
118
|
-
return {
|
|
120
|
+
return {
|
|
121
|
+
title: view.title,
|
|
122
|
+
labels,
|
|
123
|
+
closed_ms: closed_ms_of(view),
|
|
124
|
+
is_merged,
|
|
125
|
+
is_not_planned,
|
|
126
|
+
...(await issue_outcome.recorded(issue, is_merged)),
|
|
127
|
+
}
|
|
119
128
|
}
|
|
120
129
|
|
|
121
130
|
async function read_all(
|
|
@@ -2,11 +2,17 @@ import { epic_graph, type EpicChild, type IssueReference } from '#scripts/epic/e
|
|
|
2
2
|
import { epic_issue } from '#scripts/epic/epic-issue'
|
|
3
3
|
import { git_gh_etag_read } from '#scripts/gh/git-gh-etag-read'
|
|
4
4
|
import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
|
|
5
|
-
import { has_label_name, NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
6
|
-
import { issue_read } from '#scripts/issue/issue-read'
|
|
5
|
+
import { has_label_name, has_parked_label, NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
6
|
+
import { issue_read, type IssueComment } from '#scripts/issue/issue-read'
|
|
7
7
|
import { run_board_decision } from './run-board-decision'
|
|
8
8
|
import { run_board_decision_graphql, type ViewLoader } from './run-board-decision-graphql'
|
|
9
9
|
import { run_board_layout, type BoardPlan } from './run-board-layout'
|
|
10
|
+
import { run_board_pause, type PauseRecord } from './run-board-pause'
|
|
11
|
+
|
|
12
|
+
interface CommentReasons {
|
|
13
|
+
question: string | undefined
|
|
14
|
+
pause: PauseRecord
|
|
15
|
+
}
|
|
10
16
|
|
|
11
17
|
interface DecisionNode extends EpicChild {
|
|
12
18
|
title: string
|
|
@@ -109,11 +115,11 @@ async function blocker_of(
|
|
|
109
115
|
return blockers.find((blocker) => blocker !== undefined) ?? terminal_of(node)
|
|
110
116
|
}
|
|
111
117
|
|
|
112
|
-
async function
|
|
118
|
+
async function read_comments(
|
|
113
119
|
number: number,
|
|
114
120
|
repo: string,
|
|
115
121
|
answered: ReadonlyMap<number, string>,
|
|
116
|
-
): Promise<
|
|
122
|
+
): Promise<ReadonlyArray<IssueComment>> {
|
|
117
123
|
const json =
|
|
118
124
|
answered.get(number) ??
|
|
119
125
|
(await git_gh_issue_read.issue_list_comments(
|
|
@@ -122,23 +128,57 @@ async function question_of(
|
|
|
122
128
|
repo,
|
|
123
129
|
git_gh_issue_read.read_comments_conditionally,
|
|
124
130
|
))
|
|
125
|
-
const comments = await issue_read.parse_comments(json, repo)
|
|
126
|
-
const question = run_board_decision.comment_question(issue_read.trusted_bodies(comments ?? []))
|
|
127
131
|
|
|
128
|
-
return
|
|
132
|
+
return (await issue_read.parse_comments(json, repo)) ?? []
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function comments_of(
|
|
136
|
+
number: number,
|
|
137
|
+
repo: string,
|
|
138
|
+
answered: ReadonlyMap<number, string>,
|
|
139
|
+
): Promise<ReadonlyArray<IssueComment>> {
|
|
140
|
+
try {
|
|
141
|
+
return await read_comments(number, repo, answered)
|
|
142
|
+
} catch {
|
|
143
|
+
return []
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async function question_of(
|
|
148
|
+
number: number,
|
|
149
|
+
repo: string,
|
|
150
|
+
answered: ReadonlyMap<number, string>,
|
|
151
|
+
): Promise<readonly [number, CommentReasons]> {
|
|
152
|
+
const comments = await comments_of(number, repo, answered)
|
|
153
|
+
const question = run_board_decision.comment_question(issue_read.trusted_bodies(comments))
|
|
154
|
+
|
|
155
|
+
const issue_url = `https://github.com/${repo}/issues/${String(number)}`
|
|
156
|
+
|
|
157
|
+
return [number, { question, pause: run_board_pause.from_comments(comments, issue_url) }]
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function question_pair([number, value]: readonly [number, CommentReasons]): Array<
|
|
161
|
+
readonly [number, string]
|
|
162
|
+
> {
|
|
163
|
+
return value.question === undefined ? [] : [[number, value.question]]
|
|
129
164
|
}
|
|
130
165
|
|
|
131
|
-
async function questions_of(
|
|
166
|
+
async function questions_of(
|
|
167
|
+
plan: BoardPlan,
|
|
168
|
+
): Promise<Pick<BoardPlan, 'decision_questions' | 'pause_reasons'>> {
|
|
132
169
|
const { repo } = plan.context
|
|
133
170
|
const numbers = [...plan.labels]
|
|
134
|
-
.filter(([, labels]) =>
|
|
171
|
+
.filter(([, labels]) => has_parked_label(labels))
|
|
135
172
|
.map(([number]) => number)
|
|
136
173
|
const answered = await run_board_decision_graphql.read_comments(numbers, repo)
|
|
137
174
|
const pairs = await Promise.all(
|
|
138
175
|
numbers.map(async (number) => await question_of(number, repo, answered)),
|
|
139
176
|
)
|
|
140
177
|
|
|
141
|
-
return
|
|
178
|
+
return {
|
|
179
|
+
decision_questions: new Map(pairs.flatMap((pair) => question_pair(pair))),
|
|
180
|
+
pause_reasons: new Map(pairs.map(([number, value]) => [number, value.pause])),
|
|
181
|
+
}
|
|
142
182
|
}
|
|
143
183
|
|
|
144
184
|
async function wait_of(
|
|
@@ -178,14 +218,14 @@ async function with_decisions(plan: BoardPlan | undefined): Promise<BoardPlan |
|
|
|
178
218
|
...(plan.waves.running ?? []),
|
|
179
219
|
]
|
|
180
220
|
const read = read_of(plan, children)
|
|
181
|
-
const [
|
|
221
|
+
const [questions, waits] = await Promise.all([
|
|
182
222
|
questions_of(plan),
|
|
183
223
|
Promise.all(children.map(async (child) => await wait_of(child, read))),
|
|
184
224
|
])
|
|
185
225
|
|
|
186
226
|
return {
|
|
187
227
|
...plan,
|
|
188
|
-
|
|
228
|
+
...questions,
|
|
189
229
|
decision_waits: new Map(waits.filter((pair) => pair !== undefined)),
|
|
190
230
|
}
|
|
191
231
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { markdown_section } from '#scripts/issue/markdown-section'
|
|
2
2
|
import { run_park_body } from '#scripts/run/park/run-park-body'
|
|
3
3
|
import type { BoardPlan, RowRead, RowReason } from './run-board-layout'
|
|
4
|
+
import { run_board_pause } from './run-board-pause'
|
|
5
|
+
import type { ItemStatus } from './run-board-status'
|
|
4
6
|
|
|
5
7
|
// The park's question, then after `;` a note on why it parked that is not the question
|
|
6
8
|
// (`backlog-drive-retry.ts`: `needs-decision; blocker #M closed`).
|
|
@@ -67,7 +69,10 @@ function reason_of(
|
|
|
67
69
|
number: number,
|
|
68
70
|
reason: string | undefined,
|
|
69
71
|
read: RowRead,
|
|
72
|
+
status?: ItemStatus,
|
|
70
73
|
): RowReason | undefined {
|
|
74
|
+
const pause = run_board_pause.reason_of(number, read, status)
|
|
75
|
+
if (pause !== undefined) return pause
|
|
71
76
|
const parts = parts_of(reason)
|
|
72
77
|
const question = question_of(parts.question) ?? read_question(number, read)
|
|
73
78
|
|
|
@@ -3,6 +3,7 @@ import { lane_withdraw } from '#scripts/lane/lane-withdraw'
|
|
|
3
3
|
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
4
4
|
import { run_stalled } from '#scripts/run/park/run-stalled'
|
|
5
5
|
import type { BoardRow, RowRead, RowReason } from './run-board-layout'
|
|
6
|
+
import { run_board_pause } from './run-board-pause'
|
|
6
7
|
import { run_board_render_title } from './run-board-render-title'
|
|
7
8
|
import type { ItemState, ItemStatus } from './run-board-status'
|
|
8
9
|
|
|
@@ -101,10 +102,10 @@ function is_stalled(status: ItemStatus, labels: ReadonlyArray<string> = []): boo
|
|
|
101
102
|
|
|
102
103
|
// Each finished state that did not merge: how its tail names it, and the reason it draws when none
|
|
103
104
|
// was recorded.
|
|
104
|
-
const FINISHED_ENDINGS: Partial<Record<ItemState,
|
|
105
|
-
done:
|
|
106
|
-
withdrawn:
|
|
107
|
-
already_done:
|
|
105
|
+
const FINISHED_ENDINGS: Partial<Record<ItemState, string>> = {
|
|
106
|
+
done: 'Closed without a merged PR',
|
|
107
|
+
withdrawn: 'Run withdrawn',
|
|
108
|
+
already_done: 'Closed with verified evidence',
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
// Finished rows name why no action remains; merge rows keep their existing tail.
|
|
@@ -113,7 +114,7 @@ function tail_of(status: ItemStatus): string | undefined {
|
|
|
113
114
|
|
|
114
115
|
if (ending === undefined) return status.reason
|
|
115
116
|
|
|
116
|
-
return
|
|
117
|
+
return status.outcome?.summary ?? ending
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
// joshuafolkken/kit#6577: what stopped a lane, or the ship of a child still working, by the command its
|
|
@@ -133,14 +134,20 @@ function stop_row_reason(status: ItemStatus): Pick<BoardRow, 'reason'> {
|
|
|
133
134
|
}
|
|
134
135
|
|
|
135
136
|
// Raw event reasons remain cacheable; only drawing selects an action from the current live state.
|
|
136
|
-
function
|
|
137
|
+
function ending_row_reason(
|
|
138
|
+
number: number,
|
|
139
|
+
status: ItemStatus,
|
|
140
|
+
read: RowRead,
|
|
141
|
+
): Pick<BoardRow, 'reason'> {
|
|
137
142
|
const reason = tail_of(status)
|
|
138
143
|
const waits = read.waits?.get(number)
|
|
139
144
|
|
|
140
145
|
if (reason !== undefined) {
|
|
141
146
|
const tail = park_row_reason(number, reason, read.is_backlog_live === true, waits)
|
|
142
147
|
|
|
143
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
reason: { tail, ...(status.outcome !== undefined && { evidence_url: status.outcome.url }) },
|
|
150
|
+
}
|
|
144
151
|
}
|
|
145
152
|
|
|
146
153
|
return is_stalled(status, read.labels.get(number))
|
|
@@ -148,6 +155,13 @@ function row_reason(number: number, status: ItemStatus, read: RowRead): Pick<Boa
|
|
|
148
155
|
: stop_row_reason(status)
|
|
149
156
|
}
|
|
150
157
|
|
|
158
|
+
function row_reason(number: number, status: ItemStatus, read: RowRead): Pick<BoardRow, 'reason'> {
|
|
159
|
+
const pause =
|
|
160
|
+
status.state === 'parked' ? run_board_pause.reason_of(number, read, status) : undefined
|
|
161
|
+
|
|
162
|
+
return pause === undefined ? ending_row_reason(number, status, read) : { reason: pause }
|
|
163
|
+
}
|
|
164
|
+
|
|
151
165
|
const run_board_ending_reason = {
|
|
152
166
|
park_reason,
|
|
153
167
|
park_row_reason,
|
|
@@ -126,6 +126,13 @@ function is_unlisted(issue: number, read: OpenRead): boolean {
|
|
|
126
126
|
return open !== undefined && !open.has(issue)
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
// A late evidence note or a failed comment read is retried at the existing GitHub read interval.
|
|
130
|
+
function is_closed_cached(issue: number, read: OpenRead): boolean {
|
|
131
|
+
const closed = read.closed.get(issue)
|
|
132
|
+
|
|
133
|
+
return closed?.is_merged === true || closed?.outcome !== undefined
|
|
134
|
+
}
|
|
135
|
+
|
|
129
136
|
// A child still drawn stopped or running holds no closed read of this launch — any it holds closed
|
|
130
137
|
// before it relaunched — so it is asked again. A running child is asked too while the plan read fails:
|
|
131
138
|
// the kept plan still lists it, and an empty listing — failed, or a repository whose last open issue
|
|
@@ -141,7 +148,7 @@ function is_closed_candidate(
|
|
|
141
148
|
if (ALWAYS_ASKED_STATES.has(status.state)) return true
|
|
142
149
|
if (status.state === RUNNING_STATE) return is_plan_failed || is_unlisted(issue, read)
|
|
143
150
|
|
|
144
|
-
return is_unlisted(issue, read) && !
|
|
151
|
+
return is_unlisted(issue, read) && !is_closed_cached(issue, read)
|
|
145
152
|
}
|
|
146
153
|
|
|
147
154
|
// An ended run asks until one ask after it ended has answered whole, then holds what it has, as its
|
|
@@ -15,6 +15,7 @@ import { run_board_ending_reason } from './run-board-ending-reason'
|
|
|
15
15
|
import { run_board_human } from './run-board-human'
|
|
16
16
|
import { run_board_human_merge } from './run-board-human-merge'
|
|
17
17
|
import { run_board_kind, type BoardPriority } from './run-board-kind'
|
|
18
|
+
import type { PauseRead } from './run-board-pause'
|
|
18
19
|
import { run_board_standing_waits } from './run-board-standing-waits'
|
|
19
20
|
import type { ItemState, ItemStatus } from './run-board-status'
|
|
20
21
|
|
|
@@ -29,7 +30,7 @@ import type { ItemState, ItemStatus } from './run-board-status'
|
|
|
29
30
|
// **An epic and its children are a tree; every other dependency is not.** A child an opted-in epic
|
|
30
31
|
// tracks is drawn under its epic; a `blocked_by` edge is a DAG, so it stays a waiting-on note at the end of the row.
|
|
31
32
|
|
|
32
|
-
interface BoardPlan {
|
|
33
|
+
interface BoardPlan extends PauseRead {
|
|
33
34
|
decision_questions?: ReadonlyMap<number, string> | undefined
|
|
34
35
|
decision_waits?: ReadonlyMap<number, string> | undefined
|
|
35
36
|
is_backlog_live?: boolean | undefined
|
|
@@ -55,6 +56,7 @@ interface BoardPlan {
|
|
|
55
56
|
// (joshuafolkken/kit#4288): the icon it leads with in place of ⏳, the condition column's value, and
|
|
56
57
|
// what follows its title. A parked, withdrawn or stalled row draws its tail alone.
|
|
57
58
|
interface RowReason {
|
|
59
|
+
evidence_url?: string | undefined
|
|
58
60
|
icon?: string | undefined
|
|
59
61
|
// The condition column's figure — a lane count, a memory reading, a start time.
|
|
60
62
|
value?: string | undefined
|
|
@@ -110,7 +112,7 @@ interface BoardLayout {
|
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
// What an active row is named and classified by — each issue's title and labels.
|
|
113
|
-
interface RowRead {
|
|
115
|
+
interface RowRead extends PauseRead {
|
|
114
116
|
decision_questions?: ReadonlyMap<number, string> | undefined
|
|
115
117
|
is_backlog_live?: boolean | undefined
|
|
116
118
|
titles: ReadonlyMap<number, string>
|
|
@@ -224,7 +226,7 @@ function touched_row(number: number, status: ItemStatus, read: RowRead): BoardRo
|
|
|
224
226
|
|
|
225
227
|
return {
|
|
226
228
|
...(is_asked
|
|
227
|
-
? { reason: run_board_decision.reason_of(number, status.reason, read) }
|
|
229
|
+
? { reason: run_board_decision.reason_of(number, status.reason, read, status) }
|
|
228
230
|
: run_board_ending_reason.row_reason(number, status, read)),
|
|
229
231
|
...solo_flag(labels),
|
|
230
232
|
number,
|
|
@@ -46,6 +46,7 @@ type RepoLink = (text: string, page: RepoPage) => string
|
|
|
46
46
|
|
|
47
47
|
// The links a board draws, each plain before a plan names the repository.
|
|
48
48
|
interface BoardLinks {
|
|
49
|
+
comment_link?: Link | undefined
|
|
49
50
|
// An issue reference as the board draws it — `3450` or `owner/repo#12`.
|
|
50
51
|
link: (reference: string) => string
|
|
51
52
|
// A pull request's number (joshuafolkken/kit#4625).
|
|
@@ -72,6 +73,7 @@ function repo_linker(repo: string | undefined, link: Link): RepoLink {
|
|
|
72
73
|
|
|
73
74
|
function links_of(repo: string | undefined, link: Link): BoardLinks {
|
|
74
75
|
return {
|
|
76
|
+
comment_link: link,
|
|
75
77
|
link: linker(repo, link),
|
|
76
78
|
pull_link: pull_linker(repo, link),
|
|
77
79
|
repo_link: repo_linker(repo, link),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
|
+
import { home_tilde } from '#scripts/lib/home-tilde'
|
|
2
3
|
import { json_value } from '#scripts/lib/json-value'
|
|
3
4
|
import { token_shape } from '#scripts/lib/token-shape'
|
|
4
5
|
import { transcript_record, type TranscriptRecord } from '#scripts/lib/transcript-record'
|
|
@@ -63,12 +64,15 @@ function without_assignments(command: string): string {
|
|
|
63
64
|
|
|
64
65
|
// The first line of what the command runs, cut to the limit. A command whose variable cannot be read
|
|
65
66
|
// to its end is drawn as nothing: a part of the value would stand where the command should. A
|
|
66
|
-
// credential later in the line is redacted before the cut, which would leave a head no shape matches
|
|
67
|
+
// credential later in the line is redacted before the cut, which would leave a head no shape matches;
|
|
68
|
+
// the home directory is written as `~` before it too, so no part of the account name is left.
|
|
67
69
|
function command_target(command: string): string {
|
|
68
70
|
const [first = ''] = without_assignments(command.trim()).split(NEWLINE)
|
|
69
71
|
if (UNREAD_ASSIGNMENT.test(first)) return ''
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
const masked = home_tilde.mask(token_shape.redact(first))
|
|
74
|
+
|
|
75
|
+
return cut(ascii_head(masked.replaceAll(SPACES, ' ')))
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
// The path from `root` down; a file outside it is drawn by its name alone, never by where it is.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"decision": {
|
|
3
|
+
"body": "## 停止理由\n\nfullrun #7387 の `pnpm josh run:entry 7387` が stale(exit 1)で停止した。7387-lane の pre-gate cut(2026-11-12T08:32:26.921Z)は現在のツリーと一致しない。pre-gate-cut.md の resume verdict に従い、gate は実行していない。直接の confirmation 通知は lane-park フックに拒否され、先に park するよう指示された。\n\n### 選択肢\n\n1. ブランチと未コミット変更を cut と照合し、不一致を解消して fullrun #7387 を再開する。\n- 層: A\n- 必要な権限: 親ランによる lane の再開状態の確認。\n\n2. ランが終了済みと確認できた場合に `pnpm josh run:cut --end` で cut を解除する。\n- 層: C\n- 必要な権限: ラン終了の明示確認。\n\n### 推奨\n\n1 作業内容を保持したまま、保存された cut と lane の不一致を確認する。\n\n---\n- Lane directory: `/Users/iwasakishinya/Development/.kit-lanes/7387`\n- Seat 1 stays held while the lane is kept\n- Give it back: `pnpm josh lane:close 7387`\n\n\n<!-- josh:run -->",
|
|
4
|
+
"createdAt": "2026-11-12T11:32:05Z",
|
|
5
|
+
"url": "https://github.com/joshuafolkken/kit/issues/7387#issuecomment-6822420448"
|
|
6
|
+
},
|
|
7
|
+
"parked": {
|
|
8
|
+
"body": "## 停止理由\n\n承認済み範囲の実装・検証を進めた結果、既存の `scripts/observations/observations-flush-landing.test.ts` の fixture 更新が必要になった。このファイルは https://github.com/joshuafolkken/kit/issues/7392#issuecomment-6820104162 の「承認するpathsは次の7件だけ」に含まれないため、編集していない。\n\n同ファイルは公開 flush を呼びながら Git だけを mock している。隔離境界の導入後は transaction も mock しないと、実 checkout の Git directory にテスト用 state(架空の HEAD c0ffee1)を作り、12件が失敗する。テストが作った state は内容を確認して除去済み。利用者の記録、stash、index は変更していない。\n\n必要な追加変更はこの1テストファイルだけ:\n\n- `observations_flush_transaction.pending` を false、`run` を prepare/publish callback を順に呼ぶ mock にする。auto-merge・中断・既存PR・merge待機の既存テストを隔離境界へ接続する。\n- archive fixture と検証を、途中エラーを飲み込まない `observation_ledger_archive.archive` に追従させる。\n- `discards an uncommitted carried file before it looks` を、元 checkout の carried file を削除しない検証へ置き換える。元作業の保護という本Issueの契約に合わせる。\n- 他の auto-merge、既存PR、checks、archive順序の検証は維持する。\n\n`lane:plan --probe` は追加pathでも clear だったが、これは承認範囲一致の証明ではない。`lane_plan_approval.allows` はテストを含む全pathを照合する一方、記録済み/dispatched lane の size超過はwarning扱いになるため。clear を範囲拡張の承認として利用しない。\n\n## 現在の実装と検証\n\n- 変更は承認済み5ファイルのみ。有限retryとsnapshotは transaction に統合し、新たな未承認テストファイルを増やさない。専用worktreeで加工・commit・landing、snapshotを先に永続化、失敗後のappendとsource index変更を保護する。\n- `pnpm josh test:related --touched scripts/observations/observations-flush-transaction.test.ts scripts/observations/observations-flush-command.test.ts`: 19件成功(実Git12件・command境界7件)。\n- `pnpm josh lint:related`: 成功。metrics の code_lines +243 の理由記録はレビュー前に必要。\n- `pnpm josh cspell:dot`: 成功。\n- `pnpm josh check`: 成功(exit 0)。\n- 全関連テスト: landing test の12件失敗が残る。gate/review/commit/PR/merge は未実施。PR下書きの消えたテスト19件の対応、全条件の最終記入、実機証跡は再開後に完了する。\n- stash `1a8584ee872a7ef7cbb204b238e466907c1896d2`: 削除元12177行、archive12213行、追加36行。origin/main `415c7066c0d71abce1fba6df95afeeeb1a2c440c` に元記録/追加記録とも不足0行、回収patch不要、stash OID保持。読取専用照合のscriptは `.josh/tmp/inspect-observation-recovery.py`。\n\n### 選択肢\n\n1. 同一Issueの承認pathsへ `scripts/observations/observations-flush-landing.test.ts` の1件だけを追加し、上記fixture・検証の追従を許可して再開する。宣言180行・予測上限450行(テスト除く)と品質gateは維持する。\n- 層: C\n- 必要な権限: 承認済み7pathsの限定範囲を変更する利用者の明示承認。同一Issueの信頼済みコメントをsourceにsize-approval JSONを更新し、lane:planを記録する。\n\n2. 限定pathsを維持し、現在の実装を保留する。\n- 層: B\n- 必要な権限: 親による保留判断。失敗中の既存テストを無効化したり、承認範囲外でfixtureを変更したりしない。\n\n### 推奨\n1 同じ公開コマンドの既存テストを新しい保全境界へ接続するための1ファイルだけの追加。runtimeの機能範囲と品質gateを広げず、すべての関連テストを再検証できる。\n\n---\n- Lane directory: `/Users/iwasakishinya/Development/.kit-lanes/7392`\n- Seat 3 stays held while the lane is kept\n- Give it back: `pnpm josh lane:close 7392`\n\n\n<!-- josh:run -->",
|
|
9
|
+
"createdAt": "2026-11-12T10:48:02Z",
|
|
10
|
+
"url": "https://github.com/joshuafolkken/kit/issues/7392#issuecomment-6821517222"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { issue_outcome } from '#scripts/issue/issue-outcome'
|
|
2
|
+
import type { IssueComment } from '#scripts/issue/issue-read'
|
|
3
|
+
import { run_park_body } from '#scripts/run/park/run-park-body'
|
|
4
|
+
import { z } from 'zod'
|
|
5
|
+
import type { RowReason } from './run-board-layout'
|
|
6
|
+
import type { ItemStatus } from './run-board-status'
|
|
7
|
+
|
|
8
|
+
const record_schema = z.object({
|
|
9
|
+
summary: issue_outcome.summary_schema,
|
|
10
|
+
url: z
|
|
11
|
+
.string()
|
|
12
|
+
.regex(/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+(?:#issuecomment-\d+)?$(?![\s\S])/u)
|
|
13
|
+
.optional(),
|
|
14
|
+
at_ms: z.number(),
|
|
15
|
+
})
|
|
16
|
+
type PauseRecord = z.infer<typeof record_schema>
|
|
17
|
+
|
|
18
|
+
interface PauseRead {
|
|
19
|
+
pause_reasons?: ReadonlyMap<number, PauseRecord> | undefined
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const FALLBACK = 'Reason unavailable: inspect issue'
|
|
23
|
+
|
|
24
|
+
function is_stop(comment: IssueComment): boolean {
|
|
25
|
+
return comment.is_trusted === true && run_park_body.summary_of(comment.body) !== undefined
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// A backfill can describe this stop, never an older decision or a later administrative note.
|
|
29
|
+
function outcome_for(
|
|
30
|
+
comments: ReadonlyArray<IssueComment>,
|
|
31
|
+
latest?: IssueComment,
|
|
32
|
+
): ReturnType<typeof issue_outcome.from_comments> {
|
|
33
|
+
if (latest === undefined) return undefined
|
|
34
|
+
const candidates = comments.filter((comment) => {
|
|
35
|
+
const outcome = issue_outcome.from_comments(comments, [comment])
|
|
36
|
+
|
|
37
|
+
return comment === latest || outcome?.url === latest.html_url
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
return issue_outcome.from_comments(comments, candidates)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function at_of(comment?: IssueComment): number {
|
|
44
|
+
const at_ms = Date.parse(comment?.created_at ?? '')
|
|
45
|
+
|
|
46
|
+
return Number.isFinite(at_ms) ? at_ms : 0
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Only a stop comment can supply the reason; later administrative notes cannot replace it.
|
|
50
|
+
function from_comments(comments: ReadonlyArray<IssueComment>, issue_url?: string): PauseRecord {
|
|
51
|
+
const latest = comments.findLast((comment) => is_stop(comment))
|
|
52
|
+
const url = issue_outcome.url_schema.safeParse(latest?.html_url).data
|
|
53
|
+
const outcome = outcome_for(comments, latest)
|
|
54
|
+
|
|
55
|
+
return { summary: FALLBACK, url: url ?? issue_url, ...outcome, at_ms: at_of(latest) }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// A new attempt cannot inherit the previous stop's evidence while the plan refreshes.
|
|
59
|
+
function launch_of(status?: ItemStatus): number {
|
|
60
|
+
return status?.launched_ms ?? status?.started_ms ?? 0
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function is_unread(record?: PauseRecord): boolean {
|
|
64
|
+
return record?.at_ms === 0 && record.url === undefined
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function record_of(number: number, read: PauseRead, status?: ItemStatus): PauseRecord | undefined {
|
|
68
|
+
const record = read.pause_reasons?.get(number)
|
|
69
|
+
|
|
70
|
+
return status === undefined && is_unread(record) ? undefined : record
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function reason_of(number: number, read: PauseRead, status?: ItemStatus): RowReason | undefined {
|
|
74
|
+
const record = record_of(number, read, status)
|
|
75
|
+
if (record === undefined) return undefined
|
|
76
|
+
|
|
77
|
+
if (record.at_ms < launch_of(status)) {
|
|
78
|
+
return { tail: FALLBACK, evidence_url: record.url?.split('#', 1)[0] }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return { tail: record.summary, evidence_url: record.url }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const run_board_pause = { FALLBACK, from_comments, reason_of, record_schema }
|
|
85
|
+
|
|
86
|
+
export { run_board_pause }
|
|
87
|
+
export type { PauseRead, PauseRecord }
|
|
@@ -3,6 +3,7 @@ import type { NamedPlan } from '#scripts/backlog/backlog-plan'
|
|
|
3
3
|
import { shared_cache, type CacheSlot } from '#scripts/josh/shared-cache'
|
|
4
4
|
import { z } from 'zod'
|
|
5
5
|
import type { BoardPlan } from './run-board-layout'
|
|
6
|
+
import { run_board_pause } from './run-board-pause'
|
|
6
7
|
import { run_board_plan } from './run-board-plan'
|
|
7
8
|
|
|
8
9
|
// `run:board`'s plan read, shared the way the drive's assignment and the arrival probe share
|
|
@@ -83,6 +84,7 @@ const context_schema = z.object({
|
|
|
83
84
|
})
|
|
84
85
|
|
|
85
86
|
const board_plan_schema = z.object({
|
|
87
|
+
pause_reasons: map_of(run_board_pause.record_schema).optional(),
|
|
86
88
|
decision_questions: map_of(z.string()).optional(),
|
|
87
89
|
decision_waits: map_of(z.string()).optional(),
|
|
88
90
|
human_merge_prs: map_of(z.number()).optional(),
|
|
@@ -57,8 +57,17 @@ function value_of(reason: RowReason, header: BoardHeader): string {
|
|
|
57
57
|
|
|
58
58
|
// The row's reason after its title, `cut` columns given up as `reason_text` gives them, its pull
|
|
59
59
|
// request linked.
|
|
60
|
+
function evidence_linked(text: string, url: string, header: BoardHeader): string {
|
|
61
|
+
return header.comment_link?.(text, url) ?? text
|
|
62
|
+
}
|
|
63
|
+
|
|
60
64
|
function tail_of(row: BoardRow, cut: number, header: BoardHeader): string {
|
|
61
|
-
|
|
65
|
+
const text = run_board_render_title.reason_text(row, cut) ?? ''
|
|
66
|
+
const url = row.reason?.evidence_url
|
|
67
|
+
|
|
68
|
+
return url === undefined
|
|
69
|
+
? pr_linked(text, row.reason?.pr, header)
|
|
70
|
+
: evidence_linked(text, url, header)
|
|
62
71
|
}
|
|
63
72
|
|
|
64
73
|
// A finished row's end, `MM-DD HH:MM`, emphasized while fresh (joshuafolkken/kit#4292); blank where
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { run_board_fit } from './run-board-fit'
|
|
2
2
|
import { run_board_labels } from './run-board-labels'
|
|
3
3
|
import type { BoardRow } from './run-board-layout'
|
|
4
|
+
import { run_board_pause } from './run-board-pause'
|
|
4
5
|
|
|
5
6
|
// A row's title and the reason it makes room for — pure. A title is cut to the title column; a row
|
|
6
7
|
// that says why it waits, or draws a tail, keeps its line on a narrow pane, its title giving up the
|
|
@@ -22,7 +23,13 @@ interface RowCut {
|
|
|
22
23
|
const WHOLE: RowCut = { title_limit: TITLE_LIMIT, reason_cut: 0 }
|
|
23
24
|
const WHOLE_TAIL_STATES: ReadonlySet<string> = new Set(['stopped', 'parked', 'human'])
|
|
24
25
|
|
|
26
|
+
function has_short_reason(reason: BoardRow['reason']): boolean {
|
|
27
|
+
return reason?.evidence_url !== undefined || reason?.tail === run_board_pause.FALLBACK
|
|
28
|
+
}
|
|
29
|
+
|
|
25
30
|
function keeps_tail(row: BoardRow): boolean {
|
|
31
|
+
if (has_short_reason(row.reason)) return false
|
|
32
|
+
|
|
26
33
|
return WHOLE_TAIL_STATES.has(row.state) || row.reason?.icon === run_board_labels.STATE_ICONS.human
|
|
27
34
|
}
|
|
28
35
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IssueOutcome } from '#scripts/issue/issue-outcome'
|
|
1
2
|
import type { ItemState, ItemStatus } from './run-board-status'
|
|
2
3
|
|
|
3
4
|
// What a child keeps of its run when it settles into a state other than running — shared by the
|
|
@@ -25,9 +26,22 @@ function kept_of(
|
|
|
25
26
|
// The status a child settles into: its start and the track it had reached, so a settled row still
|
|
26
27
|
// draws how it got there.
|
|
27
28
|
function settled_as(previous: ItemStatus | undefined, state: ItemState): ItemStatus {
|
|
28
|
-
return {
|
|
29
|
+
return {
|
|
30
|
+
state,
|
|
31
|
+
started_ms: previous?.started_ms,
|
|
32
|
+
...kept_of(previous),
|
|
33
|
+
...(previous?.outcome !== undefined && { outcome: previous.outcome }),
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const OUTCOME_STATES: ReadonlySet<ItemState> = new Set(['done', 'already_done', 'withdrawn'])
|
|
38
|
+
|
|
39
|
+
function with_outcome(status: ItemStatus, outcome: IssueOutcome | undefined): ItemStatus {
|
|
40
|
+
return outcome === undefined || !OUTCOME_STATES.has(status.state)
|
|
41
|
+
? status
|
|
42
|
+
: { ...status, outcome }
|
|
29
43
|
}
|
|
30
44
|
|
|
31
|
-
const run_board_settle = { relaunch_of, settled_as }
|
|
45
|
+
const run_board_settle = { relaunch_of, settled_as, with_outcome }
|
|
32
46
|
|
|
33
47
|
export { run_board_settle }
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
2
|
+
import { issue_outcome } from '#scripts/issue/issue-outcome'
|
|
2
3
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
4
|
import { z } from 'zod'
|
|
4
5
|
import type { ClosedIssue } from './run-board-closed'
|
|
@@ -38,6 +39,9 @@ const label_names_schema = z.array(z.string())
|
|
|
38
39
|
// A close time JSON dropped is read back as unknown.
|
|
39
40
|
const closed_issue_schema = z
|
|
40
41
|
.object({
|
|
42
|
+
outcome: z
|
|
43
|
+
.object({ summary: issue_outcome.summary_schema, url: issue_outcome.url_schema })
|
|
44
|
+
.optional(),
|
|
41
45
|
title: z.string(),
|
|
42
46
|
labels: label_names_schema,
|
|
43
47
|
closed_ms: z.number().optional(),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentResult } from '#scripts/agent/agent-event'
|
|
2
|
+
import type { IssueOutcome } from '#scripts/issue/issue-outcome'
|
|
2
3
|
import type { Span } from '#scripts/lane/lane-spans'
|
|
3
4
|
import type { PrChecks } from '#scripts/run/event/run-event-checks'
|
|
4
5
|
import { run_event_retry } from '#scripts/run/event/run-event-retry'
|
|
@@ -40,6 +41,7 @@ type ItemState =
|
|
|
40
41
|
| 'unknown'
|
|
41
42
|
|
|
42
43
|
interface ItemStatus {
|
|
44
|
+
outcome?: IssueOutcome | undefined
|
|
43
45
|
state: ItemState
|
|
44
46
|
// When the child first launched in this run — a re-dispatch or a restart does not move it.
|
|
45
47
|
started_ms?: number | undefined
|
|
@@ -395,7 +397,15 @@ function settle_closed(
|
|
|
395
397
|
statuses: ReadonlyMap<number, ItemStatus>,
|
|
396
398
|
read: OpenRead,
|
|
397
399
|
): ReadonlyMap<number, ItemStatus> {
|
|
398
|
-
return new Map(
|
|
400
|
+
return new Map(
|
|
401
|
+
[...statuses].map(([issue, status]) => {
|
|
402
|
+
const closed = read.closed.get(issue)
|
|
403
|
+
const outcome =
|
|
404
|
+
closed === undefined || is_closed_before_launch(status, closed) ? undefined : closed.outcome
|
|
405
|
+
|
|
406
|
+
return [issue, run_board_settle.with_outcome(settled(issue, status, read), outcome)]
|
|
407
|
+
}),
|
|
408
|
+
)
|
|
399
409
|
}
|
|
400
410
|
|
|
401
411
|
function is_run_stop(event: RunEvent | undefined): boolean {
|
|
@@ -129,7 +129,8 @@ function report_relaunch_failure(target: string, note: string): number {
|
|
|
129
129
|
// A pre-gate resume drives the gate, commit, PR and merge — the mechanical
|
|
130
130
|
// ship/bookkeeping region, lowered — while an implementation resume keeps the role default. The
|
|
131
131
|
// phase-aware profile is `agent_argv.resume_argv`'s; a person's `JOSH_WORKER_EFFORT` still wins over it,
|
|
132
|
-
// and a pre-gate resume moves to the ship model — Sonnet, or `JOSH_WORKER_SHIP_MODEL` when that is set
|
|
132
|
+
// and a pre-gate resume moves to the ship model — Sonnet, or `JOSH_WORKER_SHIP_MODEL` when that is set,
|
|
133
|
+
// never above the Issue's `josh.worker` profile (`agent-ship-cap.ts`).
|
|
133
134
|
async function relaunch(target: string, lane: LaneInfo, phase: string): Promise<number> {
|
|
134
135
|
const notes: Array<string> = []
|
|
135
136
|
const result = await lane_relaunch.resume(lane, phase, (note) => {
|