@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,82 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
|
|
3
|
+
|
|
4
|
+
// Which transcript a Claude Code hook payload is actually about (joshuafolkken/kit#1424).
|
|
5
|
+
//
|
|
6
|
+
// **A hook fired for a forked agent's tool call is handed the *parent* session's transcript.** Both
|
|
7
|
+
// events this package wires carry the same session fields, and neither of them names the fork's own
|
|
8
|
+
// file: `transcript_path` is `<projects>/<slug>/<session-id>.jsonl` whatever agent issued the call,
|
|
9
|
+
// and the fork is identified by a separate `agent_id`. Its transcript sits one level down, at
|
|
10
|
+
// `<projects>/<slug>/<session-id>/subagents/agent-<agent-id>.jsonl`.
|
|
11
|
+
//
|
|
12
|
+
// **So every reader built on `transcript_path` alone has been reading the wrong run inside a fork**,
|
|
13
|
+
// and two of them are: the batching guard (joshuafolkken/kit#1390) and the live density line
|
|
14
|
+
// (joshuafolkken/kit#1329). Measured on 551 forked review agents in this checkout, the guard refused
|
|
15
|
+
// **zero** calls — while a replay of the same transcripts through the fork's own file refuses 1–4 per
|
|
16
|
+
// review round. The parent's timeline is frozen for as long as a fork runs, because the fork's lines
|
|
17
|
+
// go to the fork's file: its open sequence never advances, so it either never reaches the limit or
|
|
18
|
+
// reaches it once and can never qualify again. The density line has the matching symptom — inside a
|
|
19
|
+
// fork it reports the *parent's* calls per round trip, which is a number about a run the reader is
|
|
20
|
+
// not in.
|
|
21
|
+
//
|
|
22
|
+
// **The keys were already meant to be per-fork.** Both hooks key their throttle and refusal records
|
|
23
|
+
// on the transcript the payload names, each documenting that this is what gives "a delegated child …
|
|
24
|
+
// a run of its own". That claim only becomes true here.
|
|
25
|
+
//
|
|
26
|
+
// **A named agent's answer is its own path whether or not that file exists yet, and never the
|
|
27
|
+
// parent's.** The fork's first call has nothing written under it, and "no history" is the honest
|
|
28
|
+
// verdict there — both callers already turn an unreadable transcript into silence, which is the
|
|
29
|
+
// failure direction each of them states. Falling back to the parent instead would judge the fork on a
|
|
30
|
+
// timeline it never ran and, worse, spend the *parent's* refusal record: the parent is often mid-streak
|
|
31
|
+
// exactly when it delegates, so its next genuine third single-call turn would be admitted in silence.
|
|
32
|
+
|
|
33
|
+
// **The directory and the extension come from `cost-transcript.ts`, which walks this same layout to
|
|
34
|
+
// discover the units a session delegated** — a path rebuilt by hand here would be free to disagree
|
|
35
|
+
// with the one that discovery reads.
|
|
36
|
+
const { TRANSCRIPT_EXTENSION } = cost_transcript
|
|
37
|
+
// **The file-name prefix is stated here, because that module never spells it**: it lists `*.jsonl` and
|
|
38
|
+
// takes the id from whatever it finds. So this one constant can drift from Claude Code, and the
|
|
39
|
+
// direction it drifts in is the safe one — a renamed prefix makes the derived path absent, which both
|
|
40
|
+
// callers already read as "nothing to say" rather than as a verdict about some other file.
|
|
41
|
+
const AGENT_PREFIX = 'agent-'
|
|
42
|
+
// **Letters, digits, `_` and `-` only, because this value is joined into a path.** An id carrying a
|
|
43
|
+
// separator or a `..` segment would resolve outside the session's own directory, and a hook payload is
|
|
44
|
+
// input rather than something this package produced. A spelling the pattern rejects reads as "no fork
|
|
45
|
+
// named", which falls back to the payload's own path.
|
|
46
|
+
const AGENT_ID_PATTERN = /^[\w-]+$/u
|
|
47
|
+
|
|
48
|
+
// **`null` is accepted alongside `undefined` rather than rejected**, because a payload spelling the
|
|
49
|
+
// absent agent as `null` must read as "no fork" and not as a payload the caller's schema throws out —
|
|
50
|
+
// which would take both hooks off the main line entirely, in silence.
|
|
51
|
+
function is_agent_id(value: string | null | undefined): value is string {
|
|
52
|
+
return typeof value === 'string' && AGENT_ID_PATTERN.test(value)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Where the fork's transcript sits, given the session file the payload named. **Exported so a test —
|
|
56
|
+
// and any later caller — can name the file without spelling the layout again**, which is the same
|
|
57
|
+
// reason `cost-transcript.ts` exports `unit_directory`.
|
|
58
|
+
function fork_path(transcript_path: string, agent_id: string): string {
|
|
59
|
+
const directory = path.dirname(transcript_path)
|
|
60
|
+
const session_id = path.basename(transcript_path, TRANSCRIPT_EXTENSION)
|
|
61
|
+
const file_name = `${AGENT_PREFIX}${agent_id}${TRANSCRIPT_EXTENSION}`
|
|
62
|
+
|
|
63
|
+
return path.join(cost_transcript.unit_directory(directory, session_id), file_name)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// The transcript a hook should read and key its record on, given the two fields the payload carries.
|
|
67
|
+
//
|
|
68
|
+
// **A path that is not a transcript is answered with itself**, since nothing can be derived from it and
|
|
69
|
+
// guessing would name a file in some other layout entirely.
|
|
70
|
+
function transcript_of(transcript_path: string, agent_id: string | null | undefined): string {
|
|
71
|
+
if (!is_agent_id(agent_id)) return transcript_path
|
|
72
|
+
if (!transcript_path.endsWith(TRANSCRIPT_EXTENSION)) return transcript_path
|
|
73
|
+
|
|
74
|
+
return fork_path(transcript_path, agent_id)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const time_hook_transcript = {
|
|
78
|
+
fork_path,
|
|
79
|
+
transcript_of,
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export { time_hook_transcript }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// One decision about an unparseable timestamp, made once (joshuafolkken/kit#1268).
|
|
2
|
+
//
|
|
3
|
+
// Both halves of a run carry dates from somewhere else — the transcript's `timestamp` and GitHub's
|
|
4
|
+
// `created_at` / `merged_at` / check-run times — and both have to answer the same question about a
|
|
5
|
+
// value they cannot read. `undefined` is the answer, never `NaN` and never `0`: a `NaN` propagates
|
|
6
|
+
// silently through every arithmetic that touches it, and a `0` reads as the epoch, which puts a span
|
|
7
|
+
// in 1970 and makes a merge appear before its own pull request.
|
|
8
|
+
//
|
|
9
|
+
// It lives in its own module rather than in either reader because a copy in each is exactly the
|
|
10
|
+
// clone `CLAUDE.md` prohibits, and the two copies would disagree the first time one of them learned
|
|
11
|
+
// to accept another format.
|
|
12
|
+
function parse_instant(raw: string | null | undefined): number | undefined {
|
|
13
|
+
const parsed = Date.parse(raw ?? '')
|
|
14
|
+
|
|
15
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const time_instant = { parse_instant }
|
|
19
|
+
|
|
20
|
+
export { time_instant }
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { cost_attribute } from '#scripts/cost-runtime/cost-attribute'
|
|
2
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
3
|
+
|
|
4
|
+
// Which workflow boundary a tool call marks (joshuafolkken/kit#1269).
|
|
5
|
+
//
|
|
6
|
+
// The per-tool totals answer "which command is slow" and say nothing about "which *stage* is long".
|
|
7
|
+
// A stage is bounded by things a transcript can be read for, so this module is the one rule for what
|
|
8
|
+
// counts as a boundary — and it is deliberately about **recognizable commands, never durations**: a
|
|
9
|
+
// boundary guessed from "this interval looks like a review" would move whenever a run got faster,
|
|
10
|
+
// which is the one thing a measurement used to compare two runs must not do.
|
|
11
|
+
//
|
|
12
|
+
// **Only the boundaries `josh_command` cannot already express live here.** `gate`, `pr` and `merge`
|
|
13
|
+
// are `pnpm josh <cmd>` invocations that `time-spans.ts` already names, and re-detecting them here
|
|
14
|
+
// would be a second rule for the same thing. What is left is four: the plan comment, the first
|
|
15
|
+
// edit, the code-review invocation, and the instant the workflow itself opened.
|
|
16
|
+
//
|
|
17
|
+
// **The workflow boundary has two spellings, and both are the same marker** (joshuafolkken/kit#1299).
|
|
18
|
+
// A run is not a session: the transcript attributed to an issue reaches back into whatever the
|
|
19
|
+
// session was doing before the keyword was typed, so without a marker for "the run starts here"
|
|
20
|
+
// that earlier conversation is measured as part of it. Loading the `workflow-commands` skill is the
|
|
21
|
+
// first act of every entry point, and writing the `in-progress` label is the first act every one of
|
|
22
|
+
// them performs on GitHub — so the earliest of the two is taken and neither is required, which is
|
|
23
|
+
// what keeps a delegated unit (whose parent loaded the skill) and a resumed run measurable.
|
|
24
|
+
//
|
|
25
|
+
// **The review boundary sits on whatever call the main line spends the review inside**, and since
|
|
26
|
+
// joshuafolkken/kit#1855 that is an `Agent` call rather than a `Skill` one. Before it, the main line
|
|
27
|
+
// loaded `/code-review` through the `Skill` tool and that call returned three to four minutes later
|
|
28
|
+
// with the finding list — so the `Skill(code-review)` call carried the review's whole duration and
|
|
29
|
+
// was the marker. #1855 moved the review into a forked subagent launched with the `Agent` tool, and
|
|
30
|
+
// the main line no longer loads the skill at all: the `Skill(code-review)` call now lives inside the
|
|
31
|
+
// fork's own transcript, where it returns instantly (it only loads the skill text), and the review's
|
|
32
|
+
// real wall clock is the fork's own `Read`/`grep` spans. Those spans carry no marker of their own, so
|
|
33
|
+
// they inherit the marker of the parent span they run inside — the `Agent` call (`time-overlap.ts`,
|
|
34
|
+
// joshuafolkken/kit#1439). Left unmarked that parent deletes the phase rather than moving it, which is
|
|
35
|
+
// the ~0 ms `review` joshuafolkken/kit#1846 measured. So the `Agent` launch is marked here, exactly
|
|
36
|
+
// as the `Skill` call was, and the old `Skill(code-review)` marker stays for pre-#1855 transcripts.
|
|
37
|
+
//
|
|
38
|
+
// **The launch is recognized by its prompt carrying both `/code-review` and `review:attest`.** The
|
|
39
|
+
// first is the instruction to invoke the review skill; the second is the attestation line
|
|
40
|
+
// `pnpm josh review:brief` emits into the brief the launch passes verbatim (joshuafolkken/kit#1522).
|
|
41
|
+
// Neither alone is enough: an investigation subagent about the review tooling quotes `/code-review`
|
|
42
|
+
// in prose and is handed no brief, so `review:attest` is what tells a genuine review launch from a
|
|
43
|
+
// discussion of one — measured against five real launches, it admits the review and rejects every
|
|
44
|
+
// investigation.
|
|
45
|
+
|
|
46
|
+
type PhaseMarker = 'none' | 'plan' | 'edit' | 'review' | 'workflow'
|
|
47
|
+
|
|
48
|
+
const NO_MARKER: PhaseMarker = 'none'
|
|
49
|
+
const PLAN_MARKER: PhaseMarker = 'plan'
|
|
50
|
+
const EDIT_MARKER: PhaseMarker = 'edit'
|
|
51
|
+
const REVIEW_MARKER: PhaseMarker = 'review'
|
|
52
|
+
const WORKFLOW_MARKER: PhaseMarker = 'workflow'
|
|
53
|
+
|
|
54
|
+
// Writing a new file opens implementation exactly as changing an existing one does, so both count.
|
|
55
|
+
const EDIT_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit'])
|
|
56
|
+
|
|
57
|
+
const SKILL_TOOL = 'Skill'
|
|
58
|
+
const SKILL_KEY = 'skill'
|
|
59
|
+
const REVIEW_SKILL = 'code-review'
|
|
60
|
+
const WORKFLOW_SKILL = 'workflow-commands'
|
|
61
|
+
|
|
62
|
+
// The forked review launch (joshuafolkken/kit#1846). `Agent` is the tool the main line spawns the
|
|
63
|
+
// review subagent with, and `prompt` is where the instruction to it lives.
|
|
64
|
+
const AGENT_TOOL = 'Agent'
|
|
65
|
+
const PROMPT_KEY = 'prompt'
|
|
66
|
+
// Both must be present. `/code-review` is the invocation the launch tells the subagent to run;
|
|
67
|
+
// `review:attest` is the attestation line the passed-through `review:brief` carries and a discussion
|
|
68
|
+
// of the review never does — so the pair admits a genuine review launch and rejects an investigation
|
|
69
|
+
// subagent that merely mentions the review tooling.
|
|
70
|
+
const REVIEW_INVOCATION = '/code-review'
|
|
71
|
+
const REVIEW_ATTEST = 'review:attest'
|
|
72
|
+
|
|
73
|
+
// The two skill calls that are boundaries, keyed by name. A map rather than a second `if`, so a
|
|
74
|
+
// third boundary skill is a row and not another branch through the same function.
|
|
75
|
+
const SKILL_MARKERS = new Map<string, PhaseMarker>([
|
|
76
|
+
[REVIEW_SKILL, REVIEW_MARKER],
|
|
77
|
+
[WORKFLOW_SKILL, WORKFLOW_MARKER],
|
|
78
|
+
])
|
|
79
|
+
|
|
80
|
+
// **The `repos/` prefix is what makes this the API path and not any mention of an issue.** Matching a
|
|
81
|
+
// bare `issues/<N>` alongside a `body=` charged the plan boundary to
|
|
82
|
+
// `pnpm josh notify --issue-url "https://github.com/<owner>/<repo>/issues/<N>" --body=…`, which every
|
|
83
|
+
// mid-run stop sends — so planning would have ended at whichever notification went out first.
|
|
84
|
+
const ISSUE_API_PATTERN = /repos\/\S+\/issues\/\d+/u
|
|
85
|
+
|
|
86
|
+
// The field that separates posting a plan from the other calls made against the same path. The title
|
|
87
|
+
// normalization is `-X PATCH … issues/<N> -f title=…` and the label call is `issues/<N>/labels`;
|
|
88
|
+
// neither writes a body, and both run before the plan in every `fullrun`.
|
|
89
|
+
const BODY_FIELD_PATTERN = /\bbody=/u
|
|
90
|
+
|
|
91
|
+
// `gh issue comment <N> --body …` posts the same comment without an API path, and `--body-file`
|
|
92
|
+
// carries no `body=` at all — so a plan posted either way went undetected under the API form alone.
|
|
93
|
+
const ISSUE_COMMENT_PATTERN = /\bgh\s+issue\s+comment\b/u
|
|
94
|
+
const BODY_FLAG_PATTERN = /--body(?:-file)?\b/u
|
|
95
|
+
|
|
96
|
+
// **The add form, not the label's name anywhere in the command.** The prerequisite branch removes the
|
|
97
|
+
// same label with `-X DELETE …/labels/in-progress`, which is a run ending its hold on an issue rather
|
|
98
|
+
// than opening one — matched loosely, that call would move the run's start to somewhere near its end.
|
|
99
|
+
// The API path is required alongside it for the reason the plan boundary requires one: a command that
|
|
100
|
+
// merely quotes the flag, which this repository's own issue bodies do, is not the call.
|
|
101
|
+
// The number is captured because the same call is the only place a run states, in its own transcript,
|
|
102
|
+
// which issue it is running (joshuafolkken/kit#1617). Capturing changes nothing for the `test` above
|
|
103
|
+
// it — the boundary is still the whole match.
|
|
104
|
+
// **The trailing `(?!\/)` is what keeps the capture on the issue being labelled.** `labels[]=in-progress`
|
|
105
|
+
// only has to appear somewhere in the command, and the capture takes the leftmost match — so one call
|
|
106
|
+
// that removed another issue's label before adding this one would declare the run as that other issue,
|
|
107
|
+
// with nothing to correct it because under lanes this declaration is the only evidence there is. The
|
|
108
|
+
// removal form is `…/labels/in-progress`, so refusing a path continued by a slash leaves exactly the
|
|
109
|
+
// add form. The `test` above is unaffected: it already required the `labels[]=` field, which the
|
|
110
|
+
// removal form does not carry.
|
|
111
|
+
const ISSUE_LABELS_PATTERN = /repos\/\S+\/issues\/(\d+)\/labels\b(?!\/)/u
|
|
112
|
+
const IN_PROGRESS_FIELD = 'labels[]=in-progress'
|
|
113
|
+
|
|
114
|
+
// "This call declares no issue", which is the attribution's own sentinel rather than a second one:
|
|
115
|
+
// what `bash_issue` returns is read by `cost_attribute` and by nothing else, so two spellings of "no
|
|
116
|
+
// issue" could only drift apart.
|
|
117
|
+
const NO_ISSUE = cost_attribute.UNATTRIBUTED_KEY
|
|
118
|
+
|
|
119
|
+
// One string field of a call's input, or `''` where the input is not a record or the field is not a
|
|
120
|
+
// string. Shared by the two calls that read one — the skill name and the agent prompt — so the
|
|
121
|
+
// record guard exists once.
|
|
122
|
+
function string_field(input: unknown, key: string): string {
|
|
123
|
+
if (!json_value.is_record(input)) return ''
|
|
124
|
+
|
|
125
|
+
const value = input[key]
|
|
126
|
+
|
|
127
|
+
return typeof value === 'string' ? value : ''
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function skill_name(input: unknown): string {
|
|
131
|
+
return string_field(input, SKILL_KEY)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// An `Agent` launch's boundary: the review marker when its prompt is a genuine code-review run, and
|
|
135
|
+
// no marker otherwise.
|
|
136
|
+
function agent_marker(input: unknown): PhaseMarker {
|
|
137
|
+
const prompt = string_field(input, PROMPT_KEY)
|
|
138
|
+
const is_review = prompt.includes(REVIEW_INVOCATION) && prompt.includes(REVIEW_ATTEST)
|
|
139
|
+
|
|
140
|
+
return is_review ? REVIEW_MARKER : NO_MARKER
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// A non-Bash call's boundary, read from the tool name and its input.
|
|
144
|
+
function tool_marker(name: string, input: unknown): PhaseMarker {
|
|
145
|
+
if (EDIT_TOOLS.has(name)) return EDIT_MARKER
|
|
146
|
+
if (name === AGENT_TOOL) return agent_marker(input)
|
|
147
|
+
if (name !== SKILL_TOOL) return NO_MARKER
|
|
148
|
+
|
|
149
|
+
return SKILL_MARKERS.get(skill_name(input)) ?? NO_MARKER
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function is_api_body_write(command: string): boolean {
|
|
153
|
+
return ISSUE_API_PATTERN.test(command) && BODY_FIELD_PATTERN.test(command)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function is_issue_comment(command: string): boolean {
|
|
157
|
+
return ISSUE_COMMENT_PATTERN.test(command) && BODY_FLAG_PATTERN.test(command)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function is_in_progress_label(command: string): boolean {
|
|
161
|
+
return ISSUE_LABELS_PATTERN.test(command) && command.includes(IN_PROGRESS_FIELD)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Which issue a Bash call declares its run to be running, or `undefined` where it declares nothing.
|
|
165
|
+
//
|
|
166
|
+
// **Attribution's other evidence is the branch, and a lane run has none to give**
|
|
167
|
+
// (joshuafolkken/kit#1617): the session writing the transcript stays on the default branch while the
|
|
168
|
+
// child's commands run in a linked work tree, so `gitBranch` says `main` on every line and
|
|
169
|
+
// `cost_attribute` has nothing to fill forward. This call is what is left, and it is the right thing
|
|
170
|
+
// to be left with — it is the run naming its own issue, once, and `time-sessions.ts` already treats
|
|
171
|
+
// the same call as the statement of *whose* run a session is.
|
|
172
|
+
//
|
|
173
|
+
// **Only the `in-progress` add form counts**, exactly as the marker above: the `-X DELETE` form ends a
|
|
174
|
+
// run's hold rather than opening one, and every other `issues/<N>/…` call a session makes — an epic
|
|
175
|
+
// insertion, a plan comment, a completion comment — names an issue it is not running.
|
|
176
|
+
// **The declaration is read from the one chained command that makes it, not from the call as a
|
|
177
|
+
// whole.** `&&`, `||` and `;` join independent commands into a single Bash call, and only one of them
|
|
178
|
+
// is the add — so a call that touched another issue's labels first (parking one child and starting
|
|
179
|
+
// another, or removing the label before adding it) would have its *leftmost* issue path captured. The
|
|
180
|
+
// lookahead on the pattern above rules out the removal form; splitting rules out every other one, and
|
|
181
|
+
// it has to be ruled out here rather than corrected later, because under lanes this declaration is
|
|
182
|
+
// the only evidence there is.
|
|
183
|
+
// The surrounding whitespace is deliberately not matched: neither test below is anchored, so the
|
|
184
|
+
// spaces a split leaves on a part change nothing, and `\s*` on both sides of an alternation is the
|
|
185
|
+
// shape `sonarjs/super-linear-regex` refuses.
|
|
186
|
+
const COMMAND_SEPARATOR = /&&|\|\||;/u
|
|
187
|
+
|
|
188
|
+
function label_issue(part: string): number {
|
|
189
|
+
const matched = ISSUE_LABELS_PATTERN.exec(part)
|
|
190
|
+
|
|
191
|
+
return matched?.[1] === undefined ? NO_ISSUE : Number(matched[1])
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function bash_issue(command: string): number {
|
|
195
|
+
for (const part of command.split(COMMAND_SEPARATOR)) {
|
|
196
|
+
if (is_in_progress_label(part)) return label_issue(part)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return NO_ISSUE
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// A Bash call's boundary, read from the command it runs. Two are detected here — writing a body to
|
|
203
|
+
// an issue, and labelling one `in-progress` — because the rest of what Bash marks is already a
|
|
204
|
+
// `pnpm josh <cmd>` name.
|
|
205
|
+
//
|
|
206
|
+
// **Which of those writes is the plan is not decided here**: the completion comment and an
|
|
207
|
+
// auto-decision log take the same shape, so `time-phases.ts` accepts only a marker that closes
|
|
208
|
+
// before the first edit. The label carries no body, so the two tests cannot both match one command.
|
|
209
|
+
function bash_marker(command: string): PhaseMarker {
|
|
210
|
+
if (is_in_progress_label(command)) return WORKFLOW_MARKER
|
|
211
|
+
|
|
212
|
+
return is_api_body_write(command) || is_issue_comment(command) ? PLAN_MARKER : NO_MARKER
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const time_markers = {
|
|
216
|
+
NO_MARKER,
|
|
217
|
+
PLAN_MARKER,
|
|
218
|
+
EDIT_MARKER,
|
|
219
|
+
REVIEW_MARKER,
|
|
220
|
+
WORKFLOW_MARKER,
|
|
221
|
+
NO_ISSUE,
|
|
222
|
+
tool_marker,
|
|
223
|
+
bash_marker,
|
|
224
|
+
bash_issue,
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export type { PhaseMarker }
|
|
228
|
+
export { time_markers }
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// The phase vocabulary — the names a run's wall clock is cut into, the order they print in, and the
|
|
2
|
+
// two tables keyed by them.
|
|
3
|
+
//
|
|
4
|
+
// **It sits apart from `time-phases.ts` for the reason `time-phase-fixture.ts` does**: that file
|
|
5
|
+
// grew past its length limit as phases were added to it, and this is the half with nothing to decide
|
|
6
|
+
// — it says what a phase *is*, while the file it left decides which one a span belongs to. Nothing
|
|
7
|
+
// here imports the classifier, so the dependency runs one way and the next phase added costs one
|
|
8
|
+
// line rather than a fresh argument about where to put it (joshuafolkken/kit#1331).
|
|
9
|
+
|
|
10
|
+
type PhaseName =
|
|
11
|
+
| 'plan'
|
|
12
|
+
| 'setup'
|
|
13
|
+
| 'implement'
|
|
14
|
+
| 'gate'
|
|
15
|
+
| 'rework'
|
|
16
|
+
| 'review'
|
|
17
|
+
| 'pr'
|
|
18
|
+
| 'wrapup'
|
|
19
|
+
| 'ci'
|
|
20
|
+
| 'merge'
|
|
21
|
+
| 'wait'
|
|
22
|
+
| 'wait-outside'
|
|
23
|
+
| 'pre-run'
|
|
24
|
+
| 'post-run'
|
|
25
|
+
| 'other'
|
|
26
|
+
|
|
27
|
+
const PLAN_PHASE: PhaseName = 'plan'
|
|
28
|
+
const SETUP_PHASE: PhaseName = 'setup'
|
|
29
|
+
const IMPLEMENT_PHASE: PhaseName = 'implement'
|
|
30
|
+
const GATE_PHASE: PhaseName = 'gate'
|
|
31
|
+
const REWORK_PHASE: PhaseName = 'rework'
|
|
32
|
+
const REVIEW_PHASE: PhaseName = 'review'
|
|
33
|
+
const PR_PHASE: PhaseName = 'pr'
|
|
34
|
+
const WRAPUP_PHASE: PhaseName = 'wrapup'
|
|
35
|
+
const CI_PHASE: PhaseName = 'ci'
|
|
36
|
+
const MERGE_PHASE: PhaseName = 'merge'
|
|
37
|
+
const WAIT_PHASE: PhaseName = 'wait'
|
|
38
|
+
const WAIT_OUTSIDE_PHASE: PhaseName = 'wait-outside'
|
|
39
|
+
const PRE_RUN_PHASE: PhaseName = 'pre-run'
|
|
40
|
+
const POST_RUN_PHASE: PhaseName = 'post-run'
|
|
41
|
+
const OTHER_PHASE: PhaseName = 'other'
|
|
42
|
+
|
|
43
|
+
// Run order, which is the order they are printed in — by where a phase *opens*, so `wrapup` sits
|
|
44
|
+
// beside the pull request it starts at rather than after the merge it runs beside. The two wait
|
|
45
|
+
// rows, the two outside-the-run rows and `other` come last because none is a stage anything passes
|
|
46
|
+
// through: two are time spent between the stages, two are time that was not the run's at all, and
|
|
47
|
+
// the last is the remainder. **`wait-outside` sits immediately after `wait`** so the two halves of
|
|
48
|
+
// one quantity are read side by side — that comparison is the whole point of the split, and a row
|
|
49
|
+
// placed further down would have to be looked for.
|
|
50
|
+
const PHASE_ORDER: ReadonlyArray<PhaseName> = [
|
|
51
|
+
PLAN_PHASE,
|
|
52
|
+
SETUP_PHASE,
|
|
53
|
+
IMPLEMENT_PHASE,
|
|
54
|
+
GATE_PHASE,
|
|
55
|
+
REWORK_PHASE,
|
|
56
|
+
REVIEW_PHASE,
|
|
57
|
+
PR_PHASE,
|
|
58
|
+
WRAPUP_PHASE,
|
|
59
|
+
CI_PHASE,
|
|
60
|
+
MERGE_PHASE,
|
|
61
|
+
WAIT_PHASE,
|
|
62
|
+
WAIT_OUTSIDE_PHASE,
|
|
63
|
+
PRE_RUN_PHASE,
|
|
64
|
+
POST_RUN_PHASE,
|
|
65
|
+
OTHER_PHASE,
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
// None is a boundary marker, so none can fail to be found: `other` is the remainder, and the two wait
|
|
69
|
+
// rows are read off the span's own category. A run nobody waited on genuinely waited zero minutes,
|
|
70
|
+
// which is the one answer `not detected` must not be given for — so these are detected whenever a
|
|
71
|
+
// transcript was read at all, rather than on a marker.
|
|
72
|
+
//
|
|
73
|
+
// **They are withheld on exactly the terms the three transcript category rows are**
|
|
74
|
+
// (joshuafolkken/kit#1295) — no span read at all. `wait` printing `0.0 min` where nothing was read
|
|
75
|
+
// asserts that nobody waited, and the run that produces it is the one a reader is least able to check.
|
|
76
|
+
// Keying every one of them off the same criterion is also what keeps `wait` + `wait-outside` equal to
|
|
77
|
+
// the `human wait` category row: they are withheld together or printed together, never some of each.
|
|
78
|
+
//
|
|
79
|
+
// **`wait-outside` is in this set rather than detected on the run's edges** (joshuafolkken/kit#1331),
|
|
80
|
+
// which is where it differs from `pre-run` and `post-run`. Its zero is not a claim about an unchecked
|
|
81
|
+
// half, because those two rows report the same two boundaries in their own right — a reader seeing
|
|
82
|
+
// `pre-run not detected` beside `wait-outside 0.0 min` already knows that edge was never found, and
|
|
83
|
+
// a third row saying so would restate it at the price of the invariant above.
|
|
84
|
+
const SPAN_BACKED_PHASES: ReadonlySet<PhaseName> = new Set([
|
|
85
|
+
WAIT_PHASE,
|
|
86
|
+
WAIT_OUTSIDE_PHASE,
|
|
87
|
+
OTHER_PHASE,
|
|
88
|
+
])
|
|
89
|
+
|
|
90
|
+
const GATE_COMMAND = 'josh gate'
|
|
91
|
+
|
|
92
|
+
// The `pnpm josh <cmd>` names `time-spans.ts` already reads off a Bash call, mapped to the phase
|
|
93
|
+
// each one *is*. Read from that field rather than re-detected here, so what counts as a gate run is
|
|
94
|
+
// one rule and not two.
|
|
95
|
+
const COMMAND_PHASES = new Map<string, PhaseName>([
|
|
96
|
+
[GATE_COMMAND, GATE_PHASE],
|
|
97
|
+
['josh git', PR_PHASE],
|
|
98
|
+
['josh pr', PR_PHASE],
|
|
99
|
+
['josh followup', MERGE_PHASE],
|
|
100
|
+
])
|
|
101
|
+
|
|
102
|
+
export type { PhaseName }
|
|
103
|
+
export {
|
|
104
|
+
CI_PHASE,
|
|
105
|
+
COMMAND_PHASES,
|
|
106
|
+
GATE_COMMAND,
|
|
107
|
+
GATE_PHASE,
|
|
108
|
+
IMPLEMENT_PHASE,
|
|
109
|
+
MERGE_PHASE,
|
|
110
|
+
OTHER_PHASE,
|
|
111
|
+
PHASE_ORDER,
|
|
112
|
+
PLAN_PHASE,
|
|
113
|
+
POST_RUN_PHASE,
|
|
114
|
+
PRE_RUN_PHASE,
|
|
115
|
+
PR_PHASE,
|
|
116
|
+
REVIEW_PHASE,
|
|
117
|
+
REWORK_PHASE,
|
|
118
|
+
SETUP_PHASE,
|
|
119
|
+
SPAN_BACKED_PHASES,
|
|
120
|
+
WAIT_OUTSIDE_PHASE,
|
|
121
|
+
WAIT_PHASE,
|
|
122
|
+
WRAPUP_PHASE,
|
|
123
|
+
}
|