@joshuafolkken/kit 1.2116.0 → 1.3000.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/agents/design-consultant.md +19 -0
- package/.claude/agents/investigator.md +12 -2
- package/.claude/agents/reviewer-verification.md +13 -2
- package/.claude/agents/reviewer.md +13 -2
- package/.claude/settings.json +32 -9
- package/.claude/skills/dependency-update/SKILL.md +11 -14
- package/.claude/skills/epic-commands/SKILL.md +8 -6
- package/.claude/skills/epic-commands/epic-bundle.md +6 -7
- package/.claude/skills/verify-ui/SKILL.md +13 -23
- package/.claude/skills/workflow-commands/SKILL.md +19 -18
- package/.claude/skills/workflow-commands/background-commands.md +7 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +31 -64
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +54 -62
- package/.claude/skills/workflow-commands/backlogrun-park.md +65 -64
- package/.claude/skills/workflow-commands/backlogrun-progress.md +30 -44
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +18 -33
- package/.claude/skills/workflow-commands/backlogrun-steps.md +62 -50
- package/.claude/skills/workflow-commands/backlogrun.md +13 -18
- package/.claude/skills/workflow-commands/chain-rule.md +54 -53
- package/.claude/skills/workflow-commands/delegation.md +11 -11
- package/.claude/skills/workflow-commands/entry-sequence.md +23 -34
- package/.claude/skills/workflow-commands/followup.md +19 -17
- package/.claude/skills/workflow-commands/fullrun-lane.md +11 -0
- package/.claude/skills/workflow-commands/fullrun-steps.md +27 -34
- package/.claude/skills/workflow-commands/fullrun.md +5 -6
- package/.claude/skills/workflow-commands/halfrun.md +4 -7
- package/.claude/skills/workflow-commands/issue-comments.md +29 -15
- package/.claude/skills/workflow-commands/issue-fold-existing.md +9 -14
- package/.claude/skills/workflow-commands/issue-scout.md +5 -8
- package/.claude/skills/workflow-commands/kickoff.md +25 -34
- package/.claude/skills/workflow-commands/latest-gate.md +6 -14
- package/.claude/skills/workflow-commands/needs-human-review.md +3 -3
- package/.claude/skills/workflow-commands/observation-filing.md +9 -7
- package/.claude/skills/workflow-commands/observation-ledger.md +4 -1
- package/.claude/skills/workflow-commands/pre-gate-cut.md +21 -26
- package/.claude/skills/workflow-commands/prerequisite.md +21 -6
- package/.claude/skills/workflow-commands/progress-watcher.md +8 -18
- package/.claude/skills/workflow-commands/prrun.md +1 -1
- package/.claude/skills/workflow-commands/retrospective.md +16 -15
- package/.claude/skills/workflow-commands/split-assessment.md +32 -22
- package/.claude/skills/workflow-commands/target-repository.md +2 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +3 -2
- package/.codex/hooks.json +18 -8
- package/.cursorrules +1 -2
- package/.github/actions/change-scope/action.yml +19 -0
- package/.github/actions/setup-pnpm/action.yml +87 -14
- package/.github/dependabot.yml +1 -0
- package/.github/workflows/ci.yml +74 -30
- package/.github/workflows/publish.yml +56 -14
- package/.github/workflows/sonar-qube.yml +28 -1
- package/.prettierignore +2 -0
- package/AGENTS.md +1 -2
- package/CLAUDE.md +8 -8
- package/GEMINI.md +1 -2
- package/README.md +1 -1
- package/SECURITY.md +11 -1
- package/cspell/index.yaml +11 -0
- package/dist/.inputs-verified.json +1 -0
- package/dist/CLAUDE.md +8 -8
- package/dist/commands/adopt.js +222 -0
- package/dist/commands/auth-setup-cli.js +127 -0
- package/dist/commands/auto-ok-judge-cli.js +223 -0
- package/dist/commands/auto-ok-main.js +136 -0
- package/dist/commands/backlog-budget-main.js +146 -0
- package/dist/commands/backlog-drive-cli.js +1935 -0
- package/dist/commands/backlog-next-main.js +186 -0
- package/dist/commands/backlog-offer-main.js +190 -0
- package/dist/commands/backlog-plan-cli.js +329 -0
- package/dist/commands/backlog-triage-cli.js +642 -0
- package/dist/commands/backlogrun-cli.js +829 -0
- package/dist/commands/behavior-cli.js +216 -0
- package/dist/commands/bump-version-main.js +22 -0
- package/dist/commands/bytes-command.js +208 -0
- package/dist/commands/cases-cli.js +57 -0
- package/dist/commands/check-commit-message-main.js +22 -0
- package/dist/commands/check-related.js +551 -0
- package/dist/commands/chunk-23GH6B3D.js +333 -0
- package/dist/commands/chunk-2ADQ5XRD.js +36 -0
- package/dist/commands/chunk-2CXAVVST.js +20 -0
- package/dist/commands/chunk-2DJLAUYB.js +109 -0
- package/dist/commands/chunk-2FE3C4PH.js +112 -0
- package/dist/commands/chunk-2FJJYCBD.js +149 -0
- package/dist/commands/chunk-2IESYBZH.js +34 -0
- package/dist/commands/chunk-2MJ4OCDL.js +188 -0
- package/dist/commands/chunk-2NSB5ZYQ.js +26 -0
- package/dist/commands/chunk-2OIX4JLA.js +37 -0
- package/dist/commands/chunk-2TQXCH2K.js +145 -0
- package/dist/commands/chunk-2VLHFILE.js +52 -0
- package/dist/commands/chunk-2VRITY55.js +41 -0
- package/dist/commands/chunk-2YCKPX3A.js +25 -0
- package/dist/commands/chunk-32SNWQJP.js +99 -0
- package/dist/commands/chunk-337QQM4C.js +136 -0
- package/dist/commands/chunk-34DND4BA.js +104 -0
- package/dist/commands/chunk-34LAULSC.js +352 -0
- package/dist/commands/chunk-36LOGVJ7.js +38 -0
- package/dist/commands/chunk-36M2UV6C.js +80 -0
- package/dist/commands/chunk-3BNNMJOT.js +702 -0
- package/dist/commands/chunk-3CCGKX7Y.js +20 -0
- package/dist/commands/chunk-3EO2XN3A.js +124 -0
- package/dist/commands/chunk-3GF52L5F.js +271 -0
- package/dist/commands/chunk-3HU3LPIF.js +113 -0
- package/dist/commands/chunk-3LZXX5GL.js +50 -0
- package/dist/commands/chunk-3NWAGIA6.js +39 -0
- package/dist/commands/chunk-3PEXBHRN.js +33 -0
- package/dist/commands/chunk-3RIQ36LH.js +110 -0
- package/dist/commands/chunk-3UKJFWKS.js +170 -0
- package/dist/commands/chunk-3WRQP3QE.js +47 -0
- package/dist/commands/chunk-3WWQFCGX.js +18 -0
- package/dist/commands/chunk-3ZEO3KOM.js +35 -0
- package/dist/commands/chunk-4BEIYKI2.js +76 -0
- package/dist/commands/chunk-4D5KWMFL.js +461 -0
- package/dist/commands/chunk-4DVM57T7.js +86 -0
- package/dist/commands/chunk-4EADHJVC.js +247 -0
- package/dist/commands/chunk-4G7NKNAZ.js +114 -0
- package/dist/commands/chunk-4HBVHYNL.js +73 -0
- package/dist/commands/chunk-4LWRCPS5.js +114 -0
- package/dist/commands/chunk-4P2LCVGO.js +211 -0
- package/dist/commands/chunk-4PES3BAA.js +263 -0
- package/dist/commands/chunk-4PUKDAXL.js +42 -0
- package/dist/commands/chunk-4Q4FXBUQ.js +99 -0
- package/dist/commands/chunk-4QYW2IL7.js +82 -0
- package/dist/commands/chunk-4YI4SLRJ.js +161 -0
- package/dist/commands/chunk-4Z5723GA.js +350 -0
- package/dist/commands/chunk-4ZHWTTQW.js +99 -0
- package/dist/commands/chunk-55I7OYHI.js +98 -0
- package/dist/commands/chunk-5GBZ43UA.js +58 -0
- package/dist/commands/chunk-5HCPSV45.js +800 -0
- package/dist/{hooks/chunk-OPSRGWFU.js → commands/chunk-5HVYOIIK.js} +1 -1
- package/dist/commands/chunk-5HWZFL4D.js +4175 -0
- package/dist/commands/chunk-5PAEXYIY.js +234 -0
- package/dist/commands/chunk-5SB37YDW.js +321 -0
- package/dist/commands/chunk-5TMAPYQD.js +19 -0
- package/dist/commands/chunk-5WIZR5SC.js +313 -0
- package/dist/commands/chunk-5Y7QQYTU.js +232 -0
- package/dist/commands/chunk-5ZTQX7OS.js +125 -0
- package/dist/commands/chunk-65E4OZJ7.js +9 -0
- package/dist/commands/chunk-66NX6EXR.js +29 -0
- package/dist/commands/chunk-66TGK5XL.js +84 -0
- package/dist/commands/chunk-6CJXLPRI.js +72 -0
- package/dist/commands/chunk-6EU5ZCDP.js +402 -0
- package/dist/commands/chunk-6FWV56B3.js +40 -0
- package/dist/commands/chunk-6HRRZANN.js +55 -0
- package/dist/commands/chunk-6I2JM5UX.js +134 -0
- package/dist/commands/chunk-6JVNRY5A.js +29 -0
- package/dist/commands/chunk-6NGNMIMT.js +20 -0
- package/dist/commands/chunk-6NRTLH6I.js +51 -0
- package/dist/commands/chunk-6NV2F7QH.js +47 -0
- package/dist/commands/chunk-6OP63TBT.js +78 -0
- package/dist/commands/chunk-6Q3XUCLM.js +204 -0
- package/dist/commands/chunk-6SKMZGER.js +148 -0
- package/dist/commands/chunk-6TESOL3L.js +173 -0
- package/dist/commands/chunk-6UGFS3EU.js +704 -0
- package/dist/commands/chunk-6VTJO5L2.js +38 -0
- package/dist/commands/chunk-6WEVLIZE.js +29 -0
- package/dist/commands/chunk-6WKJ3GDA.js +408 -0
- package/dist/commands/chunk-6WTVAL4D.js +115 -0
- package/dist/commands/chunk-72EW7AVI.js +59 -0
- package/dist/commands/chunk-72J2G2E7.js +1189 -0
- package/dist/commands/chunk-73EBNBUW.js +90 -0
- package/dist/commands/chunk-73JOEKIC.js +169 -0
- package/dist/commands/chunk-73KBUQKI.js +41 -0
- package/dist/commands/chunk-7CHCZBNF.js +555 -0
- package/dist/commands/chunk-7EAMUVIO.js +326 -0
- package/dist/commands/chunk-7GHOFHUS.js +48 -0
- package/dist/commands/chunk-7GMTJDO2.js +469 -0
- package/dist/commands/chunk-7HCPRVMB.js +76 -0
- package/dist/commands/chunk-7IT23HIR.js +306 -0
- package/dist/commands/chunk-7IZJ5MG2.js +72 -0
- package/dist/commands/chunk-7LJQMM2K.js +102 -0
- package/dist/commands/chunk-7MOZEEFJ.js +350 -0
- package/dist/commands/chunk-7P4X4TQL.js +507 -0
- package/dist/commands/chunk-7S6VRZOH.js +223 -0
- package/dist/commands/chunk-7V5UVKFG.js +20 -0
- package/dist/commands/chunk-7W3D3WRW.js +171 -0
- package/dist/commands/chunk-7ZECP3J6.js +212 -0
- package/dist/commands/chunk-A3D2XHOJ.js +387 -0
- package/dist/commands/chunk-A4HOQKOG.js +85 -0
- package/dist/commands/chunk-A5V7EWIX.js +85 -0
- package/dist/commands/chunk-A6T2N7VC.js +159 -0
- package/dist/commands/chunk-AI5K4QJO.js +72 -0
- package/dist/commands/chunk-AJWR7D3H.js +15 -0
- package/dist/commands/chunk-AKK56GNX.js +205 -0
- package/dist/commands/chunk-AKQYYHP2.js +461 -0
- package/dist/commands/chunk-AM44D7NF.js +52 -0
- package/dist/commands/chunk-ANUTT56I.js +85 -0
- package/dist/commands/chunk-AQ3PMSXK.js +76 -0
- package/dist/commands/chunk-AS3GWVAN.js +45 -0
- package/dist/commands/chunk-ATRMETHT.js +23 -0
- package/dist/commands/chunk-AVUGMOHZ.js +210 -0
- package/dist/commands/chunk-AWLYN2SP.js +64 -0
- package/dist/commands/chunk-AZUE65NT.js +77 -0
- package/dist/commands/chunk-B2EA2HCY.js +119 -0
- package/dist/commands/chunk-B33BTNB4.js +87 -0
- package/dist/commands/chunk-B3XFOHDX.js +71 -0
- package/dist/commands/chunk-B5GXZK3E.js +34 -0
- package/dist/commands/chunk-B77ZMVHS.js +80 -0
- package/dist/commands/chunk-BCK5LW4F.js +45 -0
- package/dist/commands/chunk-BEE7OAQ5.js +210 -0
- package/dist/commands/chunk-BF6YX4HE.js +70 -0
- package/dist/commands/chunk-BFLFPKQQ.js +46 -0
- package/dist/commands/chunk-BHRS7HAM.js +272 -0
- package/dist/commands/chunk-BIKGPT52.js +29 -0
- package/dist/commands/chunk-BJA5U4Q7.js +75 -0
- package/dist/commands/chunk-BJKEXXY6.js +15 -0
- package/dist/commands/chunk-BK6Q4VCA.js +128 -0
- package/dist/commands/chunk-BNXE3NVB.js +107 -0
- package/dist/commands/chunk-BPSJSHYD.js +209 -0
- package/dist/commands/chunk-BRFQBJ5Y.js +132 -0
- package/dist/commands/chunk-BY3POLIQ.js +104 -0
- package/dist/commands/chunk-BYSPYVLD.js +130 -0
- package/dist/commands/chunk-C26LKDBE.js +60 -0
- package/dist/commands/chunk-C2SEDMZ3.js +238 -0
- package/dist/commands/chunk-C6QSVO5K.js +56 -0
- package/dist/commands/chunk-CA6F5OXK.js +809 -0
- package/dist/commands/chunk-CADFBQJJ.js +75 -0
- package/dist/commands/chunk-CDY4NFQG.js +15 -0
- package/dist/commands/chunk-CGLLAEKZ.js +110 -0
- package/dist/commands/chunk-CHX4QTP4.js +133 -0
- package/dist/commands/chunk-CJAA5GAF.js +418 -0
- package/dist/commands/chunk-CJKPF5DJ.js +156 -0
- package/dist/commands/chunk-CJSFC5YI.js +158 -0
- package/dist/commands/chunk-CRNPPKP2.js +99 -0
- package/dist/commands/chunk-CUR2WNYB.js +42 -0
- package/dist/commands/chunk-CYQ3ZF7R.js +372 -0
- package/dist/commands/chunk-D3SHCUBC.js +64 -0
- package/dist/commands/chunk-D4HNS43Q.js +208 -0
- package/dist/commands/chunk-D4SZK7H2.js +34 -0
- package/dist/commands/chunk-D5HIP4HT.js +289 -0
- package/dist/commands/chunk-D5TAR6TV.js +71 -0
- package/dist/commands/chunk-DAJCUSPG.js +127 -0
- package/dist/commands/chunk-DBKTFB5V.js +18 -0
- package/dist/commands/chunk-DIB2Z2OS.js +307 -0
- package/dist/commands/chunk-DJVMC3U2.js +131 -0
- package/dist/commands/chunk-DKM4UJQU.js +10 -0
- package/dist/commands/chunk-DMD74E3F.js +39 -0
- package/dist/commands/chunk-DNJC7X73.js +84 -0
- package/dist/commands/chunk-DP7WIGQ4.js +298 -0
- package/dist/commands/chunk-DPJVKTO4.js +41 -0
- package/dist/commands/chunk-DRCTDVI2.js +83 -0
- package/dist/commands/chunk-DSBK66US.js +67 -0
- package/dist/commands/chunk-DXJQHJQ4.js +73 -0
- package/dist/commands/chunk-DXZW4V7J.js +114 -0
- package/dist/commands/chunk-E2ZCUKHT.js +274 -0
- package/dist/commands/chunk-E33LSO2W.js +20 -0
- package/dist/commands/chunk-E3CXOVPQ.js +258 -0
- package/dist/commands/chunk-EBI2BAKQ.js +47 -0
- package/dist/commands/chunk-EBNIX2TC.js +81 -0
- package/dist/commands/chunk-EBVS2LKX.js +60 -0
- package/dist/commands/chunk-EFHSCUFN.js +170 -0
- package/dist/commands/chunk-EH3LVYOX.js +72 -0
- package/dist/commands/chunk-EI6JG5DF.js +92 -0
- package/dist/commands/chunk-EK2Y6B4X.js +140 -0
- package/dist/commands/chunk-EK327QOS.js +260 -0
- package/dist/commands/chunk-EKCKCX5S.js +291 -0
- package/dist/commands/chunk-ELWNRE6E.js +93 -0
- package/dist/commands/chunk-ENFPR7J2.js +53 -0
- package/dist/commands/chunk-ENLWXAHD.js +80 -0
- package/dist/commands/chunk-ERGZPWKP.js +102 -0
- package/dist/commands/chunk-ESQEEL4O.js +58 -0
- package/dist/commands/chunk-EW4NPUMQ.js +363 -0
- package/dist/commands/chunk-EWA72KO7.js +241 -0
- package/dist/commands/chunk-EWVR5AEX.js +140 -0
- package/dist/commands/chunk-EZSO25UZ.js +80 -0
- package/dist/commands/chunk-F22G3VDB.js +183 -0
- package/dist/commands/chunk-F2HFWLQR.js +32 -0
- package/dist/commands/chunk-F2J6DGDM.js +302 -0
- package/dist/commands/chunk-F3WBEEYC.js +68 -0
- package/dist/commands/chunk-F6OWP2AY.js +750 -0
- package/dist/commands/chunk-F7XLEK55.js +62 -0
- package/dist/commands/chunk-FB3D7CX5.js +241 -0
- package/dist/commands/chunk-FC33R5UN.js +516 -0
- package/dist/commands/chunk-FCINBCKB.js +77 -0
- package/dist/commands/chunk-FFHEGWPK.js +91 -0
- package/dist/commands/chunk-FGL6DBZU.js +71 -0
- package/dist/commands/chunk-FGZQSSGH.js +210 -0
- package/dist/{hooks/chunk-VVNYJWEI.js → commands/chunk-FIUCHMCF.js} +4 -2
- package/dist/commands/chunk-FNOSSXLG.js +61 -0
- package/dist/commands/chunk-FNQW6NY7.js +154 -0
- package/dist/commands/chunk-FROACLVU.js +525 -0
- package/dist/commands/chunk-FVVZIJUC.js +425 -0
- package/dist/commands/chunk-G47ZNQVG.js +17 -0
- package/dist/commands/chunk-G6BXCWPH.js +141 -0
- package/dist/commands/chunk-GA4VIFHD.js +224 -0
- package/dist/commands/chunk-GA6E4VGO.js +328 -0
- package/dist/commands/chunk-GDUK5YPO.js +185 -0
- package/dist/commands/chunk-GIGKMIPQ.js +72 -0
- package/dist/commands/chunk-GJYMI2CM.js +48 -0
- package/dist/commands/chunk-GK2KY4MO.js +67 -0
- package/dist/commands/chunk-GM3XLC4W.js +63 -0
- package/dist/commands/chunk-GO3GH7FG.js +75 -0
- package/dist/commands/chunk-GPMSYXYO.js +378 -0
- package/dist/commands/chunk-GPTO6IZG.js +29 -0
- package/dist/commands/chunk-GQHUFNXN.js +54 -0
- package/dist/commands/chunk-GU5ML3Y3.js +263 -0
- package/dist/commands/chunk-GW4UWR3O.js +126 -0
- package/dist/commands/chunk-H4LYG37R.js +716 -0
- package/dist/commands/chunk-HBNB3TLG.js +122 -0
- package/dist/commands/chunk-HCA5QG2U.js +299 -0
- package/dist/commands/chunk-HE5S4XRE.js +21 -0
- package/dist/commands/chunk-HESMKHEB.js +105 -0
- package/dist/commands/chunk-HG2NZQD5.js +135 -0
- package/dist/commands/chunk-HH2KDLTP.js +161 -0
- package/dist/commands/chunk-HHBC6QZE.js +95 -0
- package/dist/commands/chunk-HIB5G2X6.js +426 -0
- package/dist/commands/chunk-HIPO6HUG.js +45 -0
- package/dist/commands/chunk-HIU2WXB6.js +26 -0
- package/dist/commands/chunk-HJKZDDDI.js +62 -0
- package/dist/commands/chunk-HLKAFSN4.js +76 -0
- package/dist/commands/chunk-HLUS2M3D.js +7 -0
- package/dist/commands/chunk-HO52D6JY.js +278 -0
- package/dist/commands/chunk-HOGFJHBT.js +412 -0
- package/dist/commands/chunk-HOSZITJM.js +156 -0
- package/dist/commands/chunk-HPVLI26Z.js +123 -0
- package/dist/commands/chunk-HQ2HSZBN.js +69 -0
- package/dist/commands/chunk-HRLGFRAV.js +21 -0
- package/dist/commands/chunk-HRT4KWP4.js +178 -0
- package/dist/commands/chunk-HTIDHEEN.js +108 -0
- package/dist/commands/chunk-HXCZ3KWS.js +41 -0
- package/dist/commands/chunk-HZBTXKT2.js +61 -0
- package/dist/commands/chunk-HZSQI6TD.js +18 -0
- package/dist/commands/chunk-I63RNFFR.js +213 -0
- package/dist/commands/chunk-IBEKFLWG.js +137 -0
- package/dist/commands/chunk-ICEMFE2V.js +139 -0
- package/dist/commands/chunk-IG22Y5MA.js +56 -0
- package/dist/commands/chunk-IGD6QJPH.js +91 -0
- package/dist/commands/chunk-ILGPZ47M.js +33 -0
- package/dist/commands/chunk-ILQZFUDC.js +65 -0
- package/dist/commands/chunk-ISPBJVXM.js +238 -0
- package/dist/commands/chunk-IW6NWCSN.js +10 -0
- package/dist/commands/chunk-IXX4SXIP.js +53 -0
- package/dist/commands/chunk-IZVM2TTH.js +84 -0
- package/dist/commands/chunk-J3G2R64I.js +88 -0
- package/dist/commands/chunk-J3TKZLHA.js +11 -0
- package/dist/commands/chunk-J6GIVMXI.js +59 -0
- package/dist/commands/chunk-JB7R3A4A.js +204 -0
- package/dist/commands/chunk-JGTLNFFE.js +803 -0
- package/dist/commands/chunk-JHN6RCE6.js +123 -0
- package/dist/commands/chunk-JJRKTWLK.js +64 -0
- package/dist/commands/chunk-JLREFWJ4.js +244 -0
- package/dist/commands/chunk-JLYW7CP6.js +43 -0
- package/dist/commands/chunk-JNWHX25C.js +36 -0
- package/dist/commands/chunk-JOARHU3M.js +137 -0
- package/dist/commands/chunk-JQXPLMCO.js +81 -0
- package/dist/commands/chunk-JTU5A4JI.js +55 -0
- package/dist/commands/chunk-JUJFIATR.js +121 -0
- package/dist/commands/chunk-JUUBDYFZ.js +61 -0
- package/dist/commands/chunk-JZOTCPX2.js +115 -0
- package/dist/commands/chunk-K2WVYHCP.js +18 -0
- package/dist/commands/chunk-K7GL3BGI.js +419 -0
- package/dist/commands/chunk-KB3OQWDT.js +71 -0
- package/dist/commands/chunk-KHWTJ4F7.js +132 -0
- package/dist/commands/chunk-KIILCKQR.js +220 -0
- package/dist/commands/chunk-KIVOZY2J.js +1864 -0
- package/dist/commands/chunk-KQWSENCT.js +94 -0
- package/dist/commands/chunk-KSR23NYN.js +33 -0
- package/dist/commands/chunk-KTLR4Y32.js +21 -0
- package/dist/commands/chunk-KUJQWO6M.js +119 -0
- package/dist/commands/chunk-KVHNQHX3.js +100 -0
- package/dist/commands/chunk-KVJDDECB.js +51 -0
- package/dist/commands/chunk-KVSSLDA3.js +1062 -0
- package/dist/commands/chunk-KVURNO74.js +187 -0
- package/dist/commands/chunk-KXHXMERX.js +214 -0
- package/dist/commands/chunk-KXRFGPZD.js +69 -0
- package/dist/commands/chunk-KZSM5M5P.js +89 -0
- package/dist/commands/chunk-L6LU2633.js +91 -0
- package/dist/commands/chunk-L6TU7FC2.js +103 -0
- package/dist/commands/chunk-L6XN3EXI.js +138 -0
- package/dist/commands/chunk-LA5WTOAM.js +319 -0
- package/dist/commands/chunk-LAKVPOJQ.js +59 -0
- package/dist/commands/chunk-LAYSCY4L.js +6 -0
- package/dist/commands/chunk-LBLII7BS.js +14 -0
- package/dist/commands/chunk-LC7SBONO.js +98 -0
- package/dist/commands/chunk-LCEJXF7A.js +101 -0
- package/dist/commands/chunk-LE2T3FGJ.js +302 -0
- package/dist/commands/chunk-LE7TFPMU.js +88 -0
- package/dist/commands/chunk-LHKXJD6L.js +303 -0
- package/dist/commands/chunk-LMS6N6GE.js +332 -0
- package/dist/commands/chunk-LMSS4ARB.js +32 -0
- package/dist/commands/chunk-LNBUIOK6.js +133 -0
- package/dist/commands/chunk-LOSOLCCW.js +119 -0
- package/dist/commands/chunk-LQXFVZTS.js +13 -0
- package/dist/commands/chunk-LRA3PXHS.js +472 -0
- package/dist/commands/chunk-LRS2OS5J.js +395 -0
- package/dist/commands/chunk-LULJUD6P.js +131 -0
- package/dist/commands/chunk-LUMCYDGE.js +141 -0
- package/dist/commands/chunk-LWAXXZPS.js +118 -0
- package/dist/commands/chunk-LYEKT3IN.js +77 -0
- package/dist/commands/chunk-LZNYHWRO.js +78 -0
- package/dist/commands/chunk-M3ZDYCUF.js +117 -0
- package/dist/commands/chunk-M42SLJCD.js +97 -0
- package/dist/commands/chunk-M4PEC7YW.js +349 -0
- package/dist/commands/chunk-MAGJFH5T.js +77 -0
- package/dist/commands/chunk-MDKDJF2K.js +160 -0
- package/dist/commands/chunk-MDLOETXL.js +211 -0
- package/dist/commands/chunk-MGF64OHV.js +32 -0
- package/dist/commands/chunk-MMTVQOCP.js +211 -0
- package/dist/commands/chunk-MMXZKLDU.js +115 -0
- package/dist/commands/chunk-MPGJ4ONJ.js +634 -0
- package/dist/commands/chunk-MS6Q3Z7V.js +870 -0
- package/dist/commands/chunk-MSPIR3OA.js +32 -0
- package/dist/commands/chunk-MVPUQLN5.js +183 -0
- package/dist/commands/chunk-MXC4IBZ7.js +104 -0
- package/dist/commands/chunk-MY3RSOS5.js +52 -0
- package/dist/commands/chunk-MYNM3YMR.js +347 -0
- package/dist/commands/chunk-MYWRGF5A.js +177 -0
- package/dist/commands/chunk-MZHOPRI6.js +529 -0
- package/dist/commands/chunk-N4O5I55P.js +655 -0
- package/dist/commands/chunk-N6TYL3B2.js +250 -0
- package/dist/commands/chunk-NFEBQED3.js +179 -0
- package/dist/commands/chunk-NFKULY26.js +48 -0
- package/dist/commands/chunk-NGKB632X.js +92 -0
- package/dist/commands/chunk-NJ53AWJU.js +122 -0
- package/dist/commands/chunk-NJT5L6IC.js +126 -0
- package/dist/commands/chunk-NKKH3PBE.js +87 -0
- package/dist/commands/chunk-NKOET4FB.js +44 -0
- package/dist/commands/chunk-NMLCPYBN.js +134 -0
- package/dist/commands/chunk-NOXLKIPR.js +114 -0
- package/dist/commands/chunk-NSAVEXVR.js +353 -0
- package/dist/commands/chunk-NSZTSCBW.js +1263 -0
- package/dist/commands/chunk-NYWGJLBU.js +19 -0
- package/dist/commands/chunk-O26Y2FOJ.js +134 -0
- package/dist/commands/chunk-O27H6NN6.js +163 -0
- package/dist/commands/chunk-O3NDWYNT.js +68 -0
- package/dist/commands/chunk-O4WBADCX.js +88 -0
- package/dist/commands/chunk-O5FVBIRI.js +271 -0
- package/dist/commands/chunk-O5QZ2S6X.js +98 -0
- package/dist/commands/chunk-OGNTJ5JB.js +47 -0
- package/dist/commands/chunk-OHNP3QL2.js +186 -0
- package/dist/commands/chunk-OHVAEJSM.js +184 -0
- package/dist/commands/chunk-OI7KM4K3.js +43 -0
- package/dist/commands/chunk-OIDMJASD.js +62 -0
- package/dist/commands/chunk-OJ4LGBVD.js +126 -0
- package/dist/commands/chunk-OKKQI4ZG.js +49 -0
- package/dist/commands/chunk-OKYFQJW3.js +22 -0
- package/dist/commands/chunk-ORSI7Y55.js +133 -0
- package/dist/commands/chunk-OT3UMEWK.js +47 -0
- package/dist/commands/chunk-OTZJXU2R.js +170 -0
- package/dist/commands/chunk-OVA7STGP.js +578 -0
- package/dist/commands/chunk-OWR2TCOY.js +269 -0
- package/dist/commands/chunk-OZZWRJQI.js +246 -0
- package/dist/commands/chunk-P4CWLRT2.js +213 -0
- package/dist/commands/chunk-P4D5RESF.js +88 -0
- package/dist/commands/chunk-P4KIQRSL.js +119 -0
- package/dist/commands/chunk-P4O67FP5.js +488 -0
- package/dist/commands/chunk-P6RGQXHI.js +391 -0
- package/dist/commands/chunk-P7FPXAHP.js +29 -0
- package/dist/commands/chunk-PBOS7MTW.js +6 -0
- package/dist/commands/chunk-PDAY76AN.js +47 -0
- package/dist/commands/chunk-PDDKRHHS.js +128 -0
- package/dist/commands/chunk-PE7B7242.js +84 -0
- package/dist/commands/chunk-PF22VUWB.js +723 -0
- package/dist/commands/chunk-PFO7EYAP.js +45 -0
- package/dist/commands/chunk-PR3JCPP7.js +126 -0
- package/dist/commands/chunk-PWYXY46Y.js +1150 -0
- package/dist/commands/chunk-PYOK73QE.js +44 -0
- package/dist/commands/chunk-PZ4ITSLG.js +80 -0
- package/dist/commands/chunk-PZ6VWHOO.js +144 -0
- package/dist/commands/chunk-PZTWQYRI.js +44 -0
- package/dist/commands/chunk-PZU6FZO6.js +17 -0
- package/dist/commands/chunk-Q3463XNL.js +198 -0
- package/dist/commands/chunk-Q5N2J2UF.js +78 -0
- package/dist/commands/chunk-Q5Q2QYVU.js +112 -0
- package/dist/commands/chunk-Q6SKKQVJ.js +34 -0
- package/dist/commands/chunk-Q7TV3OV6.js +218 -0
- package/dist/commands/chunk-QA22PBCJ.js +165 -0
- package/dist/commands/chunk-QAHFPCFR.js +50 -0
- package/dist/commands/chunk-QDFDB4CF.js +478 -0
- package/dist/commands/chunk-QEIO2ZNQ.js +324 -0
- package/dist/commands/chunk-QF4WC2AE.js +10 -0
- package/dist/commands/chunk-QGAERR7D.js +99 -0
- package/dist/commands/chunk-QHWJJ6X5.js +53 -0
- package/dist/commands/chunk-QQ4CIYMF.js +132 -0
- package/dist/commands/chunk-QQBMVC5W.js +227 -0
- package/dist/commands/chunk-QQZOQ7AM.js +32 -0
- package/dist/commands/chunk-QS5USD4T.js +540 -0
- package/dist/commands/chunk-QVOFWFWC.js +134 -0
- package/dist/commands/chunk-QWWTC3XR.js +109 -0
- package/dist/commands/chunk-QWX7EBC6.js +112 -0
- package/dist/commands/chunk-QX2R6UJG.js +15 -0
- package/dist/commands/chunk-QXQ56E56.js +27 -0
- package/dist/commands/chunk-R2CF6VZE.js +114 -0
- package/dist/commands/chunk-R6QE5VJG.js +46 -0
- package/dist/commands/chunk-R7IT5VOL.js +27 -0
- package/dist/commands/chunk-RBU2NKHF.js +44 -0
- package/dist/commands/chunk-RDRN56E4.js +92 -0
- package/dist/commands/chunk-REMKUFAC.js +304 -0
- package/dist/commands/chunk-REPANBLS.js +168 -0
- package/dist/commands/chunk-RGDFWJPZ.js +135 -0
- package/dist/commands/chunk-RGGEQM6G.js +140 -0
- package/dist/commands/chunk-RH6ZWJOA.js +77 -0
- package/dist/commands/chunk-RHII5XI6.js +492 -0
- package/dist/commands/chunk-RI7EQYKL.js +60 -0
- package/dist/commands/chunk-RINVPTA2.js +1310 -0
- package/dist/commands/chunk-RIQ75QWR.js +233 -0
- package/dist/commands/chunk-RIUPRMLW.js +63 -0
- package/dist/commands/chunk-RK4HE5NW.js +172 -0
- package/dist/commands/chunk-ROJXMBXP.js +85 -0
- package/dist/commands/chunk-RPDWFUQO.js +239 -0
- package/dist/commands/chunk-RQRLW4XK.js +20 -0
- package/dist/commands/chunk-RRQFITJE.js +40 -0
- package/dist/commands/chunk-RS764ZMU.js +46 -0
- package/dist/commands/chunk-RSSJWMQS.js +30 -0
- package/dist/commands/chunk-RUIBQMOV.js +38 -0
- package/dist/commands/chunk-RUWV4INF.js +245 -0
- package/dist/commands/chunk-RVHBWSIG.js +114 -0
- package/dist/commands/chunk-RVUJ6F5L.js +181 -0
- package/dist/commands/chunk-RX5JSPPH.js +1153 -0
- package/dist/commands/chunk-RXAZJMSZ.js +18 -0
- package/dist/commands/chunk-RY6ZDHKB.js +1218 -0
- package/dist/commands/chunk-RYZ3RQRH.js +16 -0
- package/dist/commands/chunk-RZ4OKKPM.js +1722 -0
- package/dist/commands/chunk-RZJAUVMI.js +69 -0
- package/dist/commands/chunk-S4X5PJV7.js +40 -0
- package/dist/commands/chunk-S6SXMBF2.js +66 -0
- package/dist/commands/chunk-S7XWXG4M.js +3893 -0
- package/dist/commands/chunk-SADJPNDB.js +67 -0
- package/dist/commands/chunk-SBGTCT2C.js +89 -0
- package/dist/commands/chunk-SFNBUB6D.js +110 -0
- package/dist/commands/chunk-SK2LJBFS.js +168 -0
- package/dist/commands/chunk-SNFLV7VV.js +45 -0
- package/dist/commands/chunk-SNO7CY2B.js +69 -0
- package/dist/commands/chunk-ST32OGPY.js +82 -0
- package/dist/commands/chunk-SV4FHQE7.js +995 -0
- package/dist/commands/chunk-SVAKCXZ7.js +44 -0
- package/dist/commands/chunk-SXULS6DX.js +112 -0
- package/dist/commands/chunk-T25S4QHL.js +52 -0
- package/dist/commands/chunk-T2E724HN.js +117 -0
- package/dist/commands/chunk-T2IO4LEB.js +285 -0
- package/dist/commands/chunk-T33QDAWD.js +16 -0
- package/dist/commands/chunk-T3FD3Q73.js +49 -0
- package/dist/commands/chunk-T4UYEHWG.js +50 -0
- package/dist/commands/chunk-T57W3UWK.js +88 -0
- package/dist/commands/chunk-TAPDXK34.js +48 -0
- package/dist/commands/chunk-TBIX5FRN.js +106 -0
- package/dist/commands/chunk-TBNQIFWL.js +101 -0
- package/dist/commands/chunk-TCBUX52E.js +701 -0
- package/dist/commands/chunk-TIXJY22D.js +90 -0
- package/dist/commands/chunk-TKGBF75Y.js +88 -0
- package/dist/commands/chunk-TMLNI3YW.js +95 -0
- package/dist/commands/chunk-TPKFVVJQ.js +125 -0
- package/dist/commands/chunk-TS4ZK46L.js +116 -0
- package/dist/commands/chunk-TUIFS5E7.js +72 -0
- package/dist/commands/chunk-TVJE67O2.js +179 -0
- package/dist/commands/chunk-TVZXG4Y4.js +197 -0
- package/dist/commands/chunk-TXXYC7EV.js +74 -0
- package/dist/commands/chunk-U2UH4VM4.js +229 -0
- package/dist/commands/chunk-U3IVVR4W.js +33 -0
- package/dist/commands/chunk-U5HQQWRE.js +20 -0
- package/dist/commands/chunk-U7XU5RG3.js +86 -0
- package/dist/commands/chunk-UCI4AL3Q.js +35 -0
- package/dist/commands/chunk-UCQJDYE3.js +21 -0
- package/dist/commands/chunk-UCUSCLEK.js +90 -0
- package/dist/commands/chunk-UEURNXE5.js +280 -0
- package/dist/commands/chunk-UGCUSRZF.js +17 -0
- package/dist/commands/chunk-UIWAMLQH.js +49 -0
- package/dist/commands/chunk-UJOZ2MGX.js +705 -0
- package/dist/commands/chunk-ULVVGGTY.js +64 -0
- package/dist/commands/chunk-UOAG2XQT.js +37 -0
- package/dist/commands/chunk-US6X7JXC.js +120 -0
- package/dist/commands/chunk-UTBVTCQN.js +7401 -0
- package/dist/commands/chunk-UU6GCJGM.js +56 -0
- package/dist/commands/chunk-UWLLZQJB.js +110 -0
- package/dist/commands/chunk-UZAU6UI6.js +33 -0
- package/dist/commands/chunk-V4Z7G4UH.js +73 -0
- package/dist/commands/chunk-V5FD7DVV.js +48 -0
- package/dist/commands/chunk-V5OIPYA6.js +109 -0
- package/dist/commands/chunk-VCR77BHO.js +8 -0
- package/dist/commands/chunk-VD5674LW.js +127 -0
- package/dist/commands/chunk-VD72V5VX.js +230 -0
- package/dist/commands/chunk-VDGNXSP3.js +174 -0
- package/dist/commands/chunk-VFJYOAOQ.js +339 -0
- package/dist/commands/chunk-VGHSZLYQ.js +85 -0
- package/dist/commands/chunk-VHRNXWVP.js +28 -0
- package/dist/commands/chunk-VJE3RJAX.js +23 -0
- package/dist/commands/chunk-VJLZ3IQQ.js +151 -0
- package/dist/commands/chunk-VTLL6CKO.js +269 -0
- package/dist/commands/chunk-VW5SGE7A.js +18 -0
- package/dist/commands/chunk-VZCQZFPH.js +378 -0
- package/dist/commands/chunk-VZHC2I3T.js +1208 -0
- package/dist/commands/chunk-VZSJCFRT.js +44 -0
- package/dist/commands/chunk-W2IA2LV3.js +15 -0
- package/dist/commands/chunk-W32DIQEP.js +43 -0
- package/dist/commands/chunk-W3FX7FYN.js +84 -0
- package/dist/commands/chunk-W47I2KDY.js +47 -0
- package/dist/commands/chunk-W4J6YTFE.js +74 -0
- package/dist/commands/chunk-W4YH2DF3.js +58 -0
- package/dist/commands/chunk-W6MVQEMO.js +109 -0
- package/dist/commands/chunk-W6V4DWC5.js +70 -0
- package/dist/commands/chunk-WG6GYBRJ.js +271 -0
- package/dist/commands/chunk-WGULS5DA.js +129 -0
- package/dist/commands/chunk-WIE7VUBE.js +122 -0
- package/dist/commands/chunk-WJ4NEDNI.js +288 -0
- package/dist/commands/chunk-WL5JHB3I.js +12 -0
- package/dist/commands/chunk-WMMGXJXP.js +92 -0
- package/dist/commands/chunk-WN7NK3NY.js +24 -0
- package/dist/commands/chunk-WOFLW2LX.js +26 -0
- package/dist/commands/chunk-WPAQUMHC.js +28 -0
- package/dist/commands/chunk-WQ6FS544.js +35 -0
- package/dist/commands/chunk-WQJ7O3C3.js +229 -0
- package/dist/commands/chunk-WRX3MINT.js +60 -0
- package/dist/commands/chunk-WSOF74K4.js +30 -0
- package/dist/commands/chunk-WTRDWEUQ.js +533 -0
- package/dist/commands/chunk-WVR4RUFP.js +327 -0
- package/dist/commands/chunk-WW3TX742.js +122 -0
- package/dist/commands/chunk-WWC5L3AO.js +177 -0
- package/dist/commands/chunk-X5XYKDOD.js +7 -0
- package/dist/commands/chunk-X7PN54LZ.js +143 -0
- package/dist/commands/chunk-XBRD2BDL.js +74 -0
- package/dist/commands/chunk-XDF25GSU.js +536 -0
- package/dist/commands/chunk-XDQOWUVT.js +51 -0
- package/dist/commands/chunk-XFPEUYDV.js +67 -0
- package/dist/commands/chunk-XGMRAKSL.js +85 -0
- package/dist/commands/chunk-XH6BGVVP.js +1639 -0
- package/dist/commands/chunk-XMBRXCIE.js +89 -0
- package/dist/commands/chunk-XSKB6ZUA.js +123 -0
- package/dist/commands/chunk-XXNEY4B3.js +110 -0
- package/dist/commands/chunk-XYAK53TK.js +443 -0
- package/dist/commands/chunk-Y2RNUX4W.js +8 -0
- package/dist/commands/chunk-Y5ZW3KN5.js +58 -0
- package/dist/commands/chunk-YGDNUTTI.js +120 -0
- package/dist/commands/chunk-YIA6FC3K.js +78 -0
- package/dist/commands/chunk-YPNTORQD.js +121 -0
- package/dist/commands/chunk-YT342DRV.js +143 -0
- package/dist/commands/chunk-YVH2OLDS.js +104 -0
- package/dist/commands/chunk-Z4HYBFZD.js +1160 -0
- package/dist/commands/chunk-ZA3W73PF.js +192 -0
- package/dist/commands/chunk-ZAAHZY2A.js +19 -0
- package/dist/commands/chunk-ZAJD6T6E.js +38 -0
- package/dist/commands/chunk-ZBFNQUY7.js +12 -0
- package/dist/commands/chunk-ZDSDPKCD.js +88 -0
- package/dist/commands/chunk-ZECFKW7D.js +60 -0
- package/dist/commands/chunk-ZHZSZNE2.js +173 -0
- package/dist/commands/chunk-ZNX2LJCQ.js +29 -0
- package/dist/commands/chunk-ZQ3CKRMP.js +99 -0
- package/dist/commands/chunk-ZVAIIHBE.js +63 -0
- package/dist/commands/chunk-ZYGOZT4J.js +39 -0
- package/dist/commands/chunk-ZYIMQHCB.js +81 -0
- package/dist/commands/chunk-ZZAH3YQP.js +170 -0
- package/dist/commands/ci-timing-cli.js +76 -0
- package/dist/commands/clone-scan-cli.js +189 -0
- package/dist/commands/code-symbol-cli.js +185 -0
- package/dist/commands/codex-hook-adapter.js +357 -0
- package/dist/commands/command-derive.js +802 -0
- package/dist/commands/cost-audit-main.js +207 -0
- package/dist/commands/cost-main.js +28 -0
- package/dist/commands/cspell-cached.js +158 -0
- package/dist/commands/defect-origin-main.js +221 -0
- package/dist/commands/defect-report-main.js +288 -0
- package/dist/commands/delegation-cli.js +65 -0
- package/dist/commands/diff-summary-cli.js +147 -0
- package/dist/commands/disposition-cli.js +408 -0
- package/dist/commands/doctor.js +267 -0
- package/dist/commands/document-read-cli.js +39 -844
- package/dist/commands/document-section-main.js +26 -835
- package/dist/commands/dogfood-commit-cli.js +102 -0
- package/dist/commands/e2e-retry-check.js +79 -0
- package/dist/commands/edit-files-cli.js +147 -0
- package/dist/commands/effect-audit-cli.js +319 -0
- package/dist/commands/epic-audit-main.js +158 -0
- package/dist/commands/epic-bundle-main.js +199 -0
- package/dist/commands/epic-check.js +90 -0
- package/dist/commands/epic-main.js +222 -0
- package/dist/commands/epic-next-main.js +157 -0
- package/dist/commands/eval-run.js +838 -0
- package/dist/commands/fanout-cli.js +86 -0
- package/dist/commands/format-edited-cli.js +120 -0
- package/dist/commands/format.js +139 -0
- package/dist/commands/fresh-machine-cli.js +691 -0
- package/dist/commands/gh-usage-cli.js +224 -0
- package/dist/commands/git-followup-workflow.js +2012 -0
- package/dist/commands/git-gh-checks-failed-main.js +156 -0
- package/dist/commands/git-workflow.js +602 -0
- package/dist/commands/github-release-cli.js +253 -0
- package/dist/commands/hook-ledger-cli.js +416 -0
- package/dist/commands/init-main.js +98 -0
- package/dist/commands/inputs.json +2764 -0
- package/dist/commands/issue-ack-cli.js +106 -0
- package/dist/commands/issue-already-done-cli.js +305 -0
- package/dist/commands/issue-body-cli.js +184 -0
- package/dist/commands/issue-cite-main.js +162 -0
- package/dist/commands/issue-comment-main.js +72 -0
- package/dist/commands/issue-consolidate-cli.js +329 -0
- package/dist/commands/issue-file-main.js +419 -0
- package/dist/commands/issue-fold-existing-cli.js +506 -0
- package/dist/commands/issue-fold-main.js +113 -0
- package/dist/commands/issue-lint-main.js +126 -0
- package/dist/commands/issue-measured-cli.js +205 -0
- package/dist/commands/issue-plan-cli.js +352 -0
- package/dist/commands/issue-premise-unmet-cli.js +268 -0
- package/dist/commands/issue-priority-cli.js +184 -0
- package/dist/commands/issue-read-main.js +79 -0
- package/dist/commands/issue-release-class-cli.js +119 -0
- package/dist/commands/issue-release-main.js +71 -0
- package/dist/commands/issue-scout-main.js +203 -0
- package/dist/commands/issue-spill-main.js +564 -0
- package/dist/commands/issue-state-main.js +76 -0
- package/dist/commands/issue-tick-cli.js +112 -0
- package/dist/commands/josh-completion.js +153 -0
- package/dist/commands/lane-adopt-cli.js +275 -0
- package/dist/commands/lane-breakdown-cli.js +703 -0
- package/dist/commands/lane-cli.js +863 -0
- package/dist/commands/lane-launch-main.js +103 -0
- package/dist/commands/lane-limit-cli.js +286 -0
- package/dist/commands/lane-measure-cli.js +1797 -0
- package/dist/commands/lane-pause-cli.js +255 -0
- package/dist/commands/lane-plan-cli.js +322 -0
- package/dist/commands/lane-resolve-cli.js +300 -0
- package/dist/commands/lane-restart-cli.js +387 -0
- package/dist/commands/lane-why-cli.js +307 -0
- package/dist/commands/lane-withdraw-cli.js +191 -0
- package/dist/commands/latest-corepack.js +278 -0
- package/dist/commands/latest-if-required-cli.js +124 -0
- package/dist/commands/latest-lane-guard-main.js +16 -0
- package/dist/commands/latest-scope-main.js +38 -0
- package/dist/commands/latest-update.js +449 -0
- package/dist/commands/lines-command.js +121 -0
- package/dist/commands/lint-parallel-main.js +134 -0
- package/dist/commands/lint-related.js +565 -0
- package/dist/commands/lint-rule.js +305 -0
- package/dist/commands/lockfile-policy.js +107 -0
- package/dist/commands/main-merge-main.js +61 -0
- package/dist/commands/main-sync-main.js +60 -0
- package/dist/commands/managed-config-scope-cli.js +66 -0
- package/dist/commands/measure-rerun-cli.js +124 -0
- package/dist/commands/metrics-command.js +859 -0
- package/dist/commands/observation-depth-cli.js +109 -0
- package/dist/commands/observation-record-cli.js +87 -0
- package/dist/commands/observations-flush-cli.js +115 -0
- package/dist/commands/oracle-list-cli.js +73 -0
- package/dist/commands/overrides-check.js +112 -0
- package/dist/commands/package-scout-cli.js +496 -0
- package/dist/commands/pin-verify-cli.js +88 -0
- package/dist/commands/plan-consumers-main.js +49 -0
- package/dist/commands/plan-scaffold-cli.js +367 -0
- package/dist/commands/port-command.js +64 -0
- package/dist/commands/pr-classification-main.js +37 -0
- package/dist/commands/pre-commit-lint.js +163 -0
- package/dist/commands/pre-commit-type-check.js +210 -0
- package/dist/commands/pre-push-unit.js +271 -0
- package/dist/commands/pretool-guard-cli.js +205 -0
- package/dist/commands/prevent-main-commit.js +42 -0
- package/dist/commands/project-profile-cli.js +58 -0
- package/dist/commands/propagate.js +368 -0
- package/dist/commands/prose-stale-cli.js +128 -0
- package/dist/commands/publish-tag-cli.js +30 -0
- package/dist/commands/publishable-range-check.js +191 -0
- package/dist/commands/read-files-cli.js +81 -0
- package/dist/commands/read-set-cli.js +121 -1745
- package/dist/commands/reconcile-templates.js +135 -0
- package/dist/commands/refactor-scan-cli.js +175 -0
- package/dist/commands/release-cli.js +724 -0
- package/dist/commands/release-scope-main.js +81 -0
- package/dist/commands/rename-cli.js +432 -0
- package/dist/commands/repo-party-cli.js +58 -0
- package/dist/commands/report-lint-cli.js +124 -0
- package/dist/commands/report-template-cli.js +69 -0
- package/dist/commands/reserved-run.js +127 -0
- package/dist/commands/retrospective-cli.js +555 -0
- package/dist/commands/review-attest-cli.js +118 -0
- package/dist/commands/review-brief-main.js +247 -0
- package/dist/commands/review-findings-cli.js +114 -0
- package/dist/commands/review-pair-cli.js +366 -0
- package/dist/commands/review-record-main.js +222 -0
- package/dist/commands/review-round2-cli.js +349 -0
- package/dist/commands/review-stops-cli.js +149 -0
- package/dist/commands/review-submit-cli.js +610 -0
- package/dist/commands/rule-list.js +184 -0
- package/dist/commands/rule-value-cli.js +908 -0
- package/dist/commands/ruleset-check-cli.js +67 -0
- package/dist/commands/run-add-cli.js +273 -0
- package/dist/commands/run-board-main.js +272 -0
- package/dist/commands/run-carry-cli.js +641 -0
- package/dist/commands/run-chain-cli.js +537 -0
- package/dist/commands/run-cut-cli.js +709 -0
- package/dist/commands/run-ending-cli.js +169 -0
- package/dist/commands/run-entry-cli.js +1060 -0
- package/dist/commands/run-event-cli.js +298 -0
- package/dist/commands/run-handoff-cli.js +344 -0
- package/dist/commands/run-handoff-lanes-cli.js +233 -0
- package/dist/commands/run-hold-main.js +203 -0
- package/dist/commands/run-liveness-cli.js +190 -0
- package/dist/commands/run-merge-main.js +246 -0
- package/dist/commands/run-next-cli.js +240 -0
- package/dist/commands/run-park-cli.js +393 -0
- package/dist/commands/run-pause-cli.js +334 -0
- package/dist/commands/run-pickup-cli.js +196 -0
- package/dist/commands/run-prep-main.js +209 -21168
- package/dist/commands/run-prime-cli.js +281 -0
- package/dist/commands/run-progress-main.js +655 -0
- package/dist/commands/run-report-cli.js +376 -0
- package/dist/commands/run-review-cli.js +777 -0
- package/dist/commands/run-ship-cli.js +2615 -0
- package/dist/commands/run-ship-evidence-cli.js +288 -0
- package/dist/commands/run-ship-lap-W5T2VHFC.js +30 -0
- package/dist/commands/run-ship-wait-main.js +145 -0
- package/dist/commands/run-split-cli.js +525 -0
- package/dist/commands/run-stale-main.js +254 -0
- package/dist/commands/run-status-cli.js +216 -0
- package/dist/commands/run-step-cli.js +419 -27653
- package/dist/commands/run-tail-cli.js +119 -0
- package/dist/commands/run-tidy-main.js +402 -0
- package/dist/commands/run-wake-main.js +272 -0
- package/dist/commands/run-watcher-guard-cli.js +128 -0
- package/dist/commands/secretlint-scan.js +84 -0
- package/dist/commands/security-audit-main.js +151 -0
- package/dist/commands/security-audit-provision-main.js +52 -0
- package/dist/commands/selfcheck-cli.js +409 -0
- package/dist/commands/session-language-main.js +120 -0
- package/dist/commands/sonar-hotspots-cli.js +133 -0
- package/dist/commands/sonar-new-code-cli.js +143 -0
- package/dist/commands/split-assess-cli.js +138 -0
- package/dist/commands/split-child-recover-cli.js +168 -0
- package/dist/commands/start.js +707 -0
- package/dist/commands/stash-pop-main.js +26 -0
- package/dist/commands/stash-push-main.js +30 -0
- package/dist/commands/stop-guard.js +567 -0
- package/dist/commands/sync-main.js +57 -0
- package/dist/commands/telegram-test-main.js +64 -0
- package/dist/commands/test-declared.js +255 -0
- package/dist/commands/test-e2e-guard.js +200 -0
- package/dist/commands/test-pinned-main.js +189 -0
- package/dist/commands/test-reach-cli.js +111 -0
- package/dist/commands/test-red-main.js +46 -0
- package/dist/commands/test-related-ZT2AO62I.js +113 -0
- package/dist/commands/test-related-main.js +223 -0
- package/dist/commands/test-unit-guard-main.js +87 -0
- package/dist/commands/time-cli.js +356 -0
- package/dist/commands/time-density-cli.js +183 -0
- package/dist/commands/tree-status-cli.js +172 -0
- package/dist/commands/type-check-command.js +74 -0
- package/dist/commands/ui-routes-cli.js +135 -0
- package/dist/commands/ui-shot-cli.js +131 -0
- package/dist/commands/uninstall.js +424 -0
- package/dist/commands/unused-members-STULPRBU.js +331 -0
- package/dist/commands/unused-members-cli.js +54 -0
- package/dist/commands/upstream-interrupt-main.js +449 -0
- package/dist/commands/usage-tee-cli.js +60 -0
- package/dist/commands/verification-gate.js +808 -0
- package/dist/commands/version-check.js +497 -0
- package/dist/hooks/audit-provision.js +20 -9
- package/dist/hooks/{chunk-UJ3FPMMM.js → chunk-4YXV2REH.js} +444 -141
- package/dist/hooks/chunk-6RR6JZSB.js +12367 -0
- package/dist/hooks/chunk-6YGMIODI.js +86 -0
- package/dist/hooks/chunk-CICKRHTB.js +7586 -0
- package/dist/hooks/chunk-CY3ADSDR.js +28580 -0
- package/dist/hooks/chunk-FOW4B7OQ.js +1795 -0
- package/dist/hooks/chunk-LKQBEKBI.js +232 -0
- package/dist/hooks/chunk-LRD2ERRI.js +299 -0
- package/dist/hooks/chunk-LWD43Z3C.js +6793 -0
- package/dist/hooks/chunk-NUPVO7RI.js +3054 -0
- package/dist/hooks/chunk-P7BPAU26.js +1082 -0
- package/dist/hooks/chunk-RQXECHAS.js +309 -0
- package/dist/hooks/chunk-SAAPRHTK.js +43 -0
- package/dist/hooks/chunk-U3ON2GBN.js +12 -0
- package/dist/hooks/{chunk-CQD4LJE6.js → chunk-UU4PTPEZ.js} +3143 -1257
- package/dist/hooks/chunk-YEURBB4L.js +32 -0
- package/dist/hooks/codex-hook-adapter.js +61 -25
- package/dist/hooks/daemon.js +67304 -0
- package/dist/hooks/format-edited.js +15 -5
- package/dist/hooks/inputs.json +584 -401
- package/dist/hooks/pretool-guard.js +11 -7
- package/dist/hooks/ready.js +300 -0
- package/dist/hooks/run-ship-lap-VCEOUHQI.js +8 -0
- package/dist/hooks/session-lang.js +226 -121
- package/dist/hooks/stop-guard.js +9188 -4508
- package/dist/inputs.json +169 -0
- package/dist/josh.js +9617 -6711
- package/dist/self-sync-guard/index.js +68 -14
- package/dist/version/index.js +642 -85
- package/eslint/base.js +36 -11
- package/eslint/config-fingerprint.js +164 -21
- package/eslint/rules/code-quality.js +6 -0
- package/eslint/rules/comment-why-only.js +40 -16
- package/eslint/rules/english-only-prose.js +10 -3
- package/eslint/rules/import.js +3 -17
- package/eslint/rules/test-helper-bans.js +34 -0
- package/eslint/untyped-environment.js +21 -0
- package/eslint/untyped.js +60 -0
- package/lefthook/base.yml +4 -5
- package/package.json +15 -13
- package/pnpm-workspace.yaml +15 -0
- package/ports/index.js +8 -15
- package/prompts/coding-standards.md +4 -43
- package/prompts/collaboration-workflow/file-edits.md +10 -10
- package/prompts/collaboration-workflow/gh-rest.md +14 -7
- package/prompts/collaboration-workflow/issue-template.en.md +125 -0
- package/prompts/collaboration-workflow/issue-template.md +49 -56
- package/prompts/collaboration-workflow/lane-instructions.md +1 -0
- package/prompts/collaboration-workflow/measurement.md +13 -17
- package/prompts/collaboration-workflow/operating-rules.md +10 -7
- package/prompts/collaboration-workflow/output-bounds.md +3 -3
- package/prompts/collaboration-workflow/overview.md +8 -17
- package/prompts/collaboration-workflow/plan-comment.md +1 -1
- package/prompts/collaboration-workflow/principles.md +17 -19
- package/prompts/collaboration-workflow/report-format.md +6 -5
- package/prompts/collaboration-workflow/residency.md +1 -0
- package/prompts/collaboration-workflow/rule-delivery.md +4 -12
- package/prompts/collaboration-workflow/shell-body.md +7 -7
- package/prompts/collaboration-workflow/turn-batching.md +2 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +8 -8
- package/prompts/collaboration-workflow/wip-cap.md +3 -3
- package/prompts/refactoring.md +4 -3
- package/prompts/review-rubric.md +8 -21
- package/prompts/review.md +52 -80
- package/prompts/sonar-hotspot-handling.md +1 -1
- package/prompts/testing-guide.md +15 -2
- package/scripts/agent/agent-argv.ts +11 -4
- package/scripts/agent/agent-consultation-model.ts +47 -0
- package/scripts/agent/agent-event.ts +11 -2
- package/scripts/agent/agent-launch-environment.ts +6 -57
- package/scripts/agent/agent-model-alias.ts +19 -0
- package/scripts/agent/agent-profile-schema.ts +98 -0
- package/scripts/agent/agent-role-profile.ts +105 -82
- package/scripts/agent/agent-safe-text.ts +2 -2
- package/scripts/agent/agent-session-role.ts +25 -3
- package/scripts/agent/answer-judge.ts +174 -0
- package/scripts/agent/answer-verdict.ts +122 -0
- package/scripts/agent/claude-agent-argv.ts +12 -6
- package/scripts/agent/codex-agent-argv.ts +17 -143
- package/scripts/agent/codex-home-source.ts +1 -1
- package/scripts/agent/codex-hooks.ts +29 -6
- package/scripts/agent/judgment-agent-argv.ts +49 -0
- package/scripts/agent/lane-instructions.ts +4 -1
- package/scripts/auto-ok/auto-ok-author.ts +14 -3
- package/scripts/auto-ok/auto-ok-cli.ts +20 -12
- package/scripts/auto-ok/auto-ok-judge-cli.ts +7 -14
- package/scripts/auto-ok/auto-ok-judge-read.ts +3 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +18 -16
- package/scripts/backlog/backlog-arrival-added.ts +47 -11
- package/scripts/backlog/backlog-arrival.ts +90 -23
- package/scripts/backlog/backlog-auto-triage.ts +130 -0
- package/scripts/backlog/backlog-budget-cli.ts +2 -1
- package/scripts/backlog/backlog-budget.ts +31 -5
- package/scripts/backlog/backlog-defect-priority.ts +32 -19
- package/scripts/backlog/backlog-drain-flush.ts +22 -0
- package/scripts/backlog/backlog-drive-adopt.ts +2 -2
- package/scripts/backlog/backlog-drive-after-merge.ts +123 -0
- package/scripts/backlog/backlog-drive-args.ts +60 -7
- package/scripts/backlog/backlog-drive-cli.ts +69 -64
- package/scripts/backlog/backlog-drive-collect.ts +46 -0
- package/scripts/backlog/backlog-drive-epic.ts +1 -1
- package/scripts/backlog/backlog-drive-hold.ts +32 -8
- package/scripts/backlog/backlog-drive-idle.ts +21 -10
- package/scripts/backlog/backlog-drive-launch-pass.ts +79 -23
- package/scripts/backlog/backlog-drive-launch.ts +73 -7
- package/scripts/backlog/backlog-drive-listing.ts +59 -0
- package/scripts/backlog/backlog-drive-memory.ts +4 -5
- package/scripts/backlog/backlog-drive-named-offer.ts +112 -22
- package/scripts/backlog/backlog-drive-named.ts +11 -4
- package/scripts/backlog/backlog-drive-offer-argv.ts +10 -2
- package/scripts/backlog/backlog-drive-park-triage.ts +57 -0
- package/scripts/backlog/backlog-drive-paused.ts +2 -1
- package/scripts/backlog/backlog-drive-rate-limit.ts +29 -0
- package/scripts/backlog/backlog-drive-rate.ts +73 -0
- package/scripts/backlog/backlog-drive-record.ts +58 -0
- package/scripts/backlog/backlog-drive-restore.ts +38 -8
- package/scripts/backlog/backlog-drive-retrospective-unit.ts +80 -0
- package/scripts/backlog/backlog-drive-retrospective.ts +35 -1
- package/scripts/backlog/backlog-drive-retry.ts +85 -0
- package/scripts/backlog/backlog-drive-seats.ts +4 -7
- package/scripts/backlog/backlog-drive-split-unit.ts +108 -0
- package/scripts/backlog/backlog-drive-stalled-retry.ts +194 -0
- package/scripts/backlog/backlog-drive-state.ts +28 -0
- package/scripts/backlog/backlog-drive-tick.ts +77 -0
- package/scripts/backlog/backlog-drive-token-handling.ts +2 -2
- package/scripts/backlog/backlog-drive-trace.ts +45 -0
- package/scripts/backlog/backlog-drive-unit.ts +54 -0
- package/scripts/backlog/backlog-drive-unread.ts +1 -1
- package/scripts/backlog/backlog-drive.ts +142 -99
- package/scripts/backlog/backlog-gate-scope.ts +15 -3
- package/scripts/backlog/backlog-hold-codes.ts +23 -0
- package/scripts/backlog/backlog-hold-text.ts +107 -0
- package/scripts/backlog/backlog-measure-close.ts +61 -31
- package/scripts/backlog/backlog-named.ts +1 -1
- package/scripts/backlog/backlog-next-offer.ts +138 -0
- package/scripts/backlog/backlog-next-report.ts +221 -0
- package/scripts/backlog/backlog-next-shared.ts +22 -4
- package/scripts/backlog/backlog-next-size.ts +108 -0
- package/scripts/backlog/backlog-next.ts +52 -187
- package/scripts/backlog/backlog-occupied.ts +7 -7
- package/scripts/backlog/backlog-offer-cli.ts +13 -2
- package/scripts/backlog/backlog-offer-timing.ts +141 -0
- package/scripts/backlog/backlog-offer.ts +26 -6
- package/scripts/backlog/backlog-overlap.ts +7 -1
- package/scripts/backlog/backlog-plan-cli.ts +27 -3
- package/scripts/backlog/backlog-plan-comment.ts +36 -14
- package/scripts/backlog/backlog-plan-words.ts +69 -0
- package/scripts/backlog/backlog-plan.ts +63 -46
- package/scripts/backlog/backlog-pool.ts +42 -13
- package/scripts/backlog/backlog-preflight.ts +67 -0
- package/scripts/backlog/backlog-ready.ts +7 -69
- package/scripts/backlog/backlog-resumable.ts +65 -0
- package/scripts/backlog/backlog-resume-reads.ts +119 -0
- package/scripts/backlog/backlog-stalled-detect.ts +4 -3
- package/scripts/backlog/backlog-stalled.ts +3 -2
- package/scripts/backlog/backlog-triage-adopt.ts +239 -0
- package/scripts/backlog/backlog-triage-approval.ts +94 -0
- package/scripts/backlog/backlog-triage-cli.ts +270 -0
- package/scripts/backlog/backlog-triage-decision.ts +49 -0
- package/scripts/backlog/backlog-triage-park.ts +53 -0
- package/scripts/backlog/backlog-triage-pass.ts +113 -0
- package/scripts/backlog/backlog-triage-unblock.ts +68 -0
- package/scripts/backlog/backlog-wait-cause.ts +76 -16
- package/scripts/backlog/backlog-yield-cap.ts +108 -0
- package/scripts/backlog/backlogrun-args.ts +45 -16
- package/scripts/backlog/backlogrun-cli.ts +82 -18
- package/scripts/backlog/backlogrun-launch.ts +12 -4
- package/scripts/backlog/backlogrun-replace.ts +44 -4
- package/scripts/build/build-bin.ts +25 -2
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +27 -19
- package/scripts/build/build-hooks.ts +117 -22
- package/scripts/build/hook-bundle-stamp.ts +15 -5
- package/scripts/build/local-bin.ts +27 -1
- package/scripts/build/source-location.ts +82 -0
- package/scripts/ci/ci-timing-cli.ts +73 -0
- package/scripts/ci/ci-timing-table.ts +84 -0
- package/scripts/ci/ci-timing.ts +104 -0
- package/scripts/ci/composite-actions.ts +1 -1
- package/scripts/ci/pr-classification.ts +89 -11
- package/scripts/code/code-symbol-cli.ts +121 -0
- package/scripts/code/code-symbol.ts +127 -0
- package/scripts/config-merge/patch-json-key.ts +4 -7
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +4 -7
- package/scripts/cost-runtime/cost-pricing.ts +2 -2
- package/scripts/cost-runtime/cost-tokens.ts +7 -6
- package/scripts/delegation/delegation-policy.ts +2 -2
- package/scripts/delegation/duplicate-read-guard.ts +41 -28
- package/scripts/delegation/investigation-guard.ts +13 -5
- package/scripts/delegation/investigation-reads.ts +52 -34
- package/scripts/delegation/large-read-guard.ts +150 -0
- package/scripts/discovery/git-directory.ts +61 -0
- package/scripts/discovery/pin-verify-cli.ts +115 -0
- package/scripts/discovery/repo-discovery.ts +10 -58
- package/scripts/discovery/repo-party.ts +1 -0
- package/scripts/document/backlogrun-parent-read-set.ts +37 -6
- package/scripts/document/capped-print.ts +3 -3
- package/scripts/document/command-reference-line-budget.ts +4 -1
- package/scripts/document/document-byte-budget.ts +34 -16
- package/scripts/document/document-byte-check.ts +1 -1
- package/scripts/document/document-reachability.ts +4 -3
- package/scripts/document/document-scan.ts +2 -5
- package/scripts/document/document-section-cli.ts +13 -1
- package/scripts/document/edit-files-cli.ts +3 -7
- package/scripts/document/entry-read-budget.ts +12 -4
- package/scripts/document/entry-read-set.ts +9 -2
- package/scripts/document/issue-citation-budget.ts +3 -3
- package/scripts/document/lane-child-read-set.ts +21 -29
- package/scripts/document/read-set-cli.ts +17 -10
- package/scripts/document/read-set-point-of-use.ts +13 -9
- package/scripts/document/read-set-trim.ts +42 -2
- package/scripts/epic/epic-audit-checks.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +19 -21
- package/scripts/epic/epic-audit-main.ts +17 -0
- package/scripts/epic/epic-audit-orphans.ts +1 -1
- package/scripts/epic/epic-audit.ts +6 -3
- package/scripts/epic/epic-blocked-by.ts +198 -0
- package/scripts/epic/epic-body.ts +6 -6
- package/scripts/epic/epic-bundle-apply.ts +41 -10
- package/scripts/epic/epic-bundle-cli.ts +40 -99
- package/scripts/epic/epic-bundle-evidence.ts +2 -2
- package/scripts/epic/epic-bundle-format.ts +21 -7
- package/scripts/epic/epic-bundle-recommend.ts +56 -0
- package/scripts/epic/epic-bundle-referenced.ts +42 -17
- package/scripts/epic/epic-bundle.ts +31 -4
- package/scripts/epic/epic-busy.ts +11 -9
- package/scripts/epic/epic-chains.ts +59 -23
- package/scripts/epic/epic-child-source.ts +111 -0
- package/scripts/epic/epic-cli-untrack.ts +38 -0
- package/scripts/epic/epic-cli.ts +26 -7
- package/scripts/epic/epic-close-comment.ts +4 -2
- package/scripts/epic/epic-close.ts +25 -11
- package/scripts/epic/epic-decide.ts +39 -3
- package/scripts/epic/epic-fetch.ts +116 -24
- package/scripts/epic/epic-graph.ts +1 -0
- package/scripts/epic/epic-label-age.ts +55 -13
- package/scripts/epic/epic-lane-occupancy.ts +75 -0
- package/scripts/epic/epic-lane-offer.ts +49 -13
- package/scripts/epic/epic-main.ts +23 -0
- package/scripts/epic/epic-next-main.ts +2 -4
- package/scripts/epic/epic-next-read.ts +12 -3
- package/scripts/epic/epic-next-views.ts +1 -1
- package/scripts/epic/epic-notify.ts +72 -0
- package/scripts/epic/epic-parse.ts +1 -1
- package/scripts/epic/epic-rank.ts +6 -2
- package/scripts/epic/epic-reference.ts +1 -1
- package/scripts/epic/epic-run.ts +14 -1
- package/scripts/epic/epic-shape.ts +2 -2
- package/scripts/epic/epic-solo-stale.ts +1 -1
- package/scripts/epic/epic-solo.ts +11 -5
- package/scripts/epic/epic-split-reach.ts +107 -0
- package/scripts/epic/epic-triage.ts +29 -5
- package/scripts/epic/epic-untrack-plan.ts +75 -0
- package/scripts/epic/epic-untrack.ts +42 -0
- package/scripts/epic/epic.ts +65 -31
- package/scripts/followup/followup-check-report.ts +70 -0
- package/scripts/followup/followup-ci-path.ts +27 -7
- package/scripts/followup/followup-coderabbit-retrigger.ts +61 -23
- package/scripts/followup/followup-failed-tests.ts +4 -0
- package/scripts/followup/followup-human-merge.ts +109 -0
- package/scripts/followup/followup-job-needs.ts +92 -14
- package/scripts/followup/followup-job-rerun.ts +162 -43
- package/scripts/followup/followup-run-rerun.ts +183 -0
- package/scripts/followup/followup-section.ts +30 -0
- package/scripts/followup/followup-ship-environment.ts +17 -0
- package/scripts/followup/git-followup-finish.ts +52 -1
- package/scripts/followup/git-followup-flush.ts +6 -8
- package/scripts/followup/git-followup-stages.ts +3 -0
- package/scripts/followup/git-followup-workflow.ts +29 -9
- package/scripts/followup/git-pr-followup-checks.ts +65 -8
- package/scripts/followup/git-pr-followup-wrapup.ts +11 -9
- package/scripts/followup/git-pr-followup.ts +18 -12
- package/scripts/fresh-machine/fresh-machine-cli.ts +2 -1
- package/scripts/fresh-machine/fresh-machine-image.ts +3 -1
- package/scripts/fresh-machine/fresh-machine-patterns.ts +25 -4
- package/scripts/fresh-machine/fresh-machine-registry.ts +85 -0
- package/scripts/fresh-machine/fresh-machine-script.ts +3 -1
- package/scripts/fresh-machine/fresh-machine-spec.ts +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +0 -1
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +0 -1
- package/scripts/gate/busy-average.ts +26 -3
- package/scripts/gate/change-scope-action.ts +101 -0
- package/scripts/gate/check-inputs.ts +1 -1
- package/scripts/gate/check-related-order.ts +65 -0
- package/scripts/gate/check-related-pinned.ts +3 -2
- package/scripts/gate/check-related-reuse.ts +34 -6
- package/scripts/gate/check-related-section.ts +8 -1
- package/scripts/gate/check-related-unplanned.ts +11 -1
- package/scripts/gate/check-related.ts +122 -34
- package/scripts/gate/check-reuse.ts +63 -31
- package/scripts/gate/command-memory.ts +10 -4
- package/scripts/gate/core-admission.ts +34 -8
- package/scripts/gate/core-budget.ts +55 -65
- package/scripts/gate/core-priority.ts +28 -0
- package/scripts/gate/core-reservation.ts +85 -0
- package/scripts/gate/core-wait.ts +90 -19
- package/scripts/gate/core-weights.ts +25 -16
- package/scripts/gate/gate-checks.ts +196 -0
- package/scripts/gate/gate-labels.ts +4 -0
- package/scripts/gate/gate-plan.ts +34 -164
- package/scripts/gate/gate-report.ts +14 -10
- package/scripts/gate/gate-run-steps.ts +38 -6
- package/scripts/gate/gate-skip.ts +1 -1
- package/scripts/gate/gate-static-group.ts +35 -6
- package/scripts/gate/machine-capacity.ts +20 -25
- package/scripts/gate/metrics-totals.ts +30 -4
- package/scripts/gate/path-glob.ts +15 -0
- package/scripts/gate/pre-commit-type-check.ts +2 -6
- package/scripts/gate/project-checks.ts +33 -2
- package/scripts/gate/project-gate-steps.ts +206 -0
- package/scripts/gate/project-step-reuse.ts +69 -0
- package/scripts/gate/scoped-green.ts +10 -4
- package/scripts/gate/since-green.ts +76 -20
- package/scripts/gate/tree-verdict.ts +111 -0
- package/scripts/gate/tsc-arguments.ts +9 -0
- package/scripts/gate/type-check-command.ts +4 -7
- package/scripts/gate/type-check-step.ts +4 -1
- package/scripts/gate/type-program-serial.ts +52 -0
- package/scripts/gate/verification-gate.ts +47 -17
- package/scripts/gate/verification-inputs.ts +46 -11
- package/scripts/gate/whole-tree-reuse.ts +24 -0
- package/scripts/gh/gh-author-association.ts +40 -14
- package/scripts/gh/gh-call-kind.ts +97 -0
- package/scripts/gh/gh-comment-input.ts +26 -0
- package/scripts/gh/gh-core-rate-limit.ts +151 -0
- package/scripts/gh/gh-permission-cache.ts +44 -0
- package/scripts/gh/gh-request-tally.ts +143 -0
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/gh-usage-cli.ts +71 -0
- package/scripts/gh/gh-usage-event.ts +82 -0
- package/scripts/gh/gh-usage-log.ts +48 -0
- package/scripts/gh/gh-usage-tally.ts +209 -0
- package/scripts/gh/git-gh-api-path.ts +17 -2
- package/scripts/gh/git-gh-blocked-by-graphql.ts +107 -0
- package/scripts/gh/git-gh-checks-failed-main.ts +24 -0
- package/scripts/gh/git-gh-checks-failed.ts +141 -0
- package/scripts/gh/git-gh-code-scanning.ts +81 -0
- package/scripts/gh/git-gh-conditional.ts +36 -4
- package/scripts/gh/git-gh-etag-read.ts +107 -0
- package/scripts/gh/git-gh-exec.ts +74 -25
- package/scripts/gh/git-gh-failure.ts +16 -2
- package/scripts/gh/git-gh-helpers.ts +2 -6
- package/scripts/gh/git-gh-issue-alias-graphql.ts +113 -0
- package/scripts/gh/git-gh-issue-batch-graphql.ts +155 -0
- package/scripts/gh/git-gh-issue-batch-read.ts +66 -0
- package/scripts/gh/git-gh-issue-graphql.ts +229 -0
- package/scripts/gh/git-gh-issue-list-graphql.ts +103 -0
- package/scripts/gh/git-gh-issue-list.ts +126 -34
- package/scripts/gh/git-gh-issue-memo.ts +53 -0
- package/scripts/gh/git-gh-issue-read.ts +87 -14
- package/scripts/gh/git-gh-issue-rest.ts +5 -8
- package/scripts/gh/git-gh-issue-write.ts +31 -10
- package/scripts/gh/git-gh-issue.ts +25 -4
- package/scripts/gh/git-gh-poll-read.ts +43 -18
- package/scripts/gh/git-gh-pr-auto-merge.ts +1 -4
- package/scripts/gh/git-gh-pr-graphql-snapshot.ts +369 -0
- package/scripts/gh/git-gh-pr-graphql-state.ts +21 -26
- package/scripts/gh/git-gh-pr-read.ts +4 -1
- package/scripts/gh/git-gh-pr-rollup.ts +10 -3
- package/scripts/gh/git-gh-pr-snapshot.ts +78 -22
- package/scripts/gh/git-gh-pr.ts +51 -17
- package/scripts/gh/git-gh-rate-limit.ts +91 -0
- package/scripts/gh/git-gh-repo.ts +37 -20
- package/scripts/gh/git-gh-retry.ts +60 -24
- package/scripts/gh/git-gh-spawn-width.ts +6 -0
- package/scripts/gh/git-gh-transport.ts +213 -0
- package/scripts/gh/git-pr-ai-review.ts +8 -5
- package/scripts/gh/git-pr-checks-eval.ts +16 -17
- package/scripts/gh/git-pr-checks-gate.ts +129 -0
- package/scripts/gh/git-pr-checks-missing.ts +165 -0
- package/scripts/gh/git-pr-checks-parse.ts +4 -0
- package/scripts/gh/git-pr-checks-watch.ts +22 -6
- package/scripts/gh/git-pr-checks.ts +105 -76
- package/scripts/gh/git-pr-merge-checked.ts +26 -12
- package/scripts/gh/git-pr.ts +9 -23
- package/scripts/git/base-tree.ts +18 -10
- package/scripts/git/changed-paths-sync.ts +4 -12
- package/scripts/git/changed-paths.ts +31 -6
- package/scripts/git/git-command.ts +9 -1
- package/scripts/git/git-common-directory.ts +17 -3
- package/scripts/git/git-issue.ts +3 -3
- package/scripts/git/git-merge-conflicts.ts +8 -3
- package/scripts/git/git-path-quoting.ts +54 -0
- package/scripts/git/git-push-transport.ts +8 -10
- package/scripts/git/git-schemas.ts +1 -0
- package/scripts/git/git-spawn-sync.ts +11 -7
- package/scripts/git/git-spawn.ts +1 -1
- package/scripts/git/git-ssh-keepalive.ts +3 -3
- package/scripts/git/git-workflow.ts +32 -9
- package/scripts/git/git-worktree.ts +12 -4
- package/scripts/git/main-merge.ts +3 -36
- package/scripts/git/main-sync.ts +2 -13
- package/scripts/git/repository-lock.ts +8 -7
- package/scripts/git/stash/git-stash.ts +38 -5
- package/scripts/git/stash/stash-pop-cli.ts +43 -6
- package/scripts/hooks/bash-revert.ts +253 -0
- package/scripts/hooks/batch-guard.ts +28 -16
- package/scripts/hooks/check-commit-message.ts +5 -7
- package/scripts/hooks/codex-hook-adapter.ts +58 -13
- package/scripts/hooks/direct-gh-usage.ts +130 -0
- package/scripts/hooks/edited-cspell.ts +8 -11
- package/scripts/hooks/fixtures/claude-Agent.json +16 -0
- package/scripts/hooks/fixtures/claude-Bash.json +12 -0
- package/scripts/hooks/fixtures/claude-Edit.json +17 -0
- package/scripts/hooks/fixtures/claude-Read.json +12 -0
- package/scripts/hooks/fixtures/claude-Write.json +12 -0
- package/scripts/hooks/fixtures/codex-Bash-cat.json +12 -0
- package/scripts/hooks/fixtures/codex-Bash.json +12 -0
- package/scripts/hooks/fixtures/codex-apply_patch.json +14 -0
- package/scripts/hooks/format-edited-cli.ts +8 -1
- package/scripts/hooks/format-edited-file.ts +33 -27
- package/scripts/hooks/hook-context.ts +22 -0
- package/scripts/hooks/hook-demoted.ts +84 -0
- package/scripts/hooks/hook-lap.ts +61 -0
- package/scripts/hooks/hook-ledger-cli.ts +246 -0
- package/scripts/hooks/hook-ledger-demote.ts +58 -0
- package/scripts/hooks/hook-ledger-issues.ts +61 -0
- package/scripts/hooks/hook-ledger-read.ts +97 -0
- package/scripts/hooks/hook-ledger.ts +163 -0
- package/scripts/hooks/implementation-authority.ts +48 -0
- package/scripts/hooks/implementation-shell-deny.ts +344 -0
- package/scripts/hooks/implementation-shell-nested.ts +148 -0
- package/scripts/hooks/implementation-shell.ts +253 -0
- package/scripts/hooks/lane-plan-guard.ts +1 -1
- package/scripts/hooks/pre-commit-lint.ts +10 -5
- package/scripts/hooks/pre-push-unit.ts +49 -13
- package/scripts/hooks/pretool-guard.ts +184 -70
- package/scripts/hooks/reserved-run.ts +13 -13
- package/scripts/hooks/run-hook.sh +84 -30
- package/scripts/hooks/step-zero-notice.ts +52 -14
- package/scripts/hooks/stop-actions.ts +10 -3
- package/scripts/hooks/stop-guard.ts +29 -8
- package/scripts/init/claude-kit-only-settings.ts +1 -1
- package/scripts/init/hook-command-rewrite.ts +90 -65
- package/scripts/init/hook-launch.ts +27 -22
- package/scripts/init/init-ai-copy.ts +14 -4
- package/scripts/init/init-bootstrap.ts +40 -8
- package/scripts/init/init-copy-content.ts +2 -2
- package/scripts/init/init-install.ts +9 -1
- package/scripts/init/init-logic-deploy-vps.ts +5 -3
- package/scripts/init/init-logic-workspace.ts +16 -1
- package/scripts/init/init-logic.ts +11 -18
- package/scripts/init/npm-publish-files.ts +25 -0
- package/scripts/init/start-setup-pr.ts +1 -1
- package/scripts/init/tsconfig-preset-migration.ts +5 -10
- package/scripts/issue/aggregation-split.ts +4 -2
- package/scripts/issue/already-done-citation.ts +103 -0
- package/scripts/issue/baseline-measure.ts +2 -1
- package/scripts/issue/behavior-change-lint.ts +5 -4
- package/scripts/issue/defect-origin-line.ts +11 -10
- package/scripts/issue/defect-origin.ts +4 -3
- package/scripts/issue/defect-rate.ts +2 -1
- package/scripts/issue/defect-report-format.ts +1 -1
- package/scripts/issue/effect-audit.ts +12 -11
- package/scripts/issue/enforcement-lint.ts +48 -0
- package/scripts/issue/expected-effect-lint.ts +6 -5
- package/scripts/issue/figure-source-lint.ts +59 -0
- package/scripts/issue/git-next-issues.ts +15 -17
- package/scripts/issue/issue-already-done-cli.ts +24 -4
- package/scripts/issue/issue-auto-ok.ts +23 -6
- package/scripts/issue/issue-body-cli.ts +75 -0
- package/scripts/issue/issue-body-keys.ts +223 -0
- package/scripts/issue/issue-body-or-comment.ts +1 -1
- package/scripts/issue/issue-bug-label.ts +5 -2
- package/scripts/issue/issue-cap-files.ts +111 -0
- package/scripts/issue/issue-cite-cli.ts +2 -2
- package/scripts/issue/issue-cite.ts +20 -3
- package/scripts/issue/issue-classification.ts +66 -7
- package/scripts/issue/issue-closing-pr.ts +51 -16
- package/scripts/issue/issue-consolidate-cli.ts +81 -0
- package/scripts/issue/issue-consolidate.ts +246 -0
- package/scripts/issue/issue-declared-size.ts +21 -0
- package/scripts/issue/issue-evidence-exit.ts +6 -3
- package/scripts/issue/issue-file-batch-entries.ts +107 -0
- package/scripts/issue/issue-file-batch.ts +206 -0
- package/scripts/issue/issue-file-cli.ts +147 -208
- package/scripts/issue/issue-file-fold.ts +4 -8
- package/scripts/issue/issue-file-interrupt.ts +68 -9
- package/scripts/issue/issue-file-lane-hint.ts +3 -2
- package/scripts/issue/issue-file-main.ts +17 -0
- package/scripts/issue/issue-file-pass.ts +242 -0
- package/scripts/issue/issue-file.ts +24 -5
- package/scripts/issue/issue-fold-apply.ts +102 -0
- package/scripts/issue/issue-fold-existing-cli.ts +226 -19
- package/scripts/issue/issue-human-stops.ts +102 -0
- package/scripts/issue/issue-labels.ts +14 -3
- package/scripts/issue/issue-lint-cli.ts +20 -6
- package/scripts/issue/issue-lint.ts +4 -6
- package/scripts/issue/issue-merged.ts +75 -9
- package/scripts/issue/issue-not-before.ts +34 -4
- package/scripts/issue/issue-number-shape.ts +8 -0
- package/scripts/issue/issue-plan-cli.ts +33 -5
- package/scripts/issue/issue-plan-notify.ts +100 -0
- package/scripts/issue/issue-premise-unmet-cli.ts +110 -0
- package/scripts/issue/issue-priority-cli.ts +103 -16
- package/scripts/issue/issue-priority-instructed.ts +55 -0
- package/scripts/issue/issue-priority-raise.ts +70 -12
- package/scripts/issue/issue-priority.ts +56 -16
- package/scripts/issue/issue-rank.ts +48 -15
- package/scripts/issue/issue-read-cli.ts +66 -33
- package/scripts/issue/issue-read.ts +20 -5
- package/scripts/issue/issue-release-class-cli.ts +79 -0
- package/scripts/issue/issue-report-failures.ts +14 -5
- package/scripts/issue/issue-run-hold.ts +13 -0
- package/scripts/issue/issue-run-verdict.ts +68 -0
- package/scripts/issue/issue-sample-gate.ts +18 -7
- package/scripts/issue/issue-sample-required.ts +20 -3
- package/scripts/issue/issue-sample-source.ts +2 -1
- package/scripts/issue/issue-scout-cli.ts +34 -18
- package/scripts/issue/issue-scout.ts +25 -4
- package/scripts/issue/issue-search.ts +3 -0
- package/scripts/issue/issue-sources.ts +98 -0
- package/scripts/issue/issue-spill-cli.ts +292 -0
- package/scripts/issue/issue-spill-main.ts +11 -0
- package/scripts/issue/issue-spill.ts +193 -0
- package/scripts/issue/issue-state-cli.ts +9 -17
- package/scripts/issue/issue-template-section.ts +8 -3
- package/scripts/issue/issue-tick-cli.ts +59 -0
- package/scripts/issue/issue-watch-diff.ts +22 -7
- package/scripts/issue/issue-watch-hook.ts +11 -9
- package/scripts/issue/issue-watch.ts +25 -5
- package/scripts/issue/issue-wip.ts +44 -9
- package/scripts/issue/markdown-section.ts +66 -10
- package/scripts/issue/measure-declaration.ts +70 -13
- package/scripts/issue/measure-rerun-cli.ts +9 -8
- package/scripts/issue/measure-twin.ts +37 -0
- package/scripts/issue/reproduction-measure.ts +2 -1
- package/scripts/issue/session-cite.ts +1 -1
- package/scripts/issue/size-estimate.ts +317 -22
- package/scripts/issue/trusted-measure-source.ts +43 -0
- package/scripts/issue/trusted-measure.ts +79 -35
- package/scripts/issue/upstream-interrupt-cli.ts +280 -0
- package/scripts/issue/upstream-interrupt-main.ts +11 -0
- package/scripts/josh/agent-session-environment.ts +19 -1
- package/scripts/josh/cli-body.ts +46 -9
- package/scripts/josh/command-usage.ts +3 -0
- package/scripts/josh/durable-state-migrate.ts +11 -4
- package/scripts/josh/durable-state-root.ts +60 -0
- package/scripts/josh/durable-state.ts +9 -44
- package/scripts/josh/hook-decision.ts +55 -113
- package/scripts/josh/hook-envelope.ts +62 -0
- package/scripts/josh/hook-payload-capture.ts +78 -0
- package/scripts/josh/hook-tool-payload.ts +15 -0
- package/scripts/josh/josh-aliases.ts +7 -0
- package/scripts/josh/josh-command-map.ts +15 -0
- package/scripts/josh/josh-command-types.ts +28 -4
- package/scripts/josh/josh-commands-agent-hooks.ts +39 -7
- package/scripts/josh/josh-commands-ai.ts +420 -9
- package/scripts/josh/josh-commands-backlog.ts +79 -11
- package/scripts/josh/josh-commands-clone.ts +2 -5
- package/scripts/josh/josh-commands-development.ts +25 -8
- package/scripts/josh/josh-commands-document.ts +22 -10
- package/scripts/josh/josh-commands-epic.ts +30 -11
- package/scripts/josh/josh-commands-hooks.ts +0 -1
- package/scripts/josh/josh-commands-issue-write.ts +190 -18
- package/scripts/josh/josh-commands-issue.ts +57 -17
- package/scripts/josh/josh-commands-lint.ts +52 -19
- package/scripts/josh/josh-commands-maintenance.ts +37 -4
- package/scripts/josh/josh-commands-pause.ts +53 -5
- package/scripts/josh/josh-commands-prime.ts +28 -0
- package/scripts/josh/josh-commands-progress.ts +59 -7
- package/scripts/josh/josh-commands-project.ts +8 -5
- package/scripts/josh/josh-commands-review.ts +83 -5
- package/scripts/josh/josh-commands-run.ts +20 -31
- package/scripts/josh/josh-commands-ship.ts +95 -13
- package/scripts/josh/josh-commands-test-check.ts +0 -2
- package/scripts/josh/josh-commands-versioning.ts +11 -2
- package/scripts/josh/josh-commands-workflow.ts +41 -11
- package/scripts/josh/josh-completion-scripts.ts +81 -0
- package/scripts/josh/josh-completion.ts +29 -0
- package/scripts/josh/josh-environment-file.ts +8 -10
- package/scripts/josh/josh-gh-usage.ts +53 -0
- package/scripts/josh/josh-in-process.ts +21 -21
- package/scripts/josh/josh-logic.ts +22 -46
- package/scripts/josh/josh-read-only.ts +51 -0
- package/scripts/josh/josh-run.ts +30 -6
- package/scripts/josh/josh.ts +9 -11
- package/scripts/josh/path-decision.ts +2 -2
- package/scripts/josh/process-identity.ts +5 -0
- package/scripts/josh/session-handoff-line.ts +88 -0
- package/scripts/josh/session-language-cli.ts +18 -4
- package/scripts/josh/session-model-record.ts +62 -0
- package/scripts/lane/historical-evidence.ts +136 -0
- package/scripts/lane/historical-log-evidence.ts +47 -0
- package/scripts/lane/lane-adopt-cli.ts +1 -1
- package/scripts/lane/lane-await.ts +8 -3
- package/scripts/lane/lane-breakdown-calls.ts +165 -0
- package/scripts/lane/lane-breakdown-cli.ts +77 -9
- package/scripts/lane/lane-breakdown-estimate.ts +136 -0
- package/scripts/lane/lane-breakdown-implement.ts +166 -29
- package/scripts/lane/lane-breakdown-laps.ts +116 -24
- package/scripts/lane/lane-breakdown-pause.ts +127 -0
- package/scripts/lane/lane-breakdown-pinned.ts +19 -3
- package/scripts/lane/lane-breakdown-related.ts +40 -0
- package/scripts/lane/lane-breakdown-text.ts +129 -15
- package/scripts/lane/lane-breakdown.ts +194 -30
- package/scripts/lane/lane-broker-server.ts +1 -1
- package/scripts/lane/lane-capacity.ts +27 -16
- package/scripts/lane/lane-chain-stop-stats.ts +110 -0
- package/scripts/lane/lane-check-stats.ts +25 -5
- package/scripts/lane/lane-child-invocation.ts +9 -9
- package/scripts/lane/lane-ci-path-stats.ts +15 -4
- package/scripts/lane/lane-cli.ts +2 -2
- package/scripts/lane/lane-concurrency-stats.ts +110 -0
- package/scripts/lane/lane-cut-stats.ts +101 -0
- package/scripts/lane/lane-dispatch.ts +25 -20
- package/scripts/lane/lane-early-push-stats.ts +25 -0
- package/scripts/lane/lane-environment.ts +2 -2
- package/scripts/lane/lane-gap-stats.ts +69 -8
- package/scripts/lane/lane-guard-policy.ts +1 -1
- package/scripts/lane/lane-hand-back-held.ts +51 -0
- package/scripts/lane/lane-hand-back-hold.ts +103 -0
- package/scripts/lane/lane-held-stats.ts +13 -1
- package/scripts/lane/lane-implement-rate-read.ts +50 -0
- package/scripts/lane/lane-implement-rate.ts +74 -0
- package/scripts/lane/lane-implement-read.ts +129 -0
- package/scripts/lane/lane-implement-signals-record.ts +56 -0
- package/scripts/lane/lane-implement-signals.ts +161 -0
- package/scripts/lane/lane-implement-stats.ts +93 -18
- package/scripts/lane/lane-launch-admission.ts +61 -0
- package/scripts/lane/lane-launch-cli.ts +63 -27
- package/scripts/lane/lane-launch-pending.ts +44 -0
- package/scripts/lane/lane-ledger-archive.ts +200 -0
- package/scripts/lane/lane-ledger-kind.ts +5 -0
- package/scripts/lane/lane-ledger-pinned-origin.ts +10 -0
- package/scripts/lane/lane-ledger-schema-load.ts +45 -0
- package/scripts/lane/lane-ledger-schema-offer.ts +30 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +70 -4
- package/scripts/lane/lane-ledger-schema.ts +53 -30
- package/scripts/lane/lane-ledger-tail.ts +124 -0
- package/scripts/lane/lane-ledger-write.ts +60 -27
- package/scripts/lane/lane-ledger.ts +6 -31
- package/scripts/lane/lane-limit-cli.ts +11 -1
- package/scripts/lane/lane-limit-history.ts +77 -0
- package/scripts/lane/lane-limit-override.ts +49 -8
- package/scripts/lane/lane-listening-ports.ts +77 -0
- package/scripts/lane/lane-load.ts +62 -2
- package/scripts/lane/lane-measure-cli.ts +134 -55
- package/scripts/lane/lane-net-read.ts +22 -10
- package/scripts/lane/lane-net-time.ts +103 -18
- package/scripts/lane/lane-open.ts +19 -113
- package/scripts/lane/lane-over-causes.ts +130 -0
- package/scripts/lane/lane-over.ts +177 -0
- package/scripts/lane/lane-overrun-prompt.ts +4 -3
- package/scripts/lane/lane-overrun.ts +22 -9
- package/scripts/lane/lane-pairs.ts +128 -0
- package/scripts/lane/lane-paths.ts +26 -0
- package/scripts/lane/lane-pause-cli.ts +4 -2
- package/scripts/lane/lane-paused-spans.ts +11 -4
- package/scripts/lane/lane-phase.ts +36 -7
- package/scripts/lane/lane-plan-approval.ts +113 -0
- package/scripts/lane/lane-plan-auto.ts +53 -0
- package/scripts/lane/lane-plan-check.ts +196 -54
- package/scripts/lane/lane-plan-cli.ts +37 -10
- package/scripts/lane/lane-plan-imports.ts +53 -0
- package/scripts/lane/lane-plan-premise.ts +83 -0
- package/scripts/lane/lane-plan-probe.ts +115 -0
- package/scripts/lane/lane-plan-signals.ts +119 -0
- package/scripts/lane/lane-plan-size.ts +389 -0
- package/scripts/lane/lane-plan-wait-event.ts +124 -0
- package/scripts/lane/lane-plan-wait-until.ts +22 -0
- package/scripts/lane/lane-plan-wait.ts +125 -0
- package/scripts/lane/lane-plan.ts +113 -14
- package/scripts/lane/lane-preserve.ts +58 -13
- package/scripts/lane/lane-process-load.ts +130 -19
- package/scripts/lane/lane-process-stats.ts +51 -10
- package/scripts/lane/lane-reap.ts +4 -2
- package/scripts/lane/lane-registry.ts +19 -14
- package/scripts/lane/lane-relaunch.ts +32 -14
- package/scripts/lane/lane-report.ts +2 -0
- package/scripts/lane/lane-resolve-cli.ts +88 -0
- package/scripts/lane/lane-resolve-hunks.ts +63 -0
- package/scripts/lane/lane-resolve-record.ts +59 -0
- package/scripts/lane/lane-resolve.ts +122 -0
- package/scripts/lane/lane-restart.ts +1 -1
- package/scripts/lane/lane-room.ts +58 -0
- package/scripts/lane/lane-round-one-stats.ts +2 -1
- package/scripts/lane/lane-sampler.ts +53 -3
- package/scripts/lane/lane-seat-ownership.ts +57 -0
- package/scripts/lane/lane-seat-start.ts +52 -0
- package/scripts/lane/lane-seat-stop.ts +20 -0
- package/scripts/lane/lane-seat.ts +174 -0
- package/scripts/lane/lane-seed.ts +2 -5
- package/scripts/lane/lane-session-action.ts +26 -10
- package/scripts/lane/lane-session-broker.ts +1 -1
- package/scripts/lane/lane-session-reread.ts +2 -1
- package/scripts/lane/lane-setup.ts +59 -0
- package/scripts/lane/lane-ship-lap-stats.ts +3 -1
- package/scripts/lane/lane-sinks-issues.ts +52 -0
- package/scripts/lane/lane-sinks.ts +165 -0
- package/scripts/lane/lane-size-record.ts +39 -0
- package/scripts/lane/lane-size-stats.ts +111 -0
- package/scripts/lane/lane-split-stats.ts +33 -9
- package/scripts/lane/lane-stage-budget.ts +27 -0
- package/scripts/lane/lane-stage-stats.ts +94 -25
- package/scripts/lane/lane-state-record.ts +74 -0
- package/scripts/lane/lane-state.ts +21 -33
- package/scripts/lane/lane-stats-request.ts +163 -0
- package/scripts/lane/lane-stats-tables.ts +44 -3
- package/scripts/lane/lane-stats.ts +9 -2
- package/scripts/lane/lane-stop-stats.ts +3 -2
- package/scripts/lane/lane-test-related-stats.ts +5 -2
- package/scripts/lane/lane-timeline.ts +251 -0
- package/scripts/lane/lane-transcript-calls.ts +73 -4
- package/scripts/lane/lane-transcript-stats.ts +8 -3
- package/scripts/lane/lane-turn-stats.ts +171 -0
- package/scripts/lane/lane-value-cell.ts +87 -13
- package/scripts/lane/lane-value-missing.ts +21 -0
- package/scripts/lane/lane-why-causes.ts +102 -0
- package/scripts/lane/lane-why-ci.ts +50 -0
- package/scripts/lane/lane-why-cli.ts +83 -0
- package/scripts/lane/lane-why-period.ts +187 -0
- package/scripts/lane/lane-why-ship.ts +67 -0
- package/scripts/lane/lane-why.ts +192 -0
- package/scripts/lane/lane-withdraw.ts +12 -1
- package/scripts/lane/lane-yield-split.ts +218 -0
- package/scripts/lane/lane-yield.ts +38 -4
- package/scripts/lane/openai-lane-ship.ts +2 -2
- package/scripts/lane/openai-lane-supervisor-cli.ts +17 -8
- package/scripts/lane/openai-lane-supervisor-decision.ts +10 -4
- package/scripts/lane/openai-lane-supervisor-entry.ts +6 -0
- package/scripts/lane/openai-lane-supervisor-owner.ts +19 -3
- package/scripts/lane/openai-lane-supervisor.ts +26 -4
- package/scripts/lane/process-directories.ts +3 -1
- package/scripts/lane/process-lane-marks.ts +11 -5
- package/scripts/lane/process-linux.ts +81 -0
- package/scripts/lane/process-tools.ts +2 -5
- package/scripts/lib/bounded-pool.ts +38 -7
- package/scripts/lib/buffered-process.ts +34 -9
- package/scripts/lib/claude-installer.ts +29 -0
- package/scripts/lib/import-closure.ts +72 -0
- package/scripts/lib/josh-temporary-directory.ts +7 -0
- package/scripts/lib/main-guard.ts +29 -0
- package/scripts/lib/package-manifest.ts +54 -3
- package/scripts/lib/pnpm-installer.ts +16 -0
- package/scripts/lib/poll.ts +130 -20
- package/scripts/lib/schemas.ts +1 -1
- package/scripts/lib/stamped-memo.ts +1 -1
- package/scripts/lib/stamped-store.ts +82 -0
- package/scripts/lib/stdin-text.ts +68 -0
- package/scripts/lib/timeouts.ts +4 -4
- package/scripts/lib/transcript-record.ts +4 -0
- package/scripts/lib/verified-download.ts +17 -0
- package/scripts/lines/bytes-command.ts +1 -1
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +38 -8
- package/scripts/lint/eslint-daemon-calls.ts +83 -0
- package/scripts/lint/eslint-daemon.ts +101 -13
- package/scripts/lint/eslint-heap.ts +50 -0
- package/scripts/lint/eslint-memory.js +45 -0
- package/scripts/lint/eslint-trim.ts +44 -0
- package/scripts/lint/eslint-warm.ts +5 -2
- package/scripts/lint/format.ts +30 -5
- package/scripts/lint/import-graph-store.ts +245 -0
- package/scripts/lint/import-graph.ts +54 -65
- package/scripts/lint/import-move.ts +275 -0
- package/scripts/lint/import-test-inputs.ts +97 -0
- package/scripts/lint/lint-gate-scope.ts +1 -0
- package/scripts/lint/lint-parallel.ts +148 -43
- package/scripts/lint/lint-related-scope.ts +6 -1
- package/scripts/lint/lint-related.ts +66 -25
- package/scripts/lint/lint-rule.ts +293 -0
- package/scripts/lint/lint-shard.ts +91 -0
- package/scripts/lint/lint-timing.ts +39 -0
- package/scripts/lint/rename-cli.ts +36 -10
- package/scripts/lint/rename-identifier.ts +2 -2
- package/scripts/lint/type-only-imports.ts +20 -1
- package/scripts/notify/git-notify.ts +3 -1
- package/scripts/notify/telegram-notify.ts +33 -35
- package/scripts/notify/telegram-test.ts +9 -4
- package/scripts/observations/observation-depth-cli.ts +78 -0
- package/scripts/observations/observation-depth.ts +85 -0
- package/scripts/observations/observation-ledger-home.ts +14 -7
- package/scripts/observations/observations-flush-landing.ts +1 -1
- package/scripts/overrides/overrides-check.ts +33 -10
- package/scripts/overrides/overrides-diff-report.ts +91 -0
- package/scripts/overrides/overrides-diff.ts +98 -0
- package/scripts/package/package-scout-cli.ts +37 -11
- package/scripts/package/package-scout-format.ts +20 -6
- package/scripts/package/package-scout-reuse.ts +207 -0
- package/scripts/plan/plan-scaffold-cli.ts +125 -0
- package/scripts/plan/plan-scaffold.ts +112 -0
- package/scripts/ports/port-command.ts +2 -5
- package/scripts/propagate/propagate-git.ts +3 -3
- package/scripts/propagate/propagate-publish.ts +8 -7
- package/scripts/propagate/propagate-steps.ts +2 -3
- package/scripts/refactor/import-graph.ts +2 -4
- package/scripts/refactor/refactor-lint.ts +47 -30
- package/scripts/refactor/refactor-scan.ts +16 -9
- package/scripts/refactor/refactor-targets.ts +2 -3
- package/scripts/release/github-release.ts +10 -10
- package/scripts/release/publish-tag-cli.ts +13 -3
- package/scripts/release/release-cli.ts +2 -0
- package/scripts/release/release-progress.ts +44 -36
- package/scripts/release/release-request.ts +42 -0
- package/scripts/release/release-scope-cli.ts +31 -2
- package/scripts/release/release-workflow-check.ts +59 -0
- package/scripts/report/markdown-shape.ts +2 -1
- package/scripts/report/report-template-cli.ts +2 -2
- package/scripts/report/report-template.ts +17 -4
- package/scripts/review/acceptance-map.ts +87 -8
- package/scripts/review/diff-summary-cli.ts +81 -0
- package/scripts/review/diff-summary.ts +109 -0
- package/scripts/review/disposition-batch-filing.ts +150 -0
- package/scripts/review/disposition-batch.ts +103 -0
- package/scripts/review/disposition-cli.ts +35 -1
- package/scripts/review/import-specifiers.ts +38 -0
- package/scripts/review/prose-stale-cli.ts +7 -37
- package/scripts/review/prose-stale-read.ts +105 -0
- package/scripts/review/prose-stale-scan.ts +121 -17
- package/scripts/review/removed-tests-check.ts +28 -4
- package/scripts/review/review-brief-cli.ts +69 -71
- package/scripts/review/review-brief.ts +38 -42
- package/scripts/review/review-code-tree.ts +80 -16
- package/scripts/review/review-comment-carry.ts +30 -0
- package/scripts/review/review-diff-pack.ts +70 -0
- package/scripts/review/review-diff-write.ts +23 -22
- package/scripts/review/review-final-record.ts +47 -0
- package/scripts/review/review-finding-ledger.ts +72 -10
- package/scripts/review/review-findings-cli.ts +88 -8
- package/scripts/review/review-fix-hunks.ts +115 -0
- package/scripts/review/review-fix-round.ts +144 -0
- package/scripts/review/review-gate-mode.ts +25 -0
- package/scripts/review/review-interaction.ts +69 -11
- package/scripts/review/review-lane-handover.ts +29 -4
- package/scripts/review/review-level.ts +35 -34
- package/scripts/review/review-lint-findings.ts +3 -3
- package/scripts/review/review-lint-sections.ts +2 -2
- package/scripts/review/review-lint.ts +7 -1
- package/scripts/review/review-pair-cli.ts +157 -0
- package/scripts/review/review-pair-log.ts +75 -0
- package/scripts/review/review-pair-session.ts +98 -0
- package/scripts/review/review-pair.ts +112 -0
- package/scripts/review/review-prior-findings.ts +2 -4
- package/scripts/review/review-prompt-level.ts +28 -0
- package/scripts/review/review-readers-scan.ts +25 -3
- package/scripts/review/review-record-cli.ts +46 -68
- package/scripts/review/review-record-interaction.ts +2 -2
- package/scripts/review/review-record-main.ts +7 -2
- package/scripts/review/review-record-pinned.ts +5 -0
- package/scripts/review/review-record-slot.ts +155 -0
- package/scripts/review/review-reviewed-tree.ts +60 -13
- package/scripts/review/review-round-one-blobs.ts +43 -9
- package/scripts/review/review-round-one-skip.ts +72 -0
- package/scripts/review/review-round-reuse.ts +13 -6
- package/scripts/review/review-round.ts +57 -0
- package/scripts/review/review-round2-cli.ts +5 -0
- package/scripts/review/review-round2-skip-comment.ts +3 -1
- package/scripts/review/review-round2.ts +18 -6
- package/scripts/review/review-size.ts +92 -0
- package/scripts/review/review-stamps.ts +8 -0
- package/scripts/review/review-submit-args.ts +91 -0
- package/scripts/review/review-submit-cli.ts +55 -29
- package/scripts/review/selfcheck-cli.ts +193 -0
- package/scripts/review/selfcheck-commands.ts +175 -0
- package/scripts/review/selfcheck-report.ts +98 -0
- package/scripts/rules/bash-triggers.ts +24 -13
- package/scripts/rules/broad-investigation-shell.ts +183 -0
- package/scripts/rules/broad-investigation.ts +116 -0
- package/scripts/rules/consultation-handoff.ts +81 -0
- package/scripts/rules/consultation-investigation.ts +99 -0
- package/scripts/rules/decision-oracle.ts +1 -1
- package/scripts/rules/delivered-rules-guard.ts +94 -0
- package/scripts/rules/delivered-rules.ts +46 -87
- package/scripts/rules/destructive-command.ts +2 -1
- package/scripts/rules/direct-git-status.ts +81 -0
- package/scripts/rules/direct-issue-comment.ts +9 -1
- package/scripts/rules/direct-vitest-run.ts +98 -0
- package/scripts/rules/egress-guard.ts +308 -0
- package/scripts/rules/firing-point.ts +9 -12
- package/scripts/rules/gh-api.ts +19 -4
- package/scripts/rules/gh-repo-selector.ts +1 -1
- package/scripts/rules/git-argv.ts +57 -10
- package/scripts/rules/guard-remedy.ts +9 -0
- package/scripts/rules/guard-rule-rows.ts +13 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +94 -31
- package/scripts/rules/interpreter-options.ts +179 -0
- package/scripts/rules/investigator-foreground.ts +13 -7
- package/scripts/rules/josh-git-bare.ts +1 -1
- package/scripts/rules/keychain-read.ts +73 -0
- package/scripts/rules/lane-background.ts +15 -14
- package/scripts/rules/lane-carry-conflict.ts +15 -8
- package/scripts/rules/lane-direct-tool.ts +18 -11
- package/scripts/rules/lane-interactive-ask.ts +3 -5
- package/scripts/rules/lane-park.ts +25 -10
- package/scripts/rules/lane-spilled-read.ts +3 -5
- package/scripts/rules/lane-split-park.ts +7 -6
- package/scripts/rules/lane-switch-main.ts +10 -3
- package/scripts/rules/launched-call.ts +135 -0
- package/scripts/rules/main-model.ts +54 -0
- package/scripts/rules/nested-commands.ts +71 -0
- package/scripts/rules/permission-guards.ts +6 -2
- package/scripts/rules/pr-merge.ts +1 -1
- package/scripts/rules/pre-gate-cut.ts +20 -11
- package/scripts/rules/protected-files.ts +34 -98
- package/scripts/rules/repeat-check-related.ts +66 -0
- package/scripts/rules/reviewer-foreground.ts +11 -7
- package/scripts/rules/round-one-check-related.ts +59 -19
- package/scripts/rules/rule-list.ts +3 -4
- package/scripts/rules/rule-rephrase.ts +43 -0
- package/scripts/rules/rule-rewrite.ts +16 -6
- package/scripts/rules/rule-value-cache.ts +10 -1
- package/scripts/rules/rule-value-cli.ts +62 -54
- package/scripts/rules/rule-value-prose.ts +186 -0
- package/scripts/rules/rule-value-runs.ts +171 -0
- package/scripts/rules/rule-value.ts +38 -13
- package/scripts/rules/run-tail-rule.ts +19 -2
- package/scripts/rules/secret-paths.ts +92 -0
- package/scripts/rules/sed-in-place.ts +1 -1
- package/scripts/rules/shell-permissions.ts +91 -0
- package/scripts/rules/shell-redirects.ts +54 -0
- package/scripts/rules/shell-segments.ts +3 -2
- package/scripts/rules/stop-decision.ts +7 -1
- package/scripts/rules/stop-rules.ts +1 -1
- package/scripts/rules/unasked-filing.ts +158 -0
- package/scripts/run/add/run-add-cli.ts +114 -36
- package/scripts/run/add/run-add-epic.ts +45 -0
- package/scripts/run/add/run-add-issue.ts +17 -0
- package/scripts/run/add/run-add.ts +159 -21
- package/scripts/run/attached-log.ts +38 -0
- package/scripts/run/board/run-board-cli.ts +34 -9
- package/scripts/run/board/run-board-closed-graphql.ts +129 -0
- package/scripts/run/board/run-board-closed.ts +68 -10
- package/scripts/run/board/run-board-decision-graphql.ts +136 -0
- package/scripts/run/board/run-board-decision-read.ts +195 -0
- package/scripts/run/board/run-board-decision.ts +92 -0
- package/scripts/run/board/run-board-earlier.ts +27 -3
- package/scripts/run/board/run-board-ending-reason.ts +98 -9
- package/scripts/run/board/run-board-ending-states.ts +34 -0
- package/scripts/run/board/run-board-every.ts +19 -9
- package/scripts/run/board/run-board-first-lane.ts +26 -0
- package/scripts/run/board/run-board-fit.ts +47 -11
- package/scripts/run/board/run-board-fold-store.ts +62 -0
- package/scripts/run/board/run-board-fold.ts +41 -9
- package/scripts/run/board/run-board-gather-live.ts +2 -0
- package/scripts/run/board/run-board-gather-thread.ts +14 -3
- package/scripts/run/board/run-board-gather-worker.ts +10 -8
- package/scripts/run/board/run-board-gather.ts +10 -3
- package/scripts/run/board/run-board-github.ts +117 -29
- package/scripts/run/board/run-board-header.ts +33 -24
- package/scripts/run/board/run-board-held.ts +53 -0
- package/scripts/run/board/run-board-human-merge.ts +113 -0
- package/scripts/run/board/run-board-human.ts +37 -0
- package/scripts/run/board/run-board-idle.ts +9 -6
- package/scripts/run/board/run-board-issue-count.ts +101 -0
- package/scripts/run/board/run-board-keys.ts +19 -4
- package/scripts/run/board/run-board-labels.ts +20 -4
- package/scripts/run/board/run-board-lane-event.ts +23 -2
- package/scripts/run/board/run-board-lane-result.ts +58 -0
- package/scripts/run/board/run-board-lane-state.ts +52 -7
- package/scripts/run/board/run-board-lane-stop.ts +108 -0
- package/scripts/run/board/run-board-lane-time.ts +1 -0
- package/scripts/run/board/run-board-layout.ts +64 -74
- package/scripts/run/board/run-board-link.ts +42 -2
- package/scripts/run/board/run-board-notes.ts +1 -1
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation-codex.ts +37 -0
- package/scripts/run/board/run-board-operation-read.ts +2 -2
- package/scripts/run/board/run-board-operation.ts +8 -5
- package/scripts/run/board/run-board-plan-shared.ts +3 -0
- package/scripts/run/board/run-board-plan.ts +6 -1
- package/scripts/run/board/run-board-process-groups.ts +1 -1
- package/scripts/run/board/run-board-quota-held.ts +319 -0
- package/scripts/run/board/run-board-quota-lane.ts +23 -0
- package/scripts/run/board/run-board-quota-read.ts +422 -0
- package/scripts/run/board/run-board-quota-spent.ts +162 -0
- package/scripts/run/board/run-board-quota-status.ts +67 -0
- package/scripts/run/board/run-board-read.ts +112 -36
- package/scripts/run/board/run-board-reason.ts +40 -20
- package/scripts/run/board/run-board-render-condition.ts +18 -2
- package/scripts/run/board/run-board-render-drawn.ts +5 -1
- package/scripts/run/board/run-board-render-foot.ts +5 -1
- package/scripts/run/board/run-board-render-found.ts +21 -2
- package/scripts/run/board/run-board-render-icon.ts +3 -6
- package/scripts/run/board/run-board-render-lanes.ts +49 -9
- package/scripts/run/board/run-board-render-lead.ts +20 -1
- package/scripts/run/board/run-board-render-legend.ts +4 -0
- package/scripts/run/board/run-board-render-none.ts +35 -0
- package/scripts/run/board/run-board-render-notes.ts +5 -3
- package/scripts/run/board/run-board-render-processes.ts +6 -5
- package/scripts/run/board/run-board-render-quota-cell.ts +81 -0
- package/scripts/run/board/run-board-render-quota-github.ts +112 -0
- package/scripts/run/board/run-board-render-quota.ts +285 -0
- package/scripts/run/board/run-board-render-section.ts +50 -6
- package/scripts/run/board/run-board-render-tail.ts +53 -7
- package/scripts/run/board/run-board-render-throughput.ts +140 -0
- package/scripts/run/board/run-board-render-title.ts +26 -4
- package/scripts/run/board/run-board-render.ts +59 -57
- package/scripts/run/board/run-board-row-yield.ts +1 -0
- package/scripts/run/board/run-board-scope.ts +13 -6
- package/scripts/run/board/run-board-seat.ts +107 -0
- package/scripts/run/board/run-board-settle.ts +33 -0
- package/scripts/run/board/run-board-setup.ts +30 -15
- package/scripts/run/board/run-board-single.ts +123 -0
- package/scripts/run/board/run-board-snapshot.ts +7 -1
- package/scripts/run/board/run-board-span.ts +18 -3
- package/scripts/run/board/run-board-spin.ts +12 -6
- package/scripts/run/board/run-board-standing-waits.ts +52 -0
- package/scripts/run/board/run-board-state.ts +23 -0
- package/scripts/run/board/run-board-status.ts +86 -99
- package/scripts/run/board/run-board-throughput.ts +215 -0
- package/scripts/run/board/run-board-tick.ts +76 -30
- package/scripts/run/board/run-board-usage-read.ts +3 -3
- package/scripts/run/board/run-board-usage-top.ts +12 -35
- package/scripts/run/board/run-board-usual.ts +18 -1
- package/scripts/run/carry/run-carry-added.ts +6 -1
- package/scripts/run/carry/run-carry-args.ts +22 -8
- package/scripts/run/carry/run-carry-cli.ts +31 -1
- package/scripts/run/carry/run-carry-conversation.ts +12 -4
- package/scripts/run/carry/run-carry-ended.ts +3 -0
- package/scripts/run/carry/run-carry-reclaim.ts +2 -1
- package/scripts/run/carry/run-carry.ts +40 -20
- package/scripts/run/cut/run-cut-adoption.ts +67 -0
- package/scripts/run/cut/run-cut-cli.ts +88 -34
- package/scripts/run/cut/run-cut-decline.ts +1 -1
- package/scripts/run/cut/run-cut-handoff.ts +2 -1
- package/scripts/run/cut/run-cut-next.ts +20 -0
- package/scripts/run/cut/run-cut-ready.ts +7 -5
- package/scripts/run/cut/run-cut-report.ts +13 -14
- package/scripts/run/cut/run-cut-resume.ts +1 -1
- package/scripts/run/cut/run-cut.ts +36 -23
- package/scripts/run/detached-launch.ts +12 -7
- package/scripts/run/early-push-record.ts +22 -0
- package/scripts/run/entry/run-entry-children.ts +126 -0
- package/scripts/run/entry/run-entry-cli.ts +126 -82
- package/scripts/run/entry/run-entry-dispatch.ts +20 -0
- package/scripts/run/entry/run-entry-lane-plan.ts +39 -0
- package/scripts/run/entry/run-entry-spill.ts +67 -22
- package/scripts/run/entry/run-entry-stop.ts +9 -8
- package/scripts/run/entry/run-entry-sync.ts +149 -0
- package/scripts/run/entry/run-entry-trust.ts +1 -1
- package/scripts/run/entry/run-entry.ts +9 -0
- package/scripts/run/event/run-event-checks.ts +1 -1
- package/scripts/run/event/run-event-filed.ts +1 -1
- package/scripts/run/event/run-event-follow.ts +9 -5
- package/scripts/run/event/run-event-overrun.ts +7 -7
- package/scripts/run/event/run-event-plan.ts +1 -1
- package/scripts/run/event/run-event-render.ts +5 -0
- package/scripts/run/event/run-event-retry.ts +34 -0
- package/scripts/run/event/run-event-scope.ts +4 -1
- package/scripts/run/event/run-event-setup.ts +55 -5
- package/scripts/run/event/run-event-step.ts +81 -0
- package/scripts/run/event/run-event-stream-emit.ts +63 -23
- package/scripts/run/event/run-event-stream.ts +69 -21
- package/scripts/run/event/run-event-tail.ts +122 -0
- package/scripts/run/event/run-event-watch.ts +12 -7
- package/scripts/run/handoff/run-handoff-args.ts +93 -0
- package/scripts/run/handoff/run-handoff-cli.ts +320 -0
- package/scripts/run/handoff/run-handoff-final.ts +38 -0
- package/scripts/run/handoff/run-handoff-launch.ts +113 -0
- package/scripts/run/handoff/run-handoff-retrospective.ts +48 -0
- package/scripts/run/handoff-lanes/run-handoff-lanes-cli.ts +31 -0
- package/scripts/run/handoff-lanes/run-handoff-lanes.ts +183 -0
- package/scripts/run/hold/run-hold-block.ts +35 -0
- package/scripts/run/hold/run-hold-cli.ts +20 -36
- package/scripts/run/hold/run-hold-main.ts +16 -1
- package/scripts/run/hold/run-hold.ts +12 -8
- package/scripts/run/hold/run-stop-notify.ts +1 -1
- package/scripts/run/launch-priority.ts +4 -7
- package/scripts/run/merge/run-merge-auth.ts +38 -13
- package/scripts/run/merge/run-merge-cap.ts +11 -6
- package/scripts/run/merge/run-merge-cli.ts +55 -58
- package/scripts/run/merge/run-merge-dated.ts +64 -0
- package/scripts/run/merge/run-merge-decision.ts +183 -0
- package/scripts/run/merge/run-merge-driver.ts +2 -0
- package/scripts/run/merge/run-merge-github-limit.ts +98 -0
- package/scripts/run/merge/run-merge-health.ts +137 -0
- package/scripts/run/merge/run-merge-human-review.ts +26 -0
- package/scripts/run/merge/run-merge-restart.ts +10 -3
- package/scripts/run/merge/run-merge-signals.ts +34 -9
- package/scripts/run/merge/run-merge-steps.ts +49 -50
- package/scripts/run/merge/run-merge-token.ts +3 -4
- package/scripts/run/merge/run-merge-usage-limit.ts +22 -9
- package/scripts/run/merge/run-merge-withdrawn.ts +4 -3
- package/scripts/run/merge/run-merge.ts +36 -18
- package/scripts/run/park/run-park-answered.ts +84 -0
- package/scripts/run/park/run-park-body.ts +346 -0
- package/scripts/run/park/run-park-cli.ts +37 -12
- package/scripts/run/park/run-park-lane.ts +41 -0
- package/scripts/run/park/run-park-release.ts +61 -0
- package/scripts/run/park/run-park-write.ts +41 -0
- package/scripts/run/park/run-park.ts +2 -4
- package/scripts/run/park/run-stalled-park.ts +32 -0
- package/scripts/run/park/run-stalled.ts +75 -12
- package/scripts/run/pause/run-pause-cli.ts +4 -3
- package/scripts/run/pause/run-pause-comment.ts +30 -0
- package/scripts/run/pause/run-pause.ts +35 -223
- package/scripts/run/pause/run-set-aside-commit.ts +52 -0
- package/scripts/run/pause/run-set-aside.ts +139 -0
- package/scripts/run/prime/run-prime-cli.ts +105 -0
- package/scripts/run/progress/run-progress-cli.ts +44 -27
- package/scripts/run/progress/run-progress-config.ts +7 -18
- package/scripts/run/progress/run-progress.ts +16 -7
- package/scripts/run/review/run-chain-cli.ts +162 -0
- package/scripts/run/review/run-chain-join.ts +108 -0
- package/scripts/run/review/run-chain-review-fix.ts +70 -0
- package/scripts/run/review/run-chain.ts +167 -0
- package/scripts/run/review/run-review-cli.ts +127 -53
- package/scripts/run/review/run-review-early-push.ts +41 -7
- package/scripts/run/review/run-review-join-ready.ts +88 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +15 -1
- package/scripts/run/review/run-review-pinned-join.ts +8 -4
- package/scripts/run/review/run-review-pinned-steps.ts +12 -7
- package/scripts/run/review/run-review-pinned.ts +8 -3
- package/scripts/run/review/run-review-steps.ts +29 -14
- package/scripts/run/review/run-review-unplanned.ts +75 -0
- package/scripts/run/review/run-review.ts +4 -4
- package/scripts/run/run-halfrun-resume.ts +9 -1
- package/scripts/run/run-headless-keys.ts +23 -0
- package/scripts/run/run-headless.ts +77 -13
- package/scripts/run/run-investigation-record.ts +66 -0
- package/scripts/run/run-label-main.ts +55 -0
- package/scripts/run/run-label.ts +20 -4
- package/scripts/run/run-liveness-cli.ts +1 -1
- package/scripts/run/run-liveness.ts +6 -5
- package/scripts/run/run-maintenance.ts +66 -0
- package/scripts/run/run-open-pr.ts +19 -0
- package/scripts/run/run-parent-cut-hook.ts +17 -9
- package/scripts/run/run-pickup-cli.ts +86 -0
- package/scripts/run/run-pickup-launch.ts +85 -0
- package/scripts/run/run-poll-hook.ts +14 -7
- package/scripts/run/run-pr-return.ts +99 -0
- package/scripts/run/run-prep-cli.ts +54 -7
- package/scripts/run/run-prep-locate.ts +8 -3
- package/scripts/run/run-prep-summary.ts +55 -0
- package/scripts/run/run-prep.ts +37 -1
- package/scripts/run/run-report-cli.ts +13 -2
- package/scripts/run/run-report-end.ts +133 -0
- package/scripts/run/run-report-handoff.ts +1 -1
- package/scripts/run/run-report.ts +7 -1
- package/scripts/run/run-stage-read.ts +38 -4
- package/scripts/run/run-stage.ts +18 -6
- package/scripts/run/run-status.ts +2 -1
- package/scripts/run/run-step-cli.ts +38 -10
- package/scripts/run/run-step-lane-plan.ts +26 -12
- package/scripts/run/run-step-progress.ts +61 -0
- package/scripts/run/run-step-section-driver.ts +27 -0
- package/scripts/run/run-step-section-once.ts +83 -0
- package/scripts/run/run-step-section-table.ts +120 -0
- package/scripts/run/run-step-section.ts +39 -53
- package/scripts/run/run-step.ts +4 -3
- package/scripts/run/run-stop-notify.ts +1 -1
- package/scripts/run/run-tail-cli.ts +14 -6
- package/scripts/run/run-tail.ts +22 -0
- package/scripts/run/run-watcher-guard.ts +15 -5
- package/scripts/run/run-watcher-hook.ts +12 -6
- package/scripts/run/ship/run-ship-args.ts +8 -1
- package/scripts/run/ship/run-ship-cli.ts +68 -65
- package/scripts/run/ship/run-ship-conflict-probe.ts +12 -14
- package/scripts/run/ship/run-ship-detach-wait.ts +25 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -35
- package/scripts/run/ship/run-ship-early-push.ts +34 -0
- package/scripts/run/ship/run-ship-evidence-cli.ts +133 -0
- package/scripts/run/ship/run-ship-evidence.ts +71 -0
- package/scripts/run/ship/run-ship-final-review.ts +28 -0
- package/scripts/run/ship/run-ship-gate-runs.ts +58 -0
- package/scripts/run/ship/run-ship-group.ts +38 -0
- package/scripts/run/ship/run-ship-handover.ts +1 -1
- package/scripts/run/ship/run-ship-lap.ts +100 -12
- package/scripts/run/ship/run-ship-narrowed.ts +104 -0
- package/scripts/run/ship/run-ship-next.ts +3 -3
- package/scripts/run/ship/run-ship-pair-runs.ts +127 -0
- package/scripts/run/ship/run-ship-place.ts +9 -8
- package/scripts/run/ship/run-ship-planned.ts +1 -1
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +7 -1
- package/scripts/run/ship/run-ship-pre-detach.ts +18 -12
- package/scripts/run/ship/run-ship-preflight-reuse.ts +53 -0
- package/scripts/run/ship/run-ship-preflight.ts +21 -2
- package/scripts/run/ship/run-ship-probe.ts +5 -15
- package/scripts/run/ship/run-ship-record-wait.ts +30 -0
- package/scripts/run/ship/run-ship-relaunch-cap.ts +107 -14
- package/scripts/run/ship/run-ship-relaunch.ts +7 -1
- package/scripts/run/ship/run-ship-removed-rows.ts +34 -10
- package/scripts/run/ship/run-ship-reship.ts +125 -0
- package/scripts/run/ship/run-ship-return.ts +68 -22
- package/scripts/run/ship/run-ship-review-checkpoint.ts +112 -0
- package/scripts/run/ship/run-ship-review-reason.ts +3 -1
- package/scripts/run/ship/run-ship-review-steps.ts +80 -31
- package/scripts/run/ship/run-ship-review.ts +13 -9
- package/scripts/run/ship/run-ship-reviewer.ts +59 -7
- package/scripts/run/ship/run-ship-scoped.ts +232 -21
- package/scripts/run/ship/run-ship-stage.ts +3 -5
- package/scripts/run/ship/run-ship-steps.ts +65 -20
- package/scripts/run/ship/run-ship-stop-cause.ts +52 -1
- package/scripts/run/ship/run-ship-stop-context.ts +5 -5
- package/scripts/run/ship/run-ship-stop-text.ts +1 -1
- package/scripts/run/ship/run-ship-supervised.ts +38 -0
- package/scripts/run/ship/run-ship-sync.ts +114 -19
- package/scripts/run/ship/run-ship-synced-scope.ts +162 -58
- package/scripts/run/ship/run-ship-tree-stamp.ts +35 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +23 -25
- package/scripts/run/ship/run-ship-wait-main.ts +12 -0
- package/scripts/run/ship/run-ship-waiter.ts +8 -6
- package/scripts/run/ship/run-ship.ts +12 -0
- package/scripts/run/split/run-split-cli.ts +134 -0
- package/scripts/run/split/run-split-prerequisite.ts +75 -0
- package/scripts/run/split/run-split.ts +213 -0
- package/scripts/run/stale/run-stale-cli.ts +86 -0
- package/scripts/run/stale/run-stale-main.ts +7 -0
- package/scripts/run/stale/run-stale.ts +117 -0
- package/scripts/run/tidy/run-tidy-cli.ts +24 -2
- package/scripts/run/tree-status-cli.ts +131 -0
- package/scripts/run/tree-status.ts +77 -0
- package/scripts/run/ts-entry-loader.ts +34 -0
- package/scripts/run/wake/run-wake-await.ts +22 -2
- package/scripts/run/wake/run-wake-cli.ts +3 -3
- package/scripts/run/wake/run-wake-describe.ts +1 -1
- package/scripts/run/wake/run-wake-driver.ts +158 -61
- package/scripts/run/wake/run-wake-handoff.ts +65 -14
- package/scripts/run/wake/run-wake-loop.ts +63 -23
- package/scripts/run/wake/run-wake-ports.ts +99 -17
- package/scripts/run/wake/run-wake-resume.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +16 -14
- package/scripts/run/wake/run-wake-window.ts +15 -0
- package/scripts/run/wake/run-wake.ts +7 -6
- package/scripts/safe-chain/preinstall-command.ts +3 -6
- package/scripts/safe-chain/project-config.ts +2 -2
- package/scripts/security/security-audit-cache.ts +157 -0
- package/scripts/security/security-audit-main.ts +4 -2
- package/scripts/security/security-audit-provision-logic.ts +4 -4
- package/scripts/security/security-audit-provision-main.ts +19 -5
- package/scripts/split/declared-growth.ts +22 -0
- package/scripts/split/split-assess.ts +220 -37
- package/scripts/split/split-child-recover-cli.ts +118 -0
- package/scripts/split/split-direction.ts +172 -0
- package/scripts/split/split-measure.ts +28 -14
- package/scripts/split/split-relocations.ts +108 -0
- package/scripts/split/split-resolution.ts +63 -61
- package/scripts/sync/claude-settings-merge.ts +8 -4
- package/scripts/sync/managed-config-scope.ts +13 -1
- package/scripts/sync/sync-ai-files.ts +2 -2
- package/scripts/sync/sync-configs.ts +3 -5
- package/scripts/test/test-e2e-guard.ts +2 -1
- package/scripts/test/test-inputs.ts +119 -0
- package/scripts/test/test-no-base.ts +35 -16
- package/scripts/test/test-pinned-cache-logic.ts +4 -0
- package/scripts/test/test-pinned-cache.ts +8 -15
- package/scripts/test/test-pinned-carry.ts +93 -0
- package/scripts/test/test-pinned-emit.ts +2 -1
- package/scripts/test/test-pinned-ledger.ts +15 -9
- package/scripts/test/test-pinned-logic.ts +66 -4
- package/scripts/test/test-pinned-main.ts +6 -30
- package/scripts/test/test-pinned-moves.ts +43 -0
- package/scripts/test/test-pinned-probe.ts +61 -17
- package/scripts/test/test-pinned-prune-logic.ts +2 -1
- package/scripts/test/test-pinned-reach.ts +11 -3
- package/scripts/test/test-pinned-record.ts +36 -4
- package/scripts/test/test-pinned-snapshot.ts +110 -0
- package/scripts/test/test-pinned-spawn.ts +32 -7
- package/scripts/test/test-pinned-stage.ts +43 -16
- package/scripts/test/test-pinned-type-check.ts +110 -0
- package/scripts/test/test-pinned.ts +92 -35
- package/scripts/test/test-red-logic.ts +40 -2
- package/scripts/test/test-red.ts +131 -19
- package/scripts/test/test-related-cap.ts +182 -0
- package/scripts/test/test-related-main.ts +2 -4
- package/scripts/test/test-related-pins.ts +33 -0
- package/scripts/test/test-related-record.ts +84 -8
- package/scripts/test/test-related-red.ts +218 -0
- package/scripts/test/test-related-reuse.ts +167 -0
- package/scripts/test/test-related-run.ts +144 -0
- package/scripts/test/test-related-synced.ts +31 -8
- package/scripts/test/test-related-touched.ts +10 -5
- package/scripts/test/test-related-verdict.ts +127 -0
- package/scripts/test/test-related-whole.ts +22 -0
- package/scripts/test/test-related.ts +123 -146
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +12 -3
- package/scripts/test/unit-count-file.ts +25 -1
- package/scripts/test/unit-lane-count.ts +63 -0
- package/scripts/test/unit-run-marker.ts +11 -1
- package/scripts/test/unit-update-arguments.ts +73 -0
- package/scripts/test/unit-worker-share.ts +28 -13
- package/scripts/test/whole-suite-files.ts +2 -0
- package/scripts/time-runtime/guard-rephrase.ts +66 -0
- package/scripts/time-runtime/time-agent-bundles.ts +5 -5
- package/scripts/time-runtime/time-bundle-call.ts +2 -2
- package/scripts/time-runtime/time-bundles.ts +2 -2
- package/scripts/time-runtime/time-command-key.ts +2 -5
- package/scripts/time-runtime/time-density-hook.ts +2 -31
- package/scripts/time-runtime/time-format.ts +4 -4
- package/scripts/time-runtime/time-josh-names.ts +51 -0
- package/scripts/time-runtime/time-markers.ts +4 -4
- package/scripts/time-runtime/time-phase-names.ts +2 -2
- package/scripts/time-runtime/time-shell.ts +28 -17
- package/scripts/time-runtime/time-single-check.ts +4 -4
- package/scripts/time-runtime/time-spans.ts +8 -8
- package/scripts/time-runtime/time-tool-call.ts +4 -3
- package/scripts/time-runtime/time-transcript-block.ts +172 -0
- package/scripts/time-runtime/time-transcript-line.ts +26 -158
- package/scripts/time-runtime/transcript-tail.ts +39 -0
- package/scripts/ui/ui-shot-cli.ts +90 -0
- package/scripts/ui/ui-shot.ts +95 -0
- package/scripts/usage/usage-state-path.ts +22 -0
- package/scripts/usage/usage-tee-cli.ts +5 -0
- package/scripts/usage/usage-tee.ts +48 -0
- package/scripts/version/development-engines-verdict.ts +7 -1
- package/scripts/version/fresh-metadata-cache.ts +4 -3
- package/scripts/version/latest-corepack.ts +3 -3
- package/scripts/version/latest-if-required-cli.ts +32 -4
- package/scripts/version/latest-scope-cli.ts +12 -2
- package/scripts/version/latest-stamp.ts +5 -4
- package/scripts/version/npm-registry.ts +19 -0
- package/scripts/version/playwright-browsers.ts +1 -1
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/upgrade-command-guard.ts +1 -1
- package/templates/prettierignore.basic +3 -0
- package/templates/sonar-project.properties +2 -1
- package/templates/workflows/ci.yml +5 -4
- package/tsconfig/base.json +1 -0
- package/dist/hooks/chunk-3GKE653K.js +0 -6204
- package/dist/hooks/chunk-45CJJOO7.js +0 -1243
- package/dist/hooks/chunk-5PM2JRGV.js +0 -7780
- package/dist/hooks/chunk-7SIUNQXK.js +0 -3591
- package/dist/hooks/chunk-Z6DQJKH3.js +0 -2806
- package/prompts/collaboration-workflow.md +0 -28
- package/scripts/epic/epic-bundle-poll.ts +0 -41
- package/scripts/josh/josh-commands-lane.ts +0 -310
- package/scripts/josh/josh-commands-split.ts +0 -28
- package/scripts/review/review-lint-cli.ts +0 -57
- package/scripts/split/split-early-notice.ts +0 -116
|
@@ -0,0 +1,2012 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import {
|
|
3
|
+
followup_ship_environment
|
|
4
|
+
} from "./chunk-LBLII7BS.js";
|
|
5
|
+
import {
|
|
6
|
+
acceptance_map_check
|
|
7
|
+
} from "./chunk-PZTWQYRI.js";
|
|
8
|
+
import {
|
|
9
|
+
run_step_section
|
|
10
|
+
} from "./chunk-RVHBWSIG.js";
|
|
11
|
+
import {
|
|
12
|
+
issue_declared_size
|
|
13
|
+
} from "./chunk-7V5UVKFG.js";
|
|
14
|
+
import {
|
|
15
|
+
git_followup_issue_close,
|
|
16
|
+
settled_together
|
|
17
|
+
} from "./chunk-72EW7AVI.js";
|
|
18
|
+
import "./chunk-CADFBQJJ.js";
|
|
19
|
+
import {
|
|
20
|
+
issue_body_or_comment
|
|
21
|
+
} from "./chunk-PDAY76AN.js";
|
|
22
|
+
import {
|
|
23
|
+
epic_close
|
|
24
|
+
} from "./chunk-DP7WIGQ4.js";
|
|
25
|
+
import {
|
|
26
|
+
split_measure
|
|
27
|
+
} from "./chunk-KHWTJ4F7.js";
|
|
28
|
+
import {
|
|
29
|
+
git_followup_pending
|
|
30
|
+
} from "./chunk-73KBUQKI.js";
|
|
31
|
+
import "./chunk-LOSOLCCW.js";
|
|
32
|
+
import {
|
|
33
|
+
observations_flush
|
|
34
|
+
} from "./chunk-QEIO2ZNQ.js";
|
|
35
|
+
import {
|
|
36
|
+
git_pr_merge_checked
|
|
37
|
+
} from "./chunk-HJKZDDDI.js";
|
|
38
|
+
import {
|
|
39
|
+
MAX_CHECK_RERUNS,
|
|
40
|
+
followup_job_rerun
|
|
41
|
+
} from "./chunk-MZHOPRI6.js";
|
|
42
|
+
import "./chunk-XDQOWUVT.js";
|
|
43
|
+
import "./chunk-HRT4KWP4.js";
|
|
44
|
+
import "./chunk-P4D5RESF.js";
|
|
45
|
+
import "./chunk-ZAJD6T6E.js";
|
|
46
|
+
import "./chunk-HIPO6HUG.js";
|
|
47
|
+
import {
|
|
48
|
+
observation_ledger_prepare
|
|
49
|
+
} from "./chunk-RYZ3RQRH.js";
|
|
50
|
+
import "./chunk-6NRTLH6I.js";
|
|
51
|
+
import {
|
|
52
|
+
removed_tests_check
|
|
53
|
+
} from "./chunk-4HBVHYNL.js";
|
|
54
|
+
import {
|
|
55
|
+
live_evidence
|
|
56
|
+
} from "./chunk-KVJDDECB.js";
|
|
57
|
+
import "./chunk-SK2LJBFS.js";
|
|
58
|
+
import {
|
|
59
|
+
review_record
|
|
60
|
+
} from "./chunk-BCK5LW4F.js";
|
|
61
|
+
import "./chunk-HZBTXKT2.js";
|
|
62
|
+
import "./chunk-NMLCPYBN.js";
|
|
63
|
+
import {
|
|
64
|
+
git_followup_label
|
|
65
|
+
} from "./chunk-SNFLV7VV.js";
|
|
66
|
+
import {
|
|
67
|
+
josh_command
|
|
68
|
+
} from "./chunk-2VRITY55.js";
|
|
69
|
+
import {
|
|
70
|
+
git_next_issues
|
|
71
|
+
} from "./chunk-ELWNRE6E.js";
|
|
72
|
+
import "./chunk-HLKAFSN4.js";
|
|
73
|
+
import "./chunk-7ZECP3J6.js";
|
|
74
|
+
import "./chunk-3HU3LPIF.js";
|
|
75
|
+
import "./chunk-2CXAVVST.js";
|
|
76
|
+
import {
|
|
77
|
+
git_closes_keyword
|
|
78
|
+
} from "./chunk-J3TKZLHA.js";
|
|
79
|
+
import "./chunk-IZVM2TTH.js";
|
|
80
|
+
import "./chunk-2IESYBZH.js";
|
|
81
|
+
import {
|
|
82
|
+
split_assess
|
|
83
|
+
} from "./chunk-5PAEXYIY.js";
|
|
84
|
+
import "./chunk-RQRLW4XK.js";
|
|
85
|
+
import "./chunk-TPKFVVJQ.js";
|
|
86
|
+
import "./chunk-BPSJSHYD.js";
|
|
87
|
+
import "./chunk-VDGNXSP3.js";
|
|
88
|
+
import {
|
|
89
|
+
confirmation_options,
|
|
90
|
+
telegram_notify
|
|
91
|
+
} from "./chunk-WJ4NEDNI.js";
|
|
92
|
+
import {
|
|
93
|
+
github_issue_url
|
|
94
|
+
} from "./chunk-S4X5PJV7.js";
|
|
95
|
+
import "./chunk-5HVYOIIK.js";
|
|
96
|
+
import "./chunk-D4SZK7H2.js";
|
|
97
|
+
import "./chunk-OJ4LGBVD.js";
|
|
98
|
+
import "./chunk-3RIQ36LH.js";
|
|
99
|
+
import "./chunk-2ADQ5XRD.js";
|
|
100
|
+
import {
|
|
101
|
+
cli_body
|
|
102
|
+
} from "./chunk-7IZJ5MG2.js";
|
|
103
|
+
import "./chunk-HXCZ3KWS.js";
|
|
104
|
+
import "./chunk-HOSZITJM.js";
|
|
105
|
+
import {
|
|
106
|
+
issue_watch_gate
|
|
107
|
+
} from "./chunk-D3SHCUBC.js";
|
|
108
|
+
import {
|
|
109
|
+
issue_watch
|
|
110
|
+
} from "./chunk-NFEBQED3.js";
|
|
111
|
+
import {
|
|
112
|
+
DEFAULT_STABLE_READS,
|
|
113
|
+
WATCH_CONFIRMED_STABLE_READS,
|
|
114
|
+
git_gh_command,
|
|
115
|
+
git_pr_checks
|
|
116
|
+
} from "./chunk-RX5JSPPH.js";
|
|
117
|
+
import "./chunk-U7XU5RG3.js";
|
|
118
|
+
import "./chunk-GJYMI2CM.js";
|
|
119
|
+
import "./chunk-U2UH4VM4.js";
|
|
120
|
+
import "./chunk-WGULS5DA.js";
|
|
121
|
+
import {
|
|
122
|
+
is_retry_pending,
|
|
123
|
+
note_unreadable_stop,
|
|
124
|
+
require_pr_number
|
|
125
|
+
} from "./chunk-23GH6B3D.js";
|
|
126
|
+
import "./chunk-GU5ML3Y3.js";
|
|
127
|
+
import {
|
|
128
|
+
gh_comment_input
|
|
129
|
+
} from "./chunk-BJKEXXY6.js";
|
|
130
|
+
import {
|
|
131
|
+
run_progress_clock
|
|
132
|
+
} from "./chunk-RGGEQM6G.js";
|
|
133
|
+
import "./chunk-3WWQFCGX.js";
|
|
134
|
+
import "./chunk-LAYSCY4L.js";
|
|
135
|
+
import {
|
|
136
|
+
followup_checks_event,
|
|
137
|
+
followup_ci_path,
|
|
138
|
+
followup_coderabbit_wait,
|
|
139
|
+
git_followup_stages
|
|
140
|
+
} from "./chunk-E2ZCUKHT.js";
|
|
141
|
+
import {
|
|
142
|
+
CHECK_STATUS_FAIL,
|
|
143
|
+
CHECK_STATUS_PASS,
|
|
144
|
+
CODERABBIT_CHECK_NAME,
|
|
145
|
+
FAILURE_MESSAGE_PREFIX,
|
|
146
|
+
MissingContextError,
|
|
147
|
+
PrConflictError,
|
|
148
|
+
is_coderabbit_check,
|
|
149
|
+
is_required_check,
|
|
150
|
+
is_required_match,
|
|
151
|
+
matches_any,
|
|
152
|
+
parse_pr_state_snapshot
|
|
153
|
+
} from "./chunk-WVR4RUFP.js";
|
|
154
|
+
import "./chunk-HH2KDLTP.js";
|
|
155
|
+
import "./chunk-HE5S4XRE.js";
|
|
156
|
+
import {
|
|
157
|
+
review_interaction
|
|
158
|
+
} from "./chunk-V5OIPYA6.js";
|
|
159
|
+
import "./chunk-RVUJ6F5L.js";
|
|
160
|
+
import "./chunk-MY3RSOS5.js";
|
|
161
|
+
import "./chunk-KVURNO74.js";
|
|
162
|
+
import "./chunk-QHWJJ6X5.js";
|
|
163
|
+
import "./chunk-REPANBLS.js";
|
|
164
|
+
import "./chunk-Q6SKKQVJ.js";
|
|
165
|
+
import "./chunk-EWA72KO7.js";
|
|
166
|
+
import {
|
|
167
|
+
review_attest
|
|
168
|
+
} from "./chunk-KIILCKQR.js";
|
|
169
|
+
import "./chunk-WG6GYBRJ.js";
|
|
170
|
+
import "./chunk-CRNPPKP2.js";
|
|
171
|
+
import "./chunk-ZDSDPKCD.js";
|
|
172
|
+
import "./chunk-MVPUQLN5.js";
|
|
173
|
+
import "./chunk-5SB37YDW.js";
|
|
174
|
+
import "./chunk-VW5SGE7A.js";
|
|
175
|
+
import "./chunk-ICEMFE2V.js";
|
|
176
|
+
import "./chunk-BIKGPT52.js";
|
|
177
|
+
import "./chunk-PDDKRHHS.js";
|
|
178
|
+
import "./chunk-55I7OYHI.js";
|
|
179
|
+
import "./chunk-DJVMC3U2.js";
|
|
180
|
+
import "./chunk-MSPIR3OA.js";
|
|
181
|
+
import "./chunk-QQZOQ7AM.js";
|
|
182
|
+
import "./chunk-AWLYN2SP.js";
|
|
183
|
+
import "./chunk-L6XN3EXI.js";
|
|
184
|
+
import "./chunk-KB3OQWDT.js";
|
|
185
|
+
import "./chunk-FGL6DBZU.js";
|
|
186
|
+
import {
|
|
187
|
+
review_stamps
|
|
188
|
+
} from "./chunk-L6LU2633.js";
|
|
189
|
+
import "./chunk-CGLLAEKZ.js";
|
|
190
|
+
import "./chunk-WL5JHB3I.js";
|
|
191
|
+
import {
|
|
192
|
+
observation_ledger
|
|
193
|
+
} from "./chunk-4BEIYKI2.js";
|
|
194
|
+
import "./chunk-LE2T3FGJ.js";
|
|
195
|
+
import "./chunk-LQXFVZTS.js";
|
|
196
|
+
import "./chunk-F2HFWLQR.js";
|
|
197
|
+
import "./chunk-6NV2F7QH.js";
|
|
198
|
+
import "./chunk-REMKUFAC.js";
|
|
199
|
+
import "./chunk-VGHSZLYQ.js";
|
|
200
|
+
import "./chunk-7LJQMM2K.js";
|
|
201
|
+
import "./chunk-MGF64OHV.js";
|
|
202
|
+
import "./chunk-RK4HE5NW.js";
|
|
203
|
+
import "./chunk-O26Y2FOJ.js";
|
|
204
|
+
import "./chunk-XH6BGVVP.js";
|
|
205
|
+
import "./chunk-RXAZJMSZ.js";
|
|
206
|
+
import "./chunk-3PEXBHRN.js";
|
|
207
|
+
import {
|
|
208
|
+
managed_config_scope
|
|
209
|
+
} from "./chunk-RZ4OKKPM.js";
|
|
210
|
+
import "./chunk-PBOS7MTW.js";
|
|
211
|
+
import "./chunk-2NSB5ZYQ.js";
|
|
212
|
+
import "./chunk-2MJ4OCDL.js";
|
|
213
|
+
import "./chunk-IW6NWCSN.js";
|
|
214
|
+
import "./chunk-UCI4AL3Q.js";
|
|
215
|
+
import "./chunk-QS5USD4T.js";
|
|
216
|
+
import "./chunk-WWC5L3AO.js";
|
|
217
|
+
import "./chunk-XYAK53TK.js";
|
|
218
|
+
import "./chunk-Y2RNUX4W.js";
|
|
219
|
+
import "./chunk-FCINBCKB.js";
|
|
220
|
+
import {
|
|
221
|
+
git_branch
|
|
222
|
+
} from "./chunk-Q5Q2QYVU.js";
|
|
223
|
+
import "./chunk-GO3GH7FG.js";
|
|
224
|
+
import {
|
|
225
|
+
git_error
|
|
226
|
+
} from "./chunk-KVHNQHX3.js";
|
|
227
|
+
import "./chunk-7HCPRVMB.js";
|
|
228
|
+
import "./chunk-RSSJWMQS.js";
|
|
229
|
+
import "./chunk-FNQW6NY7.js";
|
|
230
|
+
import "./chunk-337QQM4C.js";
|
|
231
|
+
import "./chunk-BEE7OAQ5.js";
|
|
232
|
+
import "./chunk-DBKTFB5V.js";
|
|
233
|
+
import "./chunk-UCQJDYE3.js";
|
|
234
|
+
import "./chunk-TCBUX52E.js";
|
|
235
|
+
import "./chunk-KXHXMERX.js";
|
|
236
|
+
import "./chunk-MDLOETXL.js";
|
|
237
|
+
import "./chunk-65E4OZJ7.js";
|
|
238
|
+
import {
|
|
239
|
+
josh_environment_file
|
|
240
|
+
} from "./chunk-NFKULY26.js";
|
|
241
|
+
import {
|
|
242
|
+
lane_registry
|
|
243
|
+
} from "./chunk-LRS2OS5J.js";
|
|
244
|
+
import "./chunk-AI5K4QJO.js";
|
|
245
|
+
import "./chunk-7S6VRZOH.js";
|
|
246
|
+
import "./chunk-LULJUD6P.js";
|
|
247
|
+
import "./chunk-TBNQIFWL.js";
|
|
248
|
+
import {
|
|
249
|
+
run_hold
|
|
250
|
+
} from "./chunk-P4CWLRT2.js";
|
|
251
|
+
import "./chunk-XFPEUYDV.js";
|
|
252
|
+
import "./chunk-5ZTQX7OS.js";
|
|
253
|
+
import "./chunk-HCA5QG2U.js";
|
|
254
|
+
import "./chunk-C2SEDMZ3.js";
|
|
255
|
+
import "./chunk-LRA3PXHS.js";
|
|
256
|
+
import "./chunk-6OP63TBT.js";
|
|
257
|
+
import "./chunk-TVZXG4Y4.js";
|
|
258
|
+
import "./chunk-FIUCHMCF.js";
|
|
259
|
+
import "./chunk-XXNEY4B3.js";
|
|
260
|
+
import {
|
|
261
|
+
git_gh_helpers
|
|
262
|
+
} from "./chunk-4PUKDAXL.js";
|
|
263
|
+
import "./chunk-EWVR5AEX.js";
|
|
264
|
+
import "./chunk-C6QSVO5K.js";
|
|
265
|
+
import "./chunk-W3FX7FYN.js";
|
|
266
|
+
import "./chunk-ZBFNQUY7.js";
|
|
267
|
+
import "./chunk-U3IVVR4W.js";
|
|
268
|
+
import "./chunk-O3NDWYNT.js";
|
|
269
|
+
import "./chunk-34LAULSC.js";
|
|
270
|
+
import "./chunk-5Y7QQYTU.js";
|
|
271
|
+
import {
|
|
272
|
+
ai_review_pull_comment_schema,
|
|
273
|
+
pull_comment_schema
|
|
274
|
+
} from "./chunk-34DND4BA.js";
|
|
275
|
+
import "./chunk-NSAVEXVR.js";
|
|
276
|
+
import "./chunk-P4KIQRSL.js";
|
|
277
|
+
import {
|
|
278
|
+
NEEDS_HUMAN_MERGE_LABEL,
|
|
279
|
+
REPOSITORY_LABELS
|
|
280
|
+
} from "./chunk-QQBMVC5W.js";
|
|
281
|
+
import "./chunk-TUIFS5E7.js";
|
|
282
|
+
import "./chunk-QAHFPCFR.js";
|
|
283
|
+
import "./chunk-66TGK5XL.js";
|
|
284
|
+
import "./chunk-EZSO25UZ.js";
|
|
285
|
+
import "./chunk-2DJLAUYB.js";
|
|
286
|
+
import "./chunk-EW4NPUMQ.js";
|
|
287
|
+
import "./chunk-BF6YX4HE.js";
|
|
288
|
+
import "./chunk-3LZXX5GL.js";
|
|
289
|
+
import "./chunk-W2IA2LV3.js";
|
|
290
|
+
import "./chunk-OHNP3QL2.js";
|
|
291
|
+
import "./chunk-X7PN54LZ.js";
|
|
292
|
+
import "./chunk-MDKDJF2K.js";
|
|
293
|
+
import {
|
|
294
|
+
issue_cite
|
|
295
|
+
} from "./chunk-HQ2HSZBN.js";
|
|
296
|
+
import "./chunk-WQ6FS544.js";
|
|
297
|
+
import "./chunk-6HRRZANN.js";
|
|
298
|
+
import {
|
|
299
|
+
lane_ledger_write
|
|
300
|
+
} from "./chunk-I63RNFFR.js";
|
|
301
|
+
import "./chunk-MPGJ4ONJ.js";
|
|
302
|
+
import "./chunk-6WKJ3GDA.js";
|
|
303
|
+
import "./chunk-YIA6FC3K.js";
|
|
304
|
+
import "./chunk-JQXPLMCO.js";
|
|
305
|
+
import {
|
|
306
|
+
issue_number_shape
|
|
307
|
+
} from "./chunk-66NX6EXR.js";
|
|
308
|
+
import "./chunk-3NWAGIA6.js";
|
|
309
|
+
import "./chunk-2FE3C4PH.js";
|
|
310
|
+
import "./chunk-HLUS2M3D.js";
|
|
311
|
+
import {
|
|
312
|
+
PR_POLL_SCHEDULES,
|
|
313
|
+
poll
|
|
314
|
+
} from "./chunk-SBGTCT2C.js";
|
|
315
|
+
import "./chunk-AKK56GNX.js";
|
|
316
|
+
import "./chunk-TBIX5FRN.js";
|
|
317
|
+
import "./chunk-IGD6QJPH.js";
|
|
318
|
+
import "./chunk-FFHEGWPK.js";
|
|
319
|
+
import "./chunk-R6QE5VJG.js";
|
|
320
|
+
import "./chunk-4ZHWTTQW.js";
|
|
321
|
+
import {
|
|
322
|
+
git_gh_api_path
|
|
323
|
+
} from "./chunk-RDRN56E4.js";
|
|
324
|
+
import {
|
|
325
|
+
git_gh_exec,
|
|
326
|
+
parse_json_array_or_undefined
|
|
327
|
+
} from "./chunk-XDF25GSU.js";
|
|
328
|
+
import "./chunk-EBVS2LKX.js";
|
|
329
|
+
import "./chunk-AQ3PMSXK.js";
|
|
330
|
+
import "./chunk-QVOFWFWC.js";
|
|
331
|
+
import "./chunk-G6BXCWPH.js";
|
|
332
|
+
import "./chunk-CDY4NFQG.js";
|
|
333
|
+
import "./chunk-OKYFQJW3.js";
|
|
334
|
+
import "./chunk-HHBC6QZE.js";
|
|
335
|
+
import "./chunk-QWWTC3XR.js";
|
|
336
|
+
import "./chunk-ILGPZ47M.js";
|
|
337
|
+
import "./chunk-3CCGKX7Y.js";
|
|
338
|
+
import "./chunk-KSR23NYN.js";
|
|
339
|
+
import "./chunk-D5TAR6TV.js";
|
|
340
|
+
import "./chunk-G47ZNQVG.js";
|
|
341
|
+
import {
|
|
342
|
+
changed_paths
|
|
343
|
+
} from "./chunk-V5FD7DVV.js";
|
|
344
|
+
import "./chunk-36LOGVJ7.js";
|
|
345
|
+
import "./chunk-ENFPR7J2.js";
|
|
346
|
+
import "./chunk-F7XLEK55.js";
|
|
347
|
+
import "./chunk-UGCUSRZF.js";
|
|
348
|
+
import {
|
|
349
|
+
git_command
|
|
350
|
+
} from "./chunk-AKQYYHP2.js";
|
|
351
|
+
import {
|
|
352
|
+
git_spawn
|
|
353
|
+
} from "./chunk-CJKPF5DJ.js";
|
|
354
|
+
import "./chunk-RBU2NKHF.js";
|
|
355
|
+
import "./chunk-NKKH3PBE.js";
|
|
356
|
+
import "./chunk-B77ZMVHS.js";
|
|
357
|
+
import "./chunk-B5GXZK3E.js";
|
|
358
|
+
import "./chunk-KTLR4Y32.js";
|
|
359
|
+
import "./chunk-ZNX2LJCQ.js";
|
|
360
|
+
import "./chunk-VJE3RJAX.js";
|
|
361
|
+
import "./chunk-WPAQUMHC.js";
|
|
362
|
+
import {
|
|
363
|
+
json_value
|
|
364
|
+
} from "./chunk-HIU2WXB6.js";
|
|
365
|
+
|
|
366
|
+
// scripts/followup/git-followup-workflow.ts
|
|
367
|
+
import { parseArgs } from "node:util";
|
|
368
|
+
|
|
369
|
+
// scripts/lane/lane-size-record.ts
|
|
370
|
+
async function measure_and_record(issue) {
|
|
371
|
+
const declared = await issue_declared_size.read(issue);
|
|
372
|
+
if (declared === void 0) return;
|
|
373
|
+
const measurement = await split_measure.read_branch();
|
|
374
|
+
await lane_ledger_write.record_size({
|
|
375
|
+
issue: Number(issue),
|
|
376
|
+
declared,
|
|
377
|
+
actual: { files: measurement.files, lines: measurement.lines },
|
|
378
|
+
missed: split_assess.notice(measurement, declared) !== void 0
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
async function record(should_merge, issue) {
|
|
382
|
+
if (!should_merge || issue === void 0) return;
|
|
383
|
+
try {
|
|
384
|
+
await measure_and_record(issue);
|
|
385
|
+
} catch {
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
var lane_size_record = { record };
|
|
389
|
+
|
|
390
|
+
// scripts/notify/git-notify.ts
|
|
391
|
+
var DEFAULT_NOTIFY_MESSAGE = "Implementation is complete. Please review.";
|
|
392
|
+
function parse_notify_target(raw_target) {
|
|
393
|
+
if (raw_target === void 0) return void 0;
|
|
394
|
+
if (raw_target === "pr") return "pr";
|
|
395
|
+
if (raw_target === "issue") return "issue";
|
|
396
|
+
if (raw_target === "both") return "both";
|
|
397
|
+
throw new Error(`Invalid notify target: ${raw_target}. Use pr, issue, or both.`);
|
|
398
|
+
}
|
|
399
|
+
function split_and_trim(value) {
|
|
400
|
+
return value.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
|
|
401
|
+
}
|
|
402
|
+
function normalize_mention(mention) {
|
|
403
|
+
return mention.startsWith("@") ? mention : `@${mention}`;
|
|
404
|
+
}
|
|
405
|
+
function parse_notify_mentions(raw_mentions) {
|
|
406
|
+
if (raw_mentions === void 0) return [];
|
|
407
|
+
return split_and_trim(raw_mentions).map((mention) => normalize_mention(mention));
|
|
408
|
+
}
|
|
409
|
+
function resolve_notify_message(raw_message) {
|
|
410
|
+
if (raw_message === void 0 || raw_message.trim().length === 0) return DEFAULT_NOTIFY_MESSAGE;
|
|
411
|
+
return raw_message;
|
|
412
|
+
}
|
|
413
|
+
function build_notify_config(input) {
|
|
414
|
+
const parsed_target = parse_notify_target(input.raw_target);
|
|
415
|
+
if (parsed_target === void 0) return void 0;
|
|
416
|
+
return {
|
|
417
|
+
target: parsed_target,
|
|
418
|
+
message: resolve_notify_message(input.raw_message),
|
|
419
|
+
mentions: parse_notify_mentions(input.raw_mentions)
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
function note_section(notes) {
|
|
423
|
+
if (notes === void 0 || notes.length === 0) return [];
|
|
424
|
+
return ["", ...notes];
|
|
425
|
+
}
|
|
426
|
+
function build_completion_comment_body(input) {
|
|
427
|
+
const base_lines = [`\u2705 ${input.message}`];
|
|
428
|
+
const issue_lines = input.issue_number === void 0 ? [] : [`Issue: ${issue_cite.plain_for("telegram", input.issue_number)}`];
|
|
429
|
+
const pr_lines = input.pr_url === void 0 ? [] : [`PR: ${input.pr_url}`];
|
|
430
|
+
const note_lines = note_section(input.notes);
|
|
431
|
+
const mention_lines = input.mentions.length === 0 ? [] : ["", input.mentions.join(" ")];
|
|
432
|
+
return [...base_lines, ...issue_lines, ...pr_lines, ...note_lines, ...mention_lines].join("\n");
|
|
433
|
+
}
|
|
434
|
+
var git_notify = {
|
|
435
|
+
build_notify_config,
|
|
436
|
+
build_completion_comment_body
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
// scripts/followup/followup-human-merge.ts
|
|
440
|
+
import { z } from "zod";
|
|
441
|
+
var WORKFLOW_PREFIX = ".github/workflows/";
|
|
442
|
+
var FILE_LIMIT = 300;
|
|
443
|
+
var HEAD_CHANGED = "The pull request head changed; rerun followup";
|
|
444
|
+
var FILES_SCHEMA = z.array(
|
|
445
|
+
z.object({ filename: z.string(), previous_filename: z.string().optional() })
|
|
446
|
+
);
|
|
447
|
+
var PULL_SCHEMA = z.object({
|
|
448
|
+
base: z.object({ sha: z.string().min(1) }),
|
|
449
|
+
head: z.object({ sha: z.string().min(1) })
|
|
450
|
+
});
|
|
451
|
+
var COMPARISON_SCHEMA = z.object({ files: FILES_SCHEMA });
|
|
452
|
+
var HumanMergeRequiredError = class extends Error {
|
|
453
|
+
name = "HumanMergeRequiredError";
|
|
454
|
+
};
|
|
455
|
+
function touches_workflow(files) {
|
|
456
|
+
return files.some(
|
|
457
|
+
(file) => file.filename.startsWith(WORKFLOW_PREFIX) || file.previous_filename?.startsWith(WORKFLOW_PREFIX) === true
|
|
458
|
+
);
|
|
459
|
+
}
|
|
460
|
+
async function comparison_path(branch, expected_head) {
|
|
461
|
+
const number = await require_pr_number(branch);
|
|
462
|
+
const pull_raw = await git_gh_exec.exec_gh_api({
|
|
463
|
+
path: git_gh_api_path.pull_api_path(String(number))
|
|
464
|
+
});
|
|
465
|
+
const pull = json_value.parse_with(pull_raw, PULL_SCHEMA);
|
|
466
|
+
if (pull === void 0) throw new Error("Cannot read the pull request comparison commits");
|
|
467
|
+
if (expected_head !== void 0 && pull.head.sha !== expected_head) {
|
|
468
|
+
throw new Error(HEAD_CHANGED);
|
|
469
|
+
}
|
|
470
|
+
return `${git_gh_api_path.repo_api_path()}/compare/${encodeURIComponent(pull.base.sha)}...${encodeURIComponent(pull.head.sha)}?per_page=1`;
|
|
471
|
+
}
|
|
472
|
+
async function read_files(branch, expected_head) {
|
|
473
|
+
const raw = await git_gh_exec.exec_gh_api({ path: await comparison_path(branch, expected_head) });
|
|
474
|
+
const comparison = json_value.parse_with(raw, COMPARISON_SCHEMA);
|
|
475
|
+
if (comparison === void 0 || comparison.files.length >= FILE_LIMIT) {
|
|
476
|
+
throw new Error("Cannot authorize a merge without a complete pull request file listing");
|
|
477
|
+
}
|
|
478
|
+
return comparison.files;
|
|
479
|
+
}
|
|
480
|
+
async function mark_waiting(branch, issue) {
|
|
481
|
+
const number = issue ?? git_closes_keyword.parse_closes_issue_number(await git_gh_command.pr_get_body(branch));
|
|
482
|
+
if (number === void 0) throw new Error("The workflow pull request must identify its Issue");
|
|
483
|
+
const definition = REPOSITORY_LABELS.find((label) => label.name === NEEDS_HUMAN_MERGE_LABEL);
|
|
484
|
+
if (definition === void 0) throw new Error("The human merge label definition is missing");
|
|
485
|
+
await git_gh_command.label_ensure(definition);
|
|
486
|
+
if (!await git_gh_command.issue_add_label(number, NEEDS_HUMAN_MERGE_LABEL)) {
|
|
487
|
+
throw new Error("Could not label the Issue waiting for a human merge");
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
async function assert_head(branch, expected_head) {
|
|
491
|
+
if (expected_head === void 0) return;
|
|
492
|
+
const state = await git_gh_command.pr_get_merge_state(branch);
|
|
493
|
+
if (state?.head_sha !== expected_head) {
|
|
494
|
+
throw new Error(HEAD_CHANGED);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
async function assert_allowed(branch, issue, expected_head) {
|
|
498
|
+
const files = await read_files(branch, expected_head);
|
|
499
|
+
await assert_head(branch, expected_head);
|
|
500
|
+
if (!touches_workflow(files)) return;
|
|
501
|
+
const url = await git_gh_command.pr_get_url(branch);
|
|
502
|
+
if (url === void 0) throw new Error("Could not read the workflow pull request URL");
|
|
503
|
+
await mark_waiting(branch, issue);
|
|
504
|
+
throw new HumanMergeRequiredError(
|
|
505
|
+
`Human merge required: ${url}
|
|
506
|
+
Read the diff on GitHub and merge the pull request there.`
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
var followup_human_merge = { assert_allowed };
|
|
510
|
+
|
|
511
|
+
// scripts/followup/followup-issue-number.ts
|
|
512
|
+
function parse_issue_number_from_text(input) {
|
|
513
|
+
if (input === void 0) return void 0;
|
|
514
|
+
const trimmed = input.trim();
|
|
515
|
+
const direct_match = /^#?(\d+)$/u.exec(trimmed);
|
|
516
|
+
if (direct_match?.[1] !== void 0) return direct_match[1];
|
|
517
|
+
const title_match = /#(\d+)$/u.exec(trimmed);
|
|
518
|
+
return title_match?.[1];
|
|
519
|
+
}
|
|
520
|
+
function parse_completed_issue_number(raw) {
|
|
521
|
+
const digits = parse_issue_number_from_text(raw);
|
|
522
|
+
return digits === void 0 ? void 0 : Number(digits);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// scripts/followup/followup-review-gates.ts
|
|
526
|
+
function is_merge_permitted(status) {
|
|
527
|
+
return status === "ok" || status === "not-required";
|
|
528
|
+
}
|
|
529
|
+
function is_valid_issue(issue_number) {
|
|
530
|
+
return issue_number !== void 0 && issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue_number);
|
|
531
|
+
}
|
|
532
|
+
async function assert_review_attested(should_merge) {
|
|
533
|
+
if (!should_merge) return;
|
|
534
|
+
const verdict = await review_attest.check_here();
|
|
535
|
+
if (!is_merge_permitted(verdict.status)) throw new Error(review_attest.refusal_message(verdict));
|
|
536
|
+
const refusal = await issue_watch_gate.review_refusal_here();
|
|
537
|
+
if (refusal !== void 0) throw new Error(refusal);
|
|
538
|
+
}
|
|
539
|
+
async function assert_review_recorded(should_merge, issue_number) {
|
|
540
|
+
if (!should_merge || !is_valid_issue(issue_number)) return;
|
|
541
|
+
const issue = Number(issue_number);
|
|
542
|
+
const verdict = await review_record.check(issue);
|
|
543
|
+
if (!is_merge_permitted(verdict.status)) throw new Error(review_record.refusal_message(issue));
|
|
544
|
+
const refusal = await review_interaction.refusal(issue);
|
|
545
|
+
if (refusal !== void 0) throw new Error(refusal);
|
|
546
|
+
}
|
|
547
|
+
var followup_review_gates = {
|
|
548
|
+
assert_review_attested,
|
|
549
|
+
assert_review_recorded,
|
|
550
|
+
is_valid_issue
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
// scripts/followup/followup-section.ts
|
|
554
|
+
var SUCCESS_EXIT_CODE = 0;
|
|
555
|
+
var FOLLOWUP = "followup";
|
|
556
|
+
var UNRESOLVED_MESSAGE = "The section that governs `josh followup` could not be printed.";
|
|
557
|
+
var { SHIPPED_ENVIRONMENT, is_ship_run } = followup_ship_environment;
|
|
558
|
+
function print_section(root = process.cwd(), source = process.env) {
|
|
559
|
+
if (is_ship_run(source)) return;
|
|
560
|
+
if (run_step_section.print_once(FOLLOWUP, root) !== SUCCESS_EXIT_CODE) {
|
|
561
|
+
throw new Error(UNRESOLVED_MESSAGE);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
var followup_section = { SHIPPED_ENVIRONMENT, UNRESOLVED_MESSAGE, print_section };
|
|
565
|
+
|
|
566
|
+
// scripts/followup/git-followup-cleanup.ts
|
|
567
|
+
function report_failure(step, error) {
|
|
568
|
+
console.warn("");
|
|
569
|
+
console.warn(
|
|
570
|
+
`\u26A0\uFE0F ${step.label} failed after the merge: ${git_gh_helpers.get_error_message_with_stderr(error)}`
|
|
571
|
+
);
|
|
572
|
+
if (step.recovery !== void 0) console.warn(` Recovery: ${step.recovery}`);
|
|
573
|
+
console.warn("");
|
|
574
|
+
}
|
|
575
|
+
async function run_step(step) {
|
|
576
|
+
try {
|
|
577
|
+
await step.run();
|
|
578
|
+
return true;
|
|
579
|
+
} catch (error) {
|
|
580
|
+
report_failure(step, error);
|
|
581
|
+
return false;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
async function run_guarded_step(is_guarded, step) {
|
|
585
|
+
if (!is_guarded) {
|
|
586
|
+
await step.run();
|
|
587
|
+
return true;
|
|
588
|
+
}
|
|
589
|
+
return await run_step(step);
|
|
590
|
+
}
|
|
591
|
+
async function run_guarded_steps(is_guarded, steps) {
|
|
592
|
+
let is_complete = true;
|
|
593
|
+
for (const step of steps) {
|
|
594
|
+
const is_done = await run_guarded_step(is_guarded, step);
|
|
595
|
+
if (!is_done) is_complete = false;
|
|
596
|
+
}
|
|
597
|
+
return is_complete;
|
|
598
|
+
}
|
|
599
|
+
var git_followup_cleanup = {
|
|
600
|
+
run_step,
|
|
601
|
+
run_guarded_step,
|
|
602
|
+
run_guarded_steps
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
// scripts/followup/git-followup-finish.ts
|
|
606
|
+
var MAIN_SYNC = "main:sync";
|
|
607
|
+
async function read_pending_release() {
|
|
608
|
+
const line = await git_followup_pending.pending_release_line({ is_merge_pending: false });
|
|
609
|
+
return line === void 0 ? [] : [line];
|
|
610
|
+
}
|
|
611
|
+
async function print_pending_release() {
|
|
612
|
+
const lines2 = await read_pending_release();
|
|
613
|
+
for (const line of lines2) console.info(line);
|
|
614
|
+
}
|
|
615
|
+
async function read_next_issues(completed_issue_number, should_merge) {
|
|
616
|
+
if (!should_merge) return [];
|
|
617
|
+
return await git_next_issues.fetch_next_issue_lines(
|
|
618
|
+
parse_completed_issue_number(completed_issue_number)
|
|
619
|
+
);
|
|
620
|
+
}
|
|
621
|
+
async function print_next_issues(completed_issue_number) {
|
|
622
|
+
const lines2 = await read_next_issues(completed_issue_number, true);
|
|
623
|
+
for (const line of lines2) console.info(line);
|
|
624
|
+
}
|
|
625
|
+
async function print_completion(issue_number, should_merge) {
|
|
626
|
+
const started_ms = performance.now();
|
|
627
|
+
const [next_lines, release_lines] = await Promise.all([
|
|
628
|
+
read_next_issues(issue_number, should_merge),
|
|
629
|
+
read_pending_release()
|
|
630
|
+
]);
|
|
631
|
+
const duration_ms = performance.now() - started_ms;
|
|
632
|
+
console.info(
|
|
633
|
+
git_followup_stages.format_stage({ name: git_followup_stages.STAGE.completion, duration_ms })
|
|
634
|
+
);
|
|
635
|
+
console.info("");
|
|
636
|
+
console.info("\u2705 PR followup completed.");
|
|
637
|
+
for (const line of [...next_lines, ...release_lines]) console.info(line);
|
|
638
|
+
}
|
|
639
|
+
function clear_round_one_snapshot(should_merge) {
|
|
640
|
+
if (should_merge) review_stamps.clear_round_one();
|
|
641
|
+
}
|
|
642
|
+
async function clear_review_target(should_merge) {
|
|
643
|
+
if (!should_merge) return;
|
|
644
|
+
try {
|
|
645
|
+
await review_attest.clear_here();
|
|
646
|
+
} catch {
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
async function clear_issue_watch(should_merge) {
|
|
650
|
+
if (!should_merge) return;
|
|
651
|
+
try {
|
|
652
|
+
await issue_watch.clear_here();
|
|
653
|
+
} catch {
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
async function clear_review_records(should_merge) {
|
|
657
|
+
clear_round_one_snapshot(should_merge);
|
|
658
|
+
await clear_review_target(should_merge);
|
|
659
|
+
await clear_issue_watch(should_merge);
|
|
660
|
+
}
|
|
661
|
+
async function release_worktree_hold(should_merge) {
|
|
662
|
+
if (!should_merge) return;
|
|
663
|
+
try {
|
|
664
|
+
const directory = await run_hold.worktree_directory();
|
|
665
|
+
if (directory !== void 0) run_hold.release_hold(run_hold.hold_path(directory));
|
|
666
|
+
} catch {
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
async function end_progress_watcher(should_merge) {
|
|
670
|
+
if (!should_merge) return;
|
|
671
|
+
try {
|
|
672
|
+
const directory = await run_hold.worktree_directory();
|
|
673
|
+
if (directory === void 0) return;
|
|
674
|
+
run_progress_clock.end_life(run_progress_clock.life_target_of(directory));
|
|
675
|
+
} catch {
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
function build_report_steps(issue_number, should_merge) {
|
|
679
|
+
return [
|
|
680
|
+
// No `recovery`: the completion output is console text, which nothing re-prints.
|
|
681
|
+
{
|
|
682
|
+
label: "The completion output",
|
|
683
|
+
recovery: void 0,
|
|
684
|
+
run: async () => {
|
|
685
|
+
await print_completion(issue_number, should_merge);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
];
|
|
689
|
+
}
|
|
690
|
+
function build_record_steps(should_merge) {
|
|
691
|
+
return [
|
|
692
|
+
{
|
|
693
|
+
label: "The review records",
|
|
694
|
+
recovery: void 0,
|
|
695
|
+
run: async () => {
|
|
696
|
+
await clear_review_records(should_merge);
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
label: "The working-tree hold release",
|
|
701
|
+
// **The forced spelling, because the run that wrote the record is this one and it is
|
|
702
|
+
// ending**. A release names the run it belongs to, so a person
|
|
703
|
+
// finishing this step by hand is releasing a record they did not write — the plain form
|
|
704
|
+
// would answer `held` and remove nothing, which is a printed recovery that cannot recover.
|
|
705
|
+
recovery: "pnpm josh run:release --force",
|
|
706
|
+
run: async () => {
|
|
707
|
+
await release_worktree_hold(should_merge);
|
|
708
|
+
}
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
label: "The progress watcher",
|
|
712
|
+
// No recovery: the record is presence-only and the watcher's own bound ends it regardless,
|
|
713
|
+
// so there is nothing a person types to finish this step by hand.
|
|
714
|
+
recovery: void 0,
|
|
715
|
+
run: async () => {
|
|
716
|
+
await end_progress_watcher(should_merge);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
];
|
|
720
|
+
}
|
|
721
|
+
async function is_on_default_branch(root) {
|
|
722
|
+
const [current, default_branch] = await Promise.all([
|
|
723
|
+
git_command.branch_at(root),
|
|
724
|
+
git_command.get_default_branch()
|
|
725
|
+
]);
|
|
726
|
+
return current === default_branch;
|
|
727
|
+
}
|
|
728
|
+
async function sync_main_checkout(should_merge) {
|
|
729
|
+
if (!should_merge) return;
|
|
730
|
+
const root = await lane_registry.main_repository_root();
|
|
731
|
+
if (!await is_on_default_branch(root)) {
|
|
732
|
+
console.info(`${MAIN_SYNC} skipped: ${root} is not on the default branch`);
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
josh_command.require_success(await josh_command.josh_run_at([MAIN_SYNC], root), MAIN_SYNC);
|
|
736
|
+
}
|
|
737
|
+
function build_sync_steps(should_merge) {
|
|
738
|
+
return [
|
|
739
|
+
{
|
|
740
|
+
label: "The main checkout sync",
|
|
741
|
+
recovery: "pnpm josh main:sync (in the primary checkout)",
|
|
742
|
+
run: async () => {
|
|
743
|
+
await sync_main_checkout(should_merge);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
];
|
|
747
|
+
}
|
|
748
|
+
function build_finish_steps(issue_number, should_merge) {
|
|
749
|
+
return [
|
|
750
|
+
...build_report_steps(issue_number, should_merge),
|
|
751
|
+
...build_record_steps(should_merge),
|
|
752
|
+
...build_sync_steps(should_merge)
|
|
753
|
+
];
|
|
754
|
+
}
|
|
755
|
+
async function finish(issue_number, should_merge) {
|
|
756
|
+
return await git_followup_cleanup.run_guarded_steps(
|
|
757
|
+
should_merge,
|
|
758
|
+
build_finish_steps(issue_number, should_merge)
|
|
759
|
+
);
|
|
760
|
+
}
|
|
761
|
+
var git_followup_finish = {
|
|
762
|
+
finish,
|
|
763
|
+
build_finish_steps,
|
|
764
|
+
print_completion,
|
|
765
|
+
print_next_issues,
|
|
766
|
+
print_pending_release,
|
|
767
|
+
clear_review_records,
|
|
768
|
+
release_worktree_hold,
|
|
769
|
+
end_progress_watcher,
|
|
770
|
+
sync_main_checkout
|
|
771
|
+
};
|
|
772
|
+
|
|
773
|
+
// scripts/followup/git-followup-flush.ts
|
|
774
|
+
var COMMIT_MESSAGE_PREFIX = "Record observation ledger entries";
|
|
775
|
+
function commit_message(issue_number) {
|
|
776
|
+
return issue_number === void 0 ? COMMIT_MESSAGE_PREFIX : `${COMMIT_MESSAGE_PREFIX} ${issue_cite.plain_for("github", issue_number)}`;
|
|
777
|
+
}
|
|
778
|
+
async function assert_grammar() {
|
|
779
|
+
const broken = await observation_ledger_prepare.prepare(await git_command.repository_root());
|
|
780
|
+
if (broken.length > 0) throw new Error(observations_flush.broken_lines_message(broken));
|
|
781
|
+
}
|
|
782
|
+
async function push_or_undo_commit() {
|
|
783
|
+
try {
|
|
784
|
+
await git_command.push();
|
|
785
|
+
} catch (error) {
|
|
786
|
+
await git_spawn.read(["reset", "--soft", "HEAD~1"]);
|
|
787
|
+
throw error;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
async function commit_and_push(paths, issue_number) {
|
|
791
|
+
await git_spawn.read(["add", "-A", "--", ...paths]);
|
|
792
|
+
await git_command.commit(commit_message(issue_number));
|
|
793
|
+
await push_or_undo_commit();
|
|
794
|
+
}
|
|
795
|
+
async function commit_ledger_step(should_merge, issue_number) {
|
|
796
|
+
if (!should_merge) return;
|
|
797
|
+
const status_output = await git_command.status();
|
|
798
|
+
if (!observation_ledger.has_pending_append(status_output)) return;
|
|
799
|
+
await assert_grammar();
|
|
800
|
+
const paths = observation_ledger.ledger_paths(await git_command.status()).filter((file_path) => !observation_ledger.is_migration_claim(file_path));
|
|
801
|
+
if (paths.length === 0) return;
|
|
802
|
+
await commit_and_push(paths, issue_number);
|
|
803
|
+
console.info(
|
|
804
|
+
`\u{1F4A1} Committed ${String(paths.length)} observation ledger path(s) to the pull request.`
|
|
805
|
+
);
|
|
806
|
+
}
|
|
807
|
+
var git_followup_flush = { COMMIT_MESSAGE_PREFIX, commit_ledger_step };
|
|
808
|
+
|
|
809
|
+
// scripts/followup/git-followup-merged.ts
|
|
810
|
+
import { z as z2 } from "zod";
|
|
811
|
+
var COMPLETION_MARK = "\u2705 ";
|
|
812
|
+
var PR_LINE_PREFIX = "PR: ";
|
|
813
|
+
var LINE_SEPARATOR = "\n";
|
|
814
|
+
var COMMENTS_SCHEMA = z2.array(
|
|
815
|
+
z2.object({ body: z2.string().nullish(), created_at: z2.string().nullish() })
|
|
816
|
+
);
|
|
817
|
+
function to_merge_plan(state, is_merge_requested) {
|
|
818
|
+
const is_merged = state?.is_merged === true;
|
|
819
|
+
return { is_merged, should_merge: is_merged || is_merge_requested, merged_at: state?.merged_at };
|
|
820
|
+
}
|
|
821
|
+
async function read_merge_plan(branch_name, is_merge_requested) {
|
|
822
|
+
return to_merge_plan(await git_gh_command.pr_get_merge_state(branch_name), is_merge_requested);
|
|
823
|
+
}
|
|
824
|
+
function is_completion_text(text, pr_url) {
|
|
825
|
+
if (typeof text !== "string" || !text.startsWith(COMPLETION_MARK)) return false;
|
|
826
|
+
return text.split(LINE_SEPARATOR).includes(`${PR_LINE_PREFIX}${pr_url}`);
|
|
827
|
+
}
|
|
828
|
+
function is_posted_since(comment, merged_at) {
|
|
829
|
+
if (typeof comment.created_at !== "string") return false;
|
|
830
|
+
return Date.parse(comment.created_at) >= Date.parse(merged_at);
|
|
831
|
+
}
|
|
832
|
+
function parse_comments(comments_json = "") {
|
|
833
|
+
const parsed = COMMENTS_SCHEMA.safeParse(json_value.parse_or_undefined(comments_json));
|
|
834
|
+
return parsed.success ? parsed.data : [];
|
|
835
|
+
}
|
|
836
|
+
function has_completion_record(input) {
|
|
837
|
+
return parse_comments(input.comments_json).some(
|
|
838
|
+
(comment) => is_completion_text(comment.body, input.pr_url) && is_posted_since(comment, input.merged_at)
|
|
839
|
+
);
|
|
840
|
+
}
|
|
841
|
+
async function is_completion_recorded(input) {
|
|
842
|
+
const { merged_at, issue_number, pr_url } = input;
|
|
843
|
+
if (issue_number === void 0 || pr_url === void 0 || merged_at === void 0) return false;
|
|
844
|
+
const comments_json = await git_gh_command.issue_list_comments(issue_number);
|
|
845
|
+
return has_completion_record({ comments_json, pr_url, merged_at });
|
|
846
|
+
}
|
|
847
|
+
var git_followup_merged = {
|
|
848
|
+
has_completion_record,
|
|
849
|
+
is_completion_recorded,
|
|
850
|
+
read_merge_plan,
|
|
851
|
+
to_merge_plan
|
|
852
|
+
};
|
|
853
|
+
|
|
854
|
+
// scripts/gh/git-ai-review-scan.ts
|
|
855
|
+
var CLAUDE_AUTHORS = /* @__PURE__ */ new Set(["claude[bot]"]);
|
|
856
|
+
var CODERABBIT_AUTHORS = /* @__PURE__ */ new Set(["coderabbitai[bot]"]);
|
|
857
|
+
var CLAUDE_BLOCKER_HEADINGS = [
|
|
858
|
+
/^#{2,4}\s+Issues\b/mu,
|
|
859
|
+
/^#{2,4}\s+Problem\b/mu,
|
|
860
|
+
/^#{3,4}\s+Logic bug\b/imu,
|
|
861
|
+
/^#{3,4}\s+\d+\.\s+/mu
|
|
862
|
+
];
|
|
863
|
+
var CODERABBIT_ACTIONABLE_PATTERN = /Actionable comments posted:\s*(\d+)/iu;
|
|
864
|
+
var CODERABBIT_RATE_LIMIT_PATTERNS = [
|
|
865
|
+
/rate limited by coderabbit\.ai/iu,
|
|
866
|
+
/Rate limit exceeded/iu
|
|
867
|
+
];
|
|
868
|
+
var HEADING_PREFIX_PATTERN = /^#{2,4}\s+/u;
|
|
869
|
+
var NEWLINE_CHAR = "\n";
|
|
870
|
+
var NOT_FOUND_INDEX = -1;
|
|
871
|
+
var EMPTY_COUNT = 0;
|
|
872
|
+
var CLAUDE_DEFAULT_SUMMARY = "Claude Review finding";
|
|
873
|
+
function is_claude_author(login) {
|
|
874
|
+
return CLAUDE_AUTHORS.has(login);
|
|
875
|
+
}
|
|
876
|
+
function is_coderabbit_author(login) {
|
|
877
|
+
return CODERABBIT_AUTHORS.has(login);
|
|
878
|
+
}
|
|
879
|
+
function is_claude_blocker(body) {
|
|
880
|
+
return CLAUDE_BLOCKER_HEADINGS.some((pattern) => pattern.test(body));
|
|
881
|
+
}
|
|
882
|
+
function parse_coderabbit_actionable(body) {
|
|
883
|
+
const match = CODERABBIT_ACTIONABLE_PATTERN.exec(body);
|
|
884
|
+
const raw = match?.[1];
|
|
885
|
+
if (raw === void 0) return EMPTY_COUNT;
|
|
886
|
+
const count = Number(raw);
|
|
887
|
+
return Number.isFinite(count) ? count : EMPTY_COUNT;
|
|
888
|
+
}
|
|
889
|
+
function is_coderabbit_rate_limit(body) {
|
|
890
|
+
return CODERABBIT_RATE_LIMIT_PATTERNS.some((pattern) => pattern.test(body));
|
|
891
|
+
}
|
|
892
|
+
function slice_line_at(body, start_index) {
|
|
893
|
+
const line_end = body.indexOf(NEWLINE_CHAR, start_index);
|
|
894
|
+
return line_end === NOT_FOUND_INDEX ? body.slice(start_index) : body.slice(start_index, line_end);
|
|
895
|
+
}
|
|
896
|
+
function extract_heading_text(body, pattern) {
|
|
897
|
+
const match = pattern.exec(body);
|
|
898
|
+
if (match === null) return void 0;
|
|
899
|
+
const line = slice_line_at(body, match.index);
|
|
900
|
+
return line.replace(HEADING_PREFIX_PATTERN, "").trim();
|
|
901
|
+
}
|
|
902
|
+
function extract_blocker_heading(body) {
|
|
903
|
+
for (const pattern of CLAUDE_BLOCKER_HEADINGS) {
|
|
904
|
+
const heading = extract_heading_text(body, pattern);
|
|
905
|
+
if (heading !== void 0) return heading;
|
|
906
|
+
}
|
|
907
|
+
return "";
|
|
908
|
+
}
|
|
909
|
+
function build_none_finding(comment) {
|
|
910
|
+
return { author_login: comment.author_login, url: comment.url, kind: "none", summary: "" };
|
|
911
|
+
}
|
|
912
|
+
function claude_summary(body) {
|
|
913
|
+
const heading = extract_blocker_heading(body);
|
|
914
|
+
return heading.length > 0 ? heading : CLAUDE_DEFAULT_SUMMARY;
|
|
915
|
+
}
|
|
916
|
+
function classify_claude_comment(comment) {
|
|
917
|
+
if (!is_claude_blocker(comment.body)) return build_none_finding(comment);
|
|
918
|
+
return {
|
|
919
|
+
author_login: comment.author_login,
|
|
920
|
+
url: comment.url,
|
|
921
|
+
kind: "blocker",
|
|
922
|
+
summary: claude_summary(comment.body)
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
function build_coderabbit_info(comment, count) {
|
|
926
|
+
return {
|
|
927
|
+
author_login: comment.author_login,
|
|
928
|
+
url: comment.url,
|
|
929
|
+
kind: "info",
|
|
930
|
+
summary: `CodeRabbit actionable comments posted: ${String(count)}`
|
|
931
|
+
};
|
|
932
|
+
}
|
|
933
|
+
function classify_coderabbit_comment(comment) {
|
|
934
|
+
if (is_coderabbit_rate_limit(comment.body)) return build_none_finding(comment);
|
|
935
|
+
const count = parse_coderabbit_actionable(comment.body);
|
|
936
|
+
if (count === EMPTY_COUNT) return build_none_finding(comment);
|
|
937
|
+
return build_coderabbit_info(comment, count);
|
|
938
|
+
}
|
|
939
|
+
function classify_comment(comment) {
|
|
940
|
+
if (is_claude_author(comment.author_login)) return classify_claude_comment(comment);
|
|
941
|
+
if (is_coderabbit_author(comment.author_login)) return classify_coderabbit_comment(comment);
|
|
942
|
+
return build_none_finding(comment);
|
|
943
|
+
}
|
|
944
|
+
function classify_ai_review_comments(comments) {
|
|
945
|
+
const classified = comments.map((comment) => classify_comment(comment));
|
|
946
|
+
return {
|
|
947
|
+
blockers: classified.filter((entry) => entry.kind === "blocker"),
|
|
948
|
+
infos: classified.filter((entry) => entry.kind === "info")
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
// scripts/gh/git-pr-confirmation.ts
|
|
953
|
+
var CONFIRMATION_RECOVERY = 'send it by hand \u2014 `pnpm josh notify --task-type confirmation --issue-url <url> --body-file <path> --recommended "<choice>"`';
|
|
954
|
+
function build_confirmation_input(input) {
|
|
955
|
+
return {
|
|
956
|
+
task_type: "confirmation",
|
|
957
|
+
repo_name: input.context.repo_name,
|
|
958
|
+
issue_title: input.context.issue_title,
|
|
959
|
+
body: input.body,
|
|
960
|
+
choices: confirmation_options.block(input),
|
|
961
|
+
issue_url: input.context.issue_url,
|
|
962
|
+
pr_url: input.context.pr_url
|
|
963
|
+
};
|
|
964
|
+
}
|
|
965
|
+
async function notify_confirmation(input) {
|
|
966
|
+
await telegram_notify.send_or_report(build_confirmation_input(input), CONFIRMATION_RECOVERY);
|
|
967
|
+
}
|
|
968
|
+
function has_ignore_reason(reason) {
|
|
969
|
+
return reason !== void 0 && reason.trim().length > 0;
|
|
970
|
+
}
|
|
971
|
+
var git_pr_confirmation = {
|
|
972
|
+
notify_confirmation
|
|
973
|
+
};
|
|
974
|
+
|
|
975
|
+
// scripts/gh/git-pr-ai-review.ts
|
|
976
|
+
function parse_ai_review_comments(raw_json) {
|
|
977
|
+
if (raw_json === void 0) return void 0;
|
|
978
|
+
return parse_json_array_or_undefined(raw_json, ai_review_pull_comment_schema);
|
|
979
|
+
}
|
|
980
|
+
function to_review_comment(raw) {
|
|
981
|
+
return {
|
|
982
|
+
body: raw.body ?? "",
|
|
983
|
+
author_login: raw.author?.login ?? "",
|
|
984
|
+
url: raw.url
|
|
985
|
+
};
|
|
986
|
+
}
|
|
987
|
+
function format_ai_review_finding(finding) {
|
|
988
|
+
return gh_comment_input.format({
|
|
989
|
+
author: finding.author_login,
|
|
990
|
+
body: finding.summary,
|
|
991
|
+
url: finding.url
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
function log_info_findings(infos) {
|
|
995
|
+
if (infos.length === 0) return [];
|
|
996
|
+
console.warn("\u26A0 CodeRabbit review is non-blocking (temporary policy \u2014 kit#753):");
|
|
997
|
+
for (const info of infos) {
|
|
998
|
+
console.warn(format_ai_review_finding(info));
|
|
999
|
+
}
|
|
1000
|
+
return infos.map((info) => `CodeRabbit skipped (kit#753): ${format_ai_review_finding(info)}`);
|
|
1001
|
+
}
|
|
1002
|
+
function build_ai_review_blocker_body(blockers) {
|
|
1003
|
+
const lines2 = ["AI reviewer findings remain unresolved.", ""];
|
|
1004
|
+
for (const blocker of blockers) {
|
|
1005
|
+
lines2.push(format_ai_review_finding(blocker));
|
|
1006
|
+
}
|
|
1007
|
+
return lines2.join("\n");
|
|
1008
|
+
}
|
|
1009
|
+
function build_ai_review_ignore_comment(reason, blockers) {
|
|
1010
|
+
const lines2 = [
|
|
1011
|
+
"Some AI reviewer findings were intentionally left unresolved.",
|
|
1012
|
+
`Reason: ${reason.trim()}`,
|
|
1013
|
+
"Affected comments:"
|
|
1014
|
+
];
|
|
1015
|
+
for (const blocker of blockers) {
|
|
1016
|
+
lines2.push(format_ai_review_finding(blocker));
|
|
1017
|
+
}
|
|
1018
|
+
return lines2.join("\n");
|
|
1019
|
+
}
|
|
1020
|
+
async function fetch_review_comments(branch_name) {
|
|
1021
|
+
const parsed = parse_ai_review_comments(await git_gh_command.pr_get_comments(branch_name));
|
|
1022
|
+
return parsed?.map((comment) => to_review_comment(comment));
|
|
1023
|
+
}
|
|
1024
|
+
var IGNORE_ALTERNATIVE = 'Re-run `pnpm josh followup --ai-review-ignore-reason "<reason>"` if the gate does not apply';
|
|
1025
|
+
async function handle_blockers(input) {
|
|
1026
|
+
const body = build_ai_review_blocker_body(input.blockers);
|
|
1027
|
+
if (has_ignore_reason(input.ignore_reason)) {
|
|
1028
|
+
const ignore_comment = build_ai_review_ignore_comment(input.ignore_reason, input.blockers);
|
|
1029
|
+
await git_gh_command.pr_comment(input.branch_name, ignore_comment);
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
1032
|
+
await git_pr_confirmation.notify_confirmation({
|
|
1033
|
+
context: input.context,
|
|
1034
|
+
body,
|
|
1035
|
+
recommended: "Fix the findings and re-run `pnpm josh followup`",
|
|
1036
|
+
alternatives: [IGNORE_ALTERNATIVE]
|
|
1037
|
+
});
|
|
1038
|
+
throw new Error(body);
|
|
1039
|
+
}
|
|
1040
|
+
var UNREADABLE_COMMENTS_BODY = "The AI reviewer comments could not be read, so no finding could be ruled out.\nRe-run `pnpm josh followup` once the read succeeds, or pass an ignore reason.";
|
|
1041
|
+
var UNREADABLE_COMMENTS_NOTE = "AI reviewer comments could not be read; the scan was bypassed.";
|
|
1042
|
+
async function confirm_unreadable_stop(context) {
|
|
1043
|
+
note_unreadable_stop();
|
|
1044
|
+
if (is_retry_pending()) return;
|
|
1045
|
+
await git_pr_confirmation.notify_confirmation({
|
|
1046
|
+
context,
|
|
1047
|
+
body: UNREADABLE_COMMENTS_BODY,
|
|
1048
|
+
recommended: "Re-run `pnpm josh followup` once the comments can be read",
|
|
1049
|
+
alternatives: [IGNORE_ALTERNATIVE]
|
|
1050
|
+
});
|
|
1051
|
+
}
|
|
1052
|
+
async function handle_unreadable_comments(input) {
|
|
1053
|
+
if (has_ignore_reason(input.ignore_reason)) {
|
|
1054
|
+
await git_gh_command.pr_comment(
|
|
1055
|
+
input.branch_name,
|
|
1056
|
+
`${UNREADABLE_COMMENTS_BODY}
|
|
1057
|
+
Reason: ${input.ignore_reason.trim()}`
|
|
1058
|
+
);
|
|
1059
|
+
return [UNREADABLE_COMMENTS_NOTE];
|
|
1060
|
+
}
|
|
1061
|
+
await confirm_unreadable_stop(input.context);
|
|
1062
|
+
throw new Error(UNREADABLE_COMMENTS_BODY);
|
|
1063
|
+
}
|
|
1064
|
+
async function handle_ai_review_findings(input) {
|
|
1065
|
+
const review_comments = await fetch_review_comments(input.branch_name);
|
|
1066
|
+
if (review_comments === void 0) return await handle_unreadable_comments(input);
|
|
1067
|
+
const { blockers, infos } = classify_ai_review_comments(review_comments);
|
|
1068
|
+
const skip_notes = log_info_findings(infos);
|
|
1069
|
+
if (blockers.length > 0) await handle_blockers({ ...input, blockers });
|
|
1070
|
+
return skip_notes;
|
|
1071
|
+
}
|
|
1072
|
+
var git_pr_ai_review = {
|
|
1073
|
+
handle_ai_review_findings
|
|
1074
|
+
};
|
|
1075
|
+
|
|
1076
|
+
// scripts/gh/git-pr-coderabbit.ts
|
|
1077
|
+
var CODERABBIT_AUTHOR = "coderabbitai[bot]";
|
|
1078
|
+
var CODERABBIT_FLAG = "_\u26A0\uFE0F Potential issue_";
|
|
1079
|
+
var CODERABBIT_RESOLVED = "\u2705 Addressed in commit";
|
|
1080
|
+
function parse_pull_comments(raw_json) {
|
|
1081
|
+
if (raw_json === void 0) return void 0;
|
|
1082
|
+
return parse_json_array_or_undefined(raw_json, pull_comment_schema);
|
|
1083
|
+
}
|
|
1084
|
+
function read_unresolved_cr_urls(comments) {
|
|
1085
|
+
return comments.filter((comment) => comment.user?.login === CODERABBIT_AUTHOR).filter((comment) => (comment.body ?? "").includes(CODERABBIT_FLAG)).filter((comment) => !(comment.body ?? "").includes(CODERABBIT_RESOLVED)).map((comment) => comment.html_url ?? "").filter((url) => url.length > 0);
|
|
1086
|
+
}
|
|
1087
|
+
function build_ignore_reason_comment(reason, urls) {
|
|
1088
|
+
const lines2 = [
|
|
1089
|
+
"Some CodeRabbit findings were intentionally left unresolved.",
|
|
1090
|
+
`Reason: ${reason.trim()}`,
|
|
1091
|
+
"Affected comments:"
|
|
1092
|
+
];
|
|
1093
|
+
for (const url of urls) {
|
|
1094
|
+
lines2.push(`- ${url}`);
|
|
1095
|
+
}
|
|
1096
|
+
return lines2.join("\n");
|
|
1097
|
+
}
|
|
1098
|
+
function log_unresolved_coderabbit(urls) {
|
|
1099
|
+
console.warn("\u26A0 Unresolved CodeRabbit comments are non-blocking (temporary policy \u2014 kit#753):");
|
|
1100
|
+
for (const url of urls) {
|
|
1101
|
+
console.warn(`- ${url}`);
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
var UNREADABLE_CR_NOTE = "CodeRabbit line comments could not be read; unresolved findings were not checked (kit#753).";
|
|
1105
|
+
async function report_unreadable_cr(input) {
|
|
1106
|
+
console.warn(`\u26A0 ${UNREADABLE_CR_NOTE}`);
|
|
1107
|
+
if (has_ignore_reason(input.ignore_reason)) {
|
|
1108
|
+
const body = `${UNREADABLE_CR_NOTE}
|
|
1109
|
+
Reason: ${input.ignore_reason.trim()}`;
|
|
1110
|
+
await git_gh_command.pr_comment(input.branch_name, body);
|
|
1111
|
+
}
|
|
1112
|
+
return [UNREADABLE_CR_NOTE];
|
|
1113
|
+
}
|
|
1114
|
+
async function record_unresolved_cr(input) {
|
|
1115
|
+
if (!has_ignore_reason(input.ignore_reason)) {
|
|
1116
|
+
log_unresolved_coderabbit(input.unresolved_urls);
|
|
1117
|
+
return;
|
|
1118
|
+
}
|
|
1119
|
+
const reason_comment = build_ignore_reason_comment(input.ignore_reason, input.unresolved_urls);
|
|
1120
|
+
await git_gh_command.pr_comment(input.branch_name, reason_comment);
|
|
1121
|
+
}
|
|
1122
|
+
async function handle_coderabbit_findings(input) {
|
|
1123
|
+
const raw = await git_gh_command.pr_get_review_comments(input.branch_name);
|
|
1124
|
+
const comments = parse_pull_comments(raw);
|
|
1125
|
+
if (comments === void 0) return await report_unreadable_cr(input);
|
|
1126
|
+
const unresolved_urls = read_unresolved_cr_urls(comments);
|
|
1127
|
+
if (unresolved_urls.length === 0) return [];
|
|
1128
|
+
await record_unresolved_cr({ ...input, unresolved_urls });
|
|
1129
|
+
return unresolved_urls.map((url) => `CodeRabbit unresolved comment skipped (kit#753): ${url}`);
|
|
1130
|
+
}
|
|
1131
|
+
var git_pr_coderabbit = {
|
|
1132
|
+
handle_coderabbit_findings
|
|
1133
|
+
};
|
|
1134
|
+
|
|
1135
|
+
// scripts/gh/git-pr-managed-config.ts
|
|
1136
|
+
async function read_branch_paths() {
|
|
1137
|
+
return changed_paths.to_paths(await git_command.diff_main_names());
|
|
1138
|
+
}
|
|
1139
|
+
var REPORT_HEADING = "This pull request changes files that `josh sync` distributes to every consumer project.";
|
|
1140
|
+
var REPORT_PATHS_HEADING = "Distributed paths in this diff:";
|
|
1141
|
+
function build_report(hits) {
|
|
1142
|
+
return [REPORT_HEADING, REPORT_PATHS_HEADING, managed_config_scope.format_hits(hits)];
|
|
1143
|
+
}
|
|
1144
|
+
async function handle_managed_config_changes(input) {
|
|
1145
|
+
if (!input.should_merge) return [];
|
|
1146
|
+
const hits = managed_config_scope.find_managed_paths(await read_branch_paths());
|
|
1147
|
+
if (hits.length === 0) return [];
|
|
1148
|
+
return build_report(hits);
|
|
1149
|
+
}
|
|
1150
|
+
var git_pr_managed_config = {
|
|
1151
|
+
handle_managed_config_changes
|
|
1152
|
+
};
|
|
1153
|
+
|
|
1154
|
+
// scripts/followup/followup-check-report.ts
|
|
1155
|
+
var REPORT_HEADER = "Checks:";
|
|
1156
|
+
function is_required(snapshot, name) {
|
|
1157
|
+
return is_required_check(name) || matches_any(name, snapshot.required_contexts ?? []);
|
|
1158
|
+
}
|
|
1159
|
+
function failed_lines(snapshot) {
|
|
1160
|
+
if (snapshot === void 0) return [];
|
|
1161
|
+
return snapshot.rollup.filter((check) => check.status === CHECK_STATUS_FAIL).map((check) => {
|
|
1162
|
+
const scope = is_required(snapshot, check.name) ? "required" : "not required";
|
|
1163
|
+
return `- ${check.name} \u2014 failed (${scope})`;
|
|
1164
|
+
});
|
|
1165
|
+
}
|
|
1166
|
+
function reran_lines(reran) {
|
|
1167
|
+
return [...new Set(reran)].map(
|
|
1168
|
+
(name) => `- ${name} \u2014 re-run once, judged flaky; green on the re-run`
|
|
1169
|
+
);
|
|
1170
|
+
}
|
|
1171
|
+
function retrigger_lines(is_retriggered) {
|
|
1172
|
+
if (!is_retriggered) return [];
|
|
1173
|
+
return [`- ${CODERABBIT_CHECK_NAME} \u2014 rate limited; review retriggered`];
|
|
1174
|
+
}
|
|
1175
|
+
function lines(input) {
|
|
1176
|
+
const check_lines = [
|
|
1177
|
+
...failed_lines(input.snapshot),
|
|
1178
|
+
...reran_lines(input.reran),
|
|
1179
|
+
...retrigger_lines(input.is_retriggered)
|
|
1180
|
+
];
|
|
1181
|
+
if (check_lines.length === 0) return [];
|
|
1182
|
+
return [REPORT_HEADER, ...check_lines];
|
|
1183
|
+
}
|
|
1184
|
+
var followup_check_report = {
|
|
1185
|
+
lines
|
|
1186
|
+
};
|
|
1187
|
+
|
|
1188
|
+
// scripts/followup/followup-coderabbit-retrigger.ts
|
|
1189
|
+
var RETRIGGER_BODY = "@coderabbitai review";
|
|
1190
|
+
var WAIT_OPENER = /please wait/iu;
|
|
1191
|
+
var WAIT_CLOSER = /before/iu;
|
|
1192
|
+
var TOKEN = /\d+|[a-z]+/giu;
|
|
1193
|
+
var DIGITS = /^\d+$/u;
|
|
1194
|
+
var SECOND_MS = 1e3;
|
|
1195
|
+
var SECONDS_PER_MINUTE = 60;
|
|
1196
|
+
var MINUTES_PER_HOUR = 60;
|
|
1197
|
+
var MINUTE_MS = SECONDS_PER_MINUTE * SECOND_MS;
|
|
1198
|
+
var UNIT_MS = {
|
|
1199
|
+
h: MINUTES_PER_HOUR * MINUTE_MS,
|
|
1200
|
+
m: MINUTE_MS,
|
|
1201
|
+
s: SECOND_MS
|
|
1202
|
+
};
|
|
1203
|
+
var MARGIN_SECONDS = 15;
|
|
1204
|
+
var MARGIN_MS = MARGIN_SECONDS * SECOND_MS;
|
|
1205
|
+
var WINDOW_CAP_MINUTES = 30;
|
|
1206
|
+
var WINDOW_CAP_MS = WINDOW_CAP_MINUTES * MINUTE_MS;
|
|
1207
|
+
var REVIEW_WAIT_ATTEMPTS = 40;
|
|
1208
|
+
var REVIEW_WAIT_INTERVAL_SECONDS = 30;
|
|
1209
|
+
var REVIEW_WAIT_INTERVAL_MS = REVIEW_WAIT_INTERVAL_SECONDS * SECOND_MS;
|
|
1210
|
+
var NO_TIME = 0;
|
|
1211
|
+
var FIRST = 0;
|
|
1212
|
+
var NEXT = 1;
|
|
1213
|
+
var RATE_LIMITED = "rate-limited";
|
|
1214
|
+
var RETRIGGER_CAP = 3;
|
|
1215
|
+
var NO_BYPASS = "never bypass the check";
|
|
1216
|
+
var BY_HAND = `wait it out, post \`${RETRIGGER_BODY}\` and rerun followup; ${NO_BYPASS}`;
|
|
1217
|
+
var AGAIN_NOTE = `CodeRabbit rate-limited again after \`${RETRIGGER_BODY}\` (kit#7079): rerun followup, which retriggers up to ${String(RETRIGGER_CAP)} times per pull request; ${NO_BYPASS}`;
|
|
1218
|
+
var CAP_NOTE = `CodeRabbit rate-limited after ${String(RETRIGGER_CAP)} \`${RETRIGGER_BODY}\` (kit#7079): end the run unfinished, parked \`run:stalled\` at stage followup; ${NO_BYPASS}`;
|
|
1219
|
+
var UNREADABLE_NOTE = `CodeRabbit rate-limited with no window readable from its comments (kit#5289): no retrigger posted \u2014 ${BY_HAND}`;
|
|
1220
|
+
var UNFINISHED_NOTE = `CodeRabbit still reviewing after \`${RETRIGGER_BODY}\` (kit#5289): the merge goes ahead without it`;
|
|
1221
|
+
function wait_clause_of(body) {
|
|
1222
|
+
const after_opener = body.split(WAIT_OPENER)[NEXT] ?? "";
|
|
1223
|
+
return after_opener.split(WAIT_CLOSER)[FIRST] ?? "";
|
|
1224
|
+
}
|
|
1225
|
+
function token_ms(tokens, index) {
|
|
1226
|
+
const token = tokens[index] ?? "";
|
|
1227
|
+
if (!DIGITS.test(token)) return NO_TIME;
|
|
1228
|
+
const unit = (tokens[index + NEXT] ?? "").charAt(FIRST).toLowerCase();
|
|
1229
|
+
return Number(token) * (UNIT_MS[unit] ?? NO_TIME);
|
|
1230
|
+
}
|
|
1231
|
+
function parse_wait_ms(body) {
|
|
1232
|
+
if (!is_coderabbit_rate_limit(body)) return void 0;
|
|
1233
|
+
const tokens = wait_clause_of(body).match(TOKEN) ?? [];
|
|
1234
|
+
const wait_ms = tokens.reduce((sum, _token, index) => sum + token_ms(tokens, index), NO_TIME);
|
|
1235
|
+
return wait_ms === NO_TIME ? void 0 : wait_ms;
|
|
1236
|
+
}
|
|
1237
|
+
function is_notice(comment) {
|
|
1238
|
+
return is_coderabbit_author(comment.author?.login ?? "") && is_coderabbit_rate_limit(comment.body ?? "");
|
|
1239
|
+
}
|
|
1240
|
+
function is_retrigger(comment) {
|
|
1241
|
+
return comment.body?.trim() === RETRIGGER_BODY;
|
|
1242
|
+
}
|
|
1243
|
+
function written_ms(comment) {
|
|
1244
|
+
return Date.parse(comment.updatedAt ?? "");
|
|
1245
|
+
}
|
|
1246
|
+
function latest_ms(comments, is_match) {
|
|
1247
|
+
const times = comments.filter((comment) => is_match(comment)).map((comment) => written_ms(comment)).filter((ms) => !Number.isNaN(ms));
|
|
1248
|
+
return times.length === 0 ? void 0 : Math.max(...times);
|
|
1249
|
+
}
|
|
1250
|
+
function window_end_ms(comments) {
|
|
1251
|
+
const ends = comments.filter((comment) => is_notice(comment)).map((comment) => written_ms(comment) + (parse_wait_ms(comment.body ?? "") ?? NaN)).filter((ms) => !Number.isNaN(ms));
|
|
1252
|
+
return ends.length === 0 ? void 0 : Math.max(...ends);
|
|
1253
|
+
}
|
|
1254
|
+
function is_awaiting(comments) {
|
|
1255
|
+
const retrigger_ms = latest_ms(comments, is_retrigger) ?? NO_TIME;
|
|
1256
|
+
const notice_ms = latest_ms(comments, is_notice) ?? retrigger_ms;
|
|
1257
|
+
return retrigger_ms > notice_ms;
|
|
1258
|
+
}
|
|
1259
|
+
function too_long_note(wait_ms) {
|
|
1260
|
+
const minutes = String(Math.ceil(wait_ms / MINUTE_MS));
|
|
1261
|
+
return `CodeRabbit rate-limited for ${minutes} more minutes, over followup's ${String(WINDOW_CAP_MINUTES)} minute wait (kit#5289): no retrigger posted \u2014 ${BY_HAND}`;
|
|
1262
|
+
}
|
|
1263
|
+
function decide(comments, now_ms) {
|
|
1264
|
+
if (is_awaiting(comments)) return { kind: "await" };
|
|
1265
|
+
const spent = comments.filter((comment) => is_retrigger(comment)).length;
|
|
1266
|
+
if (spent >= RETRIGGER_CAP) return { kind: "stop", note: CAP_NOTE };
|
|
1267
|
+
const end_ms = window_end_ms(comments);
|
|
1268
|
+
if (end_ms === void 0) return { kind: "stop", note: UNREADABLE_NOTE };
|
|
1269
|
+
const wait_ms = Math.max(NO_TIME, end_ms - now_ms) + MARGIN_MS;
|
|
1270
|
+
return wait_ms > WINDOW_CAP_MS ? { kind: "stop", note: too_long_note(wait_ms) } : { kind: "retrigger", wait_ms };
|
|
1271
|
+
}
|
|
1272
|
+
async function read_comments(branch_name) {
|
|
1273
|
+
const raw = await git_gh_command.pr_get_comments(branch_name);
|
|
1274
|
+
return parse_json_array_or_undefined(raw ?? "", ai_review_pull_comment_schema) ?? [];
|
|
1275
|
+
}
|
|
1276
|
+
async function read_state(branch_name, observe) {
|
|
1277
|
+
const checks = await git_gh_command.pr_get_checks_snapshot(branch_name);
|
|
1278
|
+
const snapshot = parse_pr_state_snapshot(checks.snapshot_json);
|
|
1279
|
+
await observe(snapshot);
|
|
1280
|
+
return followup_checks_event.coderabbit_of(snapshot);
|
|
1281
|
+
}
|
|
1282
|
+
async function wait_for_review(branch_name, wait) {
|
|
1283
|
+
const observe = followup_coderabbit_wait.observer_of(wait);
|
|
1284
|
+
let is_started = false;
|
|
1285
|
+
let state = RATE_LIMITED;
|
|
1286
|
+
const is_settled = await poll.poll_until(
|
|
1287
|
+
async () => {
|
|
1288
|
+
state = await read_state(branch_name, observe);
|
|
1289
|
+
is_started ||= state !== RATE_LIMITED;
|
|
1290
|
+
return is_started && state !== "running";
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
attempts: REVIEW_WAIT_ATTEMPTS,
|
|
1294
|
+
interval_ms: REVIEW_WAIT_INTERVAL_MS,
|
|
1295
|
+
sleeper: poll.sleep,
|
|
1296
|
+
backoff: { schedule: PR_POLL_SCHEDULES.checks }
|
|
1297
|
+
}
|
|
1298
|
+
);
|
|
1299
|
+
if (state === RATE_LIMITED) return [AGAIN_NOTE];
|
|
1300
|
+
return is_settled ? [] : [UNFINISHED_NOTE];
|
|
1301
|
+
}
|
|
1302
|
+
async function retrigger(branch_name, wait, wait_ms) {
|
|
1303
|
+
const seconds = String(Math.ceil(wait_ms / SECOND_MS));
|
|
1304
|
+
console.info(`\u23F3 CodeRabbit rate-limited \u2014 waiting ${seconds}s, then \`${RETRIGGER_BODY}\``);
|
|
1305
|
+
await poll.sleep(wait_ms);
|
|
1306
|
+
await git_gh_command.pr_comment(branch_name, RETRIGGER_BODY);
|
|
1307
|
+
await lane_ledger_write.record_stage({
|
|
1308
|
+
stage: lane_ledger_write.CODERABBIT_RETRIGGER_STAGE,
|
|
1309
|
+
elapsed_ms: wait_ms
|
|
1310
|
+
});
|
|
1311
|
+
return { is_retriggered: true, notes: await wait_for_review(branch_name, wait) };
|
|
1312
|
+
}
|
|
1313
|
+
async function follow(branch_name, wait, decision) {
|
|
1314
|
+
if (decision.kind === "retrigger") return await retrigger(branch_name, wait, decision.wait_ms);
|
|
1315
|
+
return { is_retriggered: true, notes: await wait_for_review(branch_name, wait) };
|
|
1316
|
+
}
|
|
1317
|
+
async function attempt(branch_name, wait, rounds_left, is_retriggered) {
|
|
1318
|
+
const decision = decide(await read_comments(branch_name), Date.now());
|
|
1319
|
+
if (decision.kind === "stop") return { is_retriggered, notes: [decision.note] };
|
|
1320
|
+
const outcome = await follow(branch_name, wait, decision);
|
|
1321
|
+
if (!outcome.notes.includes(AGAIN_NOTE)) return outcome;
|
|
1322
|
+
if (rounds_left <= 1) return { is_retriggered: true, notes: [CAP_NOTE] };
|
|
1323
|
+
return await attempt(branch_name, wait, rounds_left - 1, true);
|
|
1324
|
+
}
|
|
1325
|
+
async function run(branch_name, wait) {
|
|
1326
|
+
if (wait.last?.state !== RATE_LIMITED) return { is_retriggered: false, notes: [] };
|
|
1327
|
+
return await attempt(branch_name, wait, RETRIGGER_CAP, false);
|
|
1328
|
+
}
|
|
1329
|
+
async function settle(snapshot, wait_for_green, branch_name, wait) {
|
|
1330
|
+
const { is_retriggered, notes } = await run(branch_name, wait);
|
|
1331
|
+
if (!is_retriggered) return { snapshot, is_retriggered, notes };
|
|
1332
|
+
return { snapshot: await wait_for_green(), is_retriggered, notes };
|
|
1333
|
+
}
|
|
1334
|
+
var followup_coderabbit_retrigger = {
|
|
1335
|
+
AGAIN_NOTE,
|
|
1336
|
+
CAP_NOTE,
|
|
1337
|
+
RETRIGGER_BODY,
|
|
1338
|
+
RETRIGGER_CAP,
|
|
1339
|
+
UNFINISHED_NOTE,
|
|
1340
|
+
UNREADABLE_NOTE,
|
|
1341
|
+
decide,
|
|
1342
|
+
parse_wait_ms,
|
|
1343
|
+
run,
|
|
1344
|
+
settle
|
|
1345
|
+
};
|
|
1346
|
+
|
|
1347
|
+
// scripts/followup/followup-run-rerun.ts
|
|
1348
|
+
import { z as z3 } from "zod";
|
|
1349
|
+
var PAGE = "per_page=100";
|
|
1350
|
+
var FAILED_CONCLUSIONS = /* @__PURE__ */ new Set(["failure", "cancelled", "timed_out"]);
|
|
1351
|
+
var LATEST_ATTEMPTS = 40;
|
|
1352
|
+
var LATEST_INTERVAL_MS = 15e3;
|
|
1353
|
+
var job_schema = z3.looseObject({ name: z3.string(), conclusion: z3.string().nullish() });
|
|
1354
|
+
var jobs_page_schema = z3.looseObject({ jobs: z3.array(job_schema) });
|
|
1355
|
+
var run_schema = z3.looseObject({
|
|
1356
|
+
id: z3.number(),
|
|
1357
|
+
status: z3.string(),
|
|
1358
|
+
conclusion: z3.string().nullish(),
|
|
1359
|
+
run_attempt: z3.number()
|
|
1360
|
+
});
|
|
1361
|
+
var runs_page_schema = z3.looseObject({ workflow_runs: z3.array(run_schema) });
|
|
1362
|
+
async function read_jobs(run_id, filter) {
|
|
1363
|
+
const rest = `runs/${String(run_id)}/jobs?filter=${filter}&${PAGE}`;
|
|
1364
|
+
const { jobs } = await followup_job_rerun.read_actions(rest, jobs_page_schema);
|
|
1365
|
+
return jobs;
|
|
1366
|
+
}
|
|
1367
|
+
async function read_run_jobs(head_sha) {
|
|
1368
|
+
const rest = `runs?head_sha=${head_sha}&${PAGE}`;
|
|
1369
|
+
const { workflow_runs } = await followup_job_rerun.read_actions(rest, runs_page_schema);
|
|
1370
|
+
return await Promise.all(
|
|
1371
|
+
workflow_runs.map(async (run3) => ({
|
|
1372
|
+
run_id: run3.id,
|
|
1373
|
+
run: run3,
|
|
1374
|
+
all: await read_jobs(run3.id, "all"),
|
|
1375
|
+
latest: await read_jobs(run3.id, "latest")
|
|
1376
|
+
}))
|
|
1377
|
+
);
|
|
1378
|
+
}
|
|
1379
|
+
function holds(jobs, context) {
|
|
1380
|
+
return jobs.some((job) => is_required_match(job.name, context));
|
|
1381
|
+
}
|
|
1382
|
+
function holds_every(jobs, contexts) {
|
|
1383
|
+
return contexts.every((context) => holds(jobs, context));
|
|
1384
|
+
}
|
|
1385
|
+
function has_failed_job(run3) {
|
|
1386
|
+
return run3.latest.some((job) => FAILED_CONCLUSIONS.has(job.conclusion ?? ""));
|
|
1387
|
+
}
|
|
1388
|
+
function is_rerun_target(run3, lost) {
|
|
1389
|
+
if (has_failed_job(run3)) return false;
|
|
1390
|
+
return lost.some((context) => holds(run3.all, context) && !holds(run3.latest, context));
|
|
1391
|
+
}
|
|
1392
|
+
function is_truncated(run3) {
|
|
1393
|
+
if (run3.run.status !== "completed" || run3.run.run_attempt > MAX_CHECK_RERUNS) return false;
|
|
1394
|
+
return run3.run.conclusion === "failure" && !has_failed_job(run3);
|
|
1395
|
+
}
|
|
1396
|
+
async function await_latest_jobs(runs, lost) {
|
|
1397
|
+
let latest = [];
|
|
1398
|
+
await poll.poll_until(
|
|
1399
|
+
async () => {
|
|
1400
|
+
const per_run = await Promise.all(
|
|
1401
|
+
runs.map(async ({ run_id }) => await read_jobs(run_id, "latest"))
|
|
1402
|
+
);
|
|
1403
|
+
latest = per_run.flat();
|
|
1404
|
+
return holds_every(latest, lost);
|
|
1405
|
+
},
|
|
1406
|
+
{
|
|
1407
|
+
attempts: LATEST_ATTEMPTS,
|
|
1408
|
+
interval_ms: LATEST_INTERVAL_MS,
|
|
1409
|
+
backoff: {
|
|
1410
|
+
seen: () => JSON.stringify(latest.map(({ name, conclusion }) => [name, conclusion]))
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
);
|
|
1414
|
+
}
|
|
1415
|
+
async function rerun_whole(runs, lost) {
|
|
1416
|
+
console.info(`\u{1F501} Rerunning the whole CI run that lost required jobs: ${lost.join(", ")}`);
|
|
1417
|
+
await Promise.all(
|
|
1418
|
+
runs.map(
|
|
1419
|
+
async ({ run_id }) => await git_gh_exec.exec_gh_api({
|
|
1420
|
+
path: followup_job_rerun.actions_api_path(`runs/${String(run_id)}/rerun`),
|
|
1421
|
+
method: "POST",
|
|
1422
|
+
should_retry: false
|
|
1423
|
+
})
|
|
1424
|
+
)
|
|
1425
|
+
);
|
|
1426
|
+
await await_latest_jobs(runs, lost);
|
|
1427
|
+
}
|
|
1428
|
+
async function rerun_truncated(runs, contexts) {
|
|
1429
|
+
const targets = runs.filter((run3) => is_truncated(run3));
|
|
1430
|
+
if (targets.length === 0) return "none";
|
|
1431
|
+
await rerun_whole(targets, contexts);
|
|
1432
|
+
return "rerun";
|
|
1433
|
+
}
|
|
1434
|
+
async function recover(missing) {
|
|
1435
|
+
const runs = await read_run_jobs(missing.head_sha);
|
|
1436
|
+
const lost = missing.contexts.filter((context) => runs.some((run3) => holds(run3.all, context)));
|
|
1437
|
+
if (lost.length === 0) return await rerun_truncated(runs, missing.contexts);
|
|
1438
|
+
const latest = runs.flatMap((run3) => run3.latest);
|
|
1439
|
+
if (holds_every(latest, lost)) return "present";
|
|
1440
|
+
const targets = runs.filter((run3) => is_rerun_target(run3, lost));
|
|
1441
|
+
if (targets.length === 0) return "none";
|
|
1442
|
+
const rerun = lost.filter((context) => targets.some((run3) => holds(run3.all, context)));
|
|
1443
|
+
await rerun_whole(targets, rerun);
|
|
1444
|
+
return "rerun";
|
|
1445
|
+
}
|
|
1446
|
+
async function recover_missing(missing) {
|
|
1447
|
+
try {
|
|
1448
|
+
return await recover(missing);
|
|
1449
|
+
} catch (error) {
|
|
1450
|
+
console.info(`\u26A0\uFE0F CI run rerun failed: ${git_gh_helpers.get_error_message_with_stderr(error)}`);
|
|
1451
|
+
return "none";
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
var followup_run_rerun = {
|
|
1455
|
+
recover_missing
|
|
1456
|
+
};
|
|
1457
|
+
|
|
1458
|
+
// scripts/followup/git-pr-followup-checks.ts
|
|
1459
|
+
var WATCH_FAILED_NOTE = "pr checks --watch failed; falling through to polling";
|
|
1460
|
+
function reads_as_empty_rollup(raw_json) {
|
|
1461
|
+
const parsed = json_value.parse_or_undefined(raw_json);
|
|
1462
|
+
if (typeof parsed !== "object" || parsed === null || !("statusCheckRollup" in parsed)) {
|
|
1463
|
+
return false;
|
|
1464
|
+
}
|
|
1465
|
+
const { statusCheckRollup: rollup } = parsed;
|
|
1466
|
+
return Array.isArray(rollup) && rollup.length === 0;
|
|
1467
|
+
}
|
|
1468
|
+
async function has_no_checks(branch_name) {
|
|
1469
|
+
try {
|
|
1470
|
+
const checks = await git_gh_command.pr_get_checks_snapshot(branch_name);
|
|
1471
|
+
return reads_as_empty_rollup(checks.snapshot_json);
|
|
1472
|
+
} catch {
|
|
1473
|
+
return false;
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
async function handle_watch_failure(branch_name, error) {
|
|
1477
|
+
if (await has_no_checks(branch_name)) throw error;
|
|
1478
|
+
console.info(`\u26A0\uFE0F ${WATCH_FAILED_NOTE}: ${git_gh_helpers.get_error_message_with_stderr(error)}`);
|
|
1479
|
+
}
|
|
1480
|
+
async function watch_before_polling(branch_name, observe) {
|
|
1481
|
+
console.info("");
|
|
1482
|
+
console.info("\u{1F4CA} Watching PR checks...");
|
|
1483
|
+
try {
|
|
1484
|
+
await git_gh_command.pr_checks_watch(branch_name, observe);
|
|
1485
|
+
return true;
|
|
1486
|
+
} catch (error) {
|
|
1487
|
+
await handle_watch_failure(branch_name, error);
|
|
1488
|
+
return false;
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
async function wait_for_checks(input) {
|
|
1492
|
+
const is_watch_returned = !input.is_skip_watch && await watch_before_polling(input.branch_name, input.observe);
|
|
1493
|
+
const stable_reads = is_watch_returned ? WATCH_CONFIRMED_STABLE_READS : DEFAULT_STABLE_READS;
|
|
1494
|
+
return await git_pr_checks.wait_for_pr_success(
|
|
1495
|
+
input.branch_name,
|
|
1496
|
+
stable_reads,
|
|
1497
|
+
issue_watch_gate.assert_read_here,
|
|
1498
|
+
input.observe
|
|
1499
|
+
);
|
|
1500
|
+
}
|
|
1501
|
+
function is_checks_failure(error) {
|
|
1502
|
+
if (error instanceof PrConflictError) return false;
|
|
1503
|
+
return error instanceof Error && error.message.startsWith(FAILURE_MESSAGE_PREFIX);
|
|
1504
|
+
}
|
|
1505
|
+
async function rejudge_missing(input, error) {
|
|
1506
|
+
const outcome = await followup_run_rerun.recover_missing(error.missing);
|
|
1507
|
+
if (outcome === "none") return void 0;
|
|
1508
|
+
if (outcome === "rerun") input.reran?.push(...error.missing.contexts);
|
|
1509
|
+
return await wait_for_checks(input);
|
|
1510
|
+
}
|
|
1511
|
+
async function stop_reruns_spent(branch_name, error) {
|
|
1512
|
+
const names = await followup_job_rerun.read_rerun_names(branch_name);
|
|
1513
|
+
if (names.length === 0) throw error;
|
|
1514
|
+
throw new Error(followup_job_rerun.reruns_spent_message(names));
|
|
1515
|
+
}
|
|
1516
|
+
async function wait_after_rerun(input) {
|
|
1517
|
+
try {
|
|
1518
|
+
return { snapshot: await wait_for_checks(input) };
|
|
1519
|
+
} catch (error) {
|
|
1520
|
+
if (!is_checks_failure(error)) throw error;
|
|
1521
|
+
return { failure: error };
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
async function rejudge_failed_jobs(input, error, round) {
|
|
1525
|
+
if (round >= MAX_CHECK_RERUNS) return await stop_reruns_spent(input.branch_name, error);
|
|
1526
|
+
const rerun = await followup_job_rerun.rerun_failed_jobs(input.branch_name, round);
|
|
1527
|
+
if (rerun.length === 0) throw error;
|
|
1528
|
+
input.reran?.push(...rerun);
|
|
1529
|
+
const waited = await wait_after_rerun(input);
|
|
1530
|
+
if ("snapshot" in waited) return waited.snapshot;
|
|
1531
|
+
return await rejudge_failed_jobs(input, waited.failure, round + 1);
|
|
1532
|
+
}
|
|
1533
|
+
async function rejudge_after_rerun(input, error) {
|
|
1534
|
+
if (!is_checks_failure(error)) throw error;
|
|
1535
|
+
const recovered = error instanceof MissingContextError ? await rejudge_missing(input, error) : void 0;
|
|
1536
|
+
return recovered ?? await rejudge_failed_jobs(input, error, 0);
|
|
1537
|
+
}
|
|
1538
|
+
async function run_checks(input) {
|
|
1539
|
+
try {
|
|
1540
|
+
return await wait_for_checks(input);
|
|
1541
|
+
} catch (error) {
|
|
1542
|
+
return await rejudge_after_rerun(input, error);
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
function read_coderabbit_skip_notes(snapshot) {
|
|
1546
|
+
return snapshot.rollup.filter((check) => is_coderabbit_check(check.name)).filter((check) => check.status !== CHECK_STATUS_PASS).map(
|
|
1547
|
+
(check) => `CodeRabbit check skipped (kit#753): ${check.name} was ${check.status} at merge time`
|
|
1548
|
+
);
|
|
1549
|
+
}
|
|
1550
|
+
function log_skip_notes(notes) {
|
|
1551
|
+
for (const note of notes) {
|
|
1552
|
+
console.info(`\u23ED ${note}`);
|
|
1553
|
+
}
|
|
1554
|
+
}
|
|
1555
|
+
var git_pr_followup_checks = {
|
|
1556
|
+
run_checks,
|
|
1557
|
+
read_coderabbit_skip_notes,
|
|
1558
|
+
log_skip_notes
|
|
1559
|
+
};
|
|
1560
|
+
|
|
1561
|
+
// scripts/followup/git-pr-followup-wrapup.ts
|
|
1562
|
+
var { STAGE, lap } = git_followup_stages;
|
|
1563
|
+
var COMPLETION_COMMENT_RECOVERY = "post the completion report by hand \u2014 `gh pr comment <branch>` for the pull request, `gh api repos/{owner}/{repo}/issues/<N>/comments` for the issue";
|
|
1564
|
+
var IN_PROGRESS_RECOVERY = "gh api -X DELETE repos/{owner}/{repo}/issues/<N>/labels/in-progress";
|
|
1565
|
+
function build_notify_body(input) {
|
|
1566
|
+
return git_notify.build_completion_comment_body({
|
|
1567
|
+
message: input.notify_config.message,
|
|
1568
|
+
issue_number: input.issue_number,
|
|
1569
|
+
pr_url: input.pr_url,
|
|
1570
|
+
mentions: input.notify_config.mentions,
|
|
1571
|
+
notes: input.report_notes
|
|
1572
|
+
});
|
|
1573
|
+
}
|
|
1574
|
+
async function post_notify_issue(input) {
|
|
1575
|
+
if (input.issue_number === void 0) {
|
|
1576
|
+
throw new Error("Issue number is required for issue notification.");
|
|
1577
|
+
}
|
|
1578
|
+
await issue_body_or_comment.post(input.issue_number, input.body);
|
|
1579
|
+
}
|
|
1580
|
+
function should_notify_pr(target) {
|
|
1581
|
+
return target === "pr" || target === "both";
|
|
1582
|
+
}
|
|
1583
|
+
function should_notify_issue(target) {
|
|
1584
|
+
return target === "issue" || target === "both";
|
|
1585
|
+
}
|
|
1586
|
+
async function post_completion_notification(input) {
|
|
1587
|
+
if (input.notify_config === void 0) return;
|
|
1588
|
+
const body = build_notify_body({
|
|
1589
|
+
notify_config: input.notify_config,
|
|
1590
|
+
issue_number: input.issue_number,
|
|
1591
|
+
pr_url: input.pr_url,
|
|
1592
|
+
report_notes: input.report_notes
|
|
1593
|
+
});
|
|
1594
|
+
const { target } = input.notify_config;
|
|
1595
|
+
if (should_notify_pr(target)) {
|
|
1596
|
+
await git_gh_command.pr_comment(input.branch_name, body);
|
|
1597
|
+
}
|
|
1598
|
+
if (should_notify_issue(target)) {
|
|
1599
|
+
await post_notify_issue({ issue_number: input.issue_number, body });
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
async function notify_step(input) {
|
|
1603
|
+
if (input.is_completion_recorded === true) return;
|
|
1604
|
+
await git_followup_cleanup.run_guarded_step(input.should_merge, {
|
|
1605
|
+
label: "The completion comment",
|
|
1606
|
+
recovery: COMPLETION_COMMENT_RECOVERY,
|
|
1607
|
+
run: async () => {
|
|
1608
|
+
await post_completion_notification({
|
|
1609
|
+
branch_name: input.branch_name,
|
|
1610
|
+
issue_number: input.issue_number,
|
|
1611
|
+
notify_config: input.notify_config,
|
|
1612
|
+
pr_url: input.pr_url,
|
|
1613
|
+
report_notes: input.report_notes
|
|
1614
|
+
});
|
|
1615
|
+
}
|
|
1616
|
+
});
|
|
1617
|
+
}
|
|
1618
|
+
async function epic_close_step(input) {
|
|
1619
|
+
await git_followup_cleanup.run_guarded_step(input.should_merge, {
|
|
1620
|
+
label: "The epic auto-close",
|
|
1621
|
+
recovery: void 0,
|
|
1622
|
+
run: async () => {
|
|
1623
|
+
await epic_close.close_completed_epics({
|
|
1624
|
+
issue_number: input.issue_number,
|
|
1625
|
+
is_merged: input.should_merge
|
|
1626
|
+
});
|
|
1627
|
+
}
|
|
1628
|
+
});
|
|
1629
|
+
}
|
|
1630
|
+
async function in_progress_step(input) {
|
|
1631
|
+
if (!input.should_merge) return;
|
|
1632
|
+
await git_followup_cleanup.run_guarded_step(input.should_merge, {
|
|
1633
|
+
label: "The `in-progress` label removal",
|
|
1634
|
+
recovery: IN_PROGRESS_RECOVERY,
|
|
1635
|
+
run: async () => {
|
|
1636
|
+
await git_followup_label.strip_in_progress(input.issue_number);
|
|
1637
|
+
}
|
|
1638
|
+
});
|
|
1639
|
+
}
|
|
1640
|
+
async function issue_close_step(input) {
|
|
1641
|
+
if (!input.should_merge) return;
|
|
1642
|
+
await git_followup_cleanup.run_guarded_step(input.should_merge, {
|
|
1643
|
+
label: "The merged issue close",
|
|
1644
|
+
recovery: git_followup_issue_close.CLOSE_RECOVERY,
|
|
1645
|
+
run: async () => {
|
|
1646
|
+
await git_followup_issue_close.ensure_issue_closed({
|
|
1647
|
+
issue_number: input.closes_number,
|
|
1648
|
+
pr_url: input.pr_url
|
|
1649
|
+
});
|
|
1650
|
+
}
|
|
1651
|
+
});
|
|
1652
|
+
}
|
|
1653
|
+
async function run_tail_steps(input) {
|
|
1654
|
+
if (!input.should_merge) {
|
|
1655
|
+
await notify_step(input);
|
|
1656
|
+
await epic_close_step(input);
|
|
1657
|
+
return;
|
|
1658
|
+
}
|
|
1659
|
+
await Promise.all([
|
|
1660
|
+
notify_step(input),
|
|
1661
|
+
epic_close_step(input),
|
|
1662
|
+
in_progress_step(input),
|
|
1663
|
+
issue_close_step(input)
|
|
1664
|
+
]);
|
|
1665
|
+
}
|
|
1666
|
+
async function merge_step(input) {
|
|
1667
|
+
await issue_watch_gate.assert_read_here();
|
|
1668
|
+
await git_pr_merge_checked.merge_checked(input);
|
|
1669
|
+
}
|
|
1670
|
+
async function send_beside_merge(input) {
|
|
1671
|
+
if (!input.should_merge || input.is_merged === true) {
|
|
1672
|
+
await input.send_completion();
|
|
1673
|
+
return STAGE.telegram;
|
|
1674
|
+
}
|
|
1675
|
+
await input.before_merge?.(input.checked?.head_sha);
|
|
1676
|
+
await settled_together(input.send_completion(), merge_step(input));
|
|
1677
|
+
return STAGE.telegram_and_merge;
|
|
1678
|
+
}
|
|
1679
|
+
async function run_wrapup(input, log) {
|
|
1680
|
+
lap(log, await send_beside_merge(input));
|
|
1681
|
+
await run_tail_steps(input);
|
|
1682
|
+
lap(log, STAGE.completion_and_epic_close);
|
|
1683
|
+
}
|
|
1684
|
+
var git_pr_followup_wrapup = {
|
|
1685
|
+
run_wrapup
|
|
1686
|
+
};
|
|
1687
|
+
|
|
1688
|
+
// scripts/followup/git-pr-followup.ts
|
|
1689
|
+
var { STAGE: STAGE2, lap: lap2 } = git_followup_stages;
|
|
1690
|
+
var { run_checks: run_checks2, read_coderabbit_skip_notes: read_coderabbit_skip_notes2, log_skip_notes: log_skip_notes2 } = git_pr_followup_checks;
|
|
1691
|
+
var REPO_NAME_SEPARATOR = "/";
|
|
1692
|
+
function parse_repo_name(name_with_owner) {
|
|
1693
|
+
if (name_with_owner === void 0) return void 0;
|
|
1694
|
+
const parts = name_with_owner.split(REPO_NAME_SEPARATOR);
|
|
1695
|
+
return parts.at(-1);
|
|
1696
|
+
}
|
|
1697
|
+
function build_telegram_input(input) {
|
|
1698
|
+
return {
|
|
1699
|
+
task_type: input.task_type,
|
|
1700
|
+
repo_name: input.context.repo_name,
|
|
1701
|
+
issue_title: input.context.issue_title,
|
|
1702
|
+
body: input.body,
|
|
1703
|
+
issue_url: input.context.issue_url,
|
|
1704
|
+
pr_url: input.context.pr_url
|
|
1705
|
+
};
|
|
1706
|
+
}
|
|
1707
|
+
function build_issue_url(pr_url, issue_number) {
|
|
1708
|
+
if (issue_number === void 0) return void 0;
|
|
1709
|
+
const target = github_issue_url.parse_pull(pr_url);
|
|
1710
|
+
if (target === void 0) return void 0;
|
|
1711
|
+
return `${target.base_url}/issues/${issue_number}`;
|
|
1712
|
+
}
|
|
1713
|
+
var { parse_closes_issue_number } = git_closes_keyword;
|
|
1714
|
+
async function warn_if_missing_closes(branch_name) {
|
|
1715
|
+
const body = await git_gh_command.pr_get_body(branch_name);
|
|
1716
|
+
const closes_number = parse_closes_issue_number(body);
|
|
1717
|
+
if (closes_number !== void 0) return closes_number;
|
|
1718
|
+
console.warn("");
|
|
1719
|
+
console.warn(
|
|
1720
|
+
'\u26A0\uFE0F PR body is missing a "closes #N" keyword \u2014 the linked Issue will not auto-close on merge.'
|
|
1721
|
+
);
|
|
1722
|
+
console.warn(" Recovery: pnpm josh pr (or: pnpm josh git -y --skip-commit --skip-push)");
|
|
1723
|
+
console.warn("");
|
|
1724
|
+
return void 0;
|
|
1725
|
+
}
|
|
1726
|
+
async function read_issue_title(issue_number, closes_number) {
|
|
1727
|
+
const number = issue_number ?? await closes_number;
|
|
1728
|
+
if (number === void 0) return void 0;
|
|
1729
|
+
return await git_gh_command.issue_get_title(number);
|
|
1730
|
+
}
|
|
1731
|
+
async function read_run_context(input) {
|
|
1732
|
+
const closes = warn_if_missing_closes(input.branch_name);
|
|
1733
|
+
const [closes_number, name_with_owner, pr_url, issue_title] = await Promise.all([
|
|
1734
|
+
closes,
|
|
1735
|
+
git_gh_command.repo_get_name_with_owner(),
|
|
1736
|
+
git_gh_command.pr_get_url(input.branch_name),
|
|
1737
|
+
read_issue_title(input.issue_number, closes)
|
|
1738
|
+
]);
|
|
1739
|
+
const issue_number = input.issue_number ?? closes_number;
|
|
1740
|
+
return {
|
|
1741
|
+
issue_number,
|
|
1742
|
+
closes_number,
|
|
1743
|
+
context: {
|
|
1744
|
+
repo_name: parse_repo_name(name_with_owner),
|
|
1745
|
+
issue_title,
|
|
1746
|
+
issue_url: build_issue_url(pr_url, issue_number),
|
|
1747
|
+
pr_url
|
|
1748
|
+
}
|
|
1749
|
+
};
|
|
1750
|
+
}
|
|
1751
|
+
async function completion_sender(context, skip_notes, is_merge_pending) {
|
|
1752
|
+
const pending_line = await git_followup_pending.pending_release_line({ is_merge_pending });
|
|
1753
|
+
const lines2 = pending_line === void 0 ? skip_notes : [pending_line, ...skip_notes];
|
|
1754
|
+
const input = build_telegram_input({ task_type: "completion", context, body: lines2.join("\n") });
|
|
1755
|
+
return async function send_completion() {
|
|
1756
|
+
await telegram_notify.send_or_report(input, void 0);
|
|
1757
|
+
};
|
|
1758
|
+
}
|
|
1759
|
+
async function send_nothing() {
|
|
1760
|
+
}
|
|
1761
|
+
async function run_comment_scans(input, context, log) {
|
|
1762
|
+
const comment_notes = await git_pr_coderabbit.handle_coderabbit_findings({
|
|
1763
|
+
branch_name: input.branch_name,
|
|
1764
|
+
ignore_reason: input.coderabbit_ignore_reason
|
|
1765
|
+
});
|
|
1766
|
+
lap2(log, STAGE2.coderabbit_comments);
|
|
1767
|
+
const ai_review_notes = await git_pr_ai_review.handle_ai_review_findings({
|
|
1768
|
+
branch_name: input.branch_name,
|
|
1769
|
+
ignore_reason: input.ai_review_ignore_reason,
|
|
1770
|
+
context
|
|
1771
|
+
});
|
|
1772
|
+
lap2(log, STAGE2.ai_review_comments);
|
|
1773
|
+
return [...comment_notes, ...ai_review_notes];
|
|
1774
|
+
}
|
|
1775
|
+
function wait_for_green_of(input, context, issue_number, log) {
|
|
1776
|
+
return async function wait_for_green() {
|
|
1777
|
+
return await run_checks2({
|
|
1778
|
+
branch_name: input.branch_name,
|
|
1779
|
+
is_skip_watch: input.is_skip_watch,
|
|
1780
|
+
reran: log.reran,
|
|
1781
|
+
observe: followup_coderabbit_wait.all(
|
|
1782
|
+
followup_checks_event.observer_of(issue_number, context.pr_url),
|
|
1783
|
+
followup_coderabbit_wait.observer_of(log.coderabbit),
|
|
1784
|
+
followup_ci_path.observer_of(log.ci_path)
|
|
1785
|
+
)
|
|
1786
|
+
});
|
|
1787
|
+
};
|
|
1788
|
+
}
|
|
1789
|
+
async function wait_for_review_green(input, context, issue_number, log) {
|
|
1790
|
+
const wait_for_green = wait_for_green_of(input, context, issue_number, log);
|
|
1791
|
+
const checked = await wait_for_green();
|
|
1792
|
+
lap2(log, STAGE2.checks_wait);
|
|
1793
|
+
const settled = await followup_coderabbit_retrigger.settle(
|
|
1794
|
+
checked,
|
|
1795
|
+
wait_for_green,
|
|
1796
|
+
input.branch_name,
|
|
1797
|
+
log.coderabbit
|
|
1798
|
+
);
|
|
1799
|
+
if (settled.is_retriggered) lap2(log, STAGE2.coderabbit_retrigger);
|
|
1800
|
+
return settled;
|
|
1801
|
+
}
|
|
1802
|
+
async function run_review_checks(input, context, log, issue_number) {
|
|
1803
|
+
if (input.is_merged === true) return { notes: [], report: [] };
|
|
1804
|
+
git_followup_stages.hold_issue(log, issue_number);
|
|
1805
|
+
const managed = await git_pr_managed_config.handle_managed_config_changes({
|
|
1806
|
+
should_merge: input.should_merge
|
|
1807
|
+
});
|
|
1808
|
+
const settled = await wait_for_review_green(input, context, issue_number, log);
|
|
1809
|
+
const { snapshot } = settled;
|
|
1810
|
+
const check_notes = [...settled.notes, ...read_coderabbit_skip_notes2(snapshot)];
|
|
1811
|
+
log_skip_notes2(check_notes);
|
|
1812
|
+
const scan_notes = await run_comment_scans(input, context, log);
|
|
1813
|
+
const report = [...managed, ...followup_check_report.lines({ ...settled, reran: log.reran })];
|
|
1814
|
+
return { notes: [...report, ...check_notes, ...scan_notes], report, snapshot };
|
|
1815
|
+
}
|
|
1816
|
+
async function prepare_notify(input, issue_number, context, checks) {
|
|
1817
|
+
const is_recorded = await git_followup_merged.is_completion_recorded({
|
|
1818
|
+
merged_at: input.is_merged === true ? input.merged_at : void 0,
|
|
1819
|
+
issue_number,
|
|
1820
|
+
pr_url: context.pr_url
|
|
1821
|
+
});
|
|
1822
|
+
if (is_recorded) return { is_recorded, send: send_nothing };
|
|
1823
|
+
return { is_recorded, send: await completion_sender(context, checks.notes, input.should_merge) };
|
|
1824
|
+
}
|
|
1825
|
+
async function run_stages(input, log) {
|
|
1826
|
+
const { issue_number, closes_number, context } = await read_run_context(input);
|
|
1827
|
+
lap2(log, STAGE2.closes_and_context);
|
|
1828
|
+
const checks = await run_review_checks(input, context, log, issue_number);
|
|
1829
|
+
const notify = await prepare_notify(input, issue_number, context, checks);
|
|
1830
|
+
await git_pr_followup_wrapup.run_wrapup(
|
|
1831
|
+
{
|
|
1832
|
+
branch_name: input.branch_name,
|
|
1833
|
+
issue_number,
|
|
1834
|
+
closes_number,
|
|
1835
|
+
notify_config: input.notify_config,
|
|
1836
|
+
pr_url: context.pr_url,
|
|
1837
|
+
should_merge: input.should_merge,
|
|
1838
|
+
report_notes: checks.report,
|
|
1839
|
+
is_merged: input.is_merged,
|
|
1840
|
+
is_completion_recorded: notify.is_recorded,
|
|
1841
|
+
send_completion: notify.send,
|
|
1842
|
+
checked: checks.snapshot,
|
|
1843
|
+
wait_for_green: wait_for_green_of(input, context, issue_number, log),
|
|
1844
|
+
before_merge: input.before_merge
|
|
1845
|
+
},
|
|
1846
|
+
log
|
|
1847
|
+
);
|
|
1848
|
+
return issue_number;
|
|
1849
|
+
}
|
|
1850
|
+
async function run2(input) {
|
|
1851
|
+
const log = git_followup_stages.new_log();
|
|
1852
|
+
try {
|
|
1853
|
+
return await run_stages(input, log);
|
|
1854
|
+
} catch (error) {
|
|
1855
|
+
lap2(log, git_followup_stages.stopped_lap(error));
|
|
1856
|
+
throw error;
|
|
1857
|
+
} finally {
|
|
1858
|
+
git_followup_stages.print_stages(log);
|
|
1859
|
+
await git_followup_stages.record_waits(log);
|
|
1860
|
+
}
|
|
1861
|
+
}
|
|
1862
|
+
var git_pr_followup = {
|
|
1863
|
+
run: run2
|
|
1864
|
+
};
|
|
1865
|
+
|
|
1866
|
+
// scripts/followup/git-followup-workflow.ts
|
|
1867
|
+
josh_environment_file.load_environment_file();
|
|
1868
|
+
var HELP_TEXT = `
|
|
1869
|
+
\u{1F6A6} PR Followup Workflow
|
|
1870
|
+
|
|
1871
|
+
Usage:
|
|
1872
|
+
jf-git-followup [issue] [options]
|
|
1873
|
+
|
|
1874
|
+
Options:
|
|
1875
|
+
--branch Target branch name (default: current branch)
|
|
1876
|
+
--issue-number Issue number for completion messages
|
|
1877
|
+
--notify-target pr | issue | both
|
|
1878
|
+
--notify-message Completion message header
|
|
1879
|
+
--notify-message-file Read the completion message from a file (\`-\` reads stdin). Use this
|
|
1880
|
+
whenever the message carries a backtick or a \`$\` \u2014 inside shell
|
|
1881
|
+
double quotes the shell evaluates them before this command runs
|
|
1882
|
+
--notify-mentions Comma-separated mentions (user,org/team)
|
|
1883
|
+
--coderabbit-ignore-reason Reason text when keeping CodeRabbit findings unresolved
|
|
1884
|
+
--ai-review-ignore-reason Reason text when keeping AI reviewer (Claude Review / CodeRabbit
|
|
1885
|
+
summary) findings unresolved
|
|
1886
|
+
--skip-watch Skip the two-minute check look-ahead and only evaluate latest status
|
|
1887
|
+
--no-merge Skip merging the PR (merge is on by default)
|
|
1888
|
+
--merge (Deprecated \u2014 merge is now the default; kept for backward compatibility)
|
|
1889
|
+
-h, --help Show this help
|
|
1890
|
+
`;
|
|
1891
|
+
function display_help() {
|
|
1892
|
+
console.info(HELP_TEXT);
|
|
1893
|
+
}
|
|
1894
|
+
function parse_cli_arguments() {
|
|
1895
|
+
return parseArgs({
|
|
1896
|
+
options: {
|
|
1897
|
+
branch: { type: "string" },
|
|
1898
|
+
"issue-number": { type: "string" },
|
|
1899
|
+
"notify-target": { type: "string" },
|
|
1900
|
+
"notify-message": { type: "string" },
|
|
1901
|
+
"notify-message-file": { type: "string" },
|
|
1902
|
+
"notify-mentions": { type: "string" },
|
|
1903
|
+
"coderabbit-ignore-reason": { type: "string" },
|
|
1904
|
+
"ai-review-ignore-reason": { type: "string" },
|
|
1905
|
+
"skip-watch": { type: "boolean" },
|
|
1906
|
+
"no-merge": { type: "boolean" },
|
|
1907
|
+
merge: { type: "boolean" },
|
|
1908
|
+
help: { type: "boolean", short: "h" }
|
|
1909
|
+
},
|
|
1910
|
+
allowPositionals: true
|
|
1911
|
+
});
|
|
1912
|
+
}
|
|
1913
|
+
async function resolve_branch_name(raw_branch) {
|
|
1914
|
+
if (raw_branch !== void 0 && raw_branch.trim().length > 0) return raw_branch.trim();
|
|
1915
|
+
return await git_branch.current();
|
|
1916
|
+
}
|
|
1917
|
+
function build_notify_config2(values) {
|
|
1918
|
+
return git_notify.build_notify_config({
|
|
1919
|
+
raw_target: values["notify-target"] ?? "issue",
|
|
1920
|
+
raw_message: cli_body.resolve({
|
|
1921
|
+
inline: values["notify-message"],
|
|
1922
|
+
file_path: values["notify-message-file"],
|
|
1923
|
+
inline_flag: "--notify-message",
|
|
1924
|
+
file_flag: "--notify-message-file"
|
|
1925
|
+
}),
|
|
1926
|
+
raw_mentions: values["notify-mentions"]
|
|
1927
|
+
});
|
|
1928
|
+
}
|
|
1929
|
+
function is_merge_resolved(values) {
|
|
1930
|
+
return values["no-merge"] !== true;
|
|
1931
|
+
}
|
|
1932
|
+
var { assert_review_attested: assert_review_attested2, assert_review_recorded: assert_review_recorded2, is_valid_issue: is_valid_issue2 } = followup_review_gates;
|
|
1933
|
+
async function assert_live_evidence(should_merge, branch_name) {
|
|
1934
|
+
if (!should_merge) return;
|
|
1935
|
+
const verdict = await live_evidence.check(branch_name);
|
|
1936
|
+
if (verdict !== "required") return;
|
|
1937
|
+
throw new Error(live_evidence.refusal_message());
|
|
1938
|
+
}
|
|
1939
|
+
async function assert_acceptance_mapped(should_merge, issue_number, branch_name) {
|
|
1940
|
+
if (!should_merge || !is_valid_issue2(issue_number)) return;
|
|
1941
|
+
const refusal = await acceptance_map_check.refusal(issue_number, branch_name);
|
|
1942
|
+
if (refusal !== void 0) throw new Error(refusal);
|
|
1943
|
+
}
|
|
1944
|
+
async function assert_removed_tests_disposed(should_merge, branch_name) {
|
|
1945
|
+
if (!should_merge) return;
|
|
1946
|
+
const refusal = await removed_tests_check.refusal(branch_name);
|
|
1947
|
+
if (refusal !== void 0) throw new Error(refusal);
|
|
1948
|
+
}
|
|
1949
|
+
async function assert_merge_gates(should_merge, issue_number, branch_name) {
|
|
1950
|
+
await assert_review_attested2(should_merge);
|
|
1951
|
+
await assert_review_recorded2(should_merge, issue_number);
|
|
1952
|
+
await assert_live_evidence(should_merge, branch_name);
|
|
1953
|
+
await assert_acceptance_mapped(should_merge, issue_number, branch_name);
|
|
1954
|
+
await assert_removed_tests_disposed(should_merge, branch_name);
|
|
1955
|
+
}
|
|
1956
|
+
async function prepare_merge(plan, issue_number, branch_name) {
|
|
1957
|
+
if (plan.is_merged) return;
|
|
1958
|
+
await assert_merge_gates(plan.should_merge, issue_number, branch_name);
|
|
1959
|
+
if (is_valid_issue2(issue_number)) await lane_size_record.record(plan.should_merge, issue_number);
|
|
1960
|
+
await git_followup_flush.commit_ledger_step(plan.should_merge, issue_number);
|
|
1961
|
+
}
|
|
1962
|
+
function answer_help_or_open(values) {
|
|
1963
|
+
if (values.help !== true) {
|
|
1964
|
+
followup_section.print_section();
|
|
1965
|
+
return false;
|
|
1966
|
+
}
|
|
1967
|
+
display_help();
|
|
1968
|
+
return true;
|
|
1969
|
+
}
|
|
1970
|
+
async function main() {
|
|
1971
|
+
const cli = parse_cli_arguments();
|
|
1972
|
+
if (answer_help_or_open(cli.values)) return;
|
|
1973
|
+
const issue_number = cli.values["issue-number"] ?? parse_issue_number_from_text(cli.positionals[0] ?? void 0);
|
|
1974
|
+
const branch_name = await resolve_branch_name(cli.values.branch);
|
|
1975
|
+
const plan = await git_followup_merged.read_merge_plan(branch_name, is_merge_resolved(cli.values));
|
|
1976
|
+
await prepare_merge(plan, issue_number, branch_name);
|
|
1977
|
+
const used_issue_number = await git_pr_followup.run({
|
|
1978
|
+
branch_name,
|
|
1979
|
+
issue_number,
|
|
1980
|
+
notify_config: build_notify_config2(cli.values),
|
|
1981
|
+
coderabbit_ignore_reason: cli.values["coderabbit-ignore-reason"],
|
|
1982
|
+
ai_review_ignore_reason: cli.values["ai-review-ignore-reason"],
|
|
1983
|
+
is_skip_watch: cli.values["skip-watch"] === true,
|
|
1984
|
+
should_merge: plan.should_merge,
|
|
1985
|
+
is_merged: plan.is_merged,
|
|
1986
|
+
merged_at: plan.merged_at,
|
|
1987
|
+
before_merge: async (head) => {
|
|
1988
|
+
await followup_human_merge.assert_allowed(branch_name, issue_number, head);
|
|
1989
|
+
}
|
|
1990
|
+
});
|
|
1991
|
+
await git_followup_finish.finish(used_issue_number ?? issue_number, plan.should_merge);
|
|
1992
|
+
}
|
|
1993
|
+
try {
|
|
1994
|
+
await main();
|
|
1995
|
+
console.info("");
|
|
1996
|
+
} catch (error) {
|
|
1997
|
+
if (error instanceof HumanMergeRequiredError) console.info(error.message);
|
|
1998
|
+
else git_error.handle(error);
|
|
1999
|
+
}
|
|
2000
|
+
var git_followup_workflow = {
|
|
2001
|
+
answer_help_or_open,
|
|
2002
|
+
assert_acceptance_mapped,
|
|
2003
|
+
assert_live_evidence,
|
|
2004
|
+
assert_removed_tests_disposed,
|
|
2005
|
+
parse_issue_number_from_text,
|
|
2006
|
+
prepare_merge,
|
|
2007
|
+
resolve_branch_name,
|
|
2008
|
+
is_merge_resolved
|
|
2009
|
+
};
|
|
2010
|
+
export {
|
|
2011
|
+
git_followup_workflow
|
|
2012
|
+
};
|