@joshuafolkken/kit 1.872.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/.claude-plugin/plugin.json +11 -0
- package/.claude/settings.json +110 -0
- package/.claude/skills/dependency-update/SKILL.md +76 -0
- package/.claude/skills/epic-commands/SKILL.md +463 -0
- package/.claude/skills/verify-ui/SKILL.md +96 -0
- package/.claude/skills/workflow-commands/SKILL.md +265 -0
- package/.claude/skills/workflow-commands/background-commands.md +130 -0
- package/.claude/skills/workflow-commands/backlogrun-child.md +364 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +345 -0
- package/.claude/skills/workflow-commands/backlogrun-park.md +179 -0
- package/.claude/skills/workflow-commands/backlogrun-progress.md +600 -0
- package/.claude/skills/workflow-commands/backlogrun-steps.md +604 -0
- package/.claude/skills/workflow-commands/backlogrun.md +109 -0
- package/.claude/skills/workflow-commands/chain-rule.md +98 -0
- package/.claude/skills/workflow-commands/delegation.md +52 -0
- package/.claude/skills/workflow-commands/followup-reference.md +118 -0
- package/.claude/skills/workflow-commands/followup.md +222 -0
- package/.claude/skills/workflow-commands/fullrun-steps.md +93 -0
- package/.claude/skills/workflow-commands/fullrun.md +82 -0
- package/.claude/skills/workflow-commands/halfrun.md +73 -0
- package/.claude/skills/workflow-commands/into-target.md +48 -0
- package/.claude/skills/workflow-commands/issue-comments.md +109 -0
- package/.claude/skills/workflow-commands/issue-fold-existing.md +27 -0
- package/.claude/skills/workflow-commands/issue-scout.md +45 -0
- package/.claude/skills/workflow-commands/kickoff.md +82 -0
- package/.claude/skills/workflow-commands/latest-gate.md +85 -0
- package/.claude/skills/workflow-commands/needs-human-review.md +64 -0
- package/.claude/skills/workflow-commands/observation-filing.md +349 -0
- package/.claude/skills/workflow-commands/pre-gate-cut.md +340 -0
- package/.claude/skills/workflow-commands/prerequisite.md +62 -0
- package/.claude/skills/workflow-commands/retrospective.md +81 -0
- package/.claude/skills/workflow-commands/rule-residency.md +267 -0
- package/.claude/skills/workflow-commands/split-assessment.md +130 -0
- package/.claude/skills/workflow-commands/target-repository.md +58 -0
- package/.claude/skills/workflow-commands/working-tree-hold.md +66 -0
- package/.claude-plugin/marketplace.json +15 -0
- package/.coderabbit.yaml +50 -0
- package/.codex/config.toml +8 -0
- package/.codex/hooks.json +71 -0
- package/.cursorrules +45 -0
- package/.gitattributes +7 -0
- package/.github/dependabot.yml +19 -0
- package/.github/pull_request_template.md +1 -0
- package/.github/release.yml +18 -0
- package/.github/workflows/auto-tag.yml +111 -0
- package/.github/workflows/ci.yml +681 -0
- package/.github/workflows/dependabot-auto-merge.yml +55 -0
- package/.github/workflows/production.yml +47 -0
- package/.github/workflows/publish.yml +39 -0
- package/.github/workflows/sonar-qube.yml +34 -0
- package/.mcp.json +8 -0
- package/.ncurc.json +3 -0
- package/.prettierignore +20 -0
- package/.vscode/extensions.json +21 -0
- package/.vscode/settings.json +41 -0
- package/AGENTS.md +29 -0
- package/CLAUDE.md +207 -0
- package/CODE_OF_CONDUCT.md +132 -0
- package/GEMINI.md +30 -0
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/SECURITY.md +34 -0
- package/cspell/index.yaml +177 -0
- package/dist/CLAUDE.md +207 -0
- package/dist/config-merge/index.d.ts +29 -0
- package/dist/config-merge/index.js +459 -0
- package/dist/hooks/batch-guard.js +28 -0
- package/dist/hooks/chunk-25JL6FMS.js +4970 -0
- package/dist/hooks/chunk-2ANGT3XM.js +375 -0
- package/dist/hooks/chunk-2EI5GBSW.js +42 -0
- package/dist/hooks/chunk-2OT5XE2N.js +5014 -0
- package/dist/hooks/chunk-2RUPMGGV.js +137 -0
- package/dist/hooks/chunk-2XIGZQMQ.js +3299 -0
- package/dist/hooks/chunk-33ELOKEV.js +910 -0
- package/dist/hooks/chunk-33YRTKM7.js +230 -0
- package/dist/hooks/chunk-36JQU5NN.js +77 -0
- package/dist/hooks/chunk-3EJBTWVS.js +1769 -0
- package/dist/hooks/chunk-3FK5SFAC.js +432 -0
- package/dist/hooks/chunk-3PWPYDD2.js +240 -0
- package/dist/hooks/chunk-3TQU7TDH.js +375 -0
- package/dist/hooks/chunk-3TVLSFZ6.js +432 -0
- package/dist/hooks/chunk-3VXYCB4E.js +77 -0
- package/dist/hooks/chunk-44M6JXGV.js +3398 -0
- package/dist/hooks/chunk-46EEEHC3.js +240 -0
- package/dist/hooks/chunk-4A7UVP2P.js +364 -0
- package/dist/hooks/chunk-4LFQEZS4.js +137 -0
- package/dist/hooks/chunk-4OCX3V2T.js +469 -0
- package/dist/hooks/chunk-4OHA5DE7.js +49 -0
- package/dist/hooks/chunk-4PMDW3YD.js +68 -0
- package/dist/hooks/chunk-4QHBNAI4.js +68 -0
- package/dist/hooks/chunk-4SSB3FEE.js +3273 -0
- package/dist/hooks/chunk-5A2WQ2CQ.js +5390 -0
- package/dist/hooks/chunk-5EVA2JQB.js +5390 -0
- package/dist/hooks/chunk-5P7VF5VE.js +3230 -0
- package/dist/hooks/chunk-5QWJGGZP.js +49 -0
- package/dist/hooks/chunk-5U5EZYG6.js +77 -0
- package/dist/hooks/chunk-5VUUF3ZV.js +240 -0
- package/dist/hooks/chunk-5WA7UBT3.js +374 -0
- package/dist/hooks/chunk-6EBGRQ3Q.js +301 -0
- package/dist/hooks/chunk-6TVHWMD3.js +432 -0
- package/dist/hooks/chunk-6V5OPIUU.js +13 -0
- package/dist/hooks/chunk-6VAGLEMB.js +68 -0
- package/dist/hooks/chunk-75BTXKFJ.js +3424 -0
- package/dist/hooks/chunk-75RHN67S.js +137 -0
- package/dist/hooks/chunk-76KC3BDD.js +3414 -0
- package/dist/hooks/chunk-76SLS7CZ.js +898 -0
- package/dist/hooks/chunk-7DHZ4DWT.js +5015 -0
- package/dist/hooks/chunk-7INSJDGE.js +458 -0
- package/dist/hooks/chunk-7VJ4FTDX.js +268 -0
- package/dist/hooks/chunk-7XCYNHQK.js +77 -0
- package/dist/hooks/chunk-A5YJ3H7E.js +375 -0
- package/dist/hooks/chunk-AAEXXUUL.js +268 -0
- package/dist/hooks/chunk-ABVEVV2M.js +432 -0
- package/dist/hooks/chunk-ACN3YXFL.js +68 -0
- package/dist/hooks/chunk-AD3XE3QZ.js +397 -0
- package/dist/hooks/chunk-AENFZPZH.js +230 -0
- package/dist/hooks/chunk-AFKRFQ6W.js +68 -0
- package/dist/hooks/chunk-AHD5IPWI.js +375 -0
- package/dist/hooks/chunk-AMK5JGV7.js +77 -0
- package/dist/hooks/chunk-ARN7NCQI.js +425 -0
- package/dist/hooks/chunk-AUFY653N.js +3425 -0
- package/dist/hooks/chunk-AXQBNFEF.js +375 -0
- package/dist/hooks/chunk-AYC7R6U4.js +3316 -0
- package/dist/hooks/chunk-AYEA2FJ7.js +5015 -0
- package/dist/hooks/chunk-B2LIXYFL.js +77 -0
- package/dist/hooks/chunk-B4HPNY2I.js +375 -0
- package/dist/hooks/chunk-B4YNCUGB.js +469 -0
- package/dist/hooks/chunk-B57S3VWT.js +922 -0
- package/dist/hooks/chunk-BINZ3PLI.js +364 -0
- package/dist/hooks/chunk-BIWLABFK.js +432 -0
- package/dist/hooks/chunk-BODUSXKK.js +410 -0
- package/dist/hooks/chunk-BQBAT2YK.js +375 -0
- package/dist/hooks/chunk-BUJEBW75.js +391 -0
- package/dist/hooks/chunk-BVNWORKA.js +72 -0
- package/dist/hooks/chunk-BWI47LQS.js +5205 -0
- package/dist/hooks/chunk-C25HRMJX.js +137 -0
- package/dist/hooks/chunk-CBFZNC74.js +375 -0
- package/dist/hooks/chunk-CECYXS4Y.js +3424 -0
- package/dist/hooks/chunk-CELGUP5F.js +49 -0
- package/dist/hooks/chunk-CMHANU3F.js +3442 -0
- package/dist/hooks/chunk-CMN372LI.js +68 -0
- package/dist/hooks/chunk-CPGZLMMK.js +3299 -0
- package/dist/hooks/chunk-CTQKXDC7.js +268 -0
- package/dist/hooks/chunk-CYAT4RIT.js +68 -0
- package/dist/hooks/chunk-CYTWYCH2.js +5014 -0
- package/dist/hooks/chunk-CZSOLRBA.js +77 -0
- package/dist/hooks/chunk-D2PIDYJR.js +3438 -0
- package/dist/hooks/chunk-DE57HI6T.js +137 -0
- package/dist/hooks/chunk-DGXDGAPG.js +5306 -0
- package/dist/hooks/chunk-DNYRSYQG.js +5014 -0
- package/dist/hooks/chunk-DTAXH2A2.js +240 -0
- package/dist/hooks/chunk-E2IZUWI5.js +375 -0
- package/dist/hooks/chunk-E4L2K2BL.js +397 -0
- package/dist/hooks/chunk-E55NKX5F.js +68 -0
- package/dist/hooks/chunk-ECXVCCVD.js +3079 -0
- package/dist/hooks/chunk-EPHO443D.js +68 -0
- package/dist/hooks/chunk-EUFK2BI2.js +375 -0
- package/dist/hooks/chunk-EYCD5ZAV.js +137 -0
- package/dist/hooks/chunk-F2SDYJU4.js +240 -0
- package/dist/hooks/chunk-F4B5D5TF.js +68 -0
- package/dist/hooks/chunk-FGEO3NDX.js +432 -0
- package/dist/hooks/chunk-FJYI52RE.js +137 -0
- package/dist/hooks/chunk-FXAKJKTB.js +18 -0
- package/dist/hooks/chunk-FYTZHIY4.js +3085 -0
- package/dist/hooks/chunk-G7JL2A5K.js +375 -0
- package/dist/hooks/chunk-GA3ITDBW.js +42 -0
- package/dist/hooks/chunk-GDR4H4SV.js +469 -0
- package/dist/hooks/chunk-GFKDXPSM.js +2855 -0
- package/dist/hooks/chunk-GIMRTKFU.js +566 -0
- package/dist/hooks/chunk-GOPHRLGO.js +240 -0
- package/dist/hooks/chunk-GX4HO7SJ.js +230 -0
- package/dist/hooks/chunk-GXKKK23T.js +240 -0
- package/dist/hooks/chunk-GZ6FUVIK.js +566 -0
- package/dist/hooks/chunk-H5HPY5M5.js +2869 -0
- package/dist/hooks/chunk-HCF3OGEE.js +1829 -0
- package/dist/hooks/chunk-HDEXAOUM.js +469 -0
- package/dist/hooks/chunk-HM2TY3TN.js +469 -0
- package/dist/hooks/chunk-HOA7NXA2.js +55 -0
- package/dist/hooks/chunk-HOFEWH6H.js +240 -0
- package/dist/hooks/chunk-HUUI6S5J.js +2669 -0
- package/dist/hooks/chunk-I4D3NVUD.js +469 -0
- package/dist/hooks/chunk-I4Q6WAJE.js +68 -0
- package/dist/hooks/chunk-IB6N4CR2.js +432 -0
- package/dist/hooks/chunk-IFLDYJMD.js +469 -0
- package/dist/hooks/chunk-IGU466YD.js +77 -0
- package/dist/hooks/chunk-IJCQUHKY.js +375 -0
- package/dist/hooks/chunk-IKUMBDJB.js +230 -0
- package/dist/hooks/chunk-IM3BDIBJ.js +5005 -0
- package/dist/hooks/chunk-IMYMAODK.js +3431 -0
- package/dist/hooks/chunk-IN2ZVGXA.js +5005 -0
- package/dist/hooks/chunk-ITVJ2MKQ.js +18 -0
- package/dist/hooks/chunk-J5RIJYTM.js +2669 -0
- package/dist/hooks/chunk-JFLMH4K5.js +3460 -0
- package/dist/hooks/chunk-JR25IFML.js +77 -0
- package/dist/hooks/chunk-JT5AUXFI.js +432 -0
- package/dist/hooks/chunk-JY5YVN6N.js +3234 -0
- package/dist/hooks/chunk-K5Q4ETVI.js +391 -0
- package/dist/hooks/chunk-K67V2F24.js +137 -0
- package/dist/hooks/chunk-KABG6AEW.js +3460 -0
- package/dist/hooks/chunk-KATZESEC.js +3273 -0
- package/dist/hooks/chunk-KFH4H7W7.js +469 -0
- package/dist/hooks/chunk-KMUEI6RX.js +910 -0
- package/dist/hooks/chunk-KMV4OY77.js +3438 -0
- package/dist/hooks/chunk-KQAZNWEY.js +137 -0
- package/dist/hooks/chunk-KZZR6JER.js +5015 -0
- package/dist/hooks/chunk-LAR6DREP.js +77 -0
- package/dist/hooks/chunk-LNCJWEZD.js +5015 -0
- package/dist/hooks/chunk-LRYD2GLM.js +6 -0
- package/dist/hooks/chunk-LXBKYHDV.js +77 -0
- package/dist/hooks/chunk-LYLKIUNE.js +5024 -0
- package/dist/hooks/chunk-LZKCFOVC.js +432 -0
- package/dist/hooks/chunk-M4FCIYRI.js +77 -0
- package/dist/hooks/chunk-M5M7327Q.js +3425 -0
- package/dist/hooks/chunk-MF72MHSX.js +3455 -0
- package/dist/hooks/chunk-MK56LKDO.js +397 -0
- package/dist/hooks/chunk-N3MJADY7.js +240 -0
- package/dist/hooks/chunk-NFQSUDBN.js +458 -0
- package/dist/hooks/chunk-NHREKY45.js +137 -0
- package/dist/hooks/chunk-NP5TTAAW.js +375 -0
- package/dist/hooks/chunk-NQTLTKTJ.js +2993 -0
- package/dist/hooks/chunk-NVRCZPBZ.js +391 -0
- package/dist/hooks/chunk-O46HMMLJ.js +469 -0
- package/dist/hooks/chunk-OFJGH2L4.js +240 -0
- package/dist/hooks/chunk-OLFMCZH5.js +240 -0
- package/dist/hooks/chunk-OMCZS46I.js +49 -0
- package/dist/hooks/chunk-OQZEZW5G.js +469 -0
- package/dist/hooks/chunk-P2MDAT2Y.js +1897 -0
- package/dist/hooks/chunk-P3M2JJIF.js +68 -0
- package/dist/hooks/chunk-PDVHQITQ.js +3453 -0
- package/dist/hooks/chunk-PNT2AMDH.js +391 -0
- package/dist/hooks/chunk-PR2LVSY6.js +3445 -0
- package/dist/hooks/chunk-PRR5R4JK.js +137 -0
- package/dist/hooks/chunk-PXT44QVN.js +566 -0
- package/dist/hooks/chunk-PZLWJLAP.js +469 -0
- package/dist/hooks/chunk-Q2FEAZJ2.js +77 -0
- package/dist/hooks/chunk-Q32WETDO.js +3265 -0
- package/dist/hooks/chunk-Q45DUBLE.js +3600 -0
- package/dist/hooks/chunk-Q7NZSWQ5.js +240 -0
- package/dist/hooks/chunk-QH2JNAMK.js +3085 -0
- package/dist/hooks/chunk-QNNWYQ2R.js +375 -0
- package/dist/hooks/chunk-QPU5H2OS.js +68 -0
- package/dist/hooks/chunk-QRAHZ5TO.js +1829 -0
- package/dist/hooks/chunk-QUZ5HPIE.js +469 -0
- package/dist/hooks/chunk-QVCRG34O.js +2893 -0
- package/dist/hooks/chunk-R3MY4E3S.js +1675 -0
- package/dist/hooks/chunk-R6TXJJXP.js +77 -0
- package/dist/hooks/chunk-REJU6VT7.js +1829 -0
- package/dist/hooks/chunk-REQAQLRC.js +2993 -0
- package/dist/hooks/chunk-RFCXPAHH.js +391 -0
- package/dist/hooks/chunk-RHI6Y22X.js +137 -0
- package/dist/hooks/chunk-RKZVOBBS.js +469 -0
- package/dist/hooks/chunk-RL57TT2Y.js +566 -0
- package/dist/hooks/chunk-RORDOD4S.js +3321 -0
- package/dist/hooks/chunk-RZKYW5P2.js +77 -0
- package/dist/hooks/chunk-SJPJ6VSI.js +391 -0
- package/dist/hooks/chunk-SKSIJQQQ.js +432 -0
- package/dist/hooks/chunk-SSQDZKXG.js +268 -0
- package/dist/hooks/chunk-SSX23SJ2.js +89 -0
- package/dist/hooks/chunk-SYHFKE4C.js +77 -0
- package/dist/hooks/chunk-TCGNI2ZY.js +42 -0
- package/dist/hooks/chunk-TG3WXJF5.js +137 -0
- package/dist/hooks/chunk-TH7IJAY5.js +77 -0
- package/dist/hooks/chunk-TLZ27PCY.js +240 -0
- package/dist/hooks/chunk-U652FXTN.js +566 -0
- package/dist/hooks/chunk-UEK47YUF.js +268 -0
- package/dist/hooks/chunk-UIO45H3O.js +432 -0
- package/dist/hooks/chunk-UNLZEEVH.js +5005 -0
- package/dist/hooks/chunk-UNRVF3SZ.js +432 -0
- package/dist/hooks/chunk-USLFAFOI.js +3453 -0
- package/dist/hooks/chunk-VAEELMLL.js +442 -0
- package/dist/hooks/chunk-VALSWLDQ.js +3453 -0
- package/dist/hooks/chunk-VC5JEPNY.js +3398 -0
- package/dist/hooks/chunk-VEZVK6C7.js +230 -0
- package/dist/hooks/chunk-VK5JKFAR.js +49 -0
- package/dist/hooks/chunk-VNF2KP7Z.js +469 -0
- package/dist/hooks/chunk-VWWCUMW6.js +2669 -0
- package/dist/hooks/chunk-W4JARUQV.js +137 -0
- package/dist/hooks/chunk-WCYPBPJC.js +5014 -0
- package/dist/hooks/chunk-WEOBMNJG.js +2993 -0
- package/dist/hooks/chunk-WKJU3J5Y.js +5390 -0
- package/dist/hooks/chunk-WMN4TSVF.js +3299 -0
- package/dist/hooks/chunk-WNON54PT.js +3469 -0
- package/dist/hooks/chunk-WOVKBPPX.js +137 -0
- package/dist/hooks/chunk-WRVFORYJ.js +432 -0
- package/dist/hooks/chunk-WUBVYGQZ.js +240 -0
- package/dist/hooks/chunk-WWULTUOM.js +68 -0
- package/dist/hooks/chunk-WXHKKB45.js +4962 -0
- package/dist/hooks/chunk-XAI3YTHJ.js +469 -0
- package/dist/hooks/chunk-XFZH6JZJ.js +77 -0
- package/dist/hooks/chunk-XGPWX6IA.js +137 -0
- package/dist/hooks/chunk-XIXXIVGY.js +566 -0
- package/dist/hooks/chunk-XKDOYJGA.js +922 -0
- package/dist/hooks/chunk-YALTVBHM.js +432 -0
- package/dist/hooks/chunk-YEBEPBFK.js +5014 -0
- package/dist/hooks/chunk-YI2BQ3DK.js +3441 -0
- package/dist/hooks/chunk-YVNBCFGG.js +1829 -0
- package/dist/hooks/chunk-YXBN3RGG.js +432 -0
- package/dist/hooks/chunk-Z2OOJSW3.js +3163 -0
- package/dist/hooks/chunk-ZA3HVBOY.js +2644 -0
- package/dist/hooks/chunk-ZKID46U3.js +137 -0
- package/dist/hooks/chunk-ZPMU2JV6.js +49 -0
- package/dist/hooks/chunk-ZRKY4W7O.js +432 -0
- package/dist/hooks/chunk-ZTMRB7LJ.js +268 -0
- package/dist/hooks/chunk-ZVPPBQ3L.js +3413 -0
- package/dist/hooks/codex-hook-adapter.js +164 -0
- package/dist/hooks/duplicate-read-guard.js +29 -0
- package/dist/hooks/format-edited.js +37 -0
- package/dist/hooks/investigation-guard.js +31 -0
- package/dist/hooks/pretool-guard.js +21 -0
- package/dist/hooks/session-lang.js +34 -0
- package/dist/hooks/stop-guard.js +1597 -0
- package/dist/josh.js +1795 -0
- package/dist/managed-marker/index.d.ts +10 -0
- package/dist/managed-marker/index.js +32 -0
- package/dist/self-sync-guard/index.d.ts +10 -0
- package/dist/self-sync-guard/index.js +49 -0
- package/dist/version/index.d.ts +93 -0
- package/dist/version/index.js +1024 -0
- package/env/index.d.ts +7 -0
- package/env/index.js +62 -0
- package/eslint/base.js +233 -0
- package/eslint/checkout-rooted-parser.js +34 -0
- package/eslint/config-fingerprint.js +103 -0
- package/eslint/rules/code-quality.js +292 -0
- package/eslint/rules/english-only-prose.js +135 -0
- package/eslint/rules/formatting.js +44 -0
- package/eslint/rules/import.js +83 -0
- package/eslint/rules/namespace-object-export.js +107 -0
- package/eslint/rules/naming-convention.js +109 -0
- package/eslint/rules/promise.js +17 -0
- package/eslint/rules/sonarjs.js +45 -0
- package/eslint/rules/test-filename.js +91 -0
- package/eslint/rules/typescript.js +186 -0
- package/eslint/rules/unicorn.js +191 -0
- package/eslint/vanilla.js +1 -0
- package/evals/scenarios/consult-not-execute.json +20 -0
- package/evals/scenarios/no-implicit-workflow.json +26 -0
- package/evals/scenarios/overrides-both-locations.json +29 -0
- package/evals/scenarios/upstream-interrupt.json +23 -0
- package/evals/scenarios/workflow-skill-loaded.json +16 -0
- package/lefthook/base.yml +131 -0
- package/lefthook/vanilla.yml +7 -0
- package/package.json +169 -0
- package/playwright.config.ts +160 -0
- package/pnpm-workspace.yaml +41 -0
- package/ports/index.d.ts +17 -0
- package/ports/index.js +256 -0
- package/prettier/index.d.ts +3 -0
- package/prettier/index.js +31 -0
- package/prompts/agent-lint-protocol.json +79 -0
- package/prompts/agent-rules.md +63 -0
- package/prompts/coding-standards.md +382 -0
- package/prompts/collaboration-workflow/consultation-vs-execution.md +8 -0
- package/prompts/collaboration-workflow/cross-repo-epic.md +54 -0
- package/prompts/collaboration-workflow/distributed-docs.md +7 -0
- package/prompts/collaboration-workflow/durable-rules.md +24 -0
- package/prompts/collaboration-workflow/epic-audit.md +56 -0
- package/prompts/collaboration-workflow/epic-bundle.md +109 -0
- package/prompts/collaboration-workflow/file-edits.md +124 -0
- package/prompts/collaboration-workflow/gh-rest.md +57 -0
- package/prompts/collaboration-workflow/issue-citation.md +38 -0
- package/prompts/collaboration-workflow/issue-template.md +190 -0
- package/prompts/collaboration-workflow/latest-first.md +14 -0
- package/prompts/collaboration-workflow/no-clones.md +11 -0
- package/prompts/collaboration-workflow/operating-rules.md +123 -0
- package/prompts/collaboration-workflow/output-bounds.md +107 -0
- package/prompts/collaboration-workflow/overview.md +35 -0
- package/prompts/collaboration-workflow/plan-comment.md +85 -0
- package/prompts/collaboration-workflow/proposal-request.md +23 -0
- package/prompts/collaboration-workflow/report-format.md +206 -0
- package/prompts/collaboration-workflow/residency.md +94 -0
- package/prompts/collaboration-workflow/rule-delivery.md +146 -0
- package/prompts/collaboration-workflow/shell-body.md +82 -0
- package/prompts/collaboration-workflow/simplicity-first.md +9 -0
- package/prompts/collaboration-workflow/single-source-rules.md +13 -0
- package/prompts/collaboration-workflow/turn-batching.md +137 -0
- package/prompts/collaboration-workflow/upstream-interrupt.md +51 -0
- package/prompts/collaboration-workflow/wip-cap.md +118 -0
- package/prompts/collaboration-workflow.md +52 -0
- package/prompts/refactoring.md +103 -0
- package/prompts/review-rubric.md +338 -0
- package/prompts/review.md +217 -0
- package/prompts/sonar-hotspot-handling.md +77 -0
- package/prompts/testing-guide.md +277 -0
- package/scripts/adopt/adopt-logic.ts +107 -0
- package/scripts/adopt/adopt-toolkits.ts +181 -0
- package/scripts/adopt/adopt.ts +171 -0
- package/scripts/agent/agent-argv.ts +140 -0
- package/scripts/agent/agent-diagnostics.ts +120 -0
- package/scripts/agent/agent-event.ts +173 -0
- package/scripts/agent/agent-exit-record.ts +32 -0
- package/scripts/agent/agent-launch-environment.ts +71 -0
- package/scripts/agent/agent-role-profile.ts +329 -0
- package/scripts/agent/api-outage.ts +51 -0
- package/scripts/agent/claude-agent-argv.ts +151 -0
- package/scripts/agent/claude-result-event.ts +98 -0
- package/scripts/agent/codex-agent-argv.ts +94 -0
- package/scripts/agent/codex-home-source.ts +11 -0
- package/scripts/agent/interactive-ask.ts +91 -0
- package/scripts/auto-ok/auto-ok-cli.ts +516 -0
- package/scripts/backlog/backlog-arrival.ts +147 -0
- package/scripts/backlog/backlog-budget-cli.ts +220 -0
- package/scripts/backlog/backlog-budget.ts +284 -0
- package/scripts/backlog/backlog-defect-priority.ts +77 -0
- package/scripts/backlog/backlog-drive-cli.ts +377 -0
- package/scripts/backlog/backlog-drive-finish.ts +23 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +81 -0
- package/scripts/backlog/backlog-drive-named.ts +101 -0
- package/scripts/backlog/backlog-drive-offer-argv.ts +29 -0
- package/scripts/backlog/backlog-drive-owner.ts +22 -0
- package/scripts/backlog/backlog-drive-restore.ts +67 -0
- package/scripts/backlog/backlog-drive.ts +322 -0
- package/scripts/backlog/backlog-named.ts +164 -0
- package/scripts/backlog/backlog-next.ts +376 -0
- package/scripts/backlog/backlog-offer-cli.ts +279 -0
- package/scripts/backlog/backlog-offer.ts +93 -0
- package/scripts/backlog/backlog-plan-cli.ts +235 -0
- package/scripts/backlog/backlog-plan.ts +231 -0
- package/scripts/backlog/backlog-pool.ts +322 -0
- package/scripts/backlog/backlog-ready.ts +146 -0
- package/scripts/backlog/backlog-scope.ts +144 -0
- package/scripts/backlog/backlog-stalled-cli.ts +30 -0
- package/scripts/backlog/backlog-stalled-detect.ts +143 -0
- package/scripts/backlog/backlog-stalled.ts +118 -0
- package/scripts/behavior/behavior-assertion.ts +87 -0
- package/scripts/behavior/behavior-cli.ts +88 -0
- package/scripts/behavior/behavior-rules.ts +128 -0
- package/scripts/build/build-bin.ts +36 -0
- package/scripts/build/build-claude-md.ts +42 -0
- package/scripts/build/build-config-merge.ts +26 -0
- package/scripts/build/build-hooks.ts +79 -0
- package/scripts/build/build-library.ts +83 -0
- package/scripts/build/build-managed-marker.ts +26 -0
- package/scripts/build/build-self-sync-guard.ts +26 -0
- package/scripts/build/build-version.ts +25 -0
- package/scripts/build/local-bin.ts +97 -0
- package/scripts/build/shim-shell.ts +25 -0
- package/scripts/bytes/bytes-command.ts +181 -0
- package/scripts/cases/cases-cli.ts +48 -0
- package/scripts/cases/cases-logic.ts +100 -0
- package/scripts/claude/skill-meta.ts +37 -0
- package/scripts/claude/workflow-destination.ts +13 -0
- package/scripts/clone/clone-aggregate.ts +76 -0
- package/scripts/clone/clone-fingerprint.ts +96 -0
- package/scripts/clone/clone-scan-cli.ts +39 -0
- package/scripts/clone/clone-scan.ts +158 -0
- package/scripts/config-merge/index.ts +19 -0
- package/scripts/config-merge/json-format.ts +128 -0
- package/scripts/config-merge/list-patch.ts +61 -0
- package/scripts/config-merge/parse-jsonc.ts +14 -0
- package/scripts/config-merge/patch-json-key.ts +439 -0
- package/scripts/config-merge/patch-json-list.ts +38 -0
- package/scripts/config-merge/patch-yaml-list.ts +107 -0
- package/scripts/cost-runtime/codex-usage.ts +119 -0
- package/scripts/cost-runtime/context-cut-payback.ts +77 -0
- package/scripts/cost-runtime/context-cut-threshold.ts +21 -0
- package/scripts/cost-runtime/cost-attribute.ts +168 -0
- package/scripts/cost-runtime/cost-blocks.ts +149 -0
- package/scripts/cost-runtime/cost-cli.ts +318 -0
- package/scripts/cost-runtime/cost-corpus.ts +278 -0
- package/scripts/cost-runtime/cost-format.ts +32 -0
- package/scripts/cost-runtime/cost-pricing.ts +176 -0
- package/scripts/cost-runtime/cost-tokens.ts +84 -0
- package/scripts/cost-runtime/cost-transcript.ts +531 -0
- package/scripts/cost-runtime/cost-usage.ts +287 -0
- package/scripts/cost-runtime/cost-verdict.ts +89 -0
- package/scripts/cost-runtime/own-session.ts +58 -0
- package/scripts/cost-runtime/transcript-cwd.ts +14 -0
- package/scripts/delegation/delegation-cli.ts +91 -0
- package/scripts/delegation/delegation-policy.ts +178 -0
- package/scripts/delegation/duplicate-read-guard.ts +244 -0
- package/scripts/delegation/fanout-cli.ts +61 -0
- package/scripts/delegation/fanout.ts +95 -0
- package/scripts/delegation/investigation-guard.ts +131 -0
- package/scripts/delegation/investigation-reads.ts +637 -0
- package/scripts/discovery/repo-discovery.ts +166 -0
- package/scripts/discovery/repo-map-logic.ts +102 -0
- package/scripts/discovery/repo-origin.ts +153 -0
- package/scripts/discovery/repo-party-cli.ts +69 -0
- package/scripts/discovery/repo-party.ts +46 -0
- package/scripts/doctor/doctor-consumer.ts +181 -0
- package/scripts/doctor/doctor-io.ts +210 -0
- package/scripts/doctor/doctor-logic.ts +122 -0
- package/scripts/doctor/doctor-ports.ts +117 -0
- package/scripts/doctor/doctor.ts +232 -0
- package/scripts/document/backlogrun-parent-read-set.ts +48 -0
- package/scripts/document/bash-output-cap.ts +45 -0
- package/scripts/document/document-byte-budget.ts +183 -0
- package/scripts/document/document-byte-check.ts +131 -0
- package/scripts/document/document-reachability.ts +131 -0
- package/scripts/document/document-read-cli.ts +82 -0
- package/scripts/document/document-scan.ts +108 -0
- package/scripts/document/document-section-cli.ts +101 -0
- package/scripts/document/document-section.ts +156 -0
- package/scripts/document/edit-files-cli.ts +280 -0
- package/scripts/document/entry-read-budget.ts +154 -0
- package/scripts/document/entry-read-set.ts +471 -0
- package/scripts/document/generate-catalog.ts +69 -0
- package/scripts/document/lane-child-read-set.ts +88 -0
- package/scripts/document/read-files-cli.ts +135 -0
- package/scripts/document/read-set-cli.ts +295 -0
- package/scripts/document/read-set-point-of-use.ts +89 -0
- package/scripts/document/read-set-pricing.ts +52 -0
- package/scripts/document/read-set-trim.ts +78 -0
- package/scripts/document/retired-phrases.ts +143 -0
- package/scripts/document/review-agent-type.ts +46 -0
- package/scripts/document/single-source.ts +73 -0
- package/scripts/epic/epic-audit-checks.ts +452 -0
- package/scripts/epic/epic-audit-cli.ts +374 -0
- package/scripts/epic/epic-audit-orphans.ts +142 -0
- package/scripts/epic/epic-audit-rationale.ts +191 -0
- package/scripts/epic/epic-audit-report.ts +101 -0
- package/scripts/epic/epic-audit.ts +240 -0
- package/scripts/epic/epic-bundle-cli.ts +472 -0
- package/scripts/epic/epic-bundle-evidence.ts +147 -0
- package/scripts/epic/epic-bundle-gaps.ts +86 -0
- package/scripts/epic/epic-bundle-referenced.ts +195 -0
- package/scripts/epic/epic-bundle.ts +309 -0
- package/scripts/epic/epic-busy.ts +204 -0
- package/scripts/epic/epic-candidate-confirm.ts +279 -0
- package/scripts/epic/epic-classify.ts +294 -0
- package/scripts/epic/epic-cross-repo.ts +366 -0
- package/scripts/epic/epic-fetch.ts +370 -0
- package/scripts/epic/epic-graph.ts +279 -0
- package/scripts/epic/epic-index.ts +209 -0
- package/scripts/epic/epic-issue.ts +172 -0
- package/scripts/epic/epic-lane-offer.ts +207 -0
- package/scripts/epic/epic-nested.ts +37 -0
- package/scripts/epic/epic-next-read.ts +141 -0
- package/scripts/epic/epic-next-views.ts +144 -0
- package/scripts/epic/epic-next.ts +477 -0
- package/scripts/epic/epic-outside-blocker.ts +113 -0
- package/scripts/epic/epic-relation-recheck.ts +108 -0
- package/scripts/epic/epic-report.ts +200 -0
- package/scripts/gate/core-budget.ts +292 -0
- package/scripts/gate/gate-log.ts +95 -0
- package/scripts/gate/gate-plan.ts +356 -0
- package/scripts/gate/gate-report.ts +207 -0
- package/scripts/gate/gate-skip.ts +123 -0
- package/scripts/gate/gate-tree.ts +49 -0
- package/scripts/gate/hook-gate-reuse.ts +130 -0
- package/scripts/gate/pre-commit-type-check.ts +187 -0
- package/scripts/gate/scoped-green.ts +260 -0
- package/scripts/gate/type-check-step.ts +90 -0
- package/scripts/gate/verification-gate.ts +531 -0
- package/scripts/gh/fix-gh-packages-logic.ts +232 -0
- package/scripts/gh/fix-gh-packages.ts +129 -0
- package/scripts/gh/gh-cli-token.ts +18 -0
- package/scripts/gh/gh-spawn.ts +44 -0
- package/scripts/git/animation-helpers.ts +81 -0
- package/scripts/git/change-base.ts +26 -0
- package/scripts/git/changed-file-scope.ts +209 -0
- package/scripts/git/changed-paths.ts +30 -0
- package/scripts/git/constants.ts +41 -0
- package/scripts/git/git-ai-review-scan.ts +154 -0
- package/scripts/git/git-animation.ts +41 -0
- package/scripts/git/git-branch.ts +127 -0
- package/scripts/git/git-command.ts +587 -0
- package/scripts/git/git-commit.ts +27 -0
- package/scripts/git/git-common-directory.ts +38 -0
- package/scripts/git/git-epic-add-body.ts +365 -0
- package/scripts/git/git-epic-add-plan.ts +421 -0
- package/scripts/git/git-epic-add.ts +249 -0
- package/scripts/git/git-epic-body.ts +150 -0
- package/scripts/git/git-epic-chains.ts +411 -0
- package/scripts/git/git-epic-close-comment.ts +199 -0
- package/scripts/git/git-epic-close.ts +393 -0
- package/scripts/git/git-epic-decision.ts +171 -0
- package/scripts/git/git-epic-parse.ts +351 -0
- package/scripts/git/git-epic-promote.ts +102 -0
- package/scripts/git/git-epic-read.ts +73 -0
- package/scripts/git/git-epic-reconcile.ts +246 -0
- package/scripts/git/git-epic-reference.ts +98 -0
- package/scripts/git/git-epic-relations.ts +78 -0
- package/scripts/git/git-epic-remove-plan.ts +152 -0
- package/scripts/git/git-epic-remove.ts +101 -0
- package/scripts/git/git-epic-run.ts +223 -0
- package/scripts/git/git-epic-sections.ts +98 -0
- package/scripts/git/git-epic-shape.ts +81 -0
- package/scripts/git/git-epic-validate.ts +155 -0
- package/scripts/git/git-error.ts +78 -0
- package/scripts/git/git-execa-error.ts +35 -0
- package/scripts/git/git-fixture-workspace.ts +88 -0
- package/scripts/git/git-followup-cleanup.ts +88 -0
- package/scripts/git/git-followup-flush.ts +63 -0
- package/scripts/git/git-followup-label.ts +67 -0
- package/scripts/git/git-followup-pending.ts +95 -0
- package/scripts/git/git-followup-stages.ts +149 -0
- package/scripts/git/git-gh-api-path.ts +118 -0
- package/scripts/git/git-gh-check.ts +21 -0
- package/scripts/git/git-gh-command.ts +17 -0
- package/scripts/git/git-gh-exec.ts +344 -0
- package/scripts/git/git-gh-failure.ts +103 -0
- package/scripts/git/git-gh-helpers.ts +44 -0
- package/scripts/git/git-gh-issue-list.ts +257 -0
- package/scripts/git/git-gh-issue-read.ts +457 -0
- package/scripts/git/git-gh-issue-rest.ts +238 -0
- package/scripts/git/git-gh-issue-write.ts +285 -0
- package/scripts/git/git-gh-issue.ts +161 -0
- package/scripts/git/git-gh-pr-auto-merge.ts +85 -0
- package/scripts/git/git-gh-pr-read.ts +322 -0
- package/scripts/git/git-gh-pr-rest.ts +172 -0
- package/scripts/git/git-gh-pr-review.ts +103 -0
- package/scripts/git/git-gh-pr-rollup.ts +91 -0
- package/scripts/git/git-gh-pr-snapshot.ts +138 -0
- package/scripts/git/git-gh-pr.ts +219 -0
- package/scripts/git/git-gh-reachability.ts +56 -0
- package/scripts/git/git-gh-repo.ts +37 -0
- package/scripts/git/git-gh-rest-state.ts +14 -0
- package/scripts/git/git-issue.ts +168 -0
- package/scripts/git/git-location-environment.ts +62 -0
- package/scripts/git/git-ls-remote.ts +28 -0
- package/scripts/git/git-next-issues.ts +98 -0
- package/scripts/git/git-notify.ts +104 -0
- package/scripts/git/git-pr-ai-review.ts +180 -0
- package/scripts/git/git-pr-checks-eval.ts +265 -0
- package/scripts/git/git-pr-checks-parse.ts +153 -0
- package/scripts/git/git-pr-checks-watch.ts +184 -0
- package/scripts/git/git-pr-checks.ts +387 -0
- package/scripts/git/git-pr-coderabbit.ts +129 -0
- package/scripts/git/git-pr-confirmation.ts +64 -0
- package/scripts/git/git-pr-error.ts +25 -0
- package/scripts/git/git-pr-followup-wrapup.ts +225 -0
- package/scripts/git/git-pr-followup.ts +436 -0
- package/scripts/git/git-pr-managed-config.ts +69 -0
- package/scripts/git/git-pr-messages.ts +37 -0
- package/scripts/git/git-pr.ts +181 -0
- package/scripts/git/git-prompt-display.ts +22 -0
- package/scripts/git/git-prompt.ts +207 -0
- package/scripts/git/git-push-transport.ts +173 -0
- package/scripts/git/git-push.ts +27 -0
- package/scripts/git/git-remote-branch.ts +40 -0
- package/scripts/git/git-spawn.ts +47 -0
- package/scripts/git/git-staging.ts +128 -0
- package/scripts/git/git-stash.ts +124 -0
- package/scripts/git/git-status.ts +198 -0
- package/scripts/git/git-worktree.ts +110 -0
- package/scripts/git/github-issue-url.ts +105 -0
- package/scripts/git/gone-branch.ts +113 -0
- package/scripts/git/issue-labels.ts +279 -0
- package/scripts/git/listing-cutoff.ts +51 -0
- package/scripts/git/main-merge-guard.ts +134 -0
- package/scripts/git/main-merge.ts +120 -0
- package/scripts/git/main-sync.ts +121 -0
- package/scripts/git/parse-json-array.ts +102 -0
- package/scripts/git/schemas.ts +166 -0
- package/scripts/git/stash-orphans.ts +91 -0
- package/scripts/git/stash-pop-args.ts +59 -0
- package/scripts/git/stash-pop-cli.ts +105 -0
- package/scripts/git/telegram-notify.ts +404 -0
- package/scripts/hooks/batch-guard.ts +144 -0
- package/scripts/hooks/check-commit-message.ts +134 -0
- package/scripts/hooks/codex-hook-adapter.ts +155 -0
- package/scripts/hooks/edited-cspell.ts +128 -0
- package/scripts/hooks/format-edited-file-fixtures.ts +109 -0
- package/scripts/hooks/format-edited-file.ts +510 -0
- package/scripts/hooks/format-rewrite-notice.ts +99 -0
- package/scripts/hooks/pre-push-unit.ts +146 -0
- package/scripts/hooks/pretool-guard.ts +96 -0
- package/scripts/hooks/prevent-main-commit.ts +38 -0
- package/scripts/hooks/prompt-hooks.ts +38 -0
- package/scripts/hooks/reserved-run.ts +90 -0
- package/scripts/hooks/stop-guard.ts +135 -0
- package/scripts/init/claude-plugin-config.ts +51 -0
- package/scripts/init/distributed-paths.ts +100 -0
- package/scripts/init/hook-command-rewrite.ts +85 -0
- package/scripts/init/hook-launch.ts +31 -0
- package/scripts/init/init-actions.ts +147 -0
- package/scripts/init/init-ai-copy.ts +235 -0
- package/scripts/init/init-copy-content.ts +50 -0
- package/scripts/init/init-logic-deploy-vps.ts +43 -0
- package/scripts/init/init-logic-json-merge.ts +340 -0
- package/scripts/init/init-logic-migrate.ts +62 -0
- package/scripts/init/init-logic-package-key-order.ts +50 -0
- package/scripts/init/init-logic-secretlint.ts +36 -0
- package/scripts/init/init-logic-sonar.ts +197 -0
- package/scripts/init/init-logic-templates.ts +142 -0
- package/scripts/init/init-logic-workspace.ts +59 -0
- package/scripts/init/init-logic-yaml-merge.ts +57 -0
- package/scripts/init/init-logic.ts +474 -0
- package/scripts/init/init-paths.ts +11 -0
- package/scripts/init/init-sonar.ts +32 -0
- package/scripts/init/init.ts +219 -0
- package/scripts/init/kit-base-preset.ts +60 -0
- package/scripts/init/plugin-install-hint.ts +47 -0
- package/scripts/init/tsconfig-preset-migration.ts +67 -0
- package/scripts/issue/baseline-measure.ts +105 -0
- package/scripts/issue/behavior-change-lint.ts +122 -0
- package/scripts/issue/defect-rate-cli.ts +167 -0
- package/scripts/issue/defect-rate.ts +145 -0
- package/scripts/issue/issue-backlinks-cli.ts +97 -0
- package/scripts/issue/issue-backlinks.ts +164 -0
- package/scripts/issue/issue-cite-cli.ts +158 -0
- package/scripts/issue/issue-cite.ts +102 -0
- package/scripts/issue/issue-comment-cli.ts +95 -0
- package/scripts/issue/issue-fold-cli.ts +104 -0
- package/scripts/issue/issue-fold-existing-cli.ts +81 -0
- package/scripts/issue/issue-fold-existing.ts +73 -0
- package/scripts/issue/issue-fold.ts +42 -0
- package/scripts/issue/issue-lint-cli.ts +60 -0
- package/scripts/issue/issue-lint.ts +26 -0
- package/scripts/issue/issue-logic.ts +50 -0
- package/scripts/issue/issue-read-cli.ts +190 -0
- package/scripts/issue/issue-read.ts +145 -0
- package/scripts/issue/issue-scout-cli.ts +482 -0
- package/scripts/issue/issue-scout.ts +244 -0
- package/scripts/issue/issue-state-cli.ts +260 -0
- package/scripts/issue/issue-state.ts +109 -0
- package/scripts/issue/markdown-section.ts +39 -0
- package/scripts/issue/measure-rerun-cli.ts +98 -0
- package/scripts/issue/reproduction-measure.ts +59 -0
- package/scripts/josh/__snapshots__/josh-command-map.test.ts.snap +1171 -0
- package/scripts/josh/agent-session-environment.ts +188 -0
- package/scripts/josh/cli-body.ts +96 -0
- package/scripts/josh/command-suggest.ts +57 -0
- package/scripts/josh/file-map-stamp.ts +264 -0
- package/scripts/josh/hook-decision.ts +479 -0
- package/scripts/josh/josh-command-map.ts +196 -0
- package/scripts/josh/josh-command-types.ts +226 -0
- package/scripts/josh/josh-commands-ai.ts +327 -0
- package/scripts/josh/josh-commands-backlog.ts +54 -0
- package/scripts/josh/josh-commands-clone.ts +18 -0
- package/scripts/josh/josh-commands-development.ts +206 -0
- package/scripts/josh/josh-commands-document.ts +45 -0
- package/scripts/josh/josh-commands-guard.ts +38 -0
- package/scripts/josh/josh-commands-hooks.ts +42 -0
- package/scripts/josh/josh-commands-issue.ts +69 -0
- package/scripts/josh/josh-commands-lane.ts +75 -0
- package/scripts/josh/josh-commands-lint.ts +37 -0
- package/scripts/josh/josh-commands-maintenance.ts +80 -0
- package/scripts/josh/josh-commands-project.ts +53 -0
- package/scripts/josh/josh-commands-split.ts +20 -0
- package/scripts/josh/josh-commands-versioning.ts +48 -0
- package/scripts/josh/josh-commands-workflow.ts +116 -0
- package/scripts/josh/josh-composite-arguments.ts +55 -0
- package/scripts/josh/josh-environment-file.ts +31 -0
- package/scripts/josh/josh-in-process.ts +80 -0
- package/scripts/josh/josh-logic.ts +308 -0
- package/scripts/josh/josh-run.ts +53 -0
- package/scripts/josh/josh-script-reader.ts +11 -0
- package/scripts/josh/josh-verdict.ts +111 -0
- package/scripts/josh/josh.ts +60 -0
- package/scripts/josh/kit-only.ts +33 -0
- package/scripts/josh/path-decision.ts +104 -0
- package/scripts/josh/platform-temporary.ts +66 -0
- package/scripts/josh/process-identity.ts +335 -0
- package/scripts/josh/session-language-cli.ts +51 -0
- package/scripts/josh/session-language.ts +30 -0
- package/scripts/josh/stamp-file.ts +194 -0
- package/scripts/lane/lane-await.ts +165 -0
- package/scripts/lane/lane-cache-run.ts +39 -0
- package/scripts/lane/lane-cache.ts +135 -0
- package/scripts/lane/lane-capacity.ts +69 -0
- package/scripts/lane/lane-child-invocation.ts +73 -0
- package/scripts/lane/lane-child-marker.ts +58 -0
- package/scripts/lane/lane-cli.ts +410 -0
- package/scripts/lane/lane-close.ts +197 -0
- package/scripts/lane/lane-dispatch-log.ts +13 -0
- package/scripts/lane/lane-dispatch.ts +458 -0
- package/scripts/lane/lane-environment.ts +253 -0
- package/scripts/lane/lane-guard-policy.ts +136 -0
- package/scripts/lane/lane-install.ts +94 -0
- package/scripts/lane/lane-launch-cli.ts +133 -0
- package/scripts/lane/lane-occupancy.ts +112 -0
- package/scripts/lane/lane-open.ts +275 -0
- package/scripts/lane/lane-output.ts +124 -0
- package/scripts/lane/lane-paths.ts +96 -0
- package/scripts/lane/lane-reap.ts +137 -0
- package/scripts/lane/lane-registry.ts +261 -0
- package/scripts/lane/lane-relaunch.ts +68 -0
- package/scripts/lane/lane-report.ts +95 -0
- package/scripts/lane/lane-resume.ts +61 -0
- package/scripts/lane/lane-seed.ts +44 -0
- package/scripts/lane/lane-start-point.ts +175 -0
- package/scripts/lane/openai-lane-supervisor-cli.ts +32 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +63 -0
- package/scripts/lane/openai-lane-supervisor.ts +337 -0
- package/scripts/lib/bounded-pool.ts +109 -0
- package/scripts/lib/buffered-process.ts +82 -0
- package/scripts/lib/caddy-logs.sh +45 -0
- package/scripts/lib/cli-flags.ts +19 -0
- package/scripts/lib/json-value.ts +24 -0
- package/scripts/lib/poll.ts +57 -0
- package/scripts/lib/read-file.ts +16 -0
- package/scripts/lib/schemas.ts +67 -0
- package/scripts/lib/spawn-exit.ts +45 -0
- package/scripts/lib/status-icons.ts +24 -0
- package/scripts/lines/effective-limit.ts +156 -0
- package/scripts/lines/line-budget.ts +404 -0
- package/scripts/lines/line-targets.ts +80 -0
- package/scripts/lines/lines-command.ts +174 -0
- package/scripts/lint/cspell-cached.ts +41 -0
- package/scripts/lint/lint-parallel.ts +72 -0
- package/scripts/lint/lint-related-scope.ts +128 -0
- package/scripts/lint/lint-related.ts +104 -0
- package/scripts/managed-marker/index.ts +5 -0
- package/scripts/managed-marker/managed-marker-logic.ts +67 -0
- package/scripts/observations/observation-ledger-home.ts +32 -0
- package/scripts/observations/observation-ledger-line.ts +93 -0
- package/scripts/observations/observation-ledger.ts +35 -0
- package/scripts/observations/observations-flush-cli.ts +42 -0
- package/scripts/observations/observations-flush-landing.ts +97 -0
- package/scripts/observations/observations-flush.ts +420 -0
- package/scripts/overrides/lockfile-overrides.ts +105 -0
- package/scripts/overrides/overrides-check.ts +84 -0
- package/scripts/overrides/overrides-files.ts +19 -0
- package/scripts/overrides/overrides-logic.ts +211 -0
- package/scripts/overrides/schemas.ts +49 -0
- package/scripts/package/package-scout-cli.ts +195 -0
- package/scripts/package/package-scout-format.ts +151 -0
- package/scripts/package/package-scout.ts +121 -0
- package/scripts/ports/port-command.ts +87 -0
- package/scripts/propagate/propagate-git-failure.ts +191 -0
- package/scripts/propagate/propagate-git.ts +224 -0
- package/scripts/propagate/propagate-publish.ts +181 -0
- package/scripts/propagate/propagate-run.ts +201 -0
- package/scripts/propagate/propagate-steps.ts +421 -0
- package/scripts/propagate/propagate-targets.ts +160 -0
- package/scripts/propagate/propagate.ts +216 -0
- package/scripts/refactor/import-graph.ts +187 -0
- package/scripts/refactor/refactor-lint.ts +250 -0
- package/scripts/refactor/refactor-scan-cli.ts +10 -0
- package/scripts/refactor/refactor-scan.ts +124 -0
- package/scripts/refactor/refactor-targets.ts +103 -0
- package/scripts/release/release-cli.ts +88 -0
- package/scripts/release/release-history.ts +132 -0
- package/scripts/release/release-plan.ts +130 -0
- package/scripts/release/release-publish.ts +152 -0
- package/scripts/release/release-scope-cli.ts +103 -0
- package/scripts/release/release-tag.ts +93 -0
- package/scripts/release/release-worktree.ts +71 -0
- package/scripts/repo/auto-merge-setting-logic.ts +100 -0
- package/scripts/repo/auto-merge-setting.ts +37 -0
- package/scripts/repo/repo-setting.ts +112 -0
- package/scripts/report/report-lint-cli.ts +49 -0
- package/scripts/report/report-lint.ts +250 -0
- package/scripts/retrospective/retrospective-cli.ts +97 -0
- package/scripts/retrospective/retrospective.ts +127 -0
- package/scripts/review/disposition-cli.ts +44 -0
- package/scripts/review/disposition-logic.ts +45 -0
- package/scripts/review/live-evidence.ts +62 -0
- package/scripts/review/review-attest-cli.ts +115 -0
- package/scripts/review/review-attest.ts +319 -0
- package/scripts/review/review-brief-cli.ts +290 -0
- package/scripts/review/review-brief.ts +440 -0
- package/scripts/review/review-checkout.ts +56 -0
- package/scripts/review/review-finding-ledger.ts +167 -0
- package/scripts/review/review-findings-cli.ts +57 -0
- package/scripts/review/review-level.ts +86 -0
- package/scripts/review/review-record-cli.ts +196 -0
- package/scripts/review/review-record.ts +74 -0
- package/scripts/review/review-round2-cli.ts +84 -0
- package/scripts/review/review-round2.ts +139 -0
- package/scripts/review/review-stamps.ts +113 -0
- package/scripts/review/review-tree.ts +58 -0
- package/scripts/rules/bash-triggers.ts +44 -0
- package/scripts/rules/decision-oracle.ts +342 -0
- package/scripts/rules/delivered-rules-harness.ts +72 -0
- package/scripts/rules/delivered-rules.ts +793 -0
- package/scripts/rules/early-heartbeat.ts +241 -0
- package/scripts/rules/file-body.ts +150 -0
- package/scripts/rules/filing-cap.ts +133 -0
- package/scripts/rules/filing-offer.ts +81 -0
- package/scripts/rules/firing-point.ts +63 -0
- package/scripts/rules/gh-api.ts +65 -0
- package/scripts/rules/git-argv.ts +129 -0
- package/scripts/rules/git-force.ts +104 -0
- package/scripts/rules/implementation-cut-verdict.ts +84 -0
- package/scripts/rules/implementation-cut.ts +202 -0
- package/scripts/rules/issue-citation.ts +242 -0
- package/scripts/rules/issue-fold.ts +73 -0
- package/scripts/rules/issue-scout.ts +64 -0
- package/scripts/rules/josh-git-bare.ts +80 -0
- package/scripts/rules/lane-carry-conflict.ts +96 -0
- package/scripts/rules/lane-interactive-ask.ts +71 -0
- package/scripts/rules/lane-park.ts +122 -0
- package/scripts/rules/lane-switch-main.ts +139 -0
- package/scripts/rules/oracle-consulted.ts +81 -0
- package/scripts/rules/oracle-firing.ts +151 -0
- package/scripts/rules/oracle-list-cli.ts +81 -0
- package/scripts/rules/piped-verification.ts +126 -0
- package/scripts/rules/poll-loop.ts +125 -0
- package/scripts/rules/pre-gate-cut.ts +207 -0
- package/scripts/rules/prior-comment-read.ts +106 -0
- package/scripts/rules/raw-field-body.ts +56 -0
- package/scripts/rules/reply-language.ts +116 -0
- package/scripts/rules/rule-body-guard.ts +206 -0
- package/scripts/rules/rule-guard.ts +23 -0
- package/scripts/rules/rule-value-cli.ts +129 -0
- package/scripts/rules/rule-value.ts +397 -0
- package/scripts/rules/run-tail.ts +178 -0
- package/scripts/rules/shell-body-trigger.ts +204 -0
- package/scripts/rules/shell-segments.ts +45 -0
- package/scripts/rules/stop-rules.ts +329 -0
- package/scripts/rules/tail-commands.ts +35 -0
- package/scripts/rules/test-declared-commit.ts +51 -0
- package/scripts/rules/third-party-write.ts +90 -0
- package/scripts/rules/top-level-scripts-guard.ts +47 -0
- package/scripts/rules/worktree-guard.ts +130 -0
- package/scripts/run/detached-launch.ts +360 -0
- package/scripts/run/run-carry-args.ts +264 -0
- package/scripts/run/run-carry-change.ts +69 -0
- package/scripts/run/run-carry-cli.ts +441 -0
- package/scripts/run/run-carry-flush.ts +63 -0
- package/scripts/run/run-carry-stash.ts +71 -0
- package/scripts/run/run-carry-streak.ts +113 -0
- package/scripts/run/run-carry.ts +550 -0
- package/scripts/run/run-cut-args.ts +132 -0
- package/scripts/run/run-cut-cli.ts +461 -0
- package/scripts/run/run-cut-handoff.ts +126 -0
- package/scripts/run/run-cut.ts +531 -0
- package/scripts/run/run-ending-cli.ts +111 -0
- package/scripts/run/run-ending.ts +239 -0
- package/scripts/run/run-entry-cli.ts +135 -0
- package/scripts/run/run-entry.ts +95 -0
- package/scripts/run/run-event-cli.ts +210 -0
- package/scripts/run/run-event-follow.ts +65 -0
- package/scripts/run/run-event-render.ts +75 -0
- package/scripts/run/run-event-scope.ts +127 -0
- package/scripts/run/run-event-stream-emit.ts +140 -0
- package/scripts/run/run-event-stream.ts +258 -0
- package/scripts/run/run-event-watch.ts +37 -0
- package/scripts/run/run-headless.ts +105 -0
- package/scripts/run/run-hold-cli.ts +310 -0
- package/scripts/run/run-hold.ts +264 -0
- package/scripts/run/run-invocation.ts +237 -0
- package/scripts/run/run-issue-number.ts +19 -0
- package/scripts/run/run-liveness-cli.ts +169 -0
- package/scripts/run/run-liveness.ts +424 -0
- package/scripts/run/run-merge-cli.ts +385 -0
- package/scripts/run/run-merge-steps.ts +326 -0
- package/scripts/run/run-merge.ts +158 -0
- package/scripts/run/run-next-cli.ts +48 -0
- package/scripts/run/run-next.ts +80 -0
- package/scripts/run/run-preflight.ts +337 -0
- package/scripts/run/run-prep-cli.ts +151 -0
- package/scripts/run/run-prep.ts +84 -0
- package/scripts/run/run-progress-args.ts +65 -0
- package/scripts/run/run-progress-cli.ts +508 -0
- package/scripts/run/run-progress-clock.ts +320 -0
- package/scripts/run/run-progress-config.ts +119 -0
- package/scripts/run/run-progress-read.ts +199 -0
- package/scripts/run/run-progress.ts +366 -0
- package/scripts/run/run-report-cli.ts +71 -0
- package/scripts/run/run-report.ts +78 -0
- package/scripts/run/run-review-cli.ts +130 -0
- package/scripts/run/run-review-steps.ts +161 -0
- package/scripts/run/run-review.ts +121 -0
- package/scripts/run/run-ship-cli.ts +431 -0
- package/scripts/run/run-ship-detach.ts +200 -0
- package/scripts/run/run-ship-probe.ts +103 -0
- package/scripts/run/run-ship-return.ts +75 -0
- package/scripts/run/run-ship-review-steps.ts +227 -0
- package/scripts/run/run-ship-review.ts +177 -0
- package/scripts/run/run-ship-stage.ts +150 -0
- package/scripts/run/run-ship.ts +78 -0
- package/scripts/run/run-status-cli.ts +175 -0
- package/scripts/run/run-status.ts +77 -0
- package/scripts/run/run-step-cli.ts +111 -0
- package/scripts/run/run-step.ts +292 -0
- package/scripts/run/run-stop-notify.ts +52 -0
- package/scripts/run/run-stranded-cli.ts +31 -0
- package/scripts/run/run-stranded-detect.ts +134 -0
- package/scripts/run/run-stranded.ts +120 -0
- package/scripts/run/run-tail-cli.ts +105 -0
- package/scripts/run/run-tail.ts +61 -0
- package/scripts/run/run-transcript.golden.txt +57 -0
- package/scripts/run/run-wake-cli.ts +428 -0
- package/scripts/run/run-wake-describe.ts +97 -0
- package/scripts/run/run-wake-driver.ts +80 -0
- package/scripts/run/run-wake-handoff.ts +29 -0
- package/scripts/run/run-wake-loop.ts +223 -0
- package/scripts/run/run-wake-session.ts +150 -0
- package/scripts/run/run-wake-work.ts +104 -0
- package/scripts/run/run-wake.ts +607 -0
- package/scripts/run/run-watcher-guard-cli.ts +37 -0
- package/scripts/run/run-watcher-guard.ts +59 -0
- package/scripts/run/run-watcher-hook.ts +86 -0
- package/scripts/security/secretlint-scan.ts +86 -0
- package/scripts/security/security-audit-logic.ts +51 -0
- package/scripts/security/security-audit-provision-logic.ts +217 -0
- package/scripts/security/security-audit-provision.ts +186 -0
- package/scripts/security/security-audit.ts +132 -0
- package/scripts/security/security-updates-logic.ts +131 -0
- package/scripts/security/security-updates.ts +38 -0
- package/scripts/security/sonar-file.ts +44 -0
- package/scripts/self-sync-guard/index.ts +5 -0
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +98 -0
- package/scripts/self-sync-guard/self-sync-refusal.ts +22 -0
- package/scripts/sonar/sonar-hotspots-cli.ts +149 -0
- package/scripts/sonar/sonar-hotspots.ts +111 -0
- package/scripts/split/split-assess-cli.ts +52 -0
- package/scripts/split/split-assess.ts +124 -0
- package/scripts/sync/dependabot-pin-logic.ts +135 -0
- package/scripts/sync/directory-copy-guard.ts +187 -0
- package/scripts/sync/file-content.ts +49 -0
- package/scripts/sync/managed-config-scope-cli.ts +64 -0
- package/scripts/sync/managed-config-scope.ts +123 -0
- package/scripts/sync/plugin-skill-directories.ts +15 -0
- package/scripts/sync/reconcile-templates.ts +53 -0
- package/scripts/sync/removed-skill-manifest.ts +27 -0
- package/scripts/sync/skill-migration.ts +192 -0
- package/scripts/sync/sync-configs.ts +156 -0
- package/scripts/sync/sync-hook-safety.ts +82 -0
- package/scripts/sync/sync.ts +417 -0
- package/scripts/sync/synced-paths.ts +52 -0
- package/scripts/sync/template-source-logic.ts +122 -0
- package/scripts/sync/workflow-pin-logic.ts +240 -0
- package/scripts/test/classify-isolation.ts +149 -0
- package/scripts/test/e2e-retry-check.ts +150 -0
- package/scripts/test/http-fault-injection.ts +79 -0
- package/scripts/test/josh-harness-environment.ts +260 -0
- package/scripts/test/josh-harness.ts +96 -0
- package/scripts/test/pilot-files.ts +457 -0
- package/scripts/test/pilot-measure.ts +78 -0
- package/scripts/test/test-declared-changed.ts +99 -0
- package/scripts/test/test-declared-logic.ts +91 -0
- package/scripts/test/test-declared-match.ts +106 -0
- package/scripts/test/test-declared.ts +180 -0
- package/scripts/test/test-e2e-guard.ts +86 -0
- package/scripts/test/test-network-guard.ts +453 -0
- package/scripts/test/test-red-commit.ts +51 -0
- package/scripts/test/test-red-logic.ts +76 -0
- package/scripts/test/test-red.ts +154 -0
- package/scripts/test/test-related-scope.ts +115 -0
- package/scripts/test/test-related.ts +73 -0
- package/scripts/test/test-repository-guard.ts +317 -0
- package/scripts/test/test-state-guard.ts +85 -0
- package/scripts/test/test-stdout-guard.ts +54 -0
- package/scripts/test/test-telegram-guard.ts +90 -0
- package/scripts/test/test-type-logic.ts +31 -0
- package/scripts/test/test-unit-guard.ts +185 -0
- package/scripts/test/unit-guard-environment.ts +12 -0
- package/scripts/test/unit-projects.ts +139 -0
- package/scripts/test/unit-worker-share.ts +251 -0
- package/scripts/test/vitest-include-globs.ts +12 -0
- package/scripts/time-runtime/time-agent-bundles.ts +128 -0
- package/scripts/time-runtime/time-background.ts +300 -0
- package/scripts/time-runtime/time-batch-guard-fixtures.ts +66 -0
- package/scripts/time-runtime/time-batch-guard.ts +529 -0
- package/scripts/time-runtime/time-bundle-call.ts +575 -0
- package/scripts/time-runtime/time-bundles.ts +536 -0
- package/scripts/time-runtime/time-call-identity.ts +37 -0
- package/scripts/time-runtime/time-command-key.ts +35 -0
- package/scripts/time-runtime/time-density-hook.ts +166 -0
- package/scripts/time-runtime/time-density.ts +147 -0
- package/scripts/time-runtime/time-followup-stage.ts +107 -0
- package/scripts/time-runtime/time-format.ts +186 -0
- package/scripts/time-runtime/time-hook-transcript.ts +82 -0
- package/scripts/time-runtime/time-instant.ts +20 -0
- package/scripts/time-runtime/time-markers.ts +228 -0
- package/scripts/time-runtime/time-phase-names.ts +123 -0
- package/scripts/time-runtime/time-reported-failure.ts +227 -0
- package/scripts/time-runtime/time-round-trips.ts +279 -0
- package/scripts/time-runtime/time-shell.ts +286 -0
- package/scripts/time-runtime/time-single-check.ts +65 -0
- package/scripts/time-runtime/time-spans.ts +545 -0
- package/scripts/time-runtime/time-transcript-line.ts +253 -0
- package/scripts/time-runtime/time-writes.ts +71 -0
- package/scripts/ui/ui-routes-cli.ts +122 -0
- package/scripts/ui/ui-routes.ts +102 -0
- package/scripts/version/bump-version.ts +71 -0
- package/scripts/version/effective-upstream.ts +93 -0
- package/scripts/version/index.ts +25 -0
- package/scripts/version/kit-descriptor.ts +10 -0
- package/scripts/version/kit-version-config.ts +30 -0
- package/scripts/version/latest-corepack.ts +404 -0
- package/scripts/version/latest-lane-guard.ts +49 -0
- package/scripts/version/latest-regression.ts +93 -0
- package/scripts/version/latest-scope-cli.ts +147 -0
- package/scripts/version/latest-stamp.ts +107 -0
- package/scripts/version/latest-update.ts +198 -0
- package/scripts/version/package-manager-version.ts +95 -0
- package/scripts/version/parse-json.ts +13 -0
- package/scripts/version/preinstall-version-update.ts +84 -0
- package/scripts/version/publishable-range-check.ts +74 -0
- package/scripts/version/publishable-range.ts +123 -0
- package/scripts/version/release-age.ts +146 -0
- package/scripts/version/release-hold.ts +142 -0
- package/scripts/version/running-binary.ts +42 -0
- package/scripts/version/upgrade-command-guard.ts +49 -0
- package/scripts/version/upgrade-shell-command.ts +30 -0
- package/scripts/version/version-check-logic.ts +333 -0
- package/scripts/version/version-check.ts +14 -0
- package/scripts/version/version-command-config.ts +177 -0
- package/scripts/version/version-commands.ts +296 -0
- package/scripts/version/version-remote.ts +86 -0
- package/scripts/version/version-targets.ts +81 -0
- package/scripts/yaml/yaml-document.ts +46 -0
- package/scripts-ai/completion-gate.ts +13 -0
- package/scripts-ai/environment-loader.ts +9 -0
- package/scripts-ai/epic-check.ts +34 -0
- package/scripts-ai/epic-cli-argv.ts +77 -0
- package/scripts-ai/epic-cli-remove.ts +71 -0
- package/scripts-ai/epic-cli.ts +413 -0
- package/scripts-ai/epic.ts +192 -0
- package/scripts-ai/followup-issue-number.ts +31 -0
- package/scripts-ai/git-followup-finish.ts +217 -0
- package/scripts-ai/git-followup-workflow.ts +252 -0
- package/scripts-ai/git-workflow.ts +246 -0
- package/scripts-ai/telegram-test-logic.ts +88 -0
- package/scripts-ai/telegram-test.ts +130 -0
- package/templates/gitignore +76 -0
- package/templates/sonar-project.properties +52 -0
- package/templates/workflows/ci.yml +639 -0
- package/templates/workflows/dependabot-auto-merge.yml +428 -0
- package/tsconfig/base.json +50 -0
- package/tsconfig.sonar.json +34 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
name: Dependabot auto-merge
|
|
2
|
+
|
|
3
|
+
on: pull_request
|
|
4
|
+
|
|
5
|
+
# One run per pull request, and a superseded one is cancelled rather than left to finish. Both halves
|
|
6
|
+
# of this workflow decide from the pull request as it stands — which files the diff touches, and who
|
|
7
|
+
# pushed — while `gh pr merge --auto` is state that outlives the run that set it. A run that has been
|
|
8
|
+
# overtaken is therefore deciding about a diff that no longer exists: it can arm auto-merge after a
|
|
9
|
+
# newer run already withdrew it, on a diff that newer run found upstream-managed, and nothing runs
|
|
10
|
+
# afterwards to undo that (joshuafolkken/kit#842). `github.ref` is the pull request's own merge ref,
|
|
11
|
+
# so the group is per pull request and one bump never waits on another's run.
|
|
12
|
+
concurrency:
|
|
13
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
pull-requests: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
# Gated on who opened the pull request, not on who triggered this run. `github.actor` names the
|
|
22
|
+
# latter, so a push by anyone other than Dependabot — a maintainer rebasing the branch by hand, or
|
|
23
|
+
# amending the bump — skipped the whole job. That mattered once the job acquired something to undo:
|
|
24
|
+
# `gh pr merge --auto` is state on the pull request, so a run that never happens cannot withdraw an
|
|
25
|
+
# auto-merge an earlier run armed, and the bump merges itself the moment the checks go green
|
|
26
|
+
# (joshuafolkken/kit#838). The author is the stable fact about a Dependabot pull request; arming is
|
|
27
|
+
# what stays restricted to Dependabot's own events, on the step below.
|
|
28
|
+
auto-merge:
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
31
|
+
steps:
|
|
32
|
+
# Whether the pull request touches a workflow some upstream package overwrites. Decided from
|
|
33
|
+
# the changed files because Dependabot's metadata cannot answer it: for the github-actions
|
|
34
|
+
# ecosystem it reports one `directory` for the whole repository and never names the workflow
|
|
35
|
+
# file it bumped.
|
|
36
|
+
#
|
|
37
|
+
# The answer is read off each file rather than looked up in a list of paths. A list can only
|
|
38
|
+
# describe what the package holding the list distributes, and this repository may receive
|
|
39
|
+
# workflows from more than one: kit writes `ci.yml`, and a package built on kit writes its own
|
|
40
|
+
# alongside it. Neither knows the other's set, and whichever `sync` ran last would decide a
|
|
41
|
+
# shared list — so the list drifts from the files it claims to describe and the merge/revert
|
|
42
|
+
# loop joshuafolkken/kit#836 closed reopens one tier down (joshuafolkken/kit#844). A stamp
|
|
43
|
+
# written by the package that overwrites the file cannot drift from it, and composes across any
|
|
44
|
+
# number of distribution tiers without the distributors having to agree on anything.
|
|
45
|
+
#
|
|
46
|
+
# It runs first because the decision below reads its output, and for no other reason. It used to
|
|
47
|
+
# run before the metadata step so that the withdrawal was reached even when that action failed
|
|
48
|
+
# the job (joshuafolkken/kit#838); containing that failure removed the constraint, so what order
|
|
49
|
+
# remains is data dependency alone (joshuafolkken/kit#845).
|
|
50
|
+
#
|
|
51
|
+
# Everything comes from the API, so no checkout is needed. `--paginate` is what makes the file
|
|
52
|
+
# list complete rather than the first page of a large diff, and the `select` narrows it to
|
|
53
|
+
# workflows inside `--jq` rather than through `grep`: the default shell is `bash -e` without
|
|
54
|
+
# `pipefail`, so a `gh` failure inside a pipeline would be masked by grep's status, and grep
|
|
55
|
+
# itself answers 1 for "no match" and 2 for "I could not look" — two readings this step must
|
|
56
|
+
# not conflate, since one of them means "merge it" (joshuafolkken/kit#844). An assignment
|
|
57
|
+
# carries the command's status, and `case` has no failure mode at all.
|
|
58
|
+
#
|
|
59
|
+
# Each file is read through the `contents_url` the same response supplies, rather than a URL
|
|
60
|
+
# built from the path here. GitHub has already encoded it, and it already points at this pull
|
|
61
|
+
# request's head — a path composed by hand would break on the first workflow whose name
|
|
62
|
+
# contains a space or a `#`, and every read failing means every bump is held back for good.
|
|
63
|
+
#
|
|
64
|
+
# The stamp is matched at the start of the file, not anywhere in it, because this workflow
|
|
65
|
+
# declares the token in its own `env` in order to match on it — a substring test would call
|
|
66
|
+
# every copy of this file managed for the wrong reason, and would say nothing about files that
|
|
67
|
+
# merely mention it.
|
|
68
|
+
#
|
|
69
|
+
# A file that cannot be read fails the step rather than answering. That covers a deletion, a
|
|
70
|
+
# rate-limited API, a network failure and a response that carried no URL to read alike: none of
|
|
71
|
+
# them is evidence that the consumer owns the file. Failing lands on the same safe side as
|
|
72
|
+
# answering "managed" would — the step publishes no output, and the reconciling step below reads
|
|
73
|
+
# that as this run having no entitlement to arm — and it lands there visibly. Answering
|
|
74
|
+
# instead would withdraw a previously armed auto-merge on a green job, with nothing to look at
|
|
75
|
+
# and no retry until the next push; this call runs once per changed workflow, so the case is not
|
|
76
|
+
# rare enough to leave silent.
|
|
77
|
+
#
|
|
78
|
+
# `gh`'s own stderr reaches the job log rather than being discarded, because the causes are not
|
|
79
|
+
# equally interesting and the step cannot tell them apart: a deletion is routine, a 403 means
|
|
80
|
+
# every bump in this repository is being held back for a reason someone has to fix.
|
|
81
|
+
# Only stdout is captured, so the message cannot be mistaken for file content.
|
|
82
|
+
- name: Check whether the pull request touches an upstream-managed workflow
|
|
83
|
+
id: managed
|
|
84
|
+
env:
|
|
85
|
+
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
86
|
+
REPOSITORY: ${{ github.repository }}
|
|
87
|
+
MANAGED_MARKER: '# josh-managed-workflow:'
|
|
88
|
+
GH_TOKEN: ${{ github.token }}
|
|
89
|
+
run: |
|
|
90
|
+
changed="$(gh api "repos/$REPOSITORY/pulls/$PR_NUMBER/files" --paginate \
|
|
91
|
+
--jq '.[] | select(.filename | startswith(".github/workflows/"))
|
|
92
|
+
| [.filename, .contents_url] | @tsv')"
|
|
93
|
+
|
|
94
|
+
has_managed=false
|
|
95
|
+
|
|
96
|
+
while IFS="$(printf '\t')" read -r file url; do
|
|
97
|
+
[ -n "$file$url" ] || continue
|
|
98
|
+
|
|
99
|
+
if [ -n "$url" ] &&
|
|
100
|
+
content="$(gh api "$url" -H 'Accept: application/vnd.github.raw')"; then
|
|
101
|
+
case "$content" in
|
|
102
|
+
"$MANAGED_MARKER"*)
|
|
103
|
+
echo "$file is written by an upstream package — holding this bump back."
|
|
104
|
+
has_managed=true
|
|
105
|
+
break
|
|
106
|
+
;;
|
|
107
|
+
esac
|
|
108
|
+
else
|
|
109
|
+
echo "$file could not be read — refusing to decide." >&2
|
|
110
|
+
exit 1
|
|
111
|
+
fi
|
|
112
|
+
done <<<"$changed"
|
|
113
|
+
|
|
114
|
+
echo "has-upstream-managed=$has_managed" >>"$GITHUB_OUTPUT"
|
|
115
|
+
|
|
116
|
+
# `dependabot/fetch-metadata` is the one part of the decision that cannot be an expression: the
|
|
117
|
+
# ecosystem and the semver level come from an action, not from a context. It carries no gate at
|
|
118
|
+
# all any more, and `continue-on-error` is what makes that safe. The action fails outright when
|
|
119
|
+
# the branch's first commit is not Dependabot's — a maintainer who amended or rebased the bump —
|
|
120
|
+
# and a failed step used to take every step after it with it, which is why the withdrawal had to
|
|
121
|
+
# be placed before it and why it had to repeat the arming gate to avoid running at all
|
|
122
|
+
# (joshuafolkken/kit#838). Neither is needed once the failure is contained: the step publishes no
|
|
123
|
+
# outputs, the decision below reads them as empty, and an empty ecosystem cannot equal
|
|
124
|
+
# `github_actions`, so the run declines to arm — reached by the ordinary path rather than by a
|
|
125
|
+
# special case. It declines to arm rather than reconciling to "not armed": these outputs are
|
|
126
|
+
# absent from the entitlement half below, so an arm an earlier run made is left in place. See
|
|
127
|
+
# the reconciling step for why the two halves name different inputs (joshuafolkken/kit#845).
|
|
128
|
+
- name: Fetch Dependabot metadata
|
|
129
|
+
id: metadata
|
|
130
|
+
continue-on-error: true
|
|
131
|
+
uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3.1.0
|
|
132
|
+
with:
|
|
133
|
+
github-token: '${{ secrets.GITHUB_TOKEN }}'
|
|
134
|
+
|
|
135
|
+
# `gh pr merge --auto` is state that outlives the run that set it, and for four rounds this
|
|
136
|
+
# workflow managed that state with two steps whose conditions had to be exact complements of
|
|
137
|
+
# each other: one that armed, one that withdrew. Nothing enforced the complement — #840 made it
|
|
138
|
+
# hold by writing one as the literal negation of the other, which is a convention, not a
|
|
139
|
+
# structure. Every fix since #836 has been the same shape: a new axis, added to N conditions.
|
|
140
|
+
#
|
|
141
|
+
# So there is one step that changes the state now, and it takes both directions from what is
|
|
142
|
+
# declared below rather than from a gate of its own (joshuafolkken/kit#845).
|
|
143
|
+
#
|
|
144
|
+
# There are two declarations rather than one because there are genuinely two questions, and the
|
|
145
|
+
# old design's mistake was conflating them into a complement:
|
|
146
|
+
#
|
|
147
|
+
# MAY_ARM — is this *run* entitled to decide? Facts about the run: who pushed, and
|
|
148
|
+
# whether the diff holds a workflow an upstream package overwrites.
|
|
149
|
+
# SHOULD_BE_ARMED — does this *bump* qualify? MAY_ARM plus the ecosystem and the semver
|
|
150
|
+
# level, which are facts about the bump and do not change over a pull
|
|
151
|
+
# request's life.
|
|
152
|
+
#
|
|
153
|
+
# The second contains the first verbatim, and a kit unit test holds that containment — so they
|
|
154
|
+
# cannot drift into disagreeing the way two complements could.
|
|
155
|
+
#
|
|
156
|
+
# The distinction is what the withdrawal keys on, and it is load-bearing. On a run that is still
|
|
157
|
+
# entitled, a bump that simply does not qualify — an npm security advisory, a github-actions
|
|
158
|
+
# major — is left exactly as it is: if a maintainer read it and enabled auto-merge by hand, that
|
|
159
|
+
# is their decision and this workflow has no business undoing it. Withdrawing there would strand
|
|
160
|
+
# the pull request green, mergeable and unmerged, which is the state joshuafolkken/kit#834
|
|
161
|
+
# exists to prevent.
|
|
162
|
+
#
|
|
163
|
+
# What is withdrawn is an arm the *run* is not entitled to: a diff that grew an upstream-managed
|
|
164
|
+
# workflow (joshuafolkken/kit#838), a push by someone other than Dependabot, or an input that
|
|
165
|
+
# could not answer (joshuafolkken/kit#840). Those take back a hand-armed auto-merge too, and
|
|
166
|
+
# deliberately — a push nobody reviewed as part of the bump is exactly the case #840 closed, and
|
|
167
|
+
# who armed it earlier does not make the new commits reviewed. So a human is overridden when
|
|
168
|
+
# merging would be harmful, and only then; falling outside this workflow's policy is not.
|
|
169
|
+
#
|
|
170
|
+
# Both stay expressions rather than shell on purpose. Written here, GitHub's own engine
|
|
171
|
+
# evaluates them, and kit's tests evaluate the very same strings with that engine — a matrix
|
|
172
|
+
# over actor, managed, ecosystem and semver level proves which updates can reach the arming
|
|
173
|
+
# call. Moved into the script below they would still work, and every guard on them would decay
|
|
174
|
+
# from an evaluation into a substring match.
|
|
175
|
+
#
|
|
176
|
+
# A missing input makes the chains that name it false, and the two chains name different ones,
|
|
177
|
+
# which is the point rather than an oversight. A `managed` step that could not answer costs the
|
|
178
|
+
# run its entitlement, so an arm it finds is taken back. A metadata action that could not answer
|
|
179
|
+
# costs only qualification: the bump is not armed *now*, and an arm an earlier run made is left
|
|
180
|
+
# alone, because that run did verify the ecosystem and the semver level and neither changes over
|
|
181
|
+
# a pull request's life. Withdrawing there would strip a good arm every time the action has a
|
|
182
|
+
# bad day. So the safe side is per question, not per input — "do not arm on what I cannot
|
|
183
|
+
# verify", and "take back what this run is not entitled to".
|
|
184
|
+
#
|
|
185
|
+
# The two failures also announce themselves differently, which is why only one of them fails a
|
|
186
|
+
# step. A `managed` step that guessed would let an unreviewed bump merge, and nothing would say
|
|
187
|
+
# so — it has to be loud. A metadata action that cannot answer makes bumps stop merging, which
|
|
188
|
+
# announces itself by the pile of open pull requests; the log below names it as well, so a
|
|
189
|
+
# broken action is not mistaken for a queue of bumps that merely do not qualify.
|
|
190
|
+
#
|
|
191
|
+
# `!cancelled()` is what reaches this step after `managed` fails; a cancelled run is left alone
|
|
192
|
+
# because it changed nothing about the pull request and so has nothing to reconcile, and because
|
|
193
|
+
# the run that superseded it will decide from the current state anyway (joshuafolkken/kit#840).
|
|
194
|
+
#
|
|
195
|
+
# The two directions are not equally dangerous, and #846 will build on that. Failing to arm
|
|
196
|
+
# leaves the bump open for a human — an inconvenience. Failing to withdraw leaves an auto-merge
|
|
197
|
+
# armed on a diff nobody re-approved, and this workflow is not a required check, so a red run
|
|
198
|
+
# does not hold the merge back. That is why only the arming call carries `--match-head-commit`:
|
|
199
|
+
# it makes GitHub refuse the arm if the branch moved since this run decided (the mutation's
|
|
200
|
+
# `expectedHeadOid`), closing the window the concurrency group above only narrows
|
|
201
|
+
# (joshuafolkken/kit#842). Withdrawing from a stale view costs at most an auto-merge the next
|
|
202
|
+
# run re-arms, so it needs no such guard.
|
|
203
|
+
#
|
|
204
|
+
# The armed state is read before either branch because `--disable-auto` is an error, not a
|
|
205
|
+
# no-op, on a pull request that has none — and `--auto` on one already armed is a needless
|
|
206
|
+
# write. `autoMergeRequest` is null exactly when nothing is armed.
|
|
207
|
+
- name: Reconcile the pull request's auto-merge state
|
|
208
|
+
id: reconcile
|
|
209
|
+
if: '!cancelled()'
|
|
210
|
+
env:
|
|
211
|
+
MAY_ARM: >-
|
|
212
|
+
${{ github.actor == 'dependabot[bot]'
|
|
213
|
+
&& steps.managed.outputs.has-upstream-managed == 'false' }}
|
|
214
|
+
# Not part of either decision — it only lets the log below say which of the two reasons kept
|
|
215
|
+
# this run from arming. A metadata action that is broken rather than merely unsatisfied
|
|
216
|
+
# otherwise looks exactly like an npm advisory, and nothing else in the run says so.
|
|
217
|
+
METADATA_ANSWERED: >-
|
|
218
|
+
${{ steps.metadata.outputs.package-ecosystem != '' }}
|
|
219
|
+
SHOULD_BE_ARMED: >-
|
|
220
|
+
${{ github.actor == 'dependabot[bot]'
|
|
221
|
+
&& steps.managed.outputs.has-upstream-managed == 'false'
|
|
222
|
+
&& steps.metadata.outputs.package-ecosystem == 'github_actions'
|
|
223
|
+
&& (steps.metadata.outputs.update-type == 'version-update:semver-patch'
|
|
224
|
+
|| steps.metadata.outputs.update-type == 'version-update:semver-minor') }}
|
|
225
|
+
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
226
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
227
|
+
# How hard the withdrawal tries before giving up, and what it says when it does. The delay
|
|
228
|
+
# is a variable so the unit test that runs this script can set it to zero; the workflow's
|
|
229
|
+
# own value is the one a runner uses.
|
|
230
|
+
RETRY_ATTEMPTS: '3'
|
|
231
|
+
RETRY_BACKOFF_SECONDS: '5'
|
|
232
|
+
# Two notices, because the run does not always know which happened. The first is posted when
|
|
233
|
+
# it read an armed pull request and could not disarm it; the second when it could not even
|
|
234
|
+
# read the state, where claiming the auto-merge is still armed would be an assertion nobody
|
|
235
|
+
# verified.
|
|
236
|
+
WITHDRAW_FAILED_NOTICE: >-
|
|
237
|
+
Auto-merge is enabled on this pull request and this workflow could not withdraw it. This
|
|
238
|
+
workflow is not a required check, so nothing here holds the merge back — please disable
|
|
239
|
+
auto-merge before the checks go green.
|
|
240
|
+
# Prefixed to the notice so a later run can recognize its own and not repeat it. The head it
|
|
241
|
+
# was written for is part of it: a repeat within one degraded window says nothing new, but a
|
|
242
|
+
# failure after the branch moved is a fresh incident and has to be reported again.
|
|
243
|
+
NOTICE_MARKER: '<!-- josh-auto-merge-withdrawal-failed'
|
|
244
|
+
WITHDRAW_UNKNOWN_NOTICE: >-
|
|
245
|
+
This workflow could not read or change the auto-merge state of this pull request, so it
|
|
246
|
+
may still be armed. This workflow is not a required check, so nothing here holds the
|
|
247
|
+
merge back — please check before the checks go green.
|
|
248
|
+
GH_TOKEN: ${{ github.token }}
|
|
249
|
+
run: |
|
|
250
|
+
# Used on the state read, which both directions depend on, and on the withdrawal. Not on the
|
|
251
|
+
# arming call: a run that does not arm leaves the bump open for a human, while a run that
|
|
252
|
+
# does not withdraw leaves an auto-merge armed on a diff nobody re-approved — and this
|
|
253
|
+
# workflow is not a required check, so its red run does not hold that merge back
|
|
254
|
+
# (joshuafolkken/kit#846).
|
|
255
|
+
# Refused rather than defaulted: the loop's only exit compares against these, and a value
|
|
256
|
+
# that is not a whole number makes that comparison error instead of ending it — the loop
|
|
257
|
+
# would then spin with a widening sleep until the job's own timeout.
|
|
258
|
+
# A leading zero is refused along with the rest: `$((08))` is an invalid octal literal, and
|
|
259
|
+
# the arithmetic below would error into a backoff of zero rather than the one declared.
|
|
260
|
+
case "$RETRY_ATTEMPTS:$RETRY_BACKOFF_SECONDS" in
|
|
261
|
+
'' | *[!0-9:]* | :* | *: | *:*:* | 0[0-9]* | *:0[0-9]*)
|
|
262
|
+
echo 'RETRY_ATTEMPTS and RETRY_BACKOFF_SECONDS must be whole numbers.' >&2
|
|
263
|
+
exit 1
|
|
264
|
+
;;
|
|
265
|
+
esac
|
|
266
|
+
|
|
267
|
+
retry() {
|
|
268
|
+
local attempt=1
|
|
269
|
+
|
|
270
|
+
while ! "$@"; do
|
|
271
|
+
if [ "$attempt" -ge "$RETRY_ATTEMPTS" ]; then
|
|
272
|
+
return 1
|
|
273
|
+
fi
|
|
274
|
+
|
|
275
|
+
sleep "$((attempt * RETRY_BACKOFF_SECONDS))"
|
|
276
|
+
attempt=$((attempt + 1))
|
|
277
|
+
done
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
# The answer is checked, not just the exit status: a call that succeeded while returning
|
|
281
|
+
# something other than `true` or `false` has not told us the state, and accepting it would
|
|
282
|
+
# skip the retries and land on a decision made from nothing.
|
|
283
|
+
read_armed() {
|
|
284
|
+
armed="$(gh pr view "$PR_URL" --json autoMergeRequest --jq '.autoMergeRequest != null')" ||
|
|
285
|
+
return 1
|
|
286
|
+
|
|
287
|
+
case "$armed" in
|
|
288
|
+
true | false) return 0 ;;
|
|
289
|
+
esac
|
|
290
|
+
|
|
291
|
+
return 1
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
# `unknown` rather than a failed step: which way an unreadable state should fall depends on
|
|
295
|
+
# the direction, and the branches below decide that for themselves. Assigned here rather
|
|
296
|
+
# than before the read, because a failed command substitution leaves the variable empty
|
|
297
|
+
# rather than untouched — there is nothing to fall back to.
|
|
298
|
+
if ! retry read_armed; then
|
|
299
|
+
armed=unknown
|
|
300
|
+
echo 'Could not read the auto-merge state.' >&2
|
|
301
|
+
fi
|
|
302
|
+
|
|
303
|
+
if [ "$SHOULD_BE_ARMED" = 'true' ]; then
|
|
304
|
+
if [ "$armed" = 'true' ]; then
|
|
305
|
+
echo 'Auto-merge is already enabled — nothing to do.'
|
|
306
|
+
exit 0
|
|
307
|
+
fi
|
|
308
|
+
|
|
309
|
+
# Arming on a state nobody could read is the one move that cannot be taken back later, so
|
|
310
|
+
# an unreadable state refuses rather than guesses.
|
|
311
|
+
if [ "$armed" != 'false' ]; then
|
|
312
|
+
echo 'Refusing to arm auto-merge without knowing the current state.' >&2
|
|
313
|
+
exit 1
|
|
314
|
+
fi
|
|
315
|
+
|
|
316
|
+
gh pr merge --auto --merge --match-head-commit "$HEAD_SHA" "$PR_URL"
|
|
317
|
+
exit 0
|
|
318
|
+
fi
|
|
319
|
+
|
|
320
|
+
if [ "$MAY_ARM" = 'true' ]; then
|
|
321
|
+
if [ "$METADATA_ANSWERED" = 'true' ]; then
|
|
322
|
+
echo 'This bump does not qualify for auto-merge — leaving the pull request as it is.'
|
|
323
|
+
else
|
|
324
|
+
echo 'The metadata step did not answer, so nothing about this bump could be verified.' >&2
|
|
325
|
+
echo 'Leaving the pull request as it is. Bumps will not arm until that step works.' >&2
|
|
326
|
+
fi
|
|
327
|
+
|
|
328
|
+
exit 0
|
|
329
|
+
fi
|
|
330
|
+
|
|
331
|
+
# `unknown` falls through to the withdrawal, not past it. Skipping it would leave an armed
|
|
332
|
+
# auto-merge nobody re-approved, and "I could not tell" is not evidence that there is
|
|
333
|
+
# nothing to take back.
|
|
334
|
+
#
|
|
335
|
+
# It is not free. Most pull requests on this path were never armed, so the attempt usually
|
|
336
|
+
# fails, and the run then leaves a notice saying the state could not be established — on a
|
|
337
|
+
# pull request that was fine. During a partial outage, where reads fail but comments still
|
|
338
|
+
# work, that is one notice per open bump. The trade is deliberate: a spurious notice asks
|
|
339
|
+
# someone to check something that turns out to be fine, while the silence it buys would let
|
|
340
|
+
# a genuinely armed auto-merge merge an unreviewed diff with nothing to read anywhere. The
|
|
341
|
+
# notice for this case says the state is unknown rather than claiming it is armed, which is
|
|
342
|
+
# the most either the run or the reader actually knows.
|
|
343
|
+
if [ "$armed" = 'false' ]; then
|
|
344
|
+
echo 'Auto-merge is not enabled — nothing to withdraw.'
|
|
345
|
+
exit 0
|
|
346
|
+
fi
|
|
347
|
+
|
|
348
|
+
if retry gh pr merge --disable-auto "$PR_URL"; then
|
|
349
|
+
exit 0
|
|
350
|
+
fi
|
|
351
|
+
|
|
352
|
+
# A lost response looks exactly like a failure, and the retry after it then fails for the
|
|
353
|
+
# honest reason that there is nothing left to disable. One more read tells those apart
|
|
354
|
+
# before anyone is asked to act — and it is the same read that resolves the case where the
|
|
355
|
+
# state was never legible: a pull request that turns out not to be armed needs no notice.
|
|
356
|
+
established=$armed
|
|
357
|
+
|
|
358
|
+
if retry read_armed; then
|
|
359
|
+
if [ "$armed" = 'false' ]; then
|
|
360
|
+
echo 'Auto-merge is not enabled after all — nothing was left armed.'
|
|
361
|
+
exit 0
|
|
362
|
+
fi
|
|
363
|
+
else
|
|
364
|
+
# The read assigns before it fails, so a failed confirmation would otherwise downgrade a
|
|
365
|
+
# state this run had positively read into `unknown` — and the notice would then say less
|
|
366
|
+
# than the run actually knows.
|
|
367
|
+
armed=$established
|
|
368
|
+
fi
|
|
369
|
+
|
|
370
|
+
# The retries are what handle a transient failure; this is what keeps a lasting one from
|
|
371
|
+
# being silent. It is not retracted when a later run succeeds where this one did not: the
|
|
372
|
+
# notice asks the reader to check the auto-merge state, and finding it already withdrawn is
|
|
373
|
+
# the cheap end of that. Editing it would mean reading and rewriting someone else's comment
|
|
374
|
+
# thread on every successful run, for a case the re-read above already narrows.
|
|
375
|
+
#
|
|
376
|
+
# It does not stop the merge — nothing here can, short of a repository setting every
|
|
377
|
+
# consumer would have to change — but it puts the reason where the person looking at the
|
|
378
|
+
# merged pull request will find it.
|
|
379
|
+
notice="$WITHDRAW_FAILED_NOTICE"
|
|
380
|
+
outcome=armed
|
|
381
|
+
if [ "$armed" != 'true' ]; then
|
|
382
|
+
notice="$WITHDRAW_UNKNOWN_NOTICE"
|
|
383
|
+
outcome=unknown
|
|
384
|
+
fi
|
|
385
|
+
|
|
386
|
+
# One notice per outcome per head. Re-running the job after a blip is the case this exists
|
|
387
|
+
# for; a marker naming only the pull request would silence every incident after the first,
|
|
388
|
+
# and one naming only the head would silence a re-run that learned more — "confirmed armed
|
|
389
|
+
# and not disarmed" is worth saying even where "state unknown" already stands.
|
|
390
|
+
#
|
|
391
|
+
# The reverse is not worth saying, so an `armed` notice covers an `unknown` one: a later run
|
|
392
|
+
# that could not read the state adds nothing to a standing notice that read it.
|
|
393
|
+
#
|
|
394
|
+
# The lookup retries on the same terms as everything else here. It cannot help in the one
|
|
395
|
+
# case where the state read itself never succeeded, because that is the same call against
|
|
396
|
+
# the same API — a lasting read outage duplicates the notice on each re-run, and a duplicate
|
|
397
|
+
# comment is the better mistake when the alternative is silence.
|
|
398
|
+
marker="$NOTICE_MARKER $HEAD_SHA $outcome -->"
|
|
399
|
+
covering="$NOTICE_MARKER $HEAD_SHA armed -->"
|
|
400
|
+
|
|
401
|
+
read_posted() {
|
|
402
|
+
posted="$(gh pr view "$PR_URL" --json comments --jq '.comments[].body')"
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
notice_stands() {
|
|
406
|
+
retry read_posted && printf '%s' "$posted" | grep -qF -e "$marker" -e "$covering"
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
# Re-checked only after a post that failed: a lost response leaves the comment there, and
|
|
410
|
+
# the next attempt would otherwise duplicate it.
|
|
411
|
+
post_notice() {
|
|
412
|
+
gh pr comment "$PR_URL" --body "$marker $notice" && return 0
|
|
413
|
+
|
|
414
|
+
notice_stands
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
if notice_stands; then
|
|
418
|
+
echo 'A notice about this failure is already on this pull request.' >&2
|
|
419
|
+
exit 1
|
|
420
|
+
fi
|
|
421
|
+
|
|
422
|
+
# Retried like everything else on this path: this call runs during the same outage that just
|
|
423
|
+
# defeated the withdrawal, and dropping the notice on its first failure would leave an armed
|
|
424
|
+
# auto-merge with nothing on the pull request to read.
|
|
425
|
+
retry post_notice ||
|
|
426
|
+
echo 'Could not leave a comment about the failed withdrawal either.' >&2
|
|
427
|
+
|
|
428
|
+
exit 1
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"strict": true,
|
|
4
|
+
// tsx uses bundler-like resolution; "bundler" is the correct pairing for module:ESNext
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"forceConsistentCasingInFileNames": true,
|
|
8
|
+
"resolveJsonModule": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
|
|
12
|
+
// Strictness
|
|
13
|
+
// Treat unused local variables as errors
|
|
14
|
+
"noUnusedLocals": true,
|
|
15
|
+
// Treat unused function parameters as errors
|
|
16
|
+
"noUnusedParameters": true,
|
|
17
|
+
|
|
18
|
+
// Disallow unused labels
|
|
19
|
+
"allowUnusedLabels": false,
|
|
20
|
+
// Disallow unreachable code
|
|
21
|
+
"allowUnreachableCode": false,
|
|
22
|
+
|
|
23
|
+
// Disallow fallthrough in switch statements
|
|
24
|
+
"noFallthroughCasesInSwitch": true,
|
|
25
|
+
// Require all code paths in a function to have an explicit return
|
|
26
|
+
"noImplicitReturns": true,
|
|
27
|
+
|
|
28
|
+
// Ensure each file can be safely transpiled independently (e.g. with Babel)
|
|
29
|
+
"isolatedModules": true,
|
|
30
|
+
// Require the override keyword when overriding methods
|
|
31
|
+
"noImplicitOverride": true,
|
|
32
|
+
|
|
33
|
+
// Strictly distinguish between optional properties and undefined
|
|
34
|
+
"exactOptionalPropertyTypes": true,
|
|
35
|
+
// Include undefined in index access results
|
|
36
|
+
"noUncheckedIndexedAccess": true,
|
|
37
|
+
// Disallow dot notation for index signature types
|
|
38
|
+
"noPropertyAccessFromIndexSignature": true,
|
|
39
|
+
|
|
40
|
+
// Preserve import/export syntax as-is and enforce explicit type-only imports
|
|
41
|
+
"verbatimModuleSyntax": true,
|
|
42
|
+
// Do not emit output files if type errors are present
|
|
43
|
+
"noEmitOnError": true,
|
|
44
|
+
// Use the ES2022 class fields spec
|
|
45
|
+
"useDefineForClassFields": true,
|
|
46
|
+
|
|
47
|
+
// Check side-effect-only imports (imports used only for types)
|
|
48
|
+
"noUncheckedSideEffectImports": true
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ES2020",
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"allowImportingTsExtensions": false,
|
|
8
|
+
"allowJs": true,
|
|
9
|
+
"checkJs": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"sourceMap": true,
|
|
15
|
+
"strict": true,
|
|
16
|
+
"noUncheckedIndexedAccess": true,
|
|
17
|
+
"noImplicitOverride": true,
|
|
18
|
+
"noUnusedLocals": true,
|
|
19
|
+
"noUnusedParameters": true,
|
|
20
|
+
"exactOptionalPropertyTypes": true,
|
|
21
|
+
"noFallthroughCasesInSwitch": true,
|
|
22
|
+
"noImplicitReturns": true,
|
|
23
|
+
"noPropertyAccessFromIndexSignature": true,
|
|
24
|
+
"allowUnusedLabels": false,
|
|
25
|
+
"allowUnreachableCode": false,
|
|
26
|
+
"isolatedModules": true,
|
|
27
|
+
"paths": {
|
|
28
|
+
"$lib": ["./src/lib"],
|
|
29
|
+
"$lib/*": ["./src/lib/*"]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"include": ["src/**/*.js", "src/**/*.ts", "src/**/*.svelte", "scripts/**/*.ts"],
|
|
33
|
+
"exclude": ["node_modules", "build", ".svelte-kit"]
|
|
34
|
+
}
|