@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.
Files changed (1108) hide show
  1. package/.claude/.claude-plugin/plugin.json +11 -0
  2. package/.claude/settings.json +110 -0
  3. package/.claude/skills/dependency-update/SKILL.md +76 -0
  4. package/.claude/skills/epic-commands/SKILL.md +463 -0
  5. package/.claude/skills/verify-ui/SKILL.md +96 -0
  6. package/.claude/skills/workflow-commands/SKILL.md +265 -0
  7. package/.claude/skills/workflow-commands/background-commands.md +130 -0
  8. package/.claude/skills/workflow-commands/backlogrun-child.md +364 -0
  9. package/.claude/skills/workflow-commands/backlogrun-lanes.md +345 -0
  10. package/.claude/skills/workflow-commands/backlogrun-park.md +179 -0
  11. package/.claude/skills/workflow-commands/backlogrun-progress.md +600 -0
  12. package/.claude/skills/workflow-commands/backlogrun-steps.md +604 -0
  13. package/.claude/skills/workflow-commands/backlogrun.md +109 -0
  14. package/.claude/skills/workflow-commands/chain-rule.md +98 -0
  15. package/.claude/skills/workflow-commands/delegation.md +52 -0
  16. package/.claude/skills/workflow-commands/followup-reference.md +118 -0
  17. package/.claude/skills/workflow-commands/followup.md +222 -0
  18. package/.claude/skills/workflow-commands/fullrun-steps.md +93 -0
  19. package/.claude/skills/workflow-commands/fullrun.md +82 -0
  20. package/.claude/skills/workflow-commands/halfrun.md +73 -0
  21. package/.claude/skills/workflow-commands/into-target.md +48 -0
  22. package/.claude/skills/workflow-commands/issue-comments.md +109 -0
  23. package/.claude/skills/workflow-commands/issue-fold-existing.md +27 -0
  24. package/.claude/skills/workflow-commands/issue-scout.md +45 -0
  25. package/.claude/skills/workflow-commands/kickoff.md +82 -0
  26. package/.claude/skills/workflow-commands/latest-gate.md +85 -0
  27. package/.claude/skills/workflow-commands/needs-human-review.md +64 -0
  28. package/.claude/skills/workflow-commands/observation-filing.md +349 -0
  29. package/.claude/skills/workflow-commands/pre-gate-cut.md +340 -0
  30. package/.claude/skills/workflow-commands/prerequisite.md +62 -0
  31. package/.claude/skills/workflow-commands/retrospective.md +81 -0
  32. package/.claude/skills/workflow-commands/rule-residency.md +267 -0
  33. package/.claude/skills/workflow-commands/split-assessment.md +130 -0
  34. package/.claude/skills/workflow-commands/target-repository.md +58 -0
  35. package/.claude/skills/workflow-commands/working-tree-hold.md +66 -0
  36. package/.claude-plugin/marketplace.json +15 -0
  37. package/.coderabbit.yaml +50 -0
  38. package/.codex/config.toml +8 -0
  39. package/.codex/hooks.json +71 -0
  40. package/.cursorrules +45 -0
  41. package/.gitattributes +7 -0
  42. package/.github/dependabot.yml +19 -0
  43. package/.github/pull_request_template.md +1 -0
  44. package/.github/release.yml +18 -0
  45. package/.github/workflows/auto-tag.yml +111 -0
  46. package/.github/workflows/ci.yml +681 -0
  47. package/.github/workflows/dependabot-auto-merge.yml +55 -0
  48. package/.github/workflows/production.yml +47 -0
  49. package/.github/workflows/publish.yml +39 -0
  50. package/.github/workflows/sonar-qube.yml +34 -0
  51. package/.mcp.json +8 -0
  52. package/.ncurc.json +3 -0
  53. package/.prettierignore +20 -0
  54. package/.vscode/extensions.json +21 -0
  55. package/.vscode/settings.json +41 -0
  56. package/AGENTS.md +29 -0
  57. package/CLAUDE.md +207 -0
  58. package/CODE_OF_CONDUCT.md +132 -0
  59. package/GEMINI.md +30 -0
  60. package/LICENSE +21 -0
  61. package/README.md +41 -0
  62. package/SECURITY.md +34 -0
  63. package/cspell/index.yaml +177 -0
  64. package/dist/CLAUDE.md +207 -0
  65. package/dist/config-merge/index.d.ts +29 -0
  66. package/dist/config-merge/index.js +459 -0
  67. package/dist/hooks/batch-guard.js +28 -0
  68. package/dist/hooks/chunk-25JL6FMS.js +4970 -0
  69. package/dist/hooks/chunk-2ANGT3XM.js +375 -0
  70. package/dist/hooks/chunk-2EI5GBSW.js +42 -0
  71. package/dist/hooks/chunk-2OT5XE2N.js +5014 -0
  72. package/dist/hooks/chunk-2RUPMGGV.js +137 -0
  73. package/dist/hooks/chunk-2XIGZQMQ.js +3299 -0
  74. package/dist/hooks/chunk-33ELOKEV.js +910 -0
  75. package/dist/hooks/chunk-33YRTKM7.js +230 -0
  76. package/dist/hooks/chunk-36JQU5NN.js +77 -0
  77. package/dist/hooks/chunk-3EJBTWVS.js +1769 -0
  78. package/dist/hooks/chunk-3FK5SFAC.js +432 -0
  79. package/dist/hooks/chunk-3PWPYDD2.js +240 -0
  80. package/dist/hooks/chunk-3TQU7TDH.js +375 -0
  81. package/dist/hooks/chunk-3TVLSFZ6.js +432 -0
  82. package/dist/hooks/chunk-3VXYCB4E.js +77 -0
  83. package/dist/hooks/chunk-44M6JXGV.js +3398 -0
  84. package/dist/hooks/chunk-46EEEHC3.js +240 -0
  85. package/dist/hooks/chunk-4A7UVP2P.js +364 -0
  86. package/dist/hooks/chunk-4LFQEZS4.js +137 -0
  87. package/dist/hooks/chunk-4OCX3V2T.js +469 -0
  88. package/dist/hooks/chunk-4OHA5DE7.js +49 -0
  89. package/dist/hooks/chunk-4PMDW3YD.js +68 -0
  90. package/dist/hooks/chunk-4QHBNAI4.js +68 -0
  91. package/dist/hooks/chunk-4SSB3FEE.js +3273 -0
  92. package/dist/hooks/chunk-5A2WQ2CQ.js +5390 -0
  93. package/dist/hooks/chunk-5EVA2JQB.js +5390 -0
  94. package/dist/hooks/chunk-5P7VF5VE.js +3230 -0
  95. package/dist/hooks/chunk-5QWJGGZP.js +49 -0
  96. package/dist/hooks/chunk-5U5EZYG6.js +77 -0
  97. package/dist/hooks/chunk-5VUUF3ZV.js +240 -0
  98. package/dist/hooks/chunk-5WA7UBT3.js +374 -0
  99. package/dist/hooks/chunk-6EBGRQ3Q.js +301 -0
  100. package/dist/hooks/chunk-6TVHWMD3.js +432 -0
  101. package/dist/hooks/chunk-6V5OPIUU.js +13 -0
  102. package/dist/hooks/chunk-6VAGLEMB.js +68 -0
  103. package/dist/hooks/chunk-75BTXKFJ.js +3424 -0
  104. package/dist/hooks/chunk-75RHN67S.js +137 -0
  105. package/dist/hooks/chunk-76KC3BDD.js +3414 -0
  106. package/dist/hooks/chunk-76SLS7CZ.js +898 -0
  107. package/dist/hooks/chunk-7DHZ4DWT.js +5015 -0
  108. package/dist/hooks/chunk-7INSJDGE.js +458 -0
  109. package/dist/hooks/chunk-7VJ4FTDX.js +268 -0
  110. package/dist/hooks/chunk-7XCYNHQK.js +77 -0
  111. package/dist/hooks/chunk-A5YJ3H7E.js +375 -0
  112. package/dist/hooks/chunk-AAEXXUUL.js +268 -0
  113. package/dist/hooks/chunk-ABVEVV2M.js +432 -0
  114. package/dist/hooks/chunk-ACN3YXFL.js +68 -0
  115. package/dist/hooks/chunk-AD3XE3QZ.js +397 -0
  116. package/dist/hooks/chunk-AENFZPZH.js +230 -0
  117. package/dist/hooks/chunk-AFKRFQ6W.js +68 -0
  118. package/dist/hooks/chunk-AHD5IPWI.js +375 -0
  119. package/dist/hooks/chunk-AMK5JGV7.js +77 -0
  120. package/dist/hooks/chunk-ARN7NCQI.js +425 -0
  121. package/dist/hooks/chunk-AUFY653N.js +3425 -0
  122. package/dist/hooks/chunk-AXQBNFEF.js +375 -0
  123. package/dist/hooks/chunk-AYC7R6U4.js +3316 -0
  124. package/dist/hooks/chunk-AYEA2FJ7.js +5015 -0
  125. package/dist/hooks/chunk-B2LIXYFL.js +77 -0
  126. package/dist/hooks/chunk-B4HPNY2I.js +375 -0
  127. package/dist/hooks/chunk-B4YNCUGB.js +469 -0
  128. package/dist/hooks/chunk-B57S3VWT.js +922 -0
  129. package/dist/hooks/chunk-BINZ3PLI.js +364 -0
  130. package/dist/hooks/chunk-BIWLABFK.js +432 -0
  131. package/dist/hooks/chunk-BODUSXKK.js +410 -0
  132. package/dist/hooks/chunk-BQBAT2YK.js +375 -0
  133. package/dist/hooks/chunk-BUJEBW75.js +391 -0
  134. package/dist/hooks/chunk-BVNWORKA.js +72 -0
  135. package/dist/hooks/chunk-BWI47LQS.js +5205 -0
  136. package/dist/hooks/chunk-C25HRMJX.js +137 -0
  137. package/dist/hooks/chunk-CBFZNC74.js +375 -0
  138. package/dist/hooks/chunk-CECYXS4Y.js +3424 -0
  139. package/dist/hooks/chunk-CELGUP5F.js +49 -0
  140. package/dist/hooks/chunk-CMHANU3F.js +3442 -0
  141. package/dist/hooks/chunk-CMN372LI.js +68 -0
  142. package/dist/hooks/chunk-CPGZLMMK.js +3299 -0
  143. package/dist/hooks/chunk-CTQKXDC7.js +268 -0
  144. package/dist/hooks/chunk-CYAT4RIT.js +68 -0
  145. package/dist/hooks/chunk-CYTWYCH2.js +5014 -0
  146. package/dist/hooks/chunk-CZSOLRBA.js +77 -0
  147. package/dist/hooks/chunk-D2PIDYJR.js +3438 -0
  148. package/dist/hooks/chunk-DE57HI6T.js +137 -0
  149. package/dist/hooks/chunk-DGXDGAPG.js +5306 -0
  150. package/dist/hooks/chunk-DNYRSYQG.js +5014 -0
  151. package/dist/hooks/chunk-DTAXH2A2.js +240 -0
  152. package/dist/hooks/chunk-E2IZUWI5.js +375 -0
  153. package/dist/hooks/chunk-E4L2K2BL.js +397 -0
  154. package/dist/hooks/chunk-E55NKX5F.js +68 -0
  155. package/dist/hooks/chunk-ECXVCCVD.js +3079 -0
  156. package/dist/hooks/chunk-EPHO443D.js +68 -0
  157. package/dist/hooks/chunk-EUFK2BI2.js +375 -0
  158. package/dist/hooks/chunk-EYCD5ZAV.js +137 -0
  159. package/dist/hooks/chunk-F2SDYJU4.js +240 -0
  160. package/dist/hooks/chunk-F4B5D5TF.js +68 -0
  161. package/dist/hooks/chunk-FGEO3NDX.js +432 -0
  162. package/dist/hooks/chunk-FJYI52RE.js +137 -0
  163. package/dist/hooks/chunk-FXAKJKTB.js +18 -0
  164. package/dist/hooks/chunk-FYTZHIY4.js +3085 -0
  165. package/dist/hooks/chunk-G7JL2A5K.js +375 -0
  166. package/dist/hooks/chunk-GA3ITDBW.js +42 -0
  167. package/dist/hooks/chunk-GDR4H4SV.js +469 -0
  168. package/dist/hooks/chunk-GFKDXPSM.js +2855 -0
  169. package/dist/hooks/chunk-GIMRTKFU.js +566 -0
  170. package/dist/hooks/chunk-GOPHRLGO.js +240 -0
  171. package/dist/hooks/chunk-GX4HO7SJ.js +230 -0
  172. package/dist/hooks/chunk-GXKKK23T.js +240 -0
  173. package/dist/hooks/chunk-GZ6FUVIK.js +566 -0
  174. package/dist/hooks/chunk-H5HPY5M5.js +2869 -0
  175. package/dist/hooks/chunk-HCF3OGEE.js +1829 -0
  176. package/dist/hooks/chunk-HDEXAOUM.js +469 -0
  177. package/dist/hooks/chunk-HM2TY3TN.js +469 -0
  178. package/dist/hooks/chunk-HOA7NXA2.js +55 -0
  179. package/dist/hooks/chunk-HOFEWH6H.js +240 -0
  180. package/dist/hooks/chunk-HUUI6S5J.js +2669 -0
  181. package/dist/hooks/chunk-I4D3NVUD.js +469 -0
  182. package/dist/hooks/chunk-I4Q6WAJE.js +68 -0
  183. package/dist/hooks/chunk-IB6N4CR2.js +432 -0
  184. package/dist/hooks/chunk-IFLDYJMD.js +469 -0
  185. package/dist/hooks/chunk-IGU466YD.js +77 -0
  186. package/dist/hooks/chunk-IJCQUHKY.js +375 -0
  187. package/dist/hooks/chunk-IKUMBDJB.js +230 -0
  188. package/dist/hooks/chunk-IM3BDIBJ.js +5005 -0
  189. package/dist/hooks/chunk-IMYMAODK.js +3431 -0
  190. package/dist/hooks/chunk-IN2ZVGXA.js +5005 -0
  191. package/dist/hooks/chunk-ITVJ2MKQ.js +18 -0
  192. package/dist/hooks/chunk-J5RIJYTM.js +2669 -0
  193. package/dist/hooks/chunk-JFLMH4K5.js +3460 -0
  194. package/dist/hooks/chunk-JR25IFML.js +77 -0
  195. package/dist/hooks/chunk-JT5AUXFI.js +432 -0
  196. package/dist/hooks/chunk-JY5YVN6N.js +3234 -0
  197. package/dist/hooks/chunk-K5Q4ETVI.js +391 -0
  198. package/dist/hooks/chunk-K67V2F24.js +137 -0
  199. package/dist/hooks/chunk-KABG6AEW.js +3460 -0
  200. package/dist/hooks/chunk-KATZESEC.js +3273 -0
  201. package/dist/hooks/chunk-KFH4H7W7.js +469 -0
  202. package/dist/hooks/chunk-KMUEI6RX.js +910 -0
  203. package/dist/hooks/chunk-KMV4OY77.js +3438 -0
  204. package/dist/hooks/chunk-KQAZNWEY.js +137 -0
  205. package/dist/hooks/chunk-KZZR6JER.js +5015 -0
  206. package/dist/hooks/chunk-LAR6DREP.js +77 -0
  207. package/dist/hooks/chunk-LNCJWEZD.js +5015 -0
  208. package/dist/hooks/chunk-LRYD2GLM.js +6 -0
  209. package/dist/hooks/chunk-LXBKYHDV.js +77 -0
  210. package/dist/hooks/chunk-LYLKIUNE.js +5024 -0
  211. package/dist/hooks/chunk-LZKCFOVC.js +432 -0
  212. package/dist/hooks/chunk-M4FCIYRI.js +77 -0
  213. package/dist/hooks/chunk-M5M7327Q.js +3425 -0
  214. package/dist/hooks/chunk-MF72MHSX.js +3455 -0
  215. package/dist/hooks/chunk-MK56LKDO.js +397 -0
  216. package/dist/hooks/chunk-N3MJADY7.js +240 -0
  217. package/dist/hooks/chunk-NFQSUDBN.js +458 -0
  218. package/dist/hooks/chunk-NHREKY45.js +137 -0
  219. package/dist/hooks/chunk-NP5TTAAW.js +375 -0
  220. package/dist/hooks/chunk-NQTLTKTJ.js +2993 -0
  221. package/dist/hooks/chunk-NVRCZPBZ.js +391 -0
  222. package/dist/hooks/chunk-O46HMMLJ.js +469 -0
  223. package/dist/hooks/chunk-OFJGH2L4.js +240 -0
  224. package/dist/hooks/chunk-OLFMCZH5.js +240 -0
  225. package/dist/hooks/chunk-OMCZS46I.js +49 -0
  226. package/dist/hooks/chunk-OQZEZW5G.js +469 -0
  227. package/dist/hooks/chunk-P2MDAT2Y.js +1897 -0
  228. package/dist/hooks/chunk-P3M2JJIF.js +68 -0
  229. package/dist/hooks/chunk-PDVHQITQ.js +3453 -0
  230. package/dist/hooks/chunk-PNT2AMDH.js +391 -0
  231. package/dist/hooks/chunk-PR2LVSY6.js +3445 -0
  232. package/dist/hooks/chunk-PRR5R4JK.js +137 -0
  233. package/dist/hooks/chunk-PXT44QVN.js +566 -0
  234. package/dist/hooks/chunk-PZLWJLAP.js +469 -0
  235. package/dist/hooks/chunk-Q2FEAZJ2.js +77 -0
  236. package/dist/hooks/chunk-Q32WETDO.js +3265 -0
  237. package/dist/hooks/chunk-Q45DUBLE.js +3600 -0
  238. package/dist/hooks/chunk-Q7NZSWQ5.js +240 -0
  239. package/dist/hooks/chunk-QH2JNAMK.js +3085 -0
  240. package/dist/hooks/chunk-QNNWYQ2R.js +375 -0
  241. package/dist/hooks/chunk-QPU5H2OS.js +68 -0
  242. package/dist/hooks/chunk-QRAHZ5TO.js +1829 -0
  243. package/dist/hooks/chunk-QUZ5HPIE.js +469 -0
  244. package/dist/hooks/chunk-QVCRG34O.js +2893 -0
  245. package/dist/hooks/chunk-R3MY4E3S.js +1675 -0
  246. package/dist/hooks/chunk-R6TXJJXP.js +77 -0
  247. package/dist/hooks/chunk-REJU6VT7.js +1829 -0
  248. package/dist/hooks/chunk-REQAQLRC.js +2993 -0
  249. package/dist/hooks/chunk-RFCXPAHH.js +391 -0
  250. package/dist/hooks/chunk-RHI6Y22X.js +137 -0
  251. package/dist/hooks/chunk-RKZVOBBS.js +469 -0
  252. package/dist/hooks/chunk-RL57TT2Y.js +566 -0
  253. package/dist/hooks/chunk-RORDOD4S.js +3321 -0
  254. package/dist/hooks/chunk-RZKYW5P2.js +77 -0
  255. package/dist/hooks/chunk-SJPJ6VSI.js +391 -0
  256. package/dist/hooks/chunk-SKSIJQQQ.js +432 -0
  257. package/dist/hooks/chunk-SSQDZKXG.js +268 -0
  258. package/dist/hooks/chunk-SSX23SJ2.js +89 -0
  259. package/dist/hooks/chunk-SYHFKE4C.js +77 -0
  260. package/dist/hooks/chunk-TCGNI2ZY.js +42 -0
  261. package/dist/hooks/chunk-TG3WXJF5.js +137 -0
  262. package/dist/hooks/chunk-TH7IJAY5.js +77 -0
  263. package/dist/hooks/chunk-TLZ27PCY.js +240 -0
  264. package/dist/hooks/chunk-U652FXTN.js +566 -0
  265. package/dist/hooks/chunk-UEK47YUF.js +268 -0
  266. package/dist/hooks/chunk-UIO45H3O.js +432 -0
  267. package/dist/hooks/chunk-UNLZEEVH.js +5005 -0
  268. package/dist/hooks/chunk-UNRVF3SZ.js +432 -0
  269. package/dist/hooks/chunk-USLFAFOI.js +3453 -0
  270. package/dist/hooks/chunk-VAEELMLL.js +442 -0
  271. package/dist/hooks/chunk-VALSWLDQ.js +3453 -0
  272. package/dist/hooks/chunk-VC5JEPNY.js +3398 -0
  273. package/dist/hooks/chunk-VEZVK6C7.js +230 -0
  274. package/dist/hooks/chunk-VK5JKFAR.js +49 -0
  275. package/dist/hooks/chunk-VNF2KP7Z.js +469 -0
  276. package/dist/hooks/chunk-VWWCUMW6.js +2669 -0
  277. package/dist/hooks/chunk-W4JARUQV.js +137 -0
  278. package/dist/hooks/chunk-WCYPBPJC.js +5014 -0
  279. package/dist/hooks/chunk-WEOBMNJG.js +2993 -0
  280. package/dist/hooks/chunk-WKJU3J5Y.js +5390 -0
  281. package/dist/hooks/chunk-WMN4TSVF.js +3299 -0
  282. package/dist/hooks/chunk-WNON54PT.js +3469 -0
  283. package/dist/hooks/chunk-WOVKBPPX.js +137 -0
  284. package/dist/hooks/chunk-WRVFORYJ.js +432 -0
  285. package/dist/hooks/chunk-WUBVYGQZ.js +240 -0
  286. package/dist/hooks/chunk-WWULTUOM.js +68 -0
  287. package/dist/hooks/chunk-WXHKKB45.js +4962 -0
  288. package/dist/hooks/chunk-XAI3YTHJ.js +469 -0
  289. package/dist/hooks/chunk-XFZH6JZJ.js +77 -0
  290. package/dist/hooks/chunk-XGPWX6IA.js +137 -0
  291. package/dist/hooks/chunk-XIXXIVGY.js +566 -0
  292. package/dist/hooks/chunk-XKDOYJGA.js +922 -0
  293. package/dist/hooks/chunk-YALTVBHM.js +432 -0
  294. package/dist/hooks/chunk-YEBEPBFK.js +5014 -0
  295. package/dist/hooks/chunk-YI2BQ3DK.js +3441 -0
  296. package/dist/hooks/chunk-YVNBCFGG.js +1829 -0
  297. package/dist/hooks/chunk-YXBN3RGG.js +432 -0
  298. package/dist/hooks/chunk-Z2OOJSW3.js +3163 -0
  299. package/dist/hooks/chunk-ZA3HVBOY.js +2644 -0
  300. package/dist/hooks/chunk-ZKID46U3.js +137 -0
  301. package/dist/hooks/chunk-ZPMU2JV6.js +49 -0
  302. package/dist/hooks/chunk-ZRKY4W7O.js +432 -0
  303. package/dist/hooks/chunk-ZTMRB7LJ.js +268 -0
  304. package/dist/hooks/chunk-ZVPPBQ3L.js +3413 -0
  305. package/dist/hooks/codex-hook-adapter.js +164 -0
  306. package/dist/hooks/duplicate-read-guard.js +29 -0
  307. package/dist/hooks/format-edited.js +37 -0
  308. package/dist/hooks/investigation-guard.js +31 -0
  309. package/dist/hooks/pretool-guard.js +21 -0
  310. package/dist/hooks/session-lang.js +34 -0
  311. package/dist/hooks/stop-guard.js +1597 -0
  312. package/dist/josh.js +1795 -0
  313. package/dist/managed-marker/index.d.ts +10 -0
  314. package/dist/managed-marker/index.js +32 -0
  315. package/dist/self-sync-guard/index.d.ts +10 -0
  316. package/dist/self-sync-guard/index.js +49 -0
  317. package/dist/version/index.d.ts +93 -0
  318. package/dist/version/index.js +1024 -0
  319. package/env/index.d.ts +7 -0
  320. package/env/index.js +62 -0
  321. package/eslint/base.js +233 -0
  322. package/eslint/checkout-rooted-parser.js +34 -0
  323. package/eslint/config-fingerprint.js +103 -0
  324. package/eslint/rules/code-quality.js +292 -0
  325. package/eslint/rules/english-only-prose.js +135 -0
  326. package/eslint/rules/formatting.js +44 -0
  327. package/eslint/rules/import.js +83 -0
  328. package/eslint/rules/namespace-object-export.js +107 -0
  329. package/eslint/rules/naming-convention.js +109 -0
  330. package/eslint/rules/promise.js +17 -0
  331. package/eslint/rules/sonarjs.js +45 -0
  332. package/eslint/rules/test-filename.js +91 -0
  333. package/eslint/rules/typescript.js +186 -0
  334. package/eslint/rules/unicorn.js +191 -0
  335. package/eslint/vanilla.js +1 -0
  336. package/evals/scenarios/consult-not-execute.json +20 -0
  337. package/evals/scenarios/no-implicit-workflow.json +26 -0
  338. package/evals/scenarios/overrides-both-locations.json +29 -0
  339. package/evals/scenarios/upstream-interrupt.json +23 -0
  340. package/evals/scenarios/workflow-skill-loaded.json +16 -0
  341. package/lefthook/base.yml +131 -0
  342. package/lefthook/vanilla.yml +7 -0
  343. package/package.json +169 -0
  344. package/playwright.config.ts +160 -0
  345. package/pnpm-workspace.yaml +41 -0
  346. package/ports/index.d.ts +17 -0
  347. package/ports/index.js +256 -0
  348. package/prettier/index.d.ts +3 -0
  349. package/prettier/index.js +31 -0
  350. package/prompts/agent-lint-protocol.json +79 -0
  351. package/prompts/agent-rules.md +63 -0
  352. package/prompts/coding-standards.md +382 -0
  353. package/prompts/collaboration-workflow/consultation-vs-execution.md +8 -0
  354. package/prompts/collaboration-workflow/cross-repo-epic.md +54 -0
  355. package/prompts/collaboration-workflow/distributed-docs.md +7 -0
  356. package/prompts/collaboration-workflow/durable-rules.md +24 -0
  357. package/prompts/collaboration-workflow/epic-audit.md +56 -0
  358. package/prompts/collaboration-workflow/epic-bundle.md +109 -0
  359. package/prompts/collaboration-workflow/file-edits.md +124 -0
  360. package/prompts/collaboration-workflow/gh-rest.md +57 -0
  361. package/prompts/collaboration-workflow/issue-citation.md +38 -0
  362. package/prompts/collaboration-workflow/issue-template.md +190 -0
  363. package/prompts/collaboration-workflow/latest-first.md +14 -0
  364. package/prompts/collaboration-workflow/no-clones.md +11 -0
  365. package/prompts/collaboration-workflow/operating-rules.md +123 -0
  366. package/prompts/collaboration-workflow/output-bounds.md +107 -0
  367. package/prompts/collaboration-workflow/overview.md +35 -0
  368. package/prompts/collaboration-workflow/plan-comment.md +85 -0
  369. package/prompts/collaboration-workflow/proposal-request.md +23 -0
  370. package/prompts/collaboration-workflow/report-format.md +206 -0
  371. package/prompts/collaboration-workflow/residency.md +94 -0
  372. package/prompts/collaboration-workflow/rule-delivery.md +146 -0
  373. package/prompts/collaboration-workflow/shell-body.md +82 -0
  374. package/prompts/collaboration-workflow/simplicity-first.md +9 -0
  375. package/prompts/collaboration-workflow/single-source-rules.md +13 -0
  376. package/prompts/collaboration-workflow/turn-batching.md +137 -0
  377. package/prompts/collaboration-workflow/upstream-interrupt.md +51 -0
  378. package/prompts/collaboration-workflow/wip-cap.md +118 -0
  379. package/prompts/collaboration-workflow.md +52 -0
  380. package/prompts/refactoring.md +103 -0
  381. package/prompts/review-rubric.md +338 -0
  382. package/prompts/review.md +217 -0
  383. package/prompts/sonar-hotspot-handling.md +77 -0
  384. package/prompts/testing-guide.md +277 -0
  385. package/scripts/adopt/adopt-logic.ts +107 -0
  386. package/scripts/adopt/adopt-toolkits.ts +181 -0
  387. package/scripts/adopt/adopt.ts +171 -0
  388. package/scripts/agent/agent-argv.ts +140 -0
  389. package/scripts/agent/agent-diagnostics.ts +120 -0
  390. package/scripts/agent/agent-event.ts +173 -0
  391. package/scripts/agent/agent-exit-record.ts +32 -0
  392. package/scripts/agent/agent-launch-environment.ts +71 -0
  393. package/scripts/agent/agent-role-profile.ts +329 -0
  394. package/scripts/agent/api-outage.ts +51 -0
  395. package/scripts/agent/claude-agent-argv.ts +151 -0
  396. package/scripts/agent/claude-result-event.ts +98 -0
  397. package/scripts/agent/codex-agent-argv.ts +94 -0
  398. package/scripts/agent/codex-home-source.ts +11 -0
  399. package/scripts/agent/interactive-ask.ts +91 -0
  400. package/scripts/auto-ok/auto-ok-cli.ts +516 -0
  401. package/scripts/backlog/backlog-arrival.ts +147 -0
  402. package/scripts/backlog/backlog-budget-cli.ts +220 -0
  403. package/scripts/backlog/backlog-budget.ts +284 -0
  404. package/scripts/backlog/backlog-defect-priority.ts +77 -0
  405. package/scripts/backlog/backlog-drive-cli.ts +377 -0
  406. package/scripts/backlog/backlog-drive-finish.ts +23 -0
  407. package/scripts/backlog/backlog-drive-named-offer.ts +81 -0
  408. package/scripts/backlog/backlog-drive-named.ts +101 -0
  409. package/scripts/backlog/backlog-drive-offer-argv.ts +29 -0
  410. package/scripts/backlog/backlog-drive-owner.ts +22 -0
  411. package/scripts/backlog/backlog-drive-restore.ts +67 -0
  412. package/scripts/backlog/backlog-drive.ts +322 -0
  413. package/scripts/backlog/backlog-named.ts +164 -0
  414. package/scripts/backlog/backlog-next.ts +376 -0
  415. package/scripts/backlog/backlog-offer-cli.ts +279 -0
  416. package/scripts/backlog/backlog-offer.ts +93 -0
  417. package/scripts/backlog/backlog-plan-cli.ts +235 -0
  418. package/scripts/backlog/backlog-plan.ts +231 -0
  419. package/scripts/backlog/backlog-pool.ts +322 -0
  420. package/scripts/backlog/backlog-ready.ts +146 -0
  421. package/scripts/backlog/backlog-scope.ts +144 -0
  422. package/scripts/backlog/backlog-stalled-cli.ts +30 -0
  423. package/scripts/backlog/backlog-stalled-detect.ts +143 -0
  424. package/scripts/backlog/backlog-stalled.ts +118 -0
  425. package/scripts/behavior/behavior-assertion.ts +87 -0
  426. package/scripts/behavior/behavior-cli.ts +88 -0
  427. package/scripts/behavior/behavior-rules.ts +128 -0
  428. package/scripts/build/build-bin.ts +36 -0
  429. package/scripts/build/build-claude-md.ts +42 -0
  430. package/scripts/build/build-config-merge.ts +26 -0
  431. package/scripts/build/build-hooks.ts +79 -0
  432. package/scripts/build/build-library.ts +83 -0
  433. package/scripts/build/build-managed-marker.ts +26 -0
  434. package/scripts/build/build-self-sync-guard.ts +26 -0
  435. package/scripts/build/build-version.ts +25 -0
  436. package/scripts/build/local-bin.ts +97 -0
  437. package/scripts/build/shim-shell.ts +25 -0
  438. package/scripts/bytes/bytes-command.ts +181 -0
  439. package/scripts/cases/cases-cli.ts +48 -0
  440. package/scripts/cases/cases-logic.ts +100 -0
  441. package/scripts/claude/skill-meta.ts +37 -0
  442. package/scripts/claude/workflow-destination.ts +13 -0
  443. package/scripts/clone/clone-aggregate.ts +76 -0
  444. package/scripts/clone/clone-fingerprint.ts +96 -0
  445. package/scripts/clone/clone-scan-cli.ts +39 -0
  446. package/scripts/clone/clone-scan.ts +158 -0
  447. package/scripts/config-merge/index.ts +19 -0
  448. package/scripts/config-merge/json-format.ts +128 -0
  449. package/scripts/config-merge/list-patch.ts +61 -0
  450. package/scripts/config-merge/parse-jsonc.ts +14 -0
  451. package/scripts/config-merge/patch-json-key.ts +439 -0
  452. package/scripts/config-merge/patch-json-list.ts +38 -0
  453. package/scripts/config-merge/patch-yaml-list.ts +107 -0
  454. package/scripts/cost-runtime/codex-usage.ts +119 -0
  455. package/scripts/cost-runtime/context-cut-payback.ts +77 -0
  456. package/scripts/cost-runtime/context-cut-threshold.ts +21 -0
  457. package/scripts/cost-runtime/cost-attribute.ts +168 -0
  458. package/scripts/cost-runtime/cost-blocks.ts +149 -0
  459. package/scripts/cost-runtime/cost-cli.ts +318 -0
  460. package/scripts/cost-runtime/cost-corpus.ts +278 -0
  461. package/scripts/cost-runtime/cost-format.ts +32 -0
  462. package/scripts/cost-runtime/cost-pricing.ts +176 -0
  463. package/scripts/cost-runtime/cost-tokens.ts +84 -0
  464. package/scripts/cost-runtime/cost-transcript.ts +531 -0
  465. package/scripts/cost-runtime/cost-usage.ts +287 -0
  466. package/scripts/cost-runtime/cost-verdict.ts +89 -0
  467. package/scripts/cost-runtime/own-session.ts +58 -0
  468. package/scripts/cost-runtime/transcript-cwd.ts +14 -0
  469. package/scripts/delegation/delegation-cli.ts +91 -0
  470. package/scripts/delegation/delegation-policy.ts +178 -0
  471. package/scripts/delegation/duplicate-read-guard.ts +244 -0
  472. package/scripts/delegation/fanout-cli.ts +61 -0
  473. package/scripts/delegation/fanout.ts +95 -0
  474. package/scripts/delegation/investigation-guard.ts +131 -0
  475. package/scripts/delegation/investigation-reads.ts +637 -0
  476. package/scripts/discovery/repo-discovery.ts +166 -0
  477. package/scripts/discovery/repo-map-logic.ts +102 -0
  478. package/scripts/discovery/repo-origin.ts +153 -0
  479. package/scripts/discovery/repo-party-cli.ts +69 -0
  480. package/scripts/discovery/repo-party.ts +46 -0
  481. package/scripts/doctor/doctor-consumer.ts +181 -0
  482. package/scripts/doctor/doctor-io.ts +210 -0
  483. package/scripts/doctor/doctor-logic.ts +122 -0
  484. package/scripts/doctor/doctor-ports.ts +117 -0
  485. package/scripts/doctor/doctor.ts +232 -0
  486. package/scripts/document/backlogrun-parent-read-set.ts +48 -0
  487. package/scripts/document/bash-output-cap.ts +45 -0
  488. package/scripts/document/document-byte-budget.ts +183 -0
  489. package/scripts/document/document-byte-check.ts +131 -0
  490. package/scripts/document/document-reachability.ts +131 -0
  491. package/scripts/document/document-read-cli.ts +82 -0
  492. package/scripts/document/document-scan.ts +108 -0
  493. package/scripts/document/document-section-cli.ts +101 -0
  494. package/scripts/document/document-section.ts +156 -0
  495. package/scripts/document/edit-files-cli.ts +280 -0
  496. package/scripts/document/entry-read-budget.ts +154 -0
  497. package/scripts/document/entry-read-set.ts +471 -0
  498. package/scripts/document/generate-catalog.ts +69 -0
  499. package/scripts/document/lane-child-read-set.ts +88 -0
  500. package/scripts/document/read-files-cli.ts +135 -0
  501. package/scripts/document/read-set-cli.ts +295 -0
  502. package/scripts/document/read-set-point-of-use.ts +89 -0
  503. package/scripts/document/read-set-pricing.ts +52 -0
  504. package/scripts/document/read-set-trim.ts +78 -0
  505. package/scripts/document/retired-phrases.ts +143 -0
  506. package/scripts/document/review-agent-type.ts +46 -0
  507. package/scripts/document/single-source.ts +73 -0
  508. package/scripts/epic/epic-audit-checks.ts +452 -0
  509. package/scripts/epic/epic-audit-cli.ts +374 -0
  510. package/scripts/epic/epic-audit-orphans.ts +142 -0
  511. package/scripts/epic/epic-audit-rationale.ts +191 -0
  512. package/scripts/epic/epic-audit-report.ts +101 -0
  513. package/scripts/epic/epic-audit.ts +240 -0
  514. package/scripts/epic/epic-bundle-cli.ts +472 -0
  515. package/scripts/epic/epic-bundle-evidence.ts +147 -0
  516. package/scripts/epic/epic-bundle-gaps.ts +86 -0
  517. package/scripts/epic/epic-bundle-referenced.ts +195 -0
  518. package/scripts/epic/epic-bundle.ts +309 -0
  519. package/scripts/epic/epic-busy.ts +204 -0
  520. package/scripts/epic/epic-candidate-confirm.ts +279 -0
  521. package/scripts/epic/epic-classify.ts +294 -0
  522. package/scripts/epic/epic-cross-repo.ts +366 -0
  523. package/scripts/epic/epic-fetch.ts +370 -0
  524. package/scripts/epic/epic-graph.ts +279 -0
  525. package/scripts/epic/epic-index.ts +209 -0
  526. package/scripts/epic/epic-issue.ts +172 -0
  527. package/scripts/epic/epic-lane-offer.ts +207 -0
  528. package/scripts/epic/epic-nested.ts +37 -0
  529. package/scripts/epic/epic-next-read.ts +141 -0
  530. package/scripts/epic/epic-next-views.ts +144 -0
  531. package/scripts/epic/epic-next.ts +477 -0
  532. package/scripts/epic/epic-outside-blocker.ts +113 -0
  533. package/scripts/epic/epic-relation-recheck.ts +108 -0
  534. package/scripts/epic/epic-report.ts +200 -0
  535. package/scripts/gate/core-budget.ts +292 -0
  536. package/scripts/gate/gate-log.ts +95 -0
  537. package/scripts/gate/gate-plan.ts +356 -0
  538. package/scripts/gate/gate-report.ts +207 -0
  539. package/scripts/gate/gate-skip.ts +123 -0
  540. package/scripts/gate/gate-tree.ts +49 -0
  541. package/scripts/gate/hook-gate-reuse.ts +130 -0
  542. package/scripts/gate/pre-commit-type-check.ts +187 -0
  543. package/scripts/gate/scoped-green.ts +260 -0
  544. package/scripts/gate/type-check-step.ts +90 -0
  545. package/scripts/gate/verification-gate.ts +531 -0
  546. package/scripts/gh/fix-gh-packages-logic.ts +232 -0
  547. package/scripts/gh/fix-gh-packages.ts +129 -0
  548. package/scripts/gh/gh-cli-token.ts +18 -0
  549. package/scripts/gh/gh-spawn.ts +44 -0
  550. package/scripts/git/animation-helpers.ts +81 -0
  551. package/scripts/git/change-base.ts +26 -0
  552. package/scripts/git/changed-file-scope.ts +209 -0
  553. package/scripts/git/changed-paths.ts +30 -0
  554. package/scripts/git/constants.ts +41 -0
  555. package/scripts/git/git-ai-review-scan.ts +154 -0
  556. package/scripts/git/git-animation.ts +41 -0
  557. package/scripts/git/git-branch.ts +127 -0
  558. package/scripts/git/git-command.ts +587 -0
  559. package/scripts/git/git-commit.ts +27 -0
  560. package/scripts/git/git-common-directory.ts +38 -0
  561. package/scripts/git/git-epic-add-body.ts +365 -0
  562. package/scripts/git/git-epic-add-plan.ts +421 -0
  563. package/scripts/git/git-epic-add.ts +249 -0
  564. package/scripts/git/git-epic-body.ts +150 -0
  565. package/scripts/git/git-epic-chains.ts +411 -0
  566. package/scripts/git/git-epic-close-comment.ts +199 -0
  567. package/scripts/git/git-epic-close.ts +393 -0
  568. package/scripts/git/git-epic-decision.ts +171 -0
  569. package/scripts/git/git-epic-parse.ts +351 -0
  570. package/scripts/git/git-epic-promote.ts +102 -0
  571. package/scripts/git/git-epic-read.ts +73 -0
  572. package/scripts/git/git-epic-reconcile.ts +246 -0
  573. package/scripts/git/git-epic-reference.ts +98 -0
  574. package/scripts/git/git-epic-relations.ts +78 -0
  575. package/scripts/git/git-epic-remove-plan.ts +152 -0
  576. package/scripts/git/git-epic-remove.ts +101 -0
  577. package/scripts/git/git-epic-run.ts +223 -0
  578. package/scripts/git/git-epic-sections.ts +98 -0
  579. package/scripts/git/git-epic-shape.ts +81 -0
  580. package/scripts/git/git-epic-validate.ts +155 -0
  581. package/scripts/git/git-error.ts +78 -0
  582. package/scripts/git/git-execa-error.ts +35 -0
  583. package/scripts/git/git-fixture-workspace.ts +88 -0
  584. package/scripts/git/git-followup-cleanup.ts +88 -0
  585. package/scripts/git/git-followup-flush.ts +63 -0
  586. package/scripts/git/git-followup-label.ts +67 -0
  587. package/scripts/git/git-followup-pending.ts +95 -0
  588. package/scripts/git/git-followup-stages.ts +149 -0
  589. package/scripts/git/git-gh-api-path.ts +118 -0
  590. package/scripts/git/git-gh-check.ts +21 -0
  591. package/scripts/git/git-gh-command.ts +17 -0
  592. package/scripts/git/git-gh-exec.ts +344 -0
  593. package/scripts/git/git-gh-failure.ts +103 -0
  594. package/scripts/git/git-gh-helpers.ts +44 -0
  595. package/scripts/git/git-gh-issue-list.ts +257 -0
  596. package/scripts/git/git-gh-issue-read.ts +457 -0
  597. package/scripts/git/git-gh-issue-rest.ts +238 -0
  598. package/scripts/git/git-gh-issue-write.ts +285 -0
  599. package/scripts/git/git-gh-issue.ts +161 -0
  600. package/scripts/git/git-gh-pr-auto-merge.ts +85 -0
  601. package/scripts/git/git-gh-pr-read.ts +322 -0
  602. package/scripts/git/git-gh-pr-rest.ts +172 -0
  603. package/scripts/git/git-gh-pr-review.ts +103 -0
  604. package/scripts/git/git-gh-pr-rollup.ts +91 -0
  605. package/scripts/git/git-gh-pr-snapshot.ts +138 -0
  606. package/scripts/git/git-gh-pr.ts +219 -0
  607. package/scripts/git/git-gh-reachability.ts +56 -0
  608. package/scripts/git/git-gh-repo.ts +37 -0
  609. package/scripts/git/git-gh-rest-state.ts +14 -0
  610. package/scripts/git/git-issue.ts +168 -0
  611. package/scripts/git/git-location-environment.ts +62 -0
  612. package/scripts/git/git-ls-remote.ts +28 -0
  613. package/scripts/git/git-next-issues.ts +98 -0
  614. package/scripts/git/git-notify.ts +104 -0
  615. package/scripts/git/git-pr-ai-review.ts +180 -0
  616. package/scripts/git/git-pr-checks-eval.ts +265 -0
  617. package/scripts/git/git-pr-checks-parse.ts +153 -0
  618. package/scripts/git/git-pr-checks-watch.ts +184 -0
  619. package/scripts/git/git-pr-checks.ts +387 -0
  620. package/scripts/git/git-pr-coderabbit.ts +129 -0
  621. package/scripts/git/git-pr-confirmation.ts +64 -0
  622. package/scripts/git/git-pr-error.ts +25 -0
  623. package/scripts/git/git-pr-followup-wrapup.ts +225 -0
  624. package/scripts/git/git-pr-followup.ts +436 -0
  625. package/scripts/git/git-pr-managed-config.ts +69 -0
  626. package/scripts/git/git-pr-messages.ts +37 -0
  627. package/scripts/git/git-pr.ts +181 -0
  628. package/scripts/git/git-prompt-display.ts +22 -0
  629. package/scripts/git/git-prompt.ts +207 -0
  630. package/scripts/git/git-push-transport.ts +173 -0
  631. package/scripts/git/git-push.ts +27 -0
  632. package/scripts/git/git-remote-branch.ts +40 -0
  633. package/scripts/git/git-spawn.ts +47 -0
  634. package/scripts/git/git-staging.ts +128 -0
  635. package/scripts/git/git-stash.ts +124 -0
  636. package/scripts/git/git-status.ts +198 -0
  637. package/scripts/git/git-worktree.ts +110 -0
  638. package/scripts/git/github-issue-url.ts +105 -0
  639. package/scripts/git/gone-branch.ts +113 -0
  640. package/scripts/git/issue-labels.ts +279 -0
  641. package/scripts/git/listing-cutoff.ts +51 -0
  642. package/scripts/git/main-merge-guard.ts +134 -0
  643. package/scripts/git/main-merge.ts +120 -0
  644. package/scripts/git/main-sync.ts +121 -0
  645. package/scripts/git/parse-json-array.ts +102 -0
  646. package/scripts/git/schemas.ts +166 -0
  647. package/scripts/git/stash-orphans.ts +91 -0
  648. package/scripts/git/stash-pop-args.ts +59 -0
  649. package/scripts/git/stash-pop-cli.ts +105 -0
  650. package/scripts/git/telegram-notify.ts +404 -0
  651. package/scripts/hooks/batch-guard.ts +144 -0
  652. package/scripts/hooks/check-commit-message.ts +134 -0
  653. package/scripts/hooks/codex-hook-adapter.ts +155 -0
  654. package/scripts/hooks/edited-cspell.ts +128 -0
  655. package/scripts/hooks/format-edited-file-fixtures.ts +109 -0
  656. package/scripts/hooks/format-edited-file.ts +510 -0
  657. package/scripts/hooks/format-rewrite-notice.ts +99 -0
  658. package/scripts/hooks/pre-push-unit.ts +146 -0
  659. package/scripts/hooks/pretool-guard.ts +96 -0
  660. package/scripts/hooks/prevent-main-commit.ts +38 -0
  661. package/scripts/hooks/prompt-hooks.ts +38 -0
  662. package/scripts/hooks/reserved-run.ts +90 -0
  663. package/scripts/hooks/stop-guard.ts +135 -0
  664. package/scripts/init/claude-plugin-config.ts +51 -0
  665. package/scripts/init/distributed-paths.ts +100 -0
  666. package/scripts/init/hook-command-rewrite.ts +85 -0
  667. package/scripts/init/hook-launch.ts +31 -0
  668. package/scripts/init/init-actions.ts +147 -0
  669. package/scripts/init/init-ai-copy.ts +235 -0
  670. package/scripts/init/init-copy-content.ts +50 -0
  671. package/scripts/init/init-logic-deploy-vps.ts +43 -0
  672. package/scripts/init/init-logic-json-merge.ts +340 -0
  673. package/scripts/init/init-logic-migrate.ts +62 -0
  674. package/scripts/init/init-logic-package-key-order.ts +50 -0
  675. package/scripts/init/init-logic-secretlint.ts +36 -0
  676. package/scripts/init/init-logic-sonar.ts +197 -0
  677. package/scripts/init/init-logic-templates.ts +142 -0
  678. package/scripts/init/init-logic-workspace.ts +59 -0
  679. package/scripts/init/init-logic-yaml-merge.ts +57 -0
  680. package/scripts/init/init-logic.ts +474 -0
  681. package/scripts/init/init-paths.ts +11 -0
  682. package/scripts/init/init-sonar.ts +32 -0
  683. package/scripts/init/init.ts +219 -0
  684. package/scripts/init/kit-base-preset.ts +60 -0
  685. package/scripts/init/plugin-install-hint.ts +47 -0
  686. package/scripts/init/tsconfig-preset-migration.ts +67 -0
  687. package/scripts/issue/baseline-measure.ts +105 -0
  688. package/scripts/issue/behavior-change-lint.ts +122 -0
  689. package/scripts/issue/defect-rate-cli.ts +167 -0
  690. package/scripts/issue/defect-rate.ts +145 -0
  691. package/scripts/issue/issue-backlinks-cli.ts +97 -0
  692. package/scripts/issue/issue-backlinks.ts +164 -0
  693. package/scripts/issue/issue-cite-cli.ts +158 -0
  694. package/scripts/issue/issue-cite.ts +102 -0
  695. package/scripts/issue/issue-comment-cli.ts +95 -0
  696. package/scripts/issue/issue-fold-cli.ts +104 -0
  697. package/scripts/issue/issue-fold-existing-cli.ts +81 -0
  698. package/scripts/issue/issue-fold-existing.ts +73 -0
  699. package/scripts/issue/issue-fold.ts +42 -0
  700. package/scripts/issue/issue-lint-cli.ts +60 -0
  701. package/scripts/issue/issue-lint.ts +26 -0
  702. package/scripts/issue/issue-logic.ts +50 -0
  703. package/scripts/issue/issue-read-cli.ts +190 -0
  704. package/scripts/issue/issue-read.ts +145 -0
  705. package/scripts/issue/issue-scout-cli.ts +482 -0
  706. package/scripts/issue/issue-scout.ts +244 -0
  707. package/scripts/issue/issue-state-cli.ts +260 -0
  708. package/scripts/issue/issue-state.ts +109 -0
  709. package/scripts/issue/markdown-section.ts +39 -0
  710. package/scripts/issue/measure-rerun-cli.ts +98 -0
  711. package/scripts/issue/reproduction-measure.ts +59 -0
  712. package/scripts/josh/__snapshots__/josh-command-map.test.ts.snap +1171 -0
  713. package/scripts/josh/agent-session-environment.ts +188 -0
  714. package/scripts/josh/cli-body.ts +96 -0
  715. package/scripts/josh/command-suggest.ts +57 -0
  716. package/scripts/josh/file-map-stamp.ts +264 -0
  717. package/scripts/josh/hook-decision.ts +479 -0
  718. package/scripts/josh/josh-command-map.ts +196 -0
  719. package/scripts/josh/josh-command-types.ts +226 -0
  720. package/scripts/josh/josh-commands-ai.ts +327 -0
  721. package/scripts/josh/josh-commands-backlog.ts +54 -0
  722. package/scripts/josh/josh-commands-clone.ts +18 -0
  723. package/scripts/josh/josh-commands-development.ts +206 -0
  724. package/scripts/josh/josh-commands-document.ts +45 -0
  725. package/scripts/josh/josh-commands-guard.ts +38 -0
  726. package/scripts/josh/josh-commands-hooks.ts +42 -0
  727. package/scripts/josh/josh-commands-issue.ts +69 -0
  728. package/scripts/josh/josh-commands-lane.ts +75 -0
  729. package/scripts/josh/josh-commands-lint.ts +37 -0
  730. package/scripts/josh/josh-commands-maintenance.ts +80 -0
  731. package/scripts/josh/josh-commands-project.ts +53 -0
  732. package/scripts/josh/josh-commands-split.ts +20 -0
  733. package/scripts/josh/josh-commands-versioning.ts +48 -0
  734. package/scripts/josh/josh-commands-workflow.ts +116 -0
  735. package/scripts/josh/josh-composite-arguments.ts +55 -0
  736. package/scripts/josh/josh-environment-file.ts +31 -0
  737. package/scripts/josh/josh-in-process.ts +80 -0
  738. package/scripts/josh/josh-logic.ts +308 -0
  739. package/scripts/josh/josh-run.ts +53 -0
  740. package/scripts/josh/josh-script-reader.ts +11 -0
  741. package/scripts/josh/josh-verdict.ts +111 -0
  742. package/scripts/josh/josh.ts +60 -0
  743. package/scripts/josh/kit-only.ts +33 -0
  744. package/scripts/josh/path-decision.ts +104 -0
  745. package/scripts/josh/platform-temporary.ts +66 -0
  746. package/scripts/josh/process-identity.ts +335 -0
  747. package/scripts/josh/session-language-cli.ts +51 -0
  748. package/scripts/josh/session-language.ts +30 -0
  749. package/scripts/josh/stamp-file.ts +194 -0
  750. package/scripts/lane/lane-await.ts +165 -0
  751. package/scripts/lane/lane-cache-run.ts +39 -0
  752. package/scripts/lane/lane-cache.ts +135 -0
  753. package/scripts/lane/lane-capacity.ts +69 -0
  754. package/scripts/lane/lane-child-invocation.ts +73 -0
  755. package/scripts/lane/lane-child-marker.ts +58 -0
  756. package/scripts/lane/lane-cli.ts +410 -0
  757. package/scripts/lane/lane-close.ts +197 -0
  758. package/scripts/lane/lane-dispatch-log.ts +13 -0
  759. package/scripts/lane/lane-dispatch.ts +458 -0
  760. package/scripts/lane/lane-environment.ts +253 -0
  761. package/scripts/lane/lane-guard-policy.ts +136 -0
  762. package/scripts/lane/lane-install.ts +94 -0
  763. package/scripts/lane/lane-launch-cli.ts +133 -0
  764. package/scripts/lane/lane-occupancy.ts +112 -0
  765. package/scripts/lane/lane-open.ts +275 -0
  766. package/scripts/lane/lane-output.ts +124 -0
  767. package/scripts/lane/lane-paths.ts +96 -0
  768. package/scripts/lane/lane-reap.ts +137 -0
  769. package/scripts/lane/lane-registry.ts +261 -0
  770. package/scripts/lane/lane-relaunch.ts +68 -0
  771. package/scripts/lane/lane-report.ts +95 -0
  772. package/scripts/lane/lane-resume.ts +61 -0
  773. package/scripts/lane/lane-seed.ts +44 -0
  774. package/scripts/lane/lane-start-point.ts +175 -0
  775. package/scripts/lane/openai-lane-supervisor-cli.ts +32 -0
  776. package/scripts/lane/openai-lane-supervisor-decision.ts +63 -0
  777. package/scripts/lane/openai-lane-supervisor.ts +337 -0
  778. package/scripts/lib/bounded-pool.ts +109 -0
  779. package/scripts/lib/buffered-process.ts +82 -0
  780. package/scripts/lib/caddy-logs.sh +45 -0
  781. package/scripts/lib/cli-flags.ts +19 -0
  782. package/scripts/lib/json-value.ts +24 -0
  783. package/scripts/lib/poll.ts +57 -0
  784. package/scripts/lib/read-file.ts +16 -0
  785. package/scripts/lib/schemas.ts +67 -0
  786. package/scripts/lib/spawn-exit.ts +45 -0
  787. package/scripts/lib/status-icons.ts +24 -0
  788. package/scripts/lines/effective-limit.ts +156 -0
  789. package/scripts/lines/line-budget.ts +404 -0
  790. package/scripts/lines/line-targets.ts +80 -0
  791. package/scripts/lines/lines-command.ts +174 -0
  792. package/scripts/lint/cspell-cached.ts +41 -0
  793. package/scripts/lint/lint-parallel.ts +72 -0
  794. package/scripts/lint/lint-related-scope.ts +128 -0
  795. package/scripts/lint/lint-related.ts +104 -0
  796. package/scripts/managed-marker/index.ts +5 -0
  797. package/scripts/managed-marker/managed-marker-logic.ts +67 -0
  798. package/scripts/observations/observation-ledger-home.ts +32 -0
  799. package/scripts/observations/observation-ledger-line.ts +93 -0
  800. package/scripts/observations/observation-ledger.ts +35 -0
  801. package/scripts/observations/observations-flush-cli.ts +42 -0
  802. package/scripts/observations/observations-flush-landing.ts +97 -0
  803. package/scripts/observations/observations-flush.ts +420 -0
  804. package/scripts/overrides/lockfile-overrides.ts +105 -0
  805. package/scripts/overrides/overrides-check.ts +84 -0
  806. package/scripts/overrides/overrides-files.ts +19 -0
  807. package/scripts/overrides/overrides-logic.ts +211 -0
  808. package/scripts/overrides/schemas.ts +49 -0
  809. package/scripts/package/package-scout-cli.ts +195 -0
  810. package/scripts/package/package-scout-format.ts +151 -0
  811. package/scripts/package/package-scout.ts +121 -0
  812. package/scripts/ports/port-command.ts +87 -0
  813. package/scripts/propagate/propagate-git-failure.ts +191 -0
  814. package/scripts/propagate/propagate-git.ts +224 -0
  815. package/scripts/propagate/propagate-publish.ts +181 -0
  816. package/scripts/propagate/propagate-run.ts +201 -0
  817. package/scripts/propagate/propagate-steps.ts +421 -0
  818. package/scripts/propagate/propagate-targets.ts +160 -0
  819. package/scripts/propagate/propagate.ts +216 -0
  820. package/scripts/refactor/import-graph.ts +187 -0
  821. package/scripts/refactor/refactor-lint.ts +250 -0
  822. package/scripts/refactor/refactor-scan-cli.ts +10 -0
  823. package/scripts/refactor/refactor-scan.ts +124 -0
  824. package/scripts/refactor/refactor-targets.ts +103 -0
  825. package/scripts/release/release-cli.ts +88 -0
  826. package/scripts/release/release-history.ts +132 -0
  827. package/scripts/release/release-plan.ts +130 -0
  828. package/scripts/release/release-publish.ts +152 -0
  829. package/scripts/release/release-scope-cli.ts +103 -0
  830. package/scripts/release/release-tag.ts +93 -0
  831. package/scripts/release/release-worktree.ts +71 -0
  832. package/scripts/repo/auto-merge-setting-logic.ts +100 -0
  833. package/scripts/repo/auto-merge-setting.ts +37 -0
  834. package/scripts/repo/repo-setting.ts +112 -0
  835. package/scripts/report/report-lint-cli.ts +49 -0
  836. package/scripts/report/report-lint.ts +250 -0
  837. package/scripts/retrospective/retrospective-cli.ts +97 -0
  838. package/scripts/retrospective/retrospective.ts +127 -0
  839. package/scripts/review/disposition-cli.ts +44 -0
  840. package/scripts/review/disposition-logic.ts +45 -0
  841. package/scripts/review/live-evidence.ts +62 -0
  842. package/scripts/review/review-attest-cli.ts +115 -0
  843. package/scripts/review/review-attest.ts +319 -0
  844. package/scripts/review/review-brief-cli.ts +290 -0
  845. package/scripts/review/review-brief.ts +440 -0
  846. package/scripts/review/review-checkout.ts +56 -0
  847. package/scripts/review/review-finding-ledger.ts +167 -0
  848. package/scripts/review/review-findings-cli.ts +57 -0
  849. package/scripts/review/review-level.ts +86 -0
  850. package/scripts/review/review-record-cli.ts +196 -0
  851. package/scripts/review/review-record.ts +74 -0
  852. package/scripts/review/review-round2-cli.ts +84 -0
  853. package/scripts/review/review-round2.ts +139 -0
  854. package/scripts/review/review-stamps.ts +113 -0
  855. package/scripts/review/review-tree.ts +58 -0
  856. package/scripts/rules/bash-triggers.ts +44 -0
  857. package/scripts/rules/decision-oracle.ts +342 -0
  858. package/scripts/rules/delivered-rules-harness.ts +72 -0
  859. package/scripts/rules/delivered-rules.ts +793 -0
  860. package/scripts/rules/early-heartbeat.ts +241 -0
  861. package/scripts/rules/file-body.ts +150 -0
  862. package/scripts/rules/filing-cap.ts +133 -0
  863. package/scripts/rules/filing-offer.ts +81 -0
  864. package/scripts/rules/firing-point.ts +63 -0
  865. package/scripts/rules/gh-api.ts +65 -0
  866. package/scripts/rules/git-argv.ts +129 -0
  867. package/scripts/rules/git-force.ts +104 -0
  868. package/scripts/rules/implementation-cut-verdict.ts +84 -0
  869. package/scripts/rules/implementation-cut.ts +202 -0
  870. package/scripts/rules/issue-citation.ts +242 -0
  871. package/scripts/rules/issue-fold.ts +73 -0
  872. package/scripts/rules/issue-scout.ts +64 -0
  873. package/scripts/rules/josh-git-bare.ts +80 -0
  874. package/scripts/rules/lane-carry-conflict.ts +96 -0
  875. package/scripts/rules/lane-interactive-ask.ts +71 -0
  876. package/scripts/rules/lane-park.ts +122 -0
  877. package/scripts/rules/lane-switch-main.ts +139 -0
  878. package/scripts/rules/oracle-consulted.ts +81 -0
  879. package/scripts/rules/oracle-firing.ts +151 -0
  880. package/scripts/rules/oracle-list-cli.ts +81 -0
  881. package/scripts/rules/piped-verification.ts +126 -0
  882. package/scripts/rules/poll-loop.ts +125 -0
  883. package/scripts/rules/pre-gate-cut.ts +207 -0
  884. package/scripts/rules/prior-comment-read.ts +106 -0
  885. package/scripts/rules/raw-field-body.ts +56 -0
  886. package/scripts/rules/reply-language.ts +116 -0
  887. package/scripts/rules/rule-body-guard.ts +206 -0
  888. package/scripts/rules/rule-guard.ts +23 -0
  889. package/scripts/rules/rule-value-cli.ts +129 -0
  890. package/scripts/rules/rule-value.ts +397 -0
  891. package/scripts/rules/run-tail.ts +178 -0
  892. package/scripts/rules/shell-body-trigger.ts +204 -0
  893. package/scripts/rules/shell-segments.ts +45 -0
  894. package/scripts/rules/stop-rules.ts +329 -0
  895. package/scripts/rules/tail-commands.ts +35 -0
  896. package/scripts/rules/test-declared-commit.ts +51 -0
  897. package/scripts/rules/third-party-write.ts +90 -0
  898. package/scripts/rules/top-level-scripts-guard.ts +47 -0
  899. package/scripts/rules/worktree-guard.ts +130 -0
  900. package/scripts/run/detached-launch.ts +360 -0
  901. package/scripts/run/run-carry-args.ts +264 -0
  902. package/scripts/run/run-carry-change.ts +69 -0
  903. package/scripts/run/run-carry-cli.ts +441 -0
  904. package/scripts/run/run-carry-flush.ts +63 -0
  905. package/scripts/run/run-carry-stash.ts +71 -0
  906. package/scripts/run/run-carry-streak.ts +113 -0
  907. package/scripts/run/run-carry.ts +550 -0
  908. package/scripts/run/run-cut-args.ts +132 -0
  909. package/scripts/run/run-cut-cli.ts +461 -0
  910. package/scripts/run/run-cut-handoff.ts +126 -0
  911. package/scripts/run/run-cut.ts +531 -0
  912. package/scripts/run/run-ending-cli.ts +111 -0
  913. package/scripts/run/run-ending.ts +239 -0
  914. package/scripts/run/run-entry-cli.ts +135 -0
  915. package/scripts/run/run-entry.ts +95 -0
  916. package/scripts/run/run-event-cli.ts +210 -0
  917. package/scripts/run/run-event-follow.ts +65 -0
  918. package/scripts/run/run-event-render.ts +75 -0
  919. package/scripts/run/run-event-scope.ts +127 -0
  920. package/scripts/run/run-event-stream-emit.ts +140 -0
  921. package/scripts/run/run-event-stream.ts +258 -0
  922. package/scripts/run/run-event-watch.ts +37 -0
  923. package/scripts/run/run-headless.ts +105 -0
  924. package/scripts/run/run-hold-cli.ts +310 -0
  925. package/scripts/run/run-hold.ts +264 -0
  926. package/scripts/run/run-invocation.ts +237 -0
  927. package/scripts/run/run-issue-number.ts +19 -0
  928. package/scripts/run/run-liveness-cli.ts +169 -0
  929. package/scripts/run/run-liveness.ts +424 -0
  930. package/scripts/run/run-merge-cli.ts +385 -0
  931. package/scripts/run/run-merge-steps.ts +326 -0
  932. package/scripts/run/run-merge.ts +158 -0
  933. package/scripts/run/run-next-cli.ts +48 -0
  934. package/scripts/run/run-next.ts +80 -0
  935. package/scripts/run/run-preflight.ts +337 -0
  936. package/scripts/run/run-prep-cli.ts +151 -0
  937. package/scripts/run/run-prep.ts +84 -0
  938. package/scripts/run/run-progress-args.ts +65 -0
  939. package/scripts/run/run-progress-cli.ts +508 -0
  940. package/scripts/run/run-progress-clock.ts +320 -0
  941. package/scripts/run/run-progress-config.ts +119 -0
  942. package/scripts/run/run-progress-read.ts +199 -0
  943. package/scripts/run/run-progress.ts +366 -0
  944. package/scripts/run/run-report-cli.ts +71 -0
  945. package/scripts/run/run-report.ts +78 -0
  946. package/scripts/run/run-review-cli.ts +130 -0
  947. package/scripts/run/run-review-steps.ts +161 -0
  948. package/scripts/run/run-review.ts +121 -0
  949. package/scripts/run/run-ship-cli.ts +431 -0
  950. package/scripts/run/run-ship-detach.ts +200 -0
  951. package/scripts/run/run-ship-probe.ts +103 -0
  952. package/scripts/run/run-ship-return.ts +75 -0
  953. package/scripts/run/run-ship-review-steps.ts +227 -0
  954. package/scripts/run/run-ship-review.ts +177 -0
  955. package/scripts/run/run-ship-stage.ts +150 -0
  956. package/scripts/run/run-ship.ts +78 -0
  957. package/scripts/run/run-status-cli.ts +175 -0
  958. package/scripts/run/run-status.ts +77 -0
  959. package/scripts/run/run-step-cli.ts +111 -0
  960. package/scripts/run/run-step.ts +292 -0
  961. package/scripts/run/run-stop-notify.ts +52 -0
  962. package/scripts/run/run-stranded-cli.ts +31 -0
  963. package/scripts/run/run-stranded-detect.ts +134 -0
  964. package/scripts/run/run-stranded.ts +120 -0
  965. package/scripts/run/run-tail-cli.ts +105 -0
  966. package/scripts/run/run-tail.ts +61 -0
  967. package/scripts/run/run-transcript.golden.txt +57 -0
  968. package/scripts/run/run-wake-cli.ts +428 -0
  969. package/scripts/run/run-wake-describe.ts +97 -0
  970. package/scripts/run/run-wake-driver.ts +80 -0
  971. package/scripts/run/run-wake-handoff.ts +29 -0
  972. package/scripts/run/run-wake-loop.ts +223 -0
  973. package/scripts/run/run-wake-session.ts +150 -0
  974. package/scripts/run/run-wake-work.ts +104 -0
  975. package/scripts/run/run-wake.ts +607 -0
  976. package/scripts/run/run-watcher-guard-cli.ts +37 -0
  977. package/scripts/run/run-watcher-guard.ts +59 -0
  978. package/scripts/run/run-watcher-hook.ts +86 -0
  979. package/scripts/security/secretlint-scan.ts +86 -0
  980. package/scripts/security/security-audit-logic.ts +51 -0
  981. package/scripts/security/security-audit-provision-logic.ts +217 -0
  982. package/scripts/security/security-audit-provision.ts +186 -0
  983. package/scripts/security/security-audit.ts +132 -0
  984. package/scripts/security/security-updates-logic.ts +131 -0
  985. package/scripts/security/security-updates.ts +38 -0
  986. package/scripts/security/sonar-file.ts +44 -0
  987. package/scripts/self-sync-guard/index.ts +5 -0
  988. package/scripts/self-sync-guard/self-sync-guard-logic.ts +98 -0
  989. package/scripts/self-sync-guard/self-sync-refusal.ts +22 -0
  990. package/scripts/sonar/sonar-hotspots-cli.ts +149 -0
  991. package/scripts/sonar/sonar-hotspots.ts +111 -0
  992. package/scripts/split/split-assess-cli.ts +52 -0
  993. package/scripts/split/split-assess.ts +124 -0
  994. package/scripts/sync/dependabot-pin-logic.ts +135 -0
  995. package/scripts/sync/directory-copy-guard.ts +187 -0
  996. package/scripts/sync/file-content.ts +49 -0
  997. package/scripts/sync/managed-config-scope-cli.ts +64 -0
  998. package/scripts/sync/managed-config-scope.ts +123 -0
  999. package/scripts/sync/plugin-skill-directories.ts +15 -0
  1000. package/scripts/sync/reconcile-templates.ts +53 -0
  1001. package/scripts/sync/removed-skill-manifest.ts +27 -0
  1002. package/scripts/sync/skill-migration.ts +192 -0
  1003. package/scripts/sync/sync-configs.ts +156 -0
  1004. package/scripts/sync/sync-hook-safety.ts +82 -0
  1005. package/scripts/sync/sync.ts +417 -0
  1006. package/scripts/sync/synced-paths.ts +52 -0
  1007. package/scripts/sync/template-source-logic.ts +122 -0
  1008. package/scripts/sync/workflow-pin-logic.ts +240 -0
  1009. package/scripts/test/classify-isolation.ts +149 -0
  1010. package/scripts/test/e2e-retry-check.ts +150 -0
  1011. package/scripts/test/http-fault-injection.ts +79 -0
  1012. package/scripts/test/josh-harness-environment.ts +260 -0
  1013. package/scripts/test/josh-harness.ts +96 -0
  1014. package/scripts/test/pilot-files.ts +457 -0
  1015. package/scripts/test/pilot-measure.ts +78 -0
  1016. package/scripts/test/test-declared-changed.ts +99 -0
  1017. package/scripts/test/test-declared-logic.ts +91 -0
  1018. package/scripts/test/test-declared-match.ts +106 -0
  1019. package/scripts/test/test-declared.ts +180 -0
  1020. package/scripts/test/test-e2e-guard.ts +86 -0
  1021. package/scripts/test/test-network-guard.ts +453 -0
  1022. package/scripts/test/test-red-commit.ts +51 -0
  1023. package/scripts/test/test-red-logic.ts +76 -0
  1024. package/scripts/test/test-red.ts +154 -0
  1025. package/scripts/test/test-related-scope.ts +115 -0
  1026. package/scripts/test/test-related.ts +73 -0
  1027. package/scripts/test/test-repository-guard.ts +317 -0
  1028. package/scripts/test/test-state-guard.ts +85 -0
  1029. package/scripts/test/test-stdout-guard.ts +54 -0
  1030. package/scripts/test/test-telegram-guard.ts +90 -0
  1031. package/scripts/test/test-type-logic.ts +31 -0
  1032. package/scripts/test/test-unit-guard.ts +185 -0
  1033. package/scripts/test/unit-guard-environment.ts +12 -0
  1034. package/scripts/test/unit-projects.ts +139 -0
  1035. package/scripts/test/unit-worker-share.ts +251 -0
  1036. package/scripts/test/vitest-include-globs.ts +12 -0
  1037. package/scripts/time-runtime/time-agent-bundles.ts +128 -0
  1038. package/scripts/time-runtime/time-background.ts +300 -0
  1039. package/scripts/time-runtime/time-batch-guard-fixtures.ts +66 -0
  1040. package/scripts/time-runtime/time-batch-guard.ts +529 -0
  1041. package/scripts/time-runtime/time-bundle-call.ts +575 -0
  1042. package/scripts/time-runtime/time-bundles.ts +536 -0
  1043. package/scripts/time-runtime/time-call-identity.ts +37 -0
  1044. package/scripts/time-runtime/time-command-key.ts +35 -0
  1045. package/scripts/time-runtime/time-density-hook.ts +166 -0
  1046. package/scripts/time-runtime/time-density.ts +147 -0
  1047. package/scripts/time-runtime/time-followup-stage.ts +107 -0
  1048. package/scripts/time-runtime/time-format.ts +186 -0
  1049. package/scripts/time-runtime/time-hook-transcript.ts +82 -0
  1050. package/scripts/time-runtime/time-instant.ts +20 -0
  1051. package/scripts/time-runtime/time-markers.ts +228 -0
  1052. package/scripts/time-runtime/time-phase-names.ts +123 -0
  1053. package/scripts/time-runtime/time-reported-failure.ts +227 -0
  1054. package/scripts/time-runtime/time-round-trips.ts +279 -0
  1055. package/scripts/time-runtime/time-shell.ts +286 -0
  1056. package/scripts/time-runtime/time-single-check.ts +65 -0
  1057. package/scripts/time-runtime/time-spans.ts +545 -0
  1058. package/scripts/time-runtime/time-transcript-line.ts +253 -0
  1059. package/scripts/time-runtime/time-writes.ts +71 -0
  1060. package/scripts/ui/ui-routes-cli.ts +122 -0
  1061. package/scripts/ui/ui-routes.ts +102 -0
  1062. package/scripts/version/bump-version.ts +71 -0
  1063. package/scripts/version/effective-upstream.ts +93 -0
  1064. package/scripts/version/index.ts +25 -0
  1065. package/scripts/version/kit-descriptor.ts +10 -0
  1066. package/scripts/version/kit-version-config.ts +30 -0
  1067. package/scripts/version/latest-corepack.ts +404 -0
  1068. package/scripts/version/latest-lane-guard.ts +49 -0
  1069. package/scripts/version/latest-regression.ts +93 -0
  1070. package/scripts/version/latest-scope-cli.ts +147 -0
  1071. package/scripts/version/latest-stamp.ts +107 -0
  1072. package/scripts/version/latest-update.ts +198 -0
  1073. package/scripts/version/package-manager-version.ts +95 -0
  1074. package/scripts/version/parse-json.ts +13 -0
  1075. package/scripts/version/preinstall-version-update.ts +84 -0
  1076. package/scripts/version/publishable-range-check.ts +74 -0
  1077. package/scripts/version/publishable-range.ts +123 -0
  1078. package/scripts/version/release-age.ts +146 -0
  1079. package/scripts/version/release-hold.ts +142 -0
  1080. package/scripts/version/running-binary.ts +42 -0
  1081. package/scripts/version/upgrade-command-guard.ts +49 -0
  1082. package/scripts/version/upgrade-shell-command.ts +30 -0
  1083. package/scripts/version/version-check-logic.ts +333 -0
  1084. package/scripts/version/version-check.ts +14 -0
  1085. package/scripts/version/version-command-config.ts +177 -0
  1086. package/scripts/version/version-commands.ts +296 -0
  1087. package/scripts/version/version-remote.ts +86 -0
  1088. package/scripts/version/version-targets.ts +81 -0
  1089. package/scripts/yaml/yaml-document.ts +46 -0
  1090. package/scripts-ai/completion-gate.ts +13 -0
  1091. package/scripts-ai/environment-loader.ts +9 -0
  1092. package/scripts-ai/epic-check.ts +34 -0
  1093. package/scripts-ai/epic-cli-argv.ts +77 -0
  1094. package/scripts-ai/epic-cli-remove.ts +71 -0
  1095. package/scripts-ai/epic-cli.ts +413 -0
  1096. package/scripts-ai/epic.ts +192 -0
  1097. package/scripts-ai/followup-issue-number.ts +31 -0
  1098. package/scripts-ai/git-followup-finish.ts +217 -0
  1099. package/scripts-ai/git-followup-workflow.ts +252 -0
  1100. package/scripts-ai/git-workflow.ts +246 -0
  1101. package/scripts-ai/telegram-test-logic.ts +88 -0
  1102. package/scripts-ai/telegram-test.ts +130 -0
  1103. package/templates/gitignore +76 -0
  1104. package/templates/sonar-project.properties +52 -0
  1105. package/templates/workflows/ci.yml +639 -0
  1106. package/templates/workflows/dependabot-auto-merge.yml +428 -0
  1107. package/tsconfig/base.json +50 -0
  1108. package/tsconfig.sonar.json +34 -0
@@ -0,0 +1,267 @@
1
+ # What stays resident, and how much — `SKILL.md` §3's body
2
+
3
+ **This is `SKILL.md` → §3's body, and it is read when a rule is being placed, moved or retired — not
4
+ at any entry** (joshuafolkken/kit#1797, joshuafolkken/kit#2161). **Nothing in a run reaches it.** The
5
+ moment it binds is a turn spent editing `CLAUDE.md` or one of these documents, which is why it costs a
6
+ workflow entry nothing to leave it here. `SKILL.md` → §3 keeps the heading and points here; the
7
+ questions that decide *whether* a rule stays now live below, alongside the procedure that decides *how
8
+ much* of it does. The `rule:value` readings this file used to carry no longer gate reduction — that
9
+ gating was retracted on 2026-09-13 (joshuafolkken/kit#1931 → `## Decisions`) and they are retained
10
+ below only as history.
11
+
12
+ ## Whether a rule stays
13
+
14
+ **Before either question below, ask question 0:** `prompts/collaboration-workflow/residency.md` → question 0 — can the rule's answer be computed from mechanically readable inputs alone? If yes, it is a decision oracle and neither question below applies; `pnpm josh oracle:list` shows the existing ones. Only a no reaches the ordering question.
15
+
16
+ **Then ask the ordering question:** `prompts/collaboration-workflow/residency.md` → ordering question — does the rule decide *when or in what order* to act rather than *what*? If so it belongs in the run driver's state transitions (`pnpm josh run:step`, `scripts/run/run-step.ts`), not either channel below. Only a rule that decides *what* reaches the first question.
17
+
18
+ **The first question is whether the rule's trigger can be named:**
19
+
20
+ > **Can the moment the rule begins to bind be named as one tool call?**
21
+
22
+ **A rule whose trigger can be named moves its body out of `CLAUDE.md`.** It goes on the enumeration in
23
+ `prompts/collaboration-workflow/rule-delivery.md`, and a hook refuses that call and states the rule —
24
+ cheaper than resident prose, because it costs nothing on every other turn, and **stronger, because a
25
+ refusal cannot be skimmed past**. **Relocating is not deleting** — the rule's text survives, on a
26
+ stronger channel.
27
+
28
+ **What stays behind is the trigger and the criterion, one line, because the channel reaches one
29
+ harness.** `CLAUDE.md` is agent-agnostic by construction — `AGENTS.md`, `GEMINI.md` and `.cursorrules`
30
+ are pointers to it, and a Codex, Gemini or Cursor session runs no `.claude/settings.json` hook at all;
31
+ so does a Claude Code session with the guard's own off-switch set. **The gain is the body, not the
32
+ line.** A rule may leave residency entirely only where the agent that has to obey it is always this
33
+ harness.
34
+
35
+ Only a rule whose trigger cannot be named reaches the second question:
36
+
37
+ **A rule stays in `CLAUDE.md` if and only if it has to fire on a turn where no skill was loaded.** That
38
+ test has exactly one input: when does the rule first bind — before a command has started, or after.
39
+ Everything a run reaches only *after* it has read this skill is routed to from `CLAUDE.md`, never
40
+ restated there.
41
+
42
+ `CLAUDE.md` is the only document this section is about. `AGENTS.md` and `GEMINI.md` hold no rules at
43
+ all — they are pointers to it.
44
+
45
+ ### The second question: how much of a resident rule is resident
46
+
47
+ The criterion above decides **whether** a rule stays. It says nothing about **how much of it** stays,
48
+ and for a long time nothing did — so a rule that passed arrived with its whole procedure attached,
49
+ and `CLAUDE.md` grew back to within 585 bytes of its ceiling with the procedures already moved out
50
+ (joshuafolkken/kit#964).
51
+
52
+ **A resident rule is written as its trigger plus a pointer.** Two things and no third:
53
+
54
+ 1. **The trigger** — the situation that fires it, and the one instruction that must be obeyed before
55
+ anything else is read. Written so an agent that reads nothing further still does the safe thing:
56
+ stops, files, refuses, asks.
57
+ 2. **The pointer** — the topic file under `prompts/collaboration-workflow/` or the skill file that holds
58
+ the procedure, named exactly enough to open without searching.
59
+
60
+ Everything else — the steps, the worked examples, the rationale, the failure it was written after —
61
+ belongs at the pointer. **The test is whether the resident text still produces correct behavior on a
62
+ turn where the pointer is never opened.** If dropping a sentence would let an agent proceed wrongly
63
+ rather than merely proceed less well informed, that sentence is part of the trigger. If dropping it
64
+ only costs context, it belongs at the pointer.
65
+
66
+ **Trimming is moving, and deleting is the exception that has to be earned.** Before a sentence leaves
67
+ `CLAUDE.md` it has to exist at the pointer, and the marker suite that pinned it has to be re-pointed
68
+ there rather than dropped. A canonical section that is thinner than the resident copy is the normal
69
+ case, not a reason to delete — the resident text is then the fuller version, and it is moved in
70
+ before it is cut out.
71
+
72
+ **A system that can only move eventually jams, so one route out exists — and it is narrow**
73
+ (joshuafolkken/kit#1525). A rule is *retired* rather than moved only where deleting it cannot change
74
+ what any agent does, and that has to be shown rather than argued:
75
+
76
+ 1. **It is a clone of text that has a declared single source**, and the source is named in the same
77
+ document. Where the two differ the copy is the wrong one, so nothing can correctly depend on it.
78
+ 2. **It carries no sentence that exists nowhere else** — checked against the source it duplicates,
79
+ not against a memory of it.
80
+ 3. **No marker suite pins it**, so no assertion is being dropped along with it.
81
+
82
+ **"It looks redundant" satisfies none of the three, and a rule with a firing test, a marker, or a
83
+ measured effect is not a candidate at all.** Every rule in these documents was written after a
84
+ specific failure; one that changes nothing today may simply be one whose failure has not recurred
85
+ *because it is there*. When the three do not all hold, the finding is recorded as a candidate with
86
+ its evidence and left standing — a listed candidate costs nothing and can be taken up later, while a
87
+ wrongly deleted rule fails silently, months later, in a run nobody is watching.
88
+
89
+ **The scope of this list is every resident rule that has an on-demand counterpart** — a skill or an
90
+ on-demand prompt carrying the procedure the resident text routes to. Those are the rules the
91
+ criterion is *about*: each one could have moved, and stayed for a reason worth naming. Within that
92
+ scope the list is exhaustive, and a rule with a counterpart that is resident without appearing here
93
+ has not been checked.
94
+
95
+ Counting by skill would draw the line in the wrong place — `verify-ui` is routed to as readily as
96
+ this skill is, and one entry below routes to `prompts/review.md`, which is not a skill at all.
97
+
98
+ Outside the scope the documents carry a great deal more — the naming conventions, the quality
99
+ limits, the code-change rules, Package-First. **None of that belongs on this list**: there is no
100
+ on-demand copy for them to have moved to, so the question the criterion asks does not arise, and
101
+ their absence here is correct rather than an omission (joshuafolkken/kit#955).
102
+
103
+ Within that scope, every rule that passes the test is resident in full, and a marker suite asserts
104
+ each one present in `CLAUDE.md` — `scripts/claude/workflow-skills.test.ts` for most of them,
105
+ `scripts/claude/verify-ui-skill.test.ts` for the UI gate,
106
+ `scripts/document/document-markers.test.ts` for the follow-up filing step, and
107
+ `scripts/document/document-markers.test.ts` for the file-editing prohibition. **A trigger-delivered rule
108
+ is pinned differently** — by what its refusal says and by the trigger firing, in
109
+ `scripts/rules/turn-batching-rule.test.ts`, `scripts/backlog/backlog-manufacturing-rule.test.ts` and
110
+ `scripts/rules/delivered-rules.test.ts`, with only its one-line trigger asserted resident:
111
+
112
+ - **Explicit invocation required** — it decides whether a workflow starts at all, so it binds on the
113
+ turn the user types the keyword, which is before anything here has been read.
114
+ - **The mid-workflow stop notification** — most pauses that need it (an upstream-Issue interrupt, a
115
+ Tier C confirmation) happen on turns carrying no workflow keyword at all.
116
+ - **The `overrides` prohibition** and **the `devEngines` prohibition** — a dependency command can be
117
+ run on any turn, including one that never loads `dependency-update`, and by the time the skill
118
+ would be read the pin has already been rewritten.
119
+ - **The follow-up filing step after the review round cap** — filing the Issue and bundling it into an
120
+ epic. A pre-commit self-review runs outside any workflow as readily as inside one, and the Issue it
121
+ files is orphaned just the same; the step has to be readable on a turn that never typed a keyword.
122
+ Its full form is in `prompts/review.md` → "Review round cap" (joshuafolkken/kit#946).
123
+ - **The UI-verification gate** — a rendered change is not done until the screen has been looked at,
124
+ and the procedure for capturing it is `verify-ui`. The gate binds whenever a UI change is reported
125
+ finished, which is routinely a turn with no workflow keyword typed and no skill loaded.
126
+ - **The three `josh epic:*` rules that bind outside those commands** — recording a decision removes
127
+ that child's `needs-decision` label, fixing what `epic:audit` finds is Tier A, and an epic in
128
+ another repository is referenced as `owner/repo#N`. Each fires on a turn where no `epic:*` command
129
+ was run: the moment an issue is filed, or a decision written. The commands' own procedures are in
130
+ `.claude/skills/epic-commands/`, which is where everything else about them lives.
131
+ - **The prohibition on carrying a file's new text inside a shell command** — an edit happens on any
132
+ turn at all, and there is no skill that a run loads *before* editing. Placed on demand, this one
133
+ rule would never fire once, which reads exactly like having deleted it. The measured cost, the
134
+ allowed/prohibited table and the reasoning are at
135
+ `prompts/collaboration-workflow/file-edits.md`; what stays resident is the instruction and the
136
+ criterion that decides it — whether the command carries the replacement wholesale, not which tool
137
+ was used (joshuafolkken/kit#1150). **The same criterion binds the Edit itself**: rewriting a whole
138
+ file to fix the three lines a review named carries the replacement wholesale exactly as a heredoc
139
+ does, so the resident instruction covers it in one clause and the three cases that justify writing
140
+ a file whole stay at the pointer (joshuafolkken/kit#1260).
141
+
142
+ **These left this list at the first question, and are delivered by a hook instead**
143
+ (joshuafolkken/kit#1524). None lost a sentence; each is pinned by the firing test named beside it
144
+ rather than by a residency marker, and `prompts/collaboration-workflow/rule-delivery.md` is the
145
+ enumeration and the single source of what a turn where the trigger does not fire means. **The four
146
+ described below are not the whole set** — the enumeration has grown to nine rows, of which
147
+ `scripts/rules/delivered-rules.ts` carries seven and two are their own binaries. The count that used to
148
+ open this paragraph said `Four` and had been wrong since the fifth row landed, which is what a
149
+ restated count does; it is gone rather than corrected, because a number kept in two places drifts
150
+ again (joshuafolkken/kit#1525).
151
+
152
+ - **The instruction to put independent calls in one turn** — `pnpm josh batch:guard` refuses the
153
+ `Bash`, `Edit` or `Read` call that would make a third consecutive single-call turn, and states the criterion
154
+ there. **`Edit` joined `Bash` in joshuafolkken/kit#1762, and `Read` in joshuafolkken/kit#1798**, because edits carry most of the recoverable
155
+ round trips and the guard could not reach one of them, and because a cluster holding one `Read` was breaking the wiring rather than the count.
156
+ It was resident through every run the topic file measures, and moved none of them, so what the
157
+ relocation gave up is prose that was not being obeyed
158
+ (`prompts/collaboration-workflow/turn-batching.md`, `scripts/rules/turn-batching-rule.test.ts`).
159
+ - **The backlog WIP cap** — `pnpm josh rule:guard` refuses the `Bash` call that files an Issue
160
+ (`gh issue create`, or a `title`-bearing POST to `…/issues`) and delivers the count, the refusal,
161
+ both exemptions and the three tests that decide the interrupt one — the three kept whole, because a
162
+ delivery saying only "an interrupt is exempt" hands the deciding back to judgement
163
+ (joshuafolkken/kit#1518). A comment endpoint is not a filing and is left alone
164
+ (`prompts/collaboration-workflow/wip-cap.md`, `scripts/backlog/backlog-manufacturing-rule.test.ts`).
165
+ - **The Issue's comments** — `pnpm josh rule:guard` refuses the `Bash` call that reads an Issue's
166
+ body without them (`gh issue view <N>`, or a `GET` of a path ending `…/issues/<N>`) and hands over
167
+ the reissue that carries them plus the rule for a comment that contradicts the body. It is the one
168
+ row whose trigger `batch:guard` also considers, so it stands aside on that guard's turn and fires
169
+ on the reissue. §2g is the procedure and stays here, because a session that runs no hooks still
170
+ owes the read (`prompts/collaboration-workflow/rule-delivery.md`,
171
+ `scripts/rules/delivered-rules.test.ts`).
172
+ - **The prohibition on putting a body inside shell double quotes** — `pnpm josh rule:guard` refuses
173
+ the `Bash` call whose inline body value carries a backtick or a `$`, the two characters this
174
+ harness's zsh was measured to evaluate there, and hands back the path-shaped spellings
175
+ (`--body-file`, `--field body=@<path>`, `--notify-message-file`). **The trigger reads the body, not
176
+ the flag**: every worked example in these documents passes a placeholder, which is inert, so keying
177
+ on the flag would refuse the turns where the rule is already kept. It is also the one row whose
178
+ trigger deliberately overlaps another — a filing whose body carries a backtick is `wip-cap`'s
179
+ first, and this one's on the reissue. A one-line trigger stays resident because a hook reaches
180
+ Claude Code alone (`prompts/collaboration-workflow/shell-body.md`,
181
+ `scripts/rules/shell-body-rule.test.ts`, joshuafolkken/kit#1198).
182
+
183
+ These do not pass it, and live in a skill instead: the split assessment (`split-assessment.md`), a
184
+ prerequisite discovered mid-run (§2d, with each entry's branch in
185
+ `fullrun.md` / `halfrun.md` / `backlogrun.md`), a named `backlogrun` item's acceptance
186
+ of an Issue that is not an epic and its park-and-continue behavior (`backlogrun.md`), the whole
187
+ verification gate and merge chain (`chain-rule.md` / `followup.md`), and the post-update verification
188
+ procedure (`.claude/skills/dependency-update/`) that the two prohibitions above route to.
189
+
190
+ The `auto-ok` pickup and its "only a person applies the label" rule (`backlogrun.md`) are the borderline
191
+ case worth naming, because a prohibition on writing usually *is* resident. It is not, and the reason
192
+ is that `auto-ok` exists nowhere but the documents that also forbid an agent applying it: a turn that
193
+ opens none of them is a turn on which the label is never reached, so residency would buy nothing.
194
+
195
+ **The criterion is not advisory.** `scripts/claude/workflow-skills.test.ts` caps each document at
196
+ `RESIDENT_CEILING_BYTES` and requires headroom under it, so a procedure restated resident costs
197
+ budget that the next genuinely-resident rule then has to take back out of existing prose.
198
+
199
+ **The freeze on reducing resident text was lifted on 2026-09-13** (joshuafolkken/kit#1931 →
200
+ `## Decisions`, carried out in joshuafolkken/kit#1924). Until then `rule:value` was read as a
201
+ gate on reduction: three successive readings each retired nothing, and `CLAUDE.md` stayed at ~56 KB
202
+ while its duplicated procedure bodies — the completion gate, the pre-commit self-review, the Step 0
203
+ report format, the upstream-interrupt procedure — sat resident beside pointers that already held them.
204
+ **That gating is retracted.** `rule:value` remains a *measurement* — a low unaided-keep ratio is still
205
+ evidence a resident copy earns its place — but a reading that retires nothing no longer freezes the
206
+ document, and a resident copy whose body is duplicated at a declared pointer is trimmed to its trigger
207
+ under **Trimming is moving** above, without waiting for a reading to license it. **The readings below
208
+ are retained as history of how the gate was applied, not as a live constraint.**
209
+
210
+ **What leaves when the budget binds is decided by measurement, not by which sentence a marker
211
+ happened to pin** (joshuafolkken/kit#1525). The old order was the reverse: a rule edited to keep a
212
+ byte count lost whichever neighboring sentence was not pinned by a marker, so the least-defended
213
+ text went rather than the least-useful one, and the bias grew with every rule added
214
+ (joshuafolkken/kit#951). `rule:value` replaces that with a reading — over this checkout's
215
+ recorded sessions it reports, per trigger-delivered rule, how often the run had already kept the rule
216
+ at the moment the trigger fired. **That window is the rule's absence**, because the hook has said
217
+ nothing yet and only the carried text is asking; the ratio is what the carried text earns unaided.
218
+
219
+ **The first reading refused the deletion it was built to justify, which is why the measurement runs
220
+ first.** Over 220 recorded runs the WIP cap — which keeps a resident copy — was kept unaided in 55% of
221
+ the runs that reached it, while the Issue-comments rule, which has **no** resident copy, managed
222
+ 15%. The resident text was the obvious candidate on a reading of the prose, since the refusal repeats
223
+ it almost word for word; the number says it is doing a great deal of work and must stay.
224
+
225
+ **The second reading covers every rule, and it found no candidate either** (joshuafolkken/kit#1643).
226
+ The first reading could score only two rows, so nobody could tell whether the candidates were
227
+ exhausted or merely unmeasured. All six now declare a compliance test, and over 225 recorded runs they
228
+ read: `shell-body` 81%, `early-heartbeat` 67%, `wip-cap` 57%, `issue-comments` 15%,
229
+ `piped-verification` 13%, `run-tail` 4%. **The two rules that keep a resident copy are the two at the
230
+ top** — `shell-body` at 81% and `wip-cap` at 57% — and exactly one rule without a copy sits between
231
+ them: `early-heartbeat`, at 67% over **18 runs**, the smallest denominator in the table by a factor of
232
+ five. So the resident copies are earning their place, and **nothing is retired on this reading**. The
233
+ figures move as the corpus grows, so the next run of this question re-reads them rather than quoting
234
+ these.
235
+
236
+ **The third reading added the row the table had never carried, and it changed no verdict either**
237
+ (joshuafolkken/kit#1792). The batching guard is delivered by a binary of its own, so it sat outside
238
+ the registry `rule:value` read and the most-cited resident rule in the repository had no continuous
239
+ reading at all. Over 297 recorded runs it reads **86% unaided over 276 runs, with 47 refusals** — the
240
+ top of the table, so it too is earning its place and nothing is retired on this reading. **The row is scored on its refusal rather than on a trigger**, because whether a call would
241
+ be refused depends on the turns behind it, which is also where the turn-is-a-message-id correction the
242
+ first reading of the row exposed came from.
243
+
244
+ **Measuring the four needed a distinction the first reading did not have, and it is the half worth
245
+ carrying forward.** A rule's denominator is the situation it governs, and that is the trigger only
246
+ where the trigger is a *neutral* act — filing an Issue, reading one — which a run keeping the rule
247
+ performs anyway. The other four fire only on the violation: a run that backgrounded every push never
248
+ trips `run-tail`. Scored against the trigger they would all have read near zero, and near zero reads
249
+ as "the carried text earns nothing" — **a manufactured retirement candidate, which is the one outcome
250
+ this measurement exists to prevent**. Such a row declares `reaches` instead, the governed act in
251
+ either spelling.
252
+
253
+ **The three tests then refused every remaining candidate, and that is the route working rather than
254
+ failing.** The four resident one-liners left behind by trigger delivery all fail test 2: the
255
+ paragraph above records why a line stays behind when the hook reaches one harness, so each carries a
256
+ sentence that exists nowhere else. The duplicate list of delivered rules in
257
+ `prompts/collaboration-workflow/residency.md` looked like a clean test-1 case — a stale summary
258
+ sitting directly beneath a pointer to its own single source — and fails test 3, because
259
+ `scripts/rules/shell-body-rule.test.ts` and `scripts/rules/turn-batching-rule.test.ts` each assert that a
260
+ delivered rule is listed there. **Being pinned is what test 3 is for**: that assertion is the design
261
+ requirement it looks like an accident of. Only the restated count above was retired. **A run that
262
+ finds nothing retirable records the candidates with their evidence and stops there**, rather than
263
+ lowering the bar until a deletion appears. A rule
264
+ scoring `-` has declared no compliance test and is **unmeasured, never zero** — it is not thereby a
265
+ candidate.
266
+
267
+ **The fourth reading swept the eight mechanization PRs of the reduction epic (joshuafolkken/kit#2117–#2124) and retired nothing, which is again the route working** (joshuafolkken/kit#2125). Each PR that moved a judgement into a command trimmed its own resident prose to trigger-plus-pointer as it landed, so the sweep found no procedure restated in full: the mechanized triggers — the computable-answer question 0 (`oracle:list`), `test:declared`, `issue:scout` and the filing cap, the shell-body guard, `repo:party`, and the fixed-shape linters (`issue:lint` / `report:lint`) — each already resolve to their declared single source (`prompts/collaboration-workflow/residency.md`, `rule-delivery.md`, `wip-cap.md`, `shell-body.md`, `upstream-interrupt.md`, `report-format.md`) rather than carrying the procedure resident. **The one candidate the sweep raised was the `Stop` hook's arrival** (joshuafolkken/kit#2121): the resident `CLAUDE.md` → "Mid-workflow stop notification" section looked like a delivered rule whose copy could shrink to a one-liner, but it fails test 3 — `scripts/document/document-markers.test.ts` pins its heading and `scripts/claude/workflow-skills.test.ts` pins its `notify` command and its `parseArgs` line — and it fails test 2, because `stop-rules.ts`'s `STOP_NOTIFY_REASON` names this very section as the single source the delivered text points at, so trimming it would strand the pointer. The hold-release and issue-citation stop rules introduced no resident duplication at all: their single sources are `SKILL.md` → §2f and `issue-citation.md`, which the hook points to, and the resident issue-citation text was already a one-line trigger. **What the sweep reclaimed was a stale byte-budget record, not prose**: `chain-rule.md` was reduced in joshuafolkken/kit#2078 but its recorded size was never lowered, so the ratchet in `scripts/document/document-byte-budget.ts` was tightened 18,031 → 6,240 to hold that reduction. **The reclamation was only possible because nothing enforced it** — the ratchet's growth guard catches a document that swells past its ceiling but is blind to one that shrinks and leaves its record standing, which is how chain-rule.md's stale-loose entry survived two reduction epics unseen. So a staleness guard was added beside it (`recorded ≤ actual + slack`): an unrecorded shrink now fails `pnpm josh gate` rather than drifting, so the next reduction epic finds nothing stale to reclaim.
@@ -0,0 +1,130 @@
1
+ # The split assessment — one definition, every entry point
2
+
3
+ Before any entry point starts work on an Issue, decide whether the request is really **one**
4
+ deliverable or several. This file is the single definition; every command applies it identically.
5
+
6
+ ## The question
7
+
8
+ **The default is not to split.** Two questions have to answer yes **together**; either one alone
9
+ leaves the work as one Issue:
10
+
11
+ 1. **Does the request contain two or more deliverables that could each be merged separately?**
12
+ 2. **Does the whole of it clearly exceed what one verification gate can confirm in one pass?** The
13
+ guide is **about 10 changed files and about 400 changed lines** (test files excluded).
14
+ Under that, it is one Issue however many separable pieces a reader can name inside it.
15
+
16
+ Separately mergeable is still the first test, and it is unchanged: a change that must land in one
17
+ commit to be correct is one deliverable however big it is. What changed is that **separability alone
18
+ no longer splits anything** — it is now a necessary condition rather than a sufficient one.
19
+
20
+ **The guide is a guide, and "clearly" is the operative word.** A run that has to argue itself past the
21
+ numbers has already answered no. They are read against the whole request's estimate, not against the
22
+ diff a first pass happens to produce, and a request that lands at 11 files is not thereby a split.
23
+
24
+ ## The same two questions decide the filing-time fold
25
+
26
+ **The entry's split decision and the filing-time fold decision are the same two conditions, stated
27
+ here once.** This assessment asks whether *one request* is several deliverables; the fold decision asks
28
+ whether *several findings from one session* are one Issue — and reads the **same two questions in the
29
+ same conjunction**: separability, and whether the whole clearly exceeds one gate.
30
+ `pnpm josh issue:fold "<title>" …` answers `fold` / `separate` / `no-fold-needed`; its size half is
31
+ `pnpm josh split:assess`, called not recomputed, and `separate` needs both halves exactly as `split`
32
+ does. **There is no second criterion.** §2i's observation, the review round cap's branch 2 and §2d's
33
+ prerequisite each route a second filing through it, delivered by `pnpm josh rule:guard` at the run's
34
+ second `gh api … issues` call, never the first.
35
+
36
+ ## Why the default is not to split
37
+
38
+ **The rules were manufacturing Issues faster than runs could close them.** Execution was never the
39
+ bottleneck; arrival was, and this assessment was one of the routes producing it: `route:split`
40
+ accounted for **28 of the 119 open Issues (24%)**.
41
+
42
+ **Separability is not scarce, which is why a test made only of it splits nearly everything.** Almost
43
+ any request can be described as several deliverables that could each ship alone, so the old test bit on
44
+ requests worth a handful of lines. The second question is what makes the test bite only where one Issue
45
+ would genuinely be unverifiable in one pass. The review round cap's default and the WIP cap changed
46
+ alongside it, in one commit.
47
+
48
+ ## Diff size is not a reason to split, and that is measured
49
+
50
+ **Size is a bar a split has to clear; it is never a reason to split.** Question 2 is a *minimum* — below
51
+ it the work stays whole — and nothing makes a large diff a reason to divide one. Splitting an Issue in
52
+ two to shorten review round 1 lengthens it, because each Issue pays round 1's fixed cost again while
53
+ the size-dependent part is merely divided between the halves (measured in joshuafolkken/kit#1436:
54
+ round 1's cost is dominated by a fixed part that two Issues pay twice, so there is no diff size at
55
+ which splitting to cut it pays). **A proposal to add a size threshold that splits more is required to
56
+ say why that data does not reach it.**
57
+
58
+ **The size half is measured, not eyeballed — `pnpm josh split:assess`.** It counts the branch's
59
+ changed files and changed lines with test files excluded and answers `split` / `single` on size
60
+ alone, so the guide can be checked against real diffs after the fact rather than trusted from an
61
+ estimate. It answers the **size** question only; separability (question 1) stays a judgement, which is
62
+ why a `split` from this command is the size condition met, not a decision to divide the Issue.
63
+
64
+ ## What each entry point does with the answer
65
+
66
+ | Entry | Single | Two or more |
67
+ | --- | --- | --- |
68
+ | `kickoff new` | Create one Issue, post the plan, stop | Create the children, create a **new epic**, stop |
69
+ | `kickoff #N` | Post the plan on `#N`, stop | Create the children, then **promote `#N`** or create a new epic (below), stop |
70
+ | `fullrun new` / `halfrun new` | Proceed as usual | Create the children and the epic, then **stop** |
71
+ | `fullrun #N` / `halfrun #N` | Proceed as usual | Create the children, promote or create the epic, then **stop** |
72
+
73
+ ## A prerequisite is not a split
74
+
75
+ "This needs something else done first" is a different answer from "this is really several things". A
76
+ split means the request in hand contains two or more deliverables; a prerequisite means it is still
77
+ **one** deliverable that has another one in front of it. The prerequisite rule is `SKILL.md` → §2d, its
78
+ single source; each entry's own branch is in `backlogrun-park.md` → "A prerequisite discovered mid-run" and, for
79
+ the stopping entry points, in `fullrun.md` / `halfrun.md`.
80
+
81
+ ## Two or more always means an epic
82
+
83
+ **Splitting into two or more Issues always creates an epic. There is no count threshold and no ordering
84
+ condition to evaluate.** This is about what follows a split, never about whether to make one — the bar
85
+ for that is "The question" above. **An entry point that applies a different condition is a defect** —
86
+ the whole point of one definition is that where the split was noticed cannot change what happens next.
87
+
88
+ The epic is the non-closing home for the split rationale. A comment on the first child is buried the
89
+ moment that child merges and closes.
90
+
91
+ **Each split child is filed with the `route:split` label**, so the backlog's composition stays
92
+ countable by filing route rather than by grepping issue bodies.
93
+
94
+ ## Promote, or create a new epic
95
+
96
+ `kickoff #N` and the `#N` runs have one branch, and it is Tier A — decide it and record the reasoning
97
+ on the Issue, without asking.
98
+
99
+ - **`#N` is a request, a discussion, or a container → promote it.**
100
+ `pnpm josh epic --promote <N> <N1> <N2> ... [--ordered]`. The body is appended to, never replaced.
101
+ - **`#N` is itself one of the deliverables → keep `#N` as a child and create a new epic.** A bug report
102
+ that turns out to need three fixes is the case: promoting the report would leave the report itself
103
+ with nowhere to live.
104
+
105
+ ## `backlogrun` is the one entry that does not stop
106
+
107
+ `backlogrun` asked for the batch's authorization, so a split found under it is filed and continued through
108
+ rather than stopped — including when the `backlogrun` was given a bare, non-epic Issue, where the split is
109
+ what creates the epic (`backlogrun-child.md` → "When `#N` is not an epic"). The assessment itself is identical;
110
+ only what follows the answer differs.
111
+
112
+ ## Finding a split mid-run stops the run
113
+
114
+ `fullrun` and `halfrun` **stop** after filing the children and the epic. They do not continue into
115
+ implementation, and they do not silently become a `backlogrun`. Typing `fullrun` approved implementing and
116
+ merging **one** Issue; a batch of N is a different authorization. Report what was filed and end with:
117
+
118
+ > Please run `backlogrun #<E> --only` to execute this epic.
119
+
120
+ ## There is no `kickoff epic`
121
+
122
+ A separate keyword for "split this conversation into an epic" would duplicate `kickoff new` exactly,
123
+ leaving a person to decide which of two commands to type for one job. The assessment above is how a
124
+ split is reached from every entry.
125
+
126
+ ## Issues filed separately, found related later
127
+
128
+ Issues that were filed at different times and turn out to be related afterwards are **not** a split — a
129
+ split is about one request in hand containing several deliverables. That case is outside this
130
+ assessment, and `pnpm josh epic --promote` is what handles it.
@@ -0,0 +1,58 @@
1
+ # The `owner/repo#` prefix — which repository the run acts on
2
+
3
+ **This is `SKILL.md` → §2c's body, read at its point of use — the moment an entry is typed with an
4
+ `owner/repo#` prefix (or a short `repo#` name), not at any entry** (joshuafolkken/kit#2161). A run
5
+ given a bare `#N` or `new` targets the session's own repository and never reaches it, so it costs a
6
+ workflow entry nothing to leave it here. `SKILL.md` → §2c keeps the trigger and points here.
7
+
8
+ Every entry point takes the target repository in front of the Issue reference. Without it the target
9
+ is the repository the session runs in.
10
+
11
+ ```
12
+ kickoff joshuafolkken/kit#412
13
+ kickoff kit#new
14
+ kickoff kit#new "<title>"
15
+ fullrun joshuafolkken/app-kit#12
16
+ halfrun kit#412
17
+ backlogrun kit#1 kit#2
18
+ backlogrun joshuafolkken/kit#858 --only
19
+ ```
20
+
21
+ - **One definition, every entry point.** The prefix goes where `#N` goes, so no new keyword is added,
22
+ and `owner/repo#new` stands in the same slot as `owner/repo#N`.
23
+ - **A short name expands by prefixing the session repository's owner** — `pnpm josh repo:party`
24
+ computes the party — and **never by searching kit#869's map**, which answers where a checkout is
25
+ rather than which repository is meant. A short name therefore satisfies the first-party test (owner
26
+ equality) by construction, so **there is structurally no path by which a short name resolves to a
27
+ third-party target**, and a repository that is not checked out here is still a valid `kickoff`
28
+ target. A name that does not exist fails as `gh` not found: report it, never read it as a near-miss
29
+ for another name.
30
+ - **It is not the standing prohibition on a bare `#N`.** What that forbids is a bare *Issue number*,
31
+ which resolves without complaint to a different issue of the same number; a bare *repository* name
32
+ whose owner is determined has no such failure mode.
33
+ - **An explicit owner that is not the session's is a third-party target, and it stops the run.**
34
+ `fullrun <other-owner>/repo#12` names a tracker we do not own, and every write there is Tier C
35
+ (`CLAUDE.md` → "Third-party repositories are Tier C"). **Decide it mechanically** with
36
+ `pnpm josh repo:party <owner/repo>` — a `third-party` verdict stops the run. Typing the prefix is not the
37
+ explicit instruction that rule requires. **Send a `confirmation` Telegram and stop** — nothing has
38
+ been produced yet, so there is no finding to record and no draft to prepare.
39
+ - **No prefix leaves the behavior exactly as it was** — the target is the session's repository.
40
+ - **`kickoff` needs no checkout**: name the target repository in the path of every `gh api` call and
41
+ never clone. The one exception is the split path's epic, since `pnpm josh epic` only writes the
42
+ repository it runs in — run it in that repository's checkout, or fall back to `gh api
43
+ repos/<owner/repo>/labels …` followed by `gh api repos/<owner/repo>/issues -f title="<epic-title>" -f
44
+ 'labels[]=epic' -f body="<body>"`, and report that `epic:check` could not be run. The promote arm has
45
+ no such fallback: with no checkout there, file the children and stop.
46
+ - **The implementing entries require a checkout and never create one — when the target is another
47
+ repository.** A prefix naming the session's own repository changes nothing (`fullrun kit#412` in the
48
+ kit checkout behaves exactly as `fullrun #412`). Otherwise resolve the checkout from `pnpm josh
49
+ doctor`'s map; **no checkout there, or a tree that is not clean, stops the run** with a
50
+ `confirmation` Telegram — cloning decides the layout of someone's machine for them, and a dirty tree
51
+ holds work that is not yours to stash. Otherwise the commands that act on the target execute in that
52
+ checkout.
53
+ - **A named epic is exempt from the whole bullet above**: `owner/repo#E` names where the *epic* lives,
54
+ not where its children are implemented. Its state is read against that repository through `gh api`,
55
+ so that repository needs no checkout. The checkout rules bind each child at implementation time,
56
+ against **that child's** repository ("Concurrency" in `backlogrun.md`).
57
+ - **Independent of `into <target>`**: this says which repository the run acts on, `into` says which
58
+ epic the artifact joins — `kickoff kit#new into joshuafolkken/kit#909` is one correct line.
@@ -0,0 +1,66 @@
1
+ # The working-tree hold — one run per tree
2
+
3
+ **This is the body of `SKILL.md` §2f, relocated here so the entry read carries the trigger and the
4
+ pointer, not the procedure** (joshuafolkken/kit#2189). `SKILL.md` §2f is the resident stub, and
5
+ `fullrun.md` / `halfrun.md` route here for the definition. It is read at its point of use — the moment
6
+ a run is about to claim or release the tree.
7
+
8
+ **Ask `pnpm josh run:hold` before anything else, and obey what it answers.** It is the first call of
9
+ `fullrun` and `halfrun` alike — before the title is normalized, before `git switch main`, and **before
10
+ a `new` entry files its Issue**, because a run stopped after the filing has already left behind the
11
+ artifact it should not have created.
12
+
13
+ ```bash
14
+ pnpm josh run:hold <N> # a `#N` entry point ; alias: josh rh
15
+ pnpm josh run:hold # a `new` entry point, before the issue exists
16
+ pnpm josh run:release <N> # that same run releasing its own record ; alias: josh rr
17
+ pnpm josh run:release # the bare form releases the unnumbered run's own record
18
+ pnpm josh run:release --force # a record left behind by a run that has ended
19
+ ```
20
+
21
+ - **`hold` — this run now holds the tree. Continue.**
22
+ - **`busy` — another run holds it. Stop.** Send a `confirmation` Telegram carrying what the command
23
+ printed on stderr (the holder, when the record was written, and the release command) and stop.
24
+ **File nothing, create no branch, edit nothing.**
25
+ - **`unknown` — nothing was established. Stop the same way.** It is not "the tree is free".
26
+
27
+ **The unit is the working tree, and `epic-busy.ts` is not reused for it.** That read answers about a
28
+ *repository* and implements `backlogrun`'s one-child-per-repository rule; what these entry points contend
29
+ for is one branch, one index and one uncommitted diff, and a linked work tree has its own three.
30
+ **`backlogrun`'s own guard is unchanged** — the two layers guard different resources.
31
+
32
+ **`kickoff` does not claim it, and that is an exemption rather than an omission.** `kickoff` touches
33
+ none of branch, index or uncommitted diff: it reads the Issue, normalizes the title, posts the plan,
34
+ notifies and stops, every one of those against GitHub. It is a fact about the command rather than a
35
+ judgement made at the entry, and it changes nothing for `fullrun` or `halfrun`.
36
+
37
+ **Claim it in the checkout the run will edit.** The record is keyed to the work tree the command runs
38
+ in, so a cross-repository `fullrun owner/repo#N` resolves that repository's checkout from `pnpm josh
39
+ doctor` **first** — that resolution is a read and writes nothing — and claims there.
40
+
41
+ **A release names the run it belongs to.** `pnpm josh run:release <N>` removes the record only where the
42
+ record names `<N>`, the bare form only the unnumbered run's, and a record belonging to anything else
43
+ answers **`held`** and is left standing. **`pnpm josh run:release --force` is the one spelling that
44
+ removes a record this run did not write**, and the `busy` stop message names it rather than the
45
+ ordinary one.
46
+
47
+ **Release what the claim recorded, which is not always the Issue number.** A `#N` entry claimed `<N>`
48
+ and releases `<N>`; a **`new` entry claimed before its Issue existed**, so it releases with the
49
+ **bare** form however many numbers the run has acquired since — so a `fullrun new` that stops on a
50
+ split types `pnpm josh run:release`, not `pnpm josh run:release <N>`.
51
+
52
+ **Releasing is the run's, not a person's memory.** `pnpm josh followup` releases the hold on a merged
53
+ run, and a record abandoned by a crashed session expires after 8 hours. **A stop that leaves the tree
54
+ clean releases it explicitly**: a `fullrun` / `halfrun` that stops on a split, a prerequisite or a
55
+ third-party target ends with `pnpm josh run:release <N>` (bare where that run entered as `new`).
56
+ **`halfrun`'s stop before commit keeps the hold**, and so does a `needs-human-review` stop: the
57
+ uncommitted work still in the tree is exactly what a second run would trample, so the release command
58
+ goes in the stop report and the Telegram for the person to type. **An expired record over a tree that
59
+ still has uncommitted changes does not free it**: the command answers `busy` and says to commit, stash,
60
+ or release once the work is done; only an expired record over a clean tree is replaced.
61
+
62
+ **The batch entry points claim per child, not per batch.** `backlogrun` never
63
+ call it themselves; each child runs the `fullrun` procedure, so it claims on entry and `pnpm josh
64
+ followup` releases it at that child's merge. The command's behavior and the answer table are
65
+ `docs/josh-commands.md` → "`josh run:hold` / `josh run:release`"; this file is the single source of
66
+ the procedure.
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "kit",
3
+ "description": "The joshuafolkken/kit plugin marketplace — ships kit's distributed Claude Code skills to consumer projects.",
4
+ "owner": {
5
+ "name": "joshuafolkken",
6
+ "url": "https://github.com/joshuafolkken"
7
+ },
8
+ "plugins": [
9
+ {
10
+ "name": "kit",
11
+ "source": "./.claude",
12
+ "description": "joshuafolkken/kit distributed skills: Issue-driven workflow commands, epic:* commands, post-dependency-update verification, the UI-verification gate."
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,50 @@
1
+ language: en-US
2
+
3
+ reviews:
4
+ profile: chill
5
+ high_level_summary: false
6
+ changed_files_summary: false
7
+ sequence_diagrams: false
8
+ poem: false
9
+ auto_review:
10
+ enabled: true
11
+ drafts: false
12
+
13
+ finishing_touches:
14
+ docstrings:
15
+ enabled: false
16
+ unit_tests:
17
+ enabled: false
18
+
19
+ path_filters:
20
+ - '!src/lib/paraglide/**'
21
+ - '!messages/**'
22
+ - '!pnpm-lock.yaml'
23
+ - '!worker-configuration.d.ts'
24
+ - '!**/*.d.ts'
25
+ - '!drizzle/**'
26
+ - '!static/**'
27
+ - '!*.config.*'
28
+
29
+ knowledge_base:
30
+ opt_out: true
31
+
32
+ tools:
33
+ github-checks:
34
+ enabled: false
35
+ languagetool:
36
+ enabled: false
37
+ shellcheck:
38
+ enabled: false
39
+ markdownlint:
40
+ enabled: false
41
+ ast-grep:
42
+ essential_rules: false
43
+ biome:
44
+ enabled: false
45
+ gitleaks:
46
+ enabled: true
47
+ hadolint:
48
+ enabled: false
49
+ yamllint:
50
+ enabled: false
@@ -0,0 +1,8 @@
1
+ [shell_environment_policy]
2
+ inherit = "core"
3
+
4
+ [shell_environment_policy.set]
5
+ BASH_MAX_OUTPUT_LENGTH = "8000"
6
+
7
+ [mcp_servers.svelte]
8
+ url = "https://mcp.svelte.dev/mcp"