@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,340 @@
|
|
|
1
|
+
# The pre-gate cut — a lane child ends its turn before the gate
|
|
2
|
+
|
|
3
|
+
A lane child is a detached `fullrun #<N>` process, and the thinking it accumulates while implementing
|
|
4
|
+
rides on every later API call in the same session (measured at **176K of 204K output tokens** on
|
|
5
|
+
joshuafolkken/kit#1837). The **pre-gate cut** drops that accumulation: the child ends its process the
|
|
6
|
+
moment implementation is done, and a **fresh** process resumes the same lane from the gate onward.
|
|
7
|
+
|
|
8
|
+
This file is the single source of the boundary. `run:cut` takes it, and `run:cut --resume` is the
|
|
9
|
+
check a fresh process makes at its own entry. The rule is reached only **during** a lane child's run,
|
|
10
|
+
after the workflow skill has been read, so it is not an entry read — `fullrun.md`, `chain-rule.md` and
|
|
11
|
+
`backlogrun.md` name it with a plain mention and route here. **A second boundary is added below** — the
|
|
12
|
+
implementation-phase cut (joshuafolkken/kit#1933), at a context threshold _during_ implementation.
|
|
13
|
+
Everything through "What is carried" describes the pre-gate cut; the later section states only what
|
|
14
|
+
differs.
|
|
15
|
+
|
|
16
|
+
## Where the boundary is
|
|
17
|
+
|
|
18
|
+
**After implementation and the refactor, before `pnpm josh gate`** — the same boundary
|
|
19
|
+
joshuafolkken/kit#1837 puts the `origin/main` merge at: implementation complete, nothing committed,
|
|
20
|
+
the gate not started. Everything before it produced the thinking to be dropped; everything after it
|
|
21
|
+
(gate → review → commit → push → merge) is verification the fresh process runs on the tree.
|
|
22
|
+
|
|
23
|
+
**A lane child first hands it to a detached supervisor** (`chain-rule.md` step 0); the cut is the fallback.
|
|
24
|
+
|
|
25
|
+
## It applies to a dispatched lane child, and to nothing else
|
|
26
|
+
|
|
27
|
+
The cut is for a **detached** `fullrun` a lane dispatched. A person's interactive `fullrun` must not
|
|
28
|
+
relaunch itself, so a dispatched child is told apart **mechanically, by a mark the dispatch sets** —
|
|
29
|
+
never by the model reading the shape of its own prompt (joshuafolkken/kit#1904).
|
|
30
|
+
|
|
31
|
+
### The dispatch mark
|
|
32
|
+
|
|
33
|
+
`lane:dispatch` starts each child generation with the environment variable **`JOSH_LANE_CHILD`** set
|
|
34
|
+
to the lane's issue number. `scripts/lane/lane-child-marker.ts` is its one definition.
|
|
35
|
+
|
|
36
|
+
- **Meaning**: "this session was launched for issue `<N>`, not typed by a person."
|
|
37
|
+
- **Lifetime**: the child process — set at launch, read at the gate, never written by the run itself (a
|
|
38
|
+
mark a run could set for itself would be no mark at all).
|
|
39
|
+
- **Trust**: only where its value equals the lane's own issue. A mark that leaked in from a parent
|
|
40
|
+
session — naming another issue, or none — is read as a person, so a leak cannot make the guard fire
|
|
41
|
+
on a checkout it does not belong to.
|
|
42
|
+
|
|
43
|
+
The name, meaning and lifetime are documented here and nowhere else.
|
|
44
|
+
|
|
45
|
+
`run:cut` decides the same fact its own way: it looks for an **open lane** for the issue, answering a
|
|
46
|
+
checkout with none `not-a-lane`. So the command is safe to issue unconditionally — a no-op in the main
|
|
47
|
+
checkout, a cut in a lane.
|
|
48
|
+
|
|
49
|
+
## Taking the cut
|
|
50
|
+
|
|
51
|
+
**The order is fixed in the chain, not left to the refusal to enforce** (joshuafolkken/kit#2177).
|
|
52
|
+
`chain-rule.md` step 1 issues `pnpm josh run:cut <N>` after `pnpm josh main:merge`, before the scoped
|
|
53
|
+
pair and the gate, so the default path takes the cut before anything reads the tree — removing the
|
|
54
|
+
wasted round trip joshuafolkken/kit#2160 measured (an uncut gate refused, its batched `review:brief`
|
|
55
|
+
cancelled, then cut and resume). **The command is still issued unconditionally**; `run:cut` itself
|
|
56
|
+
decides whether the cut is warranted (joshuafolkken/kit#2312), so a short lane with nothing to drop is
|
|
57
|
+
answered `under-threshold` and walks on to the gate rather than relaunching.
|
|
58
|
+
|
|
59
|
+
At the pre-gate boundary, issue:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pnpm josh run:cut <N> # alias: josh rct
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- `cut` (0) — record written and handed to the lane's launch owner (OpenAI supervisor starts the
|
|
66
|
+
successor after this process exits; Anthropic relaunches directly). **End the turn immediately** —
|
|
67
|
+
the fresh process owns the run.
|
|
68
|
+
- `under-threshold` (0) — the recent-window per-request cost is under the shared `CONTEXT_CUT_THRESHOLD`
|
|
69
|
+
(joshuafolkken/kit#2312), so the accumulation a cut would drop is not worth a resume's cost. Nothing
|
|
70
|
+
was cut; **continue to the gate.**
|
|
71
|
+
- `not-a-lane` (0) — no open lane for this issue, so not a dispatched child. **Continue to the gate.**
|
|
72
|
+
- `unready` (1) — the tree is clean or on the default branch, nothing to carry. Continue to the gate.
|
|
73
|
+
- `busy` (1) — a cut is already in flight for this tree (the double-cut guard). Do not relaunch.
|
|
74
|
+
- `failed` (1) — no live OpenAI supervisor, or the Anthropic relaunch could not start. Continue.
|
|
75
|
+
- `unknown` (1) — the git directory could not be read. Continue to the gate.
|
|
76
|
+
|
|
77
|
+
**`cut` is the only verdict that ends the turn.** Every other one — `under-threshold` included — leaves
|
|
78
|
+
the current process to carry the run on itself.
|
|
79
|
+
|
|
80
|
+
### The gate refuses until the cut has been taken (joshuafolkken/kit#1864)
|
|
81
|
+
|
|
82
|
+
**This step was carried as prose and fired exactly never.** joshuafolkken/kit#1850 measured six lane
|
|
83
|
+
children and the cut was taken **0 times**: four issued the *entry* check
|
|
84
|
+
`pnpm josh run:cut --resume <N>` and were answered `fresh`, not one issued the call above. A step a run
|
|
85
|
+
is free to skip is the step skipped under time pressure — so `pnpm josh rule:guard` **refuses
|
|
86
|
+
`pnpm josh gate`** while this checkout is a lane and no cut record is carried, handing back the command
|
|
87
|
+
above. With the ordered step above (joshuafolkken/kit#2177) the refusal is insurance, not the primary
|
|
88
|
+
trigger.
|
|
89
|
+
|
|
90
|
+
- **It fires for a marked child and nowhere else** (joshuafolkken/kit#1904). The `PreToolUse` hook
|
|
91
|
+
reads two facts: the working directory is a lane — `<lane root>/<issue number>` — **and**
|
|
92
|
+
`JOSH_LANE_CHILD` names that same issue. An interactive `fullrun` carries no mark and runs its gate
|
|
93
|
+
untouched. `run:cut` draws its own line its own way — an open-lane lookup — which is why the guard and
|
|
94
|
+
the command need not agree byte for byte; the mark makes the guard's half mechanical.
|
|
95
|
+
- **It fires only when the recent-window context warrants a cut** (joshuafolkken/kit#2312). The guard
|
|
96
|
+
reads the same `cost_cli.session_verdict` `run:cut` reads, so an `under`-threshold lane is let through
|
|
97
|
+
to the gate rather than refused — the guard and the command never disagree about whether a cut was
|
|
98
|
+
due. The context read is lazy, after the command and lane checks, so an ordinary run pays nothing for
|
|
99
|
+
it.
|
|
100
|
+
- **It is silent once the cut is carried**, so the resumed process goes straight to the gate.
|
|
101
|
+
- **It fires once per run.** Five of the six verdicts leave this process holding the run, each needing
|
|
102
|
+
the reissued gate call to pass — a refusal that repeated would wedge exactly the runs that obeyed.
|
|
103
|
+
- **`--resume`, `--end` and `--json` do not count as taking the cut**, because they ask about one
|
|
104
|
+
rather than take it — counting them would have credited four of the six measured children.
|
|
105
|
+
|
|
106
|
+
The row, its trigger and the enumeration it joins are
|
|
107
|
+
`prompts/collaboration-workflow/rule-delivery.md`; `scripts/rules/pre-gate-cut.test.ts` pins it.
|
|
108
|
+
|
|
109
|
+
## Resuming — the fresh process's entry check
|
|
110
|
+
|
|
111
|
+
A fresh `fullrun #<N>` runs this **at its entry, before `run:hold` and the session-boundary check**,
|
|
112
|
+
because whether it is fresh or resumed decides everything that follows:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pnpm josh run:cut --resume <N>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- `fresh` (0) — no cut record, an ordinary run. Proceed with the normal entry: claim the hold, ask the
|
|
119
|
+
session boundary, read the issue, implement.
|
|
120
|
+
- `resume` (0) — a declared pre-gate cut whose tree matches was verified and taken over. **Skip the
|
|
121
|
+
title, the plan, the fresh hold claim and the implementation**; re-read the issue body and comments
|
|
122
|
+
for the plan and the recorded decisions, then go straight to `pnpm josh gate`.
|
|
123
|
+
- `resume-impl` (0) — like `resume`, but the cut was taken **during** implementation
|
|
124
|
+
(joshuafolkken/kit#1933). Skip the title, the plan, the fresh hold claim and the split assessment,
|
|
125
|
+
re-read the plan, then **continue implementation** — do **not** go straight to the gate.
|
|
126
|
+
- `handed-off` (0) — a successor has already adopted this cut, `is_handed_off` is spent
|
|
127
|
+
(joshuafolkken/kit#1935). This process was woken **after** its own cut. **End the turn quietly and do
|
|
128
|
+
nothing**: a benign stop, no Telegram owed.
|
|
129
|
+
- `stale` (1) — the record does not match the tree (wrong branch, a clean tree, an expired record, or
|
|
130
|
+
an unknown hand-off state). **A resume failure**: send a `confirmation` Telegram and stop; never gate
|
|
131
|
+
the wrong tree.
|
|
132
|
+
- `busy` (1) — another process already owns the resume. Send a `confirmation` Telegram and stop.
|
|
133
|
+
|
|
134
|
+
**A resume is never reported as a success it did not earn.** `stale` and `busy` stop the run rather
|
|
135
|
+
than gating, so a cut that lost its work, or one two processes reached at once, is caught.
|
|
136
|
+
|
|
137
|
+
### The stage is passed to the resumed child, not reconstructed by it
|
|
138
|
+
|
|
139
|
+
(joshuafolkken/kit#1904) A resumed child arrives with `JOSH_LANE_CHILD` still set and `run:cut
|
|
140
|
+
--resume` reads the record the cut left, so it learns *where to resume from* at its entry. **Skip the
|
|
141
|
+
entry it has already done**: do not re-read the workflow skill, repeat the split assessment or
|
|
142
|
+
re-normalize the title; the plan and decisions are read back from the issue. This removes the
|
|
143
|
+
reconstruction a stopped child redid on every resume (2.6 minutes / ~150K tokens, joshuafolkken/kit#1876).
|
|
144
|
+
|
|
145
|
+
## What is carried, and what is not
|
|
146
|
+
|
|
147
|
+
- **The working tree is not in the record, because it never left the disk.** The record carries only
|
|
148
|
+
what a fresh process cannot recover — the issue, the branch, the invocation, and that a **declared
|
|
149
|
+
cut** put it here. **The conversation is not carried** (joshuafolkken/kit#1567 found compaction does
|
|
150
|
+
not reduce billing); the fresh process reads the plan and auto-decisions back off GitHub.
|
|
151
|
+
- **The hold is kept, not released** — the uncommitted work is what a second run would trample, so the
|
|
152
|
+
resumed process adopts the `run:hold` record and `pnpm josh followup` releases it at the merge.
|
|
153
|
+
- **The dispatch mark is re-applied, not inherited** (joshuafolkken/kit#1904): the relaunch strips the
|
|
154
|
+
parent's environment and sets `JOSH_LANE_CHILD` afresh from the lane's issue.
|
|
155
|
+
|
|
156
|
+
## Verification, uniqueness and double-launch
|
|
157
|
+
|
|
158
|
+
- **The resume verifies the tree against the record**: the branch matches, the tree is dirty, the
|
|
159
|
+
issue matches, and the tree is still under the cutting run's hold. Any mismatch is `stale`.
|
|
160
|
+
- **No owner is recorded on the cut.** OpenAI keeps a separate per-worktree supervisor owner and
|
|
161
|
+
generation state; the cut is the stage hand-off alone.
|
|
162
|
+
- **The cut is exclusive** — `run:cut` writes the record with an exclusive create, so a second cut on
|
|
163
|
+
the same tree is refused `busy`.
|
|
164
|
+
- **The resume is unique.** Taking the hand-off over spends it — a second `run:cut --resume` reads a
|
|
165
|
+
spent record and is answered `handed-off` (joshuafolkken/kit#1935), and the take-over is itself an
|
|
166
|
+
exclusive create, so two resumes racing cannot both win. One lane crosses the pre-gate boundary
|
|
167
|
+
exactly once.
|
|
168
|
+
|
|
169
|
+
## The implementation-phase cut — a lane child cuts before the gate too
|
|
170
|
+
|
|
171
|
+
**The pre-gate cut drops the thinking accumulated _before_ the gate; it does nothing about the thinking
|
|
172
|
+
accumulated _during_ implementation** (joshuafolkken/kit#1933). A lane child re-reads its whole
|
|
173
|
+
conversation on every request, so a long implementation is billed like a long `backlogrun` parent (which
|
|
174
|
+
on 2026-09-13 measured **208k–386k** median context per request). The **implementation-phase cut** caps
|
|
175
|
+
that growth — the child ends mid-implementation and a fresh one resumes the lane **back into
|
|
176
|
+
implementation**.
|
|
177
|
+
|
|
178
|
+
### The measurement is the parent hand-off's, never a second one
|
|
179
|
+
|
|
180
|
+
The guard below refuses on the same measurement the parent uses between children —
|
|
181
|
+
`cost_verdict.per_request_cost`, read through `cost_cli.session_verdict` (the read-only form of
|
|
182
|
+
`pnpm josh cost --cut`, joshuafolkken/kit#2312), single-sourced at `backlogrun-progress.md` → "The
|
|
183
|
+
hand-off". The parent's seam and the child's `run_cut.IMPLEMENTATION_CONTEXT_THRESHOLD` share the
|
|
184
|
+
**135_000** `CONTEXT_CUT_THRESHOLD` (aliased so the tests cannot drift). No separate measurement is
|
|
185
|
+
built for the lane child.
|
|
186
|
+
|
|
187
|
+
### It is a guard, fired at the edit that crosses the threshold (joshuafolkken/kit#2310)
|
|
188
|
+
|
|
189
|
+
**This step was carried as prose and fired exactly never** — the fate the pre-gate cut met before
|
|
190
|
+
joshuafolkken/kit#1864. joshuafolkken/kit#1933 reasoned it *could not* be a guard, because the
|
|
191
|
+
per-request cost was read **asynchronously**; but `cost_cli.session_verdict` is synchronous and is the
|
|
192
|
+
exact verdict `pnpm josh cost --cut` prints. joshuafolkken/kit#2310 measured the child-side check across
|
|
193
|
+
five lanes: the verdict was read once each at session entry, before the context grew, so the cut fired
|
|
194
|
+
**0 times** while 33.9% of their requests ran past 200,000 tokens.
|
|
195
|
+
|
|
196
|
+
So `pnpm josh rule:guard` **refuses an `Edit` / `Write`** while this checkout is a dispatched lane child
|
|
197
|
+
whose recent-context cost is over threshold, handing back `pnpm josh run:cut --impl <N> --handoff <path>` — a
|
|
198
|
+
`PreToolUse` refusal lands *before* the edit, so the tree is at the state the previous edit left it. `cut`
|
|
199
|
+
ends the turn, the rest leave this process implementing; a fresh process's `pnpm josh run:cut --resume
|
|
200
|
+
<N>` then answers **`resume-impl`**, so it **skips the title, plan, hold claim and split assessment** and
|
|
201
|
+
**continues implementation** rather than gating. Unlike the pre-gate cut, **the implementation resume
|
|
202
|
+
clears the record** (joshuafolkken/kit#2310): the pre-gate cut fires once per lane so its record must
|
|
203
|
+
survive to answer a second resume `handed-off` (joshuafolkken/kit#1935), but this one may fire again, so
|
|
204
|
+
its record is removed on resume. A double cut stays impossible — `begin_cut`'s exclusive create prevents
|
|
205
|
+
it — so a lane crosses this boundary several times, each with exactly one successor.
|
|
206
|
+
|
|
207
|
+
- **It fires for a marked child and nowhere else** — the dispatch mark names this lane's own issue, so a
|
|
208
|
+
person's own `fullrun` carries no mark and sees no refusal.
|
|
209
|
+
- **It fires on every threshold crossing, not once per run** (joshuafolkken/kit#2385) — once per run
|
|
210
|
+
silenced the row after its first refusal, so a `busy` / `failed` / `unready` verdict, or an edit
|
|
211
|
+
reissued unchanged, left the context to grow unwatched (joshuafolkken/kit#2382 ran to 282,747 tokens,
|
|
212
|
+
the cut never taken). The row now carries `decide` and re-asks on each over-threshold edit.
|
|
213
|
+
- **An edit reissued right after a refusal passes** (joshuafolkken/kit#2385) — so a `busy` / `failed` cut
|
|
214
|
+
cannot wedge the run: the reissue lands inside a short window and goes through, a genuinely new crossing
|
|
215
|
+
past it refuses again.
|
|
216
|
+
- **An unmeasurable session warrants the cut** (joshuafolkken/kit#2385) — the `verdict !== UNDER_VERDICT`
|
|
217
|
+
reading matches the pre-gate cut's `warrants_the_cut`, so they never disagree.
|
|
218
|
+
- **It is silent between a cut and its resume** — a carried record naming this issue keeps it quiet; the
|
|
219
|
+
resume clears it, and the fresh process reads its own transcript under threshold.
|
|
220
|
+
- **The verdict read is reused over a short window** (joshuafolkken/kit#2385) — the whole-transcript
|
|
221
|
+
price is a candidate on every edit now, so it is cached per checkout for a few seconds: a turn's burst
|
|
222
|
+
of edits shares one read.
|
|
223
|
+
|
|
224
|
+
`scripts/rules/implementation-cut.ts` implements the trigger, `scripts/rules/implementation-cut.test.ts`
|
|
225
|
+
pins it, and the row joins `prompts/collaboration-workflow/rule-delivery.md`. **A child that ended
|
|
226
|
+
without cutting is still detected after the fact by `pnpm josh run:ending <N> --output <path>`**
|
|
227
|
+
(joshuafolkken/kit#2139). **A single check (`lint:related` / `test:related`) is run after a batch of
|
|
228
|
+
edits, not after each one** — every check is a request too (joshuafolkken/kit#1383).
|
|
229
|
+
|
|
230
|
+
## The threshold, and the statistic it is measured against
|
|
231
|
+
|
|
232
|
+
**The `CONTEXT_CUT_THRESHOLD` (135_000) is one value; what joshuafolkken/kit#2295 changed is the
|
|
233
|
+
statistic — `cost_verdict.per_request_cost` now averages the most recent `RECENT_REQUEST_WINDOW` (10)
|
|
234
|
+
requests rather than the whole session.** It is still *one* measurement both read. This supersedes
|
|
235
|
+
joshuafolkken/kit#2282, which kept the whole-session average and rejected this option on the batch it
|
|
236
|
+
measured — short-lived lane children with no parent session, for which the two averages nearly coincide.
|
|
237
|
+
|
|
238
|
+
- **The safety net now fires.** Built (joshuafolkken/kit#1933) for a pathological regime a typical lane
|
|
239
|
+
never enters, 135_000 sits below the 208k floor of that regime, so a runaway implementation still trips
|
|
240
|
+
it — and joshuafolkken/kit#2310 made the guard trip actively at the crossing edit.
|
|
241
|
+
- **The recent window catches the long parent the whole-session average missed.** The 2026-09-21
|
|
242
|
+
parent `567f8eac` (186 requests, 7 hours) first crossed 200k at request 65, but its whole-session
|
|
243
|
+
average did not until request 150 — **85 requests (~4 hours) later**, ~$7.88 supervising an oversized
|
|
244
|
+
parent past the point a cut was due. The recent-10 average removes that lag.
|
|
245
|
+
- **It is not the forbidden second measurement.** joshuafolkken/kit#1933 forbids the child pricing its
|
|
246
|
+
cut on a statistic the parent does not share; #2295 keeps one statistic both read and redefines it.
|
|
247
|
+
|
|
248
|
+
### The value is a break-even, not a chosen number (joshuafolkken/kit#2406)
|
|
249
|
+
|
|
250
|
+
**The threshold is derived.** joshuafolkken/kit#2374 set 150_000; joshuafolkken/kit#2406 replaced the
|
|
251
|
+
hand-picked number with the arithmetic behind it. A cut costs one preamble rewrite
|
|
252
|
+
(`POST_CUT_CONTEXT`, ~60_000 tokens) and saves the dropped context's cache read on every later request,
|
|
253
|
+
so it turns on a rate, not a ceiling: `context-cut-payback.ts` computes the per-request context at which a
|
|
254
|
+
cut pays back over the expected remaining requests, from the cache multipliers in `cost-pricing.ts` (no
|
|
255
|
+
second price list). At a 10-request horizon that is **135_000**, in #2374's band; the horizon is the knob
|
|
256
|
+
a before/after lane measurement tunes (#2406 PR).
|
|
257
|
+
|
|
258
|
+
### The cut is conditional, and the resume side is why (joshuafolkken/kit#2312)
|
|
259
|
+
|
|
260
|
+
**Until joshuafolkken/kit#2312 the pre-gate cut was _unconditional_, and its case recorded only the
|
|
261
|
+
gain** — the context reduction it carries (~130k → ~60k per request). **The resume side was never
|
|
262
|
+
priced.** A cut relaunches a fresh process that re-reads the plan and decisions off GitHub before the
|
|
263
|
+
gate — a fixed ramp of ~12 requests per session. That ramp was **$81.01 of $435.09 (19%)**
|
|
264
|
+
across the 32 lanes of 2026-09-21, falling hardest on the short lanes with the least to drop: #2282 spent
|
|
265
|
+
**58%** of its billing on it at 60k median context, #2295 **39%** at 74k, #2289 **37%** at 81k — each
|
|
266
|
+
with **0%** of its requests over 200k.
|
|
267
|
+
|
|
268
|
+
**So the cut is now taken only when the recent-window per-request cost is over `CONTEXT_CUT_THRESHOLD`**
|
|
269
|
+
— the same statistic and threshold the implementation-phase cut reads, so **no second threshold is
|
|
270
|
+
introduced**. Below it `run:cut` answers `under-threshold` and the gate runs uncut; the guard reads the
|
|
271
|
+
same verdict and stays silent. A lane like #2298 (31% of requests over 200k) still cuts as before, and an
|
|
272
|
+
**unmeasurable** session keeps the old unconditional cut so it is never left uncut.
|
|
273
|
+
|
|
274
|
+
## Consistency with the chain rule
|
|
275
|
+
|
|
276
|
+
The chain forbids ending a turn at the push, with CI in flight and nothing set to resume. **The pre-gate
|
|
277
|
+
cut and the detached hand-off end it _before_ the gate** and start what carries the run on in the same
|
|
278
|
+
act — a fresh process, or the supervisor — so the push is never a turn boundary. The implementation-phase
|
|
279
|
+
cut is the same pattern one boundary earlier (joshuafolkken/kit#1933).
|
|
280
|
+
|
|
281
|
+
## A lane child records its park before it stops
|
|
282
|
+
|
|
283
|
+
**A dispatched lane child records its park on the Issue before it stops for a decision**
|
|
284
|
+
(joshuafolkken/kit#2034). A headless child's only route to ask a person anything is to park the Issue —
|
|
285
|
+
`needs-decision` and a comment carrying the question. Measured twice on 2026-09-14: **#2012**'s child had
|
|
286
|
+
its `AskUserQuestion` refused and **#2011** wrote a Tier B decision, both only to their final message, so
|
|
287
|
+
the parent found an OPEN Issue with `in-progress` and no question. The child is the only process that
|
|
288
|
+
knows the question, so it records the park itself rather than leaving the parent to reconstruct it.
|
|
289
|
+
|
|
290
|
+
**The record, before the Telegram, is the park procedure exactly** — `needs-decision` plus a comment
|
|
291
|
+
carrying the question, the options, and whether work was stashed. Its single source is
|
|
292
|
+
`backlogrun-park.md` → "park and continue", followed against the child's own Issue before the
|
|
293
|
+
`confirmation` notify; with the label on the Issue, the parent's `pnpm josh run:liveness` reads the
|
|
294
|
+
child as `settled`.
|
|
295
|
+
|
|
296
|
+
**A `needs-human-review` or `already-done` stop needs nothing added** — those labels are already on the
|
|
297
|
+
Issue. It is only a decision-stop (a Tier B toss-up, a Tier C action, an upstream defect, a split) that
|
|
298
|
+
would otherwise leave the Issue bare.
|
|
299
|
+
|
|
300
|
+
### The stop notify refuses until the park is recorded
|
|
301
|
+
|
|
302
|
+
**This was prose that would have fired never**: a step a child is free to skip under time pressure is
|
|
303
|
+
the step it skips. So `pnpm josh rule:guard` **refuses `pnpm josh notify --task-type confirmation`**
|
|
304
|
+
while this checkout is a lane child — the mark `JOSH_LANE_CHILD` names this lane's own issue — handing
|
|
305
|
+
back the park commands.
|
|
306
|
+
|
|
307
|
+
- **It fires for a marked child and nowhere else.** A person's own `fullrun` carries no mark and sends
|
|
308
|
+
its stop notify untouched.
|
|
309
|
+
- **It fires once per run.** The child records the park and reissues the same notify; a
|
|
310
|
+
`needs-human-review` or `already-done` stop reissues after the one delivery, its label already on the
|
|
311
|
+
Issue.
|
|
312
|
+
- **The park state is not readable synchronously.** A `PreToolUse` guard makes no network call and the
|
|
313
|
+
park is a GitHub label, so the delivery is a checklist — one wasted reissue on the compliant path is safe.
|
|
314
|
+
|
|
315
|
+
This section is the single source of the lane-child park rule; `scripts/rules/lane-park.ts` implements
|
|
316
|
+
the trigger, `scripts/rules/lane-park.test.ts` pins it, and the row joins the enumeration in
|
|
317
|
+
`prompts/collaboration-workflow/rule-delivery.md`.
|
|
318
|
+
|
|
319
|
+
### The interactive ask is refused one call earlier
|
|
320
|
+
|
|
321
|
+
**The stop-notify guard fired one tool-call too late** (joshuafolkken/kit#2201). A child that reaches
|
|
322
|
+
for `AskUserQuestion` never reaches the notify: the harness refuses an interactive ask in a headless
|
|
323
|
+
session by **ending the turn**, so the notify guard never fires and the question dies in the exit
|
|
324
|
+
record's `permission_denials`. Measured on 2026-09-20 inside `backlogrun #2163 --only`: **#2178**'s
|
|
325
|
+
child hit a Tier B branch, called `AskUserQuestion`, was refused, and left an OPEN Issue with
|
|
326
|
+
`in-progress` and no question — the failure joshuafolkken/kit#2034 set out to prevent, one call
|
|
327
|
+
upstream.
|
|
328
|
+
|
|
329
|
+
So `pnpm josh rule:guard` **refuses `AskUserQuestion` for a marked lane child**, one call before the
|
|
330
|
+
stop it would have reached. A hook deny returns to the model rather than ending the turn, so the
|
|
331
|
+
refusal becomes an instruction — park the question. It fires on **every occurrence** and stays silent
|
|
332
|
+
for a person working in a lane.
|
|
333
|
+
|
|
334
|
+
**A child that slips past it is still recoverable** — `pnpm josh run:ending` lifts the refused ask out
|
|
335
|
+
of the exit record's `permission_denials` into the `abandoned` verdict's park basis, so the parent puts
|
|
336
|
+
it into the park comment. `scripts/rules/lane-interactive-ask.ts` implements the trigger,
|
|
337
|
+
`scripts/rules/lane-interactive-ask.test.ts` pins it, and `scripts/agent/interactive-ask.ts` is the
|
|
338
|
+
shared extractor the guard and `run:ending` both read.
|
|
339
|
+
|
|
340
|
+
This file is the single source of the rule.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# A prerequisite discovered mid-run — a dependency, not a park
|
|
2
|
+
|
|
3
|
+
**This is the body of `SKILL.md` §2d, relocated here so the entry read carries the trigger and the
|
|
4
|
+
pointer, not the procedure** (joshuafolkken/kit#2189). `SKILL.md` §2d is the resident stub, and each
|
|
5
|
+
entry file (`fullrun.md` / `halfrun.md` / `backlogrun-park.md`) routes here for the definition. It is
|
|
6
|
+
read at its point of use — the moment a run discovers that another Issue in this repository has to
|
|
7
|
+
land first.
|
|
8
|
+
|
|
9
|
+
**A prerequisite discovered mid-run is a dependency, not a park.** Finding that something else in
|
|
10
|
+
*this* repository has to land first is a third situation, distinct from an upstream defect and from a
|
|
11
|
+
split: the Issue in hand is still one deliverable, it just needs another one before it.
|
|
12
|
+
|
|
13
|
+
**Four kinds of other work turn up mid-run, and the procedure differs for each.** Reading one as
|
|
14
|
+
another is the failure this section exists to prevent:
|
|
15
|
+
|
|
16
|
+
| What turned up | What to do |
|
|
17
|
+
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
18
|
+
| A defect originating in **another package** | File the upstream Issue and **stop** — Tier A for a first-party target; a third-party one is Tier C, recorded and drafted rather than filed (`CLAUDE.md` → "Cross-package problems"; `prompts/collaboration-workflow/upstream-interrupt.md`) |
|
|
19
|
+
| This Issue was really **several** (a split) | File the children and the epic and **stop** — except under `backlogrun`, whose authorization already covers a batch, so the children are filed and run through (`split-assessment.md`) |
|
|
20
|
+
| Another Issue in **this** repository has to land first (**a prerequisite**) | This section |
|
|
21
|
+
| Something worth filing that is **none of the three** (**an observation**) | File it **without asking** — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (§2i). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to `docs/observations.md` and is filed on its second sighting — all of them §2i's |
|
|
22
|
+
|
|
23
|
+
**File the prerequisite with the `route:tier-a` label**, so a Tier A filing made during implementation
|
|
24
|
+
stays countable by filing route afterwards. **This paragraph belongs to the prerequisite row, not to
|
|
25
|
+
the table** — the label means a filing the run is *blocked by*, so the observation row carries no
|
|
26
|
+
`route:` label of its own (§2i):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
gh api repos/{owner}/{repo}/issues -f title="<title>" -f 'labels[]=route:tier-a' -f 'labels[]=depth:<n>' -f body="<body>"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Every "file the prerequisite" below means that labelled filing, and it always happens **first**: the
|
|
33
|
+
steps after it name a number that does not exist until it is. **`pnpm josh issue:scout "<title>"` goes
|
|
34
|
+
in front of that call, exactly as it does for a `new` entry** (§2e): a filing made mid-run is the one
|
|
35
|
+
most likely to duplicate something.
|
|
36
|
+
|
|
37
|
+
**Each entry point's own branch stays in that entry's file:**
|
|
38
|
+
|
|
39
|
+
- **A named epic under `backlogrun`** files without confirmation, records the dependency with
|
|
40
|
+
`pnpm josh epic --add <E> <N> --before <M>` — `<E>` the epic, `<N>` the prerequisite just filed,
|
|
41
|
+
`<M>` the child in hand — and the run **continues rather than parking it** (`backlogrun-park.md` → "A
|
|
42
|
+
prerequisite discovered mid-run"). Parking is only for a prerequisite that *cannot* be expressed as
|
|
43
|
+
a dependency — one needing a design decision nobody has made, a Tier B toss-up, or a Tier C action.
|
|
44
|
+
- **`fullrun` / `halfrun`** file the same way without asking, insert the prerequisite into the epic
|
|
45
|
+
that already tracks the Issue or create one over both, and then **stop**, leaving the person one
|
|
46
|
+
command to type (`fullrun.md` / `halfrun.md`). Typing `fullrun` approved implementing **one** Issue;
|
|
47
|
+
a batch is a different authorization, so the stop stays.
|
|
48
|
+
|
|
49
|
+
**Two steps every entry's procedure turns on**, both load-bearing rather than tidy-up:
|
|
50
|
+
|
|
51
|
+
- **`git stash push -u` — the `-u` is not optional.** The work in progress almost always includes a
|
|
52
|
+
new `*.test.ts`, which is untracked, and a stash without `-u` leaves exactly those files in the tree
|
|
53
|
+
for the next child's `git switch main && git pull` to refuse.
|
|
54
|
+
- **The Issue comment is what gets the stash popped, not the Telegram.** The run that later picks the
|
|
55
|
+
paused Issue up reads that comment and pops before implementing — **by message,
|
|
56
|
+
`pnpm josh stash:pop "<the -m message>"`, never a positional `git stash pop`**, because the stash is
|
|
57
|
+
a repository-wide stack every lane shares and a positional pop takes whichever lane last pushed. Say
|
|
58
|
+
it in the Telegram too — the comment is the record.
|
|
59
|
+
|
|
60
|
+
**Automatic filing is capped at 10 Issues per run** at every entry point; `pnpm josh rule:guard`
|
|
61
|
+
refuses the eleventh filing (`prompts/collaboration-workflow/rule-delivery.md`). On reaching it, stop
|
|
62
|
+
and report. `kickoff` is exempt — it never implements, so it never discovers one.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# The end-of-run retrospective — `SKILL.md` §2j's body
|
|
2
|
+
|
|
3
|
+
**This is `SKILL.md` → §2j's procedure, and it is read when `run:step` prints the retrospective step —
|
|
4
|
+
not at the entry** (joshuafolkken/kit#2328). §2j keeps the rule itself: run what `run:step` prints once,
|
|
5
|
+
file the improvements worth carrying into the next run, stack the rest, and mark the step done.
|
|
6
|
+
Everything that decides *how* — what the four sections mean, how the top two are chosen rather than
|
|
7
|
+
rationed, the exclusions, and the `auto-ok` carve-out that lets the next run pick them up — is here,
|
|
8
|
+
because none of it binds until a run has actually drained its backlog. A run that never empties its pool
|
|
9
|
+
never reads it; the one that does reads it in full, in the same turn, before it files.
|
|
10
|
+
|
|
11
|
+
**When it fires is not this file's, and not a judgement.** The run driver prints the step the moment the
|
|
12
|
+
backlog drains — `backlog:offer` marks that drain on the event stream and `run:step` fires the
|
|
13
|
+
retrospective at it, *before* the idle watch, so the improvement issues it files are what the watch then
|
|
14
|
+
picks up (joshuafolkken/kit#2335); a run that stops without draining — the failure guard, `--idle 0` —
|
|
15
|
+
still prints it at the stop position. Either way the rule that decides *when* a run acts lives in
|
|
16
|
+
`run:step`'s state transitions rather than in prose here, which is `CLAUDE.md`'s run-driver rule. This
|
|
17
|
+
file is reached only once the step is already owed. It is kit-only — `run:step` prints the step only in
|
|
18
|
+
the kit repository — so a consumer run never reaches this procedure.
|
|
19
|
+
|
|
20
|
+
## The digest is read, not skimmed
|
|
21
|
+
|
|
22
|
+
The command `run:step` prints folds four measurements that already exist into one digest — it adds no
|
|
23
|
+
new measurement (the observation-filing rule against readerless numbers). Read each section for what it
|
|
24
|
+
is for:
|
|
25
|
+
|
|
26
|
+
- **Run cost & time by role.** A role whose share of the wall clock runs ahead of its share of the cost
|
|
27
|
+
is marked `waiting-heavy` — the run spent that time waiting rather than working. That gap is a
|
|
28
|
+
candidate improvement, not a verdict: a role that waits by design is not a defect.
|
|
29
|
+
- **Recurring review findings.** A category that keeps coming back across rounds is friction in the
|
|
30
|
+
code or the rules the reviews keep catching; the zero-finding denominator tells a genuinely quiet
|
|
31
|
+
category apart from one nobody looked at.
|
|
32
|
+
- **Observation ledger.** How many observations are already held without being filed — a reminder to
|
|
33
|
+
promote one a second sighting has now earned, rather than a fresh finding.
|
|
34
|
+
- **Run events.** The parks, outages, cuts and review rounds the run hit — where it did not run
|
|
35
|
+
straight through.
|
|
36
|
+
|
|
37
|
+
The digest closes by pointing back here; the two targets it names are **the run itself** (the first,
|
|
38
|
+
third and fourth sections) and **the repository** (the second, and anything the run surfaced that lives
|
|
39
|
+
outside it).
|
|
40
|
+
|
|
41
|
+
## What to file, and how the top two are chosen
|
|
42
|
+
|
|
43
|
+
**The filing condition is the existing depth test, unchanged** — a filing cites the product work it
|
|
44
|
+
improves, and a `depth:2` finding names which decision it turns on (`observation-filing.md` → "The depth
|
|
45
|
+
test"). An improvement that cannot pass the test is not filed; it is not a shortfall of the two-item
|
|
46
|
+
count, it simply is not yet a finding.
|
|
47
|
+
|
|
48
|
+
**Order what passes by effect, and file the top two.** This is a selection, not a ration
|
|
49
|
+
(`observation-filing.md` → "This is not the count cap"): nothing that passed the test is lost, because
|
|
50
|
+
**the third onward is stacked in the observation ledger**, on the same append path
|
|
51
|
+
`pnpm josh observations:flush` already drains. So "two" is the amount one turn hands the next run, not a
|
|
52
|
+
ceiling on what may be recorded. **File nothing when nothing passes** — a run whose measurements show no
|
|
53
|
+
improvement worth carrying files zero Issues, and that is what makes the "file → drain → file again"
|
|
54
|
+
loop converge.
|
|
55
|
+
|
|
56
|
+
**Exclude what is already filed or already done, through the existing scout** (`SKILL.md` → §2e). Run
|
|
57
|
+
`pnpm josh issue:scout "<title>"` before each `gh api … issues` call: an **open** candidate covering the
|
|
58
|
+
same work means do not file it, and a `(closed)` candidate covering it means the work is already merged.
|
|
59
|
+
Neither exclusion is a new mechanism. After filing, `pnpm josh epic:bundle <new>` places each Issue, as
|
|
60
|
+
after any filing.
|
|
61
|
+
|
|
62
|
+
## `auto-ok`, and closing the step
|
|
63
|
+
|
|
64
|
+
**A retrospective may apply `auto-ok` to what it files** — the one path on which a run labels its own
|
|
65
|
+
input, so the next run picks the improvements up without waiting for a person. **`backlogrun-steps.md` →
|
|
66
|
+
"What one invocation approves" is that carve-out's single source**; it is written there, beside the
|
|
67
|
+
brakes that bound it, rather than restated here. Every brake still counts a retrospective's filings: the
|
|
68
|
+
ten-per-invocation ceiling, the WIP cap of 30, `--max`, the 150,000-token session budget and the 8-hour
|
|
69
|
+
whole-run bound.
|
|
70
|
+
|
|
71
|
+
**Close with `pnpm josh run:carry --retrospective --summary "<result>" --owner "$PPID"`.** It marks the
|
|
72
|
+
retrospective run on the carry record, so `run:step` prints `stop` from then on rather than the step a
|
|
73
|
+
second time. The mark rides the record across a session cut and is removed with the record at
|
|
74
|
+
`pnpm josh run:carry --end`, so one invocation runs the retrospective exactly once whether or not it was
|
|
75
|
+
cut. **`--summary` is required** — the same close writes it as one `retrospective` event on the event
|
|
76
|
+
stream (joshuafolkken/kit#2342), so a zero-filing retrospective differs from one that never ran; name
|
|
77
|
+
the issues filed (or that none were) and the candidates dropped with why.
|
|
78
|
+
|
|
79
|
+
**A dispatched lane child never reaches any of this** — the batch runs the retrospective at its own end,
|
|
80
|
+
never a child's, exactly as it asks `release:scope` once at the batch's end. `run:step` already answers
|
|
81
|
+
`stop` for a lane child at the stop position, so a child never prints the step to begin with.
|