@joshuafolkken/kit 1.1514.0 → 1.2114.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 (1176) hide show
  1. package/.claude/agents/investigator.md +1 -1
  2. package/.claude/agents/reviewer-verification.md +19 -0
  3. package/.claude/agents/reviewer.md +19 -0
  4. package/.claude/settings.json +5 -6
  5. package/.claude/skills/dependency-update/SKILL.md +9 -10
  6. package/.claude/skills/epic-commands/SKILL.md +26 -65
  7. package/.claude/skills/epic-commands/epic-bundle.md +3 -1
  8. package/.claude/skills/workflow-commands/SKILL.md +11 -11
  9. package/.claude/skills/workflow-commands/background-commands.md +13 -10
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
  17. package/.claude/skills/workflow-commands/backlogrun.md +1 -1
  18. package/.claude/skills/workflow-commands/chain-rule.md +43 -28
  19. package/.claude/skills/workflow-commands/delegation.md +11 -10
  20. package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
  21. package/.claude/skills/workflow-commands/followup.md +16 -36
  22. package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
  23. package/.claude/skills/workflow-commands/fullrun.md +3 -3
  24. package/.claude/skills/workflow-commands/halfrun.md +17 -25
  25. package/.claude/skills/workflow-commands/issue-comments.md +25 -16
  26. package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
  27. package/.claude/skills/workflow-commands/issue-scout.md +2 -2
  28. package/.claude/skills/workflow-commands/kickoff.md +24 -23
  29. package/.claude/skills/workflow-commands/latest-gate.md +7 -12
  30. package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
  31. package/.claude/skills/workflow-commands/observation-filing.md +4 -36
  32. package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
  33. package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
  34. package/.claude/skills/workflow-commands/prerequisite.md +11 -16
  35. package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
  36. package/.claude/skills/workflow-commands/prrun.md +3 -7
  37. package/.claude/skills/workflow-commands/retrospective.md +2 -2
  38. package/.claude/skills/workflow-commands/split-assessment.md +15 -1
  39. package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
  40. package/.codex/hooks.json +5 -5
  41. package/.github/actions/setup-node/action.yml +9 -0
  42. package/.github/actions/setup-pnpm/action.yml +10 -17
  43. package/.github/dependabot.yml +32 -0
  44. package/.github/release.yml +0 -2
  45. package/.github/workflows/auto-tag.yml +45 -0
  46. package/.github/workflows/ci.yml +267 -17
  47. package/.github/workflows/dependabot-auto-merge.yml +63 -4
  48. package/.github/workflows/production.yml +8 -0
  49. package/.github/workflows/publish.yml +67 -46
  50. package/.github/workflows/sonar-qube.yml +1 -0
  51. package/.prettierignore +2 -0
  52. package/.vscode/settings.json +19 -0
  53. package/.vscode/tasks.json +1 -2
  54. package/CLAUDE.md +7 -18
  55. package/README.md +4 -2
  56. package/SECURITY.md +3 -3
  57. package/dist/CLAUDE.md +7 -18
  58. package/dist/commands/document-read-cli.js +883 -0
  59. package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
  60. package/dist/commands/read-set-cli.js +1927 -0
  61. package/dist/commands/run-prep-main.js +21174 -0
  62. package/dist/commands/run-step-cli.js +27733 -0
  63. package/dist/config-merge/index.js +5 -1
  64. package/dist/hooks/audit-provision.js +39 -36
  65. package/dist/hooks/chunk-3GKE653K.js +6204 -0
  66. package/dist/hooks/chunk-45CJJOO7.js +1243 -0
  67. package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
  68. package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
  69. package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
  70. package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
  71. package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
  72. package/dist/hooks/chunk-VVNYJWEI.js +30 -0
  73. package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
  74. package/dist/hooks/codex-hook-adapter.js +10 -22
  75. package/dist/hooks/format-edited.js +4 -6
  76. package/dist/hooks/inputs.json +460 -308
  77. package/dist/hooks/pretool-guard.js +8 -25
  78. package/dist/hooks/session-lang.js +135 -299
  79. package/dist/hooks/stop-guard.js +6496 -1799
  80. package/dist/josh.js +7412 -4228
  81. package/dist/self-sync-guard/index.js +74 -10
  82. package/dist/version/index.js +276 -407
  83. package/eslint/base.js +1 -1
  84. package/eslint/rules/comment-why-only.js +108 -0
  85. package/lefthook/base.yml +3 -1
  86. package/package.json +23 -54
  87. package/pnpm-workspace.yaml +4 -2
  88. package/prompts/coding-standards.md +2 -2
  89. package/prompts/collaboration-workflow/file-edits.md +14 -17
  90. package/prompts/collaboration-workflow/issue-citation.md +0 -4
  91. package/prompts/collaboration-workflow/issue-template.md +54 -18
  92. package/prompts/collaboration-workflow/lane-instructions.md +3 -2
  93. package/prompts/collaboration-workflow/measurement.md +44 -0
  94. package/prompts/collaboration-workflow/operating-rules.md +15 -8
  95. package/prompts/collaboration-workflow/output-bounds.md +6 -7
  96. package/prompts/collaboration-workflow/plan-comment.md +3 -42
  97. package/prompts/collaboration-workflow/principles.md +14 -0
  98. package/prompts/collaboration-workflow/report-format.md +31 -60
  99. package/prompts/collaboration-workflow/residency.md +3 -2
  100. package/prompts/collaboration-workflow/rule-delivery.md +13 -1
  101. package/prompts/collaboration-workflow/shell-body.md +6 -16
  102. package/prompts/collaboration-workflow/turn-batching.md +0 -2
  103. package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
  104. package/prompts/collaboration-workflow/wip-cap.md +4 -2
  105. package/prompts/collaboration-workflow.md +3 -7
  106. package/prompts/refactoring.md +1 -1
  107. package/prompts/review-rubric.md +9 -2
  108. package/prompts/review.md +65 -36
  109. package/prompts/testing-guide.md +9 -43
  110. package/scripts/agent/agent-argv.ts +14 -16
  111. package/scripts/agent/agent-event.ts +15 -15
  112. package/scripts/agent/agent-exit-record.ts +13 -1
  113. package/scripts/agent/agent-provider.ts +138 -0
  114. package/scripts/agent/agent-role-profile.ts +108 -156
  115. package/scripts/agent/agent-safe-text.ts +20 -5
  116. package/scripts/agent/api-auth.ts +41 -0
  117. package/scripts/agent/api-outage.ts +1 -1
  118. package/scripts/agent/api-usage-limit.ts +65 -0
  119. package/scripts/agent/claude-agent-argv.ts +19 -9
  120. package/scripts/agent/codex-agent-argv.ts +118 -22
  121. package/scripts/agent/usage-limit-reset.ts +179 -0
  122. package/scripts/auth/claude-token-output.ts +2 -2
  123. package/scripts/auto-ok/auto-ok-author.ts +53 -0
  124. package/scripts/auto-ok/auto-ok-cli.ts +25 -16
  125. package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
  126. package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
  127. package/scripts/auto-ok/auto-ok-judge.ts +13 -2
  128. package/scripts/auto-ok/auto-ok-main.ts +17 -0
  129. package/scripts/backlog/backlog-arrival.ts +14 -3
  130. package/scripts/backlog/backlog-budget-cli.ts +7 -33
  131. package/scripts/backlog/backlog-budget-main.ts +16 -0
  132. package/scripts/backlog/backlog-budget.ts +2 -3
  133. package/scripts/backlog/backlog-defect-priority.ts +5 -4
  134. package/scripts/backlog/backlog-drive-adopt.ts +67 -0
  135. package/scripts/backlog/backlog-drive-args.ts +4 -5
  136. package/scripts/backlog/backlog-drive-cli.ts +118 -28
  137. package/scripts/backlog/backlog-drive-hold.ts +162 -0
  138. package/scripts/backlog/backlog-drive-idle.ts +161 -0
  139. package/scripts/backlog/backlog-drive-judge.ts +25 -0
  140. package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
  141. package/scripts/backlog/backlog-drive-launch.ts +8 -2
  142. package/scripts/backlog/backlog-drive-memory.ts +126 -0
  143. package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
  144. package/scripts/backlog/backlog-drive-named.ts +81 -13
  145. package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
  146. package/scripts/backlog/backlog-drive-paused.ts +170 -0
  147. package/scripts/backlog/backlog-drive-restore.ts +39 -8
  148. package/scripts/backlog/backlog-drive-seats.ts +18 -8
  149. package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
  150. package/scripts/backlog/backlog-drive.ts +96 -131
  151. package/scripts/backlog/backlog-gate-scope.ts +61 -0
  152. package/scripts/backlog/backlog-measure-close.ts +112 -0
  153. package/scripts/backlog/backlog-next-main.ts +16 -0
  154. package/scripts/backlog/backlog-next-shared.ts +73 -0
  155. package/scripts/backlog/backlog-next.ts +78 -56
  156. package/scripts/backlog/backlog-occupied.ts +52 -39
  157. package/scripts/backlog/backlog-offer-cli.ts +6 -21
  158. package/scripts/backlog/backlog-offer-exclude.ts +15 -0
  159. package/scripts/backlog/backlog-offer-main.ts +12 -0
  160. package/scripts/backlog/backlog-offer.ts +36 -3
  161. package/scripts/backlog/backlog-overlap.ts +62 -10
  162. package/scripts/backlog/backlog-plan-cli.ts +4 -1
  163. package/scripts/backlog/backlog-plan-comment.ts +81 -0
  164. package/scripts/backlog/backlog-plan-read.ts +22 -5
  165. package/scripts/backlog/backlog-plan.ts +18 -4
  166. package/scripts/backlog/backlog-pool.ts +60 -22
  167. package/scripts/backlog/backlog-rank.ts +70 -15
  168. package/scripts/backlog/backlog-ready.ts +112 -30
  169. package/scripts/backlog/backlog-stalled-detect.ts +110 -36
  170. package/scripts/backlog/backlog-stalled.ts +52 -16
  171. package/scripts/backlog/backlog-wait-cause.ts +86 -0
  172. package/scripts/backlog/backlog-waves.ts +56 -15
  173. package/scripts/backlog/backlogrun-args.ts +19 -7
  174. package/scripts/backlog/backlogrun-cli.ts +19 -5
  175. package/scripts/backlog/backlogrun-launch.ts +13 -4
  176. package/scripts/backlog/backlogrun-restart.ts +97 -0
  177. package/scripts/backlog/backlogrun-stop.ts +79 -7
  178. package/scripts/behavior/behavior-cli.ts +2 -2
  179. package/scripts/behavior/behavior-rules.ts +47 -24
  180. package/scripts/build/build-bin.ts +2 -16
  181. package/scripts/build/build-claude-md.ts +0 -7
  182. package/scripts/build/build-commands.ts +0 -13
  183. package/scripts/build/build-hooks.ts +49 -48
  184. package/scripts/build/hook-bundle-stamp.ts +29 -11
  185. package/scripts/build/local-bin.ts +1 -1
  186. package/scripts/cases/cases-cli.ts +25 -13
  187. package/scripts/cases/cases-interaction-scan.ts +134 -0
  188. package/scripts/cases/cases-interaction.ts +183 -0
  189. package/scripts/cases/cases-logic.ts +39 -6
  190. package/scripts/ci/pr-classification-main.ts +18 -0
  191. package/scripts/ci/pr-classification.ts +10 -17
  192. package/scripts/clone/clone-scan.ts +1 -1
  193. package/scripts/cost-runtime/context-cut-payback.ts +27 -25
  194. package/scripts/cost-runtime/cost-blocks.ts +22 -37
  195. package/scripts/cost-runtime/cost-cli.ts +67 -29
  196. package/scripts/cost-runtime/cost-main.ts +12 -0
  197. package/scripts/cost-runtime/cost-pricing.ts +9 -0
  198. package/scripts/cost-runtime/cost-transcript.ts +1 -0
  199. package/scripts/cost-runtime/cost-verdict.ts +4 -1
  200. package/scripts/delegation/delegation-policy.ts +18 -5
  201. package/scripts/delegation/duplicate-read-guard.ts +1 -8
  202. package/scripts/delegation/investigation-guard.ts +12 -8
  203. package/scripts/delegation/investigation-reads.ts +48 -27
  204. package/scripts/dependabot/dependabot-cooldown.ts +195 -0
  205. package/scripts/discovery/repo-discovery.ts +24 -6
  206. package/scripts/discovery/repo-party.ts +80 -20
  207. package/scripts/discovery/session-owner-pin.ts +51 -0
  208. package/scripts/doctor/doctor-consumer.ts +2 -5
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/command-reference-line-budget.ts +42 -0
  211. package/scripts/document/document-byte-budget.ts +18 -6
  212. package/scripts/document/document-checks.ts +20 -0
  213. package/scripts/document/document-ratchet-check.ts +101 -0
  214. package/scripts/document/document-scan.ts +1 -1
  215. package/scripts/document/document-section-cli.ts +0 -8
  216. package/scripts/document/document-section-main.ts +12 -0
  217. package/scripts/document/document-section.ts +1 -0
  218. package/scripts/document/entry-read-budget.ts +7 -3
  219. package/scripts/document/issue-citation-budget.ts +94 -0
  220. package/scripts/epic/epic-audit-cli.ts +12 -6
  221. package/scripts/epic/epic-bundle-apply.ts +137 -0
  222. package/scripts/epic/epic-bundle-cli.ts +32 -121
  223. package/scripts/epic/epic-bundle-format.ts +116 -0
  224. package/scripts/epic/epic-bundle-main.ts +17 -0
  225. package/scripts/epic/epic-busy.ts +5 -12
  226. package/scripts/epic/epic-classify.ts +24 -15
  227. package/scripts/epic/epic-cli-argv.ts +33 -2
  228. package/scripts/epic/epic-cli-decide.ts +42 -0
  229. package/scripts/epic/epic-cli.ts +6 -38
  230. package/scripts/epic/epic-close.ts +112 -55
  231. package/scripts/epic/epic-cross-repo.ts +4 -7
  232. package/scripts/epic/epic-decide.ts +119 -0
  233. package/scripts/epic/epic-decision.ts +9 -0
  234. package/scripts/epic/epic-fetch.ts +6 -0
  235. package/scripts/epic/epic-graph.ts +8 -1
  236. package/scripts/epic/epic-issue.ts +8 -2
  237. package/scripts/epic/epic-label-age.ts +1 -1
  238. package/scripts/epic/epic-lane-offer.ts +39 -4
  239. package/scripts/epic/epic-next-main.ts +24 -0
  240. package/scripts/epic/epic-next.ts +6 -24
  241. package/scripts/epic/epic-outside-blocker.ts +6 -2
  242. package/scripts/epic/epic-parse.ts +9 -3
  243. package/scripts/epic/epic-rank.ts +5 -0
  244. package/scripts/epic/epic-read.ts +1 -0
  245. package/scripts/epic/epic-reconcile.ts +39 -0
  246. package/scripts/epic/epic-run.ts +10 -1
  247. package/scripts/epic/epic-solo.ts +50 -14
  248. package/scripts/epic/epic.ts +41 -7
  249. package/scripts/exports/unused-members-check.ts +62 -0
  250. package/scripts/exports/unused-members-cli.ts +6 -51
  251. package/scripts/followup/followup-checks-event.ts +8 -3
  252. package/scripts/followup/followup-ci-path.ts +67 -0
  253. package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
  254. package/scripts/followup/followup-coderabbit-wait.ts +85 -0
  255. package/scripts/followup/followup-failed-tests.ts +160 -0
  256. package/scripts/followup/followup-job-needs.ts +100 -0
  257. package/scripts/followup/followup-job-rerun.ts +303 -0
  258. package/scripts/followup/followup-main-move.ts +113 -0
  259. package/scripts/followup/followup-review-gates.ts +81 -0
  260. package/scripts/followup/git-followup-finish.ts +43 -11
  261. package/scripts/followup/git-followup-pending.ts +3 -3
  262. package/scripts/followup/git-followup-stages.ts +52 -12
  263. package/scripts/followup/git-followup-workflow.ts +19 -66
  264. package/scripts/followup/git-pr-followup-checks.ts +55 -16
  265. package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
  266. package/scripts/followup/git-pr-followup.ts +96 -33
  267. package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
  268. package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
  269. package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
  270. package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
  271. package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
  272. package/scripts/gate/busy-average.ts +90 -0
  273. package/scripts/gate/check-cpu.ts +60 -0
  274. package/scripts/gate/check-inputs.ts +39 -95
  275. package/scripts/gate/check-related-pinned.ts +43 -0
  276. package/scripts/gate/check-related-reuse.ts +64 -0
  277. package/scripts/gate/check-related-section.ts +57 -0
  278. package/scripts/gate/check-related-unplanned.ts +34 -0
  279. package/scripts/gate/check-related.ts +265 -0
  280. package/scripts/gate/check-reuse.ts +33 -54
  281. package/scripts/gate/command-memory.ts +192 -0
  282. package/scripts/gate/core-admission.ts +236 -28
  283. package/scripts/gate/core-budget-timing.ts +51 -0
  284. package/scripts/gate/core-budget.ts +111 -100
  285. package/scripts/gate/core-wait-record.ts +49 -0
  286. package/scripts/gate/core-wait.ts +62 -7
  287. package/scripts/gate/core-weights.ts +94 -0
  288. package/scripts/gate/free-cores.ts +27 -4
  289. package/scripts/gate/gate-labels.ts +46 -0
  290. package/scripts/gate/gate-ledger.ts +44 -8
  291. package/scripts/gate/gate-plan.ts +130 -78
  292. package/scripts/gate/gate-report.ts +23 -9
  293. package/scripts/gate/gate-run-steps.ts +77 -9
  294. package/scripts/gate/gate-skip.ts +57 -8
  295. package/scripts/gate/gate-static-group.ts +60 -0
  296. package/scripts/gate/gate-steps.ts +14 -2
  297. package/scripts/gate/gate-tree.ts +4 -2
  298. package/scripts/gate/hook-gate-reuse.ts +19 -2
  299. package/scripts/gate/input-fingerprint.ts +42 -0
  300. package/scripts/gate/machine-capacity.ts +65 -31
  301. package/scripts/gate/metrics-totals.ts +59 -0
  302. package/scripts/gate/moved-paths.ts +67 -0
  303. package/scripts/gate/project-checks.ts +5 -12
  304. package/scripts/gate/scoped-green.ts +76 -19
  305. package/scripts/gate/since-green.ts +70 -0
  306. package/scripts/gate/structural-checks.ts +96 -0
  307. package/scripts/gate/toolchain-inputs.ts +115 -0
  308. package/scripts/gate/verification-gate.ts +70 -32
  309. package/scripts/gate/verification-inputs.ts +265 -0
  310. package/scripts/gate/verification-tail.ts +52 -0
  311. package/scripts/gh/gh-author-association.ts +117 -9
  312. package/scripts/gh/git-ai-review-scan.ts +5 -3
  313. package/scripts/gh/git-gh-api-path.ts +26 -2
  314. package/scripts/gh/git-gh-branch-rules.ts +73 -0
  315. package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
  316. package/scripts/gh/git-gh-conditional.ts +5 -2
  317. package/scripts/gh/git-gh-exec.ts +32 -2
  318. package/scripts/gh/git-gh-issue-read.ts +7 -1
  319. package/scripts/gh/git-gh-issue-rest.ts +1 -0
  320. package/scripts/gh/git-gh-issue-write.ts +75 -31
  321. package/scripts/gh/git-gh-issue.ts +19 -8
  322. package/scripts/gh/git-gh-poll-read.ts +89 -0
  323. package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
  324. package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
  325. package/scripts/gh/git-gh-pr-read.ts +74 -13
  326. package/scripts/gh/git-gh-pr-rest.ts +4 -2
  327. package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
  328. package/scripts/gh/git-gh-pr-too-large.ts +20 -0
  329. package/scripts/gh/git-gh-pr.ts +48 -22
  330. package/scripts/gh/git-gh-retry.ts +141 -0
  331. package/scripts/gh/git-pr-ai-review.ts +15 -6
  332. package/scripts/gh/git-pr-checks-eval.ts +42 -7
  333. package/scripts/gh/git-pr-checks-parse.ts +39 -9
  334. package/scripts/gh/git-pr-checks.ts +5 -5
  335. package/scripts/gh/git-pr-merge-checked.ts +80 -0
  336. package/scripts/git/base-tree.ts +49 -2
  337. package/scripts/git/change-base.ts +4 -10
  338. package/scripts/git/changed-file-scope.ts +6 -4
  339. package/scripts/git/changed-paths-sync.ts +63 -0
  340. package/scripts/git/changed-paths.ts +34 -2
  341. package/scripts/git/git-common-directory.ts +11 -1
  342. package/scripts/git/git-diff-reads.ts +91 -20
  343. package/scripts/git/git-error.ts +9 -2
  344. package/scripts/git/git-grep-hits.ts +85 -0
  345. package/scripts/git/git-location-environment.ts +1 -1
  346. package/scripts/git/git-merge-conflicts.ts +83 -0
  347. package/scripts/git/git-preflight.ts +37 -12
  348. package/scripts/git/git-push-transport.ts +1 -2
  349. package/scripts/git/git-schemas.ts +30 -7
  350. package/scripts/git/git-spawn.ts +1 -2
  351. package/scripts/git/git-status.ts +4 -4
  352. package/scripts/git/git-worktree.ts +13 -0
  353. package/scripts/git/gone-branch.ts +4 -1
  354. package/scripts/git/main-merge-budget-conflict.ts +89 -0
  355. package/scripts/git/main-merge-guard.ts +55 -18
  356. package/scripts/git/main-merge-main.ts +12 -0
  357. package/scripts/git/main-merge-regenerate.ts +59 -25
  358. package/scripts/git/main-merge.ts +77 -13
  359. package/scripts/git/main-sync-main.ts +12 -0
  360. package/scripts/git/main-sync.ts +0 -9
  361. package/scripts/git/no-base-checkout.ts +127 -0
  362. package/scripts/git/stash/git-stash.ts +38 -6
  363. package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
  364. package/scripts/git/stash/stash-pop-cli.ts +6 -12
  365. package/scripts/git/stash/stash-pop-main.ts +12 -0
  366. package/scripts/git/stash/stash-push-cli.ts +86 -0
  367. package/scripts/git/stash/stash-push-main.ts +12 -0
  368. package/scripts/hooks/batch-guard.ts +38 -27
  369. package/scripts/hooks/check-commit-message-main.ts +8 -0
  370. package/scripts/hooks/check-commit-message.ts +4 -7
  371. package/scripts/hooks/edited-cspell.ts +37 -11
  372. package/scripts/hooks/format-edited-file.ts +29 -25
  373. package/scripts/hooks/lane-plan-guard.ts +50 -0
  374. package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
  375. package/scripts/hooks/pre-commit-lint.ts +44 -4
  376. package/scripts/hooks/pre-push-related-switch.ts +10 -0
  377. package/scripts/hooks/pre-push-unit.ts +77 -9
  378. package/scripts/hooks/pretool-guard-cli.ts +1 -8
  379. package/scripts/hooks/pretool-guard.ts +34 -19
  380. package/scripts/hooks/reserved-run.ts +81 -10
  381. package/scripts/hooks/run-hook.sh +30 -6
  382. package/scripts/hooks/shell-rules-notice.ts +37 -0
  383. package/scripts/hooks/step-zero-notice.ts +6 -1
  384. package/scripts/hooks/stop-actions.ts +5 -36
  385. package/scripts/hooks/stop-guard.ts +20 -15
  386. package/scripts/init/distributed-paths.ts +1 -0
  387. package/scripts/init/hook-command-rewrite.ts +23 -5
  388. package/scripts/init/hook-launch.ts +17 -17
  389. package/scripts/init/init-actions.ts +0 -6
  390. package/scripts/init/init-ai-copy.ts +10 -36
  391. package/scripts/init/init-bootstrap.ts +9 -8
  392. package/scripts/init/init-dry-run-report.ts +1 -1
  393. package/scripts/init/init-dry-run.ts +1 -1
  394. package/scripts/init/init-file-action.ts +7 -9
  395. package/scripts/init/init-logic-json-merge.ts +2 -2
  396. package/scripts/init/init-logic-migrate.ts +9 -82
  397. package/scripts/init/init-logic.ts +3 -2
  398. package/scripts/init/init-main.ts +12 -0
  399. package/scripts/init/init.ts +5 -12
  400. package/scripts/init/kit-development-versions.ts +3 -7
  401. package/scripts/init/kit-written-paths.ts +2 -2
  402. package/scripts/init/project-profile.ts +5 -4
  403. package/scripts/init/tsconfig-preset-migration.ts +2 -1
  404. package/scripts/init/vscode-tasks.ts +1 -1
  405. package/scripts/issue/aggregation-split.ts +52 -0
  406. package/scripts/issue/defect-origin-cli.ts +106 -0
  407. package/scripts/issue/defect-origin-line.ts +78 -0
  408. package/scripts/issue/defect-origin-main.ts +11 -0
  409. package/scripts/issue/defect-origin.ts +114 -0
  410. package/scripts/issue/defect-rate-cli.ts +38 -179
  411. package/scripts/issue/defect-rate.ts +0 -16
  412. package/scripts/issue/defect-report-cli.ts +128 -0
  413. package/scripts/issue/defect-report-format.ts +56 -0
  414. package/scripts/issue/defect-report-main.ts +11 -0
  415. package/scripts/issue/defect-report.ts +160 -0
  416. package/scripts/issue/effect-audit-cli.ts +178 -0
  417. package/scripts/issue/effect-audit.ts +185 -0
  418. package/scripts/issue/expected-effect-lint.ts +65 -9
  419. package/scripts/issue/git-next-issues.ts +5 -0
  420. package/scripts/issue/issue-already-done-cli.ts +62 -0
  421. package/scripts/issue/issue-body-or-comment.ts +74 -0
  422. package/scripts/issue/issue-cite-cli.ts +1 -12
  423. package/scripts/issue/issue-cite-main.ts +12 -0
  424. package/scripts/issue/issue-classification.ts +13 -7
  425. package/scripts/issue/issue-closing-pr.ts +8 -1
  426. package/scripts/issue/issue-comment-cli.ts +10 -24
  427. package/scripts/issue/issue-comment-main.ts +12 -0
  428. package/scripts/issue/issue-evidence-exit.ts +102 -0
  429. package/scripts/issue/issue-file-cap.ts +58 -0
  430. package/scripts/issue/issue-file-cli.ts +131 -36
  431. package/scripts/issue/issue-file-deferral.ts +52 -0
  432. package/scripts/issue/issue-file-fold.ts +29 -10
  433. package/scripts/issue/issue-file-interrupt.ts +85 -0
  434. package/scripts/issue/issue-file-lane-hint.ts +30 -0
  435. package/scripts/issue/issue-file.ts +56 -19
  436. package/scripts/issue/issue-fold-cli.ts +2 -11
  437. package/scripts/issue/issue-fold-main.ts +12 -0
  438. package/scripts/issue/issue-labels.ts +97 -89
  439. package/scripts/issue/issue-lint-cli.ts +29 -12
  440. package/scripts/issue/issue-lint-main.ts +12 -0
  441. package/scripts/issue/issue-measured-cli.ts +34 -0
  442. package/scripts/issue/issue-measured-close.ts +58 -0
  443. package/scripts/issue/issue-merged.ts +19 -2
  444. package/scripts/issue/issue-not-before-label.ts +135 -0
  445. package/scripts/issue/issue-not-before.ts +114 -0
  446. package/scripts/issue/issue-number-shape.ts +15 -1
  447. package/scripts/issue/issue-park.ts +28 -0
  448. package/scripts/issue/issue-plan-cli.ts +151 -0
  449. package/scripts/issue/issue-priority-cli.ts +60 -0
  450. package/scripts/issue/issue-priority-raise.ts +55 -0
  451. package/scripts/issue/issue-priority.ts +282 -0
  452. package/scripts/issue/issue-rank.ts +27 -4
  453. package/scripts/issue/issue-read-cli.ts +35 -16
  454. package/scripts/issue/issue-read-main.ts +12 -0
  455. package/scripts/issue/issue-read.ts +62 -13
  456. package/scripts/issue/issue-release-cli.ts +0 -10
  457. package/scripts/issue/issue-release-main.ts +13 -0
  458. package/scripts/issue/issue-release.ts +7 -12
  459. package/scripts/issue/issue-sample-gate.ts +213 -0
  460. package/scripts/issue/issue-sample-prime.ts +127 -0
  461. package/scripts/issue/issue-sample-required.ts +57 -0
  462. package/scripts/issue/issue-sample-source.ts +77 -0
  463. package/scripts/issue/issue-scout-cli.ts +0 -11
  464. package/scripts/issue/issue-scout-main.ts +14 -0
  465. package/scripts/issue/issue-search.ts +124 -0
  466. package/scripts/issue/issue-state-cli.ts +0 -10
  467. package/scripts/issue/issue-state-main.ts +12 -0
  468. package/scripts/issue/issue-state.ts +13 -1
  469. package/scripts/issue/issue-template-section.ts +43 -0
  470. package/scripts/issue/issue-watch-diff.ts +87 -16
  471. package/scripts/issue/issue-watch-hook.ts +11 -2
  472. package/scripts/issue/issue-watch.ts +55 -11
  473. package/scripts/issue/issue-wip.ts +2 -7
  474. package/scripts/issue/markdown-section.ts +1 -0
  475. package/scripts/issue/measure-declaration.ts +121 -0
  476. package/scripts/issue/measure-rerun-cli.ts +7 -65
  477. package/scripts/issue/plan-consumers-cli.ts +39 -0
  478. package/scripts/issue/plan-consumers-main.ts +11 -0
  479. package/scripts/issue/plan-consumers-section.ts +76 -0
  480. package/scripts/issue/plan-consumers.ts +127 -0
  481. package/scripts/issue/reproduction-measure.ts +3 -1
  482. package/scripts/issue/size-estimate.ts +90 -0
  483. package/scripts/issue/trusted-measure.ts +84 -0
  484. package/scripts/josh/agent-session-environment.ts +1 -1
  485. package/scripts/josh/command-usage.ts +17 -44
  486. package/scripts/josh/durable-state-migrate.ts +105 -0
  487. package/scripts/josh/durable-state.ts +112 -0
  488. package/scripts/josh/file-map-stamp.ts +49 -16
  489. package/scripts/josh/hook-decision.ts +32 -20
  490. package/scripts/josh/josh-aliases.ts +95 -0
  491. package/scripts/josh/josh-command-map.ts +1 -79
  492. package/scripts/josh/josh-command-types.ts +12 -6
  493. package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
  494. package/scripts/josh/josh-commands-ai.ts +160 -161
  495. package/scripts/josh/josh-commands-backlog.ts +82 -16
  496. package/scripts/josh/josh-commands-clone.ts +1 -0
  497. package/scripts/josh/josh-commands-development.ts +142 -101
  498. package/scripts/josh/josh-commands-document.ts +43 -1
  499. package/scripts/josh/josh-commands-epic.ts +171 -0
  500. package/scripts/josh/josh-commands-hooks.ts +25 -2
  501. package/scripts/josh/josh-commands-issue-write.ts +200 -0
  502. package/scripts/josh/josh-commands-issue.ts +156 -24
  503. package/scripts/josh/josh-commands-lane.ts +187 -3
  504. package/scripts/josh/josh-commands-lint.ts +34 -10
  505. package/scripts/josh/josh-commands-maintenance.ts +127 -4
  506. package/scripts/josh/josh-commands-pause.ts +29 -0
  507. package/scripts/josh/josh-commands-progress.ts +87 -0
  508. package/scripts/josh/josh-commands-project.ts +138 -9
  509. package/scripts/josh/josh-commands-review.ts +159 -0
  510. package/scripts/josh/josh-commands-run.ts +211 -23
  511. package/scripts/josh/josh-commands-ship.ts +217 -0
  512. package/scripts/josh/josh-commands-split.ts +9 -0
  513. package/scripts/josh/josh-commands-test-check.ts +80 -0
  514. package/scripts/josh/josh-commands-versioning.ts +49 -2
  515. package/scripts/josh/josh-commands-workflow.ts +144 -6
  516. package/scripts/josh/josh-environment-file.ts +43 -3
  517. package/scripts/josh/josh-in-process.ts +2 -2
  518. package/scripts/josh/josh-logic.ts +11 -16
  519. package/scripts/josh/josh-run.ts +19 -1
  520. package/scripts/josh/package-directory.ts +2 -4
  521. package/scripts/josh/process-identity.ts +13 -4
  522. package/scripts/josh/run-record-path.ts +15 -0
  523. package/scripts/josh/session-language-cli.ts +4 -8
  524. package/scripts/josh/session-language-main.ts +13 -0
  525. package/scripts/josh/session-language.ts +6 -1
  526. package/scripts/josh/shared-cache.ts +90 -0
  527. package/scripts/josh/stamp-file.ts +20 -17
  528. package/scripts/lane/lane-adopt-cli.ts +98 -0
  529. package/scripts/lane/lane-adopt.ts +208 -0
  530. package/scripts/lane/lane-await.ts +56 -20
  531. package/scripts/lane/lane-baseline.ts +123 -0
  532. package/scripts/lane/lane-breakdown-cli.ts +64 -0
  533. package/scripts/lane/lane-breakdown-implement.ts +170 -0
  534. package/scripts/lane/lane-breakdown-laps.ts +107 -0
  535. package/scripts/lane/lane-breakdown-pinned.ts +76 -0
  536. package/scripts/lane/lane-breakdown-text.ts +145 -0
  537. package/scripts/lane/lane-breakdown.ts +239 -0
  538. package/scripts/lane/lane-cache.ts +5 -30
  539. package/scripts/lane/lane-capacity.ts +14 -23
  540. package/scripts/lane/lane-check-stats.ts +84 -22
  541. package/scripts/lane/lane-child-invocation.ts +17 -2
  542. package/scripts/lane/lane-child-mark-keys.ts +12 -0
  543. package/scripts/lane/lane-child-marker.ts +20 -1
  544. package/scripts/lane/lane-ci-path-stats.ts +73 -0
  545. package/scripts/lane/lane-claim-stats.ts +84 -0
  546. package/scripts/lane/lane-cli.ts +15 -5
  547. package/scripts/lane/lane-close.ts +91 -18
  548. package/scripts/lane/lane-core-wait-stats.ts +66 -0
  549. package/scripts/lane/lane-dispatch-log.ts +3 -3
  550. package/scripts/lane/lane-dispatch.ts +26 -5
  551. package/scripts/lane/lane-gap-stats.ts +157 -0
  552. package/scripts/lane/lane-guard-policy.ts +7 -1
  553. package/scripts/lane/lane-handoff.ts +69 -1
  554. package/scripts/lane/lane-held-stats.ts +129 -0
  555. package/scripts/lane/lane-implement-stats.ts +207 -0
  556. package/scripts/lane/lane-implement-subagents.ts +90 -0
  557. package/scripts/lane/lane-install.ts +4 -11
  558. package/scripts/lane/lane-investigation-switch.ts +16 -0
  559. package/scripts/lane/lane-launch-cli.ts +0 -9
  560. package/scripts/lane/lane-launch-main.ts +12 -0
  561. package/scripts/lane/lane-ledger-kind.ts +31 -0
  562. package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
  563. package/scripts/lane/lane-ledger-schema.ts +349 -0
  564. package/scripts/lane/lane-ledger-write.ts +257 -0
  565. package/scripts/lane/lane-ledger.ts +56 -233
  566. package/scripts/lane/lane-limit-cli.ts +12 -1
  567. package/scripts/lane/lane-load.ts +1 -1
  568. package/scripts/lane/lane-measure-cli.ts +193 -30
  569. package/scripts/lane/lane-net-read.ts +44 -0
  570. package/scripts/lane/lane-net-time.ts +212 -0
  571. package/scripts/lane/lane-open.ts +25 -8
  572. package/scripts/lane/lane-output.ts +2 -4
  573. package/scripts/lane/lane-overrun-prompt.ts +147 -0
  574. package/scripts/lane/lane-overrun.ts +274 -0
  575. package/scripts/lane/lane-parked.ts +3 -3
  576. package/scripts/lane/lane-paths.ts +24 -1
  577. package/scripts/lane/lane-pause-cli.ts +133 -0
  578. package/scripts/lane/lane-pause.ts +158 -0
  579. package/scripts/lane/lane-paused-spans.ts +97 -0
  580. package/scripts/lane/lane-plan-check.ts +207 -0
  581. package/scripts/lane/lane-plan-cli.ts +41 -0
  582. package/scripts/lane/lane-plan.ts +144 -0
  583. package/scripts/lane/lane-process-table.ts +166 -0
  584. package/scripts/lane/lane-reap-settle.ts +124 -0
  585. package/scripts/lane/lane-reap.ts +50 -15
  586. package/scripts/lane/lane-registry.ts +38 -4
  587. package/scripts/lane/lane-relaunch.ts +1 -1
  588. package/scripts/lane/lane-residents.ts +162 -0
  589. package/scripts/lane/lane-restart.ts +22 -2
  590. package/scripts/lane/lane-round-one-stats.ts +51 -0
  591. package/scripts/lane/lane-round-two-stats.ts +49 -0
  592. package/scripts/lane/lane-sampler.ts +26 -3
  593. package/scripts/lane/lane-session-action.ts +112 -23
  594. package/scripts/lane/lane-session-broker.ts +146 -37
  595. package/scripts/lane/lane-session-reread-main.ts +14 -0
  596. package/scripts/lane/lane-session-reread.ts +51 -0
  597. package/scripts/lane/lane-ship-lap-stats.ts +74 -0
  598. package/scripts/lane/lane-sleep.ts +58 -0
  599. package/scripts/lane/lane-snapshot-trace.ts +84 -0
  600. package/scripts/lane/lane-spans.ts +51 -0
  601. package/scripts/lane/lane-spent.ts +7 -4
  602. package/scripts/lane/lane-split-stats.ts +28 -0
  603. package/scripts/lane/lane-stage-stats.ts +20 -3
  604. package/scripts/lane/lane-state.ts +334 -0
  605. package/scripts/lane/lane-stats-tables.ts +58 -0
  606. package/scripts/lane/lane-stats.ts +74 -4
  607. package/scripts/lane/lane-stop-stats.ts +145 -37
  608. package/scripts/lane/lane-tail-stats.ts +32 -0
  609. package/scripts/lane/lane-test-related-stats.ts +127 -0
  610. package/scripts/lane/lane-transcript-calls.ts +202 -0
  611. package/scripts/lane/lane-transcript-stats.ts +200 -0
  612. package/scripts/lane/lane-vacant.ts +13 -3
  613. package/scripts/lane/lane-value-cell.ts +72 -0
  614. package/scripts/lane/lane-value.ts +118 -0
  615. package/scripts/lane/lane-withdraw-cli.ts +5 -4
  616. package/scripts/lane/lane-withdraw-closed.ts +124 -0
  617. package/scripts/lane/lane-withdraw.ts +149 -71
  618. package/scripts/lane/lane-yield.ts +85 -0
  619. package/scripts/lane/openai-lane-ship.ts +12 -11
  620. package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
  621. package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
  622. package/scripts/lane/openai-lane-supervisor.ts +5 -4
  623. package/scripts/lane/process-directories.ts +70 -0
  624. package/scripts/lane/process-lane-marks.ts +94 -0
  625. package/scripts/lib/atomic-write.ts +62 -0
  626. package/scripts/lib/buffered-process.ts +12 -5
  627. package/scripts/lib/cli-flags.ts +53 -0
  628. package/scripts/lib/figure-format.ts +63 -0
  629. package/scripts/lib/json-value.ts +9 -1
  630. package/scripts/lib/package-manifest.ts +35 -0
  631. package/scripts/lib/poll.ts +38 -9
  632. package/scripts/lib/read-file.ts +3 -1
  633. package/scripts/lib/settled-together.ts +10 -0
  634. package/scripts/lib/shell-quote.ts +21 -0
  635. package/scripts/lib/stamped-memo.ts +63 -0
  636. package/scripts/lib/stdout-on-stderr.ts +24 -0
  637. package/scripts/lib/timeouts.ts +9 -0
  638. package/scripts/lib/token-shape.ts +111 -0
  639. package/scripts/lib/transcript-record.ts +91 -0
  640. package/scripts/lines/effective-limit.ts +1 -1
  641. package/scripts/lint/eslint-cache-dependencies.ts +145 -0
  642. package/scripts/lint/eslint-daemon-sources.ts +79 -0
  643. package/scripts/lint/eslint-daemon.ts +304 -0
  644. package/scripts/lint/eslint-warm-cli.ts +7 -0
  645. package/scripts/lint/eslint-warm.ts +66 -0
  646. package/scripts/lint/format.ts +11 -2
  647. package/scripts/lint/import-graph.ts +409 -0
  648. package/scripts/lint/lint-gate-scope.ts +102 -0
  649. package/scripts/lint/lint-parallel-main.ts +19 -0
  650. package/scripts/lint/lint-parallel.ts +113 -33
  651. package/scripts/lint/lint-related-scope.ts +30 -24
  652. package/scripts/lint/lint-related.ts +183 -30
  653. package/scripts/lint/rename-cli.ts +179 -0
  654. package/scripts/lint/rename-identifier.ts +192 -0
  655. package/scripts/lint/type-only-imports.ts +58 -0
  656. package/scripts/notify/confirmation-options.ts +1 -2
  657. package/scripts/notify/telegram-notify.ts +32 -23
  658. package/scripts/notify/telegram-test-logic.ts +0 -1
  659. package/scripts/notify/telegram-test-main.ts +8 -0
  660. package/scripts/notify/telegram-test.ts +2 -6
  661. package/scripts/observations/observation-ledger.ts +13 -0
  662. package/scripts/observations/observation-record.ts +42 -16
  663. package/scripts/observations/observations-flush-landing.ts +5 -3
  664. package/scripts/observations/observations-flush.ts +38 -10
  665. package/scripts/overrides/overrides-check.ts +11 -6
  666. package/scripts/overrides/overrides-files.ts +2 -1
  667. package/scripts/overrides/overrides-logic.ts +3 -6
  668. package/scripts/package/verify-optional-eslint-install.ts +8 -6
  669. package/scripts/propagate/propagate-publish.ts +2 -7
  670. package/scripts/propagate/propagate-targets.ts +4 -12
  671. package/scripts/refactor/import-graph.ts +9 -7
  672. package/scripts/release/github-release-runs.ts +17 -6
  673. package/scripts/release/release-approval-prune.ts +24 -0
  674. package/scripts/release/release-history.ts +1 -3
  675. package/scripts/release/release-progress.ts +42 -22
  676. package/scripts/release/release-publish-run.ts +39 -0
  677. package/scripts/release/release-publish.ts +6 -6
  678. package/scripts/release/release-scope-cli.ts +0 -10
  679. package/scripts/release/release-scope-main.ts +12 -0
  680. package/scripts/repo/repo-setting.ts +3 -6
  681. package/scripts/repo/required-checks-logic.ts +10 -16
  682. package/scripts/repo/ruleset-check.ts +4 -3
  683. package/scripts/report/markdown-shape.ts +28 -0
  684. package/scripts/report/report-format-reference.ts +17 -1
  685. package/scripts/report/report-labels.ts +166 -0
  686. package/scripts/report/report-lint-child-summary.ts +94 -0
  687. package/scripts/report/report-lint-cli.ts +29 -7
  688. package/scripts/report/report-lint.ts +85 -128
  689. package/scripts/report/report-template-cli.ts +59 -0
  690. package/scripts/report/report-template.ts +112 -0
  691. package/scripts/review/acceptance-map.ts +1 -0
  692. package/scripts/review/prose-stale-cli.ts +88 -0
  693. package/scripts/review/prose-stale-scan.ts +152 -0
  694. package/scripts/review/removed-tests-check.ts +86 -0
  695. package/scripts/review/removed-tests.ts +149 -0
  696. package/scripts/review/review-attest.ts +73 -23
  697. package/scripts/review/review-brief-cli.ts +138 -23
  698. package/scripts/review/review-brief-main.ts +12 -0
  699. package/scripts/review/review-brief-paths.ts +22 -0
  700. package/scripts/review/review-brief.ts +45 -10
  701. package/scripts/review/review-code-tree.ts +10 -6
  702. package/scripts/review/review-comment-carry.ts +47 -0
  703. package/scripts/review/review-comment-round.ts +111 -30
  704. package/scripts/review/review-finding-ledger.ts +135 -18
  705. package/scripts/review/review-finding-text.ts +43 -0
  706. package/scripts/review/review-interaction.ts +105 -0
  707. package/scripts/review/review-lane-handover.ts +68 -0
  708. package/scripts/review/review-lint-cli.ts +57 -0
  709. package/scripts/review/review-lint-findings.ts +92 -0
  710. package/scripts/review/review-lint-sections.ts +80 -0
  711. package/scripts/review/review-lint.ts +221 -0
  712. package/scripts/review/review-prior-findings.ts +102 -0
  713. package/scripts/review/review-readers-scan.ts +165 -0
  714. package/scripts/review/review-record-cli.ts +236 -74
  715. package/scripts/review/review-record-code-round.ts +55 -0
  716. package/scripts/review/review-record-comment.ts +60 -0
  717. package/scripts/review/review-record-interaction.ts +35 -0
  718. package/scripts/review/review-record-main.ts +12 -0
  719. package/scripts/review/review-record-pinned.ts +108 -0
  720. package/scripts/review/review-record.ts +25 -1
  721. package/scripts/review/review-reviewed-tree.ts +307 -0
  722. package/scripts/review/review-round-one-blobs.ts +221 -0
  723. package/scripts/review/review-round-one-closure.ts +62 -0
  724. package/scripts/review/review-round-reuse.ts +106 -0
  725. package/scripts/review/review-round2-cli.ts +135 -36
  726. package/scripts/review/review-round2-skip-comment.ts +55 -0
  727. package/scripts/review/review-round2.ts +103 -19
  728. package/scripts/review/review-stamps.ts +23 -1
  729. package/scripts/review/review-stop-log.ts +110 -0
  730. package/scripts/review/review-stops-cli.ts +86 -0
  731. package/scripts/review/review-submit-cli.ts +101 -0
  732. package/scripts/review/review-tree.ts +6 -17
  733. package/scripts/review/review-untouched-readers.ts +146 -0
  734. package/scripts/review/test-titles.ts +118 -0
  735. package/scripts/rules/agent-model.ts +9 -1
  736. package/scripts/rules/bash-triggers.ts +49 -6
  737. package/scripts/rules/concise-reply.ts +88 -0
  738. package/scripts/rules/credential-body.ts +77 -0
  739. package/scripts/rules/decision-oracle-batch.ts +9 -1
  740. package/scripts/rules/decision-oracle.ts +3 -3
  741. package/scripts/rules/delivered-rules.ts +115 -18
  742. package/scripts/rules/destructive-command.ts +11 -12
  743. package/scripts/rules/direct-filing.ts +10 -2
  744. package/scripts/rules/direct-issue-comment.ts +139 -0
  745. package/scripts/rules/direct-issue-read.ts +191 -0
  746. package/scripts/rules/direct-pr-create.ts +72 -26
  747. package/scripts/rules/early-heartbeat.ts +4 -1
  748. package/scripts/rules/edit-tool.ts +27 -0
  749. package/scripts/rules/file-body.ts +7 -0
  750. package/scripts/rules/file-edit-rows.ts +17 -0
  751. package/scripts/rules/file-rewrite.ts +146 -0
  752. package/scripts/rules/firing-point.ts +3 -2
  753. package/scripts/rules/gh-api.ts +128 -7
  754. package/scripts/rules/gh-repo-selector.ts +84 -0
  755. package/scripts/rules/git-argv.ts +72 -14
  756. package/scripts/rules/git-force.ts +14 -4
  757. package/scripts/rules/guard-remedy.ts +17 -4
  758. package/scripts/rules/implementation-cut-verdict.ts +1 -1
  759. package/scripts/rules/implementation-cut.ts +68 -27
  760. package/scripts/rules/index-guard.ts +8 -1
  761. package/scripts/rules/investigator-foreground.ts +231 -0
  762. package/scripts/rules/issue-citation.ts +15 -60
  763. package/scripts/rules/issue-comments.ts +18 -5
  764. package/scripts/rules/josh-git-bare.ts +7 -0
  765. package/scripts/rules/lane-background.ts +103 -33
  766. package/scripts/rules/lane-carry-conflict.ts +6 -0
  767. package/scripts/rules/lane-direct-tool.ts +172 -0
  768. package/scripts/rules/lane-interactive-ask.ts +12 -2
  769. package/scripts/rules/lane-park.ts +49 -25
  770. package/scripts/rules/lane-spilled-read.ts +90 -0
  771. package/scripts/rules/lane-split-park.ts +11 -3
  772. package/scripts/rules/lane-switch-main.ts +11 -4
  773. package/scripts/rules/last-prompt.ts +20 -47
  774. package/scripts/rules/oracle-consulted.ts +11 -1
  775. package/scripts/rules/oracle-firing.ts +1 -0
  776. package/scripts/rules/permission-guards.ts +7 -0
  777. package/scripts/rules/piped-verification-shapes.ts +110 -0
  778. package/scripts/rules/piped-verification.ts +68 -18
  779. package/scripts/rules/poll-loop.ts +78 -8
  780. package/scripts/rules/pr-merge.ts +123 -0
  781. package/scripts/rules/pre-gate-cut.ts +3 -3
  782. package/scripts/rules/protected-files.ts +113 -22
  783. package/scripts/rules/raw-field-body.ts +6 -0
  784. package/scripts/rules/reply-language.ts +3 -17
  785. package/scripts/rules/reply-prose.ts +34 -0
  786. package/scripts/rules/repo-admin.ts +132 -0
  787. package/scripts/rules/reviewer-foreground.ts +88 -0
  788. package/scripts/rules/round-one-check-related.ts +120 -0
  789. package/scripts/rules/rule-body-guard.ts +13 -15
  790. package/scripts/rules/rule-list.ts +9 -28
  791. package/scripts/rules/rule-value-cache.ts +57 -14
  792. package/scripts/rules/rule-value-candidates.ts +84 -0
  793. package/scripts/rules/rule-value-cli.ts +106 -39
  794. package/scripts/rules/rule-value.ts +18 -5
  795. package/scripts/rules/run-tail-rule.ts +1 -1
  796. package/scripts/rules/sed-in-place.ts +196 -0
  797. package/scripts/rules/shell-segments.ts +43 -0
  798. package/scripts/rules/stop-rule-rows.ts +52 -0
  799. package/scripts/rules/stop-rules.ts +36 -62
  800. package/scripts/rules/test-declared-commit.ts +11 -1
  801. package/scripts/rules/third-party-write.ts +115 -21
  802. package/scripts/rules/timed-rerun.ts +69 -0
  803. package/scripts/rules/turn-filings.ts +90 -0
  804. package/scripts/rules/worktree-guard.ts +32 -7
  805. package/scripts/run/board/run-board-app-name.ts +23 -0
  806. package/scripts/run/board/run-board-cli.ts +65 -32
  807. package/scripts/run/board/run-board-earlier.ts +94 -0
  808. package/scripts/run/board/run-board-ending-reason.ts +71 -0
  809. package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
  810. package/scripts/run/board/run-board-estimate.ts +98 -0
  811. package/scripts/run/board/run-board-fit.ts +177 -37
  812. package/scripts/run/board/run-board-fold.ts +123 -0
  813. package/scripts/run/board/run-board-found.ts +134 -0
  814. package/scripts/run/board/run-board-fresh.ts +2 -2
  815. package/scripts/run/board/run-board-gather-live.ts +29 -0
  816. package/scripts/run/board/run-board-gather-thread.ts +189 -0
  817. package/scripts/run/board/run-board-gather-worker.ts +29 -0
  818. package/scripts/run/board/run-board-gather.ts +187 -0
  819. package/scripts/run/board/run-board-github.ts +118 -38
  820. package/scripts/run/board/run-board-header.ts +90 -20
  821. package/scripts/run/board/run-board-keys.ts +58 -0
  822. package/scripts/run/board/run-board-kind.ts +20 -6
  823. package/scripts/run/board/run-board-labels.ts +126 -71
  824. package/scripts/run/board/run-board-lane-state.ts +109 -0
  825. package/scripts/run/board/run-board-lane-time.ts +123 -0
  826. package/scripts/run/board/run-board-layout.ts +239 -60
  827. package/scripts/run/board/run-board-length.ts +52 -0
  828. package/scripts/run/board/run-board-link.ts +15 -2
  829. package/scripts/run/board/run-board-machine.ts +8 -4
  830. package/scripts/run/board/run-board-main.ts +12 -0
  831. package/scripts/run/board/run-board-notes.ts +59 -32
  832. package/scripts/run/board/run-board-now.ts +1 -1
  833. package/scripts/run/board/run-board-operation.ts +19 -35
  834. package/scripts/run/board/run-board-phase.ts +3 -6
  835. package/scripts/run/board/run-board-plan-shared.ts +115 -0
  836. package/scripts/run/board/run-board-plan.ts +56 -4
  837. package/scripts/run/board/run-board-planning.ts +45 -0
  838. package/scripts/run/board/run-board-priority.ts +44 -0
  839. package/scripts/run/board/run-board-process-groups.ts +195 -0
  840. package/scripts/run/board/run-board-read.ts +197 -28
  841. package/scripts/run/board/run-board-reason.ts +247 -51
  842. package/scripts/run/board/run-board-released.ts +35 -0
  843. package/scripts/run/board/run-board-render-checks.ts +42 -7
  844. package/scripts/run/board/run-board-render-condition.ts +96 -0
  845. package/scripts/run/board/run-board-render-drawn.ts +78 -0
  846. package/scripts/run/board/run-board-render-foot.ts +59 -0
  847. package/scripts/run/board/run-board-render-found.ts +157 -0
  848. package/scripts/run/board/run-board-render-icon.ts +35 -0
  849. package/scripts/run/board/run-board-render-lanes.ts +145 -0
  850. package/scripts/run/board/run-board-render-lead.ts +89 -0
  851. package/scripts/run/board/run-board-render-legend.ts +136 -48
  852. package/scripts/run/board/run-board-render-notes.ts +156 -29
  853. package/scripts/run/board/run-board-render-processes.ts +196 -0
  854. package/scripts/run/board/run-board-render-section.ts +119 -0
  855. package/scripts/run/board/run-board-render-slot.ts +3 -36
  856. package/scripts/run/board/run-board-render-tail.ts +115 -48
  857. package/scripts/run/board/run-board-render-time.ts +56 -0
  858. package/scripts/run/board/run-board-render-title.ts +117 -24
  859. package/scripts/run/board/run-board-render-waits.ts +104 -20
  860. package/scripts/run/board/run-board-render.ts +264 -258
  861. package/scripts/run/board/run-board-roots.ts +54 -0
  862. package/scripts/run/board/run-board-row-yield.ts +9 -4
  863. package/scripts/run/board/run-board-setup.ts +1 -12
  864. package/scripts/run/board/run-board-snapshot.ts +111 -0
  865. package/scripts/run/board/run-board-spin.ts +3 -5
  866. package/scripts/run/board/run-board-state.ts +22 -33
  867. package/scripts/run/board/run-board-status.ts +149 -71
  868. package/scripts/run/board/run-board-thanks-read.ts +2 -2
  869. package/scripts/run/board/run-board-tick.ts +158 -114
  870. package/scripts/run/board/run-board-usage-board.ts +78 -0
  871. package/scripts/run/board/run-board-usage-lanes.ts +113 -0
  872. package/scripts/run/board/run-board-usage-listing.ts +93 -0
  873. package/scripts/run/board/run-board-usage-read.ts +120 -150
  874. package/scripts/run/board/run-board-usage-rusage.ts +19 -7
  875. package/scripts/run/board/run-board-usage-text.ts +139 -51
  876. package/scripts/run/board/run-board-usage-top.ts +102 -0
  877. package/scripts/run/board/run-board-usage.ts +89 -72
  878. package/scripts/run/board/run-board-usual.ts +20 -9
  879. package/scripts/run/carry/run-carry-args.ts +4 -7
  880. package/scripts/run/carry/run-carry-conversation.ts +1 -1
  881. package/scripts/run/carry/run-carry-ended.ts +3 -2
  882. package/scripts/run/carry/run-carry.ts +12 -6
  883. package/scripts/run/cut/run-cut-cli.ts +33 -133
  884. package/scripts/run/cut/run-cut-digest.ts +152 -0
  885. package/scripts/run/cut/run-cut-handoff.ts +54 -10
  886. package/scripts/run/cut/run-cut-report.ts +24 -3
  887. package/scripts/run/cut/run-cut-resume.ts +129 -0
  888. package/scripts/run/cut/run-cut-review.ts +105 -0
  889. package/scripts/run/cut/run-cut.ts +18 -7
  890. package/scripts/run/detached-launch.ts +1 -1
  891. package/scripts/run/entry/run-entry-cli.ts +88 -19
  892. package/scripts/run/entry/run-entry-spill.ts +83 -0
  893. package/scripts/run/entry/run-entry-stop.ts +5 -1
  894. package/scripts/run/entry/run-entry-trust.ts +91 -0
  895. package/scripts/run/event/run-event-baseline.ts +56 -0
  896. package/scripts/run/event/run-event-cli.ts +1 -5
  897. package/scripts/run/event/run-event-filed.ts +18 -6
  898. package/scripts/run/event/run-event-follow.ts +2 -3
  899. package/scripts/run/event/run-event-overrun.ts +197 -0
  900. package/scripts/run/event/run-event-render.ts +10 -10
  901. package/scripts/run/event/run-event-scope.ts +2 -2
  902. package/scripts/run/event/run-event-stream-emit.ts +82 -22
  903. package/scripts/run/event/run-event-stream.ts +58 -10
  904. package/scripts/run/hold/run-hold-adopt.ts +65 -0
  905. package/scripts/run/hold/run-hold-cli.ts +93 -22
  906. package/scripts/run/hold/run-hold-main.ts +12 -0
  907. package/scripts/run/hold/run-hold-member.ts +37 -0
  908. package/scripts/run/hold/run-stop-notify.ts +178 -0
  909. package/scripts/run/merge/run-merge-auth.ts +31 -0
  910. package/scripts/run/merge/run-merge-cap.ts +57 -0
  911. package/scripts/run/merge/run-merge-cli.ts +119 -62
  912. package/scripts/run/merge/run-merge-close.ts +74 -0
  913. package/scripts/run/merge/run-merge-collect.ts +6 -13
  914. package/scripts/run/merge/run-merge-driver.ts +71 -0
  915. package/scripts/run/merge/run-merge-main.ts +12 -0
  916. package/scripts/run/merge/run-merge-outcome.ts +25 -0
  917. package/scripts/run/merge/run-merge-restart.ts +39 -0
  918. package/scripts/run/merge/run-merge-ship.ts +33 -7
  919. package/scripts/run/merge/run-merge-signals.ts +66 -25
  920. package/scripts/run/merge/run-merge-steps.ts +162 -107
  921. package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
  922. package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
  923. package/scripts/run/merge/run-merge.ts +76 -48
  924. package/scripts/run/park/run-park-cli.ts +91 -0
  925. package/scripts/run/park/run-park.ts +88 -0
  926. package/scripts/run/park/run-stalled.ts +68 -0
  927. package/scripts/run/pause/run-pause-cli.ts +73 -0
  928. package/scripts/run/pause/run-pause.ts +251 -0
  929. package/scripts/run/progress/run-progress-cli.ts +4 -12
  930. package/scripts/run/progress/run-progress-clock.ts +1 -1
  931. package/scripts/run/progress/run-progress-config.ts +6 -14
  932. package/scripts/run/progress/run-progress-main.ts +12 -0
  933. package/scripts/run/progress/run-progress.ts +1 -4
  934. package/scripts/run/review/run-review-cli.ts +306 -20
  935. package/scripts/run/review/run-review-early-push.ts +121 -0
  936. package/scripts/run/review/run-review-join-read.ts +94 -0
  937. package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
  938. package/scripts/run/review/run-review-pinned-join.ts +216 -0
  939. package/scripts/run/review/run-review-pinned-steps.ts +383 -0
  940. package/scripts/run/review/run-review-pinned-tree.ts +37 -0
  941. package/scripts/run/review/run-review-pinned.ts +53 -0
  942. package/scripts/run/review/run-review-steps.ts +70 -34
  943. package/scripts/run/review/run-review.ts +28 -7
  944. package/scripts/run/run-ending.ts +1 -0
  945. package/scripts/run/run-invocation.ts +5 -6
  946. package/scripts/run/run-liveness-cli.ts +6 -8
  947. package/scripts/run/run-liveness.ts +60 -29
  948. package/scripts/run/run-next.ts +1 -1
  949. package/scripts/run/run-parent-cut-hook.ts +3 -4
  950. package/scripts/run/run-preflight.ts +18 -3
  951. package/scripts/run/run-prep-cli.ts +1 -10
  952. package/scripts/run/run-prep-locate.ts +7 -50
  953. package/scripts/run/run-prep-main.ts +12 -0
  954. package/scripts/run/run-prep.ts +7 -0
  955. package/scripts/run/run-report-cli.ts +101 -13
  956. package/scripts/run/run-report-handoff.ts +114 -0
  957. package/scripts/run/run-stage-read.ts +2 -6
  958. package/scripts/run/run-step-cli.ts +17 -5
  959. package/scripts/run/run-step-lane-plan.ts +27 -0
  960. package/scripts/run/run-step-section.ts +26 -7
  961. package/scripts/run/run-step.ts +6 -3
  962. package/scripts/run/run-stranded-detect.ts +13 -0
  963. package/scripts/run/run-watcher-guard-cli.ts +1 -1
  964. package/scripts/run/run-watcher-guard.ts +1 -1
  965. package/scripts/run/ship/run-ship-args.ts +140 -0
  966. package/scripts/run/ship/run-ship-body-draft.ts +110 -0
  967. package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
  968. package/scripts/run/ship/run-ship-cli.ts +181 -166
  969. package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
  970. package/scripts/run/ship/run-ship-detach.ts +29 -12
  971. package/scripts/run/ship/run-ship-handover.ts +106 -0
  972. package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
  973. package/scripts/run/ship/run-ship-lap.ts +63 -0
  974. package/scripts/run/ship/run-ship-next.ts +44 -27
  975. package/scripts/run/ship/run-ship-overlap.ts +49 -7
  976. package/scripts/run/ship/run-ship-place.ts +103 -0
  977. package/scripts/run/ship/run-ship-planned.ts +92 -0
  978. package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
  979. package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
  980. package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
  981. package/scripts/run/ship/run-ship-preflight.ts +150 -33
  982. package/scripts/run/ship/run-ship-probe.ts +28 -6
  983. package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
  984. package/scripts/run/ship/run-ship-relaunch.ts +51 -0
  985. package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
  986. package/scripts/run/ship/run-ship-return.ts +183 -25
  987. package/scripts/run/ship/run-ship-review-reason.ts +24 -0
  988. package/scripts/run/ship/run-ship-review-steps.ts +296 -171
  989. package/scripts/run/ship/run-ship-review.ts +222 -35
  990. package/scripts/run/ship/run-ship-reviewer.ts +303 -0
  991. package/scripts/run/ship/run-ship-scoped.ts +39 -10
  992. package/scripts/run/ship/run-ship-stage.ts +101 -16
  993. package/scripts/run/ship/run-ship-steps.ts +68 -17
  994. package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
  995. package/scripts/run/ship/run-ship-stop-context.ts +50 -13
  996. package/scripts/run/ship/run-ship-stop-text.ts +11 -6
  997. package/scripts/run/ship/run-ship-sync.ts +212 -34
  998. package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
  999. package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
  1000. package/scripts/run/ship/run-ship-waiter.ts +114 -0
  1001. package/scripts/run/ship/run-ship.ts +44 -2
  1002. package/scripts/run/tidy/run-tidy-cli.ts +0 -4
  1003. package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
  1004. package/scripts/run/tidy/run-tidy-main.ts +8 -0
  1005. package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
  1006. package/scripts/run/wake/run-wake-cli.ts +121 -209
  1007. package/scripts/run/wake/run-wake-code.ts +125 -0
  1008. package/scripts/run/wake/run-wake-driver.ts +22 -9
  1009. package/scripts/run/wake/run-wake-finish.ts +137 -0
  1010. package/scripts/run/wake/run-wake-loop.ts +36 -3
  1011. package/scripts/run/wake/run-wake-main.ts +13 -0
  1012. package/scripts/run/wake/run-wake-ports.ts +98 -0
  1013. package/scripts/run/wake/run-wake-session.ts +2 -0
  1014. package/scripts/run/wake/run-wake-takeover.ts +66 -0
  1015. package/scripts/run/wake/run-wake.ts +5 -3
  1016. package/scripts/safe-chain/ci-installer-pin.ts +49 -8
  1017. package/scripts/safe-chain/pack-hook.ts +2 -2
  1018. package/scripts/safe-chain/preinstall-command.ts +2 -1
  1019. package/scripts/safe-chain/project-config.ts +6 -11
  1020. package/scripts/security/secretlint-scan.ts +42 -9
  1021. package/scripts/security/security-audit-main.ts +8 -0
  1022. package/scripts/security/security-audit-provision-logic.ts +0 -11
  1023. package/scripts/security/security-audit-provision-main.ts +20 -0
  1024. package/scripts/security/security-audit-provision.ts +12 -27
  1025. package/scripts/security/security-audit.ts +27 -8
  1026. package/scripts/security/sonar-file.ts +10 -5
  1027. package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
  1028. package/scripts/split/split-assess-cli.ts +2 -2
  1029. package/scripts/split/split-assess.ts +25 -1
  1030. package/scripts/split/split-early-notice.ts +116 -0
  1031. package/scripts/split/split-measure.ts +83 -0
  1032. package/scripts/split/split-resolution.ts +107 -0
  1033. package/scripts/sync/claude-settings-merge.ts +8 -15
  1034. package/scripts/sync/directory-copy-guard.ts +4 -9
  1035. package/scripts/sync/file-content.ts +78 -8
  1036. package/scripts/sync/sync-ai-files.ts +3 -5
  1037. package/scripts/sync/sync-configs.ts +11 -23
  1038. package/scripts/sync/sync-hook-safety.ts +4 -10
  1039. package/scripts/sync/sync-main.ts +11 -0
  1040. package/scripts/sync/sync.ts +25 -37
  1041. package/scripts/test/direct-importers.ts +185 -0
  1042. package/scripts/test/pure-files-entries.ts +83 -0
  1043. package/scripts/test/related-heavy-tests.ts +81 -0
  1044. package/scripts/test/test-declared-changed.ts +2 -2
  1045. package/scripts/test/test-declared.ts +1 -1
  1046. package/scripts/test/test-e2e-guard.ts +25 -1
  1047. package/scripts/test/test-e2e-stamp.ts +38 -0
  1048. package/scripts/test/test-no-base.ts +88 -0
  1049. package/scripts/test/test-pinned-cache-logic.ts +363 -0
  1050. package/scripts/test/test-pinned-cache.ts +337 -0
  1051. package/scripts/test/test-pinned-emit.ts +49 -0
  1052. package/scripts/test/test-pinned-functions.ts +116 -0
  1053. package/scripts/test/test-pinned-ledger.ts +80 -0
  1054. package/scripts/test/test-pinned-logic.ts +333 -0
  1055. package/scripts/test/test-pinned-main.ts +144 -0
  1056. package/scripts/test/test-pinned-pool.ts +73 -0
  1057. package/scripts/test/test-pinned-probe.ts +254 -0
  1058. package/scripts/test/test-pinned-prune-logic.ts +118 -0
  1059. package/scripts/test/test-pinned-reach.ts +194 -0
  1060. package/scripts/test/test-pinned-record.ts +196 -0
  1061. package/scripts/test/test-pinned-rewire.ts +148 -0
  1062. package/scripts/test/test-pinned-spawn.ts +81 -0
  1063. package/scripts/test/test-pinned-stage.ts +70 -0
  1064. package/scripts/test/test-pinned.ts +311 -0
  1065. package/scripts/test/test-reach-cli.ts +61 -0
  1066. package/scripts/test/test-read-map.ts +288 -0
  1067. package/scripts/test/test-read-recording.ts +103 -0
  1068. package/scripts/test/test-read-trace.ts +166 -0
  1069. package/scripts/test/test-red-logic.ts +46 -7
  1070. package/scripts/test/test-red-main.ts +12 -0
  1071. package/scripts/test/test-red.ts +39 -37
  1072. package/scripts/test/test-related-claim.ts +37 -0
  1073. package/scripts/test/test-related-main.ts +21 -0
  1074. package/scripts/test/test-related-moved.ts +91 -0
  1075. package/scripts/test/test-related-record.ts +139 -0
  1076. package/scripts/test/test-related-scope.ts +292 -41
  1077. package/scripts/test/test-related-synced.ts +135 -0
  1078. package/scripts/test/test-related-touched.ts +84 -0
  1079. package/scripts/test/test-related.ts +381 -19
  1080. package/scripts/test/test-unit-guard-main.ts +15 -0
  1081. package/scripts/test/test-unit-guard.ts +66 -25
  1082. package/scripts/test/unit-count-file.ts +37 -0
  1083. package/scripts/test/unit-durations.ts +41 -0
  1084. package/scripts/test/unit-run-marker.ts +162 -0
  1085. package/scripts/test/unit-setup-files.ts +51 -0
  1086. package/scripts/test/unit-worker-share.ts +64 -151
  1087. package/scripts/test/vitest-cache-directory.ts +19 -0
  1088. package/scripts/test/vitest-cli-excludes.ts +14 -0
  1089. package/scripts/test/vitest-failure-summary.ts +111 -0
  1090. package/scripts/test/whole-suite-files.ts +74 -0
  1091. package/scripts/time-runtime/time-background.ts +20 -2
  1092. package/scripts/time-runtime/time-batch-guard.ts +42 -4
  1093. package/scripts/time-runtime/time-bundle-call.ts +1 -1
  1094. package/scripts/time-runtime/time-bundles.ts +40 -8
  1095. package/scripts/time-runtime/time-density-hook.ts +8 -6
  1096. package/scripts/time-runtime/time-followup-stage.ts +1 -3
  1097. package/scripts/time-runtime/time-format.ts +5 -28
  1098. package/scripts/time-runtime/time-markers.ts +12 -3
  1099. package/scripts/time-runtime/time-search-call.ts +38 -0
  1100. package/scripts/time-runtime/time-shell.ts +98 -11
  1101. package/scripts/time-runtime/time-transcript-line.ts +65 -66
  1102. package/scripts/uninstall/uninstall.ts +1 -1
  1103. package/scripts/version/bump-version-main.ts +12 -0
  1104. package/scripts/version/bump-version.ts +25 -25
  1105. package/scripts/version/development-engines-verdict.ts +124 -0
  1106. package/scripts/version/effective-upstream.ts +6 -12
  1107. package/scripts/version/latest-corepack.ts +19 -32
  1108. package/scripts/version/latest-if-required-cli.ts +93 -0
  1109. package/scripts/version/latest-lane-guard-main.ts +8 -0
  1110. package/scripts/version/latest-lane-guard.ts +0 -4
  1111. package/scripts/version/latest-scope-cli.ts +0 -9
  1112. package/scripts/version/latest-scope-main.ts +12 -0
  1113. package/scripts/version/latest-update.ts +5 -5
  1114. package/scripts/version/npm-registry.ts +44 -6
  1115. package/scripts/version/publishable-range-check.ts +5 -16
  1116. package/scripts/version/release-age.ts +1 -1
  1117. package/scripts/version/release-hold.ts +1 -1
  1118. package/scripts/version/release-window.ts +38 -0
  1119. package/scripts/version/running-binary.ts +1 -1
  1120. package/scripts/version/safe-chain-version-update.ts +3 -8
  1121. package/scripts/version/version-targets.ts +6 -28
  1122. package/templates/dependabot.yml +29 -0
  1123. package/templates/gitignore +6 -1
  1124. package/templates/pnpm-workspace.basic.yaml +1 -1
  1125. package/templates/sonar-project.properties +3 -2
  1126. package/templates/workflows/ci.yml +53 -4
  1127. package/templates/workflows/github-release.yml +4 -0
  1128. package/tsconfig.sonar.json +1 -1
  1129. package/.ncurc.json +0 -3
  1130. package/dist/hooks/batch-guard.js +0 -29
  1131. package/dist/hooks/chunk-4KKD2UTK.js +0 -66
  1132. package/dist/hooks/chunk-6TS2JD6D.js +0 -237
  1133. package/dist/hooks/chunk-7DSBJVFH.js +0 -50
  1134. package/dist/hooks/chunk-A65Y4YOR.js +0 -79
  1135. package/dist/hooks/chunk-APUO6U4J.js +0 -2451
  1136. package/dist/hooks/chunk-CDY4NFQG.js +0 -15
  1137. package/dist/hooks/chunk-DGT54IH5.js +0 -161
  1138. package/dist/hooks/chunk-EFXE6C37.js +0 -81
  1139. package/dist/hooks/chunk-GP4IEC4O.js +0 -20
  1140. package/dist/hooks/chunk-JP45SOCJ.js +0 -56
  1141. package/dist/hooks/chunk-LAOV7NLM.js +0 -45
  1142. package/dist/hooks/chunk-M4HGZV7U.js +0 -83
  1143. package/dist/hooks/chunk-O6GDRNJB.js +0 -343
  1144. package/dist/hooks/chunk-PF2NZL2A.js +0 -131
  1145. package/dist/hooks/chunk-PTICX4OL.js +0 -358
  1146. package/dist/hooks/chunk-RT27QRJW.js +0 -6247
  1147. package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
  1148. package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
  1149. package/dist/hooks/chunk-UPUZF3AN.js +0 -279
  1150. package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
  1151. package/dist/hooks/duplicate-read-guard.js +0 -30
  1152. package/dist/hooks/investigation-guard.js +0 -29
  1153. package/scripts/backlog/backlog-stalled-cli.ts +0 -30
  1154. package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
  1155. package/scripts/cost-runtime/cost-format.ts +0 -29
  1156. package/scripts/init/basic-path-migration.ts +0 -24
  1157. package/scripts/issue/issue-backlinks-cli.ts +0 -93
  1158. package/scripts/josh/josh-commands-guard.ts +0 -38
  1159. package/scripts/josh/josh-usage-automation.ts +0 -121
  1160. package/scripts/josh/josh-usage-backlog.ts +0 -180
  1161. package/scripts/josh/josh-usage-developer.ts +0 -230
  1162. package/scripts/josh/josh-usage-hooks.ts +0 -38
  1163. package/scripts/josh/josh-usage-issue.ts +0 -205
  1164. package/scripts/josh/josh-usage-review.ts +0 -101
  1165. package/scripts/josh/josh-usage-run.ts +0 -252
  1166. package/scripts/josh/josh-usage-session.ts +0 -238
  1167. package/scripts/josh/josh-usage-workflow.ts +0 -212
  1168. package/scripts/lint/cross-file-recheck.ts +0 -155
  1169. package/scripts/registry-migration/migrate-logic.ts +0 -237
  1170. package/scripts/registry-migration/migrate.ts +0 -292
  1171. package/scripts/registry-migration/user-npmrc.ts +0 -15
  1172. package/scripts/rules/filing-cap.ts +0 -132
  1173. package/scripts/rules/rule-guard.ts +0 -23
  1174. package/scripts/rules/rule-registry-rows.ts +0 -292
  1175. package/scripts/rules/rule-registry.ts +0 -112
  1176. package/scripts/run/run-stranded-cli.ts +0 -27
@@ -1,21 +1,27 @@
1
1
  import { styleText } from 'node:util'
2
- import { backlog_budget } from '#scripts/backlog/backlog-budget'
3
2
  import type { BudgetWait } from '#scripts/gate/core-wait'
3
+ import { MS_PER_MINUTE } from '#scripts/lib/timeouts'
4
+ import { run_board_estimate } from './run-board-estimate'
4
5
  import { run_board_fit } from './run-board-fit'
6
+ import type { FoundOf } from './run-board-found'
5
7
  import { run_board_fresh } from './run-board-fresh'
6
8
  import { run_board_labels } from './run-board-labels'
7
9
  import { run_board_layout, type BoardLayout, type BoardRow } from './run-board-layout'
8
10
  import { run_board_machine, type MachineGauges } from './run-board-machine'
9
11
  import { run_board_now, type NowLine } from './run-board-now'
10
12
  import type { SessionOperations } from './run-board-operation-read'
13
+ import { run_board_priority } from './run-board-priority'
14
+ import type { ProcessGroups } from './run-board-process-groups'
11
15
  import { run_board_render_slot } from './run-board-render-slot'
16
+ import { run_board_render_title } from './run-board-render-title'
12
17
  import type { RunActivity } from './run-board-status'
13
- import type { LaneUsages } from './run-board-usage'
18
+ import type { LaneUsages, UsageScale } from './run-board-usage'
14
19
  import type { UsualTimes } from './run-board-usual'
15
20
 
16
21
  // The top of `run:board`: whether the run is moving, how long it has run, how fresh its last event is,
17
22
  // and how far through the plan it is. Every time comes from a record (the carry's start, the stream's
18
- // events); nothing here guesses one. Two lines of symbols rather than sentences: the `⏰` that moves
23
+ // events); nothing here guesses one, but the estimated finish after the progress bar, which is drawn `~`
24
+ // as the estimate it is (`run-board-estimate.ts`). Two lines of symbols rather than sentences: the `⏰` that moves
19
25
  // every second is the proof the board is live, so no `updated` line is drawn. **Always three lines,
20
26
  // the first two in three columns**: the run's mark and name over its repository's, the run's age over
21
27
  // the `💓`, then the progress over the machine the run is on — so the first line reads as how far the
@@ -28,6 +34,9 @@ import type { UsualTimes } from './run-board-usual'
28
34
 
29
35
  const { HEADER_ICONS, STATE_ICONS, WORDS, bar_of, minute_of, span_of } = run_board_labels
30
36
  const { cell_of } = run_board_render_slot
37
+ const { title_of } = run_board_render_title
38
+ // The columns a failed read's reason is cut to, so the header keeps its line.
39
+ const REASON_LIMIT = 40
31
40
  const { padded } = run_board_fresh
32
41
  const aged_fresh = run_board_fresh.aged
33
42
  const UNKNOWN = '-'
@@ -37,7 +46,7 @@ const { GAP, PERCENT_WIDTH } = run_board_machine
37
46
  // A running run whose newest event is older than this is drawn as stale, so a hang stands out; past
38
47
  // twice that it is drawn as alarming.
39
48
  const STALE_MINUTES = 15
40
- const STALE_MS = STALE_MINUTES * backlog_budget.MS_PER_MINUTE
49
+ const STALE_MS = STALE_MINUTES * MS_PER_MINUTE
41
50
  const ALARM_FACTOR = 2
42
51
  const ALARM_MS = STALE_MS * ALARM_FACTOR
43
52
  const RUN_NAME = 'backlogrun'
@@ -47,6 +56,14 @@ const RUN_NAME = 'backlogrun'
47
56
  // means nothing.
48
57
  type BoardForm = 'screen' | 'chat'
49
58
 
59
+ // What the lane cells and the processes section are drawn from, and the machine a gauge's width
60
+ // stands for.
61
+ interface BoardUsage {
62
+ lanes: LaneUsages
63
+ processes: ProcessGroups
64
+ scale: UsageScale
65
+ }
66
+
50
67
  interface BoardHeader {
51
68
  now_ms: number
52
69
  started_ms: number
@@ -60,16 +77,27 @@ interface BoardHeader {
60
77
  baseline_total: number | undefined
61
78
  plan_fetched_ms: number | undefined
62
79
  plan_failed_ms: number | undefined
80
+ // When the reads off this machine last failed (`run-board-gather-thread.ts`); none once they answer.
81
+ read_failed_ms?: number | undefined
82
+ // Why they failed, drawn beside the failure.
83
+ read_error?: string | undefined
63
84
  // Whether a plan read is in flight.
64
85
  is_plan_loading: boolean
65
86
  // The machine's gauges, `undefined` before the first sample.
66
87
  machine: MachineGauges | undefined
67
- // Each running lane's CPU and memory, `undefined` where none could be read.
68
- usages?: LaneUsages | undefined
88
+ // Each running lane's and each process group's usage, `undefined` where none could be read.
89
+ usages?: BoardUsage | undefined
69
90
  // The claims waiting in the machine-wide core budget (`run-board-render-waits.ts`).
70
91
  budget_waits?: ReadonlyArray<BudgetWait> | undefined
71
92
  // How long each phase usually takes; a running row's phase time is colored against it.
72
93
  usual?: UsualTimes | undefined
94
+ // How many lanes the run may hold at once, which the estimated finish stacks the waiting children on.
95
+ lane_limit?: number | undefined
96
+ // What each done row says after its time (`run-board-found.ts`); none where nothing was read.
97
+ found?: FoundOf | undefined
98
+ // Whether `JOSH_LANE_INVESTIGATION` is on; off, a merged row hides its minutes and investigation
99
+ // (joshuafolkken/kit#5132, joshuafolkken/kit#5194).
100
+ is_investigation_on: boolean
73
101
  // The spinner's frame a running run and a running row turn, `undefined` where the output is not a
74
102
  // terminal and they draw their still icons.
75
103
  spinner: string | undefined
@@ -79,6 +107,8 @@ interface BoardHeader {
79
107
  // An issue reference as the board draws it — `3450` or `owner/repo#12` — made a link where the
80
108
  // terminal opens one.
81
109
  link: (reference: string) => string
110
+ // A pull request's number, made a link to it where the terminal opens one (joshuafolkken/kit#4625).
111
+ pull_link: (number: number) => string
82
112
  }
83
113
 
84
114
  interface BoardCounts {
@@ -126,7 +156,9 @@ function quiet_mark(header: BoardHeader): RunMark {
126
156
 
127
157
  if (header.activity.setup !== undefined) return 'setup'
128
158
 
129
- return layout?.waves.length === 0 && layout.people.length > 0 ? 'human' : 'idle'
159
+ return layout?.queued.length === 0 && run_board_layout.people_of(layout).length > 0
160
+ ? 'human'
161
+ : 'idle'
130
162
  }
131
163
 
132
164
  // The run's state, each state overriding the ones below it.
@@ -250,13 +282,13 @@ function time_parts(header: BoardHeader, mark: RunMark, now: NowLine | undefined
250
282
  ]
251
283
  }
252
284
 
253
- // A plan fetch is said only when it failed — the board otherwise keeps quiet about a routine read.
254
- function plan_warning(header: BoardHeader): string | undefined {
255
- const failed = header.plan_failed_ms
256
-
285
+ // A read is said only when it failed — the board otherwise keeps quiet about a routine read — and why,
286
+ // where that is known, cut so it never pushes the line past its pane.
287
+ function warning_of(word: string, failed: number | undefined, reason?: string): string | undefined {
257
288
  if (failed === undefined) return undefined
289
+ const why = reason === undefined || reason === '' ? '' : ` ${title_of(reason, REASON_LIMIT)}`
258
290
 
259
- return styleText('yellow', `⚠ ${WORDS.plan} ${minute_of(failed)}`)
291
+ return styleText('yellow', `${HEADER_ICONS.warning} ${word} ${minute_of(failed)}${why}`)
260
292
  }
261
293
 
262
294
  // A plan read in flight turns the spinner after ⏳ and says nothing more; a
@@ -307,20 +339,39 @@ function tally_part(counts: BoardCounts, header: BoardHeader): string {
307
339
  return `${STATE_ICONS.merged} ${tally} ${bar}`
308
340
  }
309
341
 
310
- function progress_parts(counts: BoardCounts, header: BoardHeader): Array<string> {
342
+ // The estimated finish after the bar (`run-board-estimate.ts`), once the plan says what is left to run.
343
+ // A stopped run advances nothing, so an estimate would count down to a finish that never comes.
344
+ function estimate_part(header: BoardHeader): string | undefined {
345
+ const is_moving = is_plan_read(header) && !header.activity.is_stopped
346
+
347
+ return is_moving ? run_board_estimate.part_of(header) : undefined
348
+ }
349
+
350
+ // The ⏳ count with the priorities among it (joshuafolkken/kit#4383).
351
+ function waiting_of(counts: BoardCounts, header: BoardHeader): string {
352
+ return `${String(counts.remaining)}${run_board_priority.tally_of(layout_of(header))}`
353
+ }
354
+
355
+ function progress_parts(counts: BoardCounts, header: BoardHeader): Array<string | undefined> {
311
356
  const is_read = is_plan_read(header)
312
357
 
313
358
  return [
314
359
  `${tally_part(counts, header)}${is_read ? plus_of(counts, header) : ''}`,
360
+ estimate_part(header),
315
361
  `${STATE_ICONS.running} ${String(counts.running)}`,
316
- `${STATE_ICONS.waiting} ${is_read ? String(counts.remaining) : UNKNOWN}`,
362
+ `${STATE_ICONS.waiting} ${is_read ? waiting_of(counts, header) : UNKNOWN}`,
317
363
  `${STATE_ICONS.parked} ${String(counts.parked)}`,
318
364
  ]
319
365
  }
320
366
 
321
- // The run's progress, then what its plan read is doing.
367
+ // The run's progress, then what its reads are doing.
322
368
  function progress_part(counts: BoardCounts, header: BoardHeader): string {
323
- const parts = [...progress_parts(counts, header), loading_part(header), plan_warning(header)]
369
+ const parts = [
370
+ ...progress_parts(counts, header),
371
+ loading_part(header),
372
+ warning_of(WORDS.plan, header.plan_failed_ms),
373
+ warning_of(WORDS.read, header.read_failed_ms, header.read_error),
374
+ ]
324
375
 
325
376
  return parts.filter((part) => part !== undefined).join(GAP)
326
377
  }
@@ -342,7 +393,7 @@ function now_line(counts: BoardCounts, header: BoardHeader): NowLine | undefined
342
393
  children: running_issues(layout_of(header)),
343
394
  running: counts.running,
344
395
  waiting: is_plan_read(header) ? counts.remaining : undefined,
345
- people: layout_of(header).people.length,
396
+ people: run_board_layout.people_of(layout_of(header)).length,
346
397
  })
347
398
  }
348
399
 
@@ -375,7 +426,7 @@ function column_of(cells: ReadonlyArray<string>): Array<string> {
375
426
  }
376
427
 
377
428
  // The run's name, age and progress, then its repository, heartbeat and machine under them, then what
378
- // it is doing now — its time under theirs, its kind's icon under the `⚡`, the name's column left blank
429
+ // it is doing now — its time under theirs, its kind's icon under the `💪`, the name's column left blank
379
430
  // and no label — in every state the board can be in. A stream with no event yet leaves it blank.
380
431
  function header_lines(header: BoardHeader): Array<string> {
381
432
  const counts = counts_of(layout_of(header))
@@ -397,7 +448,26 @@ function now_legend(header: BoardHeader): string | undefined {
397
448
  return now?.legend === undefined ? undefined : `${now.icon} ${now.legend}`
398
449
  }
399
450
 
400
- const run_board_header = { aged, counts_of, header_lines, is_plan_read, now_legend }
451
+ // The estimated finish as the legend names it, on a frame that draws it alone.
452
+ function estimate_legend(header: BoardHeader): string | undefined {
453
+ return estimate_part(header) === undefined ? undefined : run_board_estimate.LEGEND
454
+ }
455
+
456
+ // The third line's icon, so the legend names the phase it draws.
457
+ function now_icon(header: BoardHeader): string | undefined {
458
+ return now_line(counts_of(layout_of(header)), header)?.icon
459
+ }
460
+
461
+ const run_board_header = {
462
+ aged,
463
+ counts_of,
464
+ estimate_legend,
465
+ header_lines,
466
+ is_plan_read,
467
+ now_icon,
468
+ now_legend,
469
+ warning_of,
470
+ }
401
471
 
402
472
  export { run_board_header }
403
- export type { BoardCounts, BoardForm, BoardHeader }
473
+ export type { BoardCounts, BoardForm, BoardHeader, BoardUsage }
@@ -0,0 +1,58 @@
1
+ import type { SectionKey } from './run-board-fit'
2
+ import { run_board_fold } from './run-board-fold'
3
+
4
+ // The keys a live `run:board` reads: one per section, folding it or unfolding it (`run-board-fold.ts`).
5
+ // The terminal is put in raw mode so a key arrives without Enter, which also stops it from turning
6
+ // Ctrl-C into SIGINT — so Ctrl-C is read as a key and quits, and leaving puts the terminal back.
7
+
8
+ const CTRL_C = '\u{3}'
9
+
10
+ // The keyboard as the board uses it; `interrupt` is what Ctrl-C does once raw mode reads it as a key.
11
+ interface KeyInput {
12
+ is_tty: boolean
13
+ raw: (is_raw: boolean) => void
14
+ listen: (on_data: (chunk: string) => void) => void
15
+ close: () => void
16
+ interrupt: () => void
17
+ }
18
+
19
+ // The sections folded so far, read at every redraw — none where no key can be read — and what puts the
20
+ // terminal back.
21
+ interface KeyReading {
22
+ folded: (() => ReadonlySet<SectionKey>) | undefined
23
+ stop?: (() => void) | undefined
24
+ }
25
+
26
+ // What a chunk of keys leaves folded, each key in the order typed.
27
+ function folded_by(folded: ReadonlySet<SectionKey>, chunk: string): ReadonlySet<SectionKey> {
28
+ let next = folded
29
+
30
+ for (const key of chunk) next = run_board_fold.toggled(next, key)
31
+
32
+ return next
33
+ }
34
+
35
+ function read_keys(input: KeyInput | undefined): KeyReading {
36
+ if (input?.is_tty !== true) return { folded: undefined }
37
+
38
+ let folded: ReadonlySet<SectionKey> = new Set()
39
+
40
+ input.raw(true)
41
+ input.listen((chunk) => {
42
+ if (chunk.includes(CTRL_C)) input.interrupt()
43
+ else folded = folded_by(folded, chunk)
44
+ })
45
+
46
+ return {
47
+ folded: () => folded,
48
+ stop: () => {
49
+ input.raw(false)
50
+ input.close()
51
+ },
52
+ }
53
+ }
54
+
55
+ const run_board_keys = { CTRL_C, read_keys }
56
+
57
+ export { run_board_keys }
58
+ export type { KeyInput, KeyReading }
@@ -4,6 +4,8 @@ import {
4
4
  BUGFIX_LABEL,
5
5
  ENHANCEMENT_LABEL,
6
6
  has_label_name,
7
+ PRIORITY_CRITICAL_LABEL,
8
+ PRIORITY_HIGH_LABEL,
7
9
  } from '#scripts/issue/issue-labels'
8
10
  import type { FiledKind } from '#scripts/run/event/run-event-filed'
9
11
 
@@ -12,12 +14,9 @@ import type { FiledKind } from '#scripts/run/event/run-event-filed'
12
14
  // there. An issue with labels from several takes the first, as the release notes do; one with none is
13
15
  // an Other Change and draws no kind.
14
16
 
15
- const SEMVER_MAJOR_LABEL = 'Semver-Major'
16
- const SEMVER_MINOR_LABEL = 'Semver-Minor'
17
-
18
17
  const RELEASE_KINDS: ReadonlyArray<readonly [FiledKind, ReadonlyArray<string>]> = [
19
- ['breaking-change', [BREAKING_CHANGE_LABEL, SEMVER_MAJOR_LABEL]],
20
- ['enhancement', [ENHANCEMENT_LABEL, SEMVER_MINOR_LABEL]],
18
+ ['breaking-change', [BREAKING_CHANGE_LABEL]],
19
+ ['enhancement', [ENHANCEMENT_LABEL]],
21
20
  ['bug', [BUGFIX_LABEL, BUG_LABEL]],
22
21
  ]
23
22
 
@@ -30,6 +29,21 @@ function kind_of(labels: ReadonlyArray<string> | undefined): FiledKind | undefin
30
29
  return RELEASE_KINDS.find(([, names]) => names.some((name) => has_label_name(labels, name)))?.[0]
31
30
  }
32
31
 
33
- const run_board_kind = { KIND_ORDER, kind_of }
32
+ // The priority a row is drawn with (joshuafolkken/kit#4383): critical over high, none for the rest.
33
+ type BoardPriority = 'critical' | 'high'
34
+
35
+ const PRIORITIES: ReadonlyArray<readonly [BoardPriority, string]> = [
36
+ ['critical', PRIORITY_CRITICAL_LABEL],
37
+ ['high', PRIORITY_HIGH_LABEL],
38
+ ]
39
+
40
+ function priority_of(labels: ReadonlyArray<string> | undefined): BoardPriority | undefined {
41
+ if (labels === undefined) return undefined
42
+
43
+ return PRIORITIES.find(([, name]) => has_label_name(labels, name))?.[0]
44
+ }
45
+
46
+ const run_board_kind = { KIND_ORDER, kind_of, priority_of }
34
47
 
48
+ export type { BoardPriority }
35
49
  export { run_board_kind }
@@ -1,22 +1,19 @@
1
1
  import { WriteStream } from 'node:tty'
2
2
  import { styleText } from 'node:util'
3
+ import { figure_format } from '#scripts/lib/figure-format'
3
4
  import type { FiledKind } from '#scripts/run/event/run-event-filed'
4
5
  import { run_event_setup } from '#scripts/run/event/run-event-setup'
5
6
  import cli_spinners from 'cli-spinners'
7
+ import { run_board_length } from './run-board-length'
6
8
  import type { BoardNote } from './run-board-notes'
7
9
  import type { Phase } from './run-board-phase'
8
10
  import type { ItemState } from './run-board-status'
9
11
 
10
12
  // The words and the clock `run:board` draws with. A moment on the board is a local clock, `HH:MM`
11
- // where a person reads it to the minute; how long a row or the heartbeat has run is a short `MM:SS`,
12
- // and how long the run has run or its wait has left is `H:MM:SS` — two separators are a length and one
13
- // is a time of day, so the header's time column never reads a length as a moment.
14
-
15
- const CLOCK_WIDTH = 2
16
- const CLOCK_PAD = '0'
17
- const MS_PER_SECOND = 1000
18
- const SECONDS_PER_MINUTE = 60
19
- const MINUTES_PER_HOUR = 60
13
+ // where a person reads it to the minute; every length — how long the run, a row, a phase or the
14
+ // heartbeat has run — is degree-minute-second style (`1°15′57″`), so `:` is a time of day alone and
15
+ // the board never reads a length as a moment.
16
+
20
17
  // Every gauge is this wide — the plan, the machine and a row's phase.
21
18
  const BAR_WIDTH = 10
22
19
  // A centered square done and a thin line left: the shapes alone tell the two apart where no color is
@@ -40,15 +37,44 @@ const DEFAULT_FOREGROUND = `${ESC}[39m`
40
37
  const WORDS = {
41
38
  no_run: 'no run',
42
39
  plan: 'plan',
40
+ // The reads off this machine — the run's stream, its lanes and the gauges — that last failed.
41
+ read: 'read',
43
42
  merged: 'merged',
44
43
  parked: 'parked',
45
44
  done: 'done',
46
45
  withdrawn: 'withdrawn',
47
46
  in_progress: 'running',
48
47
  stopped: 'stopped',
48
+ paused: 'paused',
49
+ earlier: 'earlier run',
50
+ unknown: 'lane state unknown',
49
51
  waiting: 'waiting',
52
+ queued: 'queued',
53
+ not_before: 'not before',
50
54
  decision: 'decision',
51
55
  waits: 'waits on',
56
+ // What a waiting row waits on, where the legend names its icon.
57
+ opening: 'opening lane',
58
+ installing: 'installing',
59
+ dispatching: 'dispatching',
60
+ lane: 'free lane',
61
+ path: 'path held',
62
+ named: 'named order',
63
+ held: 'held by triage',
64
+ headroom: 'memory headroom',
65
+ usage_limit: 'usage limit',
66
+ untriaged: 'untriaged',
67
+ solo: 'runs alone',
68
+ solo_ahead: 'behind solo',
69
+ solo_running: 'solo running',
70
+ // A blocker this run will not finish, which a person has to move (joshuafolkken/kit#4292).
71
+ on_human: 'needs a person',
72
+ // A lane held back by the machine-wide core budget, and why.
73
+ held_check: 'held',
74
+ memory: 'waits for memory',
75
+ cores: 'waits for CPU',
76
+ // How long a lane has run, which the lanes rule's ⏰ stands over.
77
+ elapsed: 'elapsed',
52
78
  investigate: 'investigate',
53
79
  implement: 'implement',
54
80
  ship: 'ship',
@@ -60,21 +86,24 @@ const WORDS = {
60
86
  followup: 'followup',
61
87
  report: 'report',
62
88
  failed: 'failed',
63
- notes: 'findings and decisions',
89
+ notes: 'findings',
64
90
  more: 'more',
65
91
  filed: 'filed',
92
+ filed_run: 'filed this run',
66
93
  breaking: 'breaking',
67
94
  feature: 'feature',
68
95
  fix: 'fix',
69
96
  park: 'park',
70
97
  note: 'note',
71
98
  found_during: ' (found during {n})',
99
+ overrun: 'overrun investigation',
72
100
  // What the run is doing now, where no stage of its own says it.
73
101
  watching: 'watching',
74
102
  pool_empty: 'pool empty',
75
103
  on_person: 'waiting on a person',
76
104
  operation: 'operation',
77
105
  ended: 'ended',
106
+ estimate: 'estimated finish',
78
107
  // The session a stopped run waits in, and what closing the board leaves.
79
108
  resume: 'stopped — resume with',
80
109
  keeps_running: 'Closing this screen leaves the run going · reopen with `pnpm josh backlogrun`',
@@ -105,12 +134,21 @@ const STATE_ICONS: Readonly<Record<ItemState, string>> = {
105
134
  waiting: '⏳',
106
135
  human: '🙋',
107
136
  stopped: '🛑',
137
+ paused: '🧊',
108
138
  withdrawn: '🚫',
139
+ unknown: '❔',
109
140
  }
110
141
 
111
142
  // The blocking edge, chosen on the same rule: ⛓ is a text symbol.
112
143
  const WAITS_ICON = '🔗'
113
144
 
145
+ // A waiting row that waits on the start time its body declares rather than on a blocker
146
+ // (joshuafolkken/kit#4079), chosen on the same rule: 🗓 is a text symbol.
147
+ const NOT_BEFORE_ICON = '📅'
148
+
149
+ // The lanes section's rule, and a waiting row that waits on a free lane.
150
+ const LANES_ICON = '🧵'
151
+
114
152
  // A running row's phases as icons, chosen on the same rule; the row draws every phase it has passed,
115
153
  // so the rightmost icon is what it is doing now. Each of `josh ship`'s stages has its own; ⚓ rather
116
154
  // than 🔁, which reads as a retry.
@@ -149,6 +187,13 @@ const PHASE_WORDS: Readonly<Record<Phase, keyof Words>> = {
149
187
  // phase and state icon, so the legend names them and a row needs no word. 🆕 is a filed issue whose
150
188
  // kind is none of `FILED_KIND_ICONS`.
151
189
  const NOTES_ICON = '📌'
190
+ // A plan row the run filed leads its title with it, in place of a findings line naming it again
191
+ // (joshuafolkken/kit#4099).
192
+ const FILED_RUN_MARK = '✚'
193
+ // A merged row whose overrun investigation is running ends on it where no spinner turns
194
+ // (joshuafolkken/kit#4772), and leads its result once it ended (joshuafolkken/kit#4818): the
195
+ // investigate phase's own icon, for the same work.
196
+ const OVERRUN_MARK = PHASE_ICONS.investigate
152
197
  const NOTE_ICONS: Readonly<Record<BoardNote['kind'], string>> = {
153
198
  filed: '🆕',
154
199
  park: STATE_ICONS.parked,
@@ -171,25 +216,32 @@ const KIND_WORDS: Readonly<Record<FiledKind, keyof Words>> = {
171
216
  bug: 'fix',
172
217
  }
173
218
 
174
- // The header's gauges and marks. ⚡ rather than 🔥: a fire beside a gauge drawn green reads as an
175
- // alarm. ⏰ rather than ⏱, a text symbol some terminals draw one column wide: under it the 💓's digits
176
- // would stand a column off.
219
+ // The header's gauges and marks. 💪 for the CPU: ⚡ is drawn too thin to see, a 🔥 beside a gauge
220
+ // drawn green reads as an alarm, and 💻 is hard to tell from 💾. ⏰ rather than ⏱, a text symbol
221
+ // some terminals draw one column wide: under it the 💓's digits would stand a column off.
177
222
  const HEADER_ICONS = {
178
- cpu: '⚡',
223
+ cpu: '💪',
179
224
  memory: '🧠',
180
225
  swap: '💾',
181
226
  ended: '🔚',
182
227
  loading: '⏳',
183
228
  elapsed: '⏰',
184
229
  heartbeat: '💓',
230
+ // A failed plan read: ❗ rather than ⚠, a text symbol drawn two columns wide over the blank after it.
231
+ warning: '❗',
232
+ // The estimated finish: 🎯 rather than 🏁, a done row's state icon, so the legend names each once
233
+ // (joshuafolkken/kit#4538).
234
+ estimate: '🎯',
185
235
  } as const
186
236
 
187
- // The kind of what the header's third line says, under the `⚡` (joshuafolkken/kit#3767): a call a
237
+ // The kind of what the header's third line says, under the `💪` (joshuafolkken/kit#3767): a call a
188
238
  // session made, the run watching its pool, the run ended, or each of the run's own stages, keyed by the
189
239
  // stage's words before any issue. A child's event draws its row's phase icon instead. The run ended
190
240
  // draws the header's own end mark — 🏁 is already a done row's state icon.
191
241
  const NOW_ICONS = { operation: '🔧', watching: '🔭', ended: HEADER_ICONS.ended } as const
192
242
  const { STAGE, LANE_STAGE } = run_event_setup
243
+ // The stages a lane's launch passes, which a queued row waiting on its lane leads with too.
244
+ const LANE_STAGE_ICONS = { opening: '🚪', installing: '📥', dispatching: '📤' } as const
193
245
  const STAGE_ICONS: Readonly<Partial<Record<string, string>>> = {
194
246
  [STAGE.STARTING]: '🚀',
195
247
  [STAGE.PLANNING]: '📝',
@@ -197,11 +249,53 @@ const STAGE_ICONS: Readonly<Partial<Record<string, string>>> = {
197
249
  [STAGE.JUDGING]: '🤔',
198
250
  [STAGE.SESSION]: '💭',
199
251
  [STAGE.NO_CHILD]: '🚫',
200
- [LANE_STAGE.OPENING]: '🚪',
201
- [LANE_STAGE.INSTALLING]: '📥',
202
- [LANE_STAGE.DISPATCHING]: '📤',
252
+ [LANE_STAGE.OPENING]: LANE_STAGE_ICONS.opening,
253
+ [LANE_STAGE.INSTALLING]: LANE_STAGE_ICONS.installing,
254
+ [LANE_STAGE.DISPATCHING]: LANE_STAGE_ICONS.dispatching,
203
255
  }
204
256
 
257
+ // What a queued or waiting row leads with (joshuafolkken/kit#4288), in place of ⏳: 📂 a path a
258
+ // running issue holds, 📋 the declared order, ✋ a pool held for a judgment, ❓ an issue nobody has
259
+ // judged, 🧍 a `run:solo` issue waiting for the running lanes, 🙅 a row behind it (#4294; 🚧 is a
260
+ // held check's) and 🔒 a row a running `run:solo` issue holds (#4391), chosen on the same rule as
261
+ // every row icon, and 🪫 the account's Claude usage limit until it resets (#4796). The rest are the
262
+ // board's own, shared rather than copied.
263
+ const WAIT_ICONS = {
264
+ usage_limit: '🪫',
265
+ path: '📂',
266
+ named: '📋',
267
+ held: '✋',
268
+ untriaged: '❓',
269
+ solo: '🧍',
270
+ solo_ahead: '🙅',
271
+ solo_running: '🔒',
272
+ lane: LANES_ICON,
273
+ memory: HEADER_ICONS.memory,
274
+ blocker: WAITS_ICON,
275
+ not_before: NOT_BEFORE_ICON,
276
+ } as const
277
+
278
+ // The legend's word for each icon a waiting row can lead with — a lane's stage among them. 📝, the
279
+ // planning a row waits on, is the plan phase's icon, which the legend names already.
280
+ const WAIT_WORDS: ReadonlyArray<readonly [icon: string, word: keyof Words]> = [
281
+ [LANE_STAGE_ICONS.opening, 'opening'],
282
+ [LANE_STAGE_ICONS.installing, 'installing'],
283
+ [LANE_STAGE_ICONS.dispatching, 'dispatching'],
284
+ [WAIT_ICONS.lane, 'lane'],
285
+ [WAIT_ICONS.path, 'path'],
286
+ [WAIT_ICONS.named, 'named'],
287
+ [WAIT_ICONS.held, 'held'],
288
+ [WAIT_ICONS.solo, 'solo'],
289
+ [WAIT_ICONS.solo_ahead, 'solo_ahead'],
290
+ [WAIT_ICONS.solo_running, 'solo_running'],
291
+ [WAIT_ICONS.usage_limit, 'usage_limit'],
292
+ [WAIT_ICONS.memory, 'headroom'],
293
+ [WAIT_ICONS.untriaged, 'untriaged'],
294
+ [WAIT_ICONS.blocker, 'waits'],
295
+ [STATE_ICONS.human, 'on_human'],
296
+ [WAIT_ICONS.not_before, 'not_before'],
297
+ ]
298
+
205
299
  // **The machine gauges' three colors, decided here alone**: Activity Monitor's green, yellow and red
206
300
  // in the system's dark-mode values. A palette's `green` draws blue and its `red` orange in a VSCode
207
301
  // terminal, so the normal gauge would read as the cyan plan bar and the busy one as yellow.
@@ -211,60 +305,16 @@ const GAUGE_SHADES = {
211
305
  red: { rgb: '255;69;58', named: 'red' },
212
306
  } as const satisfies Readonly<Record<string, Shade>>
213
307
 
214
- function two_digits(value: number): string {
215
- return String(value).padStart(CLOCK_WIDTH, CLOCK_PAD)
216
- }
217
-
218
- // The local wall-clock `HH:MM:SS` of a moment.
219
- function clock_of(ms: number): string {
220
- const date = new Date(ms)
308
+ const { two_digits, clock_of, minute_of } = figure_format
309
+ const { minute_span_of, span_of } = run_board_length
221
310
 
222
- return [date.getHours(), date.getMinutes(), date.getSeconds()]
223
- .map((value) => two_digits(value))
224
- .join(':')
225
- }
226
-
227
- // The local wall-clock `HH:MM` of a moment, for one a person reads to the minute — when a run ended, or
228
- // when a finding was filed.
229
- function minute_of(ms: number): string {
311
+ // The local `MM-DD HH:MM` of a moment, for one that may fall on another day — when a waiting row may
312
+ // start, in the condition column it is the widest value of (joshuafolkken/kit#4288).
313
+ function day_minute_of(ms: number): string {
230
314
  const date = new Date(ms)
315
+ const day = [date.getMonth() + 1, date.getDate()].map((value) => two_digits(value))
231
316
 
232
- return [date.getHours(), date.getMinutes()].map((value) => two_digits(value)).join(':')
233
- }
234
-
235
- // How long a row's child has run, as `MM:SS` whose minutes never carry into hours (`61:05`), so every
236
- // row reads one short column; a negative span reads as zero.
237
- function elapsed_of(ms: number): string {
238
- const seconds = Math.floor(Math.max(0, ms) / MS_PER_SECOND)
239
- const minutes = Math.floor(seconds / SECONDS_PER_MINUTE)
240
-
241
- return `${two_digits(minutes)}:${two_digits(seconds % SECONDS_PER_MINUTE)}`
242
- }
243
-
244
- // A length as its hours, and its minutes and seconds within the hour; a negative span reads as zero.
245
- function span_fields(ms: number): [hours: number, minutes: number, seconds: number] {
246
- const seconds = Math.floor(Math.max(0, ms) / MS_PER_SECOND)
247
- const minutes = Math.floor(seconds / SECONDS_PER_MINUTE)
248
- const hours = Math.floor(minutes / MINUTES_PER_HOUR)
249
-
250
- return [hours, minutes % MINUTES_PER_HOUR, seconds % SECONDS_PER_MINUTE]
251
- }
252
-
253
- // How long the run has run or its stream has been silent, as `H:MM:SS` with the hours not padded; a negative
254
- // span reads as zero. Always three fields, so a run under an hour (`0:03:25`) never reads as a time.
255
- function span_of(ms: number): string {
256
- const [hours, ...tail] = span_fields(ms)
257
-
258
- return [String(hours), ...tail.map((value) => two_digits(value))].join(':')
259
- }
260
-
261
- // How long the run has stood at its stage, as `M:SS` with the minutes not padded, and as `span_of`'s
262
- // `H:MM:SS` from an hour on. It stands beside the stage's words, never in the header's time column, so
263
- // its one separator is not read there as a time of day.
264
- function stage_span_of(ms: number): string {
265
- const [hours, minutes, seconds] = span_fields(ms)
266
-
267
- return hours === 0 ? `${String(minutes)}:${two_digits(seconds)}` : span_of(ms)
317
+ return `${day.join('-')} ${minute_of(ms)}`
268
318
  }
269
319
 
270
320
  function is_shade(color: Paint): color is Shade {
@@ -317,6 +367,7 @@ function spinner_of(now_ms: number): string {
317
367
 
318
368
  const run_board_labels = {
319
369
  FILED_KIND_ICONS,
370
+ FILED_RUN_MARK,
320
371
  GAUGE_SHADES,
321
372
  HEADER_ICONS,
322
373
  KIND_BLANK,
@@ -324,6 +375,7 @@ const run_board_labels = {
324
375
  NOTES_ICON,
325
376
  NOTE_ICONS,
326
377
  NOW_ICONS,
378
+ OVERRUN_MARK,
327
379
  PHASE_ICONS,
328
380
  PHASE_WORDS,
329
381
  SPINNER_INTERVAL_MS,
@@ -332,13 +384,16 @@ const run_board_labels = {
332
384
  WAITS_ICON,
333
385
  WORDS,
334
386
  bar_of,
387
+ LANES_ICON,
388
+ WAIT_ICONS,
389
+ WAIT_WORDS,
335
390
  clock_of,
336
- elapsed_of,
391
+ day_minute_of,
337
392
  minute_of,
393
+ minute_span_of,
338
394
  painted,
339
395
  span_of,
340
396
  spinner_of,
341
- stage_span_of,
342
397
  }
343
398
 
344
399
  export { run_board_labels }