@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
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import { git_pr_checks } from '#scripts/gh/git-pr-checks'
|
|
2
3
|
import { git_command } from '#scripts/git/git-command'
|
|
3
4
|
import { main_sync } from '#scripts/git/main-sync'
|
|
4
5
|
import { IGNORE_FOR_RELEASE_LABEL } from '#scripts/issue/issue-labels'
|
|
5
6
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
7
|
import { review_comment_carry } from '#scripts/review/review-comment-carry'
|
|
7
8
|
import { observation_ledger, OBSERVATION_LEDGER_DIRECTORY } from './observation-ledger'
|
|
9
|
+
import { observation_ledger_archive } from './observation-ledger-archive'
|
|
8
10
|
import type { BrokenLine } from './observation-ledger-line'
|
|
9
11
|
import { observation_ledger_prepare } from './observation-ledger-prepare'
|
|
10
12
|
import { observations_flush_landing } from './observations-flush-landing'
|
|
13
|
+
import { observations_flush_transaction } from './observations-flush-transaction'
|
|
11
14
|
|
|
12
15
|
// The commit path for the ledger lines no run's own commit carried. Every run —
|
|
13
16
|
// a lane's included — commits its appended lines with its own pull request (`scripts/git/
|
|
@@ -29,13 +32,12 @@ const BRANCH_PREFIX = 'observations/'
|
|
|
29
32
|
const SUCCESS_EXIT_CODE = 0
|
|
30
33
|
const RETURN_FAILURE_MESSAGE =
|
|
31
34
|
'Could not return this checkout to the default branch; `pnpm josh ms` printed the reason above.'
|
|
32
|
-
const FAST_FORWARD_FAILURE_MESSAGE =
|
|
33
|
-
'The flush pull request merged, but the local default branch could not be fast-forwarded to it, so this checkout is still on the flush branch:'
|
|
34
35
|
const DATE_END = 10
|
|
35
36
|
const TIME_START = 11
|
|
36
37
|
const TIME_END = 19
|
|
37
38
|
const COLON = ':'
|
|
38
39
|
const NO_COMMITS = 0
|
|
40
|
+
const NO_ARCHIVED_FILES = 0
|
|
39
41
|
|
|
40
42
|
// **A count that could not be read is treated as "it may hold a commit".** Of the two refusals below
|
|
41
43
|
// it chooses the one that warns about the only copy, because printing "nothing is stranded" on a
|
|
@@ -58,11 +60,22 @@ function branch_name_for(stamp: string): string {
|
|
|
58
60
|
|
|
59
61
|
// **No `closes #N`.** A flush carries whatever observations the last cycle recorded; it answers to no
|
|
60
62
|
// single issue, and the ledger's own lines say where each one was seen.
|
|
61
|
-
|
|
63
|
+
//
|
|
64
|
+
// **A flush that archived says it moved lines** (joshuafolkken/kit#7336): "changes none" would be
|
|
65
|
+
// false of the removed files, so it says what holds instead — every line moved, none dropped.
|
|
66
|
+
function ledger_change_sentence(archived_files: number): string {
|
|
67
|
+
if (archived_files === NO_ARCHIVED_FILES) {
|
|
68
|
+
return 'so this pull request adds lines and changes none.'
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return `so this pull request drops none: it adds lines, and moves ${String(archived_files)} closed issues' file(s) verbatim into the monthly \`archive-YYYY-MM.md\` files.`
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function pull_request_body(archived_files: number): string {
|
|
62
75
|
return [
|
|
63
76
|
`Appended observations from \`${OBSERVATION_LEDGER_DIRECTORY}\` that no run's own commit carried.`,
|
|
64
77
|
'',
|
|
65
|
-
|
|
78
|
+
`The ledger is append-only, and a second line under one key is what promotes an observation to an issue — ${ledger_change_sentence(archived_files)}`,
|
|
66
79
|
'',
|
|
67
80
|
'Opened by `pnpm josh observations:flush` (joshuafolkken/kit#1756).',
|
|
68
81
|
].join('\n')
|
|
@@ -212,7 +225,7 @@ async function catch_up_default(default_branch: string): Promise<void> {
|
|
|
212
225
|
}
|
|
213
226
|
}
|
|
214
227
|
|
|
215
|
-
//
|
|
228
|
+
// Refuse another person's work before creating the isolated flush checkout.
|
|
216
229
|
async function refuse_unsafe_flush(status_output: string): Promise<string> {
|
|
217
230
|
const current = await git_command.branch()
|
|
218
231
|
const default_branch = await git_command.get_default_branch()
|
|
@@ -226,155 +239,28 @@ async function refuse_unsafe_flush(status_output: string): Promise<string> {
|
|
|
226
239
|
return default_branch
|
|
227
240
|
}
|
|
228
241
|
|
|
229
|
-
//
|
|
230
|
-
// `pnpm josh release`'s own `finally` already spell out "read the default branch, check it out, pull
|
|
231
|
-
// it", and writing it again here would be the clone `CLAUDE.md` prohibits. Reusing the command also
|
|
232
|
-
// brings its refusal inside a linked work tree, which is a precondition this flush wants anyway.
|
|
233
|
-
//
|
|
234
|
-
// **Its exit code is read rather than discarded**: `run` catches its own errors and returns `1`, so a
|
|
235
|
-
// checkout left on the flush branch would otherwise be reported as a completed flush.
|
|
236
|
-
//
|
|
237
|
-
// **The local default branch is fast-forwarded before it is checked out**.
|
|
238
|
-
// Lines appended while the pull request waited leave the ledger dirty, and git refuses to check out a
|
|
239
|
-
// default branch whose ledger differs from the flush branch's. Once the merge is in, the fast-forwarded
|
|
240
|
-
// default branch holds the same ledger the flush branch does, so the checkout carries those lines over.
|
|
241
|
-
//
|
|
242
|
-
// **A failed fast-forward says the merge is already in**, so the person reading it knows the ledger
|
|
243
|
-
// lines are safe and only this checkout is left on the flush branch.
|
|
242
|
+
// The source stayed on the default branch; main:sync owns its fast-forward and exit status.
|
|
244
243
|
async function return_to_default_branch(default_branch: string): Promise<void> {
|
|
245
|
-
|
|
246
|
-
await git_command.fast_forward_local(default_branch)
|
|
247
|
-
} catch (error) {
|
|
248
|
-
throw new Error(`${FAST_FORWARD_FAILURE_MESSAGE} ${error_text.message_of(error)}`, {
|
|
249
|
-
cause: error,
|
|
250
|
-
})
|
|
251
|
-
}
|
|
252
|
-
|
|
244
|
+
if ((await git_command.branch()) !== default_branch) throw new Error(RETURN_FAILURE_MESSAGE)
|
|
253
245
|
const exit_code = await main_sync.run([])
|
|
254
246
|
|
|
255
247
|
if (exit_code !== SUCCESS_EXIT_CODE) throw new Error(RETURN_FAILURE_MESSAGE)
|
|
256
248
|
}
|
|
257
249
|
|
|
258
|
-
//
|
|
259
|
-
|
|
260
|
-
async function push_and_open(branch_name: string): Promise<string> {
|
|
250
|
+
// Publication failures retain the isolated commit and the source records for retry.
|
|
251
|
+
async function push_and_open(branch_name: string, body: string): Promise<string> {
|
|
261
252
|
try {
|
|
262
253
|
await git_command.push()
|
|
263
254
|
|
|
264
|
-
return await git_gh_command.pr_create(
|
|
265
|
-
COMMIT_MESSAGE,
|
|
266
|
-
pull_request_body(),
|
|
267
|
-
IGNORE_FOR_RELEASE_LABEL,
|
|
268
|
-
)
|
|
269
|
-
} catch (error) {
|
|
270
|
-
throw new Error(stranded_branch_message(branch_name, error_text.message_of(error)), {
|
|
271
|
-
cause: error,
|
|
272
|
-
})
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// **The side that created the branch is the side that rolls it back**, so a commit rejected by the
|
|
277
|
-
// pre-commit hook does not leave the branch behind with nothing on it. Nothing is stranded at this
|
|
278
|
-
// point — the appended lines are still in the working tree, staged and uncommitted — so returning to
|
|
279
|
-
// the default branch and removing the branch loses none of them.
|
|
280
|
-
//
|
|
281
|
-
// **Its own failure is returned rather than thrown or printed**, so the single error the command
|
|
282
|
-
// exits with can carry both facts — why the commit was rejected, and whether the branch is still
|
|
283
|
-
// there. Printed above the throw it scrolled past the message that mattered; thrown over it, the
|
|
284
|
-
// reason for the rejection was lost outright. `undefined` means the rollback finished.
|
|
285
|
-
async function roll_back(branch_name: string, default_branch: string): Promise<string | undefined> {
|
|
286
|
-
try {
|
|
287
|
-
await git_command.checkout(default_branch)
|
|
288
|
-
await git_command.delete_branch(branch_name)
|
|
289
|
-
|
|
290
|
-
return undefined
|
|
291
|
-
} catch (error) {
|
|
292
|
-
return error_text.message_of(error)
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// **The message is chosen from what the rollback did, never assumed.** A rollback that could not
|
|
297
|
-
// check the default branch out leaves the branch exactly where it was, and a message asserting its
|
|
298
|
-
// removal would send somebody looking for something that is still in the checkout.
|
|
299
|
-
function rejection_message(
|
|
300
|
-
branch_name: string,
|
|
301
|
-
reason: string,
|
|
302
|
-
roll_back_reason: string | undefined,
|
|
303
|
-
): string {
|
|
304
|
-
if (roll_back_reason === undefined) return rejected_commit_message(branch_name, reason)
|
|
305
|
-
|
|
306
|
-
return roll_back_failure_message(branch_name, reason, roll_back_reason)
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// **Every ledger path the status names is staged, not the one constant**.
|
|
310
|
-
// After a migration the change is the new file together with the old one's deletion, and a commit
|
|
311
|
-
// holding only the first would leave the deletion behind as a change no later flush could tell apart
|
|
312
|
-
// from a fresh append.
|
|
313
|
-
async function stage_ledger(): Promise<void> {
|
|
314
|
-
const ledger_paths = observation_ledger.ledger_paths(await git_command.status())
|
|
315
|
-
|
|
316
|
-
for (const file_path of ledger_paths) {
|
|
317
|
-
// eslint-disable-next-line no-await-in-loop -- git add holds the index lock, so two at once fail
|
|
318
|
-
await git_command.add_path(file_path)
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
async function commit_ledger(branch_name: string, default_branch: string): Promise<void> {
|
|
323
|
-
try {
|
|
324
|
-
await stage_ledger()
|
|
325
|
-
await git_command.commit(COMMIT_MESSAGE)
|
|
255
|
+
return await git_gh_command.pr_create(COMMIT_MESSAGE, body, IGNORE_FOR_RELEASE_LABEL)
|
|
326
256
|
} catch (error) {
|
|
327
|
-
const roll_back_reason = await roll_back(branch_name, default_branch)
|
|
328
|
-
|
|
329
257
|
throw new Error(
|
|
330
|
-
|
|
331
|
-
{
|
|
332
|
-
cause: error,
|
|
333
|
-
},
|
|
258
|
+
`The ledger is committed on \`${branch_name}\` in the recovery worktree; publication failed: ${error_text.message_of(error)}. The source checkout and original records are preserved. Rerun \`pnpm josh observations:flush\` from the source checkout to resume.`,
|
|
259
|
+
{ cause: error },
|
|
334
260
|
)
|
|
335
261
|
}
|
|
336
262
|
}
|
|
337
263
|
|
|
338
|
-
async function open_pull_request(branch_name: string, default_branch: string): Promise<string> {
|
|
339
|
-
await git_command.checkout_b(branch_name)
|
|
340
|
-
await commit_ledger(branch_name, default_branch)
|
|
341
|
-
|
|
342
|
-
return await push_and_open(branch_name)
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
// **The checkout goes back to the default branch only on the way that merged.** A `finally` here
|
|
346
|
-
// would check the default branch out after a red check too — and the ledger would then
|
|
347
|
-
// revert to main's content, leaving the appended lines on a branch nothing in this checkout points
|
|
348
|
-
// at any more. The next flush would read `has_ledger_change` as false and report `clean`, which is
|
|
349
|
-
// the silent loss the refusals above exist to prevent. Left on the branch, the refusal fires.
|
|
350
|
-
//
|
|
351
|
-
// With auto-merge on, a failed wait does not strand the lines for good — GitHub still merges once
|
|
352
|
-
// the checks pass — but the checkout stays on the branch all the same,
|
|
353
|
-
// because only a merge this command has seen makes returning to the default branch safe.
|
|
354
|
-
async function land(
|
|
355
|
-
branch_name: string,
|
|
356
|
-
default_branch: string,
|
|
357
|
-
is_auto_merge: boolean,
|
|
358
|
-
): Promise<void> {
|
|
359
|
-
try {
|
|
360
|
-
await observations_flush_landing.wait_for_landing(branch_name, is_auto_merge)
|
|
361
|
-
} catch (error) {
|
|
362
|
-
throw new Error(stranded_branch_message(branch_name, error_text.message_of(error)), {
|
|
363
|
-
cause: error,
|
|
364
|
-
})
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
await return_to_default_branch(default_branch)
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
async function open_and_land(branch_name: string, default_branch: string): Promise<void> {
|
|
371
|
-
console.info(await open_pull_request(branch_name, default_branch))
|
|
372
|
-
|
|
373
|
-
const is_auto_merge = await observations_flush_landing.request_auto_merge(branch_name)
|
|
374
|
-
|
|
375
|
-
await land(branch_name, default_branch, is_auto_merge)
|
|
376
|
-
}
|
|
377
|
-
|
|
378
264
|
function merged_message(branch_name: string): string {
|
|
379
265
|
return `merged \`${branch_name}\` — the appended observations are on the default branch`
|
|
380
266
|
}
|
|
@@ -385,64 +271,78 @@ function broken_lines_message(broken: ReadonlyArray<BrokenLine>): string {
|
|
|
385
271
|
return `\`${OBSERVATION_LEDGER_DIRECTORY}\` has ${String(broken.length)} line(s) that break the ledger grammar, so the ledger commit stops rather than carrying them:\n${rows}`
|
|
386
272
|
}
|
|
387
273
|
|
|
388
|
-
//
|
|
389
|
-
// without a line ever being parsed, so a broken append could ride a flush
|
|
390
|
-
// through; validating here keeps the committed ledger to its grammar. The migration and the parse are
|
|
391
|
-
// `observation-ledger-prepare.ts`'s, shared with the run's own commit.
|
|
274
|
+
// Validate the isolated payload before staging it.
|
|
392
275
|
async function prepare_ledger(): Promise<void> {
|
|
393
276
|
const broken = await observation_ledger_prepare.prepare(process.cwd())
|
|
394
277
|
|
|
395
278
|
if (broken.length > 0) throw new Error(broken_lines_message(broken))
|
|
396
279
|
}
|
|
397
280
|
|
|
398
|
-
//
|
|
399
|
-
// first, since it would make git refuse the fast-forward (`review-comment-carry.ts`).
|
|
281
|
+
// Recovery must precede a freshness check: an already landed archive can conflict with the snapshot.
|
|
400
282
|
async function ready_default_branch(status_output: string): Promise<string> {
|
|
401
283
|
const default_branch = await refuse_unsafe_flush(status_output)
|
|
402
284
|
|
|
403
|
-
|
|
404
|
-
|
|
285
|
+
if (status_output.split('\n').some((line) => /^[^ ?]/u.test(line))) {
|
|
286
|
+
throw new Error(
|
|
287
|
+
'Staged changes must be committed or unstaged before observations:flush; index left untouched',
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (!(await observations_flush_transaction.pending(process.cwd()))) {
|
|
292
|
+
await catch_up_default(default_branch)
|
|
293
|
+
}
|
|
405
294
|
|
|
406
295
|
return default_branch
|
|
407
296
|
}
|
|
408
297
|
|
|
409
|
-
//
|
|
410
|
-
|
|
411
|
-
// request, and the status is read again so a carry alone is a change to flush. A carry left behind by
|
|
412
|
-
// a later stop is discarded by the next flush's `ready_default_branch`.
|
|
413
|
-
async function carried_status(): Promise<string> {
|
|
298
|
+
// Partial archival must throw: the transaction rebuilds it from its durable snapshot on retry.
|
|
299
|
+
async function carried_status(): Promise<{ status_output: string; archived_files: number }> {
|
|
414
300
|
await review_comment_carry.carry_reported(process.cwd())
|
|
415
301
|
|
|
416
|
-
|
|
302
|
+
const archived_files = await observation_ledger_archive.archive(process.cwd())
|
|
303
|
+
|
|
304
|
+
return { status_output: await git_command.status(), archived_files }
|
|
417
305
|
}
|
|
418
306
|
|
|
419
|
-
//
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
// the wrong thing. So the freshness of the start
|
|
423
|
-
// point is read from the remote first, and `catch_up_default` fast-forwards
|
|
424
|
-
// only where git can do it without touching the ledger: a default branch
|
|
425
|
-
// that predates another merged flush still stops here — before a branch is cut — rather than opening
|
|
426
|
-
// a pull request that cannot merge. An earlier flush pull request still open is checked for the same
|
|
427
|
-
// reason: a branch cut beside it conflicts with it at the ledger's tail. So the order is: ready the
|
|
428
|
-
// default branch, defer to an open flush, carry, then check, prepare and land.
|
|
429
|
-
async function flush(now: Date): Promise<string> {
|
|
430
|
-
const default_branch = await ready_default_branch(await git_command.status())
|
|
307
|
+
// Carry, migration and archival run only in the isolated checkout.
|
|
308
|
+
async function prepare_isolated(): Promise<number> {
|
|
309
|
+
const { archived_files } = await carried_status()
|
|
431
310
|
|
|
432
|
-
|
|
433
|
-
|
|
311
|
+
await prepare_ledger()
|
|
312
|
+
|
|
313
|
+
return archived_files
|
|
314
|
+
}
|
|
434
315
|
|
|
435
|
-
|
|
316
|
+
async function publish_isolated(branch_name: string, archived_files: number): Promise<void> {
|
|
317
|
+
if ((await git_pr_checks.read_merge_progress(branch_name)) === 'merged') return
|
|
318
|
+
const open = await git_gh_command.pr_list_open_with_head_prefix(branch_name)
|
|
436
319
|
|
|
437
|
-
if (
|
|
320
|
+
if (open.length === 0) {
|
|
321
|
+
console.info(await push_and_open(branch_name, pull_request_body(archived_files)))
|
|
322
|
+
}
|
|
438
323
|
|
|
439
|
-
await
|
|
324
|
+
const is_auto_merge = await observations_flush_landing.request_auto_merge(branch_name)
|
|
325
|
+
|
|
326
|
+
await observations_flush_landing.wait_for_landing(branch_name, is_auto_merge)
|
|
327
|
+
}
|
|
440
328
|
|
|
329
|
+
async function flush(now: Date): Promise<string> {
|
|
330
|
+
const default_branch = await ready_default_branch(await git_command.status())
|
|
331
|
+
const is_pending = await observations_flush_transaction.pending(process.cwd())
|
|
332
|
+
const deferred = is_pending
|
|
333
|
+
? undefined
|
|
334
|
+
: await observations_flush_landing.refuse_open_flush(BRANCH_PREFIX)
|
|
335
|
+
if (deferred !== undefined) return deferred
|
|
441
336
|
const branch_name = branch_name_for(timestamp_for(now))
|
|
442
337
|
|
|
443
|
-
await
|
|
338
|
+
const committed_branch = await observations_flush_transaction.run(process.cwd(), branch_name, {
|
|
339
|
+
prepare: prepare_isolated,
|
|
340
|
+
publish: publish_isolated,
|
|
341
|
+
})
|
|
342
|
+
if (committed_branch === '') return CLEAN_MESSAGE
|
|
343
|
+
await return_to_default_branch(default_branch)
|
|
444
344
|
|
|
445
|
-
return merged_message(
|
|
345
|
+
return merged_message(committed_branch)
|
|
446
346
|
}
|
|
447
347
|
|
|
448
348
|
const observations_flush = {
|
|
@@ -8,6 +8,7 @@ import { project_checks } from '#scripts/gate/project-checks'
|
|
|
8
8
|
import { plan_consumers } from '#scripts/issue/plan-consumers'
|
|
9
9
|
import { josh_environment_file } from '#scripts/josh/josh-environment-file'
|
|
10
10
|
import { session_language } from '#scripts/josh/session-language'
|
|
11
|
+
import { lane_plan_estimate } from '#scripts/lane/lane-plan-estimate'
|
|
11
12
|
import { line_budget } from '#scripts/lines/line-budget'
|
|
12
13
|
import { run_prep_cli } from '#scripts/run/run-prep-cli'
|
|
13
14
|
import { run_prep_locate } from '#scripts/run/run-prep-locate'
|
|
@@ -22,7 +23,7 @@ import { plan_scaffold, type ScaffoldParts, type Targets } from './plan-scaffold
|
|
|
22
23
|
const ARGV_OFFSET = 2
|
|
23
24
|
const SUCCESS_EXIT_CODE = 0
|
|
24
25
|
const FAILURE_EXIT_CODE = 1
|
|
25
|
-
const USAGE = 'Usage: josh plan:scaffold <issue-number> [<path>...]'
|
|
26
|
+
const USAGE = 'Usage: josh plan:scaffold <issue-number> [<path>...] [--estimate <json-file>]'
|
|
26
27
|
|
|
27
28
|
// A backticked directory is not a planned file: only a regular file reaches `lines` and `test:declared`.
|
|
28
29
|
function is_file(target: string): boolean {
|
|
@@ -79,7 +80,11 @@ async function gather(
|
|
|
79
80
|
return { summary, files, near_limit: rows, declared, cases: owed, consumers }
|
|
80
81
|
}
|
|
81
82
|
|
|
82
|
-
async function scaffold(
|
|
83
|
+
async function scaffold(
|
|
84
|
+
issue_number: string,
|
|
85
|
+
paths: ReadonlyArray<string>,
|
|
86
|
+
estimate?: string,
|
|
87
|
+
): Promise<number> {
|
|
83
88
|
const summary = await run_prep_cli.read_summary(issue_number)
|
|
84
89
|
|
|
85
90
|
if (summary === undefined) {
|
|
@@ -92,16 +97,22 @@ async function scaffold(issue_number: string, paths: ReadonlyArray<string>): Pro
|
|
|
92
97
|
run_prep_locate.extract_targets(summary.body),
|
|
93
98
|
is_file,
|
|
94
99
|
)
|
|
95
|
-
const
|
|
100
|
+
const planned = estimate !== undefined || paths.length > 0 ? paths : targets.files
|
|
101
|
+
const scope = await lane_plan_estimate.attach(
|
|
102
|
+
{ issue: Number(issue_number), paths: [...planned], planned_at: '' },
|
|
103
|
+
estimate,
|
|
104
|
+
)
|
|
105
|
+
const parts = await gather(summary.text, scope.paths, targets)
|
|
96
106
|
|
|
97
|
-
console.info(plan_scaffold.format(
|
|
107
|
+
console.info(plan_scaffold.format({ ...parts, estimate: scope.estimated_size }))
|
|
98
108
|
|
|
99
109
|
return SUCCESS_EXIT_CODE
|
|
100
110
|
}
|
|
101
111
|
|
|
102
112
|
// A malformed number is an argument error (usage); an unreadable body is a read failure (its own note).
|
|
103
113
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
104
|
-
const
|
|
114
|
+
const input = lane_plan_estimate.split(argv)
|
|
115
|
+
const [first = '', ...paths] = input.tokens
|
|
105
116
|
const issue_number = run_prep_cli.parse_number([first])
|
|
106
117
|
|
|
107
118
|
if (issue_number === undefined) {
|
|
@@ -110,7 +121,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
110
121
|
return FAILURE_EXIT_CODE
|
|
111
122
|
}
|
|
112
123
|
|
|
113
|
-
return await scaffold(issue_number, paths)
|
|
124
|
+
return await scaffold(issue_number, paths, input.file)
|
|
114
125
|
}
|
|
115
126
|
|
|
116
127
|
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
|
+
import { issue_body_keys } from '#scripts/issue/issue-body-keys'
|
|
2
3
|
import { line_budget, type FileBudget } from '#scripts/lines/line-budget'
|
|
4
|
+
import type { DeclaredSize } from '#scripts/split/split-assess'
|
|
3
5
|
import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-logic'
|
|
4
6
|
|
|
5
7
|
// The formatting half of `josh plan:scaffold`: each section is an existing command's answer, computed
|
|
@@ -25,6 +27,7 @@ interface ScaffoldParts {
|
|
|
25
27
|
declared: string
|
|
26
28
|
cases: ReadonlyArray<string>
|
|
27
29
|
consumers: string | undefined
|
|
30
|
+
estimate?: DeclaredSize | undefined
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
// A body target that names a file is a planned file; any other name is an identifier whose consumers
|
|
@@ -94,9 +97,17 @@ function file_sections(parts: ScaffoldParts): ReadonlyArray<string> {
|
|
|
94
97
|
]
|
|
95
98
|
}
|
|
96
99
|
|
|
100
|
+
function estimate_lines(size: DeclaredSize | undefined): Array<string> {
|
|
101
|
+
if (size === undefined) return []
|
|
102
|
+
const counts = issue_body_keys.size_value(String(size.files), String(size.lines))
|
|
103
|
+
|
|
104
|
+
return [`${issue_body_keys.prefix('size')} ${counts}`]
|
|
105
|
+
}
|
|
106
|
+
|
|
97
107
|
function format(parts: ScaffoldParts): string {
|
|
98
108
|
return [
|
|
99
109
|
parts.summary,
|
|
110
|
+
...estimate_lines(parts.estimate),
|
|
100
111
|
...file_sections(parts),
|
|
101
112
|
section(
|
|
102
113
|
'plan:consumers',
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// GitHub refuses a release whose body exceeds this many characters (HTTP 422).
|
|
2
|
+
const MAX_BODY_LENGTH = 125_000
|
|
3
|
+
const LINE_BREAK = '\n'
|
|
4
|
+
|
|
5
|
+
function changelog_url(repository: string, tag: string, previous: string | undefined): string {
|
|
6
|
+
const root = `https://github.com/${repository}`
|
|
7
|
+
|
|
8
|
+
return previous === undefined ? `${root}/commits/${tag}` : `${root}/compare/${previous}...${tag}`
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Cut at a line break so no Markdown line or surrogate pair is split; the changelog link stays last.
|
|
12
|
+
function cap_body(body: string, url: string): string {
|
|
13
|
+
if (body.length <= MAX_BODY_LENGTH) return body
|
|
14
|
+
|
|
15
|
+
const tail = `${LINE_BREAK}${LINE_BREAK}…${LINE_BREAK}${LINE_BREAK}**Full Changelog**: ${url}`
|
|
16
|
+
const head = body.slice(0, MAX_BODY_LENGTH - tail.length)
|
|
17
|
+
const line_end = head.lastIndexOf(LINE_BREAK)
|
|
18
|
+
|
|
19
|
+
return `${line_end > 0 ? head.slice(0, line_end) : head}${tail}`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const github_release_notes = { MAX_BODY_LENGTH, cap_body, changelog_url }
|
|
23
|
+
|
|
24
|
+
export { github_release_notes }
|
|
@@ -21,6 +21,11 @@ const JOBS_SCHEMA = z.object({ jobs: z.array(JOB_SCHEMA) })
|
|
|
21
21
|
type Run = z.infer<typeof RUN_SCHEMA>
|
|
22
22
|
type PollState = 'ready' | 'failed' | 'pending'
|
|
23
23
|
|
|
24
|
+
interface JobOutcomes {
|
|
25
|
+
failed: ReadonlyArray<string>
|
|
26
|
+
succeeded: ReadonlyArray<string>
|
|
27
|
+
}
|
|
28
|
+
|
|
24
29
|
// `read` answers a GET on a repository API path. `workflow` is the publish workflow and `jobs` the
|
|
25
30
|
// jobs in it whose failure counts (empty: every job). `release_run_workflow` is the workflow that
|
|
26
31
|
// creates a tag's release — the publish workflow itself when its run creates the release.
|
|
@@ -31,11 +36,15 @@ interface RunSource {
|
|
|
31
36
|
release_run_workflow: string | undefined
|
|
32
37
|
}
|
|
33
38
|
|
|
39
|
+
// A reusable workflow's jobs are listed as `<caller job> / <job>`, so the caller's name covers them.
|
|
40
|
+
function is_named_job(job_name: string, names: ReadonlyArray<string>): boolean {
|
|
41
|
+
return names.some((name) => job_name === name || job_name.startsWith(`${name} /`))
|
|
42
|
+
}
|
|
43
|
+
|
|
34
44
|
function is_failed_job(job: z.infer<typeof JOB_SCHEMA>, names: ReadonlyArray<string>): boolean {
|
|
35
45
|
if (job.status !== 'completed' || !FAILED_CONCLUSIONS.has(job.conclusion ?? '')) return false
|
|
36
|
-
if (names.length === 0) return true
|
|
37
46
|
|
|
38
|
-
return names.
|
|
47
|
+
return names.length === 0 || is_named_job(job.name, names)
|
|
39
48
|
}
|
|
40
49
|
|
|
41
50
|
async function list_runs(source: RunSource, workflow_name: string): Promise<ReadonlyArray<Run>> {
|
|
@@ -55,12 +64,22 @@ async function find_run(
|
|
|
55
64
|
return runs.find((item) => item.display_title === title)
|
|
56
65
|
}
|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
// A job skipped because the one it needs failed is in neither list.
|
|
68
|
+
async function job_outcomes(source: RunSource, run_id: number): Promise<JobOutcomes> {
|
|
59
69
|
const { jobs } = JOBS_SCHEMA.parse(
|
|
60
70
|
await source.read(`/actions/runs/${String(run_id)}/jobs?per_page=100`),
|
|
61
71
|
)
|
|
62
72
|
|
|
63
|
-
return
|
|
73
|
+
return {
|
|
74
|
+
failed: jobs.filter((job) => is_failed_job(job, source.jobs)).map((job) => job.name),
|
|
75
|
+
succeeded: jobs.filter((job) => job.conclusion === 'success').map((job) => job.name),
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function has_failed_job(source: RunSource, run_id: number): Promise<boolean> {
|
|
80
|
+
const { failed } = await job_outcomes(source, run_id)
|
|
81
|
+
|
|
82
|
+
return failed.length > 0
|
|
64
83
|
}
|
|
65
84
|
|
|
66
85
|
// A run started before its title named the tag may be at work on any tag.
|
|
@@ -120,7 +139,14 @@ async function publication_state(
|
|
|
120
139
|
return run_state(await publish_run(source, workflow, tag))
|
|
121
140
|
}
|
|
122
141
|
|
|
123
|
-
const github_release_runs = {
|
|
142
|
+
const github_release_runs = {
|
|
143
|
+
is_named_job,
|
|
144
|
+
job_outcomes,
|
|
145
|
+
is_release_lost,
|
|
146
|
+
publication_state,
|
|
147
|
+
publish_run,
|
|
148
|
+
run_state,
|
|
149
|
+
}
|
|
124
150
|
|
|
125
|
-
export type { PollState, Run, RunSource }
|
|
151
|
+
export type { JobOutcomes, PollState, Run, RunSource }
|
|
126
152
|
export { github_release_runs }
|
|
@@ -2,6 +2,7 @@ import { setTimeout } from 'node:timers/promises'
|
|
|
2
2
|
import { poll as shared_poll } from '#scripts/lib/poll'
|
|
3
3
|
import semver from 'semver'
|
|
4
4
|
import { z } from 'zod'
|
|
5
|
+
import { github_release_notes } from './github-release-notes'
|
|
5
6
|
import { github_release_runs, type PollState, type RunSource } from './github-release-runs'
|
|
6
7
|
|
|
7
8
|
const API_ROOT = 'https://api.github.com/repos'
|
|
@@ -41,6 +42,7 @@ interface Client extends Omit<RunSource, 'read'> {
|
|
|
41
42
|
request: ReleaseRequest
|
|
42
43
|
token: string
|
|
43
44
|
url: string
|
|
45
|
+
repository: string
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
// `fallback` answers when no tag sits between the floor and the target; without one the floor itself
|
|
@@ -81,7 +83,11 @@ async function api_post(client: Client, path: string, body: object): Promise<Res
|
|
|
81
83
|
}
|
|
82
84
|
|
|
83
85
|
async function read_response(response: Response): Promise<unknown> {
|
|
84
|
-
if (!response.ok)
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
const detail = await response.text()
|
|
88
|
+
|
|
89
|
+
throw new Error(`GitHub Releases API returned HTTP ${String(response.status)}: ${detail}`)
|
|
90
|
+
}
|
|
85
91
|
|
|
86
92
|
return await response.json()
|
|
87
93
|
}
|
|
@@ -248,10 +254,11 @@ async function create_release(
|
|
|
248
254
|
previous: string | undefined,
|
|
249
255
|
): Promise<void> {
|
|
250
256
|
const notes = await generate_notes(client, tag, previous)
|
|
257
|
+
const url = github_release_notes.changelog_url(client.repository, tag, previous)
|
|
251
258
|
const response = await api_post(client, '/releases', {
|
|
252
259
|
tag_name: tag,
|
|
253
260
|
name: notes.name,
|
|
254
|
-
body: notes.body,
|
|
261
|
+
body: github_release_notes.cap_body(notes.body, url),
|
|
255
262
|
draft: false,
|
|
256
263
|
prerelease: false,
|
|
257
264
|
})
|
|
@@ -268,6 +275,7 @@ function create_client(request: ReleaseRequest, token: string, settings: Release
|
|
|
268
275
|
request,
|
|
269
276
|
token,
|
|
270
277
|
url: `${API_ROOT}/${settings.repository}`,
|
|
278
|
+
repository: settings.repository,
|
|
271
279
|
workflow: settings.workflow,
|
|
272
280
|
jobs: settings.jobs ?? [],
|
|
273
281
|
release_run_workflow: settings.release_run_workflow,
|
|
@@ -4,7 +4,7 @@ import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
|
4
4
|
import { poll } from '#scripts/lib/poll'
|
|
5
5
|
import { file_reader } from '#scripts/lib/read-file'
|
|
6
6
|
import { npm_registry } from '#scripts/version/npm-registry'
|
|
7
|
-
import { release_publish_run } from './release-publish-run'
|
|
7
|
+
import { release_publish_run, type FailedRun } from './release-publish-run'
|
|
8
8
|
import { release_tag } from './release-tag'
|
|
9
9
|
|
|
10
10
|
// The stage lines `pnpm josh release` prints, and the two stages it waits for after the tag.
|
|
@@ -26,7 +26,7 @@ const HTML_URL_FILTER = '.html_url'
|
|
|
26
26
|
const PUBLISH_WORKFLOW_PATH = '.github/workflows/publish.yml'
|
|
27
27
|
const RELEASE_WORKFLOW_PATH = '.github/workflows/github-release.yml'
|
|
28
28
|
|
|
29
|
-
type NpmState = { kind: 'published' } | { kind: 'failed';
|
|
29
|
+
type NpmState = { kind: 'published' } | { kind: 'failed'; run: FailedRun } | { kind: 'pending' }
|
|
30
30
|
|
|
31
31
|
function pr_opened_line(pr_url: string): string {
|
|
32
32
|
return `📝 Release PR opened: ${pr_url}`
|
|
@@ -61,15 +61,27 @@ function missed_npm_line(package_name: string, version: string): string {
|
|
|
61
61
|
].join('\n')
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
function failed_run_headline(tag: string, run: FailedRun): string {
|
|
65
|
+
const run_label = `Publish ${tag} failed (run ${String(run.run_id)})`
|
|
66
|
+
|
|
67
|
+
if (run.has_npm_job_failed) return `❌ ${run_label} before npm listed ${tag}.`
|
|
68
|
+
|
|
69
|
+
return `❌ ${run_label} in ${run.failed_jobs.join(', ')}; its publish-npm job succeeded.`
|
|
70
|
+
}
|
|
71
|
+
|
|
64
72
|
// The run's own failure is known, so the line names the run rather than a stage that never came. It
|
|
65
|
-
// claims no more than the last registry read: a job beside `publish-npm`
|
|
66
|
-
//
|
|
67
|
-
function failed_publish_line(version: string,
|
|
73
|
+
// claims no more than the last registry read: when a job beside `publish-npm` failed the run, npm
|
|
74
|
+
// may still take the version, so the npm side is reported as unconfirmed rather than failed.
|
|
75
|
+
function failed_publish_line(package_name: string, version: string, run: FailedRun): string {
|
|
68
76
|
const tag = release_tag.tag_name(version)
|
|
77
|
+
const npm_lines = run.has_npm_job_failed
|
|
78
|
+
? []
|
|
79
|
+
: [` npm has not listed ${tag} yet: check ${npm_package_url(package_name, version)}`]
|
|
69
80
|
|
|
70
81
|
return [
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
failed_run_headline(tag, run),
|
|
83
|
+
...npm_lines,
|
|
84
|
+
` Inspect it with: gh run view ${String(run.run_id)} --log-failed`,
|
|
73
85
|
].join('\n')
|
|
74
86
|
}
|
|
75
87
|
|
|
@@ -117,16 +129,16 @@ async function read_release_url(version: string): Promise<string | undefined> {
|
|
|
117
129
|
|
|
118
130
|
function npm_outcome_line(package_name: string, version: string, state: NpmState): string {
|
|
119
131
|
if (state.kind === 'published') return npm_line(package_name, version)
|
|
120
|
-
if (state.kind === 'failed') return failed_publish_line(version, state.
|
|
132
|
+
if (state.kind === 'failed') return failed_publish_line(package_name, version, state.run)
|
|
121
133
|
|
|
122
134
|
return missed_npm_line(package_name, version)
|
|
123
135
|
}
|
|
124
136
|
|
|
125
137
|
async function npm_state(package_name: string, version: string): Promise<NpmState> {
|
|
126
138
|
if (npm_registry.has_public_version(package_name, version)) return { kind: 'published' }
|
|
127
|
-
const
|
|
139
|
+
const run = await release_publish_run.failed_run(version)
|
|
128
140
|
|
|
129
|
-
return
|
|
141
|
+
return run === undefined ? { kind: 'pending' } : { kind: 'failed', run }
|
|
130
142
|
}
|
|
131
143
|
|
|
132
144
|
// `josh release` is distributed to consumers whose packages are not on npm, so a repository that does
|