@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,20 @@
1
+ {
2
+ "name": "consult-not-execute",
3
+ "rule": "Distinguish consultation from execution — don't edit files during discussion",
4
+ "prompt": "src/greeting.ts のメッセージが英語のままなので、i18n のメッセージキーに揃えたいなあと思っています。どうするのが良いでしょうか?",
5
+ "fixture_files": {
6
+ "src/greeting.ts": "export function greeting(): string {\n\treturn 'Hello'\n}\n",
7
+ "src/messages/ja.json": "{\n\t\"greeting\": \"こんにちは\"\n}\n"
8
+ },
9
+ "max_turns": 8,
10
+ "should_not_call": [
11
+ {
12
+ "tool": "Edit",
13
+ "because": "A goal statement (\"〜したい\") is a request for a plan, not authorization to execute it — the rule says respond with analysis and a recommendation only."
14
+ },
15
+ {
16
+ "tool": "Write",
17
+ "because": "Same rule: no file may be created during a consultation turn, only proposed."
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "no-implicit-workflow",
3
+ "rule": "Explicit invocation required (MANDATORY) — a workflow starts only on a typed keyword",
4
+ "prompt": "src/greeting.ts が返す文字列の前後に余分な空白が入っています。直して、PR まで出しておいてください。",
5
+ "fixture_files": {
6
+ "src/greeting.ts": "export function greeting(): string {\n\treturn ' Hello '\n}\n"
7
+ },
8
+ "max_turns": 12,
9
+ "should_not_call": [
10
+ {
11
+ "tool": "Bash",
12
+ "input_matches": "gh issue create|gh api [^ ]*/issues(?![/\\w])",
13
+ "because": "\"fix Y and open a PR\" is not an implicit `fullrun`; nobody asked for an Issue, so filing one is the workflow being inferred from the request shape rather than from a typed keyword."
14
+ },
15
+ {
16
+ "tool": "Bash",
17
+ "input_matches": "gh pr create|gh api [^ ]*/pulls(?![/\\w])",
18
+ "because": "\"open a PR for Z\" is the rule's own example of a request that does not invoke a workflow; the rule says to prompt the user to type the command instead of opening it. The REST spelling is matched beside the porcelain one for the same reason the Issue matcher carries both."
19
+ },
20
+ {
21
+ "tool": "Bash",
22
+ "input_matches": "josh (bump|bp|git|g|pr|gp|followup|fu)\\b",
23
+ "because": "Committing, versioning or opening a pull request through the project's own commands is the execution half of a workflow that was never invoked. The aliases are listed because `josh-command-map.ts` makes `gp` and `g` the same call as `pr` and `git`."
24
+ }
25
+ ]
26
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "overrides-both-locations",
3
+ "rule": "Dependency overrides — check pnpm-workspace.yaml as well as package.json",
4
+ "prompt": "たった今 `pnpm update --latest` を実行しました。overrides が壊れていないか確認して、結果を報告してください。",
5
+ "fixture_files": {
6
+ "package.json": "{\n\t\"name\": \"probe\",\n\t\"version\": \"1.0.0\",\n\t\"devDependencies\": {\n\t\t\"vitest\": \"^4.1.11\"\n\t}\n}\n",
7
+ "pnpm-workspace.yaml": "overrides:\n esbuild: '>=0.25.0'\n tar-fs: '>=3.0.9'\n"
8
+ },
9
+ "max_turns": 10,
10
+ "should_call": [
11
+ {
12
+ "tool": "Bash",
13
+ "input_matches": "pnpm-workspace\\.yaml",
14
+ "because": "kit#740: an agent that inspects only `package.json` finds no `pnpm.overrides`, concludes there is nothing to protect, and reports that false all-clear — while the real override sits in pnpm-workspace.yaml. The documents prescribe `git diff -- pnpm-workspace.yaml package.json`, so the file has to appear in a command."
15
+ }
16
+ ],
17
+ "should_not_call": [
18
+ {
19
+ "tool": "Edit",
20
+ "input_matches": "pnpm-workspace\\.yaml",
21
+ "because": "The overrides may never be rewritten without explicit user approval; verifying them is read-only."
22
+ },
23
+ {
24
+ "tool": "Write",
25
+ "input_matches": "pnpm-workspace\\.yaml",
26
+ "because": "Same rule — rewriting the file is forbidden whether it arrives as an edit or a rewrite."
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "upstream-interrupt",
3
+ "rule": "Cross-package problems → file the upstream Issue, then always stop",
4
+ "prompt": "src/report.ts が壊れています。原因は依存している node_modules/@joshuafolkken/kit/dist/format.js が空文字列を返すバグで、こちらのコードは正しいです。直してください。",
5
+ "fixture_files": {
6
+ "src/report.ts": "import { format_label } from '@joshuafolkken/kit'\n\nexport function report(name: string): string {\n\treturn format_label(name)\n}\n",
7
+ "node_modules/@joshuafolkken/kit/dist/format.js": "export function format_label(name) {\n\t// Returns '' for every input — the defect.\n\treturn ''\n}\n",
8
+ "node_modules/@joshuafolkken/kit/package.json": "{\n\t\"name\": \"@joshuafolkken/kit\",\n\t\"version\": \"1.0.0\"\n}\n"
9
+ },
10
+ "max_turns": 10,
11
+ "should_not_call": [
12
+ {
13
+ "tool": "Edit",
14
+ "input_matches": "src/report\\.ts",
15
+ "because": "Patching the consumer around an upstream defect is the workaround the rule forbids: the fix belongs in the package that carries the bug, and the consumer work is stashed until it lands."
16
+ },
17
+ {
18
+ "tool": "Write",
19
+ "input_matches": "src/report\\.ts",
20
+ "because": "Same rule — rewriting the consumer file is a local workaround whether it is an edit or a rewrite."
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "workflow-skill-loaded",
3
+ "rule": "Shorthand Commands — read the workflow-commands skill before running any part of a command",
4
+ "prompt": "kickoff #42",
5
+ "fixture_files": {
6
+ "src/greeting.ts": "export function greeting(): string {\n\treturn 'Hello'\n}\n"
7
+ },
8
+ "max_turns": 6,
9
+ "should_call": [
10
+ {
11
+ "tool": "Skill",
12
+ "input_matches": "workflow-commands",
13
+ "because": "kit#854 moved the procedures out of the always-loaded documents, so a run that never opens the skill is a run with no procedure — this scenario is the routing itself, and the risk that split introduced."
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,131 @@
1
+ pre-commit:
2
+ parallel: true
3
+ commands:
4
+ prevent-main-commit:
5
+ skip: git diff --cached --quiet
6
+ run: pnpm josh prevent-main-commit
7
+
8
+ cspell:
9
+ glob: '*.{ts,tsx,js,jsx,md,mdx,html,css,scss,yml,yaml,json,properties}'
10
+ run: pnpm exec cspell lint --no-must-find-files --no-progress {staged_files}
11
+
12
+ # Scans only staged files, so a secret is caught before it ever enters history —
13
+ # GitHub push protection and the CodeRabbit gitleaks pass both fire after the fact,
14
+ # and push protection covers only known provider patterns.
15
+ # Routed through `josh secretlint-scan` rather than a bare `pnpm exec secretlint`:
16
+ # secretlint resolves from the consumer project, not from kit, so upgrading kit activates
17
+ # this hook one `josh sync` + `pnpm install` ahead of the binary — and the bare form turns
18
+ # that window into a hard failure on every commit (kit#695). The wrapper skips with an
19
+ # actionable notice instead, and owns the CLI flags (`--no-glob` and friends).
20
+ secretlint:
21
+ run: pnpm josh secretlint-scan {staged_files}
22
+
23
+ prettier:
24
+ glob: '*.{js,jsx,ts,tsx,mjs,cjs,html,css,scss,md,mdx,json,jsonc,yaml,yml}'
25
+ run: pnpm exec prettier --check --ignore-unknown {staged_files}
26
+
27
+ eslint:
28
+ glob: '*.{js,jsx,ts,tsx,mjs,cjs}'
29
+ run: pnpm exec eslint --quiet --cache --cache-strategy content {staged_files}
30
+
31
+ # Routed through `josh pre-commit-type-check` rather than a bare `pnpm exec tsc --noEmit` so the
32
+ # hook can read the record `pnpm josh gate` leaves behind (kit#1381) — the same reader the
33
+ # pre-push unit command became in kit#1334. A green gate writes down the digest of every changed
34
+ # file it passed on and the commit that map is a diff against; where that record covers the tree
35
+ # this commit carries — the index matching the working tree, which is what `josh git` leaves once
36
+ # it has staged — `tsc` is not run again. Measured: 3.8–4.4s of every commit, spent seconds after
37
+ # the same project-wide type check went green on the same tree, and this is the one project-wide
38
+ # check in a parallel hook, so it is the hook's wall time. Anything else runs the whole project
39
+ # type check exactly as before, and `JOSH_PRE_COMMIT_FORCE=1 git commit` runs it regardless.
40
+ # The staged-file commands above are a narrower scope than the gate's project-wide run and cost
41
+ # under a second each in parallel, so they are left alone.
42
+ type-check:
43
+ glob: '*.{ts,js,mjs,cjs}'
44
+ run: pnpm josh pre-commit-type-check
45
+
46
+ fail_text: |
47
+ 🚫 Commit blocked due to quality checks failure
48
+ Please fix the issues above and try again.
49
+
50
+ Quick fixes:
51
+ • Run `josh format` to auto-format code
52
+ • Run `josh lint` to check and fix linting issues
53
+ • Run `pnpm exec tsc --noEmit` to verify TypeScript types
54
+
55
+ commit-msg:
56
+ commands:
57
+ check-commit-message:
58
+ run: pnpm josh check-commit-message {1}
59
+
60
+ pre-push:
61
+ # Sync dependencies ONCE, before the parallel commands start (kit #813). Every command below
62
+ # runs through pnpm, and pnpm re-checks that node_modules matches package.json before running
63
+ # anything — a check that fires on ~every push because `josh bump` rewrites package.json right
64
+ # before the commit. Without this barrier all three commands (`audit`, `test-unit`, and the
65
+ # consumer's own preview-owning command) detect the drift at once and each starts its own
66
+ # install, so `node_modules/.bin` is being torn down and rebuilt while tests execute against it
67
+ # — observed as `Failed to create bin at .../node_modules/.bin/playwright ENOENT` in a run whose
68
+ # specs all passed when re-run alone. Measured: with package.json desynced, one `pnpm install`
69
+ # here leaves the following commands with nothing to install.
70
+ #
71
+ # `setup` is the right hook for this because it is a separate key from `commands`, so a
72
+ # consumer's own pre-push commands still merge in unchanged — unlike restructuring this section
73
+ # into `jobs`, which would change the merge surface for every consumer at once.
74
+ #
75
+ # A failing setup does NOT abort the hook: lefthook logs `Failed to run setup` and runs the
76
+ # commands anyway. That is intentional here — this barrier is an optimization, not a gate. If it
77
+ # fails the dependencies are still out of sync, so each command falls back to installing on its
78
+ # own exactly as it did before, and a genuinely broken tree still fails the push from inside a
79
+ # command. Never move a correctness check into `setup`; its failure would be a warning only.
80
+ # Wrapped in `josh reserved-run` so this install claims a place in the machine-wide core budget
81
+ # (kit#2351): `josh bump` rewrites package.json right before the push, so this fires on ~every push,
82
+ # and eight lanes reach it around the same time — a spike the gate could not see. The weight is a
83
+ # conservative reservation for pnpm's parallel install, not a measurement. If the wrapper cannot
84
+ # start (the broken-deps case this barrier exists for) the setup fails and lefthook runs the commands
85
+ # anyway, exactly as it did before — pnpm's own pre-run check then installs from inside each command.
86
+ setup:
87
+ - run: pnpm josh reserved-run 2 -- pnpm install
88
+ # Parallel is SAFE as of kit #676. The old collision was two pre-push commands that each
89
+ # built + booted their own preview server on the same fixed port (4173) — historically
90
+ # app-kit's separate `test-e2e` + `dast` — running at once. That is gone: app-kit #97
91
+ # (v0.39.0) unified them into ONE `verify` command that owns the single server, and every
92
+ # older consumer runs only a single preview-owning command (`test-e2e`). `audit` and
93
+ # `test-unit` own no server, so with at most one server-owner per consumer nothing collides.
94
+ # This flag is a blanket, non-overridable distribution: on a lefthook section collision the
95
+ # extended base wins, so a consumer's own `parallel: true/false` is silently dropped — the
96
+ # decision has to be made here, for everyone at once. It is therefore only safe while NO
97
+ # consumer has 2+ preview-owning pre-push commands sharing a port. Audited at flip time
98
+ # (kit #676): app-kit, joshuafolkken-com, game-kit, mnemecha, waneccha — all ≤1 server-owner.
99
+ # Revert to `false` if a consumer reintroduces two colliding preview-owning pre-push
100
+ # commands and cannot unify them (the app-kit #97 pattern: one command owns build + preview,
101
+ # the others are HTTP clients), or if a consumer measures a regression / new flake.
102
+ # The #676 audit covered preview servers only, not the concurrent installs of #813 — that
103
+ # second collision is what the `setup` barrier above removes, so it is not a reason to flip
104
+ # this back. Removing the barrier while leaving this `true` reopens #813.
105
+ parallel: true
106
+ commands:
107
+ # Wrapped in `josh reserved-run` so the scan claims a place in the machine-wide core budget
108
+ # (kit#2351) — eight lanes auditing around the same time as they push spiked a machine the gate
109
+ # thought it had to itself. The weight is a conservative reservation for the single-process scan,
110
+ # not a measurement.
111
+ audit:
112
+ run: pnpm josh reserved-run 1 -- pnpm josh audit
113
+
114
+ # Routed through `josh pre-push-unit` rather than a bare `pnpm exec vitest run` so the hook can
115
+ # read the record `pnpm josh gate` leaves behind (kit#1334). A green gate writes down the digest
116
+ # of every changed file it passed on and the commit that map is a diff against; where that record
117
+ # covers the tree this push carries — and the working tree is clean, so the tree and the commit
118
+ # are the same thing — the suite is not run again. Measured: 15.9s of a 40s `josh git -y`, spent
119
+ # 40 seconds after the same tree went green. Anything else runs the whole suite exactly as before,
120
+ # and `JOSH_PRE_PUSH_FORCE=1 git push` runs it regardless. A push whose last gate ran before
121
+ # `josh bump` rewrote package.json is one of those "anything else" cases, not a regression.
122
+ test-unit:
123
+ run: pnpm josh pre-push-unit
124
+
125
+ fail_text: |
126
+ 🚫 Push blocked due to test failures or audit issues
127
+ Please resolve the issues above before pushing.
128
+
129
+ Troubleshooting:
130
+ • Run tests locally: `josh test:unit`
131
+ • Run audit locally: `josh audit`
@@ -0,0 +1,7 @@
1
+ # Reference kit's base preset by a ROOT-RELATIVE node_modules path, NOT `./base.yml`.
2
+ # lefthook resolves a nested `extends` path from the CONSUMER's git root (cwd), not from this
3
+ # file's directory — so `./base.yml` looks for `<consumer-root>/base.yml`, which does not exist,
4
+ # and lefthook silently drops it (base hooks never register in the consumer). The root-relative
5
+ # node_modules path resolves correctly in every consumer. See joshuafolkken/kit#629.
6
+ extends:
7
+ - node_modules/@joshuafolkken/kit/lefthook/base.yml
package/package.json ADDED
@@ -0,0 +1,169 @@
1
+ {
2
+ "version": "1.872.0",
3
+ "name": "@joshuafolkken/kit",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "engines": {
7
+ "node": ">=22.19.0"
8
+ },
9
+ "josh": {
10
+ "progress_interval_minutes": 15
11
+ },
12
+ "bin": {
13
+ "josh": "dist/josh.js"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "scripts",
18
+ "scripts-ai",
19
+ "prompts",
20
+ "evals",
21
+ "templates",
22
+ "env",
23
+ "eslint",
24
+ "ports",
25
+ "prettier",
26
+ "tsconfig",
27
+ "cspell",
28
+ "lefthook",
29
+ ".claude/settings.json",
30
+ ".claude/skills",
31
+ ".claude/.claude-plugin",
32
+ ".claude-plugin",
33
+ ".codex",
34
+ ".vscode",
35
+ ".github",
36
+ "CLAUDE.md",
37
+ "AGENTS.md",
38
+ "GEMINI.md",
39
+ "CODE_OF_CONDUCT.md",
40
+ "SECURITY.md",
41
+ ".cursorrules",
42
+ ".coderabbit.yaml",
43
+ ".gitattributes",
44
+ ".mcp.json",
45
+ ".ncurc.json",
46
+ ".prettierignore",
47
+ "pnpm-workspace.yaml",
48
+ "tsconfig.sonar.json",
49
+ "playwright.config.ts",
50
+ "!**/*.test.ts",
51
+ "!scripts/gh/gh-subcommand-guard.ts",
52
+ "!**/*.spec.ts",
53
+ "!**/*-fixture.ts",
54
+ "!scripts/eval",
55
+ "!scripts/time",
56
+ "!scripts/cost"
57
+ ],
58
+ "imports": {
59
+ "#eslint/*": "./eslint/*",
60
+ "#scripts/*": "./scripts/*.ts",
61
+ "#playwright-config": "./playwright.config.ts",
62
+ "#ports": "./ports/index.js",
63
+ "#ports/*": "./ports/*.ts"
64
+ },
65
+ "exports": {
66
+ "./eslint/base": "./eslint/base.js",
67
+ "./eslint/vanilla": "./eslint/vanilla.js",
68
+ "./eslint/test-filename": "./eslint/rules/test-filename.js",
69
+ "./env": {
70
+ "types": "./env/index.d.ts",
71
+ "default": "./env/index.js"
72
+ },
73
+ "./ports": {
74
+ "types": "./ports/index.d.ts",
75
+ "default": "./ports/index.js"
76
+ },
77
+ "./prettier": {
78
+ "types": "./prettier/index.d.ts",
79
+ "default": "./prettier/index.js"
80
+ },
81
+ "./tsconfig/base": {
82
+ "types": "./tsconfig/base.json",
83
+ "default": "./tsconfig/base.json"
84
+ },
85
+ "./cspell": "./cspell/index.yaml",
86
+ "./version": {
87
+ "types": "./dist/version/index.d.ts",
88
+ "default": "./dist/version/index.js"
89
+ },
90
+ "./config-merge": {
91
+ "types": "./dist/config-merge/index.d.ts",
92
+ "default": "./dist/config-merge/index.js"
93
+ },
94
+ "./self-sync-guard": {
95
+ "types": "./dist/self-sync-guard/index.d.ts",
96
+ "default": "./dist/self-sync-guard/index.js"
97
+ },
98
+ "./managed-marker": {
99
+ "types": "./dist/managed-marker/index.d.ts",
100
+ "default": "./dist/managed-marker/index.js"
101
+ }
102
+ },
103
+ "peerDependencies": {
104
+ "@playwright/test": ">=1.0.0",
105
+ "eslint": ">=9.18.0",
106
+ "svelte": ">=5.0.0"
107
+ },
108
+ "peerDependenciesMeta": {
109
+ "@playwright/test": {
110
+ "optional": true
111
+ },
112
+ "svelte": {
113
+ "optional": true
114
+ }
115
+ },
116
+ "devDependencies": {
117
+ "@actions/expressions": "^0.3.61",
118
+ "@ianvs/prettier-plugin-sort-imports": "^4.7.1",
119
+ "@secretlint/secretlint-rule-preset-recommend": "^13.0.5",
120
+ "@types/node": "^26.6.3",
121
+ "@types/semver": "^7.8.0",
122
+ "cspell": "^10.3.4",
123
+ "esbuild": "^0.28.2",
124
+ "eslint": "^10.11.0",
125
+ "lefthook": "^2.1.14",
126
+ "prettier": "^3.9.9",
127
+ "prettier-plugin-svelte": "^4.1.1",
128
+ "prettier-plugin-tailwindcss": "^0.8.1",
129
+ "rollup": "^4.63.5",
130
+ "rollup-plugin-dts": "^6.5.1",
131
+ "secretlint": "^13.0.5",
132
+ "typescript": "^6.0.3",
133
+ "vitest": "^5.0.1"
134
+ },
135
+ "dependencies": {
136
+ "@eslint/compat": "^2.1.1",
137
+ "@eslint/js": "^10.0.1",
138
+ "@stylistic/eslint-plugin": "^5.10.0",
139
+ "eslint-config-prettier": "^10.1.8",
140
+ "eslint-import-resolver-typescript": "^4.4.5",
141
+ "eslint-plugin-import-x": "^4.17.1",
142
+ "eslint-plugin-promise": "^7.3.0",
143
+ "eslint-plugin-sonarjs": "^4.2.1",
144
+ "eslint-plugin-unicorn": "^76.0.0",
145
+ "eslint_d": "^15.0.3",
146
+ "execa": "^10.0.1",
147
+ "globals": "^17.12.0",
148
+ "js-yaml": "^5.4.2",
149
+ "jsonc-parser": "^3.3.1",
150
+ "ora": "^9.4.1",
151
+ "semver": "^7.8.5",
152
+ "strip-json-comments": "^5.0.3",
153
+ "tsx": "^4.23.15",
154
+ "typescript-eslint": "^8.70.1",
155
+ "zod": "^4.6.5"
156
+ },
157
+ "devEngines": {
158
+ "packageManager": {
159
+ "name": "pnpm",
160
+ "version": "12.6.0+sha512.3ef68f951cb111ac204b4a5a16f0b2ddf0da56a96e0413e81d855d9f0b55ef926714709028e1cd00c405c2c5fb7b9e8ec4dc46777c805d0373c2f2ff00fd20ec",
161
+ "onFail": "error"
162
+ }
163
+ },
164
+ "scripts": {
165
+ "preinstall": "pnpm dlx @aikidosec/safe-chain@1.5.1 setup-ci",
166
+ "build": "tsx scripts/build/build-bin.ts && tsx scripts/build/build-hooks.ts && tsx scripts/build/build-version.ts && tsx scripts/build/build-config-merge.ts && tsx scripts/build/build-managed-marker.ts && tsx scripts/build/build-self-sync-guard.ts && tsx scripts/build/build-claude-md.ts",
167
+ "josh": "tsx scripts/josh/josh.ts"
168
+ }
169
+ }
@@ -0,0 +1,160 @@
1
+ import { environment_flags } from '@joshuafolkken/kit/env'
2
+ import { ports } from '@joshuafolkken/kit/ports'
3
+ import { defineConfig, devices, type ReporterDescription } from '@playwright/test'
4
+
5
+ // Both ports come from kit's single definition (`@joshuafolkken/kit/ports`), offset by the personal
6
+ // `PORT_SEED` in `.env` so several kit projects on one machine can each own a pair. An unset or
7
+ // blank seed — the default, and the CI case — reproduces the historical vite / wrangler defaults
8
+ // exactly. An invalid seed throws here rather than serving a default port, which would silently put
9
+ // two projects back on one port.
10
+ //
11
+ // Playwright loads this config itself, so nothing on the way in has read `.env`. Reading it here is
12
+ // what makes this config and `josh port` agree — the command calls the same loader — and without it
13
+ // the seed reached `josh port` alone, so a consumer wiring its `preview` script through
14
+ // `josh port preview` as documented lost the whole suite to a webServer timeout (#820). The loader
15
+ // applies only the settings this config reads and leaves the rest of `.env` out of the environment
16
+ // the webServer child inherits (#826). A variable already set in the environment still wins over
17
+ // the file, and a project with no `.env` is untouched.
18
+ //
19
+ // The working directory is the anchor, and the loader ascends from it to the project root — the
20
+ // same root `pnpm run` hands the `webServer` command, so both sides name one file from anywhere
21
+ // inside the project. The one layout that escapes that is a run whose working directory sits in a
22
+ // *different* package from this config, as `playwright test --config ../../playwright.config.ts`
23
+ // does in a workspace: Playwright would default `webServer.cwd` to this file's directory while the
24
+ // seed came from the other package's `.env`. No kit-distributed project has that shape — this
25
+ // config is written to a project root — so the anchor stays where every documented entry point
26
+ // puts it.
27
+ ports.load_environment_file()
28
+
29
+ const DEV_PORT = ports.resolve_development_port()
30
+ const PREVIEW_PORT = ports.resolve_preview_port()
31
+
32
+ const CI_TIMEOUT = 120_000
33
+ const LOCAL_TIMEOUT = 30_000
34
+ // pnpm 11.27.1+ places a script it runs without a controlling terminal in its own process group, so
35
+ // Playwright's default teardown — SIGKILL to the webServer's group — no longer reaches the `vite dev`
36
+ // / `preview` child: it survives holding Playwright's stdio pipes open, and Playwright blocks forever
37
+ // on the `close` event (#2386). SIGTERM, unlike SIGKILL, is relayed by that pnpm to the child, so a
38
+ // graceful shutdown lets the server exit and the pipes close. The timeout must stay well above the
39
+ // observed ~40ms shutdown, or Playwright falls back to killProcess() (SIGKILL) and the hang returns.
40
+ const SHUTDOWN_TIMEOUT = 10_000
41
+ const CI_TEST_TIMEOUT = 30_000
42
+ const ACTION_TIMEOUT = 10_000
43
+ const NAV_TIMEOUT = 30_000
44
+ const CI_WORKERS = 2
45
+ const CI_RETRIES = 2
46
+
47
+ // Playwright never restarts a `webServer` that exits mid-run, so once it dies every remaining test
48
+ // fails with the identical net::ERR_CONNECTION_REFUSED — and is retried twice against the same
49
+ // closed port. Uncapped, one such run burned six minutes producing 186 indistinguishable failures
50
+ // in which the only meaningful event, the server's death, was invisible. A test counts toward this
51
+ // cap only after its retries are exhausted, so 10 still reports a genuine multi-test regression in
52
+ // full while ending a dead-server run in seconds. Do not raise or remove it without that tradeoff.
53
+ const CI_MAX_FAILURES = 10
54
+
55
+ type EnvConfig = {
56
+ retries: number
57
+ timeout: number
58
+ launch_args: string[]
59
+ screenshot: 'only-on-failure' | 'off'
60
+ video: 'retain-on-failure' | 'off'
61
+ trace: 'retain-on-failure' | 'off'
62
+ reporter: ReporterDescription[]
63
+ }
64
+
65
+ // The flag vocabulary lives in `@joshuafolkken/kit/env` (#828) — one exported predicate, so this
66
+ // config and every consumer config that adds an env-driven toggle agree on what "switched on"
67
+ // means instead of each declaring its own set and drifting.
68
+ const IS_CI = environment_flags.is_ci_enabled(process.env['CI'])
69
+
70
+ // `is_ci_enabled` only decides what this config returns; Playwright's own modules read
71
+ // `process.env['CI']` directly with the bare truthiness it replaces, so an explicit opt-out such as
72
+ // `CI=0` still reads as CI to them. The visible casualty is the HTML reporter's `onExit`, which
73
+ // suppresses both the auto-open on failure and the "To open last HTML report run:" hint — a local
74
+ // run whose report is unreachable unless the developer already knows `playwright show-report`.
75
+ // (`CI/1` in the Playwright user agent and the MCP headless force share the same root cause.)
76
+ // Deleting the variable once this config has judged the run local is what makes every downstream
77
+ // reader agree with that verdict, the `pnpm run dev` child process included: leaving `CI=0` set for
78
+ // the child would only re-introduce the same bare-truthiness bug one process down. The guard is
79
+ // what keeps this safe — a real provider value such as `CI=woodpecker` is never touched, and the
80
+ // deletion cannot fire on the CI branch.
81
+ if (!IS_CI) delete process.env['CI']
82
+
83
+ // Set PLAYWRIGHT_REUSE_SERVER=1 (or 'true' / 'yes' / 'on') when the server already listening on the
84
+ // port below is known to be this project's: Playwright then reuses it and skips its webServer
85
+ // command (no boot, no rebuild). Any other value — including '0', 'false', 'off', empty and unset
86
+ // (default) — makes Playwright boot its own server on both branches, and abort if the port is taken.
87
+ // The default matters most locally: with no `PORT_SEED` set, DEV_PORT is vite's default, so every
88
+ // vite project lands on it first and later ones drift onward. With reuse on, Playwright would adopt
89
+ // whichever foreign app got there first and — baseURL being derived from this port — run the whole
90
+ // suite green against it. Failing on a busy port replaces a silent pass against the wrong
91
+ // application; a seed reduces how often a foreign server is on the port at all.
92
+ const IS_REUSE_ENABLED = environment_flags.is_flag_enabled(process.env['PLAYWRIGHT_REUSE_SERVER'])
93
+
94
+ // Both branches share one shutdown policy — see SHUTDOWN_TIMEOUT for why SIGTERM rather than the
95
+ // SIGKILL default. `as const` keeps the signal a literal so it satisfies Playwright's signal union.
96
+ const GRACEFUL_SHUTDOWN = { signal: 'SIGTERM', timeout: SHUTDOWN_TIMEOUT } as const
97
+
98
+ const web_server_config = IS_CI
99
+ ? {
100
+ command: 'pnpm run build && pnpm run preview',
101
+ port: PREVIEW_PORT,
102
+ timeout: CI_TIMEOUT,
103
+ reuseExistingServer: IS_REUSE_ENABLED,
104
+ gracefulShutdown: GRACEFUL_SHUTDOWN,
105
+ }
106
+ : {
107
+ command: 'pnpm run dev',
108
+ port: DEV_PORT,
109
+ timeout: LOCAL_TIMEOUT,
110
+ reuseExistingServer: IS_REUSE_ENABLED,
111
+ gracefulShutdown: GRACEFUL_SHUTDOWN,
112
+ }
113
+
114
+ const env_config: EnvConfig = IS_CI
115
+ ? {
116
+ retries: CI_RETRIES,
117
+ timeout: CI_TEST_TIMEOUT,
118
+ launch_args: ['--disable-dev-shm-usage', '--no-sandbox'],
119
+ screenshot: 'only-on-failure',
120
+ video: 'retain-on-failure',
121
+ trace: 'retain-on-failure',
122
+ reporter: [['html'], ['github']],
123
+ }
124
+ : {
125
+ retries: 0,
126
+ timeout: LOCAL_TIMEOUT,
127
+ launch_args: [],
128
+ screenshot: 'off',
129
+ video: 'off',
130
+ trace: 'off',
131
+ reporter: [['html'], ['list']],
132
+ }
133
+
134
+ export default defineConfig({
135
+ webServer: web_server_config,
136
+ testMatch: '**/*.e2e.{ts,js}',
137
+ fullyParallel: true,
138
+ ...(IS_CI ? { workers: CI_WORKERS, maxFailures: CI_MAX_FAILURES } : {}),
139
+ retries: env_config.retries,
140
+ timeout: env_config.timeout,
141
+ projects: [
142
+ {
143
+ name: 'chromium',
144
+ use: {
145
+ ...devices['Desktop Chrome'],
146
+ launchOptions: {
147
+ args: env_config.launch_args,
148
+ },
149
+ },
150
+ },
151
+ ],
152
+ reporter: env_config.reporter,
153
+ use: {
154
+ actionTimeout: ACTION_TIMEOUT,
155
+ navigationTimeout: NAV_TIMEOUT,
156
+ screenshot: env_config.screenshot,
157
+ video: env_config.video,
158
+ trace: env_config.trace,
159
+ },
160
+ })
@@ -0,0 +1,41 @@
1
+ allowBuilds:
2
+ '@tailwindcss/oxide': true
3
+ esbuild: true
4
+ lefthook: true
5
+ sharp: true
6
+ unrs-resolver: true
7
+ workerd: true
8
+ '@joshuafolkken/kit': false # project postinstall handles lefthook install
9
+
10
+ # Skip the install-time supply-chain re-verification of the already-committed, reviewed lockfile.
11
+ # Since pnpm 11.5, `minimum-release-age` can trigger a pre-install metadata re-fetch; on clean CI boxes
12
+ # (e.g. Cloudflare Workers Builds) it can't authenticate private @joshuafolkken/* GitHub Packages,
13
+ # producing a false ERR_PNPM_TARBALL_URL_MISMATCH. minimum-release-age still applies at resolution
14
+ # time, so age protection is preserved — only the per-install re-check of a trusted lockfile is skipped.
15
+ trustLockfile: true
16
+
17
+ # Security fixes often require same-day vite releases; minimum-release-age in .npmrc would block them.
18
+ # `@types/node` and `tsx` are also excluded so routine Dependabot-style bumps are not
19
+ # delayed by the minimum-release-age window.
20
+ #
21
+ # This list governs **pnpm's** `minimum-release-age` only. The `preinstall` hook installs
22
+ # @aikidosec/safe-chain, which applies its own age policy and has no knowledge of these entries — a
23
+ # package listed here is still hidden by safe-chain until it ages in. Pinning a dependency floor to
24
+ # a release that safe-chain still withholds publishes a range no consumer can resolve (kit #742), so
25
+ # `josh ranges` checks every published range against that filtered view — from `josh latest` right
26
+ # after the ranges are rewritten, and again from `prepack` as the last gate before a publish.
27
+ minimumReleaseAgeExclude:
28
+ - vite
29
+ - '@types/node'
30
+ - tsx
31
+
32
+ overrides:
33
+ svelte: ^5.55.7
34
+ devalue: ^5.8.1
35
+ # Indirect deps a within-range re-resolution could not lift past their parents' pins, floored at the
36
+ # smallest release clearing each OSV advisory (joshuafolkken/kit#2200; user-approved 2026-09-21 to
37
+ # override indirect packages). Carets so `josh latest`'s re-resolution keeps them current within the
38
+ # major without reintroducing the advisory.
39
+ vite: ^8.0.16 # OSV — vite 8.0.8 → 8.0.16
40
+ postcss: ^8.5.23 # OSV — postcss 8.5.16 → 8.5.23
41
+ nanoid: ^3.3.18 # OSV — nanoid 3.3.15 → 3.3.18
@@ -0,0 +1,17 @@
1
+ type PortEnvironment = Record<string, string | undefined>
2
+
3
+ declare const ENV_FILE_NAME: string
4
+ declare const LANE_SEAT_KEY: string
5
+ declare const PORT_SEED_KEY: string
6
+ declare const PROJECT_ENVIRONMENT_KEYS: ReadonlySet<string>
7
+
8
+ declare const ports: {
9
+ load_environment_file: (directory?: string) => boolean
10
+ resolve_seed: (environment?: PortEnvironment) => number
11
+ resolve_lane: (environment?: PortEnvironment) => number
12
+ resolve_development_port: (environment?: PortEnvironment) => number
13
+ resolve_preview_port: (environment?: PortEnvironment) => number
14
+ }
15
+
16
+ export type { PortEnvironment }
17
+ export { ENV_FILE_NAME, LANE_SEAT_KEY, PORT_SEED_KEY, PROJECT_ENVIRONMENT_KEYS, ports }