@joshuafolkken/kit 1.1166.0 → 1.1229.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 (437) hide show
  1. package/.claude/.claude-plugin/plugin.json +1 -1
  2. package/.claude/settings.json +2 -2
  3. package/.claude/skills/dependency-update/SKILL.md +4 -8
  4. package/.claude/skills/epic-commands/SKILL.md +2 -2
  5. package/.claude/skills/epic-commands/epic-bundle.md +1 -1
  6. package/.claude/skills/workflow-commands/SKILL.md +2 -4
  7. package/.claude/skills/workflow-commands/backlogrun-child.md +6 -4
  8. package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -5
  9. package/.claude/skills/workflow-commands/backlogrun-park.md +29 -9
  10. package/.claude/skills/workflow-commands/backlogrun-progress.md +7 -2
  11. package/.claude/skills/workflow-commands/backlogrun-recovery.md +4 -3
  12. package/.claude/skills/workflow-commands/backlogrun-steps.md +24 -15
  13. package/.claude/skills/workflow-commands/chain-rule.md +1 -1
  14. package/.claude/skills/workflow-commands/delegation.md +2 -2
  15. package/.claude/skills/workflow-commands/followup.md +5 -0
  16. package/.claude/skills/workflow-commands/fullrun-steps.md +1 -1
  17. package/.claude/skills/workflow-commands/halfrun.md +1 -1
  18. package/.claude/skills/workflow-commands/issue-scout.md +1 -1
  19. package/.claude/skills/workflow-commands/kickoff.md +1 -1
  20. package/.claude/skills/workflow-commands/observation-ledger.md +3 -3
  21. package/.claude/skills/workflow-commands/pre-gate-cut.md +10 -5
  22. package/.claude/skills/workflow-commands/prerequisite.md +2 -2
  23. package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
  24. package/.claude/skills/workflow-commands/working-tree-hold.md +1 -1
  25. package/.codex/hooks.json +2 -2
  26. package/.cursorrules +6 -41
  27. package/.github/actions/setup-node/action.yml +1 -1
  28. package/.github/workflows/auto-tag.yml +3 -4
  29. package/.github/workflows/ci.yml +47 -33
  30. package/.github/workflows/dependabot-auto-merge.yml +13 -6
  31. package/.github/workflows/publish.yml +48 -4
  32. package/.github/workflows/sonar-qube.yml +3 -0
  33. package/.pnpmfile.mjs +4 -3
  34. package/.prettierignore +8 -2
  35. package/CLAUDE.md +18 -20
  36. package/README.md +26 -19
  37. package/SECURITY.md +15 -1
  38. package/dist/CLAUDE.md +18 -20
  39. package/dist/commands/document-section-cli.js +734 -0
  40. package/dist/hooks/audit-provision.js +346 -0
  41. package/dist/hooks/batch-guard.js +5 -4
  42. package/dist/hooks/{chunk-DYAVAM6S.js → chunk-55HHG5PX.js} +1405 -631
  43. package/dist/hooks/{chunk-A6P7PN7P.js → chunk-5VMKCCC4.js} +25 -10
  44. package/dist/hooks/chunk-5VNDSNG3.js +12 -0
  45. package/dist/hooks/{chunk-5KTCMCOT.js → chunk-6HJJXRBX.js} +4 -2
  46. package/dist/hooks/chunk-CDY4NFQG.js +15 -0
  47. package/dist/hooks/chunk-ELCN5LCH.js +135 -0
  48. package/dist/hooks/{chunk-ENA7P5FB.js → chunk-F56MFS4B.js} +3 -3
  49. package/dist/hooks/{chunk-ANJ2WGFD.js → chunk-FIVDHQGT.js} +7 -6
  50. package/dist/hooks/{chunk-3V37IID6.js → chunk-JBBMAPC4.js} +23 -14
  51. package/dist/hooks/{chunk-GU5MATVE.js → chunk-JUDKDCDP.js} +499 -389
  52. package/dist/hooks/{chunk-ZDZ555YH.js → chunk-NV2JRZZO.js} +743 -909
  53. package/dist/hooks/{chunk-V2BTOZHT.js → chunk-RNWHN5BP.js} +3 -3
  54. package/dist/hooks/{chunk-URJA6XY4.js → chunk-TQNPDZNH.js} +4 -4
  55. package/dist/hooks/{chunk-GYNGP7HI.js → chunk-VC3PZPZO.js} +1 -1
  56. package/dist/hooks/codex-hook-adapter.js +14 -12
  57. package/dist/hooks/duplicate-read-guard.js +6 -5
  58. package/dist/hooks/format-edited.js +4 -3
  59. package/dist/hooks/inputs.json +232 -210
  60. package/dist/hooks/investigation-guard.js +6 -5
  61. package/dist/hooks/pretool-guard.js +12 -10
  62. package/dist/hooks/session-lang.js +2 -4
  63. package/dist/hooks/stop-guard.js +81 -59
  64. package/dist/josh.js +872 -75
  65. package/dist/version/index.d.ts +7 -2
  66. package/dist/version/index.js +152 -75
  67. package/eslint/base.js +23 -1
  68. package/eslint/rules/code-quality.js +3 -0
  69. package/eslint/rules/early-return-one-liner.js +98 -0
  70. package/eslint/rules/unicorn.js +16 -1
  71. package/package.json +7 -6
  72. package/pnpm-workspace.yaml +9 -4
  73. package/prettier/basic.d.ts +3 -1
  74. package/prettier/index.d.ts +3 -1
  75. package/prettier/static.d.ts +3 -1
  76. package/prompts/coding-standards.md +1 -1
  77. package/prompts/collaboration-workflow/file-edits.md +4 -4
  78. package/prompts/collaboration-workflow/glossary.md +1 -1
  79. package/prompts/collaboration-workflow/operating-rules.md +17 -9
  80. package/prompts/collaboration-workflow/overview.md +2 -2
  81. package/prompts/collaboration-workflow/principles.md +14 -12
  82. package/prompts/collaboration-workflow/report-format.md +1 -1
  83. package/prompts/collaboration-workflow/residency.md +1 -1
  84. package/prompts/collaboration-workflow/rule-delivery.md +6 -6
  85. package/prompts/collaboration-workflow/shell-body.md +6 -6
  86. package/prompts/collaboration-workflow/turn-batching.md +1 -1
  87. package/prompts/collaboration-workflow/upstream-interrupt.md +12 -2
  88. package/prompts/collaboration-workflow/wip-cap.md +10 -10
  89. package/prompts/review-rubric.md +1 -2
  90. package/prompts/review.md +1 -1
  91. package/scripts/agent/agent-headless.ts +29 -0
  92. package/scripts/agent/agent-launch-environment.ts +6 -2
  93. package/scripts/agent/codex-agent-argv.ts +2 -1
  94. package/scripts/auto-ok/auto-ok-cli.ts +1 -1
  95. package/scripts/backlog/backlog-arrival.ts +3 -3
  96. package/scripts/backlog/backlog-budget.ts +1 -1
  97. package/scripts/backlog/backlog-drive-args.ts +135 -0
  98. package/scripts/backlog/backlog-drive-cli.ts +11 -137
  99. package/scripts/backlog/backlog-drive-launch.ts +39 -0
  100. package/scripts/backlog/backlog-drive-named-offer.ts +3 -5
  101. package/scripts/backlog/backlog-drive-named.ts +3 -3
  102. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  103. package/scripts/backlog/backlog-drive-owner.ts +1 -1
  104. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  105. package/scripts/backlog/backlog-drive-retrospective.ts +1 -1
  106. package/scripts/backlog/backlog-drive.ts +1 -1
  107. package/scripts/backlog/backlog-next.ts +31 -9
  108. package/scripts/backlog/backlog-offer-cli.ts +6 -6
  109. package/scripts/backlog/backlog-offer.ts +1 -1
  110. package/scripts/backlog/backlog-plan-cli.ts +7 -6
  111. package/scripts/backlog/backlog-pool.ts +57 -11
  112. package/scripts/backlog/backlog-rank.ts +18 -9
  113. package/scripts/backlog/backlog-ready.ts +1 -1
  114. package/scripts/backlog/backlog-restructure.ts +152 -0
  115. package/scripts/backlog/backlog-scope.ts +1 -1
  116. package/scripts/backlog/backlog-stalled-detect.ts +2 -2
  117. package/scripts/backlog/backlog-stalled.ts +1 -1
  118. package/scripts/backlog/backlog-waves.ts +15 -17
  119. package/scripts/build/build-codex-hooks.ts +3 -1
  120. package/scripts/build/build-commands.ts +66 -0
  121. package/scripts/build/build-hooks.ts +2 -1
  122. package/scripts/build/build-library.ts +12 -3
  123. package/scripts/build/build.ts +70 -0
  124. package/scripts/build/local-bin.ts +3 -13
  125. package/scripts/cost-runtime/context-cut-threshold.ts +1 -9
  126. package/scripts/cost-runtime/cost-verdict.ts +15 -28
  127. package/scripts/delegation/investigation-reads.ts +3 -1
  128. package/scripts/discovery/repo-origin.ts +5 -5
  129. package/scripts/doctor/doctor-consumer.ts +2 -2
  130. package/scripts/doctor/doctor-io.ts +2 -3
  131. package/scripts/document/capped-print-part.ts +30 -0
  132. package/scripts/document/capped-print.ts +3 -4
  133. package/scripts/document/document-byte-budget.ts +11 -2
  134. package/scripts/document/document-scan.ts +117 -0
  135. package/scripts/document/document-section.ts +143 -16
  136. package/scripts/document/entry-read-budget.ts +5 -3
  137. package/scripts/document/entry-read-set.ts +10 -89
  138. package/scripts/document/read-set-cost.ts +98 -0
  139. package/scripts/epic/epic-add-body.ts +1 -0
  140. package/scripts/epic/epic-audit-checks.ts +1 -1
  141. package/scripts/epic/epic-audit-rationale.ts +4 -3
  142. package/scripts/epic/epic-bundle-cli.ts +14 -3
  143. package/scripts/epic/epic-bundle-poll.ts +41 -0
  144. package/scripts/epic/epic-busy.ts +1 -1
  145. package/scripts/epic/epic-candidate-confirm.ts +3 -2
  146. package/scripts/epic/epic-classify.ts +1 -1
  147. package/scripts/epic/epic-cli-argv.ts +78 -46
  148. package/scripts/epic/epic-cli-remove.ts +11 -19
  149. package/scripts/epic/epic-cli.ts +74 -73
  150. package/scripts/epic/epic-close-comment.ts +1 -1
  151. package/scripts/epic/epic-close.ts +1 -1
  152. package/scripts/epic/epic-cross-repo.ts +5 -5
  153. package/scripts/epic/epic-graph.ts +1 -1
  154. package/scripts/epic/epic-index.ts +1 -1
  155. package/scripts/epic/epic-issue.ts +2 -6
  156. package/scripts/epic/epic-lane-offer.ts +2 -2
  157. package/scripts/epic/epic-next.ts +29 -42
  158. package/scripts/epic/epic-solo-stale.ts +1 -1
  159. package/scripts/epic/epic-triage.ts +8 -4
  160. package/scripts/epic/epic-validate.ts +1 -1
  161. package/scripts/followup/git-followup-finish.ts +2 -2
  162. package/scripts/followup/git-followup-label.ts +2 -2
  163. package/scripts/followup/git-followup-merged.ts +2 -2
  164. package/scripts/followup/git-followup-stages.ts +9 -0
  165. package/scripts/followup/git-pr-followup-checks.ts +142 -0
  166. package/scripts/followup/git-pr-followup.ts +5 -130
  167. package/scripts/gate/core-budget.ts +69 -1
  168. package/scripts/gate/gate-plan.ts +47 -7
  169. package/scripts/gate/gate-skip.ts +38 -7
  170. package/scripts/gate/hook-gate-reuse.ts +12 -10
  171. package/scripts/gate/pre-commit-type-check.ts +4 -1
  172. package/scripts/gate/project-checks.ts +6 -9
  173. package/scripts/gate/type-check-step.ts +2 -3
  174. package/scripts/gate/verification-gate.ts +27 -8
  175. package/scripts/gh/git-gh-api-path.ts +2 -2
  176. package/scripts/gh/git-gh-issue-rest.ts +3 -3
  177. package/scripts/gh/git-gh-issue-write.ts +53 -7
  178. package/scripts/gh/git-gh-issue.ts +5 -3
  179. package/scripts/gh/git-gh-pr-read.ts +68 -19
  180. package/scripts/gh/git-gh-pr-rest.ts +1 -1
  181. package/scripts/gh/git-gh-pr.ts +5 -1
  182. package/scripts/gh/git-pr-ai-review.ts +1 -1
  183. package/scripts/gh/git-pr-checks-eval.ts +9 -3
  184. package/scripts/gh/git-pr-checks-parse.ts +1 -1
  185. package/scripts/gh/git-pr-checks-watch.ts +6 -5
  186. package/scripts/gh/git-pr-checks.ts +18 -6
  187. package/scripts/gh/git-pr-coderabbit.ts +1 -1
  188. package/scripts/gh/git-pr-error.ts +1 -3
  189. package/scripts/gh/git-pr.ts +9 -13
  190. package/scripts/gh/github-issue-url.ts +2 -2
  191. package/scripts/git/constants.ts +12 -6
  192. package/scripts/git/git-command.ts +20 -218
  193. package/scripts/git/git-diff-reads.ts +225 -0
  194. package/scripts/git/git-error.ts +4 -12
  195. package/scripts/git/git-pre-push-hook.ts +139 -0
  196. package/scripts/git/git-prompt.ts +2 -6
  197. package/scripts/git/{schemas.ts → git-schemas.ts} +2 -0
  198. package/scripts/git/git-spawn-sync.ts +3 -1
  199. package/scripts/git/git-spawn.ts +1 -1
  200. package/scripts/git/git-staging.ts +4 -6
  201. package/scripts/git/git-status.ts +3 -9
  202. package/scripts/git/main-merge.ts +57 -21
  203. package/scripts/hooks/codex-hook-adapter.ts +1 -1
  204. package/scripts/hooks/edited-cspell.ts +2 -4
  205. package/scripts/hooks/format-edited-file.ts +3 -12
  206. package/scripts/hooks/pre-push-unit.ts +31 -9
  207. package/scripts/hooks/reserved-run.ts +2 -2
  208. package/scripts/hooks/run-hook.sh +5 -4
  209. package/scripts/hooks/stop-guard.ts +5 -3
  210. package/scripts/init/init-actions.ts +0 -5
  211. package/scripts/init/init-ai-copy.ts +13 -2
  212. package/scripts/init/init-logic-json-merge.ts +19 -0
  213. package/scripts/init/init-logic-secretlint.ts +7 -7
  214. package/scripts/init/init-logic-workspace.ts +41 -2
  215. package/scripts/init/init-logic.ts +16 -26
  216. package/scripts/init/init.ts +5 -15
  217. package/scripts/init/initial-commit.ts +4 -4
  218. package/scripts/init/kit-development-versions.ts +40 -0
  219. package/scripts/init/kit-setup-state.ts +2 -2
  220. package/scripts/init/start-exec.ts +68 -19
  221. package/scripts/init/start-setup-pr.ts +9 -9
  222. package/scripts/init/start-steps.ts +6 -10
  223. package/scripts/issue/defect-rate-cli.ts +1 -1
  224. package/scripts/issue/git-next-issues.ts +1 -1
  225. package/scripts/issue/issue-auto-ok.ts +1 -1
  226. package/scripts/issue/issue-backlinks-cli.ts +2 -2
  227. package/scripts/issue/issue-backlinks.ts +9 -9
  228. package/scripts/issue/issue-comment-cli.ts +19 -13
  229. package/scripts/issue/issue-file-cli.ts +45 -18
  230. package/scripts/issue/issue-file.ts +24 -1
  231. package/scripts/issue/issue-scout-closed.ts +1 -1
  232. package/scripts/issue/issue-state-cli.ts +30 -74
  233. package/scripts/josh/josh-command-map.ts +2 -0
  234. package/scripts/josh/josh-command-types.ts +11 -0
  235. package/scripts/josh/josh-commands-ai.ts +4 -4
  236. package/scripts/josh/josh-commands-backlog.ts +4 -1
  237. package/scripts/josh/josh-commands-development.ts +11 -1
  238. package/scripts/josh/josh-commands-document.ts +1 -0
  239. package/scripts/josh/josh-commands-lane.ts +22 -0
  240. package/scripts/josh/josh-commands-maintenance.ts +4 -4
  241. package/scripts/josh/josh-commands-run.ts +12 -7
  242. package/scripts/josh/josh-in-process.ts +28 -9
  243. package/scripts/josh/josh-logic.ts +33 -15
  244. package/scripts/josh/process-identity.ts +1 -3
  245. package/scripts/josh/session-language-cli.ts +3 -4
  246. package/scripts/lane/lane-await.ts +5 -1
  247. package/scripts/lane/lane-child-invocation.ts +2 -2
  248. package/scripts/lane/lane-cli.ts +3 -3
  249. package/scripts/lane/lane-dispatch.ts +14 -10
  250. package/scripts/lane/lane-environment.ts +5 -1
  251. package/scripts/lane/lane-handoff.ts +1 -1
  252. package/scripts/lane/lane-install.ts +2 -13
  253. package/scripts/lane/lane-launch-cli.ts +35 -3
  254. package/scripts/lane/lane-ledger.ts +145 -0
  255. package/scripts/lane/lane-leftover.ts +1 -1
  256. package/scripts/lane/lane-load.ts +108 -0
  257. package/scripts/lane/lane-measure-cli.ts +149 -0
  258. package/scripts/lane/lane-occupancy.ts +3 -0
  259. package/scripts/lane/lane-reap.ts +1 -3
  260. package/scripts/lane/lane-relaunch.ts +1 -1
  261. package/scripts/lane/lane-stats.ts +224 -0
  262. package/scripts/lane/lane-vacant.ts +36 -0
  263. package/scripts/lane/openai-lane-ship.ts +2 -2
  264. package/scripts/lane/openai-lane-supervisor-owner.ts +180 -0
  265. package/scripts/lane/openai-lane-supervisor.ts +7 -165
  266. package/scripts/lane/openai-review-broker.ts +2 -4
  267. package/scripts/lib/ancestor-directories.ts +35 -0
  268. package/scripts/lib/animation-helpers.ts +2 -2
  269. package/scripts/lib/buffered-process.ts +3 -7
  270. package/scripts/lib/cli-flags.ts +71 -1
  271. package/scripts/lib/spawn-exit.ts +2 -2
  272. package/scripts/lib/timeouts.ts +35 -2
  273. package/scripts/lines/line-budget.ts +4 -6
  274. package/scripts/notify/telegram-notify.ts +26 -1
  275. package/scripts/notify/telegram-test.ts +6 -0
  276. package/scripts/observations/observation-ledger-line.ts +6 -6
  277. package/scripts/observations/observation-ledger-migrate.ts +55 -4
  278. package/scripts/observations/observation-ledger.ts +26 -7
  279. package/scripts/overrides/lockfile-overrides.ts +1 -1
  280. package/scripts/overrides/overrides-logic.ts +1 -1
  281. package/scripts/propagate/propagate-git.ts +1 -1
  282. package/scripts/propagate/propagate-publish.ts +2 -2
  283. package/scripts/propagate/propagate-steps.ts +20 -15
  284. package/scripts/propagate/propagate.ts +36 -27
  285. package/scripts/refactor/import-graph.ts +18 -1
  286. package/scripts/refactor/refactor-lint.ts +4 -4
  287. package/scripts/repo/repository-labels.ts +2 -2
  288. package/scripts/repo/required-checks-logic.ts +1 -3
  289. package/scripts/review/live-evidence.ts +2 -4
  290. package/scripts/review/review-brief-cli.ts +1 -1
  291. package/scripts/review/review-finding-ledger.ts +1 -1
  292. package/scripts/review/review-findings-cli.ts +1 -3
  293. package/scripts/rules/decision-oracle-batch.ts +128 -0
  294. package/scripts/rules/decision-oracle-tokens.ts +21 -0
  295. package/scripts/rules/decision-oracle.ts +8 -120
  296. package/scripts/rules/delivered-rules.ts +26 -182
  297. package/scripts/rules/direct-filing.ts +1 -1
  298. package/scripts/rules/early-heartbeat.ts +3 -3
  299. package/scripts/rules/git-argv.ts +1 -1
  300. package/scripts/rules/git-force.ts +1 -1
  301. package/scripts/rules/implementation-cut.ts +2 -2
  302. package/scripts/rules/index-guard.ts +1 -1
  303. package/scripts/rules/issue-comments.ts +118 -0
  304. package/scripts/rules/{issue-fold.ts → issue-fold-rule.ts} +2 -2
  305. package/scripts/rules/lane-background.ts +2 -2
  306. package/scripts/rules/lane-park.ts +18 -0
  307. package/scripts/rules/lane-split-park.ts +128 -0
  308. package/scripts/rules/oracle-firing.ts +1 -1
  309. package/scripts/rules/poll-loop.ts +1 -1
  310. package/scripts/rules/pre-gate-cut.ts +3 -3
  311. package/scripts/rules/protected-files.ts +59 -4
  312. package/scripts/rules/{run-tail.ts → run-tail-rule.ts} +2 -2
  313. package/scripts/rules/shell-body-trigger.ts +1 -1
  314. package/scripts/rules/stop-rules.ts +18 -7
  315. package/scripts/rules/test-declared-commit.ts +4 -4
  316. package/scripts/rules/wip-cap.ts +63 -0
  317. package/scripts/run/{run-carry-args.ts → carry/run-carry-args.ts} +37 -13
  318. package/scripts/run/{run-carry-change.ts → carry/run-carry-change.ts} +29 -7
  319. package/scripts/run/{run-carry-cli.ts → carry/run-carry-cli.ts} +4 -6
  320. package/scripts/run/{run-carry.ts → carry/run-carry.ts} +12 -6
  321. package/scripts/run/{run-cut-args.ts → cut/run-cut-args.ts} +1 -1
  322. package/scripts/run/{run-cut-cli.ts → cut/run-cut-cli.ts} +3 -3
  323. package/scripts/run/{run-cut-report.ts → cut/run-cut-report.ts} +2 -2
  324. package/scripts/run/{run-cut.ts → cut/run-cut.ts} +1 -1
  325. package/scripts/run/{run-entry-cli.ts → entry/run-entry-cli.ts} +11 -11
  326. package/scripts/run/{run-entry.ts → entry/run-entry.ts} +2 -2
  327. package/scripts/run/{run-event-scope.ts → event/run-event-scope.ts} +1 -1
  328. package/scripts/run/{run-event-stream-emit.ts → event/run-event-stream-emit.ts} +1 -1
  329. package/scripts/run/{run-event-stream.ts → event/run-event-stream.ts} +16 -2
  330. package/scripts/run/{run-hold-cli.ts → hold/run-hold-cli.ts} +5 -5
  331. package/scripts/run/{run-merge-cli.ts → merge/run-merge-cli.ts} +10 -5
  332. package/scripts/run/{run-merge-steps.ts → merge/run-merge-steps.ts} +53 -5
  333. package/scripts/run/{run-merge.ts → merge/run-merge.ts} +1 -1
  334. package/scripts/run/{run-progress-cli.ts → progress/run-progress-cli.ts} +1 -1
  335. package/scripts/run/{run-progress-config.ts → progress/run-progress-config.ts} +2 -17
  336. package/scripts/run/{run-progress-read.ts → progress/run-progress-read.ts} +5 -5
  337. package/scripts/run/{run-progress.ts → progress/run-progress.ts} +1 -1
  338. package/scripts/run/{run-review-steps.ts → review/run-review-steps.ts} +2 -3
  339. package/scripts/run/run-ending.ts +2 -2
  340. package/scripts/run/run-halfrun-resume.ts +6 -1
  341. package/scripts/run/run-headless.ts +1 -1
  342. package/scripts/run/run-invocation.ts +85 -84
  343. package/scripts/run/run-liveness.ts +1 -1
  344. package/scripts/run/run-parent-cut-hook.ts +1 -1
  345. package/scripts/run/run-preflight.ts +6 -6
  346. package/scripts/run/run-prep-cli.ts +1 -1
  347. package/scripts/run/run-prrun-resume.ts +1 -1
  348. package/scripts/run/run-report-cli.ts +4 -4
  349. package/scripts/run/run-report.ts +2 -2
  350. package/scripts/run/run-status-cli.ts +1 -1
  351. package/scripts/run/run-step-cli.ts +3 -3
  352. package/scripts/run/run-step.ts +2 -2
  353. package/scripts/run/run-stop-notify.ts +1 -1
  354. package/scripts/run/run-stranded-detect.ts +4 -4
  355. package/scripts/run/run-stranded.ts +2 -2
  356. package/scripts/run/run-watcher-guard-cli.ts +1 -1
  357. package/scripts/run/run-watcher-guard.ts +5 -3
  358. package/scripts/run/run-watcher-hook.ts +1 -1
  359. package/scripts/run/{run-ship-cli.ts → ship/run-ship-cli.ts} +29 -8
  360. package/scripts/run/{run-ship-detach.ts → ship/run-ship-detach.ts} +3 -3
  361. package/scripts/run/ship/run-ship-lock.ts +50 -0
  362. package/scripts/run/{run-ship-next.ts → ship/run-ship-next.ts} +13 -0
  363. package/scripts/run/ship/run-ship-pre-detach.ts +66 -0
  364. package/scripts/run/{run-ship-preflight.ts → ship/run-ship-preflight.ts} +6 -2
  365. package/scripts/run/{run-ship-probe.ts → ship/run-ship-probe.ts} +2 -2
  366. package/scripts/run/{run-ship-return.ts → ship/run-ship-return.ts} +10 -6
  367. package/scripts/run/{run-ship-review-steps.ts → ship/run-ship-review-steps.ts} +3 -3
  368. package/scripts/run/{run-ship-scoped.ts → ship/run-ship-scoped.ts} +10 -1
  369. package/scripts/run/{run-ship-stage.ts → ship/run-ship-stage.ts} +13 -0
  370. package/scripts/run/{run-ship-steps.ts → ship/run-ship-steps.ts} +15 -8
  371. package/scripts/run/ship/run-ship-stop-text.ts +13 -0
  372. package/scripts/run/ship/run-ship-sync.ts +128 -0
  373. package/scripts/run/{run-ship.ts → ship/run-ship.ts} +6 -0
  374. package/scripts/run/{run-tidy-lanes.ts → tidy/run-tidy-lanes.ts} +1 -1
  375. package/scripts/run/{run-wake-cli.ts → wake/run-wake-cli.ts} +31 -9
  376. package/scripts/run/{run-wake-describe.ts → wake/run-wake-describe.ts} +3 -3
  377. package/scripts/run/{run-wake-driver.ts → wake/run-wake-driver.ts} +99 -17
  378. package/scripts/run/{run-wake-handoff.ts → wake/run-wake-handoff.ts} +1 -1
  379. package/scripts/run/{run-wake-loop.ts → wake/run-wake-loop.ts} +8 -2
  380. package/scripts/run/wake/run-wake-restart.ts +58 -0
  381. package/scripts/run/{run-wake-session.ts → wake/run-wake-session.ts} +3 -3
  382. package/scripts/run/{run-wake.ts → wake/run-wake.ts} +1 -1
  383. package/scripts/safe-chain/preinstall-command.ts +20 -21
  384. package/scripts/safe-chain/project-config.ts +19 -15
  385. package/scripts/sync/sync-ai-files.ts +1 -1
  386. package/scripts/sync/sync-configs.ts +2 -1
  387. package/scripts/sync/sync.ts +15 -2
  388. package/scripts/test/test-red-logic.ts +17 -2
  389. package/scripts/test/test-red.ts +8 -7
  390. package/scripts/test/unit-worker-share.ts +1 -0
  391. package/scripts/time-runtime/time-background.ts +5 -1
  392. package/scripts/time-runtime/time-instant.ts +3 -1
  393. package/scripts/time-runtime/time-spans.ts +6 -139
  394. package/scripts/time-runtime/time-tool-call.ts +160 -0
  395. package/scripts/time-runtime/time-transcript-line.ts +27 -1
  396. package/scripts/version/effective-upstream.ts +2 -20
  397. package/scripts/version/latest-corepack.ts +17 -17
  398. package/scripts/version/latest-regression.ts +1 -1
  399. package/scripts/version/latest-update.ts +4 -4
  400. package/scripts/version/npm-registry.ts +20 -5
  401. package/scripts/version/publishable-range-check.ts +2 -2
  402. package/scripts/version/publishable-range.ts +1 -1
  403. package/scripts/version/release-age.ts +48 -38
  404. package/scripts/version/release-hold.ts +1 -1
  405. package/scripts/version/safe-chain-version-update.ts +40 -0
  406. package/scripts/version/upgrade-shell-command.ts +48 -8
  407. package/scripts/version/version-check-logic.ts +23 -14
  408. package/scripts/version/version-commands.ts +23 -11
  409. package/scripts/version/version-remote.ts +28 -13
  410. package/templates/pnpm-workspace.basic.yaml +4 -0
  411. package/templates/workflows/dependabot-auto-merge.yml +5 -5
  412. package/templates/workflows/github-release.yml +2 -0
  413. package/scripts/build/build-config-merge.ts +0 -27
  414. package/scripts/build/build-managed-marker.ts +0 -27
  415. package/scripts/build/build-self-sync-guard.ts +0 -27
  416. package/scripts/build/build-version.ts +0 -26
  417. package/scripts/version/preinstall-version-update.ts +0 -86
  418. /package/scripts/overrides/{schemas.ts → overrides-schemas.ts} +0 -0
  419. /package/scripts/run/{run-carry-conversation.ts → carry/run-carry-conversation.ts} +0 -0
  420. /package/scripts/run/{run-carry-reclaim.ts → carry/run-carry-reclaim.ts} +0 -0
  421. /package/scripts/run/{run-carry-stash.ts → carry/run-carry-stash.ts} +0 -0
  422. /package/scripts/run/{run-carry-streak.ts → carry/run-carry-streak.ts} +0 -0
  423. /package/scripts/run/{run-cut-handoff.ts → cut/run-cut-handoff.ts} +0 -0
  424. /package/scripts/run/{run-entry-stop.ts → entry/run-entry-stop.ts} +0 -0
  425. /package/scripts/run/{run-event-cli.ts → event/run-event-cli.ts} +0 -0
  426. /package/scripts/run/{run-event-follow.ts → event/run-event-follow.ts} +0 -0
  427. /package/scripts/run/{run-event-render.ts → event/run-event-render.ts} +0 -0
  428. /package/scripts/run/{run-event-watch.ts → event/run-event-watch.ts} +0 -0
  429. /package/scripts/run/{run-hold.ts → hold/run-hold.ts} +0 -0
  430. /package/scripts/run/{run-progress-args.ts → progress/run-progress-args.ts} +0 -0
  431. /package/scripts/run/{run-progress-clock.ts → progress/run-progress-clock.ts} +0 -0
  432. /package/scripts/run/{run-review-cli.ts → review/run-review-cli.ts} +0 -0
  433. /package/scripts/run/{run-review.ts → review/run-review.ts} +0 -0
  434. /package/scripts/run/{run-ship-review.ts → ship/run-ship-review.ts} +0 -0
  435. /package/scripts/run/{run-tidy-cli.ts → tidy/run-tidy-cli.ts} +0 -0
  436. /package/scripts/run/{run-tidy-stashes.ts → tidy/run-tidy-stashes.ts} +0 -0
  437. /package/scripts/run/{run-tidy.ts → tidy/run-tidy.ts} +0 -0
@@ -1,8 +1,10 @@
1
+ import { INSTALL_TIMEOUT_MS } from '#scripts/lib/timeouts'
1
2
  import { execaSync } from 'execa'
2
3
  import { release_age } from './release-age'
3
4
  import { release_hold } from './release-hold'
4
5
  import { running_binary } from './running-binary'
5
6
  import type { InstalledVersions } from './upgrade-command-guard'
7
+ import type { UpgradeCommand } from './upgrade-shell-command'
6
8
  import {
7
9
  version_check_logic,
8
10
  type ReleaseHold,
@@ -24,8 +26,6 @@ import { version_targets } from './version-targets'
24
26
  const FAILURE_EXIT_CODE = 1
25
27
  const ALREADY_UP_TO_DATE = 'Already up to date'
26
28
  const NO_QUARANTINE_MINUTES = 0
27
- // A global install that goes to the network — the same ten minutes `lane-install.ts` gives one.
28
- const UPGRADE_TIMEOUT_MS = 600_000
29
29
 
30
30
  // What the local minimum-release-age policy permits for one package. Resolved per package because
31
31
  // the newest installable release is a property of that package's own publish history. Returns a hold
@@ -197,23 +197,35 @@ function run_check(config: VersionCommandConfig): void {
197
197
  )
198
198
  }
199
199
 
200
- // Through `sh -c` because an upgrade command is the user's own configured string — `pnpm add -g …`,
201
- // or a chain with `&&` — so it is inside the trust boundary and needs a shell to mean what it says.
202
- // The bound keeps a registry that never answers from holding `josh version` open forever; a timed-out
203
- // run has no exit code, so it falls through to the failure code like any other failed step.
204
- function run_upgrade_command(command: string): number {
205
- const result = execaSync('sh', ['-c', command], {
200
+ // One step as an argument vector — no shell unless the step itself is the consumer's `sh -c`
201
+ // (`shell_upgrade_command`). The bound keeps a registry that never answers from holding `josh
202
+ // version` open forever; a timed-out run has no exit code, so it falls through to the failure code
203
+ // like any other failed step.
204
+ function run_upgrade_step(step: ReadonlyArray<string>): number {
205
+ const [executable = '', ...rest] = step
206
+ const result = execaSync(executable, rest, {
206
207
  stdio: 'inherit',
207
208
  reject: false,
208
- timeout: UPGRADE_TIMEOUT_MS,
209
+ timeout: INSTALL_TIMEOUT_MS,
209
210
  })
210
211
 
211
212
  return result.exitCode ?? FAILURE_EXIT_CODE
212
213
  }
213
214
 
215
+ // Run one command's steps in order, stopping at the first failure — what the `&&` in its printed
216
+ // text says.
217
+ function run_upgrade_command(command: UpgradeCommand): number {
218
+ for (const step of command.steps) {
219
+ const code = run_upgrade_step(step)
220
+ if (code !== 0) return code
221
+ }
222
+
223
+ return 0
224
+ }
225
+
214
226
  // Run every upgrade command in order, returning the last non-zero exit code (or 0 when all
215
227
  // succeed) so a failure on either target is surfaced without aborting the remaining upgrades.
216
- function run_all_upgrade_commands(commands: ReadonlyArray<string>): number {
228
+ function run_all_upgrade_commands(commands: ReadonlyArray<UpgradeCommand>): number {
217
229
  let exit_code = 0
218
230
  const failed_commands: Array<string> = []
219
231
 
@@ -221,7 +233,7 @@ function run_all_upgrade_commands(commands: ReadonlyArray<string>): number {
221
233
  const code = run_upgrade_command(command)
222
234
  if (code === 0) continue
223
235
  exit_code = code
224
- failed_commands.push(command)
236
+ failed_commands.push(command.text)
225
237
  }
226
238
 
227
239
  if (failed_commands.length > 0) {
@@ -23,19 +23,11 @@ function require_endpoint(versions_endpoint: string | undefined, package_name: s
23
23
  )
24
24
  }
25
25
 
26
- // Fetch the latest published version: public npm's `latest` dist-tag first, which needs no
27
- // credentials (joshuafolkken/kit#2882), then the GitHub Packages versions endpoint for a package
28
- // public npm does not answer for. The endpoint is supplied per package (e.g.
29
- // `/users/joshuafolkken/packages/npm/kit/versions?per_page=1`) so the same fetcher serves kit, jgame,
30
- // and app-kit. Guards an undefined/empty endpoint and wraps `gh api` failures with an actionable
31
- // message instead of a raw ExecaSyncError stack. The detail is the shared layer's failure text: gh's
32
- // own stderr (e.g. "gh: Not Found (HTTP 404)") when it wrote one, execa's message otherwise, followed
33
- // by any JSON error body gh wrote to stdout.
34
- function fetch_latest_version(versions_endpoint: string | undefined, package_name: string): string {
35
- const endpoint = require_endpoint(versions_endpoint, package_name)
36
- const public_latest = npm_registry.read_latest(package_name)
37
- if (public_latest !== undefined) return public_latest
38
-
26
+ // The newest version name on the GitHub Packages versions endpoint. Wraps `gh api` failures with an
27
+ // actionable message instead of a raw ExecaSyncError stack. The detail is the shared layer's failure
28
+ // text: gh's own stderr (e.g. "gh: Not Found (HTTP 404)") when it wrote one, execa's message
29
+ // otherwise, followed by any JSON error body gh wrote to stdout.
30
+ function read_github_name(endpoint: string, package_name: string): string {
39
31
  try {
40
32
  return git_gh_exec.exec_gh_api_sync({ path: endpoint, jq_filter: '.[0].name' }).trim()
41
33
  } catch (error) {
@@ -50,6 +42,29 @@ function fetch_latest_version(versions_endpoint: string | undefined, package_nam
50
42
  }
51
43
  }
52
44
 
45
+ // Refused at the source, as public npm's answer is: the value goes into an install command, so
46
+ // anything but a semver version is never passed on (joshuafolkken/kit#3266).
47
+ function read_github_latest(endpoint: string, package_name: string): string {
48
+ const name = read_github_name(endpoint, package_name)
49
+ const version = npm_registry.valid_version(name)
50
+ if (version !== undefined) return version
51
+
52
+ throw new Error(
53
+ `Refused latest version for ${package_name} via ${endpoint}: ${JSON.stringify(name)} is not a semver version`,
54
+ )
55
+ }
56
+
57
+ // Fetch the latest published version: public npm's `latest` dist-tag first, which needs no
58
+ // credentials (joshuafolkken/kit#2882), then the GitHub Packages versions endpoint for a package
59
+ // public npm does not answer for. The endpoint is supplied per package (e.g.
60
+ // `/users/joshuafolkken/packages/npm/kit/versions?per_page=1`) so the same fetcher serves kit, jgame,
61
+ // and app-kit. Guards an undefined/empty endpoint before either source is asked.
62
+ function fetch_latest_version(versions_endpoint: string | undefined, package_name: string): string {
63
+ const endpoint = require_endpoint(versions_endpoint, package_name)
64
+
65
+ return npm_registry.read_latest(package_name) ?? read_github_latest(endpoint, package_name)
66
+ }
67
+
53
68
  // Rewrite the endpoint's page size. The endpoint is consumer-overridable, so `per_page` is set
54
69
  // through a query parser rather than by substituting the literal the default happens to carry.
55
70
  function with_page_size(endpoint: string, page_size: number): string {
@@ -4,3 +4,7 @@
4
4
  allowBuilds:
5
5
  esbuild: true
6
6
  unrs-resolver: true
7
+
8
+ # pnpm 12 reads these settings from this file only; the same lines in .npmrc are ignored (kit #3267).
9
+ minimumReleaseAge: 1440
10
+ engineStrict: true
@@ -13,10 +13,6 @@ concurrency:
13
13
  group: ${{ github.workflow }}-${{ github.ref }}
14
14
  cancel-in-progress: true
15
15
 
16
- permissions:
17
- contents: write
18
- pull-requests: write
19
-
20
16
  jobs:
21
17
  # Gated on who opened the pull request, not on who triggered this run. `github.actor` names the
22
18
  # latter, so a push by anyone other than Dependabot — a maintainer rebasing the branch by hand, or
@@ -24,11 +20,15 @@ jobs:
24
20
  # `gh pr merge --auto` is state on the pull request, so a run that never happens cannot withdraw an
25
21
  # auto-merge an earlier run armed, and the bump merges itself the moment the checks go green
26
22
  # (joshuafolkken/kit#838). The author is the stable fact about a Dependabot pull request; arming is
27
- # what stays restricted to Dependabot's own events, on the step below.
23
+ # what stays restricted to Dependabot's own events, on the step below. The write rights are granted
24
+ # to this job alone (joshuafolkken/kit#3268).
28
25
  auto-merge:
29
26
  runs-on: ubuntu-latest
30
27
  timeout-minutes: 10
31
28
  if: github.event.pull_request.user.login == 'dependabot[bot]'
29
+ permissions:
30
+ contents: write
31
+ pull-requests: write
32
32
  steps:
33
33
  # Whether the pull request touches a workflow some upstream package overwrites. Decided from
34
34
  # the changed files because Dependabot's metadata cannot answer it: for the github-actions
@@ -17,6 +17,8 @@ on:
17
17
  jobs:
18
18
  release:
19
19
  runs-on: ubuntu-latest
20
+ # `josh release:github` waits up to 60 minutes (120 polls, 30 seconds apart) for the Publish run
21
+ # and lower tags' releases; the extra 5 minutes cover the setup before it.
20
22
  timeout-minutes: 65
21
23
  permissions:
22
24
  actions: read
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env tsx
2
- import { fileURLToPath } from 'node:url'
3
- import { error_text } from '#scripts/lib/error-message'
4
- import { build_library, library_paths } from './build-library'
5
-
6
- const CONFIG_MERGE_LIBRARY = 'config-merge'
7
- const { outfile: CONFIG_MERGE_OUTFILE, dts_file: CONFIG_MERGE_DTS_FILE } =
8
- library_paths(CONFIG_MERGE_LIBRARY)
9
-
10
- async function build_config_merge_library(): Promise<void> {
11
- await build_library(CONFIG_MERGE_LIBRARY)
12
- }
13
-
14
- async function main(): Promise<void> {
15
- try {
16
- await build_config_merge_library()
17
- console.info(` ✔ ${CONFIG_MERGE_OUTFILE} built`)
18
- console.info(` ✔ ${CONFIG_MERGE_DTS_FILE} built`)
19
- } catch (error) {
20
- console.error(error_text.message_of(error))
21
- process.exit(1)
22
- }
23
- }
24
-
25
- if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
26
-
27
- export { build_config_merge_library, CONFIG_MERGE_OUTFILE, CONFIG_MERGE_DTS_FILE }
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env tsx
2
- import { fileURLToPath } from 'node:url'
3
- import { error_text } from '#scripts/lib/error-message'
4
- import { build_library, library_paths } from './build-library'
5
-
6
- const MANAGED_MARKER_LIBRARY = 'managed-marker'
7
- const { outfile: MANAGED_MARKER_OUTFILE, dts_file: MANAGED_MARKER_DTS_FILE } =
8
- library_paths(MANAGED_MARKER_LIBRARY)
9
-
10
- async function build_managed_marker_library(): Promise<void> {
11
- await build_library(MANAGED_MARKER_LIBRARY)
12
- }
13
-
14
- async function main(): Promise<void> {
15
- try {
16
- await build_managed_marker_library()
17
- console.info(` ✔ ${MANAGED_MARKER_OUTFILE} built`)
18
- console.info(` ✔ ${MANAGED_MARKER_DTS_FILE} built`)
19
- } catch (error) {
20
- console.error(error_text.message_of(error))
21
- process.exit(1)
22
- }
23
- }
24
-
25
- if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
26
-
27
- export { build_managed_marker_library, MANAGED_MARKER_OUTFILE, MANAGED_MARKER_DTS_FILE }
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env tsx
2
- import { fileURLToPath } from 'node:url'
3
- import { error_text } from '#scripts/lib/error-message'
4
- import { build_library, library_paths } from './build-library'
5
-
6
- const SELF_SYNC_GUARD_LIBRARY = 'self-sync-guard'
7
- const { outfile: SELF_SYNC_GUARD_OUTFILE, dts_file: SELF_SYNC_GUARD_DTS_FILE } =
8
- library_paths(SELF_SYNC_GUARD_LIBRARY)
9
-
10
- async function build_self_sync_guard_library(): Promise<void> {
11
- await build_library(SELF_SYNC_GUARD_LIBRARY)
12
- }
13
-
14
- async function main(): Promise<void> {
15
- try {
16
- await build_self_sync_guard_library()
17
- console.info(` ✔ ${SELF_SYNC_GUARD_OUTFILE} built`)
18
- console.info(` ✔ ${SELF_SYNC_GUARD_DTS_FILE} built`)
19
- } catch (error) {
20
- console.error(error_text.message_of(error))
21
- process.exit(1)
22
- }
23
- }
24
-
25
- if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
26
-
27
- export { build_self_sync_guard_library, SELF_SYNC_GUARD_OUTFILE, SELF_SYNC_GUARD_DTS_FILE }
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env tsx
2
- import { fileURLToPath } from 'node:url'
3
- import { error_text } from '#scripts/lib/error-message'
4
- import { build_library, library_paths } from './build-library'
5
-
6
- const VERSION_LIBRARY = 'version'
7
- const { outfile: VERSION_OUTFILE, dts_file: VERSION_DTS_FILE } = library_paths(VERSION_LIBRARY)
8
-
9
- async function build_version_library(): Promise<void> {
10
- await build_library(VERSION_LIBRARY)
11
- }
12
-
13
- async function main(): Promise<void> {
14
- try {
15
- await build_version_library()
16
- console.info(` ✔ ${VERSION_OUTFILE} built`)
17
- console.info(` ✔ ${VERSION_DTS_FILE} built`)
18
- } catch (error) {
19
- console.error(error_text.message_of(error))
20
- process.exit(1)
21
- }
22
- }
23
-
24
- if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
25
-
26
- export { build_version_library, VERSION_OUTFILE, VERSION_DTS_FILE }
@@ -1,86 +0,0 @@
1
- import { readFileSync, writeFileSync } from 'node:fs'
2
- import { ci_installer_pin } from '#scripts/safe-chain/ci-installer-pin'
3
- import { execaSync } from 'execa'
4
-
5
- const SAFE_CHAIN_PKG = '@aikidosec/safe-chain'
6
- const VERSION_RE = /@aikidosec\/safe-chain@([^\s"']+)/u
7
- const NPM_TIMEOUT_MS = 30_000
8
-
9
- interface PreinstallInfo {
10
- content: string
11
- current_version: string
12
- }
13
-
14
- function extract_pinned_version(preinstall: string): string | undefined {
15
- return VERSION_RE.exec(preinstall)?.[1]
16
- }
17
-
18
- function fetch_latest_version(): string | undefined {
19
- const result = execaSync('npm', ['view', SAFE_CHAIN_PKG, 'version'], {
20
- reject: false,
21
- timeout: NPM_TIMEOUT_MS,
22
- })
23
- if (result.exitCode !== 0 || !result.stdout) return undefined
24
-
25
- return result.stdout.trim()
26
- }
27
-
28
- function rewrite_version(content: string, current_version: string, next_version: string): string {
29
- return content.replace(
30
- `${SAFE_CHAIN_PKG}@${current_version}`,
31
- () => `${SAFE_CHAIN_PKG}@${next_version}`,
32
- )
33
- }
34
-
35
- function read_preinstall_info(package_json_path: string): PreinstallInfo | undefined {
36
- const content = readFileSync(package_json_path, 'utf8')
37
- const package_json = JSON.parse(content) as { scripts?: { preinstall?: string } }
38
- const preinstall = package_json.scripts?.preinstall
39
- if (!preinstall) return undefined
40
-
41
- const current_version = extract_pinned_version(preinstall)
42
- if (!current_version) return undefined
43
-
44
- return { content, current_version }
45
- }
46
-
47
- function write_if_updated(
48
- package_json_path: string,
49
- content: string,
50
- current: string,
51
- latest: string,
52
- ): void {
53
- if (current === latest) {
54
- console.info(`\n✔ ${SAFE_CHAIN_PKG} preinstall already at ${latest}`)
55
-
56
- return
57
- }
58
-
59
- console.info(`\n↑ Updating ${SAFE_CHAIN_PKG} preinstall: ${current} → ${latest}`)
60
- writeFileSync(package_json_path, rewrite_version(content, current, latest), 'utf8')
61
- }
62
-
63
- function sync(package_json_path: string): void {
64
- const info = read_preinstall_info(package_json_path)
65
- if (!info) return
66
-
67
- const latest = fetch_latest_version()
68
-
69
- if (!latest) {
70
- console.warn(`\n⚠ Could not fetch latest version of ${SAFE_CHAIN_PKG}; skipping`)
71
-
72
- return
73
- }
74
-
75
- write_if_updated(package_json_path, info.content, info.current_version, latest)
76
- ci_installer_pin.sync(latest)
77
- }
78
-
79
- const preinstall_version_update = {
80
- sync,
81
- extract_pinned_version,
82
- fetch_latest_version,
83
- rewrite_version,
84
- }
85
-
86
- export { preinstall_version_update }
File without changes
File without changes