@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
@@ -6,12 +6,12 @@ import { time_shell } from './time-shell'
6
6
  const { BASH_TOOL } = cost_blocks
7
7
 
8
8
  // What one call has to say about itself before anything can ask whether it could have gone out
9
- // beside another (joshuafolkken/kit#1344).
9
+ // beside another.
10
10
  //
11
11
  // `time-round-trips.ts` counts how many times a run stopped, and `time-density.ts` says the count is
12
12
  // too high while the run is still going. Neither can say **which** of those stops were avoidable, and
13
- // that is the number joshuafolkken/kit#1344 was filed for: the estimate it carries — 33 of 136 round
14
- // trips — was arithmetic on a target density, not a reading of what the run actually did.
13
+ // that is the number this reads: an estimate drawn from a target density is arithmetic, not a
14
+ // reading of what the run actually did.
15
15
  //
16
16
  // **Two facts, and both have to be read while the input is in hand.** A span keeps no input, for the
17
17
  // reason `time-spans.ts` states beside `marker`: the tool's input is what decides the answer, and by
@@ -36,7 +36,7 @@ const { BASH_TOOL } = cost_blocks
36
36
  // or a stop for a person.
37
37
  const BUNDLEABLE_TOOLS = new Set(['Edit', 'Glob', 'Grep', 'Read', 'WebFetch', 'WebSearch', 'Write'])
38
38
 
39
- // The tools that launch a *fresh* subagent (joshuafolkken/kit#1854). Both spellings occur across
39
+ // The tools that launch a *fresh* subagent. Both spellings occur across
40
40
  // harnesses — this one names it `Agent`, others `Task` — and `time-batch-guard.ts` already treats the
41
41
  // two the same. They are deliberately not `time-parent-turns.ts`'s wider dispatch set: `SendMessage`
42
42
  // continues an existing agent and is dependent by nature, so a fan-out could never have included it.
@@ -46,7 +46,7 @@ const LAUNCH_TOOLS = new Set(['Agent', 'Task'])
46
46
 
47
47
  // A launch whose prompt builds on an earlier agent's *finding* rather than on the codebase as it
48
48
  // stands — the one dependency `time-agent-bundles.ts` cannot see from an intervening write, because a
49
- // read-only investigation chain writes nothing between its links (joshuafolkken/kit#1847). It is a
49
+ // read-only investigation chain writes nothing between its links. It is a
50
50
  // marker scan and therefore a floor: a prompt that quotes the prior finding without any of these
51
51
  // phrases reads as independent, which is the same output-only blind spot this module documents beside
52
52
  // `targets`. It never over-calls — a marker present is treated as dependent, which drops the launch
@@ -170,7 +170,7 @@ const MUTATION_WORDS = new Set([
170
170
  'wget',
171
171
  ])
172
172
 
173
- // The read-only `pnpm josh` bookkeeping subcommands (joshuafolkken/kit#1875). Every `pnpm josh …`
173
+ // The read-only `pnpm josh` bookkeeping subcommands. Every `pnpm josh …`
174
174
  // leads with `pnpm`, which is a mutation word above so the writing josh commands — `gate`, `followup`,
175
175
  // `git` — are turned away; that same leading word turned the read-only ones away too, so the batching
176
176
  // guard never saw the bookkeeping calls the Issue measured going out one per turn, and `Bundling:`
@@ -242,7 +242,7 @@ const FLAG_PREFIX = '-'
242
242
  const PATH_SEPARATOR = '/'
243
243
  const MIN_TARGET_LENGTH = 3
244
244
 
245
- // The tools that write. **Kept here rather than in the guard** (joshuafolkken/kit#1509): the guard
245
+ // The tools that write. **Kept here rather than in the guard**: the guard
246
246
  // held its own copy, and the sequence builder had no way to ask at all — so a run of edits to one
247
247
  // file was read as a chain of dependent calls and no sequence ever formed. One answer, one place.
248
248
  const WRITING_TOOLS: ReadonlySet<string> = new Set(['Edit', 'Write', 'NotebookEdit'])
@@ -272,8 +272,7 @@ interface BundleFacts {
272
272
  targets: ReadonlyArray<string>
273
273
  // Whether the call **certainly** rewrites what it names. **Two writes to one file do not depend on
274
274
  // each other** — the text is already held, so both belong in one turn — while a write after a read
275
- // of the same file genuinely does. `time-bundles.ts` reads this to tell the two apart
276
- // (joshuafolkken/kit#1509).
275
+ // of the same file genuinely does. `time-bundles.ts` reads this to tell the two apart.
277
276
  is_writing: boolean
278
277
  // Whether the call **might** write, which is a different question and needs the opposite bias.
279
278
  //
@@ -283,8 +282,8 @@ interface BundleFacts {
283
282
  // dependency *removed*, so `sed -n '1,200p' x.ts` twice would read as a bundleable pair when the
284
283
  // second may well have needed the first. Same bias, opposite consequences, so they are two fields.
285
284
  may_write: boolean
286
- // Whether this is a subagent launch whose prompt builds on an earlier launch's finding
287
- // (joshuafolkken/kit#1854). `false` for every call that is not a launch, and for a launch whose
285
+ // Whether this is a subagent launch whose prompt builds on an earlier launch's finding.
286
+ // `false` for every call that is not a launch, and for a launch whose
288
287
  // prompt names no back-reference marker. `time-agent-bundles.ts` reads it to break a fan-out group
289
288
  // that a read-only investigation chain would otherwise slip through, since such a chain writes
290
289
  // nothing between its links for the intervening-write test to catch.
@@ -306,7 +305,7 @@ function not_bundleable(): BundleFacts {
306
305
  }
307
306
 
308
307
  // Whether a tool name is a fresh subagent launch. Exported so `time-agent-bundles.ts` reads the one
309
- // set rather than keeping a second copy of it (joshuafolkken/kit#1854).
308
+ // set rather than keeping a second copy of it.
310
309
  function is_launch_tool(name: string): boolean {
311
310
  return LAUNCH_TOOLS.has(name)
312
311
  }
@@ -339,7 +338,7 @@ function josh_subcommand(command: string): string | undefined {
339
338
  // line falls through. An alias is resolved to its canonical name first, so the allow-list holds
340
339
  // canonical names alone. Everything not on the list falls
341
340
  // through to the read/mutation test, which is what keeps `josh gate` / `followup` / `git`
342
- // non-bundleable (joshuafolkken/kit#1875).
341
+ // non-bundleable.
343
342
  function is_read_josh(command: string): boolean {
344
343
  if (COMMAND_CHAIN.test(command)) return false
345
344
 
@@ -365,8 +364,7 @@ function may_write_command(command: string): boolean {
365
364
  // one shell line that certainly rewrites a file *and* is bundleable is the in-place `sed`: `sed` is on
366
365
  // the read list because `sed -n` prints, so the flag is what separates the two spellings. Everything
367
366
  // else answers `false` — a genuine write missed here only leaves a sequence broken the way it already
368
- // was, while a read caught here would have its dependency removed, which is the failure that matters
369
- // (joshuafolkken/kit#1509).
367
+ // was, while a read caught here would have its dependency removed, which is the failure that matters.
370
368
  // **The one segment that runs the command, with its quoted text removed first — never the whole
371
369
  // line.** Each half closes an over-call, and this predicate feeds the dependency test, so an
372
370
  // over-call removes a dependency that is really there:
@@ -382,8 +380,8 @@ function write_segment(command: string): string {
382
380
 
383
381
  // **The certain half of the write question, asked in one place for both readers.** `time-writes.ts`
384
382
  // answers *which* files an in-place `sed` wrote and this module answers *whether* it wrote at all;
385
- // they were two implementations of the same test and disagreed in both directions
386
- // (joshuafolkken/kit#1509). The predicate lives here because `time-writes.ts` already imports this
383
+ // they were two implementations of the same test and disagreed in both directions.
384
+ // The predicate lives here because `time-writes.ts` already imports this
387
385
  // module, so the reverse direction would be a cycle.
388
386
  function is_in_place_sed(segment: string): boolean {
389
387
  if (time_shell.leading_word(segment) !== IN_PLACE_COMMAND) return false
@@ -466,7 +464,7 @@ function tool_facts(name: string, input: unknown): BundleFacts {
466
464
  // A tool names what it does, so here the two questions have the same answer.
467
465
  const writes = { is_writing: WRITING_TOOLS.has(name), may_write: WRITING_TOOLS.has(name) }
468
466
  // Only a launch is asked, and only a launch can answer `true` — a non-launch tool has no prompt to
469
- // build on a prior finding (joshuafolkken/kit#1854).
467
+ // build on a prior finding.
470
468
  const has_prior_reference = LAUNCH_TOOLS.has(name) && prompt_references_prior(input)
471
469
 
472
470
  if (!BUNDLEABLE_TOOLS.has(name)) return { ...not_bundleable(), ...writes, has_prior_reference }
@@ -478,7 +476,7 @@ function tool_facts(name: string, input: unknown): BundleFacts {
478
476
  // second reader here — the two answers have to be the same one, or a call could be labelled by one
479
477
  // command and classified by another.
480
478
  //
481
- // **The quoted spans come off before the targets are read** (joshuafolkken/kit#1611). `words_of`
479
+ // **The quoted spans come off before the targets are read**. `words_of`
482
480
  // treats a quote as a separator rather than as a boundary, and `/` is not a separator at all — so
483
481
  // `sed -i '' 's/old/new/' scripts/one.ts` yielded `s/old/new` beside the real path, and
484
482
  // `investigation-reads.ts` then held a file that no edit could ever name pending for the rest of the
@@ -500,8 +498,8 @@ function bash_facts(command: string): BundleFacts {
500
498
  }
501
499
 
502
500
  // A read-only `josh` bookkeeping command is bundleable even though `pnpm` leads it and is a mutation
503
- // word: the allow-list above is the read-only half the leading-word test could not reach
504
- // (joshuafolkken/kit#1875). Its writes are already `false` — no `>`, no in-place `sed` — so the guard
501
+ // word: the allow-list above is the read-only half the leading-word test could not reach.
502
+ // Its writes are already `false` — no `>`, no in-place `sed` — so the guard
505
503
  // can refuse a run of them and `Bundling:` can count them recoverable.
506
504
  if (is_read_josh(command)) {
507
505
  return {
@@ -526,7 +524,7 @@ function bash_facts(command: string): BundleFacts {
526
524
  }
527
525
 
528
526
  // The facts for one call named the way a caller holding a raw tool invocation names it — a tool and
529
- // its input, with nothing unwrapped yet (joshuafolkken/kit#1390).
527
+ // its input, with nothing unwrapped yet.
530
528
  //
531
529
  // **It exists so the live guard and the parser cannot disagree about what a call is.** `time-spans.ts`
532
530
  // reaches the two functions above directly because it has already read the shell command out of the
@@ -545,27 +543,27 @@ const time_bundle_call = {
545
543
  bash_facts,
546
544
  call_facts,
547
545
  tool_facts,
548
- // Exported for `time-agent-bundles.ts` (joshuafolkken/kit#1854), which asks the launch question of a
546
+ // Exported for `time-agent-bundles.ts`, which asks the launch question of a
549
547
  // span's `label` — the tool name for a non-Bash call — so the set lives in one place.
550
548
  is_launch_tool,
551
- // Exported for `time-writes.ts` (joshuafolkken/kit#1472), which asks what a call *wrote* rather
549
+ // Exported for `time-writes.ts`, which asks what a call *wrote* rather
552
550
  // than what it named. The extraction is the same one either way — a second copy of it would let a
553
551
  // path be recognized as a target when read and missed when written.
554
552
  targets_in,
555
553
  tool_targets,
556
- // Exported for the batching guard's own word scan (joshuafolkken/kit#1390), so the two scanners
554
+ // Exported for the batching guard's own word scan, so the two scanners
557
555
  // cannot come to disagree about where one word of a shell line ends and the next begins.
558
- // Exported for the read-fold notice (joshuafolkken/kit#2311), which offers `read:files <path>` only
556
+ // Exported for the read-fold notice, which offers `read:files <path>` only
559
557
  // over file-shaped targets — a bare directory like `scripts/` is a target here but not something
560
558
  // `read:files` can read, so the notice reuses this test rather than keep a second copy that could
561
559
  // drift from what counts as a file path.
562
560
  has_extension,
563
- // Exported for `time-writes.ts` (joshuafolkken/kit#1509), which needs the same two answers to say
561
+ // Exported for `time-writes.ts`, which needs the same two answers to say
564
562
  // *which* files an in-place `sed` wrote. Two copies of this test disagreed in both directions at
565
563
  // once — one called a piped `grep -i` a write, the other missed a bundled `sed -ni`.
566
564
  write_segment,
567
565
  is_in_place_sed,
568
- // Exported for the drift test in `time-bundle-call.test.ts` (joshuafolkken/kit#1875), which pins that
566
+ // Exported for the drift test in `time-bundle-call.test.ts`, which pins that
569
567
  // every name here is a real `josh` command and none of them writes.
570
568
  READ_JOSH_SUBCOMMANDS,
571
569
  }
@@ -3,11 +3,10 @@ import { time_format } from './time-format'
3
3
  import { time_round_trips } from './time-round-trips'
4
4
  import { time_spans, type Span } from './time-spans'
5
5
 
6
- // How many of a run's round trips were avoidable, read from the run rather than assumed
7
- // (joshuafolkken/kit#1344).
6
+ // How many of a run's round trips were avoidable, read from the run rather than assumed.
8
7
  //
9
8
  // Three runs in a row came in at 1.10–1.12 calls per round trip against a 1.50 floor, and neither the
10
- // end-of-run warning (joshuafolkken/kit#1304) nor the live line (joshuafolkken/kit#1329) moved the
9
+ // end-of-run warning nor the live line moved the
11
10
  // number. The Issue's estimate of what batching would return — 33 round trips of 136, about 4.8
12
11
  // minutes — was arithmetic on the floor: it assumed every call could be bundled to 1.50 and said
13
12
  // nothing about which ones actually could. **A mechanism proposed on that figure would be sized by an
@@ -42,7 +41,7 @@ const SAVING_LABEL = 'recoverable wait'
42
41
  // transcript has no per-tool answer either, and a table printed under a `not measured` heading would
43
42
  // be the empty-means-nothing-to-recover reading this block refuses everywhere else.
44
43
  const BY_TOOL_LABEL = 'recoverable by tool'
45
- // The one label the spread-apart series contributes (joshuafolkken/kit#1854). Both launch spellings —
44
+ // The one label the spread-apart series contributes. Both launch spellings —
46
45
  // `Agent` here, `Task` elsewhere — collapse into this one row, so the reconciliation stays balanced.
47
46
  const AGENT_ROW_LABEL = 'Agent'
48
47
  // The per-tool rows sit one level under that row. Two spaces rather than a separate column, because
@@ -62,7 +61,7 @@ const FIRST_CALL = 1
62
61
  // what it leaves out is exactly what `unattributed_round_trips` below then reports.
63
62
  const NO_LABEL = ''
64
63
 
65
- // One tool's share of what the run could have recovered (joshuafolkken/kit#1607). `sequence_count` is
64
+ // One tool's share of what the run could have recovered. `sequence_count` is
66
65
  // the number of sequences this tool contributed a recoverable trip to, not the number of calls it
67
66
  // made — a tool appearing four times inside one sequence is one sequence to go and look at.
68
67
  interface BundleToolRow {
@@ -75,7 +74,7 @@ interface BundleToolRow {
75
74
  // batched everything genuinely has no sequence, and a run whose transcript was never read has none
76
75
  // either — printing `0` for both would report the first as though it were the second.
77
76
  //
78
- // **`by_tool` is what makes the count actionable** (joshuafolkken/kit#1607). `recoverable_round_trips`
77
+ // **`by_tool` is what makes the count actionable**. `recoverable_round_trips`
79
78
  // says how many turns could have been one and nothing about *whose* turns they were, so a diag that
80
79
  // read only it could name a density and never a tool — and the tool was then found by reading the
81
80
  // transcript by hand, once per run.
@@ -141,7 +140,7 @@ function shares_target(left: ReadonlyArray<string>, right: ReadonlyArray<string>
141
140
  // earlier one's result", and for a read after a write it is a good one — an `Edit`'s `old_string`
142
141
  // came from the `Read` before it.
143
142
  //
144
- // **Between two writes it is not** (joshuafolkken/kit#1509). A second edit to a file already held
143
+ // **Between two writes it is not**. A second edit to a file already held
145
144
  // needs nothing from the first, so both belong in one turn — and treating the pair as dependent is
146
145
  // what kept the guard silent for a whole run. `extend` below does not merely decline to count such a
147
146
  // pair: it *flushes* the sequence and restarts it at the conflicting call, so a stretch of single-call
@@ -183,7 +182,7 @@ function is_turn_boundary(span: Span): boolean {
183
182
  // The walk's three running pieces: the calls of the round trip currently open, the sequence being
184
183
  // extended, and the sequences already closed.
185
184
  //
186
- // **`closed` keeps the calls rather than their lengths** (joshuafolkken/kit#1607). A length is all the
185
+ // **`closed` keeps the calls rather than their lengths**. A length is all the
187
186
  // three totals need, and it is also everything the per-tool breakdown cannot be rebuilt from — the
188
187
  // labels are gone by the time anything asks. Retaining the spans is what lets one walk answer both,
189
188
  // and a second walk over the same rule would be the clone `CLAUDE.md` prohibits.
@@ -225,7 +224,7 @@ function close_trip(walk: Walk): void {
225
224
 
226
225
  // Whether this span is still the turn whose calls are pending. **A turn's calls are separated by its
227
226
  // own model spans**, because Claude Code writes one line per content block and the harness returns
228
- // each result as it arrives (joshuafolkken/kit#1406) — so closing the trip on every model span read
227
+ // each result as it arrives — so closing the trip on every model span read
229
228
  // one batched turn as several single-call ones and offered it back as a sequence that could have been
230
229
  // bundled, which it already was. An absent id matches nothing, leaving the adjacency reading intact
231
230
  // for a transcript that wrote none.
@@ -286,7 +285,7 @@ function tally_for(tallies: Map<string, ToolTally>, label: string): ToolTally {
286
285
  return created
287
286
  }
288
287
 
289
- // **Attribution is per call, not per sequence** (joshuafolkken/kit#1607). A sequence of `n` calls
288
+ // **Attribution is per call, not per sequence**. A sequence of `n` calls
290
289
  // holds `n - 1` avoidable trips, and the call that made each of them its own turn is the one after
291
290
  // the first — so each trip goes to *that* call's tool. Attributing a whole sequence to one tool would
292
291
  // have named a tool only where every call in the sequence shared one, and a real run's sequences are
@@ -338,7 +337,7 @@ function attributed_of(rows: ReadonlyArray<BundleToolRow>): number {
338
337
  // arrive in time order: a delegated unit's are appended after the parent's, and `time_corpus`
339
338
  // concatenates one session after another. Walked in array order, two turns from different sessions
340
339
  // would read as consecutive and be counted as a sequence nobody could have batched.
341
- // The spread-apart launch series folded in as one row (joshuafolkken/kit#1854). Appended and re-sorted
340
+ // The spread-apart launch series folded in as one row. Appended and re-sorted
342
341
  // rather than pushed in place, so the heaviest-first order still holds; omitted entirely when it
343
342
  // recovered nothing, so a run that fanned out its launches shows no empty `Agent` row. Its whole count
344
343
  // enters the total below beside it, which is what keeps `unattributed_round_trips` at zero.
@@ -387,7 +386,7 @@ function build_bundles(spans: ReadonlyArray<Span>): BundleTotals {
387
386
  }
388
387
 
389
388
  // The sequence the walk is still inside when the spans run out — the trailing run of consecutive
390
- // single-call bundleable turns (joshuafolkken/kit#1390).
389
+ // single-call bundleable turns.
391
390
  //
392
391
  // **Neither `close_trip` nor `flush` is called, and that is the whole difference from
393
392
  // `build_bundles`.** The report closes the walk because it is pricing a run that has ended; a guard
@@ -1,7 +1,7 @@
1
1
  import { time_command_key } from './time-command-key'
2
2
  import type { Span } from './time-spans'
3
3
 
4
- // What "the same call" means, in one place (joshuafolkken/kit#1979).
4
+ // What "the same call" means, in one place.
5
5
  //
6
6
  // Two readers ask it and must agree. `time-guard-refusals.ts` asks whether a refused call was later
7
7
  // re-issued unchanged — the false-positive hint on the guard breakdown — and `time-batch-guard.ts`
@@ -1,6 +1,6 @@
1
1
  import { time_spans, type Span } from './time-spans'
2
2
 
3
- // What counts as *the same command* across a run's spans (joshuafolkken/kit#1311).
3
+ // What counts as *the same command* across a run's spans.
4
4
  //
5
5
  // Two questions need it and used to answer it separately: the failure chain asks whether a call
6
6
  // repeats one that just failed, and the per-invocation listing asks which calls belong on one row.
@@ -22,7 +22,7 @@ import { time_spans, type Span } from './time-spans'
22
22
  const UNNAMED_KEY = ''
23
23
 
24
24
  // **The parameter is the two fields it reads, not the whole `Span`.** A full span satisfies it, and so
25
- // does a `ToolCall` the batching guard builds for a live call (joshuafolkken/kit#1979) — the key has
25
+ // does a `ToolCall` the batching guard builds for a live call — the key has
26
26
  // to mean the same thing whether it is read off a recorded span or the call about to repeat it.
27
27
  function command_key(span: Pick<Span, 'label' | 'josh_command'>): string {
28
28
  if (span.label === time_spans.UNKNOWN_TOOL) return UNNAMED_KEY
@@ -1,11 +1,12 @@
1
1
  import { closeSync, fstatSync, openSync, readSync } from 'node:fs'
2
2
  import { stamp_file } from '#scripts/josh/stamp-file'
3
+ import { json_value } from '#scripts/lib/json-value'
3
4
  import { z } from 'zod'
4
5
  import { time_batch_guard, type GuardedCall } from './time-batch-guard'
5
6
  import { time_density } from './time-density'
6
7
  import { time_hook_transcript } from './time-hook-transcript'
7
8
 
8
- // The disk half of the live density line (joshuafolkken/kit#1329): find the transcript, read enough
9
+ // The disk half of the live density line: find the transcript, read enough
9
10
  // of it, and remember when the line was last emitted.
10
11
  //
11
12
  // **It rides the hook that already runs, and adds no second one.** `.claude/settings.json` wires
@@ -13,8 +14,8 @@ import { time_hook_transcript } from './time-hook-transcript'
13
14
  // tool would put a process start in front of all ~250 calls of a run to say something on a handful of
14
15
  // them.
15
16
  //
16
- // **`Bash` is in that list because the edit half was measured missing its audience**
17
- // (joshuafolkken/kit#1337). Riding the edit hook was chosen on run #1299, where `Edit` was the
17
+ // **`Bash` is in that list because the edit half was measured missing its audience**.
18
+ // Riding the edit hook was chosen on run #1299, where `Edit` was the
18
19
  // most-called tool at 65 calls — and that run no longer represents how these sessions work. Of the
19
20
  // ten most recent in this checkout, **seven called `Edit` and `Write` zero times**: they edit through
20
21
  // `sed` instead, and they are the same sessions measured at 1.00–1.31 against the 1.50 floor, so the
@@ -50,8 +51,8 @@ const NEVER_MS = 0
50
51
  // `tool_input` the formatter half uses, so a file is named rather than searched for — no
51
52
  // home-directory walk.
52
53
  //
53
- // **`agent_id` is what makes a delegated unit answerable with its own transcript**
54
- // (joshuafolkken/kit#1424). The path in the payload is the *parent* session's, whichever agent issued
54
+ // **`agent_id` is what makes a delegated unit answerable with its own transcript**.
55
+ // The path in the payload is the *parent* session's, whichever agent issued
55
56
  // the call, so without this field the line a fork read described the parent's calls per round trip —
56
57
  // a number about a run the reader is not in. `time-hook-transcript.ts` carries the derivation.
57
58
  const payload_schema = z.object({
@@ -72,7 +73,7 @@ function parse_transcript_path(raw_payload: string): string | undefined {
72
73
  return time_hook_transcript.transcript_of(parsed.data.transcript_path, parsed.data.agent_id)
73
74
  }
74
75
 
75
- // The call that has just run, as the payload names it (joshuafolkken/kit#3157) — what the line checks
76
+ // The call that has just run, as the payload names it — what the line checks
76
77
  // against the turns behind it, so a call that needed their result is never offered as one that could
77
78
  // have shared their turn. A payload without a tool name answers `undefined`, judged on those turns alone.
78
79
  function parse_call(raw_payload: string): GuardedCall | undefined {
@@ -116,11 +117,7 @@ function last_notice_ms(source: string): number {
116
117
 
117
118
  if (raw === undefined) return NEVER_MS
118
119
 
119
- try {
120
- return notice_schema.parse(JSON.parse(raw)).notified_at_ms
121
- } catch {
122
- return NEVER_MS
123
- }
120
+ return json_value.parse_with(raw, notice_schema)?.notified_at_ms ?? NEVER_MS
124
121
  }
125
122
 
126
123
  // **Arming the throttle is best-effort, and never costs the line.** The caller prints and exits, so
@@ -2,12 +2,12 @@ import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
2
2
  import { time_round_trips } from './time-round-trips'
3
3
  import { time_spans, type TranscriptLine } from './time-spans'
4
4
 
5
- // The round-trip density a run can be told **while it is still running** (joshuafolkken/kit#1329).
5
+ // The round-trip density a run can be told **while it is still running**.
6
6
  //
7
7
  // `time-round-trips.ts` already computes the number this reads, and `josh time` already warns on it
8
8
  // — after the run has ended. Measured on run #1299, that report changed nothing: the density stayed
9
9
  // at 1.08 with 159 of 172 tool-issuing turns making a single call, because the norm
10
- // joshuafolkken/kit#1304 shipped as prose in `CLAUDE.md` reaches a reader who has already finished.
10
+ // stated as prose in `CLAUDE.md` reaches a reader who has already finished.
11
11
  // What was missing is the number arriving in time to change the next turn.
12
12
  //
13
13
  // **The density is `time_round_trips`, reused rather than restated.** A second calculation here
@@ -25,8 +25,8 @@ import { time_spans, type TranscriptLine } from './time-spans'
25
25
  // to skip — which costs more than the line saves.
26
26
  const MIN_ROUND_TRIPS = 10
27
27
  // At most one line per this interval, per checkout. The line lands in the run's context and stays
28
- // there, so a reminder with no throttle would spend exactly the budget joshuafolkken/kit#1322 is
29
- // about: 65 edits of run #1299 would have carried 65 copies of it. Five minutes is roughly 30 round
28
+ // there, so a reminder with no throttle would spend the very context budget it is
29
+ // meant to save: 65 edits of run #1299 would have carried 65 copies of it. Five minutes is roughly 30 round
30
30
  // trips at
31
31
  // the 9.7s each cost in that run — often enough to reach the phase that is drifting, rare enough that
32
32
  // a whole run pays well under a thousand tokens for the feedback.
@@ -121,7 +121,7 @@ function is_due(reading: DensityReading, since_last_ms: number): boolean {
121
121
  // what to do differently. The instruction is last because it is the only part worth acting on, and it
122
122
  // names the resident rule rather than restating it — the rule is already in the run's context, and a
123
123
  // second wording of it would be a clone that can drift. `candidates` is the concrete calls that could
124
- // have shared a turn (joshuafolkken/kit#3157), appended last so the line ends on what to do next.
124
+ // have shared a turn, appended last so the line ends on what to do next.
125
125
  function format_notice(reading: DensityReading, candidates = ''): string {
126
126
  const density = time_round_trips.format_density(reading.density)
127
127
  const floor = time_round_trips.format_density(time_round_trips.CALLS_PER_ROUND_TRIP_FLOOR)
@@ -1,13 +1,13 @@
1
1
  import { git_followup_stages, type FollowupStage } from '#scripts/followup/git-followup-stages'
2
2
 
3
- // Reading `followup`'s own stage rows back out of what it printed (joshuafolkken/kit#1445).
3
+ // Reading `followup`'s own stage rows back out of what it printed.
4
4
  //
5
- // joshuafolkken/kit#1349 gave `pnpm josh followup` a per-stage block — one
6
- // `followup stage: <name> <n> s` row per lap — and declared the prefix as a constant so a reader
7
- // could be added without matching a string the printer is free to reword. **There was no reader.**
8
- // `josh time` sees a `followup` invocation as one Bash span, so the breakdown existed only on the
9
- // screen of whoever happened to be watching that run: two runs could not be compared stage by stage,
10
- // and a transcript recorded last week could not be read at all.
5
+ // `pnpm josh followup` prints a per-stage block — one
6
+ // `followup stage: <name> <n> s` row per lap — and declares the prefix as a constant so a reader
7
+ // can be added without matching a string the printer is free to reword. This is that reader.
8
+ // `josh time` sees a `followup` invocation as one Bash span, so without it the breakdown exists only
9
+ // on the screen of whoever happened to be watching that run: two runs cannot be compared stage by
10
+ // stage, and a transcript recorded last week cannot be read at all.
11
11
  //
12
12
  // **The prefix is imported rather than retyped**, which is the whole of what keeps this from being a
13
13
  // guess about another module's output — the shape `time-reported-failure.ts` already uses for
@@ -1,4 +1,4 @@
1
- // The column and number formatting every timing report is laid out through (joshuafolkken/kit#1309).
1
+ // The column and number formatting every timing report is laid out through.
2
2
  //
3
3
  // It was `time-report.ts`'s until three renderers shared it: the run scope's own tables, the epic
4
4
  // scope's child rows, and the failure block `time-failures.ts` prints. Two of those already reached
@@ -29,18 +29,18 @@ const MINUTES_WIDTH = 9
29
29
  const NOT_MEASURED = 'not measured'
30
30
  // What a row says instead of a rate when there was no round trip to divide by. It sits here rather
31
31
  // than in `time-report.ts` because two blocks print it — the round-trip price and the bundling block —
32
- // and `time-bundles.ts` cannot import `time-report.ts`, which imports it (joshuafolkken/kit#1344).
32
+ // and `time-bundles.ts` cannot import `time-report.ts`, which imports it.
33
33
  const NO_CALLS = 'no tool call to divide'
34
34
  // How many rows of a table any of these reports prints. Capped, because a long run touches thirty-odd
35
35
  // distinct leading commands and a table that long is read by nobody. `--json` carries every row the
36
36
  // report holds, so the display cap costs a caller nothing.
37
37
  //
38
38
  // **It moved here when the segment and per-invocation tables became the fourth and fifth renderers to
39
- // need it** (joshuafolkken/kit#1311). Those two cannot import `time-report.ts`, which imports them —
39
+ // need it**. Those two cannot import `time-report.ts`, which imports them —
40
40
  // and a second cap beside a second renderer is exactly the drift this file was split out to prevent.
41
41
  const MAX_ROWS = 15
42
42
 
43
- // **The parenthetical says "this report" rather than "them all"** (joshuafolkken/kit#1301): since
43
+ // **The parenthetical says "this report" rather than "them all"**: since
44
44
  // `--top` can cut the record itself before either rendering, a promise that `--json` carries every row
45
45
  // *there ever was* would be false beside a `--top` above this display cap — and the report would then
46
46
  // contradict its own truncation note. What was cut from the record, if anything, is said in `notes`;
@@ -74,7 +74,7 @@ function format_share(part: number, whole: number): string {
74
74
  // to the cent, a per-round-trip figure finer), so the decimals are the caller's and only the `$` and
75
75
  // the `toFixed` are shared. It sits here beside the other number formatters rather than in one block,
76
76
  // for the reason `format_minutes` does: a second copy beside the second renderer is how two cost rows
77
- // of one report come to punctuate a dollar amount two ways (joshuafolkken/kit#1606).
77
+ // of one report come to punctuate a dollar amount two ways.
78
78
  function usd(amount: number, decimals: number): string {
79
79
  return `$${amount.toFixed(decimals)}`
80
80
  }
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
2
  import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
3
3
 
4
- // Which transcript a Claude Code hook payload is actually about (joshuafolkken/kit#1424).
4
+ // Which transcript a Claude Code hook payload is actually about.
5
5
  //
6
6
  // **A hook fired for a forked agent's tool call is handed the *parent* session's transcript.** Both
7
7
  // events this package wires carry the same session fields, and neither of them names the fork's own
@@ -10,8 +10,8 @@ import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
10
10
  // `<projects>/<slug>/<session-id>/subagents/agent-<agent-id>.jsonl`.
11
11
  //
12
12
  // **So every reader built on `transcript_path` alone has been reading the wrong run inside a fork**,
13
- // and two of them are: the batching guard (joshuafolkken/kit#1390) and the live density line
14
- // (joshuafolkken/kit#1329). Measured on 551 forked review agents in this checkout, the guard refused
13
+ // and two of them are: the batching guard and the live density line.
14
+ // Measured on 551 forked review agents in this checkout, the guard refused
15
15
  // **zero** calls — while a replay of the same transcripts through the fork's own file refuses 1–4 per
16
16
  // review round. The parent's timeline is frozen for as long as a fork runs, because the fork's lines
17
17
  // go to the fork's file: its open sequence never advances, so it either never reaches the limit or
@@ -1,4 +1,4 @@
1
- // One decision about an unparseable timestamp, made once (joshuafolkken/kit#1268).
1
+ // One decision about an unparseable timestamp, made once.
2
2
  //
3
3
  // Both halves of a run carry dates from somewhere else — the transcript's `timestamp` and GitHub's
4
4
  // `created_at` / `merged_at` / check-run times — and both have to answer the same question about a
@@ -1,7 +1,7 @@
1
1
  import { cost_attribute } from '#scripts/cost-runtime/cost-attribute'
2
2
  import { json_value } from '#scripts/lib/json-value'
3
3
 
4
- // Which workflow boundary a tool call marks (joshuafolkken/kit#1269).
4
+ // Which workflow boundary a tool call marks.
5
5
  //
6
6
  // The per-tool totals answer "which command is slow" and say nothing about "which *stage* is long".
7
7
  // A stage is bounded by things a transcript can be read for, so this module is the one rule for what
@@ -14,7 +14,7 @@ import { json_value } from '#scripts/lib/json-value'
14
14
  // would be a second rule for the same thing. What is left is four: the plan comment, the first
15
15
  // edit, the code-review invocation, and the instant the workflow itself opened.
16
16
  //
17
- // **The workflow boundary has two spellings, and both are the same marker** (joshuafolkken/kit#1299).
17
+ // **The workflow boundary has two spellings, and both are the same marker**.
18
18
  // A run is not a session: the transcript attributed to an issue reaches back into whatever the
19
19
  // session was doing before the keyword was typed, so without a marker for "the run starts here"
20
20
  // that earlier conversation is measured as part of it. Loading the `workflow-commands` skill is the
@@ -22,22 +22,18 @@ import { json_value } from '#scripts/lib/json-value'
22
22
  // them performs on GitHub — so the earliest of the two is taken and neither is required, which is
23
23
  // what keeps a delegated unit (whose parent loaded the skill) and a resumed run measurable.
24
24
  //
25
- // **The review boundary sits on whatever call the main line spends the review inside**, and since
26
- // joshuafolkken/kit#1855 that is an `Agent` call rather than a `Skill` one. Before it, the main line
27
- // loaded `/code-review` through the `Skill` tool and that call returned three to four minutes later
28
- // with the finding list — so the `Skill(code-review)` call carried the review's whole duration and
29
- // was the marker. #1855 moved the review into a forked subagent launched with the `Agent` tool, and
30
- // the main line no longer loads the skill at all: the `Skill(code-review)` call now lives inside the
31
- // fork's own transcript, where it returns instantly (it only loads the skill text), and the review's
25
+ // **The review boundary sits on whatever call the main line spends the review inside**, which is an
26
+ // `Agent` call: the review runs in a forked subagent, and the `Skill(code-review)` call lives inside
27
+ // the fork's own transcript, where it returns instantly (it only loads the skill text). The review's
32
28
  // real wall clock is the fork's own `Read`/`grep` spans. Those spans carry no marker of their own, so
33
- // they inherit the marker of the parent span they run inside — the `Agent` call (`time-overlap.ts`,
34
- // joshuafolkken/kit#1439). Left unmarked that parent deletes the phase rather than moving it, which is
35
- // the ~0 ms `review` joshuafolkken/kit#1846 measured. So the `Agent` launch is marked here, exactly
36
- // as the `Skill` call was, and the old `Skill(code-review)` marker stays for pre-#1855 transcripts.
29
+ // they inherit the marker of the parent span they run inside — the `Agent` call (`time-overlap.ts`).
30
+ // Left unmarked that parent deletes the phase rather than moving it, leaving a ~0 ms `review`. So the
31
+ // `Agent` launch is marked here, and the `Skill(code-review)` marker stays for older transcripts in
32
+ // which the main line loaded the skill itself.
37
33
  //
38
34
  // **The launch is recognized by its prompt carrying both `/code-review` and `review:attest`.** The
39
35
  // first is the instruction to invoke the review skill; the second is the attestation line
40
- // `pnpm josh review:brief` emits into the brief the launch passes verbatim (joshuafolkken/kit#1522).
36
+ // `pnpm josh review:brief` emits into the brief the launch passes verbatim.
41
37
  // Neither alone is enough: an investigation subagent about the review tooling quotes `/code-review`
42
38
  // in prose and is handed no brief, so `review:attest` is what tells a genuine review launch from a
43
39
  // discussion of one — measured against five real launches, it admits the review and rejects every
@@ -59,7 +55,7 @@ const SKILL_KEY = 'skill'
59
55
  const REVIEW_SKILL = 'code-review'
60
56
  const WORKFLOW_SKILL = 'workflow-commands'
61
57
 
62
- // The forked review launch (joshuafolkken/kit#1846). `Agent` is the tool the main line spawns the
58
+ // The forked review launch. `Agent` is the tool the main line spawns the
63
59
  // review subagent with, and `prompt` is where the instruction to it lives.
64
60
  const AGENT_TOOL = 'Agent'
65
61
  const PROMPT_KEY = 'prompt'
@@ -99,7 +95,7 @@ const BODY_FLAG_PATTERN = /--body(?:-file)?\b/u
99
95
  // The API path is required alongside it for the reason the plan boundary requires one: a command that
100
96
  // merely quotes the flag, which this repository's own issue bodies do, is not the call.
101
97
  // The number is captured because the same call is the only place a run states, in its own transcript,
102
- // which issue it is running (joshuafolkken/kit#1617). Capturing changes nothing for the `test` above
98
+ // which issue it is running. Capturing changes nothing for the `test` above
103
99
  // it — the boundary is still the whole match.
104
100
  // **The trailing `(?!\/)` is what keeps the capture on the issue being labelled.** `labels[]=in-progress`
105
101
  // only has to appear somewhere in the command, and the capture takes the leftmost match — so one call
@@ -111,7 +107,7 @@ const BODY_FLAG_PATTERN = /--body(?:-file)?\b/u
111
107
  const ISSUE_LABELS_PATTERN = /repos\/\S+\/issues\/(\d+)\/labels\b(?!\/)/u
112
108
  const IN_PROGRESS_FIELD = 'labels[]=in-progress'
113
109
 
114
- // **`run:entry` applies the label itself now** (joshuafolkken/kit#3182), so a run opened through it
110
+ // **`run:entry` applies the label itself now**, so a run opened through it
115
111
  // leaves no `gh api` add form in its transcript — the call that opens the run and names its issue is
116
112
  // `pnpm josh run:entry <N>`, and it is read as the same declaration. `run:release` is not: like the
117
113
  // removal form above, it ends a hold rather than opening one.
@@ -173,8 +169,8 @@ function is_run_start(command: string): boolean {
173
169
 
174
170
  // Which issue a Bash call declares its run to be running, or `undefined` where it declares nothing.
175
171
  //
176
- // **Attribution's other evidence is the branch, and a lane run has none to give**
177
- // (joshuafolkken/kit#1617): the session writing the transcript stays on the default branch while the
172
+ // **Attribution's other evidence is the branch, and a lane run has none to give**:
173
+ // the session writing the transcript stays on the default branch while the
178
174
  // child's commands run in a linked work tree, so `gitBranch` says `main` on every line and
179
175
  // `cost_attribute` has nothing to fill forward. This call is what is left, and it is the right thing
180
176
  // to be left with — it is the run naming its own issue, once, and `time-sessions.ts` already treats
@@ -5,7 +5,7 @@
5
5
  // grew past its length limit as phases were added to it, and this is the half with nothing to decide
6
6
  // — it says what a phase *is*, while the file it left decides which one a span belongs to. Nothing
7
7
  // here imports the classifier, so the dependency runs one way and the next phase added costs one
8
- // line rather than a fresh argument about where to put it (joshuafolkken/kit#1331).
8
+ // line rather than a fresh argument about where to put it.
9
9
 
10
10
  type PhaseName =
11
11
  | 'plan'
@@ -71,12 +71,12 @@ const PHASE_ORDER: ReadonlyArray<PhaseName> = [
71
71
  // transcript was read at all, rather than on a marker.
72
72
  //
73
73
  // **They are withheld on exactly the terms the three transcript category rows are**
74
- // (joshuafolkken/kit#1295) — no span read at all. `wait` printing `0.0 min` where nothing was read
74
+ // — no span read at all. `wait` printing `0.0 min` where nothing was read
75
75
  // asserts that nobody waited, and the run that produces it is the one a reader is least able to check.
76
76
  // Keying every one of them off the same criterion is also what keeps `wait` + `wait-outside` equal to
77
77
  // the `human wait` category row: they are withheld together or printed together, never some of each.
78
78
  //
79
- // **`wait-outside` is in this set rather than detected on the run's edges** (joshuafolkken/kit#1331),
79
+ // **`wait-outside` is in this set rather than detected on the run's edges**,
80
80
  // which is where it differs from `pre-run` and `post-run`. Its zero is not a claim about an unchecked
81
81
  // half, because those two rows report the same two boundaries in their own right — a reader seeing
82
82
  // `pre-run not detected` beside `wait-outside 0.0 min` already knows that edge was never found, and