@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,109 @@
|
|
|
1
|
+
# `backlogrun` — the manifest (named issues, epics and the opted-in backlog)
|
|
2
|
+
|
|
3
|
+
**This file is the manifest, not the procedure** (joshuafolkken/kit#2190). It carries the ordered flow
|
|
4
|
+
as terse triggers and pointers; the fine print of each step is read on demand from
|
|
5
|
+
`backlogrun-steps.md`, its reference-only companion. `backlogrun-steps.md` is **not an entry read** —
|
|
6
|
+
it is classified point-of-use in `entry-read-set.ts`, exactly as the four `backlogrun-*.md` phase
|
|
7
|
+
documents are, so a `backlogrun` entry carries this manifest and nothing else up front
|
|
8
|
+
(joshuafolkken/kit#2010, joshuafolkken/kit#2190).
|
|
9
|
+
|
|
10
|
+
**`backlogrun` names either nothing, or the issues and epics to run first.** With no argument it runs
|
|
11
|
+
whatever `pnpm josh backlog:next` offers — the whole opted-in backlog, every issue carrying `auto-ok`
|
|
12
|
+
plus every child of an epic whose root carries it, ordered by dependency and grouped into waves. With
|
|
13
|
+
`#N1 #N2 …` it runs those named items in the order they were typed, one at a time, and **then** drains
|
|
14
|
+
that same backlog. **`--only` stops it after the named list**, draining nothing.
|
|
15
|
+
|
|
16
|
+
**The loop's current position is computed, not carried in the conversation.** `pnpm josh run:step <N>`
|
|
17
|
+
reads where the run is from the event stream, the carry record and the issue state, and prints the next
|
|
18
|
+
single action — a runnable command, or the one point a person has to judge — so a session cut, a
|
|
19
|
+
compaction or a fresh resume reaches the same next step from the same three inputs
|
|
20
|
+
(joshuafolkken/kit#2248).
|
|
21
|
+
|
|
22
|
+
**A named item may be a single issue or an epic** (joshuafolkken/kit#1985, folding in the old
|
|
23
|
+
`epicrun` keyword). A single-issue item is one `fullrun`; **a named epic runs its children in
|
|
24
|
+
dependency order across the free lanes, and the run does not advance to the next named item until
|
|
25
|
+
every one of that epic's children has been processed — merged or parked.** `backlogrun #E --only`
|
|
26
|
+
therefore runs exactly one epic's children and stops.
|
|
27
|
+
|
|
28
|
+
## Explicit invocation required (MANDATORY)
|
|
29
|
+
|
|
30
|
+
**Never start a `backlogrun` unless the user has typed the keyword in the current turn's prompt.**
|
|
31
|
+
This is the same rule the other entry points carry, at the same strength — `SKILL.md` → §0 is its
|
|
32
|
+
single source, and `CLAUDE.md` → "Explicit invocation required (MANDATORY)" is where it stays resident
|
|
33
|
+
so it binds on a turn where nothing here has been read. It matters more here than anywhere else,
|
|
34
|
+
because this is the entry point with the widest authorization: a conversational "clear the backlog" is
|
|
35
|
+
**not** an invocation, a confirmation question is no substitute for the keyword, and an earlier turn's
|
|
36
|
+
authorization does not carry.
|
|
37
|
+
|
|
38
|
+
**The keystroke starts the invocation; it does not have to land in every session that invocation
|
|
39
|
+
spans.** A `backlogrun` cut mid-run and resumed is still that one invocation
|
|
40
|
+
(`backlogrun-steps.md` → "The session cut is inside the invocation"). This reading covers `backlogrun`
|
|
41
|
+
and it alone — a `fullrun` cut still waits for the keyword.
|
|
42
|
+
|
|
43
|
+
## The manifest — the ordered flow
|
|
44
|
+
|
|
45
|
+
Each step is a terse trigger and a pointer; the procedure is read on demand from the section named.
|
|
46
|
+
|
|
47
|
+
1. **Claim nothing at the entry — this parent orchestrates and never implements.** The working-tree
|
|
48
|
+
hold, the split assessment and `fullrun.md` are read by a dispatched child inside its own delegated
|
|
49
|
+
`fullrun` unit (`backlogrun-child.md`), never at the parent's entry.
|
|
50
|
+
2. **Begin the carry record before the plan** — `pnpm josh run:carry --begin "<invocation>" --owner
|
|
51
|
+
"$PPID"` and `pnpm josh run:wake --start`, in the same turn as the first `git switch main && git
|
|
52
|
+
pull`. The answer table (`began` / `resumed` / `busy` / `standing` / `mismatch` / `expired` /
|
|
53
|
+
`unreadable` / `unknown`) and the counting/hand-off/resume mechanism are
|
|
54
|
+
`backlogrun-steps.md` → "The session cut is inside the invocation".
|
|
55
|
+
3. **What this invocation approves** — `backlogrun-steps.md` → "What one invocation approves": the
|
|
56
|
+
opted-in pool, a run's own filings once bundled, and the brake (`--max`, ten filings, the WIP cap)
|
|
57
|
+
that bounds the amount. `auto-ok` is a person's alone.
|
|
58
|
+
4. **Report the plan before the first child** — `pnpm josh backlog:plan`, then resolve every
|
|
59
|
+
`needs-decision` issue decidable from its body in one pass. `backlogrun-steps.md` → "The plan,
|
|
60
|
+
before the first child starts" and its "Resolve what the plan can resolve, before starting".
|
|
61
|
+
5. **Named issues run first, in order** — `backlogrun-steps.md` → "Named issues run first, in order":
|
|
62
|
+
the supervisor's driver dispatches each as a delegated `fullrun`, one at a time, then drains the
|
|
63
|
+
pool; `--only` stops after the list.
|
|
64
|
+
6. **The loop belongs to the supervisor** — `run:wake` runs `backlog:drive`; the driver uses
|
|
65
|
+
`pnpm josh backlog:offer` as its loop head and returns a branch to an AI session only when it needs
|
|
66
|
+
judgment. `backlogrun-steps.md` → "The loop"
|
|
67
|
+
fixes the answer-to-word mapping, "The two budgets" the `run` / `watch` / `stop` verdict, "The cost
|
|
68
|
+
check is not asked during a watch", and "Where the run stops" every termination.
|
|
69
|
+
7. **What runs once per session, not once per issue** — `backlogrun-steps.md` → "What runs once per
|
|
70
|
+
session, not once per issue": the per-repository preflight, `josh latest` on `required`, the
|
|
71
|
+
progress watcher, the carry/wake pair, and the release ask.
|
|
72
|
+
8. **End the record when the run ends** — the driver's finish path runs `run:report` before
|
|
73
|
+
`run:carry --end` (or `--end --stopped "<reason>"`). The supervisor then observes that the record
|
|
74
|
+
ended and exits; a judgment branch hands its reason and resume flags to the AI session.
|
|
75
|
+
`backlogrun-steps.md` → "End the record when the run ends" is the single source.
|
|
76
|
+
|
|
77
|
+
## Running a child — read the phase document at its point of use
|
|
78
|
+
|
|
79
|
+
Everything about *running one child* — of a named epic or of the opted-in pool — lives in four phase
|
|
80
|
+
documents, split out so the entry read carries only what binds before the first child
|
|
81
|
+
(joshuafolkken/kit#2010). **None of the four is an entry read.** Each is read in full, in the turn the
|
|
82
|
+
named step reaches it, exactly as `backlogrun-steps.md` and the shared gate documents
|
|
83
|
+
(`chain-rule.md` / `latest-gate.md` / `followup.md` / `background-commands.md`) are
|
|
84
|
+
(`SKILL.md` → §1, "Four documents are read at the point of use"):
|
|
85
|
+
|
|
86
|
+
| Read | In full, before | What it carries |
|
|
87
|
+
| --- | --- | --- |
|
|
88
|
+
| `backlogrun-child.md` | dispatching the first child (`pnpm josh delegate epic-child`, `pnpm josh lane:dispatch`) | the shared per-child `fullrun`, a bare non-epic `#N`, the delegated unit and its summary bound, liveness recovery, and the once-per-session setup (audit, `josh latest`, preflight) |
|
|
89
|
+
| `backlogrun-lanes.md` | opening the first lane (`pnpm josh lane:open`) | the per-repository lane ceiling and the lane lifecycle, and how a merge conflict is resolved |
|
|
90
|
+
| `backlogrun-progress.md` | starting the progress watcher (`pnpm josh run:progress --wait`) and the hand-off check at a merge (`pnpm josh cost --cut`) | the heartbeat, the hand-off and the cut/resume, waiting without waiting forever, and the end-of-run summary and propagate |
|
|
91
|
+
| `backlogrun-park.md` | a child cannot finish | park-and-continue, the `needs-human-review` stop, a stale `in-progress`, a prerequisite discovered mid-run, and a mid-run split |
|
|
92
|
+
|
|
93
|
+
## Guards
|
|
94
|
+
|
|
95
|
+
| Guard | Limit | On reaching it |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| Children per run | 30 | Stop and report; an epic this large should be split. |
|
|
98
|
+
| Issues filed per run | 10 | Stop and report; a run filing more than this has lost the plot. |
|
|
99
|
+
| Consecutive child failures | 3 | Stop and report; something is wrong with the environment, not the children. |
|
|
100
|
+
|
|
101
|
+
A failure that is not consecutive parks its child and the run continues.
|
|
102
|
+
|
|
103
|
+
## This file is the single source of the `backlogrun` procedure
|
|
104
|
+
|
|
105
|
+
`CLAUDE.md` carries the keyword's row in the shorthand table and the explicit-invocation rule;
|
|
106
|
+
`SKILL.md` → §1 routes here. This manifest names which children there are and in what order; the
|
|
107
|
+
procedure for each step is `backlogrun-steps.md`, and *running one child* is the four phase documents
|
|
108
|
+
above. Where any of them could disagree, the rule is that this manifest and `backlogrun-steps.md` add
|
|
109
|
+
nothing to a child's procedure — they only say which children there are.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# `/code-review` → `followup` chain rule (MANDATORY)
|
|
2
|
+
|
|
3
|
+
## Run the review-to-merge chain
|
|
4
|
+
|
|
5
|
+
This is the execution contract for `fullrun` and `backlogrun`; the record below is reference only.
|
|
6
|
+
Review results and successful pushes are never turn boundaries.
|
|
7
|
+
|
|
8
|
+
0. **A lane child** (#2428): `pnpm josh main:merge`, the scoped pair, `pnpm josh ship --detach --review
|
|
9
|
+
"<title> #<N>"` (`--cite <N>`), then **end the turn** on `launched`/`busy`. A stop relaunches a child
|
|
10
|
+
whose `run:step` names `ship --log <N>`: fix, re-detach (`--review` only if no round is recorded,
|
|
11
|
+
else step 4). `failed` → step 1.
|
|
12
|
+
1. Run `pnpm josh main:merge`. **Then issue `pnpm josh run:cut <N>` alone, before the scoped pair and
|
|
13
|
+
the gate** — the pre-gate cut (a no-op outside a lane, joshuafolkken/kit#2177). Then run the final scoped lint/test pair and `pnpm josh run:review`: it starts
|
|
14
|
+
`pnpm josh gate` in the background and prints the `/code-review` brief in one call, so the two overlap
|
|
15
|
+
rather than the review waiting on the gate (joshuafolkken/kit#2179). Launch the `/code-review`
|
|
16
|
+
subagent as the `general-purpose` agent type with that brief (every tool, so `--fix` applies; a
|
|
17
|
+
guessed type name fails, joshuafolkken/kit#2297).
|
|
18
|
+
Never load the review skill in the main line.
|
|
19
|
+
2. Once the review returns, run `pnpm josh run:review --join` to join and read the gate before
|
|
20
|
+
committing; it exits non-zero on a red gate. Fix any red check, then rerun the affected scoped check
|
|
21
|
+
and gate. Never version-bump a child (`pnpm josh release` decides).
|
|
22
|
+
3. Before acting on any review round, run `pnpm josh review:attest --check`. `missing` or `mismatch`
|
|
23
|
+
discards it without counting; rerun against the brief's checkout. A review error receives a
|
|
24
|
+
`confirmation` Telegram and stops.
|
|
25
|
+
4. Route the attested verdict mechanically:
|
|
26
|
+
- Clean or Low-only round 1: no second round. Fix, file, or drop each Low with a one-line reason.
|
|
27
|
+
- High/Medium round 1: fix it, then ask `pnpm josh review:round2 --round-1-closed`. On `skip`, record
|
|
28
|
+
the skip on the Issue. On `required`, open the PR first and run the verification pass from
|
|
29
|
+
`pnpm josh review:brief --round 2` beside CI.
|
|
30
|
+
- Round 2 is final. Fix a branch-1 finding, run its scoped check, push it, then run the gate. Dispose
|
|
31
|
+
of remaining non-High findings; a confirmed High blocks and receives a `confirmation` Telegram.
|
|
32
|
+
Any round-1 fix runs its affected scoped check and the gate before `git -y`.
|
|
33
|
+
Once a round's verdict is attested, record its findings with `pnpm josh review:record --issue <N>
|
|
34
|
+
[<category>:<severity>:<file> ...]` — a clean round records one zero-finding line.
|
|
35
|
+
**`pnpm josh followup` refuses the merge until the round is recorded**
|
|
36
|
+
(`pnpm josh review:record --check --issue <N>`, joshuafolkken/kit#2343).
|
|
37
|
+
5. **The clean path ships in one call** — with no second round due, background
|
|
38
|
+
`pnpm josh ship "<title> #<N>" --body-file <evidence.md>`: gate → `git -y` → foreground `followup` → `run:tail`, stopping at the
|
|
39
|
+
first failure (joshuafolkken/kit#2398). `--review` runs both rounds (#2489). **Else a due round 2
|
|
40
|
+
does not fit `ship`**: the PR opens between the rounds — background `pnpm josh git -y "<title> #<N>"`, round 2 beside CI, then
|
|
41
|
+
`pnpm josh followup`.
|
|
42
|
+
|
|
43
|
+
A lane child may end once, at step 0 or the pre-gate cut (`pre-gate-cut.md`); never at the push. The chain otherwise stops only when the PR is merged, the completion Telegram was sent, and
|
|
44
|
+
`pnpm josh ms` returned to the default branch, or when user judgment is required by an unverifiable
|
|
45
|
+
CodeRabbit/Claude Review finding or a CI failure. In a lane `josh ms` refuses; the parent closes it. Managed config claims are reported by `followup` and do not stop the merge.
|
|
46
|
+
|
|
47
|
+
Recommendations are informational; severity decides. A CodeRabbit rate-limit warning is not a finding.
|
|
48
|
+
|
|
49
|
+
## Orchestration facts single-sourced here
|
|
50
|
+
|
|
51
|
+
These are the gate → review → PR → merge facts other documents cite. This file is their single source
|
|
52
|
+
(joshuafolkken/kit#1927 moved them out of `prompts/review.md`, which now carries only the review
|
|
53
|
+
_policy_ — level, round cap, disposition — and `prompts/review-rubric.md` the rubric). Each is stated
|
|
54
|
+
once here; the measurements that motivated each one live in the linked Issues.
|
|
55
|
+
|
|
56
|
+
- **The gate runs beside this review, not in front of it** — `pnpm josh gate` is started when the review
|
|
57
|
+
starts and joined before the commit; the two read the same tree and neither writes to it, so running
|
|
58
|
+
them serially is pure waiting. A red gate is fixed and re-run whatever the review concluded, and there
|
|
59
|
+
is no path to a commit on a gate nobody read (joshuafolkken/kit#1242).
|
|
60
|
+
- **origin/main is merged in before the gate** — `pnpm josh main:merge` merges `origin/<default>` into
|
|
61
|
+
the branch before the gate and the review start, so the gate verifies the tree that will actually
|
|
62
|
+
merge rather than one that never existed (joshuafolkken/kit#1837). It is the last edit, so the scoped
|
|
63
|
+
pair and the gate run once over it. A conflict here fires `backlogrun-lanes.md` → "Conflicts are not predicted"
|
|
64
|
+
early. **This is the one place a conflicted merge's procedure is written** (joshuafolkken/kit#2445):
|
|
65
|
+
`main:merge` refuses before merging when uncommitted changes touch a path the default branch also
|
|
66
|
+
changed, or when the index still holds unresolved or staged paths — commit the work first with
|
|
67
|
+
`pnpm josh git -y`, then rerun it, and **never stash around the merge** (a stash reapplied over it
|
|
68
|
+
leaves `UU` in the index). A merge that stops on a conflict is finished the same way: remove the
|
|
69
|
+
markers, then `pnpm josh git -y` stages the resolution and records the merge commit. That commit is
|
|
70
|
+
the sanctioned flow, so it is **Tier A** — a lane child never stops to ask a person for `git add`, and
|
|
71
|
+
the `Stop` hook sends back a reply that does.
|
|
72
|
+
- **A single check answers once per tree** — while implementing, re-run a single check by name
|
|
73
|
+
(`pnpm josh lint:related`, `pnpm josh cspell:dot`, `pnpm josh test:related`, or the project's type
|
|
74
|
+
check) after every edit; a repeat of the same command with the same arguments over a tree nothing has
|
|
75
|
+
touched since buys only a copy of the answer already in hand (joshuafolkken/kit#1383).
|
|
76
|
+
- **The pull request opens between the rounds, so CI runs beside round 2** — `pnpm josh git -y` sits
|
|
77
|
+
between the two review rounds. Round 1 runs on the uncommitted tree and its High/Medium findings are
|
|
78
|
+
fixed before anything is committed; the verification pass over those fixes then runs against the open
|
|
79
|
+
pull request, beside the CI the commit started (joshuafolkken/kit#1261).
|
|
80
|
+
- **The round-2 fix commit is pushed before its gate** — a fix the second round makes in place is
|
|
81
|
+
pushed (`pnpm josh git -y` again, a follow-up commit) before its `pnpm josh gate`, so the gate runs
|
|
82
|
+
inside the CI wait and is joined before `pnpm josh followup` rather than in front of it
|
|
83
|
+
(joshuafolkken/kit#1326). The commit and pre-push hooks and CI's `Checks` job mean pushing first is
|
|
84
|
+
not pushing unverified code.
|
|
85
|
+
- **A clean second round issues the merge in the same turn** — the turn that reads a clean second round
|
|
86
|
+
issues `pnpm josh followup`, after any branch-2 filing and `pnpm josh epic:bundle` and never in a turn
|
|
87
|
+
of its own. Clean has two halves: no confirmed High is standing, and nothing was routed to branch 1 of
|
|
88
|
+
the disposition (joshuafolkken/kit#1333).
|
|
89
|
+
- **The review runs in a subagent, never a main-line skill load** — `/code-review` is spawned through
|
|
90
|
+
the `Agent` tool in its own context, as the agent type step 1 names; a mid-run `Skill` load rewrites
|
|
91
|
+
the whole cached prompt prefix, which is what makes it expensive (joshuafolkken/kit#1855).
|
|
92
|
+
- **The brief names the checkout, and a review that read another one is refused** — `pnpm josh
|
|
93
|
+
review:brief` prints the checkout root, branch and HEAD and a nonce; the review runs `pnpm josh
|
|
94
|
+
review:attest <nonce>` from the tree it read, and `pnpm josh review:attest --check` must answer `ok`
|
|
95
|
+
before the run or `pnpm josh followup` acts on the verdict, or it is discarded (joshuafolkken/kit#1522).
|
|
96
|
+
|
|
97
|
+
This file is the single source of the gate → review → PR → merge chain rule; other documents reference
|
|
98
|
+
it rather than restating it. `prompts/collaboration-workflow/plan-comment.md` keeps Step 3.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Delegation decisions — `SKILL.md` §2b's procedure
|
|
2
|
+
|
|
3
|
+
Read this file when the first delegation decision arises during a run, not at workflow entry.
|
|
4
|
+
|
|
5
|
+
Designing, assessing a split and reviewing are judgement; applying a fix the gate has already named is
|
|
6
|
+
not. The steps whose answer is already decided go to a cheaper execution tier, and the judgement stays
|
|
7
|
+
where it is.
|
|
8
|
+
|
|
9
|
+
**Ask before delegating any step of a run**, and use what it answers:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm josh delegate <step> # → delegate | keep ; the reason on stderr
|
|
13
|
+
pnpm josh delegate --list # the enumeration, and what was rejected and why
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Never decide it yourself. Anything not on the list is `keep`.** A step earns its place by naming
|
|
17
|
+
**how a wrong result is caught** cheaply in the parent tier, not merely by being unlikely to fail.
|
|
18
|
+
`pnpm josh delegate --list` names both delegatable and rejected steps; a rejected step either has no
|
|
19
|
+
verifier or lets a wrong result propagate too far. The command distinguishes `kept deliberately`
|
|
20
|
+
from `kept by default`. `docs/josh-commands.md` → "`josh delegate`" carries the full enumeration.
|
|
21
|
+
|
|
22
|
+
**The mechanism is not the unit.** `pnpm josh delegate` covers a run step, a file-disjoint Step 0
|
|
23
|
+
implementation unit (`pnpm josh fanout`), and `epic-child` — an epic's child and a named issue of a
|
|
24
|
+
`backlogrun` alike. Do not add a second batch-child mechanism. Read `backlogrun-child.md` → "Each child
|
|
25
|
+
runs in a delegated unit" at child dispatch; `backlogrun-steps.md` → "Named issues run first, in order"
|
|
26
|
+
applies to named issues. `docs/josh-commands.md` → "`josh fanout`" carries file-disjoint dispatch.
|
|
27
|
+
|
|
28
|
+
**`followup-filing` delegates the late review-finding filing chain** with the parent's finding text;
|
|
29
|
+
the parent verifies the new Issue using `pnpm josh issue:state <new>`. For `epic-child`, the parent
|
|
30
|
+
likewise verifies `pnpm josh issue:state <N>` after the unit returns. Read `human_review:` too: an open
|
|
31
|
+
`needs-human-review` child is the authorized stop (`SKILL.md` → §2z), not a failed child. The per-entry
|
|
32
|
+
classification lives in `backlogrun-child.md` → "Each child runs in a delegated unit".
|
|
33
|
+
|
|
34
|
+
## The pre-implementation reading — what goes to a unit, and from which file
|
|
35
|
+
|
|
36
|
+
**Delegate reading that explains the Issue's subject; keep reading files this run will edit in the
|
|
37
|
+
main line.** The unit returns conclusions with `file:line` citations, never the file text. It may run
|
|
38
|
+
a temporary probe script and return its output.
|
|
39
|
+
|
|
40
|
+
**The threshold is 3 files, and it is a count, not a forecast.** When the next read reaches it,
|
|
41
|
+
delegate the unread investigation. Brief the unit on what was already read; do not re-read it there.
|
|
42
|
+
**A delegation resets the counter rather than spending it**; `pnpm josh investigation:guard` counts
|
|
43
|
+
unedited files and refuses the threshold read. `pnpm josh delegate --list` prints the threshold.
|
|
44
|
+
`docs/josh-commands.md` → "`josh investigation:guard`" carries the command's counting details.
|
|
45
|
+
|
|
46
|
+
**The main line does not idle while the unit reads:** read files this run will edit, then verify the
|
|
47
|
+
unit's cited lines. Independent investigations launch together; a brief that needs another unit's
|
|
48
|
+
answer waits for that answer.
|
|
49
|
+
|
|
50
|
+
**When the Issue already names the file, function or rule, read that edit target in the main line.**
|
|
51
|
+
It is not `survey`, and it is not `diagnosis`: the unit describes how the subject works;
|
|
52
|
+
the main line decides what that means and what to change.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# `pnpm josh followup` — the post-execution reference
|
|
2
|
+
|
|
3
|
+
The parts of the `followup` procedure a run reaches **after** it has issued `pnpm josh followup`: how
|
|
4
|
+
to read the stage-timing block the command prints, the AI-reviewer comment scan and the config-file
|
|
5
|
+
report it runs, and the release ask that closes the completion summary. `followup.md` carries what a
|
|
6
|
+
run needs **before** it issues the command and points here for the rest, so the read that lands in the
|
|
7
|
+
turn that issues `pnpm josh followup` stays small (joshuafolkken/kit#1905).
|
|
8
|
+
|
|
9
|
+
This file is the single source of the sections below; `followup.md`, `fullrun.md`, `backlogrun.md` and
|
|
10
|
+
`backlogrun.md` point here rather than restating them.
|
|
11
|
+
|
|
12
|
+
## Reading the stage-timing block
|
|
13
|
+
|
|
14
|
+
### It prints how long each of those stages took
|
|
15
|
+
|
|
16
|
+
Since joshuafolkken/kit#1349 the command closes with one row per stage and a total, so "where did
|
|
17
|
+
`followup` spend its time" is read rather than guessed. The shape, with illustrative durations:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
followup stage: closes-and-context 2.1 s
|
|
21
|
+
followup stage: checks-wait 28.4 s
|
|
22
|
+
followup stage: coderabbit-comments 1.3 s
|
|
23
|
+
followup stage: ai-review-comments 2.0 s
|
|
24
|
+
followup stage: telegram 1.1 s
|
|
25
|
+
followup stage: merge 2.6 s
|
|
26
|
+
followup stage: completion-and-epic-close 1.4 s
|
|
27
|
+
followup stages total: 38.9 s
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- **The block is printed on a failed run too**, up to and including the stage that threw, which is
|
|
31
|
+
named `interrupted`. A `followup` that exits non-zero on an AI-review blocker or a red check is the
|
|
32
|
+
invocation whose wait was longest, and one that printed nothing would leave the measurement blind to
|
|
33
|
+
exactly those. **A short block there is the run stopping early, not the printer breaking**: the
|
|
34
|
+
stages after the failure never ran, so they have no duration to report.
|
|
35
|
+
- **The `merge` row appears only on a run that merged**, so a `--no-merge` block is a row shorter.
|
|
36
|
+
- **Two rows say `and` because the requests behind them go out together** (joshuafolkken/kit#1446).
|
|
37
|
+
`closes-and-context` is the former `closes-check` plus `context` — the pull request body, the
|
|
38
|
+
repository name, the pull request URL and the issue title, four reads that need nothing from one
|
|
39
|
+
another; `completion-and-epic-close` is the former `completion-comment` plus `epic-close`. A lap
|
|
40
|
+
records an interval rather than a call, so a batch is one row, and the name is what says which
|
|
41
|
+
stages it holds. **The one dependency inside the batch is kept**: with no issue number on the
|
|
42
|
+
command line the title read waits for the body that names it, and only that read waits.
|
|
43
|
+
**`checks-wait` is untouched**, which is the point — what was overlapped was never a wait.
|
|
44
|
+
- **The total is the sum of the stages, not the command's whole wall clock.** What sits outside it is
|
|
45
|
+
the tail the workflow script runs afterwards — the review-record clears, the hold
|
|
46
|
+
release, the next-issue listing and the version line — so a run-timing reading of the same
|
|
47
|
+
span is longer, and that gap is the tail. It is normally a second or two.
|
|
48
|
+
- **What was measured is on joshuafolkken/kit#1349**, and cutting any of it is deliberately not this
|
|
49
|
+
block's business: the required-check wait and the AI-review scan are the merge gate, and narrowing
|
|
50
|
+
either to make a number smaller is the workaround `CLAUDE.md` prohibits.
|
|
51
|
+
|
|
52
|
+
A `failure` Telegram is sent **by hand, exactly once**, and only when the agent has finally given up
|
|
53
|
+
recovering — never once per retry:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pnpm josh notify --task-type failure --issue-url "<issue-url>" --body "<the reason and what is unresolved>"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## AI reviewer comment scan (automatic in `pnpm josh followup`)
|
|
60
|
+
|
|
61
|
+
`pnpm josh followup` scans top-level PR comments from AI reviewers (Claude Review, CodeRabbit summary comments) **independently of CI status**. This scan runs after CI is green and after the existing CodeRabbit line-comment check. The goal is to ensure substantive findings posted by AI reviewers _after_ CI goes green are not silently shipped.
|
|
62
|
+
|
|
63
|
+
**Temporary (kit#753)**: while CodeRabbit reviews are slow, CodeRabbit is non-blocking end to end — it is excluded from the default required checks (restore via `JOSH_REQUIRED_CHECKS`), `Actionable comments posted: N` is downgraded to an informational log, and unresolved CodeRabbit line comments no longer require an ignore reason. Every skip is printed to the console and appended to the completion Telegram body. Claude Review blockers are unchanged. Revert together with kit#752.
|
|
64
|
+
|
|
65
|
+
- Blocker heuristics (conservative, structural — not NLP):
|
|
66
|
+
- **Claude Review** (`author.login = claude`): body contains `### Issues`, `### Problem`, `#### Logic bug`, or a numbered finding heading like `### 1. ...`
|
|
67
|
+
- **CodeRabbit** (`author.login = coderabbitai` / `coderabbitai[bot]`): body contains `Actionable comments posted: N` with N > 0. Rate-limit notices (`rate limited by coderabbit.ai` / `Rate limit exceeded`) and "No actionable comments" summaries are ignored.
|
|
68
|
+
- If blockers exist and **no** ignore reason is supplied: `pnpm josh followup` sends a `confirmation` Telegram and exits non-zero. Fix the findings (or provide an ignore reason) and re-run.
|
|
69
|
+
- If blockers exist and `--ai-review-ignore-reason "<reason>"` is supplied: the workflow posts an ignore-reason comment to the PR (mirroring the CodeRabbit ignore-reason flow) and proceeds to completion.
|
|
70
|
+
- Acknowledgment-only Claude comments (`All issues resolved ✓`, `Everything else looks good`) do not match the blocker heuristics, so rounds where the AI reviewer explicitly signs off do not trigger a false positive.
|
|
71
|
+
- **A comment listing that could not be read is treated exactly like a standing blocker.** A rate limit, expired auth, a dropped connection — every one of them used to arrive as an empty listing, so the gate passed without having read anything (joshuafolkken/kit#973). `confirmation` Telegram, non-zero exit, re-run once the read succeeds. `--ai-review-ignore-reason` still gets past it, because what it means is unchanged: a person has looked — and the run then carries an audit note saying the scan was bypassed.
|
|
72
|
+
- **The CodeRabbit line-comment listing is the exception**: unreadable there is reported as an audit note rather than blocking, because kit#753 has CodeRabbit not blocking the merge at all. That reader also answers unreadable when the PR number itself would not resolve, which the top-level scan never has to do. Revert with kit#752.
|
|
73
|
+
|
|
74
|
+
## Config file reporting (inside `pnpm josh followup`)
|
|
75
|
+
|
|
76
|
+
**Nothing here asks you to compare anything by eye** (joshuafolkken/kit#1578). `pnpm josh followup` reads the tracked branch diff itself and matches every changed path against everything `josh sync` distributes — the three lists `AI_COPY_FILES`, `AI_COPY_FILE_MAPPINGS`, `AI_COPY_DIRECTORIES`, plus `SYNCED_PATHS`, the destinations `sync` writes directly (`playwright.config.ts`, `eslint.config.js`, the rest).
|
|
77
|
+
|
|
78
|
+
**It stops nothing** (joshuafolkken/kit#1592). What it produces is a report: the claimed paths and the list that claimed each one go into **the completion notification and the completion report on the Issue**, and the run continues to the CI wait and the merge exactly as a run that distributes nothing does. A run passing `--no-merge` is not reported on, because nothing has been distributed yet.
|
|
79
|
+
|
|
80
|
+
**It was a confirmation stop until joshuafolkken/kit#1592, and measurement is what removed it rather than preference.** In kit the condition is nearly always true, because kit is the distribution source: every change to `CLAUDE.md`, to `prompts/`, to `.claude/skills/` or to the distributed part of `docs/` is by definition a change to a distributed path. Measured on `epicrun #1413`, **two of three children stopped here** — and in both, the distributed file was the one that child's own acceptance criteria had ordered changed. The gate was not catching an unintended edit; it was stopping the work, and ending unattended execution until a person retyped one command.
|
|
81
|
+
|
|
82
|
+
**There is deliberately no branch on which repository this is.** Stopping in a consumer project — where editing a distributed file really is the mistake `CLAUDE.md` → "Route distributed-doc / config changes upstream to kit" names, since the next `josh sync` overwrites it silently — while staying quiet in kit was weighed and rejected on joshuafolkken/kit#1592: it needs a distribution-source test this package does not have, no case is recorded of the gate having saved a consumer's work, and the report below reaches a consumer's reader just as well.
|
|
83
|
+
|
|
84
|
+
**The matching itself is unchanged, and so is the reason it is mechanical.** The instruction the mechanical read replaced was skipped in two runs out of three on the day it was measured, and one of those two could not have succeeded by eye at all: `AI_COPY_DIRECTORIES` holds directories, so a distributed path such as `.claude/skills/workflow-commands/backlogrun.md` appears in no list textually.
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pnpm josh sync:scope # managed | clean, naming which list claimed each path; alias: josh sys
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- **There is no flag to pass and nothing to approve.** `--managed-config-ignore-reason` is gone with the stop it existed to get past.
|
|
91
|
+
- This report is produced independently of AI reviewer comment scanning, which still stops the run on a standing blocker
|
|
92
|
+
|
|
93
|
+
## When `pnpm josh release` runs
|
|
94
|
+
|
|
95
|
+
**The release point is a position plus a command's answer, never a judgement** (joshuafolkken/kit#1582). joshuafolkken/kit#1169 took the version off the branch and put it behind one command a person types; nothing said *when* to type it, and because nothing fails when nobody does — CI green, every pull request merged, every Issue closed — 53 merges reached main unreleased and no consumer of this package saw one of them.
|
|
96
|
+
|
|
97
|
+
**The position: once per invocation, after the last merge.** Ask when `pnpm josh followup` has merged the last pull request *this invocation* authorized — a lone `fullrun`'s only one, a `backlogrun`'s **last** child, never once per child. In a lane the parent asks it, in the primary checkout, after the last lane is closed. Asked per child it would cut a release in the middle of a batch whose remaining children are still moving main.
|
|
98
|
+
|
|
99
|
+
**The answer: `pnpm josh release:scope`.**
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
pnpm josh release:scope # → required | skip | unknown ; alias: josh res
|
|
103
|
+
pnpm josh release:scope --json # the same answer as one JSON object
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
| It answers | What it means | What the run does |
|
|
107
|
+
| ---------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------- |
|
|
108
|
+
| `required` | main has taken at least one merge since the version last changed | Close the completion report with the release request, naming `pnpm josh release` |
|
|
109
|
+
| `skip` | the count is zero — nothing is waiting to ship | Say so in one line and finish |
|
|
110
|
+
| `unknown` | the count could not be read | **Report it as `unknown`** — it is never read as `skip` |
|
|
111
|
+
|
|
112
|
+
**The threshold is one, and that is deliberate.** joshuafolkken/kit#1582's own complaint is that accumulating makes a single version larger and its contents harder to trace afterwards, so a release per invocation is the cadence rather than a compromise — and it is the cadence that already held while every child bumped, before joshuafolkken/kit#1486 removed that. What keeps it from firing per child is the position above, not a larger number.
|
|
113
|
+
|
|
114
|
+
**The run never types `pnpm josh release` itself.** That command opens a pull request of its own, merges it, and starts the tag → publish → `production` chain: outward-facing and effectively irreversible, so it is Tier C (`CLAUDE.md` → "Decision autonomy"). Typing `fullrun` authorizes merging *this Issue's* pull request and nothing past it. On `required` the run reports the request as its closing line and stops there; a person types the command in the primary checkout, on the default branch, with a clean tree.
|
|
115
|
+
|
|
116
|
+
**`pnpm josh release --dry-run` was checked first and does not answer this.** It refuses off the default branch and on a dirty working tree, and it counts against `HEAD` rather than `origin/<default>` — and every position above is a feature branch or a lane, which is exactly where it throws. So `release:scope` adds **no counting of its own**: it reads `git_followup_pending.read_pending`, the same fetch-then-count `pnpm josh followup` already uses for the Telegram line, and the two therefore cannot disagree.
|
|
117
|
+
|
|
118
|
+
**This section is the single source.** `fullrun.md`, `backlogrun.md` and `backlogrun.md` point here rather than restating it, and `docs/josh-commands.md` → "`josh release:scope`" documents the command itself.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Finishing a run — `pnpm josh followup`
|
|
2
|
+
|
|
3
|
+
Everything between a green CI and a merged PR: what `followup` scans for, the gate that stops a run,
|
|
4
|
+
how auto-merge is authorized, and the Telegram notifications. `fullrun` and `backlogrun` both end here;
|
|
5
|
+
`halfrun` never reaches this file, because it stops before the commit.
|
|
6
|
+
|
|
7
|
+
This file is the single source of the rule.
|
|
8
|
+
|
|
9
|
+
## Run `pnpm josh followup`
|
|
10
|
+
|
|
11
|
+
Run it in the foreground after `pnpm josh git` and after every required review disposition:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pnpm josh followup "<title> #<N>" --notify-message-file <report-file>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The report uses the session language: plain `Cause:`, `Fix:` and `Result:` lines, then `Details:`
|
|
18
|
+
bullets. Use the file option whenever it contains a command or path.
|
|
19
|
+
|
|
20
|
+
It waits for required CI, checks CodeRabbit and top-level AI review comments, sends the completion
|
|
21
|
+
Telegram, merges by default, posts the Issue report, closes completed epics, removes `in-progress`,
|
|
22
|
+
and releases the hold. Only `--no-merge` stops the merge; `--merge` is a deprecated no-op. Keep the
|
|
23
|
+
default Issue target. Ignore a finding only after verifying it is inapplicable; rate-limit text is not
|
|
24
|
+
a finding.
|
|
25
|
+
|
|
26
|
+
A pre-merge failure stops the run; an unverifiable AI finding or CI failure needing input receives a
|
|
27
|
+
`confirmation` Telegram. Post-merge cleanup failures are named and do not undo the merge; run the
|
|
28
|
+
named recovery without rerunning it. Because notification precedes merge, the printed result is
|
|
29
|
+
authoritative.
|
|
30
|
+
|
|
31
|
+
After success, run `pnpm josh ms`; in a lane its refusal is expected and the parent uses
|
|
32
|
+
`pnpm josh lane:close <N>`. Never delete the branch unless requested. Read
|
|
33
|
+
`followup-reference.md` after execution for timing output, reviewer-scan details, config claims and the
|
|
34
|
+
release ask.
|
|
35
|
+
|
|
36
|
+
## Command stages and options — reference
|
|
37
|
+
|
|
38
|
+
`pnpm josh followup` is a **separate script run after `pnpm josh git`**, not a stage inside it. The
|
|
39
|
+
commit and the pull request come first; this is everything after them.
|
|
40
|
+
|
|
41
|
+
What one invocation does, in order:
|
|
42
|
+
|
|
43
|
+
- **Waits for the CI status checks — the required ones only.** A non-required check (CodeQL, Workers
|
|
44
|
+
Builds) is never waited on. A non-required check that failed is still reported to the user
|
|
45
|
+
(`prompts/collaboration-workflow/operating-rules.md` → "CI チェック失敗時の対応").
|
|
46
|
+
- **Checks unresolved CodeRabbit line comments**, posting the ignore-reason comment when one is
|
|
47
|
+
supplied.
|
|
48
|
+
- **Scans the AI reviewers' top-level comments** — run independently of CI status.
|
|
49
|
+
- **Sends the `completion` Telegram (✅) itself**, once every gate above has passed. A CI failure or an
|
|
50
|
+
exception is re-thrown as-is with **no** Telegram sent — so a silent run is a failed run. **It fires
|
|
51
|
+
before the merge, not after it**: a merge rejected by branch protection or a conflict leaves the ✅
|
|
52
|
+
already sent, so never read a received completion Telegram as proof the pull request merged — read
|
|
53
|
+
what the command printed.
|
|
54
|
+
- **Merges** — unless `--no-merge` was passed. **Merging is the default**, and `--merge` is a
|
|
55
|
+
deprecated no-op. `--no-merge` is the only thing that stops it.
|
|
56
|
+
- **Posts the completion report to the Issue**, after the merge: it edits the Issue body when the body
|
|
57
|
+
is empty, and adds a comment when it already has content. The report never goes to the pull request.
|
|
58
|
+
A run that stopped at the merge therefore has no Issue comment, and the missing comment is what a
|
|
59
|
+
failed merge looks like from GitHub.
|
|
60
|
+
- **Closes the epics the Issue completes**, on a merged run only.
|
|
61
|
+
- **Takes the `in-progress` label back off the Issue**, on a merged run only. A run that merged nothing
|
|
62
|
+
keeps it. The removal reads the Issue's labels and sends back the spelling GitHub stored, so an
|
|
63
|
+
`In-Progress` repository is not missed, and an Issue that never carried the label is never written to.
|
|
64
|
+
- **Nothing after the merge can end the run.** Once the pull request has merged, every remaining step —
|
|
65
|
+
the Issue comment, the epic close, the review records and the working-tree hold
|
|
66
|
+
release — runs on its own: one that fails is reported by name, with the command that finishes it by
|
|
67
|
+
hand where one exists (`pnpm josh run:release --force` for the hold; `gh pr comment` or `gh api …
|
|
68
|
+
/comments` for the completion report). Before the merge nothing changes: a failure there still ends
|
|
69
|
+
the run, because re-running the command is the whole recovery. **A reported cleanup failure is not a
|
|
70
|
+
merge failure**: read the ⚠ lines, run what they name, and do not re-run the merge.
|
|
71
|
+
- **Recovers the issue number from the pull request body** when the invocation named none: the `closes
|
|
72
|
+
#N` keyword supplies it.
|
|
73
|
+
### The post-execution reference is in `followup-reference.md`
|
|
74
|
+
|
|
75
|
+
Everything the run reaches **after** it issues `pnpm josh followup` is in `followup-reference.md`, so
|
|
76
|
+
the read that lands in the turn that issues the command stays small: the per-stage timing block the
|
|
77
|
+
command prints and how to read it, the `failure` Telegram sent by hand when recovery is given up, the
|
|
78
|
+
AI-reviewer comment scan, the config-file report, and the release ask that closes the completion
|
|
79
|
+
summary. What stays below is what a run needs **before** it issues the command.
|
|
80
|
+
|
|
81
|
+
### The options
|
|
82
|
+
|
|
83
|
+
| Option | What it is |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| `--no-merge` | **The only flag that stops the merge.** Merging is the default; `--merge` is a deprecated no-op |
|
|
86
|
+
| `--notify-target` | `pr` \| `issue` \| `both`, defaulting to `issue`. **Keep the default** — the workflow puts no completion report on the pull request |
|
|
87
|
+
| `--notify-message` | The completion comment body, in the `JOSH_SESSION_LANG` language (`ja` when unset), in the two-layer report shape: three lines of `Cause: / Fix: / Result:` first, one plain sentence each with no jargon or file names, then the changes as bullets under `Details:`. **Not a bare list of `Added … / Changed …`** |
|
|
88
|
+
| `--notify-message-file` | The same body, read from a file (`-` reads stdin). **Use it whenever the report names a command or a path** — inside shell double quotes a backtick or a `$` is evaluated before this command starts (`prompts/collaboration-workflow/shell-body.md`) |
|
|
89
|
+
| `--coderabbit-ignore-reason` | The reason comment for leaving CodeRabbit line comments unresolved |
|
|
90
|
+
| `--ai-review-ignore-reason` | The reason comment for leaving an AI-review blocker (Claude Review / a CodeRabbit summary) unresolved |
|
|
91
|
+
| `--issue-number` | The Issue number — or give it positionally as `"<title> #<number>"` |
|
|
92
|
+
|
|
93
|
+
Example 1 — the basic form (`fullrun` includes the merge):
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
pnpm josh followup "<issue-title> #<issue-number>" \
|
|
97
|
+
--notify-message "Implemented <title>
|
|
98
|
+
Cause: <why this was needed, in one plain sentence>
|
|
99
|
+
Fix: <what was changed, in one plain sentence>
|
|
100
|
+
Result: <what is different for the user now>
|
|
101
|
+
|
|
102
|
+
Details:
|
|
103
|
+
- Added ...
|
|
104
|
+
- Changed ..."
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Example 2 — with a CodeRabbit ignore reason:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pnpm josh followup "<issue-title> #<issue-number>" \
|
|
111
|
+
--notify-message "Implemented <title>
|
|
112
|
+
Cause: ...
|
|
113
|
+
Fix: ...
|
|
114
|
+
Result: ...
|
|
115
|
+
|
|
116
|
+
Details:
|
|
117
|
+
- Added ...
|
|
118
|
+
- Fixed ..." \
|
|
119
|
+
--coderabbit-ignore-reason "<why the finding does not apply>"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Example 3 — with an AI-review (Claude Review) blocker ignore reason:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
pnpm josh followup "<issue-title> #<issue-number>" \
|
|
126
|
+
--notify-message "Implemented <title>
|
|
127
|
+
Cause: ...
|
|
128
|
+
Fix: ...
|
|
129
|
+
Result: ...
|
|
130
|
+
|
|
131
|
+
Details:
|
|
132
|
+
- Added ...
|
|
133
|
+
- Fixed ..." \
|
|
134
|
+
--ai-review-ignore-reason "<tracked in issue #123>"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Example 4 — no merge (after a `kickoff`, or when the merge is done by hand). **`--no-merge` is not
|
|
138
|
+
decoration**: leave it out and this command merges.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
pnpm josh followup "<issue-title> #<issue-number>" \
|
|
142
|
+
--no-merge \
|
|
143
|
+
--notify-message "Implemented <title>
|
|
144
|
+
Cause: ...
|
|
145
|
+
Fix: ...
|
|
146
|
+
Result: ...
|
|
147
|
+
|
|
148
|
+
Details:
|
|
149
|
+
- Added ..."
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## `auto-merge` — Default `fullrun` behavior
|
|
153
|
+
|
|
154
|
+
Every `fullrun` / `fullrun new` invocation uses `pnpm josh followup`, which handles the full sequence
|
|
155
|
+
internally: wait for CI → verify AI review findings → send completion notification → merge. The user
|
|
156
|
+
does **not** need to add a keyword. Invoking `fullrun` is itself the explicit authorization to merge.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
pnpm josh followup "<title> #<N>" --notify-message "..."
|
|
160
|
+
pnpm josh ms
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
- **Always run `pnpm josh ms` after a successful merge.** `pnpm josh followup` leaves the working tree
|
|
164
|
+
on the merged feature branch; `pnpm josh ms` (checkout default branch + `git pull`) returns it to the
|
|
165
|
+
default branch with the merge commit pulled. Skip this step only if the merge itself failed.
|
|
166
|
+
- **In a lane, the terminal step is `pnpm josh lane:close <N>` instead, and `josh ms` refuses.** A lane
|
|
167
|
+
is a linked work tree, and git allows one branch in one work tree at a time. `josh ms` exits non-zero
|
|
168
|
+
there and says so, which is the expected answer. The default-branch refresh is the parent's, in the
|
|
169
|
+
primary checkout.
|
|
170
|
+
- **AI review findings are checked automatically.** `pnpm josh followup` scans for CodeRabbit / Claude
|
|
171
|
+
Review findings before merging. If blockers are found, it sends a `confirmation` Telegram and exits
|
|
172
|
+
non-zero — fix the findings and re-run. **Green CI is not authorization to merge while AI review
|
|
173
|
+
findings are open.** (SonarCloud findings are not scanned by `followup`; the `sonar-qube.yml` CI
|
|
174
|
+
workflow runs the scan with `sonar.qualitygate.wait=true`, so a red Quality Gate fails the required
|
|
175
|
+
`SonarQube` check, which `followup` waits on.)
|
|
176
|
+
- **CodeRabbit rate-limit is not a finding.** If the only CodeRabbit comment is a rate-limit warning
|
|
177
|
+
(`rate limited by coderabbit.ai` or `Rate limit exceeded`) and there is no substantive review, treat
|
|
178
|
+
it as "no findings" and proceed. Same if CodeRabbit produced no comment on the latest commit.
|
|
179
|
+
- **Verify CodeRabbit findings before bypassing.** Do not pass `--coderabbit-ignore-reason` reflexively
|
|
180
|
+
— first verify. Example: CodeRabbit may flag a GitHub Actions SHA pin like `pnpm/action-setup@<sha> #
|
|
181
|
+
v6.0.8` as "not matching the tag" because it queried the annotated-tag-object SHA, not the commit
|
|
182
|
+
SHA. Confirm with `gh api repos/<owner>/<repo>/commits/<tag> --jq '.sha'` — if that matches the
|
|
183
|
+
pinned SHA, the finding is a false positive. Only then bypass, citing the verification command.
|
|
184
|
+
- Merge goes through REST internally — the pull request's own merge endpoint with an explicit
|
|
185
|
+
`merge_method` (`gh pr merge` goes through GraphQL, which a cloud session is refused). **That path is
|
|
186
|
+
`followup`'s, not yours**: `.claude/settings.json` refuses `gh pr merge` and the `gh api` / `gh api
|
|
187
|
+
graphql` spellings of the same merge; `followup` calls gh from inside a node script. The prohibition
|
|
188
|
+
in `CLAUDE.md` → "Git Rules" is the rule.
|
|
189
|
+
- Use the merge strategy the repo allows (`--merge` / `--squash` / `--rebase`); default to `--merge`.
|
|
190
|
+
Inspect with `gh api repos/<owner>/<repo> --jq '{allow_merge_commit, allow_squash_merge,
|
|
191
|
+
allow_rebase_merge}'` when unsure.
|
|
192
|
+
- Do **not** pass `--delete-branch` unless the user asks.
|
|
193
|
+
- If the merge fails (branch protections, conflicts), report the reason and stop — do not retry with
|
|
194
|
+
different flags or bypass protections.
|
|
195
|
+
- **If the user wants to skip the merge step**, use `kickoff` or say "do not merge" in the same turn,
|
|
196
|
+
and pass `--no-merge`. Outside a `fullrun` invocation, never run `gh pr merge` on your own.
|
|
197
|
+
|
|
198
|
+
## Completion notifications: always via `pnpm josh followup`
|
|
199
|
+
|
|
200
|
+
Never send `completion` Telegram notifications manually with `pnpm josh notify --task-type completion
|
|
201
|
+
...`. Always use `pnpm josh followup` — it fetches the PR URL through REST
|
|
202
|
+
(`repos/{owner}/{repo}/pulls/{N}`) and always includes it, whereas the manual CLI does not
|
|
203
|
+
auto-populate `--pr-url`.
|
|
204
|
+
|
|
205
|
+
**Always run `pnpm josh followup` in the foreground** (no `&`, no shell backgrounding). **It is the
|
|
206
|
+
deliberate exception to `background-commands.md`**: nearly every step after it reads its result, so
|
|
207
|
+
detaching it would buy an empty turn. It waits for CI — 32 minutes by default, about 34 worst case —
|
|
208
|
+
which can outlast one tool call, so give the call the largest timeout it accepts (in Claude Code,
|
|
209
|
+
`timeout: 600000`). Where the harness detaches an over-running command and reports when it finishes,
|
|
210
|
+
wait for that report instead of re-running. Where it kills the call at the cap, set `JOSH_CI_TIMEOUT_SECONDS`
|
|
211
|
+
to a budget that fits inside the cap and re-run once CI has settled. Shell backgrounding never works.
|
|
212
|
+
|
|
213
|
+
- Applies to the initial PR and every follow-up commit — re-run `pnpm josh followup "<title> #<N>"
|
|
214
|
+
--notify-message "..."` each time you want to notify completion (notification is sent right before
|
|
215
|
+
the merge).
|
|
216
|
+
- `pnpm josh notify` remains the right tool for `planning`, `confirmation`, `kickoff_retry` and
|
|
217
|
+
`failure` notifications.
|
|
218
|
+
- **The count of unreleased merges is surfaced at completion — not a version.** When `pnpm josh
|
|
219
|
+
followup` finishes it prints `🚚 unreleased merges on main: <n>` and puts the same count in the
|
|
220
|
+
`completion` Telegram body. **Do not report a shipped version**: a child no longer bumps, so
|
|
221
|
+
`package.json` names the *previous* release, and what ships is decided later by `pnpm josh release`.
|
|
222
|
+
What the run *does* about it is `followup-reference.md` → "When `pnpm josh release` runs".
|