@joshuafolkken/kit 1.1035.0 → 1.1094.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 (605) hide show
  1. package/.claude/settings.json +9 -8
  2. package/.claude/skills/epic-commands/SKILL.md +5 -7
  3. package/.claude/skills/verify-ui/SKILL.md +1 -1
  4. package/.claude/skills/workflow-commands/SKILL.md +21 -13
  5. package/.claude/skills/workflow-commands/background-commands.md +5 -4
  6. package/.claude/skills/workflow-commands/backlogrun-child.md +3 -3
  7. package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -7
  8. package/.claude/skills/workflow-commands/backlogrun-park.md +6 -0
  9. package/.claude/skills/workflow-commands/backlogrun-progress.md +31 -37
  10. package/.claude/skills/workflow-commands/backlogrun-steps.md +25 -25
  11. package/.claude/skills/workflow-commands/backlogrun.md +2 -2
  12. package/.claude/skills/workflow-commands/chain-rule.md +6 -4
  13. package/.claude/skills/workflow-commands/delegation.md +3 -3
  14. package/.claude/skills/workflow-commands/followup-reference.md +3 -3
  15. package/.claude/skills/workflow-commands/followup.md +7 -3
  16. package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
  17. package/.claude/skills/workflow-commands/fullrun.md +3 -2
  18. package/.claude/skills/workflow-commands/halfrun.md +16 -19
  19. package/.claude/skills/workflow-commands/issue-comments.md +2 -2
  20. package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
  21. package/.claude/skills/workflow-commands/issue-scout.md +1 -1
  22. package/.claude/skills/workflow-commands/kickoff.md +9 -4
  23. package/.claude/skills/workflow-commands/latest-gate.md +1 -1
  24. package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
  25. package/.claude/skills/workflow-commands/observation-filing.md +44 -89
  26. package/.claude/skills/workflow-commands/pre-gate-cut.md +33 -36
  27. package/.claude/skills/workflow-commands/prerequisite.md +1 -1
  28. package/.claude/skills/workflow-commands/prrun.md +36 -0
  29. package/.claude/skills/workflow-commands/retrospective.md +1 -1
  30. package/.claude/skills/workflow-commands/working-tree-hold.md +24 -4
  31. package/.codex/hooks.json +16 -20
  32. package/.github/actions/setup-pnpm/action.yml +93 -0
  33. package/.github/dependabot.yml +5 -1
  34. package/.github/workflows/auto-tag.yml +21 -0
  35. package/.github/workflows/ci.yml +26 -128
  36. package/.github/workflows/pr-classification.yml +5 -41
  37. package/.github/workflows/publish.yml +42 -48
  38. package/.github/workflows/sonar-qube.yml +37 -4
  39. package/AGENTS.md +12 -2
  40. package/CLAUDE.md +15 -16
  41. package/GEMINI.md +14 -2
  42. package/README.md +59 -18
  43. package/SECURITY.md +36 -6
  44. package/cspell/index.yaml +2 -1
  45. package/dist/CLAUDE.md +15 -16
  46. package/dist/config-merge/index.js +15 -3
  47. package/dist/hooks/batch-guard.js +4 -4
  48. package/dist/hooks/{chunk-Y27M6A7X.js → chunk-3C4YCCEF.js} +5 -13
  49. package/dist/hooks/{chunk-D67KVGGY.js → chunk-7ZPFAVR7.js} +17 -88
  50. package/dist/hooks/{chunk-HOYJU5RM.js → chunk-E54KGFEQ.js} +11 -4
  51. package/dist/hooks/{chunk-KG6PZD72.js → chunk-IL27YTPH.js} +2 -2
  52. package/dist/hooks/{chunk-GJT4BNVE.js → chunk-KHWHKJOM.js} +3 -3
  53. package/dist/hooks/{chunk-HU66PWWL.js → chunk-M2XDCUKD.js} +1076 -509
  54. package/dist/hooks/{chunk-GLBDBJOK.js → chunk-NKOG3XAV.js} +199 -304
  55. package/dist/hooks/{chunk-ZXNE6NY3.js → chunk-O4LL4HTI.js} +2 -7
  56. package/dist/hooks/{chunk-XPLP27WA.js → chunk-OIZUHPJI.js} +5 -27
  57. package/dist/hooks/{chunk-EIFCAJRB.js → chunk-UD24EAIL.js} +2546 -1636
  58. package/dist/hooks/codex-hook-adapter.js +10 -11
  59. package/dist/hooks/duplicate-read-guard.js +5 -5
  60. package/dist/hooks/format-edited.js +15 -34
  61. package/dist/hooks/inputs.json +279 -0
  62. package/dist/hooks/investigation-guard.js +5 -5
  63. package/dist/hooks/pretool-guard.js +23 -16
  64. package/dist/hooks/session-lang.js +0 -1
  65. package/dist/hooks/stop-guard.js +188 -509
  66. package/dist/josh.js +166 -225
  67. package/dist/managed-marker/index.js +2 -1
  68. package/dist/version/index.js +412 -64
  69. package/eslint/rules/promise.js +5 -0
  70. package/package.json +13 -8
  71. package/prompts/collaboration-workflow/file-edits.md +6 -53
  72. package/prompts/collaboration-workflow/issue-citation.md +5 -5
  73. package/prompts/collaboration-workflow/operating-rules.md +4 -4
  74. package/prompts/collaboration-workflow/overview.md +13 -1
  75. package/prompts/collaboration-workflow/report-format.md +1 -1
  76. package/prompts/collaboration-workflow/residency.md +4 -4
  77. package/prompts/collaboration-workflow/rule-delivery.md +5 -36
  78. package/prompts/collaboration-workflow/shell-body.md +7 -9
  79. package/prompts/collaboration-workflow/turn-batching.md +21 -37
  80. package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
  81. package/prompts/collaboration-workflow/wip-cap.md +36 -36
  82. package/prompts/collaboration-workflow.md +5 -8
  83. package/prompts/review-rubric.md +1 -1
  84. package/prompts/review.md +3 -3
  85. package/prompts/sonar-hotspot-handling.md +12 -4
  86. package/prompts/testing-guide.md +3 -3
  87. package/scripts/adopt/adopt-toolkits.ts +2 -2
  88. package/scripts/adopt/adopt.ts +0 -2
  89. package/scripts/agent/agent-argv.ts +0 -2
  90. package/scripts/agent/agent-diagnostics.ts +1 -1
  91. package/scripts/agent/agent-role-profile.ts +0 -7
  92. package/scripts/agent/claude-agent-argv.ts +0 -2
  93. package/scripts/agent/codex-agent-argv.ts +1 -1
  94. package/scripts/agent/codex-hooks.ts +92 -0
  95. package/scripts/agent/interactive-ask.ts +1 -1
  96. package/scripts/auto-ok/auto-ok-cli.ts +15 -25
  97. package/scripts/backlog/backlog-budget.ts +0 -2
  98. package/scripts/backlog/backlog-defect-priority.ts +2 -2
  99. package/scripts/backlog/backlog-drive-cli.ts +10 -8
  100. package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
  101. package/scripts/backlog/backlog-drive-named.ts +2 -1
  102. package/scripts/backlog/backlog-drive.ts +76 -16
  103. package/scripts/backlog/backlog-named.ts +0 -3
  104. package/scripts/backlog/backlog-next.ts +32 -22
  105. package/scripts/backlog/backlog-offer-cli.ts +0 -5
  106. package/scripts/backlog/backlog-plan-cli.ts +6 -8
  107. package/scripts/backlog/backlog-plan.ts +1 -1
  108. package/scripts/backlog/backlog-pool.ts +34 -17
  109. package/scripts/backlog/backlog-rank.ts +106 -0
  110. package/scripts/backlog/backlog-ready.ts +19 -3
  111. package/scripts/backlog/backlog-scope.ts +1 -3
  112. package/scripts/backlog/backlog-stalled-detect.ts +2 -2
  113. package/scripts/backlog/backlog-stalled.ts +0 -1
  114. package/scripts/backlog/backlog-waves.ts +47 -31
  115. package/scripts/behavior/behavior-cli.ts +1 -1
  116. package/scripts/build/build-codex-hooks.ts +26 -0
  117. package/scripts/build/build-hooks.ts +92 -11
  118. package/scripts/build/hook-bundle-stamp.ts +111 -0
  119. package/scripts/cases/cases-cli.ts +1 -1
  120. package/scripts/cases/cases-logic.ts +1 -1
  121. package/scripts/ci/composite-actions.ts +30 -0
  122. package/scripts/ci/pr-classification.ts +3 -3
  123. package/scripts/claude/workflow-destination.ts +10 -1
  124. package/scripts/clone/clone-fingerprint.ts +0 -1
  125. package/scripts/clone/clone-scan-cli.ts +1 -1
  126. package/scripts/clone/clone-scan.ts +1 -1
  127. package/scripts/config-merge/json-format.ts +0 -1
  128. package/scripts/config-merge/patch-yaml-list.ts +1 -1
  129. package/scripts/cost-runtime/codex-usage.ts +2 -9
  130. package/scripts/cost-runtime/cost-attribute.ts +0 -1
  131. package/scripts/cost-runtime/cost-cli.ts +0 -3
  132. package/scripts/cost-runtime/cost-corpus.ts +0 -2
  133. package/scripts/cost-runtime/cost-format.ts +0 -3
  134. package/scripts/cost-runtime/cost-pricing.ts +0 -1
  135. package/scripts/cost-runtime/cost-tokens.ts +0 -1
  136. package/scripts/delegation/delegation-cli.ts +1 -1
  137. package/scripts/delegation/delegation-policy.ts +11 -1
  138. package/scripts/delegation/duplicate-read-guard.ts +0 -8
  139. package/scripts/delegation/fanout-cli.ts +1 -1
  140. package/scripts/delegation/fanout.ts +0 -2
  141. package/scripts/delegation/investigation-reads.ts +1 -164
  142. package/scripts/discovery/repo-map-logic.ts +0 -1
  143. package/scripts/discovery/repo-party-cli.ts +1 -1
  144. package/scripts/doctor/doctor-consumer.ts +4 -6
  145. package/scripts/doctor/doctor-logic.ts +0 -4
  146. package/scripts/doctor/doctor.ts +14 -9
  147. package/scripts/document/document-byte-budget.ts +8 -9
  148. package/scripts/document/document-byte-check.ts +0 -1
  149. package/scripts/document/document-read-cli.ts +0 -2
  150. package/scripts/document/document-section-cli.ts +1 -1
  151. package/scripts/document/document-section.ts +0 -3
  152. package/scripts/document/edit-files-cli.ts +0 -1
  153. package/scripts/document/entry-read-budget.ts +13 -4
  154. package/scripts/document/lane-child-read-set.ts +1 -6
  155. package/scripts/document/read-files-cli.ts +0 -4
  156. package/scripts/document/read-set-cli.ts +0 -2
  157. package/scripts/document/read-set-point-of-use.ts +1 -0
  158. package/scripts/document/read-set-pricing.ts +0 -1
  159. package/scripts/document/read-set-trim.ts +1 -1
  160. package/scripts/epic/epic-add.ts +1 -1
  161. package/scripts/epic/epic-audit-cli.ts +1 -4
  162. package/scripts/epic/epic-audit-orphans.ts +1 -3
  163. package/scripts/epic/epic-audit-rationale.ts +0 -1
  164. package/scripts/epic/epic-audit-report.ts +0 -2
  165. package/scripts/epic/epic-audit.ts +5 -4
  166. package/scripts/epic/epic-bundle-cli.ts +1 -1
  167. package/scripts/epic/epic-bundle-evidence.ts +0 -1
  168. package/scripts/epic/epic-bundle-referenced.ts +1 -5
  169. package/scripts/epic/epic-bundle.ts +0 -4
  170. package/scripts/epic/epic-busy.ts +4 -5
  171. package/scripts/epic/epic-candidate-confirm.ts +0 -5
  172. package/scripts/epic/epic-classify.ts +2 -2
  173. package/scripts/epic/epic-cli-argv.ts +0 -1
  174. package/scripts/epic/epic-close-comment.ts +1 -1
  175. package/scripts/epic/epic-close.ts +5 -2
  176. package/scripts/epic/epic-cross-repo.ts +2 -4
  177. package/scripts/epic/epic-decision.ts +0 -1
  178. package/scripts/epic/epic-fetch.ts +2 -2
  179. package/scripts/epic/epic-index.ts +2 -3
  180. package/scripts/epic/epic-issue.ts +1 -15
  181. package/scripts/epic/epic-lane-offer.ts +20 -30
  182. package/scripts/epic/epic-nested.ts +1 -1
  183. package/scripts/epic/epic-next-read.ts +1 -3
  184. package/scripts/epic/epic-next-views.ts +0 -1
  185. package/scripts/epic/epic-next.ts +1 -10
  186. package/scripts/epic/epic-parse.ts +0 -1
  187. package/scripts/epic/epic-promote.ts +0 -9
  188. package/scripts/epic/epic-rank.ts +37 -0
  189. package/scripts/epic/epic-read.ts +1 -2
  190. package/scripts/epic/epic-reconcile.ts +1 -1
  191. package/scripts/epic/epic-reference.ts +1 -13
  192. package/scripts/epic/epic-relation-recheck.ts +1 -1
  193. package/scripts/epic/epic-relations.ts +1 -1
  194. package/scripts/epic/epic-remove.ts +1 -1
  195. package/scripts/epic/epic-report.ts +0 -1
  196. package/scripts/epic/epic-run.ts +2 -3
  197. package/scripts/epic/epic-shape.ts +1 -1
  198. package/scripts/epic/epic-solo-stale.ts +107 -0
  199. package/scripts/epic/epic-solo.ts +32 -30
  200. package/scripts/epic/epic-triage.ts +1 -1
  201. package/scripts/epic/epic-validate.ts +1 -1
  202. package/scripts/epic/epic.ts +1 -1
  203. package/scripts/exports/unused-members-cli.ts +53 -0
  204. package/scripts/{git → followup}/followup-issue-number.ts +1 -6
  205. package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
  206. package/scripts/{git → followup}/git-followup-finish.ts +1 -3
  207. package/scripts/{git → followup}/git-followup-flush.ts +2 -2
  208. package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
  209. package/scripts/{git → followup}/git-followup-label.ts +4 -4
  210. package/scripts/followup/git-followup-merged.ts +112 -0
  211. package/scripts/{git → followup}/git-followup-pending.ts +1 -1
  212. package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
  213. package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
  214. package/scripts/{git → followup}/git-pr-followup.ts +53 -16
  215. package/scripts/gate/core-budget.ts +3 -9
  216. package/scripts/gate/gate-plan.ts +7 -4
  217. package/scripts/gate/gate-report.ts +0 -6
  218. package/scripts/gate/gate-tree.ts +1 -1
  219. package/scripts/gate/pre-commit-type-check.ts +0 -6
  220. package/scripts/gate/project-checks.ts +7 -8
  221. package/scripts/gate/scoped-green.ts +0 -1
  222. package/scripts/gate/type-check-step.ts +1 -1
  223. package/scripts/gate/verification-gate.ts +0 -2
  224. package/scripts/gh/fix-gh-packages.ts +15 -12
  225. package/scripts/gh/gh-spawn.ts +2 -2
  226. package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
  227. package/scripts/{git → gh}/git-gh-check.ts +2 -1
  228. package/scripts/{git → gh}/git-gh-exec.ts +1 -1
  229. package/scripts/{git → gh}/git-gh-failure.ts +1 -1
  230. package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
  231. package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
  232. package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
  233. package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
  234. package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
  235. package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
  236. package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
  237. package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
  238. package/scripts/{git → gh}/git-gh-pr.ts +3 -1
  239. package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
  240. package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
  241. package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
  242. package/scripts/{git → gh}/git-pr-checks.ts +2 -1
  243. package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
  244. package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
  245. package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
  246. package/scripts/{git → gh}/git-pr.ts +3 -3
  247. package/scripts/git/changed-file-scope.ts +0 -1
  248. package/scripts/git/git-branch.ts +3 -6
  249. package/scripts/git/git-command.ts +1 -1
  250. package/scripts/git/git-commit.ts +1 -1
  251. package/scripts/git/git-common-directory.ts +80 -24
  252. package/scripts/git/git-error.ts +66 -9
  253. package/scripts/git/git-execa-error.ts +6 -1
  254. package/scripts/git/git-issue.ts +1 -1
  255. package/scripts/git/git-preflight.ts +24 -6
  256. package/scripts/git/git-prompt.ts +6 -31
  257. package/scripts/git/git-push-transport.ts +12 -69
  258. package/scripts/git/git-push.ts +1 -1
  259. package/scripts/git/git-spawn.ts +79 -3
  260. package/scripts/git/git-ssh-keepalive.ts +74 -0
  261. package/scripts/git/git-staging.ts +1 -0
  262. package/scripts/git/git-status.ts +1 -1
  263. package/scripts/git/git-workflow.ts +1 -1
  264. package/scripts/git/gone-branch.ts +4 -2
  265. package/scripts/git/listing-cutoff.ts +1 -1
  266. package/scripts/git/main-merge.ts +1 -1
  267. package/scripts/git/main-sync.ts +19 -1
  268. package/scripts/git/parse-json-array.ts +0 -3
  269. package/scripts/git/repository-lock.ts +16 -16
  270. package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
  271. package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
  272. package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
  273. package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
  274. package/scripts/hooks/codex-hook-adapter.ts +0 -1
  275. package/scripts/hooks/edited-cspell.ts +1 -1
  276. package/scripts/hooks/format-edited-cli.ts +15 -0
  277. package/scripts/hooks/format-edited-file.ts +4 -9
  278. package/scripts/hooks/pre-push-unit.ts +0 -4
  279. package/scripts/hooks/pretool-guard-cli.ts +21 -0
  280. package/scripts/hooks/pretool-guard.ts +36 -19
  281. package/scripts/hooks/reserved-run.ts +1 -1
  282. package/scripts/hooks/step-zero-notice.ts +76 -0
  283. package/scripts/hooks/stop-guard.ts +47 -21
  284. package/scripts/init/claude-plugin-config.ts +4 -5
  285. package/scripts/init/hook-command-rewrite.ts +16 -8
  286. package/scripts/init/hook-launch.ts +41 -15
  287. package/scripts/init/init-basic.ts +2 -5
  288. package/scripts/init/init-logic.ts +7 -0
  289. package/scripts/init/init.ts +0 -3
  290. package/scripts/init/project-profile.ts +6 -11
  291. package/scripts/init/start-exec.ts +8 -2
  292. package/scripts/init/start-plan.ts +18 -5
  293. package/scripts/init/start-setup-pr.ts +52 -25
  294. package/scripts/init/start-steps.ts +42 -9
  295. package/scripts/init/start.ts +40 -10
  296. package/scripts/issue/behavior-change-lint.ts +0 -1
  297. package/scripts/issue/defect-rate-cli.ts +3 -3
  298. package/scripts/issue/defect-rate.ts +1 -2
  299. package/scripts/{git → issue}/git-next-issues.ts +37 -8
  300. package/scripts/issue/issue-backlinks-cli.ts +1 -5
  301. package/scripts/issue/issue-cite-cli.ts +2 -6
  302. package/scripts/issue/issue-cite.ts +19 -3
  303. package/scripts/issue/issue-classification.ts +1 -9
  304. package/scripts/issue/issue-closing-pr.ts +4 -4
  305. package/scripts/issue/issue-comment-cli.ts +2 -2
  306. package/scripts/issue/issue-file-cli.ts +5 -5
  307. package/scripts/issue/issue-file.ts +2 -2
  308. package/scripts/issue/issue-fold-cli.ts +1 -1
  309. package/scripts/issue/issue-fold-existing-cli.ts +1 -1
  310. package/scripts/{git → issue}/issue-labels.ts +20 -0
  311. package/scripts/issue/issue-lint-cli.ts +1 -1
  312. package/scripts/issue/issue-merged.ts +2 -2
  313. package/scripts/issue/issue-rank.ts +89 -0
  314. package/scripts/issue/issue-read-cli.ts +8 -47
  315. package/scripts/issue/issue-read.ts +0 -2
  316. package/scripts/issue/issue-report-failures.ts +80 -0
  317. package/scripts/issue/issue-scout-cli.ts +1 -7
  318. package/scripts/issue/issue-scout-closed.ts +2 -2
  319. package/scripts/issue/issue-scout.ts +0 -2
  320. package/scripts/issue/issue-state-cli.ts +5 -46
  321. package/scripts/issue/issue-state.ts +1 -5
  322. package/scripts/issue/markdown-section.ts +1 -1
  323. package/scripts/issue/measure-rerun-cli.ts +1 -1
  324. package/scripts/issue/reproduction-measure.ts +1 -1
  325. package/scripts/josh/cli-body.ts +1 -1
  326. package/scripts/josh/file-map-stamp.ts +0 -3
  327. package/scripts/josh/josh-command-map.ts +2 -102
  328. package/scripts/josh/josh-commands-ai.ts +9 -102
  329. package/scripts/josh/josh-commands-backlog.ts +5 -1
  330. package/scripts/josh/josh-commands-development.ts +10 -3
  331. package/scripts/josh/josh-commands-issue.ts +2 -2
  332. package/scripts/josh/josh-commands-maintenance.ts +7 -0
  333. package/scripts/josh/josh-commands-project.ts +7 -1
  334. package/scripts/josh/josh-commands-run.ts +114 -0
  335. package/scripts/josh/josh-commands-versioning.ts +8 -0
  336. package/scripts/josh/josh-commands-workflow.ts +2 -2
  337. package/scripts/josh/path-decision.ts +0 -3
  338. package/scripts/josh/process-owner.ts +16 -0
  339. package/scripts/josh/session-language-cli.ts +0 -1
  340. package/scripts/lane/lane-await.ts +3 -6
  341. package/scripts/lane/lane-capacity.ts +6 -3
  342. package/scripts/lane/lane-child-invocation.ts +20 -7
  343. package/scripts/lane/lane-child-marker.ts +16 -2
  344. package/scripts/lane/lane-cli.ts +33 -18
  345. package/scripts/lane/lane-close.ts +1 -3
  346. package/scripts/lane/lane-dispatch.ts +3 -4
  347. package/scripts/lane/lane-environment.ts +0 -9
  348. package/scripts/lane/lane-handoff.ts +38 -0
  349. package/scripts/lane/lane-launch-cli.ts +21 -11
  350. package/scripts/lane/lane-open.ts +0 -3
  351. package/scripts/lane/lane-output.ts +0 -1
  352. package/scripts/lane/lane-registry.ts +9 -0
  353. package/scripts/lane/lane-report.ts +10 -4
  354. package/scripts/lane/openai-lane-ship.ts +2 -0
  355. package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
  356. package/scripts/lane/openai-lane-supervisor.ts +6 -4
  357. package/scripts/lane/openai-review-broker.ts +3 -0
  358. package/scripts/lib/bounded-pool.ts +1 -0
  359. package/scripts/lib/json-value.ts +5 -4
  360. package/scripts/lib/poll.ts +3 -1
  361. package/scripts/lib/timed-fetch.ts +15 -0
  362. package/scripts/lib/timeouts.ts +13 -0
  363. package/scripts/{yaml → lib}/yaml-document.ts +3 -1
  364. package/scripts/{bytes → lines}/bytes-command.ts +0 -2
  365. package/scripts/lines/lines-command.ts +0 -1
  366. package/scripts/lint/lint-related-scope.ts +0 -1
  367. package/scripts/lint/lint-related.ts +1 -1
  368. package/scripts/{git → notify}/telegram-notify.ts +2 -2
  369. package/scripts/{git → notify}/telegram-test.ts +4 -4
  370. package/scripts/observations/observation-ledger-home.ts +0 -1
  371. package/scripts/observations/observation-ledger-line.ts +0 -1
  372. package/scripts/observations/observation-ledger-migrate.ts +1 -1
  373. package/scripts/observations/observations-flush-landing.ts +3 -3
  374. package/scripts/observations/observations-flush.ts +2 -2
  375. package/scripts/overrides/lockfile-overrides.ts +1 -1
  376. package/scripts/overrides/overrides-logic.ts +1 -1
  377. package/scripts/package/package-scout-cli.ts +2 -7
  378. package/scripts/package/package-scout.ts +0 -2
  379. package/scripts/propagate/propagate-git-failure.ts +0 -1
  380. package/scripts/propagate/propagate-git.ts +0 -2
  381. package/scripts/propagate/propagate-plan.ts +185 -0
  382. package/scripts/propagate/propagate-publish.ts +2 -3
  383. package/scripts/propagate/propagate-run.ts +5 -3
  384. package/scripts/propagate/propagate-steps.ts +19 -6
  385. package/scripts/propagate/propagate-targets.ts +13 -6
  386. package/scripts/propagate/propagate.ts +60 -46
  387. package/scripts/refactor/import-graph.ts +0 -1
  388. package/scripts/refactor/refactor-lint.ts +0 -2
  389. package/scripts/refactor/refactor-scan.ts +0 -1
  390. package/scripts/refactor/refactor-targets.ts +0 -1
  391. package/scripts/registry-migration/migrate-logic.ts +1 -2
  392. package/scripts/registry-migration/migrate.ts +19 -9
  393. package/scripts/release/github-release-cli.ts +8 -6
  394. package/scripts/release/github-release-environment.ts +46 -0
  395. package/scripts/release/github-release.ts +151 -94
  396. package/scripts/release/release-history.ts +0 -1
  397. package/scripts/release/release-plan.ts +0 -1
  398. package/scripts/release/release-publish.ts +2 -3
  399. package/scripts/release/release-scope-cli.ts +1 -2
  400. package/scripts/release/release-tag.ts +2 -4
  401. package/scripts/repo/auto-merge-setting-logic.ts +1 -4
  402. package/scripts/repo/repo-setting.ts +1 -1
  403. package/scripts/repo/repository-labels.ts +3 -3
  404. package/scripts/repo/required-checks-logic.ts +206 -0
  405. package/scripts/repo/required-checks-report.ts +71 -0
  406. package/scripts/repo/ruleset-check-cli.ts +53 -0
  407. package/scripts/repo/ruleset-check.ts +147 -0
  408. package/scripts/report/report-lint-cli.ts +0 -4
  409. package/scripts/review/disposition-cli.ts +1 -1
  410. package/scripts/review/live-evidence.ts +1 -1
  411. package/scripts/review/review-attest-cli.ts +0 -6
  412. package/scripts/review/review-attest.ts +48 -16
  413. package/scripts/review/review-brief-cli.ts +72 -8
  414. package/scripts/review/review-brief.ts +67 -9
  415. package/scripts/review/review-diff-parts.ts +89 -0
  416. package/scripts/review/review-diff-write.ts +97 -0
  417. package/scripts/review/review-finding-ledger.ts +0 -1
  418. package/scripts/review/review-record-cli.ts +1 -1
  419. package/scripts/review/review-record.ts +0 -1
  420. package/scripts/review/review-round2-cli.ts +1 -1
  421. package/scripts/review/review-stamps.ts +6 -2
  422. package/scripts/review/review-tree.ts +14 -2
  423. package/scripts/rules/decision-oracle-stage.ts +18 -0
  424. package/scripts/rules/decision-oracle.ts +10 -7
  425. package/scripts/rules/delivered-rules.ts +9 -1
  426. package/scripts/rules/destructive-command.ts +119 -0
  427. package/scripts/rules/direct-filing.ts +1 -1
  428. package/scripts/rules/file-body.ts +0 -3
  429. package/scripts/rules/filing-cap.ts +0 -2
  430. package/scripts/rules/gh-api.ts +7 -2
  431. package/scripts/rules/git-argv.ts +18 -7
  432. package/scripts/rules/git-force.ts +0 -2
  433. package/scripts/rules/implementation-cut.ts +1 -2
  434. package/scripts/rules/index-guard.ts +71 -0
  435. package/scripts/rules/issue-citation.ts +50 -25
  436. package/scripts/rules/issue-fold.ts +1 -2
  437. package/scripts/rules/lane-background.ts +15 -7
  438. package/scripts/rules/lane-carry-conflict.ts +1 -2
  439. package/scripts/rules/lane-park.ts +14 -8
  440. package/scripts/rules/last-prompt.ts +1 -0
  441. package/scripts/rules/oracle-consulted.ts +1 -1
  442. package/scripts/rules/oracle-firing.ts +1 -0
  443. package/scripts/rules/oracle-list-cli.ts +0 -3
  444. package/scripts/rules/permission-guards.ts +14 -0
  445. package/scripts/rules/pre-gate-cut.ts +2 -2
  446. package/scripts/rules/protected-files.ts +74 -0
  447. package/scripts/rules/reply-language.ts +1 -1
  448. package/scripts/rules/rule-body-guard.ts +0 -3
  449. package/scripts/rules/rule-value-cli.ts +0 -1
  450. package/scripts/rules/shell-body-trigger.ts +0 -1
  451. package/scripts/rules/shell-segments.ts +0 -1
  452. package/scripts/rules/stop-rules.ts +13 -5
  453. package/scripts/rules/tail-commands.ts +1 -1
  454. package/scripts/rules/test-declared-commit.ts +1 -1
  455. package/scripts/rules/third-party-write.ts +0 -1
  456. package/scripts/rules/worktree-guard.ts +26 -9
  457. package/scripts/run/run-carry-cli.ts +0 -2
  458. package/scripts/run/run-carry-stash.ts +2 -2
  459. package/scripts/run/run-carry-streak.ts +1 -1
  460. package/scripts/run/run-cut-cli.ts +0 -7
  461. package/scripts/run/run-cut.ts +8 -54
  462. package/scripts/run/run-ending-cli.ts +1 -1
  463. package/scripts/run/run-ending.ts +1 -4
  464. package/scripts/run/run-entry-cli.ts +101 -24
  465. package/scripts/run/run-entry.ts +0 -1
  466. package/scripts/run/run-event-cli.ts +0 -2
  467. package/scripts/run/run-event-follow.ts +1 -0
  468. package/scripts/run/run-event-render.ts +1 -1
  469. package/scripts/run/run-event-scope.ts +53 -4
  470. package/scripts/run/run-event-stream.ts +0 -3
  471. package/scripts/run/run-event-watch.ts +1 -0
  472. package/scripts/run/run-halfrun-resume.ts +20 -7
  473. package/scripts/run/run-headless.ts +24 -8
  474. package/scripts/run/run-hold-cli.ts +33 -10
  475. package/scripts/run/run-hold.ts +25 -5
  476. package/scripts/run/run-issue-number.ts +1 -1
  477. package/scripts/run/run-liveness-cli.ts +1 -1
  478. package/scripts/run/run-liveness.ts +2 -3
  479. package/scripts/run/run-merge-cli.ts +5 -13
  480. package/scripts/run/run-merge-steps.ts +5 -5
  481. package/scripts/run/run-merge.ts +1 -1
  482. package/scripts/run/run-next-cli.ts +1 -1
  483. package/scripts/run/run-parent-cut-hook.ts +143 -0
  484. package/scripts/run/run-preflight.ts +2 -9
  485. package/scripts/run/run-prep-cli.ts +2 -2
  486. package/scripts/run/run-prep-locate.ts +1 -1
  487. package/scripts/run/run-progress-cli.ts +4 -7
  488. package/scripts/run/run-progress-clock.ts +6 -34
  489. package/scripts/run/run-progress-config.ts +0 -4
  490. package/scripts/run/run-progress-read.ts +3 -3
  491. package/scripts/run/run-progress.ts +22 -10
  492. package/scripts/run/run-prrun-resume.ts +117 -0
  493. package/scripts/run/run-report-cli.ts +1 -2
  494. package/scripts/run/run-report.ts +0 -1
  495. package/scripts/run/run-retrospective.ts +1 -1
  496. package/scripts/run/run-review-cli.ts +0 -3
  497. package/scripts/run/run-review-steps.ts +2 -0
  498. package/scripts/run/run-review.ts +0 -2
  499. package/scripts/run/run-ship-cli.ts +27 -77
  500. package/scripts/run/run-ship-detach.ts +1 -0
  501. package/scripts/run/run-ship-next.ts +106 -0
  502. package/scripts/run/run-ship-preflight.ts +87 -0
  503. package/scripts/run/run-ship-return.ts +8 -3
  504. package/scripts/run/run-ship-review-steps.ts +23 -30
  505. package/scripts/run/run-ship-review.ts +20 -0
  506. package/scripts/run/run-ship-scoped.ts +45 -0
  507. package/scripts/run/run-ship-stage.ts +5 -1
  508. package/scripts/run/run-ship-steps.ts +105 -0
  509. package/scripts/run/run-ship.ts +2 -1
  510. package/scripts/run/run-stage-read.ts +62 -0
  511. package/scripts/run/run-stage.ts +160 -0
  512. package/scripts/run/run-status-cli.ts +1 -1
  513. package/scripts/run/run-step-cli.ts +21 -14
  514. package/scripts/run/run-step.ts +1 -1
  515. package/scripts/run/run-stop-notify.ts +1 -3
  516. package/scripts/run/run-stranded-cli.ts +0 -4
  517. package/scripts/run/run-stranded-detect.ts +2 -2
  518. package/scripts/run/run-tail-cli.ts +17 -11
  519. package/scripts/run/run-tail.ts +2 -0
  520. package/scripts/run/run-tidy-lanes.ts +2 -1
  521. package/scripts/run/run-tidy-stashes.ts +12 -12
  522. package/scripts/run/run-wake-cli.ts +4 -5
  523. package/scripts/run/run-wake-describe.ts +19 -1
  524. package/scripts/run/run-wake-loop.ts +2 -2
  525. package/scripts/run/run-wake.ts +2 -4
  526. package/scripts/run/run-watcher-guard-cli.ts +0 -4
  527. package/scripts/run/run-watcher-guard.ts +9 -7
  528. package/scripts/run/run-watcher-hook.ts +1 -1
  529. package/scripts/safe-chain/ci-installer-pin.ts +11 -5
  530. package/scripts/safe-chain/project-config.ts +1 -1
  531. package/scripts/security/security-audit-provision-logic.ts +0 -1
  532. package/scripts/security/security-audit-provision.ts +3 -2
  533. package/scripts/security/security-audit.ts +0 -1
  534. package/scripts/security/security-updates-logic.ts +0 -1
  535. package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
  536. package/scripts/sonar/sonar-hotspots.ts +0 -1
  537. package/scripts/sonar/sonar-new-code-cli.ts +150 -0
  538. package/scripts/sonar/sonar-new-code.ts +79 -0
  539. package/scripts/sonar/sonar-project.ts +97 -0
  540. package/scripts/split/split-assess-cli.ts +1 -1
  541. package/scripts/split/split-assess.ts +2 -5
  542. package/scripts/sync/managed-config-scope-cli.ts +1 -1
  543. package/scripts/sync/skill-migration.ts +0 -1
  544. package/scripts/sync/sync-hook-safety.ts +2 -3
  545. package/scripts/sync/sync.ts +1 -8
  546. package/scripts/sync/template-source-logic.ts +0 -1
  547. package/scripts/sync/workflow-pin-logic.ts +16 -28
  548. package/scripts/test/test-declared-logic.ts +0 -1
  549. package/scripts/test/test-declared.ts +0 -2
  550. package/scripts/test/test-red-commit.ts +2 -2
  551. package/scripts/test/test-red.ts +14 -7
  552. package/scripts/test/test-type-logic.ts +1 -1
  553. package/scripts/test/unit-worker-share.ts +7 -16
  554. package/scripts/time-runtime/time-batch-guard.ts +1 -2
  555. package/scripts/time-runtime/time-bundle-call.ts +2 -3
  556. package/scripts/time-runtime/time-bundles.ts +0 -4
  557. package/scripts/time-runtime/time-density-hook.ts +0 -2
  558. package/scripts/time-runtime/time-followup-stage.ts +1 -1
  559. package/scripts/time-runtime/time-format.ts +0 -73
  560. package/scripts/time-runtime/time-round-trips.ts +0 -4
  561. package/scripts/time-runtime/time-single-check.ts +1 -1
  562. package/scripts/time-runtime/time-spans.ts +1 -1
  563. package/scripts/time-runtime/time-transcript-line.ts +1 -2
  564. package/scripts/ui/ui-routes-cli.ts +0 -5
  565. package/scripts/ui/ui-routes.ts +0 -5
  566. package/scripts/version/effective-upstream.ts +2 -2
  567. package/scripts/version/latest-corepack.ts +7 -9
  568. package/scripts/version/latest-scope-cli.ts +0 -2
  569. package/scripts/version/latest-update.ts +0 -2
  570. package/scripts/version/npm-registry.ts +97 -0
  571. package/scripts/version/publishable-range-check.ts +1 -1
  572. package/scripts/version/release-hold.ts +0 -4
  573. package/scripts/version/running-binary.ts +2 -2
  574. package/scripts/version/version-check-logic.ts +0 -2
  575. package/scripts/version/version-commands.ts +5 -4
  576. package/scripts/version/version-remote.ts +28 -14
  577. package/scripts/version/version-targets.ts +4 -4
  578. package/templates/sonar-project.properties +28 -1
  579. package/templates/workflows/dependabot-auto-merge.yml +5 -3
  580. package/templates/workflows/github-release.yml +81 -0
  581. package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
  582. package/prompts/collaboration-workflow/epic-audit.md +0 -5
  583. package/prompts/collaboration-workflow/epic-bundle.md +0 -5
  584. package/scripts/init/plugin-install-hint.ts +0 -47
  585. package/scripts/version/parse-json.ts +0 -13
  586. /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
  587. /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
  588. /package/scripts/{git → gh}/git-gh-command.ts +0 -0
  589. /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
  590. /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
  591. /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
  592. /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
  593. /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
  594. /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
  595. /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
  596. /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
  597. /package/scripts/{git → gh}/git-pr-error.ts +0 -0
  598. /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
  599. /package/scripts/{git → gh}/github-issue-url.ts +0 -0
  600. /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
  601. /package/scripts/{git → issue}/issue-reference.ts +0 -0
  602. /package/scripts/{git → lib}/animation-helpers.ts +0 -0
  603. /package/scripts/{git → lib}/git-animation.ts +0 -0
  604. /package/scripts/{git → notify}/git-notify.ts +0 -0
  605. /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
@@ -66,6 +66,19 @@ import { existsSync, readFileSync } from "node:fs";
66
66
  import { createRequire } from "node:module";
67
67
  import path from "node:path";
68
68
 
69
+ // scripts/lib/json-value.ts
70
+ function parse_or_undefined(text) {
71
+ try {
72
+ return JSON.parse(text);
73
+ } catch {
74
+ return void 0;
75
+ }
76
+ }
77
+ function is_record(value) {
78
+ return typeof value === "object" && value !== null && !Array.isArray(value);
79
+ }
80
+ var json_value = { parse_or_undefined, is_record };
81
+
69
82
  // scripts/lib/schemas.ts
70
83
  import { z } from "zod";
71
84
  var overrides_snapshot_schema = z.record(z.string(), z.string());
@@ -98,22 +111,13 @@ var json_object_schema = z.record(z.string(), z.unknown());
98
111
  var string_array_schema = z.array(z.string());
99
112
  var string_record_schema = z.record(z.string(), z.string());
100
113
 
101
- // scripts/version/parse-json.ts
102
- function safe_json_parse(raw) {
103
- try {
104
- return JSON.parse(raw);
105
- } catch {
106
- return void 0;
107
- }
108
- }
109
-
110
114
  // scripts/version/effective-upstream.ts
111
115
  var PACKAGE_JSON = "package.json";
112
116
  var MAX_WALK_DEPTH = 64;
113
117
  function read_matching_version(manifest_path, package_name) {
114
118
  if (!existsSync(manifest_path)) return void 0;
115
119
  const parsed = package_named_version_schema.safeParse(
116
- safe_json_parse(readFileSync(manifest_path, "utf8"))
120
+ json_value.parse_or_undefined(readFileSync(manifest_path, "utf8"))
117
121
  );
118
122
  if (!parsed.success) return void 0;
119
123
  if (parsed.data.name !== package_name) return void 0;
@@ -151,7 +155,7 @@ function resolve_effective_upstream_version(base_url, package_name, options = {}
151
155
  }
152
156
 
153
157
  // scripts/version/version-commands.ts
154
- import { execaSync as execaSync3 } from "execa";
158
+ import { execaSync as execaSync4 } from "execa";
155
159
 
156
160
  // scripts/version/release-age.ts
157
161
  import { readFileSync as readFileSync2 } from "node:fs";
@@ -258,13 +262,9 @@ function build_release_hold_notes(version, latest, installable, minimum_age_minu
258
262
  return [format_release_hold_note(version, latest, installable, minimum_age_minutes)];
259
263
  }
260
264
  var release_hold = {
261
- HOLD_LABEL,
262
- is_at_or_above,
263
- is_latest_withheld,
264
265
  resolve_installable,
265
266
  is_release_age_hold,
266
267
  format_window,
267
- format_release_hold_note,
268
268
  build_release_hold_notes
269
269
  };
270
270
 
@@ -283,7 +283,7 @@ function read_running_version(self_directory) {
283
283
  const package_path = resolve_self_package_path(self_directory);
284
284
  if (!existsSync2(package_path)) return void 0;
285
285
  const parsed = package_version_schema.safeParse(
286
- safe_json_parse(readFileSync3(package_path, "utf8"))
286
+ json_value.parse_or_undefined(readFileSync3(package_path, "utf8"))
287
287
  );
288
288
  return parsed.success ? parsed.data.version : void 0;
289
289
  }
@@ -463,19 +463,23 @@ var version_check_logic = {
463
463
  format_dual_version_output,
464
464
  format_running_line,
465
465
  format_upstream_lines,
466
- format_upstream_global_line,
467
466
  build_dual_upgrade_commands,
468
467
  build_upstream_upgrade_commands,
469
468
  build_upstream_upgrade_notes,
470
469
  build_effective_upgrade_commands,
471
470
  build_effective_upgrade_notes,
472
- build_project_upgrade_commands,
473
471
  format_update_command,
474
472
  format_effective_outcome,
475
473
  build_upgrade_shell_command,
476
474
  unique_upgrade_commands
477
475
  };
478
476
 
477
+ // scripts/git/git-execa-error.ts
478
+ function has_timed_out(error) {
479
+ if (typeof error !== "object" || error === null || !("timedOut" in error)) return false;
480
+ return error.timedOut === true;
481
+ }
482
+
479
483
  // scripts/josh/agent-session-environment.ts
480
484
  var SESSION_ID_KEY = "CLAUDE_CODE_SESSION_ID";
481
485
  var PARENT_SESSION_KEYS = [
@@ -563,22 +567,19 @@ function message_of(error) {
563
567
  }
564
568
  var error_text = { message_of };
565
569
 
566
- // scripts/git/git-gh-exec.ts
570
+ // scripts/gh/git-gh-exec.ts
567
571
  import { execa as execa2, execaSync } from "execa";
568
572
 
569
- // scripts/git/git-execa-error.ts
570
- function has_timed_out(error) {
571
- if (typeof error !== "object" || error === null || !("timedOut" in error)) return false;
572
- return error.timedOut === true;
573
- }
573
+ // scripts/lib/timeouts.ts
574
+ var COMMAND_TIMEOUT_MS = 3e4;
574
575
 
575
- // scripts/git/git-gh-check.ts
576
+ // scripts/gh/git-gh-check.ts
576
577
  import { execa } from "execa";
577
578
  var GH_NOT_INSTALLED_MSG = "gh CLI is not installed. Install it from https://cli.github.com/";
578
579
  var gh_check = {};
579
580
  async function run_gh_check() {
580
581
  try {
581
- await execa("gh", ["--version"]);
582
+ await execa("gh", ["--version"], { timeout: COMMAND_TIMEOUT_MS });
582
583
  } catch {
583
584
  delete gh_check.promise;
584
585
  throw new Error(GH_NOT_INSTALLED_MSG);
@@ -589,9 +590,6 @@ async function check_gh_installed() {
589
590
  await gh_check.promise;
590
591
  }
591
592
 
592
- // scripts/git/git-gh-failure.ts
593
- import { z as z3 } from "zod";
594
-
595
593
  // scripts/git/parse-json-array.ts
596
594
  var MALFORMED_JSON = /* @__PURE__ */ Symbol("malformed-json");
597
595
  function parse_json_loose(raw_json) {
@@ -602,37 +600,17 @@ function parse_json_loose(raw_json) {
602
600
  throw error;
603
601
  }
604
602
  }
605
- function parse_json_array_or_undefined(raw_json, element_schema) {
606
- const value = parse_json_loose(raw_json);
607
- if (value === MALFORMED_JSON || !Array.isArray(value)) return void 0;
608
- return element_schema.array().parse(value);
609
- }
610
- function read_json_listing(raw_json, element_schema) {
611
- try {
612
- const rows = parse_json_array_or_undefined(raw_json, element_schema);
613
- return rows === void 0 ? { kind: "unreadable" } : { kind: "read", rows };
614
- } catch {
615
- return { kind: "unexpected_shape" };
616
- }
617
- }
618
- function parse_json_array_safe(raw_json, element_schema) {
619
- const value = parse_json_loose(raw_json);
620
- if (value === MALFORMED_JSON) return [];
621
- return element_schema.array().parse(value);
622
- }
623
603
  function parse_json_object_safe(raw_json, schema) {
624
604
  const value = parse_json_loose(raw_json);
625
605
  if (value === MALFORMED_JSON) return void 0;
626
606
  return schema.parse(value);
627
607
  }
628
608
  var parse_json = {
629
- parse_json_array_safe,
630
- parse_json_array_or_undefined,
631
- parse_json_object_safe,
632
- read_json_listing
609
+ parse_json_object_safe
633
610
  };
634
611
 
635
- // scripts/git/git-gh-failure.ts
612
+ // scripts/gh/git-gh-failure.ts
613
+ import { z as z3 } from "zod";
636
614
  var error_document_schema = z3.object({ status: z3.union([z3.string(), z3.number()]).optional() }).catch({});
637
615
  var GH_FAILURE_FIELD = "gh_failure";
638
616
  function has_gh_failure(error) {
@@ -660,7 +638,7 @@ function failure_of(error) {
660
638
  }
661
639
  var gh_failure = { attach, classify_stdout, failure_of, parse_response_status };
662
640
 
663
- // scripts/git/git-gh-exec.ts
641
+ // scripts/gh/git-gh-exec.ts
664
642
  var BODY_FROM_STDIN = "-";
665
643
  var GH_REQUEST_TIMEOUT_MS = 6e4;
666
644
  function to_timeout_option(timeout_ms) {
@@ -808,6 +786,371 @@ var git_gh_exec = {
808
786
  parse_status_line
809
787
  };
810
788
 
789
+ // scripts/gh/fix-gh-packages-logic.ts
790
+ import { loadAll } from "js-yaml";
791
+ import { z as z4 } from "zod";
792
+ var GH_PACKAGES_HOST = "npm.pkg.github.com";
793
+ var RESOLUTION_BLOCK = "\n resolution:\n";
794
+ var INTEGRITY_PREFIX = " integrity: ";
795
+ var TARBALL_PREFIX = " tarball: ";
796
+ var FLOW_RESOLUTION_LINE_START = "\n resolution: {";
797
+ var FLOW_TARBALL_KEY = ", tarball: ";
798
+ var NPMRC_AUTH_TOKEN_PREFIX = `//${GH_PACKAGES_HOST}/:_authToken=`;
799
+ var REGISTRY_KEY = ":registry=";
800
+ var lockfile_resolution_schema = z4.looseObject({
801
+ integrity: z4.string().optional(),
802
+ tarball: z4.string().optional()
803
+ });
804
+ var lockfile_package_schema = z4.looseObject({
805
+ resolution: lockfile_resolution_schema.optional()
806
+ });
807
+ var lockfile_document_schema = z4.looseObject({
808
+ packages: z4.record(z4.string(), lockfile_package_schema).optional()
809
+ });
810
+ function parse_lockfile_packages(raw) {
811
+ const merged = {};
812
+ for (const document of loadAll(raw)) {
813
+ const { packages } = lockfile_document_schema.parse(document);
814
+ if (packages !== void 0) Object.assign(merged, packages);
815
+ }
816
+ return merged;
817
+ }
818
+ function extract_gh_registry_scope(line) {
819
+ const trimmed = line.trim();
820
+ if (!trimmed.startsWith("@")) return void 0;
821
+ const eq_index = trimmed.indexOf(REGISTRY_KEY);
822
+ if (eq_index === -1) return void 0;
823
+ const registry = trimmed.slice(eq_index + REGISTRY_KEY.length).trim().replace(/\/$/u, "");
824
+ if (registry !== `https://${GH_PACKAGES_HOST}`) return void 0;
825
+ return trimmed.slice(0, eq_index);
826
+ }
827
+ function parse_gh_scopes(npmrc) {
828
+ const scopes = /* @__PURE__ */ new Set();
829
+ for (const line of npmrc.split("\n")) {
830
+ const scope = extract_gh_registry_scope(line);
831
+ if (scope !== void 0) scopes.add(scope);
832
+ }
833
+ return scopes;
834
+ }
835
+ function extract_auth_token_from_line(line) {
836
+ const trimmed = line.trim();
837
+ if (!trimmed.startsWith(NPMRC_AUTH_TOKEN_PREFIX)) return void 0;
838
+ const value = trimmed.slice(NPMRC_AUTH_TOKEN_PREFIX.length);
839
+ if (value.startsWith("${") || value.length === 0) return void 0;
840
+ return value;
841
+ }
842
+ function parse_npmrc_auth_token(npmrc) {
843
+ for (const line of npmrc.split("\n")) {
844
+ const token = extract_auth_token_from_line(line);
845
+ if (token !== void 0) return token;
846
+ }
847
+ return void 0;
848
+ }
849
+ function scope_from_key(key) {
850
+ return key.startsWith("@") ? key.split("/", 1)[0] ?? "" : "";
851
+ }
852
+ function has_tarball(entry) {
853
+ return entry.resolution?.tarball !== void 0;
854
+ }
855
+ function package_path_from_key(key) {
856
+ const start = key.startsWith("@") ? 1 : 0;
857
+ const at_index = key.indexOf("@", start);
858
+ return at_index === -1 ? key : key.slice(0, at_index);
859
+ }
860
+ function package_version_from_key(key) {
861
+ const start = key.startsWith("@") ? 1 : 0;
862
+ const at_index = key.indexOf("@", start);
863
+ if (at_index === -1) return "";
864
+ return key.slice(at_index + 1).split("(", 1)[0] ?? "";
865
+ }
866
+ function should_fix_tarball(key, entry, scopes) {
867
+ if (has_tarball(entry)) return false;
868
+ const scope = scope_from_key(key);
869
+ return scope.length > 0 && scopes.has(scope);
870
+ }
871
+ function find_entry_start(content, package_key) {
872
+ const single = content.indexOf(`
873
+ '${package_key}':
874
+ `);
875
+ if (single !== -1) return single;
876
+ return content.indexOf(`
877
+ "${package_key}":
878
+ `);
879
+ }
880
+ function find_entry_end(content, entry_start) {
881
+ const next_match = /\n {2}['"]/u.exec(content.slice(entry_start + 1));
882
+ return next_match === null ? content.length : entry_start + 1 + next_match.index;
883
+ }
884
+ function find_integrity_eol_in_entry(entry_content) {
885
+ const resolution_pos = entry_content.indexOf(RESOLUTION_BLOCK);
886
+ if (resolution_pos === -1) return -1;
887
+ const integrity_pos = entry_content.indexOf(INTEGRITY_PREFIX, resolution_pos);
888
+ if (integrity_pos === -1) return -1;
889
+ return entry_content.indexOf("\n", integrity_pos);
890
+ }
891
+ function find_flow_resolution_brace(entry_content) {
892
+ const pos = entry_content.indexOf(FLOW_RESOLUTION_LINE_START);
893
+ if (pos === -1) return -1;
894
+ const line_end = entry_content.indexOf("\n", pos + 1);
895
+ const search_end = line_end === -1 ? entry_content.length : line_end;
896
+ const brace = entry_content.lastIndexOf("}", search_end);
897
+ if (brace <= pos) return -1;
898
+ return brace;
899
+ }
900
+ function insert_expanded_tarball(content, entry_start, entry_end, tarball) {
901
+ const entry_content = content.slice(entry_start, entry_end);
902
+ const integrity_eol = find_integrity_eol_in_entry(entry_content);
903
+ if (integrity_eol === -1) return void 0;
904
+ if (entry_content.slice(integrity_eol + 1).startsWith(TARBALL_PREFIX)) return content;
905
+ const patched = `${entry_content.slice(0, integrity_eol + 1)}${TARBALL_PREFIX}${tarball}
906
+ ${entry_content.slice(integrity_eol + 1)}`;
907
+ return content.slice(0, entry_start) + patched + content.slice(entry_end);
908
+ }
909
+ function insert_flow_tarball(content, entry_start, entry_end, tarball) {
910
+ const entry_content = content.slice(entry_start, entry_end);
911
+ const brace_pos = find_flow_resolution_brace(entry_content);
912
+ if (brace_pos === -1) return void 0;
913
+ const open_brace = entry_content.lastIndexOf("{", brace_pos);
914
+ if (open_brace === -1) return void 0;
915
+ const flow_body = entry_content.slice(open_brace + 1, brace_pos);
916
+ if (/\btarball\s*:/u.test(flow_body)) return content;
917
+ const patched = `${entry_content.slice(0, brace_pos)}${FLOW_TARBALL_KEY}${tarball}${entry_content.slice(brace_pos)}`;
918
+ return content.slice(0, entry_start) + patched + content.slice(entry_end);
919
+ }
920
+ function insert_tarball_for_key(content, package_key, tarball) {
921
+ const entry_start = find_entry_start(content, package_key);
922
+ if (entry_start === -1) return content;
923
+ const entry_end = find_entry_end(content, entry_start);
924
+ return insert_expanded_tarball(content, entry_start, entry_end, tarball) ?? insert_flow_tarball(content, entry_start, entry_end, tarball) ?? content;
925
+ }
926
+ function patch_lockfile(content, patches) {
927
+ let result = content;
928
+ for (const [key, tarball] of patches) {
929
+ result = insert_tarball_for_key(result, key, tarball);
930
+ }
931
+ return result;
932
+ }
933
+ function resolve_token(environment_token, npmrc_token, get_fallback_token) {
934
+ if (environment_token !== void 0 && environment_token.length > 0) return environment_token;
935
+ if (npmrc_token !== void 0) return npmrc_token;
936
+ return get_fallback_token();
937
+ }
938
+ var fix_gh_packages_logic = {
939
+ parse_gh_scopes,
940
+ parse_npmrc_auth_token,
941
+ parse_lockfile_packages,
942
+ package_path_from_key,
943
+ package_version_from_key,
944
+ needs_tarball_fix: should_fix_tarball,
945
+ insert_tarball_for_key,
946
+ patch_lockfile,
947
+ resolve_token
948
+ };
949
+
950
+ // scripts/registry-migration/migrate-logic.ts
951
+ var SCOPE = "@joshuafolkken";
952
+ var REGISTRY_KEY2 = `${SCOPE}:registry`;
953
+ var PUBLIC_REGISTRY = "https://registry.npmjs.org/";
954
+ var GITHUB_REGISTRY = "https://npm.pkg.github.com/";
955
+ var MAPPING = `${REGISTRY_KEY2}=${PUBLIC_REGISTRY}`;
956
+ var REGISTRY_VALUE_INDEX = 1;
957
+ var SPLIT_LIMIT = 2;
958
+ function normalized_registry(value) {
959
+ let normalized = value.trim();
960
+ while (normalized.endsWith("/")) normalized = normalized.slice(0, -1);
961
+ return `${normalized}/`;
962
+ }
963
+ function mapping_lines(content) {
964
+ return content.split(/\r?\n/u).filter((line) => line.trimStart().startsWith(`${REGISTRY_KEY2}=`));
965
+ }
966
+ function registry_of(content) {
967
+ const lines = mapping_lines(content);
968
+ if (lines.length !== 1) return void 0;
969
+ return normalized_registry(lines[0]?.split("=", SPLIT_LIMIT)[REGISTRY_VALUE_INDEX] ?? "");
970
+ }
971
+ function scoped_packages(lockfile) {
972
+ const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile);
973
+ return Object.keys(packages).filter((key) => key.startsWith(`${SCOPE}/`)).map((key) => fix_gh_packages_logic.package_path_from_key(key)).filter((name, index, names) => names.indexOf(name) === index);
974
+ }
975
+ function scoped_versions(lockfile) {
976
+ const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile);
977
+ return Object.keys(packages).filter((key) => key.startsWith(`${SCOPE}/`)).map(
978
+ (key) => [
979
+ fix_gh_packages_logic.package_path_from_key(key),
980
+ fix_gh_packages_logic.package_version_from_key(key)
981
+ ]
982
+ );
983
+ }
984
+ function is_github_tarball(value) {
985
+ try {
986
+ const url = new URL(value);
987
+ return url.protocol === "https:" && url.hostname === "npm.pkg.github.com";
988
+ } catch {
989
+ return false;
990
+ }
991
+ }
992
+ function github_tarballs(lockfile) {
993
+ const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile);
994
+ return Object.entries(packages).filter(
995
+ ([key, entry]) => key.startsWith(`${SCOPE}/`) && entry.resolution?.tarball !== void 0 && is_github_tarball(entry.resolution.tarball)
996
+ ).map(([key]) => key);
997
+ }
998
+ function remove_flow_tarball(line) {
999
+ const marker = ", tarball: https://npm.pkg.github.com/";
1000
+ const start = line.indexOf(marker);
1001
+ if (start === -1) return line;
1002
+ const end = line.indexOf("}", start);
1003
+ if (end === -1) return line;
1004
+ return `${line.slice(0, start)}${line.slice(end)}`;
1005
+ }
1006
+ function is_package_entry(line) {
1007
+ return /^ {2}[^ ]/u.test(line);
1008
+ }
1009
+ function is_github_tarball_line(line) {
1010
+ return line.trimStart().startsWith("tarball: https://npm.pkg.github.com/");
1011
+ }
1012
+ function clean_kit_line(line, version, integrities) {
1013
+ if (!version) return line;
1014
+ if (is_github_tarball_line(line)) return void 0;
1015
+ const cleaned = remove_flow_tarball(line);
1016
+ const pair = integrities.get(version);
1017
+ if (pair === void 0) return cleaned;
1018
+ return cleaned.split(`integrity: ${pair[0]}`).join(`integrity: ${pair[1]}`);
1019
+ }
1020
+ function next_kit_version(line, version) {
1021
+ if (!is_package_entry(line)) return version;
1022
+ const prefix = " '@joshuafolkken/kit@";
1023
+ return line.startsWith(prefix) ? line.slice(prefix.length).split("'", 1)[0] ?? "" : "";
1024
+ }
1025
+ function integrity_pair(old_integrity, npm_integrity) {
1026
+ if (old_integrity === void 0 || npm_integrity === void 0) return void 0;
1027
+ return [old_integrity, npm_integrity];
1028
+ }
1029
+ function lock_integrities(lockfile, npm_integrities) {
1030
+ const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile);
1031
+ const pairs = /* @__PURE__ */ new Map();
1032
+ const kit_entries = Object.entries(packages).filter(([key]) => key.startsWith(`${SCOPE}/kit@`));
1033
+ for (const [key, entry] of kit_entries) {
1034
+ const version = fix_gh_packages_logic.package_version_from_key(key);
1035
+ const pair = integrity_pair(entry.resolution?.integrity, npm_integrities.get(version));
1036
+ if (pair !== void 0) pairs.set(version, pair);
1037
+ }
1038
+ return pairs;
1039
+ }
1040
+ function push_if_defined(lines, cleaned) {
1041
+ if (cleaned !== void 0) lines.push(cleaned);
1042
+ }
1043
+ function rewrite_kit_lockfile(lockfile, npm_integrities) {
1044
+ let kit_version = "";
1045
+ const lines = [];
1046
+ const integrities = lock_integrities(lockfile, npm_integrities);
1047
+ for (const line of lockfile.split("\n")) {
1048
+ kit_version = next_kit_version(line, kit_version);
1049
+ const cleaned = clean_kit_line(line, kit_version, integrities);
1050
+ push_if_defined(lines, cleaned);
1051
+ }
1052
+ return lines.join("\n");
1053
+ }
1054
+ function append_mapping(content, eol) {
1055
+ const separator = content && !content.endsWith("\n") ? eol : "";
1056
+ return `${content}${separator}${MAPPING}${eol}`;
1057
+ }
1058
+ function replace_mapping(content) {
1059
+ const lines = mapping_lines(content);
1060
+ const eol = content.includes("\r\n") ? "\r\n" : "\n";
1061
+ if (lines.length === 0) return append_mapping(content, eol);
1062
+ return content.split(/\r?\n/u).map((line) => line === lines[0] ? MAPPING : line).join(eol);
1063
+ }
1064
+ function unsupported_registry(project_npmrc) {
1065
+ const registry = registry_of(project_npmrc);
1066
+ if (registry === void 0 || [GITHUB_REGISTRY, PUBLIC_REGISTRY].includes(registry)) {
1067
+ return void 0;
1068
+ }
1069
+ return `unsupported project registry: ${registry}`;
1070
+ }
1071
+ function has_duplicate_mapping(project_npmrc, user_npmrc) {
1072
+ return mapping_lines(project_npmrc).length > 1 || mapping_lines(user_npmrc).length > 1;
1073
+ }
1074
+ function previous_registry(project_npmrc, user_npmrc) {
1075
+ return registry_of(project_npmrc) ?? registry_of(user_npmrc) ?? "default npm";
1076
+ }
1077
+ function plan(project_npmrc, user_npmrc, lockfile) {
1078
+ const packages = scoped_packages(lockfile);
1079
+ const blocked = packages.filter((name) => name !== `${SCOPE}/kit`);
1080
+ if (has_duplicate_mapping(project_npmrc, user_npmrc)) blocked.push("duplicate registry mappings");
1081
+ const unsupported = unsupported_registry(project_npmrc);
1082
+ if (unsupported !== void 0) blocked.push(unsupported);
1083
+ const before = previous_registry(project_npmrc, user_npmrc);
1084
+ const change = `${before} \u2192 ${PUBLIC_REGISTRY}`;
1085
+ return { content: replace_mapping(project_npmrc), packages, blocked, change };
1086
+ }
1087
+ var migrate_logic = {
1088
+ plan,
1089
+ github_tarballs,
1090
+ is_github_tarball,
1091
+ rewrite_kit_lockfile,
1092
+ scoped_versions
1093
+ };
1094
+
1095
+ // scripts/version/npm-registry.ts
1096
+ import { execaSync as execaSync2 } from "execa";
1097
+ import { z as z5 } from "zod";
1098
+ var PUBLIC_REGISTRY2 = "https://registry.npmjs.org";
1099
+ var ABBREVIATED_ACCEPT = "application/vnd.npm.install-v1+json";
1100
+ var FULL_ACCEPT = "application/json";
1101
+ var REQUEST_TIMEOUT_MS = 1e4;
1102
+ var SCOPE_SEPARATOR = "/";
1103
+ var ENCODED_SCOPE_SEPARATOR = "%2f";
1104
+ var SCOPE_PATTERN = /^@[^/]+(?=\/)/u;
1105
+ var SCOPE_REGISTRY_SUFFIX = ":registry";
1106
+ var github_scopes = /* @__PURE__ */ new Map();
1107
+ var FETCH_SCRIPT = [
1108
+ "const [url, accept] = process.argv.slice(1)",
1109
+ "const response = await fetch(url, { headers: { accept } })",
1110
+ "if (!response.ok) process.exit(1)",
1111
+ "process.stdout.write(await response.text())"
1112
+ ].join("\n");
1113
+ var latest_schema = z5.looseObject({ "dist-tags": z5.looseObject({ latest: z5.string() }) });
1114
+ var times_schema = z5.looseObject({ time: release_age.release_times_schema });
1115
+ function packument_url(package_name) {
1116
+ return `${PUBLIC_REGISTRY2}/${package_name.replace(SCOPE_SEPARATOR, () => ENCODED_SCOPE_SEPARATOR)}`;
1117
+ }
1118
+ function read_packument(package_name, accept) {
1119
+ const result = execaSync2(
1120
+ process.execPath,
1121
+ ["--input-type=module", "-e", FETCH_SCRIPT, packument_url(package_name), accept],
1122
+ { reject: false, timeout: REQUEST_TIMEOUT_MS }
1123
+ );
1124
+ if (result.exitCode !== 0) return void 0;
1125
+ return json_value.parse_or_undefined(result.stdout);
1126
+ }
1127
+ function is_github_scope(scope) {
1128
+ const is_cached_github = github_scopes.get(scope);
1129
+ if (is_cached_github !== void 0) return is_cached_github;
1130
+ const result = execaSync2("pnpm", ["config", "get", `${scope}${SCOPE_REGISTRY_SUFFIX}`], {
1131
+ reject: false,
1132
+ timeout: REQUEST_TIMEOUT_MS
1133
+ });
1134
+ const is_github = result.exitCode === 0 && migrate_logic.is_github_tarball(result.stdout.trim());
1135
+ github_scopes.set(scope, is_github);
1136
+ return is_github;
1137
+ }
1138
+ function is_public_source(package_name) {
1139
+ const scope = SCOPE_PATTERN.exec(package_name)?.[0];
1140
+ return scope === void 0 || !is_github_scope(scope);
1141
+ }
1142
+ function read_latest(package_name) {
1143
+ if (!is_public_source(package_name)) return void 0;
1144
+ const parsed = latest_schema.safeParse(read_packument(package_name, ABBREVIATED_ACCEPT));
1145
+ return parsed.success ? parsed.data["dist-tags"].latest : void 0;
1146
+ }
1147
+ function read_release_times(package_name) {
1148
+ if (!is_public_source(package_name)) return void 0;
1149
+ const parsed = times_schema.safeParse(read_packument(package_name, FULL_ACCEPT));
1150
+ return parsed.success ? parsed.data.time : void 0;
1151
+ }
1152
+ var npm_registry = { packument_url, read_latest, read_release_times };
1153
+
811
1154
  // scripts/version/version-remote.ts
812
1155
  var TIMES_PAGE_SIZE = 100;
813
1156
  var TIMES_JQ = "[.[] | {(.name): .created_at}] | add";
@@ -819,6 +1162,8 @@ function require_endpoint(versions_endpoint, package_name) {
819
1162
  }
820
1163
  function fetch_latest_version(versions_endpoint, package_name) {
821
1164
  const endpoint = require_endpoint(versions_endpoint, package_name);
1165
+ const public_latest = npm_registry.read_latest(package_name);
1166
+ if (public_latest !== void 0) return public_latest;
822
1167
  try {
823
1168
  return git_gh_exec.exec_gh_api_sync({ path: endpoint, jq_filter: ".[0].name" }).trim();
824
1169
  } catch (error) {
@@ -838,14 +1183,17 @@ function with_page_size(endpoint, page_size) {
838
1183
  query.set("per_page", String(page_size));
839
1184
  return `${path_part}?${query.toString()}`;
840
1185
  }
841
- function fetch_release_times(versions_endpoint) {
842
- if (versions_endpoint === void 0 || versions_endpoint.trim() === "") return void 0;
1186
+ function read_github_release_times(versions_endpoint) {
843
1187
  const endpoint = with_page_size(versions_endpoint, TIMES_PAGE_SIZE);
844
1188
  const stdout = git_gh_exec.read_gh_api_sync({ path: endpoint, jq_filter: TIMES_JQ });
845
1189
  if (stdout === void 0) return void 0;
846
- const parsed = release_age.release_times_schema.safeParse(safe_json_parse(stdout));
1190
+ const parsed = release_age.release_times_schema.safeParse(json_value.parse_or_undefined(stdout));
847
1191
  return parsed.success ? parsed.data : void 0;
848
1192
  }
1193
+ function fetch_release_times(versions_endpoint, package_name) {
1194
+ if (versions_endpoint === void 0 || versions_endpoint.trim() === "") return void 0;
1195
+ return npm_registry.read_release_times(package_name) ?? read_github_release_times(versions_endpoint);
1196
+ }
849
1197
 
850
1198
  // scripts/version/version-targets.ts
851
1199
  import path4 from "node:path";
@@ -877,24 +1225,24 @@ function read_if_readable(path5) {
877
1225
  var file_reader = { read_optional, read_file_or_empty, read_if_readable };
878
1226
 
879
1227
  // scripts/version/version-targets.ts
880
- import { execaSync as execaSync2 } from "execa";
1228
+ import { execaSync as execaSync3 } from "execa";
881
1229
  var NODE_MODULES2 = "node_modules";
882
1230
  var PACKAGE_JSON3 = "package.json";
883
1231
  function build_pnpm_ls_arguments(package_name) {
884
1232
  return ["ls", "-g", "--json", package_name];
885
1233
  }
886
1234
  function parse_global_version(stdout, package_name) {
887
- const parsed = pnpm_ls_global_schema.safeParse(safe_json_parse(stdout));
1235
+ const parsed = pnpm_ls_global_schema.safeParse(json_value.parse_or_undefined(stdout));
888
1236
  if (!parsed.success) return void 0;
889
1237
  return parsed.data[0]?.dependencies?.[package_name]?.version;
890
1238
  }
891
1239
  function parse_project_version(raw) {
892
1240
  if (raw === void 0) return void 0;
893
- const parsed = package_version_schema.safeParse(safe_json_parse(raw));
1241
+ const parsed = package_version_schema.safeParse(json_value.parse_or_undefined(raw));
894
1242
  return parsed.success ? parsed.data.version : void 0;
895
1243
  }
896
1244
  function read_global_version(package_name) {
897
- const result = execaSync2("pnpm", build_pnpm_ls_arguments(package_name), { reject: false });
1245
+ const result = execaSync3("pnpm", build_pnpm_ls_arguments(package_name), { reject: false });
898
1246
  return parse_global_version(result.stdout, package_name);
899
1247
  }
900
1248
  function project_package_path(cwd, package_name) {
@@ -928,12 +1276,12 @@ var version_targets = {
928
1276
  var FAILURE_EXIT_CODE = 1;
929
1277
  var ALREADY_UP_TO_DATE = "Already up to date";
930
1278
  var NO_QUARANTINE_MINUTES2 = 0;
931
- function read_release_hold(versions_endpoint, latest, versions) {
1279
+ function read_release_hold(package_config, latest, versions) {
932
1280
  if (versions.every((version) => version === void 0 || version === latest)) return void 0;
933
1281
  const minimum_age_minutes = release_age.read_nearest_minimum_release_age(process.cwd());
934
1282
  if (minimum_age_minutes <= NO_QUARANTINE_MINUTES2) return void 0;
935
1283
  const installable = release_hold.resolve_installable(
936
- fetch_release_times(versions_endpoint),
1284
+ fetch_release_times(package_config.versions_endpoint, package_config.package_name),
937
1285
  latest,
938
1286
  minimum_age_minutes,
939
1287
  Date.now()
@@ -990,7 +1338,7 @@ function read_upstream_report(upstream, config, snapshot, is_hold_wanted) {
990
1338
  const project_version = version_targets.read_project_version(process.cwd(), upstream.package_name);
991
1339
  const report = { config: upstream, project_version, latest };
992
1340
  attach_upstream_effective(report, config, snapshot, upstream);
993
- const hold = is_hold_wanted ? read_release_hold(upstream.versions_endpoint, latest, [report.effective?.version]) : void 0;
1341
+ const hold = is_hold_wanted ? read_release_hold(upstream, latest, [report.effective?.version]) : void 0;
994
1342
  if (hold !== void 0) report.hold = hold;
995
1343
  return report;
996
1344
  }
@@ -1012,7 +1360,7 @@ function run_check(config) {
1012
1360
  );
1013
1361
  }
1014
1362
  function run_upgrade_command(command) {
1015
- const result = execaSync3("sh", ["-c", command], { stdio: "inherit", reject: false });
1363
+ const result = execaSync4("sh", ["-c", command], { stdio: "inherit", reject: false });
1016
1364
  return result.exitCode ?? FAILURE_EXIT_CODE;
1017
1365
  }
1018
1366
  function run_all_upgrade_commands(commands) {
@@ -5,6 +5,11 @@ export const promise_rules = {
5
5
  'promise/param-names': 'error',
6
6
  'promise/no-nesting': 'error',
7
7
 
8
+ // ループ内で 1 つずつ await すると、独立した処理まで直列になる。Sonar の S9382 と同じ指摘を
9
+ // ローカルのゲートで先に出す。ポーリングや順序が意味を持つ処理など意図的な逐次は、
10
+ // `// eslint-disable-next-line no-await-in-loop -- <理由>` で理由を残して抑止する。
11
+ 'no-await-in-loop': 'error',
12
+
8
13
  // `promise-function-async` を有効にしている以上、`require-await` は同時に満たせない。
9
14
  // Promise を返す契約の関数(execa モックなど)は async である必要がある一方、
10
15
  // 実際に await する対象を持たないため `require-await` が必ず発火する。