@joshuafolkken/kit 1.1240.0 → 1.1373.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 (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +52 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +195 -181
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +282 -95
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +17 -11
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +30 -5
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +21 -7
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +6 -7
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +26 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -2,27 +2,24 @@ import { josh_verdict } from '#scripts/josh/josh-verdict'
2
2
  import { status_icons } from '#scripts/lib/status-icons'
3
3
  import { z } from 'zod'
4
4
 
5
- // Reading a josh check's failure out of what it printed, when the pipe threw its exit status away
6
- // (joshuafolkken/kit#1361).
5
+ // Reading a josh check's failure out of what it printed, when the pipe threw its exit status away.
7
6
  //
8
- // joshuafolkken/kit#1309 records how a call came back from the harness's `is_error`, which reports
9
- // the **tool call** rather than the command inside it. Agents call the verification gate through a
10
- // pipe almost every time — `pnpm josh gate 2>&1 | tail -40` — and a pipeline exits with `tail`'s
11
- // status, so a red gate is written back as a call that succeeded. Measured over this machine's kit
12
- // transcripts for 2026-09-04 onward: 83 `josh gate` calls, 13 of them printing a failure line, and
13
- // `is_error: true` on none of the 13. The rework figure #1309 exists to expose was therefore blind
14
- // to exactly the re-runs that motivated it.
7
+ // A span's outcome is read from the harness's `is_error`, which reports the **tool call** rather than
8
+ // the command inside it. Agents call the verification gate through a pipe almost every time —
9
+ // `pnpm josh gate 2>&1 | tail -40` — and a pipeline exits with `tail`'s status, so a red gate is
10
+ // written back as a call that succeeded: measured, `is_error: true` on none of 13 failing gate calls.
11
+ // The rework figure would otherwise be blind to exactly the re-runs it exists to expose.
15
12
  //
16
13
  // **What is read is josh's own failure line, and only on a call that ran josh.** Every josh command
17
14
  // that reports a per-item result opens the failing one with `status_icons.FAIL_ICON`, so a line
18
15
  // beginning with that character in the output of a `pnpm josh <cmd>` call is that command saying it
19
16
  // failed. The gate's is `✗ verification gate failed: lint (48.2s)`.
20
17
  //
21
- // **Refined by joshuafolkken/kit#1374**: a command that forwards another tool's output states its own
18
+ // **A stated verdict comes first**: a command that forwards another tool's output states its own
22
19
  // verdict, and that verdict is read first — the bare icon is only consulted where there is none. See
23
20
  // `verdict_answer` below and `josh-verdict.ts`.
24
21
  //
25
- // **Bounded on the other side by joshuafolkken/kit#1379**: that verdict silences the run it summarizes
22
+ // **Bounded on the other side**: that verdict silences the run it summarizes
26
23
  // and not everything printed before it. The run begins at the gate's opening `plan:` line — printed
27
24
  // once, before any check body exists — and never at a step header, which repeats per check. See
28
25
  // `scan_line` here and `is_gate_opening` in `josh-verdict.ts`.
@@ -90,7 +87,7 @@ function is_failure_line(line: string): boolean {
90
87
  return line.trimStart().startsWith(status_icons.FAIL_ICON)
91
88
  }
92
89
 
93
- // **A command's own verdict outranks the lines it forwarded** (joshuafolkken/kit#1374). `josh gate`
90
+ // **A command's own verdict outranks the lines it forwarded**. `josh gate`
94
91
  // prints the body of a step that skipped or passed with warnings, and that body belongs to eslint,
95
92
  // svelte-check, vitest or cspell — one of them opening a line with the failure icon would otherwise
96
93
  // make a *green* gate a failed call, and charge the next gate run as rework. Where a verdict line is
@@ -105,8 +102,8 @@ function is_failure_line(line: string): boolean {
105
102
  // exists to make going quiet without failing. A forwarded body is printed *before* the verdict that
106
103
  // summarizes it, so what follows the last one belongs to whatever ran next and is still read.
107
104
  //
108
- // **And it speaks only for the run in front of it, not for everything printed earlier**
109
- // (joshuafolkken/kit#1379). "Everything before the verdict" was one-sided: a call that runs a josh
105
+ // **And it speaks only for the run in front of it, not for everything printed earlier**.
106
+ // "Everything before the verdict" was one-sided: a call that runs a josh
110
107
  // command stating no verdict and *then* a green gate — `pnpm josh propagate; pnpm josh gate` — is
111
108
  // labelled by its first segment, and propagate's `✗ <repo>` rows were thrown away by a verdict printed
112
109
  // by the command after them. The run a verdict summarizes begins at that gate's opening `plan:` line,
@@ -141,12 +138,11 @@ function new_scan(): FailureScan {
141
138
  // **The reading between the two is the whole fix, and the guard on it is the whole of its safety.**
142
139
  // A failure mark printed before the region opened is confirmed here, because the gate had not started
143
140
  // yet and the gate's opening line is printed before any body it could forward. One printed inside the
144
- // region is discarded, which is what joshuafolkken/kit#1374 closed.
141
+ // region is discarded.
145
142
  //
146
- // **No opening line seen means no region, and then nothing is confirmed** — the pre-#1379 behavior
147
- // exactly. That is the case a `2>&1 | tail -40` produces when the head of the gate's output falls off
148
- // the top of the window, and reading the surviving body lines there would put #1374's false positive
149
- // straight back. So the fix is bounded by what it can actually see, and where it cannot see, the
143
+ // **No opening line seen means no region, and then nothing is confirmed.** That is the case a
144
+ // `2>&1 | tail -40` produces when the head of the gate's output falls off the top of the window, and
145
+ // reading the surviving body lines there would count a forwarded failure mark as the gate's own. So the fix is bounded by what it can actually see, and where it cannot see, the
150
146
  // figure stays the floor it already was.
151
147
  function close_region(scan: FailureScan): void {
152
148
  scan.did_find ||= scan.is_region_open && scan.has_failure_before_region
@@ -1,6 +1,6 @@
1
1
  import { time_spans, type Span } from './time-spans'
2
2
 
3
- // How many times a run stopped and waited for a tool result (joshuafolkken/kit#1304).
3
+ // How many times a run stopped and waited for a tool result.
4
4
  //
5
5
  // The other `time-*` modules measure *duration*: where the wall clock went, and which command spent
6
6
  // it. This measures the one thing duration cannot see. Measured on four runs, the tools themselves
@@ -13,7 +13,7 @@ import { time_spans, type Span } from './time-spans'
13
13
  // spans.** Counting calls instead would report a turn that batched four reads as four round trips —
14
14
  // which is the improvement, scored as the defect.
15
15
  //
16
- // **Adjacency was the original rule and it was wrong on real transcripts** (joshuafolkken/kit#1406).
16
+ // **Adjacency was the original rule and it was wrong on real transcripts**.
17
17
  // It rested on "tool spans sit adjacent exactly when their calls were issued together in one turn",
18
18
  // and Claude Code does not write a turn that way: each `tool_use` block is its own assistant line and
19
19
  // the harness returns each result as soon as it has one, so a turn issuing three calls is written
@@ -43,10 +43,9 @@ import { time_spans, type Span } from './time-spans'
43
43
  // the model share was right on run #1399 while the turn count was not.
44
44
 
45
45
  // Below this, a run is issuing about one call per turn: nothing is being batched, and the turn count
46
- // (which is what the wall clock is charged per) is as high as the call count. Set from the four runs
47
- // measured on joshuafolkken/kit#1304 — #1251, #1290, #1292 and #1295 — whose densities were 1.13,
48
- // 1.04, 1.03 and 1.00: every one of them a run in which independent reads and edits went out one per
49
- // turn. A run that batches even occasionally clears this, so it flags the absence of batching rather
46
+ // (which is what the wall clock is charged per) is as high as the call count. Set from four measured
47
+ // runs whose densities were 1.13, 1.04, 1.03 and 1.00: every one of them a run in which independent
48
+ // reads and edits went out one per turn. A run that batches even occasionally clears this, so it flags the absence of batching rather
50
49
  // than grading its degree.
51
50
  const CALLS_PER_ROUND_TRIP_FLOOR = 1.5
52
51
  const DENSITY_DECIMALS = 2
@@ -95,7 +94,7 @@ function count_calls(spans: ReadonlyArray<Span>): number {
95
94
  }
96
95
 
97
96
  // The nearest span before this one that is not a model span, or `undefined` where none is.
98
- // **The walk back crosses model spans and stops at everything else** (joshuafolkken/kit#1406): a
97
+ // **The walk back crosses model spans and stops at everything else**: a
99
98
  // turn's own calls are separated only by its own model spans, while a human wait means the next turn
100
99
  // was composed after an interruption and a continuation means a delegated unit ran in between —
101
100
  // neither of which any message could have issued its calls across. A human span that stops the walk
@@ -128,8 +127,8 @@ function continues_turn(spans: ReadonlyArray<Span>, index: number, message_id: s
128
127
  // the density in *both* wrong directions at once, one call fewer over one trip more, which is how a
129
128
  // turn that batched and delegated could print the warning meant for a turn that did neither.
130
129
  //
131
- // **Two rules, and the adjacency one is the fallback rather than the definition**
132
- // (joshuafolkken/kit#1406). A call issued beside another in the array is the shape the transcript
130
+ // **Two rules, and the adjacency one is the fallback rather than the definition**.
131
+ // A call issued beside another in the array is the shape the transcript
133
132
  // writes when the results arrive together, and it stays as it was — including for a span carrying no
134
133
  // message id at all. Everything else asks the id, which is what catches the shape Claude Code
135
134
  // actually writes: `use → result → use → result`, one turn, its calls separated by its own model
@@ -158,7 +157,7 @@ interface TripWalk {
158
157
  open: Array<Span> | undefined
159
158
  }
160
159
 
161
- // **A model span no longer closes the open trip** (joshuafolkken/kit#1406). It is what sits between
160
+ // **A model span no longer closes the open trip**. It is what sits between
162
161
  // two calls of one turn, so closing on it left the turn's second call with no trip to join and the
163
162
  // per-tool counts reporting a batched turn as a run of solitary calls. What still closes one is a
164
163
  // human wait: the turn after it was composed after an interruption, so its calls belong to a trip of
@@ -179,7 +178,7 @@ function step_trip(walk: TripWalk, span: Span, is_opener: boolean): void {
179
178
  else if (!is_model(span)) walk.open = undefined
180
179
  }
181
180
 
182
- // **A round trip as the calls it carried, rather than as a count** (joshuafolkken/kit#1385). The count
181
+ // **A round trip as the calls it carried, rather than as a count**. The count
183
182
  // is what this returns the length of, so the two cannot come to disagree about what a round trip is —
184
183
  // which is the whole point of asking here rather than grouping the spans a second time next door.
185
184
  //
@@ -210,8 +209,8 @@ function turn_key(span: Span, index: number): string {
210
209
  return span.message_id === time_spans.NO_MESSAGE_ID ? `#${String(index)}` : span.message_id
211
210
  }
212
211
 
213
- // **How many assistant messages the run's model spans came from — the definition of a turn**
214
- // (joshuafolkken/kit#1406). Not how many model spans there are: Claude Code writes one line per
212
+ // **How many assistant messages the run's model spans came from — the definition of a turn**.
213
+ // Not how many model spans there are: Claude Code writes one line per
215
214
  // content block and repeats the message id on each, so a turn that thought and then issued two calls
216
215
  // is three lines and three model spans. Counting the spans reported run #1399's 41 turns as 79, and
217
216
  // with them halved every per-turn figure divided by this — `josh time --epic`'s `ms_per_turn` above
@@ -223,7 +222,7 @@ function count_turns(spans: ReadonlyArray<Span>): number {
223
222
  }
224
223
 
225
224
  // What one round trip cost, in whatever unit the numerator carries: calls, for the density the floor
226
- // above is quoted in, and milliseconds for the price joshuafolkken/kit#1307 added. **One divisor with
225
+ // above is quoted in, and milliseconds for the price per round trip. **One divisor with
227
226
  // one guard, rather than a second copy per unit** — the two are the same question about the same
228
227
  // denominator, and a guard written into only one of them would print, in the unit that lacked it,
229
228
  // exactly the measurement the other withholds.
@@ -252,23 +251,21 @@ const time_round_trips = {
252
251
  CALLS_PER_ROUND_TRIP_FLOOR,
253
252
  count_calls,
254
253
  count_round_trips,
255
- // Exported since joshuafolkken/kit#1406, so a turn is defined in the one module that already
256
- // defines a round trip rather than as a span filter in the report next door.
254
+ // Exported so a turn is defined in the one module that already defines a round trip rather than
255
+ // as a span filter in the report next door.
257
256
  count_turns,
258
257
  format_density,
259
- // Exported since joshuafolkken/kit#1385, so the per-tool counts are read off the very groups this
260
- // module counts rather than off a second grouping beside them.
258
+ // Exported so the per-tool counts are read off the very groups this module counts rather than off
259
+ // a second grouping beside them.
261
260
  group_round_trips,
262
- // Exported since joshuafolkken/kit#1309, so the failure aggregation orders a run's spans through
261
+ // Exported so the failure aggregation orders a run's spans through
263
262
  // the one function that already knows why they need it — a second `toSorted` beside it would be
264
263
  // the clone `CLAUDE.md` prohibits, and the seam it guards (a delegated unit's spans appended
265
264
  // after the parent's) is not one a second copy would keep remembering.
266
265
  in_time_order,
267
266
  is_below_floor,
268
- // The four below are exported since joshuafolkken/kit#1406, when the model-gap walk moved to
269
- // `time-model-gaps.ts` and needed the same predicates and the same opener test this walk uses. A
270
- // private copy there would be the clone `CLAUDE.md` prohibits, in the one place a drift would have
271
- // the distribution and the count disagreeing about what a round trip is.
267
+ // Exported so callers price a round trip with the same divisor and guard rather than a private
268
+ // copy — the clone `CLAUDE.md` prohibits.
272
269
  per_round_trip,
273
270
  }
274
271
 
@@ -2,7 +2,7 @@ import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
2
2
  import { canonical_command } from '#scripts/josh/josh-command-map'
3
3
  import { json_value } from '#scripts/lib/json-value'
4
4
 
5
- // Reading a shell command well enough to name what it ran (joshuafolkken/kit#1344).
5
+ // Reading a shell command well enough to name what it ran.
6
6
  //
7
7
  // It was `time-spans.ts`'s, and it moved out when that file passed its length limit. The seam is the
8
8
  // one `time-format.ts` was cut along: this holds no timing knowledge at all — no spans, no
@@ -46,7 +46,7 @@ const CHAIN_PATTERN = /&&|\|\||;/u
46
46
  // nothing beyond the reading, while a fragment read as a command answers about work the shell never
47
47
  // did, on the shape this repository writes constantly.
48
48
  //
49
- // **Escapes and heredoc bodies are text too** (joshuafolkken/kit#2841). A backslash outside single
49
+ // **Escapes and heredoc bodies are text too**. A backslash outside single
50
50
  // quotes makes the next character literal, so `it\'s` opens nothing and a `"` closes only at an
51
51
  // unescaped `"`; inside `'…'` a backslash is an ordinary character, so `'C:\'` still closes. A heredoc
52
52
  // body is not shell syntax at all — an `it's` there is prose — so it is removed before the quotes are
@@ -141,7 +141,7 @@ function leading_word(command: string): string {
141
141
  }
142
142
 
143
143
  // Every command a pipeline throws the exit status of away — one per `|`-separated segment except the
144
- // last (joshuafolkken/kit#1556). A shell reports a pipeline with its final command's status, so a
144
+ // last. A shell reports a pipeline with its final command's status, so a
145
145
  // check run anywhere earlier has its verdict discarded before anything reads it.
146
146
  //
147
147
  // **The command of a segment is at the end of its chain, not the start.** `|` binds tighter than `&&`
@@ -208,7 +208,7 @@ function bash_label(command: string): string {
208
208
  return word === '' ? cost_blocks.BASH_TOOL : `${cost_blocks.BASH_TOOL}${BASH_SEPARATOR}${word}`
209
209
  }
210
210
 
211
- // **An alias is expanded here, so one command is one name** (joshuafolkken/kit#1789). Every reading
211
+ // **An alias is expanded here, so one command is one name**. Every reading
212
212
  // built on this field keyed `pnpm josh ga` and `pnpm josh gate` as two different commands: the
213
213
  // per-command table printed them as two rows, the per-invocation table dropped both for having one
214
214
  // call each, and — the one with real cost — the failure chain did not see the second as answering the
@@ -229,7 +229,7 @@ function josh_command_of(command: string): string {
229
229
  return josh_command_of_segment(command_segment(command))
230
230
  }
231
231
 
232
- // Every josh subcommand a chained call ran, not just the first (joshuafolkken/kit#1883). The standard
232
+ // Every josh subcommand a chained call ran, not just the first. The standard
233
233
  // verification form `pnpm josh lint:related && pnpm josh test:related` is two commands in one call, and
234
234
  // `josh_command_of` reads only the first segment's — so a table built on that field never counted
235
235
  // `test:related`. This reads every segment instead.
@@ -245,8 +245,8 @@ function josh_commands_of(command: string): Array<string> {
245
245
  .filter((name) => name !== '')
246
246
  }
247
247
 
248
- // A redirection is not an argument, and keeping one splits a single check into two signatures
249
- // (joshuafolkken/kit#1383). Measured on run #1379, every `pnpm josh <check>` call there was written
248
+ // A redirection is not an argument, and keeping one splits a single check into two signatures.
249
+ // Measured on run #1379, every `pnpm josh <check>` call there was written
250
250
  // `… 2>&1`, so an otherwise identical call written without one would have keyed differently and the
251
251
  // repeat between them would have gone uncounted.
252
252
  //
@@ -279,7 +279,7 @@ function drop_redirections(words: ReadonlyArray<string>): Array<string> {
279
279
  return kept
280
280
  }
281
281
 
282
- // What a `pnpm josh <cmd>` call passes after its subcommand (joshuafolkken/kit#1383).
282
+ // What a `pnpm josh <cmd>` call passes after its subcommand.
283
283
  //
284
284
  // **Read from the same segment `josh_command_of` reads the subcommand from**, and past the same
285
285
  // match. Two calls of one check are told apart by their arguments, so a second reader here would be
@@ -1,7 +1,6 @@
1
1
  import { time_shell } from './time-shell'
2
2
 
3
- // Which calls are one verification check run on its own, and what makes two of them the same call
4
- // (joshuafolkken/kit#1383).
3
+ // Which calls are one verification check run on its own, and what makes two of them the same call.
5
4
  //
6
5
  // Measured on run #1379, that run issued eight of these — 45.9 seconds of tool time, six of them in
7
6
  // the fix phase, each its own round trip — and 18.1 seconds after the last one `josh gate` ran lint,
@@ -10,29 +10,26 @@ import { time_transcript_line, type Block, type TranscriptLine } from './time-tr
10
10
  const { NO_MESSAGE_ID, parse_line } = time_transcript_line
11
11
  const { NO_CALL, UNKNOWN_CALL, UNKNOWN_TOOL, to_tool_call } = time_tool_call
12
12
 
13
- // Turning a session transcript into timed spans (joshuafolkken/kit#1267).
13
+ // Turning a session transcript into timed spans.
14
14
  //
15
15
  // `cost-*` reads the same files for what a run was billed. This reads the other axis: where its wall
16
16
  // clock went. Discovery and reading are `cost-transcript.ts`'s and are reused rather than copied;
17
17
  // what is here is the arithmetic, which has no counterpart on the cost side.
18
18
  //
19
- // **Reading one line is `time-transcript-line.ts`'s** since joshuafolkken/kit#1406, when this file
20
- // passed its length limit — the schemas, the two records a line yields and the parse that produces
21
- // them. `NO_MESSAGE_ID` and `parse_line` are re-exported below under the names they always had, so
22
- // the move changed no call site. `cost_blocks`' three type constants are still imported rather than
23
- // restated.
19
+ // **Reading one line is `time-transcript-line.ts`'s** — the schemas, the two records a line yields
20
+ // and the parse that produces them. `NO_MESSAGE_ID` and `parse_line` are re-exported below, and
21
+ // `cost_blocks`' three type constants are imported rather than restated.
24
22
  //
25
- // **Reading a `tool_use` block into a `ToolCall` is `time-tool-call.ts`'s** since
26
- // joshuafolkken/kit#3264, when this file reached its length limit again. `UNKNOWN_TOOL` and
27
- // `to_tool_call` are re-exported below, so that move changed no call site either.
23
+ // **Reading a `tool_use` block into a `ToolCall` is `time-tool-call.ts`'s**; `UNKNOWN_TOOL` and
24
+ // `to_tool_call` are re-exported below.
28
25
  //
29
26
  // **The partition is by gap, not by pair.** Every span is the interval between two consecutive
30
27
  // events, classified by the *later* one: a span ending at an assistant line is model wait, one
31
28
  // ending at a tool result is that tool's execution, one ending at a user prompt is human wait.
32
29
  // Classifying by pairs instead would double-count parallel tool calls and leave the three shares
33
30
  // summing to something other than the elapsed time — the property that makes two runs comparable.
34
- // Measured against the three sessions joshuafolkken/kit#1267 restored by hand: 49.6 / 73.3 / 54.6
35
- // minutes, every share within 0.4 points of the hand figure.
31
+ // Measured against three sessions restored by hand: 49.6 / 73.3 / 54.6 minutes, every share within
32
+ // 0.4 points of the hand figure.
36
33
 
37
34
  const ASSISTANT_TYPE = 'assistant'
38
35
  const USER_TYPE = 'user'
@@ -43,7 +40,7 @@ const MODEL_CATEGORY: SpanCategory = 'model'
43
40
  const TOOL_CATEGORY: SpanCategory = 'tool'
44
41
  const HUMAN_CATEGORY: SpanCategory = 'human'
45
42
 
46
- // How the call this span paid for came back (joshuafolkken/kit#1309).
43
+ // How the call this span paid for came back.
47
44
  //
48
45
  // **Three answers rather than two.** `unknown` is not a polite `ok`: a fifth of the tool results in
49
46
  // the transcripts measured carry no `is_error` at all — a file read, an answered question — and
@@ -67,17 +64,17 @@ const UNKNOWN_OUTCOME: SpanOutcome = 'unknown'
67
64
  interface ResultFacts {
68
65
  call_id: string
69
66
  outcome: SpanOutcome
70
- // Which guard refused the call this result closed, and `''` for every non-refusal
71
- // (joshuafolkken/kit#1913). Carried here for the reason `outcome` is: the result block is gone by
67
+ // Which guard refused the call this result closed, and `''` for every non-refusal.
68
+ // Carried here for the reason `outcome` is: the result block is gone by
72
69
  // the time the per-guard refusal breakdown aggregates, and only what was read off it survives.
73
70
  refusal_guard: string
74
71
  // The id the harness assigned when it took this call's command into the background, and `''` for
75
- // every other result (joshuafolkken/kit#1662). Fourth field for the reason the others are here:
72
+ // every other result. Fourth field for the reason the others are here:
76
73
  // the launch's body is the only place the id is written, and the body is gone by the time
77
74
  // anything places the command on the timeline.
78
75
  background_id: string
79
- // The stage rows a `pnpm josh followup` call printed into its own output
80
- // (joshuafolkken/kit#1445). Third field for the reason the two above are here: the result block is
76
+ // The stage rows a `pnpm josh followup` call printed into its own output.
77
+ // Third field for the reason the two above are here: the result block is
81
78
  // gone by the time anything aggregates, so what a table wants from it has to be read off it now.
82
79
  // Empty for every span that is not a measured `followup` invocation.
83
80
  followup_stages: ReadonlyArray<FollowupStage>
@@ -93,8 +90,8 @@ const NO_RESULT: ResultFacts = {
93
90
 
94
91
  // `ended_ms` is the absolute instant the span closed, so `[ended_ms - duration_ms, ended_ms]` is the
95
92
  // interval it occupied. A duration alone cannot say *when*, and two things need that: the CI wait,
96
- // which is the part of the PR-open→merge window no span covers (joshuafolkken/kit#1268), and the
97
- // phase breakdown that slices the same array by boundary (joshuafolkken/kit#1269).
93
+ // which is the part of the PR-open→merge window no span covers, and the
94
+ // phase breakdown that slices the same array by boundary.
98
95
  //
99
96
  // `branch` rides along for the same reason `cost-usage.ts` carries it on a record: it is what
100
97
  // `cost_attribute` reads to decide which issue the span belongs to.
@@ -103,17 +100,16 @@ const NO_RESULT: ResultFacts = {
103
100
  interface Span extends ToolCall, ResultFacts {
104
101
  category: SpanCategory
105
102
  duration_ms: number
106
- // What the call itself took, before any of its minutes were handed to a delegated unit
107
- // (joshuafolkken/kit#1591). Carried beside `duration_ms` rather than derived from it, because
103
+ // What the call itself took, before any of its minutes were handed to a delegated unit.
104
+ // Carried beside `duration_ms` rather than derived from it, because
108
105
  // nothing downstream could recover it: `time_overlap.trim` replaces `duration_ms` and keeps no
109
106
  // record of what it replaced.
110
107
  //
111
108
  // **The two answer different questions, and a report needs both.** `duration_ms` is this span's
112
109
  // share of the run's wall clock, so the subtraction shortens it wherever a unit covered the same
113
- // minutes — without that the four category shares stop reconstructing `elapsed_ms`, which is the
114
- // double count joshuafolkken/kit#1287 fixed. This one is what a per-invocation row is asked for:
115
- // a `Skill` call that really ran for five minutes was printed as 65 ms, because 65 ms is all the
116
- // subtraction had left of it.
110
+ // minutes — without that the four category shares double-count and stop reconstructing
111
+ // `elapsed_ms`. This one is what a per-invocation row is asked for: a `Skill` call that really ran
112
+ // for five minutes would otherwise print as the few milliseconds the subtraction left of it.
117
113
  //
118
114
  // It survives that subtraction because `trim` copies the span and overwrites only `duration_ms`
119
115
  // and `ended_ms`, so every fragment of one call carries the same value — which is why the tables
@@ -122,19 +118,19 @@ interface Span extends ToolCall, ResultFacts {
122
118
  ended_ms: number
123
119
  branch: string
124
120
  // Whether this span is the *remainder* of a call whose middle was given to a delegated unit, cut
125
- // out by `time_overlap.trim` (joshuafolkken/kit#1304). One call comes back as two spans there, so
121
+ // out by `time_overlap.trim`. One call comes back as two spans there, so
126
122
  // anything counting calls rather than intervals has to skip the second — the round-trip block and
127
123
  // the per-tool table's `call_count` both do. Every span the transcript itself yields is `false`;
128
124
  // only the subtraction sets it.
129
125
  is_continuation: boolean
130
126
  // The `pnpm josh <cmd>` this span ran *beside*, where it sits inside a backgrounded command's
131
- // window, and `''` everywhere else (joshuafolkken/kit#1662). It is resolved after the walk rather
127
+ // window, and `''` everywhere else. It is resolved after the walk rather
132
128
  // than read off a call, because the window is not known until the join that closes it has been
133
129
  // seen — so it has `is_continuation`'s shape rather than `marker`'s: every span the walk yields is
134
130
  // empty, and only `time_background.positioned` sets it.
135
131
  background_command: string
136
132
  // When the harness said the command this span launched had finished, and `NO_FINISH` where nothing
137
- // said (joshuafolkken/kit#1696). It is the notice's own instant rather than a reading's, so it is
133
+ // said. It is the notice's own instant rather than a reading's, so it is
138
134
  // keyed to the launch by id at parse time — the notice sits on a line of its own, which is why no
139
135
  // field read off this span's own result could carry it.
140
136
  background_ended_ms: number
@@ -157,7 +153,7 @@ interface Timeline {
157
153
  // the empty string, where the next result that carries no `tool_use_id` would match it and be
158
154
  // labelled with an unrelated tool — a wrong name where `UNKNOWN_TOOL` is the honest one.
159
155
  // A `tool_use` block with the assistant message it was written under, which is the turn that issued
160
- // it (joshuafolkken/kit#1406). The pair is kept rather than the block alone because the id lives on
156
+ // it. The pair is kept rather than the block alone because the id lives on
161
157
  // the *line* and the flatten below is where it would otherwise be lost.
162
158
  interface IssuedCall {
163
159
  block: Block
@@ -207,8 +203,8 @@ function event_of(
207
203
  // outcome — a file read, an answered question — would otherwise be counted as calls that succeeded,
208
204
  // and a run whose whole transcript was written by them would report a measured zero failures.
209
205
  //
210
- // **What the command said outranks what the harness recorded, in one direction only**
211
- // (joshuafolkken/kit#1361). A josh check run inside a pipeline exits with the pipe's status, so the
206
+ // **What the command said outranks what the harness recorded, in one direction only**.
207
+ // A josh check run inside a pipeline exits with the pipe's status, so the
212
208
  // harness writes `is_error: false` over a red gate; the failure line the command printed is the only
213
209
  // surviving evidence, and it is read *before* the field. The reverse never happens — a call the
214
210
  // harness marked failed is failed whatever it printed.
@@ -250,8 +246,7 @@ function to_event(
250
246
  ): TimelineEvent | undefined {
251
247
  // **A model span carries the message its own line belongs to**, which is what makes a turn
252
248
  // countable: Claude Code writes one line per content block and repeats the id on each, so the
253
- // lines are what a naive count sees and the id is what says how many turns they were
254
- // (joshuafolkken/kit#1406).
249
+ // lines are what a naive count sees and the id is what says how many turns they were.
255
250
  if (line.type === ASSISTANT_TYPE) {
256
251
  return event_of(line, MODEL_CATEGORY, { ...NO_CALL, message_id: line.message_id })
257
252
  }
@@ -276,15 +271,15 @@ function to_events(
276
271
  // interval paid for is the work the later line records, and taking the opening line's branch would
277
272
  // attribute the first span after a `josh git` to whatever preceded the branch.
278
273
  // The two durations of a span that nothing has taken a share of yet, which is every span a
279
- // transcript itself yields and every span a test builds (joshuafolkken/kit#1591). Written once here
274
+ // transcript itself yields and every span a test builds. Written once here
280
275
  // so no builder can set one and forget the other — the drift would be silent, and would surface as a
281
276
  // per-invocation row disagreeing with the transcript it was read from.
282
277
  function equal_durations(duration_ms: number): Pick<Span, 'duration_ms' | 'own_duration_ms'> {
283
278
  return { duration_ms, own_duration_ms: duration_ms }
284
279
  }
285
280
 
286
- // The four background fields of a span nothing backgrounded, which is every span a test builds
287
- // (joshuafolkken/kit#1662). Written once here for the reason `equal_durations` above is: three
281
+ // The four background fields of a span nothing backgrounded, which is every span a test builds.
282
+ // Written once here for the reason `equal_durations` above is: three
288
283
  // fixtures assemble a `Span` literal, and a field added to two of them is a drift that surfaces only
289
284
  // as a table disagreeing with the transcript it was read from.
290
285
  type BackgroundFields = Pick<
@@ -368,15 +363,15 @@ function parse_timeline(text: string): Timeline {
368
363
  return {
369
364
  started_ms: events[0]?.timestamp_ms ?? 0,
370
365
  ended_ms: events.at(-1)?.timestamp_ms ?? 0,
371
- // **The positioning happens here rather than in a caller** (joshuafolkken/kit#1662): a launch and
366
+ // **The positioning happens here rather than in a caller**: a launch and
372
367
  // the call that reads its output are in one transcript, and by the time spans have been merged
373
368
  // across sessions and trimmed they are fragments rather than calls.
374
369
  spans: time_background.positioned(to_spans(events, time_background.finished_at(lines))),
375
370
  }
376
371
  }
377
372
 
378
- // **"No span was read" is the one criterion every scope withholds a transcript figure on**
379
- // (joshuafolkken/kit#1295). A run whose transcript could not be attributed, a child of an epic in
373
+ // **"No span was read" is the one criterion every scope withholds a transcript figure on**.
374
+ // A run whose transcript could not be attributed, a child of an epic in
380
375
  // that state, and a batch no child contributed to are the same fact asked at three scales, and each
381
376
  // used to spell it out for itself — which is how the run scope came to print three `0.0 min` rows
382
377
  // beside the epic scope's `not measured` for the very same child.
@@ -401,7 +396,7 @@ const time_spans = {
401
396
  equal_durations,
402
397
  no_background,
403
398
  // Re-exported so the suites that measure how a command is read keep asking one namespace, and so
404
- // `time-shell.ts` moving out of this file changed no call site (joshuafolkken/kit#1344).
399
+ // `time-shell.ts` moving out of this file changed no call site.
405
400
  bash_label: time_shell.bash_label,
406
401
  josh_command_of: time_shell.josh_command_of,
407
402
  josh_commands_of: time_shell.josh_commands_of,
@@ -8,7 +8,7 @@ import { time_transcript_line } from './time-transcript-line'
8
8
  import { time_writes } from './time-writes'
9
9
 
10
10
  // Reading a `tool_use` block into the label a span carries — split out of `time-spans.ts` when it
11
- // reached its line limit (joshuafolkken/kit#3264). `time_spans` re-exports `UNKNOWN_TOOL` and
11
+ // reached its line limit. `time_spans` re-exports `UNKNOWN_TOOL` and
12
12
  // `to_tool_call` under the names they always had, so the move changed no call site.
13
13
 
14
14
  const { NO_MESSAGE_ID } = time_transcript_line
@@ -19,31 +19,31 @@ const UNKNOWN_TOOL = 'unknown'
19
19
  // `pnpm josh <cmd>` invocation, and the report drops empty labels rather than printing a bucket.
20
20
  //
21
21
  // `marker` names the workflow boundary the call is, for the phase breakdown that slices the same
22
- // spans by stage (joshuafolkken/kit#1269). It is carried here rather than re-derived later because
22
+ // spans by stage. It is carried here rather than re-derived later because
23
23
  // the tool's *input* is what decides it, and a span keeps no input — only the label read off it.
24
24
  //
25
- // `is_bundleable` and `targets` are carried for exactly that reason too (joshuafolkken/kit#1344).
25
+ // `is_bundleable` and `targets` are carried for exactly that reason too.
26
26
  // Whether a call could have gone out beside another, and what it names, are both read off the input —
27
27
  // so a module asking about them after the fact would have nothing to read. `time-bundle-call.ts`
28
28
  // decides both; the rule each one follows is stated there.
29
29
  //
30
- // `check_key` is the fourth, and the third time this reason has applied (joshuafolkken/kit#1383). Two
30
+ // `check_key` is the fourth, and the third time this reason has applied. Two
31
31
  // runs of one verification check are the same call only if they named the same files, and the files
32
32
  // are in the input — so `josh_command` alone cannot say, and nothing downstream could recover it.
33
33
  // `time-single-check.ts` decides it.
34
34
  //
35
- // `message_id` is the fifth, and it is the one that says which *turn* a call belongs to
36
- // (joshuafolkken/kit#1406). It is read off the line the `tool_use` block sat on rather than off the
35
+ // `message_id` is the fifth, and it is the one that says which *turn* a call belongs to.
36
+ // It is read off the line the `tool_use` block sat on rather than off the
37
37
  // result that closes the span, because a `tool_result` line carries no message id at all — so a span
38
38
  // that did not keep it here could never be attributed to the turn that issued it.
39
39
  //
40
- // `writes` is the sixth, and it is what `targets` could not say (joshuafolkken/kit#1472). `targets`
40
+ // `writes` is the sixth, and it is what `targets` could not say. `targets`
41
41
  // names what a call mentioned; `marker` says a call was *an* edit but not of what, and for a tool
42
42
  // outside `BUNDLEABLE_TOOLS` it arrived with no target at all. So a consumer subtracting edits from
43
43
  // reads — `investigation-reads.ts` — had nothing to subtract for `MultiEdit` / `NotebookEdit`, and
44
44
  // nothing at all to tell an in-place `sed -i` from the `sed -n` it shares a label with.
45
45
  // `time-writes.ts` decides it, from the input this span is about to discard.
46
- // `issue` is the seventh, and it is the one `branch` could not carry (joshuafolkken/kit#1617). Under
46
+ // `issue` is the seventh, and it is the one `branch` could not carry. Under
47
47
  // lanes the session writing the transcript stays on the default branch while the work runs in a linked
48
48
  // work tree, so `branch` names no issue on any line of the run; the `in-progress` label call does, and
49
49
  // like every field above it that answer is read off the *input* a span is about to discard.
@@ -51,7 +51,7 @@ const UNKNOWN_TOOL = 'unknown'
51
51
  interface ToolCall {
52
52
  label: string
53
53
  josh_command: string
54
- // Every josh subcommand the call ran, where `josh_command` is only the first (joshuafolkken/kit#1883).
54
+ // Every josh subcommand the call ran, where `josh_command` is only the first.
55
55
  // A chained `pnpm josh lint:related && pnpm josh test:related` carries both; the count tables expand
56
56
  // it so the ones `josh_command` drops are still counted.
57
57
  josh_commands: ReadonlyArray<string>
@@ -60,21 +60,20 @@ interface ToolCall {
60
60
  is_bundleable: boolean
61
61
  targets: ReadonlyArray<string>
62
62
  // Carried beside `targets` because sharing a target means something different depending on it: a
63
- // second write to one file is independent work, a read of a file just written is not
64
- // (joshuafolkken/kit#1509).
63
+ // second write to one file is independent work, a read of a file just written is not.
65
64
  is_writing: boolean
66
65
  // The conservative write answer `is_read_only_call` asks of a live call, carried so a reader of the
67
- // transcript asks the same read-only question as the guard (joshuafolkken/kit#3139).
66
+ // transcript asks the same read-only question as the guard.
68
67
  may_write: boolean
69
- // Whether this is a subagent launch whose prompt builds on an earlier launch's finding
70
- // (joshuafolkken/kit#1854). Carried for the reason every field here is — the prompt it is read from
68
+ // Whether this is a subagent launch whose prompt builds on an earlier launch's finding.
69
+ // Carried for the reason every field here is — the prompt it is read from
71
70
  // is the input, and a span keeps none. `time-agent-bundles.ts` reads it.
72
71
  has_prior_reference: boolean
73
72
  writes: ReadonlyArray<string>
74
73
  message_id: string
75
74
  issue: number
76
- // The background run this call reads the output of, and `''` for every other call
77
- // (joshuafolkken/kit#1662). It is the eighth field carried for the reason the seven above are:
75
+ // The background run this call reads the output of, and `''` for every other call.
76
+ // It is the eighth field carried for the reason the seven above are:
78
77
  // the id sits in the command string, which a span does not keep, and it is the only thing that
79
78
  // says a `tail` two turns later is the join of a command started minutes ago.
80
79
  reads_background: string