@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,85 @@
|
|
|
1
|
+
# The dependency update — when `josh latest` runs
|
|
2
|
+
|
|
3
|
+
`josh latest` updates corepack, every dependency, the published ranges and `pnpm audit`, in that
|
|
4
|
+
order and over the network. Until joshuafolkken/kit#1215 every entry point put it at the head of
|
|
5
|
+
every run and called it **mandatory, never skip** — so a standalone `fullrun` paid 60–120 seconds
|
|
6
|
+
for it before touching the issue, and a batch that ran ten children paid it ten times unless the
|
|
7
|
+
entry's own file happened to hoist it by hand. This file is that rule's **single source**; every
|
|
8
|
+
entry point references it and none restates it.
|
|
9
|
+
|
|
10
|
+
## Ask the command; do not decide
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pnpm josh latest:scope # → required | skip ; the reason on stderr
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**`required` means run it. `skip` means the update is already current and this run does not.**
|
|
17
|
+
|
|
18
|
+
**The input is when `josh latest` last finished in this checkout, and nothing else.** "The
|
|
19
|
+
dependencies are probably still fresh" is a judgement made under time pressure, and time pressure
|
|
20
|
+
resolves it toward `skip` exactly when a stale dependency is most likely to matter — the same reason
|
|
21
|
+
`pnpm josh review:brief --level-only` took the review level out of an agent's hands.
|
|
22
|
+
|
|
23
|
+
- **No record answers `required`.** A fresh checkout, a cleared temp directory, a run that fell over
|
|
24
|
+
halfway — every one of them lands there, and none of them is evidence that anything is current.
|
|
25
|
+
- **The record is written by `josh latest` itself**, as the last step of its chain, so a chain that
|
|
26
|
+
failed leaves nothing behind and the next run updates again.
|
|
27
|
+
- **The window is 12 hours**, moved in either direction by `JOSH_LATEST_MAX_AGE_HOURS`. A value that
|
|
28
|
+
is not a positive number falls back to the default rather than disabling the update.
|
|
29
|
+
- **The record is per checkout.** An epic that spans repositories therefore updates each one on its
|
|
30
|
+
own schedule, which is what the old "once per session, not once per run" wording was reaching for.
|
|
31
|
+
|
|
32
|
+
## What runs when the answer is `required`
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git stash push -u -m "josh latest" # only if the working tree has staged or modified files
|
|
36
|
+
git switch main && git pull
|
|
37
|
+
pnpm josh latest # on `required` only
|
|
38
|
+
pnpm josh stash:pop "josh latest" # only if you stashed above — by message, never a positional pop
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**The pop is by message, never a bare `git stash pop`.** The stash is a repository-wide stack every
|
|
42
|
+
work tree shares, so a positional pop would take whichever lane last pushed rather than the one this
|
|
43
|
+
step saved (joshuafolkken/kit#2050).
|
|
44
|
+
|
|
45
|
+
Then **load the `dependency-update` skill and follow its procedure** — the overrides in **both**
|
|
46
|
+
`pnpm-workspace.yaml` and `package.json`, and the one expected `devEngines` pnpm bump. That condition
|
|
47
|
+
is unchanged and unconditional: it applies to every run in which `josh latest` actually ran, and
|
|
48
|
+
never reports the pins intact without having been run.
|
|
49
|
+
|
|
50
|
+
**On `skip`, one line of that block goes away and no more.** `pnpm josh latest` does not run, and
|
|
51
|
+
the `dependency-update` skill is not read, because nothing rewrote a pin for it to check.
|
|
52
|
+
|
|
53
|
+
**Two of those steps are not this gate's, and making either conditional breaks something.**
|
|
54
|
+
`git switch main && git pull` runs per issue and per child either way: it is what brings the previous
|
|
55
|
+
merge into the tree, and an issue that skips it starts implementing on a stale default branch. The
|
|
56
|
+
stash before it is the branch switch's, not the update's — a dirty tree stops `git switch` whatever
|
|
57
|
+
this command answered — so it is conditional on the **tree**, never on the answer.
|
|
58
|
+
|
|
59
|
+
## The vulnerability net is not what moved
|
|
60
|
+
|
|
61
|
+
`pnpm audit` runs inside `josh latest`, so a `skip` skips that reading too. **What still covers every
|
|
62
|
+
merge is CI**: the `Security Audit` job runs on every pull request and is one of the required checks
|
|
63
|
+
`pnpm josh followup` waits on, so nothing reaches the default branch without a fresh audit —
|
|
64
|
+
whatever this gate answered locally. The local reading is a head start on a failure CI would catch
|
|
65
|
+
anyway; it was never the only net.
|
|
66
|
+
|
|
67
|
+
## Why an elapsed-time window rather than "once per batch"
|
|
68
|
+
|
|
69
|
+
The batch entry points had already hoisted the update to the head of a batch, and that hoist is
|
|
70
|
+
correct — but it says nothing about a standalone `fullrun`, which **is** the head of its own
|
|
71
|
+
one-issue batch and therefore updated on every invocation. A session that runs six issues one at a
|
|
72
|
+
time paid the full cost six times while a batch of the same six paid it once, for no difference
|
|
73
|
+
anybody chose. An elapsed-time window is the one condition that reads the same at every entry point,
|
|
74
|
+
so no entry needs a rule of its own — and the batch hoists survive it unchanged, because a batch's
|
|
75
|
+
second child asks the same command and is told `skip`.
|
|
76
|
+
|
|
77
|
+
**The lock file the update rewrites still lands with whichever issue ran it.** `josh latest` leaves
|
|
78
|
+
`pnpm-lock.yaml` modified and that issue's `pnpm josh git -y` commits it, exactly as before. What the
|
|
79
|
+
window removes is the other runs carrying the same bumps; it does not make that one diff clean.
|
|
80
|
+
Should the issue then fail CI on a bump rather than on its own change, that is a dependency problem
|
|
81
|
+
found once — fix it forward before parking the issue for it.
|
|
82
|
+
|
|
83
|
+
This file is the single source of the rule. `fullrun.md`, `halfrun.md`, `backlogrun.md` and `backlogrun.md`
|
|
84
|
+
each name `pnpm josh latest:scope` at the point their procedure reaches it and route here for
|
|
85
|
+
everything else; `docs/josh-commands.md` documents the command itself.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# `needs-human-review` — the child that stops before its commit
|
|
2
|
+
|
|
3
|
+
**This is the body of `SKILL.md` §2z, relocated here so the entry read carries the trigger and the
|
|
4
|
+
pointer, not the procedure** (joshuafolkken/kit#2189). `SKILL.md` §2z is the resident stub;
|
|
5
|
+
`fullrun.md`, `halfrun.md` and `backlogrun.md` route here for the definition. It is read at its point
|
|
6
|
+
of use — the moment `pnpm josh issue:state <N>` answers `human_review: yes`.
|
|
7
|
+
|
|
8
|
+
An issue carrying **`needs-human-review`** is degraded to a `halfrun`-shaped stop, whichever entry
|
|
9
|
+
point reached it — `fullrun` or `backlogrun`. It is `auto-ok`'s opposite: that label widens
|
|
10
|
+
unattended execution past an epic's edge, this one withholds its last step, and both may be applied
|
|
11
|
+
**only by a person**. It exists because some work's quality is not something a test can judge — a
|
|
12
|
+
**published artifact** whose unit tests say nothing about the writing, or **a choice that was a
|
|
13
|
+
person's to make** such as picking one of several generated candidates.
|
|
14
|
+
|
|
15
|
+
- **Implementation and the verification gate run normally** — refactor, `pnpm josh gate`,
|
|
16
|
+
`/code-review`, exactly as for any other child.
|
|
17
|
+
- **Run `pnpm josh test:e2e` yourself before stopping.** With no pull request there is no CI E2E job,
|
|
18
|
+
and `pnpm josh followup` is never reached. This is `halfrun`'s situation exactly: you run it and read
|
|
19
|
+
what it prints. A printed skip is the answer for a project with no E2E suite; a skip nobody saw
|
|
20
|
+
printed is not.
|
|
21
|
+
- **Nothing is committed, pushed, opened as a pull request or merged.** `pnpm josh bump`,
|
|
22
|
+
`pnpm josh git` and `pnpm josh followup` are never reached.
|
|
23
|
+
- **The working tree is left uncommitted, and nothing is stashed.**
|
|
24
|
+
- **Send a `confirmation` Telegram and stop the whole run.** The remaining children are not started —
|
|
25
|
+
inside a `backlogrun` this is the one thing that is *not* park-and-continue.
|
|
26
|
+
- The Telegram body carries the **resume command**, in the same form `halfrun`'s own stop uses.
|
|
27
|
+
- **Resuming is `halfrun`'s stop exactly**: a person looks at the working tree and, if it is right,
|
|
28
|
+
carries on from the commit themselves. The stop report carries that resume command too, not only the
|
|
29
|
+
Telegram.
|
|
30
|
+
|
|
31
|
+
**Stopping is the specification, not a failure.** The label's job is to stop a batch walking past a
|
|
32
|
+
decision that was a person's to make.
|
|
33
|
+
|
|
34
|
+
**Read the answer from `pnpm josh issue:state <N>`, never by matching the label string yourself.** It
|
|
35
|
+
prints a `human_review: yes` / `human_review: no` line beside the state and the labels, through the
|
|
36
|
+
same case-insensitive comparison every other workflow label goes through — so `Needs-Human-Review` is
|
|
37
|
+
not missed. **Ask once, before implementing**: `epic:next` prints a bare issue number and `fullrun`
|
|
38
|
+
and a batch child are handed one, so the check is one call of its own, made the moment the number is in
|
|
39
|
+
hand and before the plan.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm josh issue:state <N> # state, labels, and human_review
|
|
43
|
+
pnpm josh issue:state <N> --repo <owner/repo> # a child in another repository
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Never apply or remove it**, exactly as strongly as `auto-ok`: a mark a run can clear for itself is
|
|
47
|
+
not a mark. Everything but typing the command on an explicit instruction in the current turn is a
|
|
48
|
+
proposal, written as an Issue comment and left for the person. The label itself is created once per
|
|
49
|
+
repository, by a person:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
gh api repos/{owner}/{repo}/labels -f name=needs-human-review -f color=d93f0b -f description="Implement and verify, but stop before committing so a person can look"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**It is not `needs-decision`, and reading it as one breaks two things.** `needs-decision` withholds a
|
|
56
|
+
run's *start*; this withholds its *end*. So a `needs-human-review` issue is still offered — excluded,
|
|
57
|
+
the artifact a person is meant to look at would never be produced — and a child stopped by it **goes on
|
|
58
|
+
holding its repository**, because the uncommitted work is still in the checkout; read as parked there,
|
|
59
|
+
the next child would start `git switch main && git pull` on top of it. The code encodes both halves by
|
|
60
|
+
leaving the label out of two sets: `scripts/git/issue-labels.ts` keeps it out of
|
|
61
|
+
`NOT_DIRECTLY_RUNNABLE_LABELS` and `scripts/epic/epic-busy.ts` keeps it out of the parked set.
|
|
62
|
+
|
|
63
|
+
Each entry point's own branch stays in its own file — `fullrun.md`, `halfrun.md`,
|
|
64
|
+
`backlogrun.md` — and routes here for the definition.
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
# The observation filing procedure — `SKILL.md` §2i's body
|
|
2
|
+
|
|
3
|
+
**This is `SKILL.md` → §2i's procedure, and it is read when an observation turns up — not at the
|
|
4
|
+
entry** (joshuafolkken/kit#1797). §2i keeps the rule itself: file it without asking, apply the depth
|
|
5
|
+
test, record what the test turns away, and carry the run on. Everything that decides *how* — the
|
|
6
|
+
depth table and its labels, the depth-0 share, the ledger's grammar and commit path, the promotion on
|
|
7
|
+
a second sighting, and what a delegated child does instead — is here, because none of it binds until
|
|
8
|
+
a run has actually found something worth filing. A `fullrun` that never finds one never reads it, and
|
|
9
|
+
the one that does reads it in full, in the same turn, before it files.
|
|
10
|
+
|
|
11
|
+
**The trigger is the judgement, not the run's progress** — an ended run, a `kickoff` and a mid-talk
|
|
12
|
+
turn all file; an offer to file is sent back by the `Stop` hook (joshuafolkken/kit#2422).
|
|
13
|
+
|
|
14
|
+
**A run that judges something worth filing files it, and does not ask.** An upstream defect stops the
|
|
15
|
+
run, a split replaces it, and a prerequisite goes in front of it (`SKILL.md` → §2d). An ordinary
|
|
16
|
+
observation changes none of those: it carries no `route:` label, causes no stash or park, and the run
|
|
17
|
+
continues. A first-party target is Tier A, decided by `pnpm josh repo:party`; a third-party target is
|
|
18
|
+
Tier C (`CLAUDE.md`). Name what was filed in the completion report. An observation nobody would act
|
|
19
|
+
on is dropped rather than filed.
|
|
20
|
+
|
|
21
|
+
**The filing ceilings still apply.** Count this filing in the ten-Issue limit for the run. An
|
|
22
|
+
observation is discretionary, so above 30 open Issues in the target repository, close one first or do
|
|
23
|
+
not file (`prompts/collaboration-workflow/wip-cap.md`). Before the `gh api … issues` call, run
|
|
24
|
+
`pnpm josh issue:scout "<title>"` (`issue-scout.md`). When it is the second filing of the run, run
|
|
25
|
+
`pnpm josh issue:fold` first; the guard refuses that filing without the fold
|
|
26
|
+
(`split-assessment.md` → "The same two questions decide the filing-time fold"). After filing, run
|
|
27
|
+
`pnpm josh epic:bundle <new>` so the Issue is offered by its epic; an `auto-ok` epic adds it to the
|
|
28
|
+
backlog pool (`backlogrun-steps.md` → "What one invocation approves").
|
|
29
|
+
|
|
30
|
+
The detail below is read at the filing decision, and the marker suite pins the rules here.
|
|
31
|
+
|
|
32
|
+
### The depth test — a discretionary filing cites the product work it blocked
|
|
33
|
+
|
|
34
|
+
**A run that has just spent an hour inside the workflow tooling files findings about the workflow
|
|
35
|
+
tooling** (joshuafolkken/kit#1698). Measured on the `backlogrun` of 2026-09-09: 5 Issues shipped and
|
|
36
|
+
15 filed, of which 13 were discretionary — and all 20 were about this package's own run
|
|
37
|
+
orchestration or the tools that measure it, with not one change a consumer of the package would see.
|
|
38
|
+
**A listing that measures itself has no natural stopping condition**, because every measurement
|
|
39
|
+
creates something new to measure. So the condition comes from outside, and **depth is what supplies
|
|
40
|
+
it — read off the subject rather than judged**:
|
|
41
|
+
|
|
42
|
+
| Depth | The subject | Where it lives |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| **0** | What a consumer of this package touches | A `josh` command's behavior, a distributed document or config, the published package |
|
|
45
|
+
| **1** | The run orchestration that executes an Issue | `fullrun` / `backlogrun`, lanes, the `epic:*` commands, the filing routes themselves |
|
|
46
|
+
| **2** | What measures a run | `josh cost` and the run-timing report |
|
|
47
|
+
|
|
48
|
+
**The depth is recorded on the Issue as a label, and the label is applied when the Issue is filed**
|
|
49
|
+
(joshuafolkken/kit#1729). `depth:0`, `depth:1` and `depth:2` are the three, defined once in
|
|
50
|
+
`scripts/git/issue-labels.ts` and carrying no definition of their own — **the table above is the
|
|
51
|
+
single source**, and a label description that paraphrased it would be a second copy of the rule.
|
|
52
|
+
**Every filing route applies one**, this route and the other three of §2d's table alike: a `new`
|
|
53
|
+
entry point, a `route:tier-a` prerequisite, a `route:interrupt`, a split child and a review round
|
|
54
|
+
cap's branch-2 filing all pass through a `gh api … issues` call, and the depth label goes in it
|
|
55
|
+
beside whatever `route:` label that call already carries.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
gh api repos/{owner}/{repo}/issues -f title="<title>" -f 'labels[]=depth:1' -f body="<body>"
|
|
59
|
+
gh api repos/{owner}/{repo}/issues/<N>/labels -f 'labels[]=depth:1' # an Issue already filed
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Create the three once per repository**, before the first filing that applies one — REST auto-creates
|
|
63
|
+
a missing label with a generated color and no description, and the three lines below are what give
|
|
64
|
+
each a stable color a reader can scan a listing by. `DEPTH_LABELS` in `scripts/git/issue-labels.ts`
|
|
65
|
+
is the single source of the colors and descriptions, and `scripts/rules/issue-depth-label.test.ts` keys
|
|
66
|
+
these lines to it so the two cannot drift.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
gh api repos/{owner}/{repo}/labels -f name=depth:0 -f color=0e8a16 -f description="Depth 0 — what a consumer of this package touches (SKILL.md §2i)" --silent 2>/dev/null || true
|
|
70
|
+
gh api repos/{owner}/{repo}/labels -f name=depth:1 -f color=fbc02d -f description="Depth 1 — the run orchestration that executes an Issue (SKILL.md §2i)" --silent 2>/dev/null || true
|
|
71
|
+
gh api repos/{owner}/{repo}/labels -f name=depth:2 -f color=c5def5 -f description="Depth 2 — what measures a run (SKILL.md §2i)" --silent 2>/dev/null || true
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- **It is read off the subject, exactly as the table is** — so applying it is not a judgement and not
|
|
75
|
+
a person's to make, which is what separates it from `auto-ok` and `needs-human-review`. Those two
|
|
76
|
+
decide what a run may do; this one records what an Issue is about and withholds nothing.
|
|
77
|
+
- **Applied at filing, not at completion.** A depth assigned when the work finishes is assigned by
|
|
78
|
+
whoever happens to close it, and the share below is a question about the *open* backlog — an Issue
|
|
79
|
+
that never carried the label was never in the numerator's reach.
|
|
80
|
+
- **An Issue carrying more than one counts as the lowest depth present**, the one closest to the
|
|
81
|
+
consumer. It is a fixed tie-break rather than a preference: without one the same backlog measured
|
|
82
|
+
twice can answer twice, which is the whole defect joshuafolkken/kit#1729 was filed for.
|
|
83
|
+
- **An `epic` takes no depth label**, because it has no subject of its own to read one off — its
|
|
84
|
+
children carry the subjects, and the share below excludes it from the denominator for that same
|
|
85
|
+
reason. A depth label present on an Issue the count skips is exactly the ambiguity this section
|
|
86
|
+
exists to remove.
|
|
87
|
+
|
|
88
|
+
- **A discretionary observation at depth 1 or deeper is filed only where it can cite the depth-0 work
|
|
89
|
+
it stopped or delayed** — named as an Issue number or a run, never as "this would slow runs down".
|
|
90
|
+
**Cannot cite one, it is not filed**: it goes to the ledger below, and what files it later is
|
|
91
|
+
either the blockage arriving or a second sighting of the same thing. Pull rather than push — the
|
|
92
|
+
fix follows the jam or the repeat, never the lone sighting.
|
|
93
|
+
- **A depth-0 observation does not take this test.** That is the product, and the two ceilings above
|
|
94
|
+
stay its only limits.
|
|
95
|
+
- **`route:tier-a` and `route:interrupt` do not take it either**, at any depth: a filing the run
|
|
96
|
+
cannot proceed without is already citing its own blockage.
|
|
97
|
+
- **A depth-2 filing — one whose subject is what measures a run — carries a further requirement, on
|
|
98
|
+
top of the depth-0 citation above rather than in place of it** (joshuafolkken/kit#1975). The
|
|
99
|
+
citation the depth-0 gate asks for is one a slow run can always produce, so it barely bites on a
|
|
100
|
+
measurement Issue: "runs are slow" and "the diff is large" both name depth-0 work, while the number
|
|
101
|
+
the Issue proposes to produce changes nothing — and a listing that measures itself has no natural
|
|
102
|
+
stopping condition precisely there. So a discretionary depth-2 filing states two things the depth-0
|
|
103
|
+
citation does not force:
|
|
104
|
+
- **The decision the number would change, named** — the Issue number holding the choice it is
|
|
105
|
+
waiting on, or a decision a person is about to make. "Slow", "large" and "worth knowing" are not a
|
|
106
|
+
decision.
|
|
107
|
+
- **Which way it tips** — what range of the number selects which choice. A number that selects the
|
|
108
|
+
same action whatever it turns out to be changes no decision, and a filing that cannot write this
|
|
109
|
+
line is describing one.
|
|
110
|
+
- **Cannot write both, it is not filed** — the same exit the depth-0 gate takes: the ledger below,
|
|
111
|
+
pulled into an Issue by the jam arriving or the second sighting, never pushed by the lone idea.
|
|
112
|
+
- **This narrows depth 2 alone, and the exemptions above carry over unchanged.** `route:tier-a` and
|
|
113
|
+
`route:interrupt` do not take this requirement any more than they take the depth-0 citation, a
|
|
114
|
+
depth-0 observation does not take it because it is the product, and a review round cap's branch-2
|
|
115
|
+
filing (below) clears its own bar and never reaches this one.
|
|
116
|
+
|
|
117
|
+
**It governs this route only — the fourth row of §2d's table.** A review finding routed to branch 2
|
|
118
|
+
of `prompts/review.md` → "Review round cap" is filed under that section's own bar — a confirmed
|
|
119
|
+
defect reaching a runtime path, with a written failure scenario — and **does not take the depth
|
|
120
|
+
test**: it has already cleared a bar this route has not, so gating it on a citation as well would
|
|
121
|
+
drop the one kind of finding both documents agree is never dropped. **That bar is the reason, and the
|
|
122
|
+
subject's depth is not** — the sentence here used to say that a defect in a `josh` command's behavior
|
|
123
|
+
is depth 0 by construction, and joshuafolkken/kit#1694 and joshuafolkken/kit#1703 are both branch-2
|
|
124
|
+
filings whose subject is the epic tooling, which the table above puts at depth 1
|
|
125
|
+
(joshuafolkken/kit#1675).
|
|
126
|
+
|
|
127
|
+
**This is not the count cap that was rejected.** A cap is rationing — past the number the finding is
|
|
128
|
+
lost, and nothing about it says which findings were worth having. This changes what counts as a
|
|
129
|
+
finding at all, so what it excludes is excluded for a reason a reader can check.
|
|
130
|
+
|
|
131
|
+
**And a PR that *adds* a measurement names its reader in the same way.** The requirement above binds
|
|
132
|
+
a depth-2 Issue that *proposes* a measurement; a pull request that *adds* one — a new report column,
|
|
133
|
+
section, scope or subcommand, a diagnostic step — states in its body the reader that consumes it: the
|
|
134
|
+
Issue number that read the value to decide something, or the path of the rule that reads it. **A
|
|
135
|
+
measurement with no reader is not added** — this is joshuafolkken/kit#2012's test, the one that
|
|
136
|
+
retired every column no decision reads, moved to the moment a column is proposed so the retirement
|
|
137
|
+
never has to be filed again. `route:tier-a` and `route:interrupt` carry over unchanged.
|
|
138
|
+
|
|
139
|
+
### The depth-0 share — what is counted
|
|
140
|
+
|
|
141
|
+
**joshuafolkken/kit#1698 set a measurable target: the share of open Issues at depth 0** — 3/23
|
|
142
|
+
≈ 13% on 2026-09-09 (joshuafolkken/kit#1729). Counted by eye it is not reproducible: done again on
|
|
143
|
+
2026-09-10 it produced 3/14 ≈ 21%, and the two figures **are not comparable**: they took different
|
|
144
|
+
denominators, and neither said which. So the denominator is fixed here as a rule rather than left to
|
|
145
|
+
the counter.
|
|
146
|
+
|
|
147
|
+
**The denominator is a rule, not a choice, and this is it:**
|
|
148
|
+
|
|
149
|
+
- **Counted: every open Issue that does not carry `epic`.** An epic is a container for other Issues
|
|
150
|
+
rather than a deliverable of its own — counting one counts its children twice, and an epic has no
|
|
151
|
+
subject of its own to read a depth off.
|
|
152
|
+
- **`route:tier-a` and `route:interrupt` are counted like anything else.** The depth test above
|
|
153
|
+
exempts them from its *citation* requirement; it never said they are not work. Excluded, a run
|
|
154
|
+
could improve the share by choosing a filing route.
|
|
155
|
+
- **An Issue with no depth label is in the denominator**, counted separately as `unlabelled`. Left
|
|
156
|
+
out, the share would improve every time a filing skipped the label — the one direction a
|
|
157
|
+
measurement must never be able to move on its own.
|
|
158
|
+
- **The numerator is what is left**: open, non-epic Issues carrying `depth:0`.
|
|
159
|
+
|
|
160
|
+
**Two readings of the same backlog give the same number**, which is what the hand counts could not
|
|
161
|
+
do: the denominator is a rule rather than a choice, so nothing in the count is left to the counter's
|
|
162
|
+
judgement.
|
|
163
|
+
|
|
164
|
+
**What the number is for is not decided here.** Changing what `backlog:next` offers on the strength
|
|
165
|
+
of it, and setting a target value, are both deliberately out of scope until the current value has
|
|
166
|
+
been measured the same way more than once (joshuafolkken/kit#1729 → 範囲外).
|
|
167
|
+
|
|
168
|
+
### The ledger — where an observation that cannot cite a blockage goes
|
|
169
|
+
|
|
170
|
+
**"Not filed" used to mean "gone", and that is what walked the depth test past itself.** The
|
|
171
|
+
completion report was the only place such an observation could land, and a completion report is
|
|
172
|
+
read once and then scrolls away — so the next run met the same thing as a first sighting, forever.
|
|
173
|
+
joshuafolkken/kit#1726 is the worked case: its own body says the depth test would not have filed it,
|
|
174
|
+
and it was filed anyway, because **discarding it was the only alternative on offer**
|
|
175
|
+
(joshuafolkken/kit#1728).
|
|
176
|
+
|
|
177
|
+
- **The destination is `docs/observations.md` in the repository the observation is about** — the same
|
|
178
|
+
repository the Issue would have been filed into. **The count and the append are both run in that
|
|
179
|
+
repository's checkout**, resolved the way §2c (`target-repository.md`) resolves any cross-repository target, and the file is
|
|
180
|
+
created on the first append where that repository has none. **The subject decides, never the
|
|
181
|
+
working directory**: an observation about this package's own orchestration, seen while a run is
|
|
182
|
+
inside a repository that consumes it, is recorded here rather than there — the append follows the
|
|
183
|
+
subject, never the working directory. **A third-party target gets no line either** — Tier C covers
|
|
184
|
+
the ledger exactly as it covers the Issue that would otherwise have been filed there.
|
|
185
|
+
- **It is append-only.** A line is never edited and never deleted, because the count of lines
|
|
186
|
+
carrying one key is what says whether an observation has recurred; a second sighting is a second
|
|
187
|
+
line, not a rewrite of the first. **A merge conflict in it is resolved by keeping both sides** —
|
|
188
|
+
two lanes appending at once is the ordinary case, and a repeated key is the whole signal, so
|
|
189
|
+
dropping either side destroys exactly what the file is for.
|
|
190
|
+
- **The completion report keeps its line too.** The ledger is what the next run can read; the report
|
|
191
|
+
is what this run's reader sees. Neither replaces the other.
|
|
192
|
+
- **The append is not the end of it** — a line only becomes readable to anyone else once it has
|
|
193
|
+
merged, and "The commit path" below is how it gets there.
|
|
194
|
+
|
|
195
|
+
**One observation is one line: five fields, each separated from the next by a vertical bar with one
|
|
196
|
+
space on either side.**
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
- k:<slug> | d<n> | <YYYY-MM-DD> | <where> | <what>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
| Field | What it holds |
|
|
203
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
204
|
+
| `k:<slug>` | The identity key — lowercase letters and digits, in words joined by `-`. This is what makes a repeat machine-readable |
|
|
205
|
+
| `d<n>` | The depth of the subject — `d1`, `d2`, or whatever deeper depth the table above may one day name. **There is no `d0` line**: a depth-0 observation is filed outright and never reaches the ledger |
|
|
206
|
+
| `<YYYY-MM-DD>` | The date of **this** sighting |
|
|
207
|
+
| `<where>` | One file path or one command — where the thing was seen |
|
|
208
|
+
| `<what>` | The phenomenon, one sentence, carrying no vertical bar of its own |
|
|
209
|
+
|
|
210
|
+
A sample, in the shape a real entry takes:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
- k:example | d1 | 2026-09-10 | pnpm josh run:progress | The report printed a fill-in placeholder where a clock time belonged
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**`k:example` is reserved for this sample and is never used by a real observation**, so the count
|
|
217
|
+
below can be run over the whole file without the sample answering for one. **The grammar is defined
|
|
218
|
+
here rather than in the ledger** because this skill is distributed to every repository that consumes
|
|
219
|
+
the package and `docs/` is not — a rule that named a definition the reader never received would
|
|
220
|
+
leave every consumer's ledger shaped by hand.
|
|
221
|
+
|
|
222
|
+
**The identity key is the whole of the repeat test — never a similarity judgement about the prose.**
|
|
223
|
+
Choose the key from the phenomenon rather than from the run, then count what the ledger already holds
|
|
224
|
+
for it, in that repository's checkout rather than the working directory. **The `|| true` is not
|
|
225
|
+
decoration**: `grep -c` exits non-zero on a count of zero, which is the first-sighting branch and the
|
|
226
|
+
common one, so without it the step reads as a failed command wherever an exit status is being
|
|
227
|
+
watched. **A missing file is not a count of zero, though** — there `grep` exits 2 and prints no
|
|
228
|
+
number at all, so an empty answer means create the ledger, never that this is a first sighting.
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
grep -c '^- k:<slug> |' <that repository's checkout>/docs/observations.md || true
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Free-text comparison is what the key exists to replace, so two lines that read alike under different
|
|
235
|
+
keys are two observations, and a mis-keyed entry is corrected by appending a correctly-keyed line
|
|
236
|
+
rather than by editing the one already written.
|
|
237
|
+
|
|
238
|
+
**The depth gate is not withdrawn, and this is not a way around it.** An observation that *can* cite
|
|
239
|
+
the depth-0 work it stopped is filed exactly as it was before — this route is only for the ones that
|
|
240
|
+
could not, and whose sole previous destination was nothing (joshuafolkken/kit#1698's gate stands
|
|
241
|
+
unchanged).
|
|
242
|
+
|
|
243
|
+
### The commit path — how an appended line reaches the default branch
|
|
244
|
+
|
|
245
|
+
**An append nobody commits is an append nobody can count** (joshuafolkken/kit#1756). The ledger was
|
|
246
|
+
given a destination and no route out of the working tree the line was written in, and **structurally
|
|
247
|
+
nobody was going to commit one**: the parent session that appends never runs `pnpm josh git`, a child
|
|
248
|
+
runs it inside a lane work tree that cannot see the parent's checkout, and in the primary checkout
|
|
249
|
+
`git add -u` swept the line into whatever unrelated pull request that run was opening. Measured on
|
|
250
|
+
the day the ledger shipped, `docs/observations.md` had exactly one commit — the one that created
|
|
251
|
+
it — and seven lines had never left a working tree. **So the repeat count below was reading a file
|
|
252
|
+
that is empty on every other machine**, and every sighting was a first one, which is the state
|
|
253
|
+
joshuafolkken/kit#1728 created the ledger to end.
|
|
254
|
+
|
|
255
|
+
- **An ordinary run never commits the ledger, and that is enforced rather than remembered.**
|
|
256
|
+
`pnpm josh git` stages with `docs/observations.md` excluded, in the one staging step every entry
|
|
257
|
+
point goes through (`scripts/git/git-staging.ts`), so a `fullrun` in the primary checkout **cannot**
|
|
258
|
+
carry a ledger line into an Issue that has nothing to do with it. It is not a rule a run has to
|
|
259
|
+
remember at the commit — a run that had to would be the run that forgets.
|
|
260
|
+
- **The parent flushes the ledger as a pull request of its own** — `pnpm josh observations:flush`. It
|
|
261
|
+
stages that one path and nothing else, commits it on a branch of its own, opens a docs-only pull
|
|
262
|
+
request, waits on the same required checks every other pull request waits on, merges it and returns
|
|
263
|
+
the checkout to the default branch. **Nothing is committed to the default branch directly**, which
|
|
264
|
+
is the constraint this route had to satisfy.
|
|
265
|
+
- **`pnpm josh followup` runs the flush itself, so no run has to remember to** (joshuafolkken/kit#1810).
|
|
266
|
+
The flush is the ledger's only commit path, and until it was wired into `followup` nothing called
|
|
267
|
+
it — an appended line stayed in the working tree until a person ran the command by hand, the same
|
|
268
|
+
defect the staging exclusion above was built to avoid. After the merge and before it releases the working-tree
|
|
269
|
+
hold, `followup` reads the tree, and **only when the ledger holds a pending append** returns the
|
|
270
|
+
checkout to the default branch (`pnpm josh ms`) and flushes. A run that appended nothing pays
|
|
271
|
+
nothing, and a lane skips it (next bullet). A flush that fails is reported and does not take the merge, the
|
|
272
|
+
epic close or the hold release down with it. **A side effect: on a run that did flush, `followup`
|
|
273
|
+
ends on the default branch.**
|
|
274
|
+
- **A lane's writers use the primary checkout's ledger** (joshuafolkken/kit#2419): a lane refuses
|
|
275
|
+
`pnpm josh ms`, so its own copy had no way out. `pnpm josh observations:flush` acts on the primary
|
|
276
|
+
checkout from a lane. **A dispatched lane child does not flush at all** (joshuafolkken/kit#2492): its
|
|
277
|
+
`run:tail` skips the step, and the `backlogrun` flushes every lane's lines once, in one pull request,
|
|
278
|
+
at `pnpm josh run:carry --end`.
|
|
279
|
+
- **Mixing the lines into a child's pull request was considered and is refused.** That is the
|
|
280
|
+
contamination the exclusion above exists to end, and adopting it would turn the defect into the
|
|
281
|
+
specification: a ledger line in an unrelated diff is a line no reviewer of that diff has a reason
|
|
282
|
+
to question.
|
|
283
|
+
- **Run by hand it goes in the primary checkout, once per cycle rather than once per observation** —
|
|
284
|
+
but with `pnpm josh followup` now flushing automatically (above), a hand run is the exception rather
|
|
285
|
+
than the rule. It refuses off the default branch and refuses a working tree holding anything besides
|
|
286
|
+
the ledger, so a run in progress cannot be flushed out from under, and a lane's checkout is never
|
|
287
|
+
the one it acts on.
|
|
288
|
+
- **Nothing to flush is an answer, not a failure.** With the ledger matching the commit it sits on
|
|
289
|
+
the command prints `clean` and exits 0 — most cycles append nothing, and a command that errored
|
|
290
|
+
there would be one nobody runs.
|
|
291
|
+
- **The count the promotion below reads is a count of the default branch**, which is what this route
|
|
292
|
+
buys: a ledger line that merged is one every later run, every other machine and every fresh clone
|
|
293
|
+
can see, and only then can a second sighting be recognized as one.
|
|
294
|
+
|
|
295
|
+
### The second sighting is what files it
|
|
296
|
+
|
|
297
|
+
**A repeat is the citation.** joshuafolkken/kit#1698 asked a discretionary filing to be pulled by a
|
|
298
|
+
blockage rather than pushed by a sighting; an observation recorded twice has been pulled — it came
|
|
299
|
+
back on its own, which no single sighting can demonstrate. So the gate has a second way through, and
|
|
300
|
+
it is counted rather than judged:
|
|
301
|
+
|
|
302
|
+
- **On the count answering exactly `1`, the observation is filed**, at depth 1 or deeper, with no
|
|
303
|
+
depth-0 citation — `1` and not "1 or more", because a higher count means the Issue was already
|
|
304
|
+
opened by the sighting that answered `1`. The ledger line is appended as well, because the ledger
|
|
305
|
+
stays append-only.
|
|
306
|
+
- **The Issue quotes the ledger's own dates — the first sighting's and this one's** — so the reader
|
|
307
|
+
can check the promotion against the file instead of taking the run's word for it.
|
|
308
|
+
- **Both ceilings still apply**, exactly as they do above: the 10-per-run cap counts a promoted
|
|
309
|
+
filing, and the WIP cap still bites, since a promoted observation blocks nothing and is therefore
|
|
310
|
+
still discretionary.
|
|
311
|
+
|
|
312
|
+
**A third and later sighting appends a line and files nothing more.** The Issue from the second one
|
|
313
|
+
is already open, and `pnpm josh issue:scout` is what finds it; the extra lines are evidence for that
|
|
314
|
+
Issue, not new ones.
|
|
315
|
+
|
|
316
|
+
### A user-found bug is recorded by its kind of miss (user-found)
|
|
317
|
+
|
|
318
|
+
**A user-reported bug is fixed or filed as always; this records the *kind of miss* alongside so the
|
|
319
|
+
category never recurs as a first sighting** (joshuafolkken/kit#2246). The key is the **category of
|
|
320
|
+
oversight** — `k:missed-case-worktree` — so a second bug of the same kind counts against the first.
|
|
321
|
+
**Depth `d1`, never `d0`**: the *kind of miss* is what a run fails to enumerate, which the table puts
|
|
322
|
+
at depth 1. Nothing else changes; the `<what>` field leads with `User-reported:`, and no second
|
|
323
|
+
ledger, format or threshold is added.
|
|
324
|
+
|
|
325
|
+
### A delegated child does not take this route
|
|
326
|
+
|
|
327
|
+
**A delegated child files `route:tier-a` and `route:interrupt` only.** Its discretionary
|
|
328
|
+
observations are not filed by the child at all: they go back in the summary's "Observations that
|
|
329
|
+
could bite later" line (`backlogrun-child.md` → "What the summary carries, and how long it may be"), and the
|
|
330
|
+
parent files what survives — under the depth test above, and inside the run's ceiling.
|
|
331
|
+
|
|
332
|
+
**A delegated child does not append to the ledger either — the parent collapses the duplicates and
|
|
333
|
+
appends what is left.** The ledger's whole value is that one key means one phenomenon, and a child
|
|
334
|
+
holding one Issue's worth of context cannot tell its observation from the sibling lane's: eight
|
|
335
|
+
children appending in parallel would write the same thing under eight keys, and every one of them
|
|
336
|
+
would then read as a first sighting. The child's route is unchanged and is the only one it has —
|
|
337
|
+
the summary's "Observations that could bite later" line — and the parent chooses the key, checks the
|
|
338
|
+
count and writes the line.
|
|
339
|
+
|
|
340
|
+
**Two reasons, and a child can solve neither for itself.** It holds one Issue's worth of context, so
|
|
341
|
+
**it cannot tell its observation from the one a sibling filed twenty minutes earlier** — the 15
|
|
342
|
+
filings of 2026-09-09 were collapsed to 12 within that same day, which means they were collapsible
|
|
343
|
+
at the moment they were made. And **the 10-per-run ceiling for this route is the parent's to
|
|
344
|
+
count**: six children counting two or three filings each never reach it, which is why it did not
|
|
345
|
+
fire once on the run that filed fifteen.
|
|
346
|
+
|
|
347
|
+
**This file is the single source of every procedure above**, and `SKILL.md` → §2i is the single
|
|
348
|
+
source of the rule they carry out; nothing under `prompts/collaboration-workflow/` restates either
|
|
349
|
+
(joshuafolkken/kit#1649, joshuafolkken/kit#1797).
|