@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
@@ -3,8 +3,8 @@ import { gh_api } from './gh-api'
3
3
  import { git_argv } from './git-argv'
4
4
  import { shell_segments } from './shell-segments'
5
5
 
6
- // The trigger and the delivered text behind the `destructive-command` row of `delivered-rules.ts`
7
- // (joshuafolkken/kit#2983): a recursive forced `rm`, and the `gh` calls that delete or close shared
6
+ // The trigger and the delivered text behind the `destructive-command` row of `delivered-rules.ts`:
7
+ // a recursive forced `rm`, and the `gh` calls that delete or close shared
8
8
  // state — none of which the deny list stopped, or stopped only in one spelling (`Bash(rm -rf *)`
9
9
  // misses `rm -fr`, `rm -r -f` and `rm --recursive --force`). The argv is read through `git-argv.ts`'s
10
10
  // wrapper cut, so `sudo rm -fr` and `env gh pr close` are seen too.
@@ -1,11 +1,11 @@
1
1
  import { bash_triggers } from './bash-triggers'
2
2
 
3
- // The `direct-filing` row of `delivered-rules.ts` (joshuafolkken/kit#2808). Filing an Issue owes a
3
+ // The `direct-filing` row of `delivered-rules.ts`. Filing an Issue owes a
4
4
  // duplicate scout, a body lint, the classification / depth / `route:` labels, a `## Origin` on a
5
5
  // cross-repository filing and an `epic:bundle` afterwards — steps spread over as many documents, each
6
- // with its own guard, and joshuafolkken/kit#2805 ran two of them and skipped the rest. `josh issue:file`
7
- // runs them all in one command, so a hand-built `gh api …/issues` / `gh issue create` filing is refused
8
- // outright and pointed there; the step-by-step guards that used to sit on the direct call went with it.
6
+ // with its own guard, so a run can take some and skip the rest. `josh issue:file` runs them all in one
7
+ // command, so a hand-built `gh api …/issues` / `gh issue create` filing is refused outright and
8
+ // pointed there.
9
9
 
10
10
  const DIRECT_FILING_REASON =
11
11
  '⛔ direct filing: an Issue is filed with `pnpm josh issue:file "<title>" --body-file <path> ' +
@@ -3,8 +3,8 @@ import { gh_api } from './gh-api'
3
3
  import { git_argv } from './git-argv'
4
4
  import { shell_segments } from './shell-segments'
5
5
 
6
- // The trigger and the delivered text behind the `direct-pr-create` row of `delivered-rules.ts`
7
- // (joshuafolkken/kit#3183). A PR opened outside `pnpm josh pr` skips `build_body`, which writes the
6
+ // The trigger and the delivered text behind the `direct-pr-create` row of `delivered-rules.ts`.
7
+ // A PR opened outside `pnpm josh pr` skips `build_body`, which writes the
8
8
  // `closes #N` line — so the Issue stays open after the merge. `CLAUDE.md` forbade the call in prose
9
9
  // only; this row reads the argv instead, through `git-argv.ts`'s wrapper cut, so `env gh pr create`
10
10
  // is seen too. `pnpm josh pr` itself is never claimed: its first word after the wrapper is `pnpm`,
@@ -6,20 +6,17 @@ import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
6
6
  import { time_shell } from '#scripts/time-runtime/time-shell'
7
7
  import { shell_segments } from './shell-segments'
8
8
 
9
- // The trigger and the decision behind the `early-heartbeat` row of `delivered-rules.ts`
10
- // (joshuafolkken/kit#1570).
9
+ // The trigger and the decision behind the `early-heartbeat` row of `delivered-rules.ts`.
11
10
  //
12
- // **The promise was kept and the interval was not.** `josh run:progress --mark` was called at every
13
- // real report exactly as `backlogrun.md` requires, and reports still arrived 3–5 minutes apart on a
14
- // 15-minute setting. The clock was never the problem: the parent armed a wait timer of its own on the
15
- // turn a timer fired **and** on the turn a delegated child's completion woke it, so two timers ran at
16
- // once and each produced a report the other knew nothing about. Nothing read the marked clock before
17
- // writing — `run:progress` refuses its own early lines, and there was no such refusal in front of the
18
- // parent's own prose.
11
+ // **A second wait timer breaks the interval.** A parent that arms a wait timer of its own on the turn
12
+ // a timer fires **and** on the turn a delegated child's completion wakes it runs two timers at once,
13
+ // each producing a report the other knows nothing about — reports arrive minutes apart whatever the
14
+ // setting. `run:progress` refuses its own early lines, but nothing refuses an early report written in
15
+ // the parent's own prose.
19
16
  //
20
17
  // **So the refusal is put in front of the arm, not in front of the report.** A report is written in
21
18
  // prose and no hook can see it coming; the `Bash` call that sleeps is a call, and a call can be
22
- // refused — the same reading joshuafolkken/kit#1556 took for a verification behind a pipe.
19
+ // refused — the same reading `piped-verification.ts` takes for a verification behind a pipe.
23
20
  //
24
21
  // **An explicit ask is not a heartbeat, and it is exempt by construction rather than by exception.**
25
22
  // What is refused here is arming a *timer*; a person asking "how is it going" arrives as a turn with
@@ -145,7 +142,7 @@ function landing_ms(command: string, now_ms: number, last_report_ms: number): nu
145
142
  *
146
143
  * **No progress record means no clock, and no clock means no rule.** An ordinary conversational
147
144
  * session never starts the watcher and never marks, so it reads `undefined` here and nothing is
148
- * refused — the scope joshuafolkken/kit#1570 set out of bounds, held by the absence of a record rather
145
+ * refused — out of the rule's scope, held by the absence of a record rather
149
146
  * than by a second judgement about what kind of session this is.
150
147
  *
151
148
  * **A live timer is counted from the record this function writes, never from the processes on the
@@ -181,8 +178,8 @@ function decide(call: GuardedCall, run: GuardRun, can_record: boolean): boolean
181
178
  }
182
179
 
183
180
  // The instruction in the shape a refusal can carry: what the call is about to do, what already does it
184
- // properly, and the one command an explicit ask is answered with. The measurement is named because it
185
- // is the half that makes the rule believable — the promise was kept and the interval was not.
181
+ // properly, and the one command an explicit ask is answered with. The observed failure is named
182
+ // because it is what makes the rule believable.
186
183
  const EARLY_HEARTBEAT_REASON =
187
184
  '⛔ early heartbeat: this call arms a wait timer of its own, and the progress clock is not yours ' +
188
185
  'to keep. `pnpm josh run:progress --wait` keeps it for you ' +
@@ -194,8 +191,8 @@ const EARLY_HEARTBEAT_REASON =
194
191
  '(joshuafolkken/kit#1570): a new one was armed on the turn a timer fired and again on the turn a ' +
195
192
  "child's completion woke the run, and `--mark` recorded each report without anything refusing the " +
196
193
  'early ones. **An explicit ask is not a heartbeat**: if the person asked for progress now, run ' +
197
- '`pnpm josh run:progress --once`, which prints the five labelled lines whatever the clock says. ' +
198
- 'If you are ' +
194
+ '`pnpm josh run:progress --once`, which prints the five labelled lines whatever the clock says — ' +
195
+ 'under `backlogrun`, `pnpm josh run:board --chat` instead. If you are ' +
199
196
  'waiting on something rather than on a clock, wait on the thing itself — `pnpm josh followup` ' +
200
197
  'waits for CI. The procedure is `.claude/skills/workflow-commands/backlogrun.md` → "Progress while ' +
201
198
  'the run is quiet". **This rule fires on every early arm, not once per run**, so reissuing the ' +
@@ -205,8 +202,7 @@ const EARLY_HEARTBEAT_REASON =
205
202
  // the interval out, and `--once` answers an explicit ask. `--mark` is neither: it records a report
206
203
  // that has already gone out rather than waiting for the next one, and crediting it would score every
207
204
  // run that reported at all as having kept a rule about waiting.
208
- // The canonical name; both spellings match, because the alias is expanded where the command is read
209
- // (joshuafolkken/kit#1789).
205
+ // The canonical name; both spellings match, because the alias is expanded where the command is read.
210
206
  const PROGRESS_NAMES: ReadonlySet<string> = new Set(['run:progress'])
211
207
  const WATCH_FLAG = /(?:^|\s)--(?:wait|once)(?=\s|$)/u
212
208
 
@@ -222,8 +218,8 @@ function is_progress_watch(command: string): boolean {
222
218
  )
223
219
  }
224
220
 
225
- // **The occasion this rule governs: waiting for the run's next progress report**, in either spelling
226
- // (joshuafolkken/kit#1643). The trigger fires only on the hand-armed timer, so a run that always let
221
+ // **The occasion this rule governs: waiting for the run's next progress report**, in either spelling.
222
+ // The trigger fires only on the hand-armed timer, so a run that always let
227
223
  // the watcher wait would never appear in the reading at all.
228
224
  function waits_for_progress(command: string): boolean {
229
225
  return is_wait_timer(command) || is_progress_watch(command)
@@ -3,10 +3,9 @@ import { time_shell } from '#scripts/time-runtime/time-shell'
3
3
  import { bash_triggers } from './bash-triggers'
4
4
  import { shell_segments } from './shell-segments'
5
5
 
6
- // The trigger and the delivered text behind the `file-body` row of `delivered-rules.ts`
7
- // (joshuafolkken/kit#2120). Group 3 of the three Bash-string gaps: a file's new body carried inline in
8
- // a shell command, the form `CLAUDE.md` → "Never carry a file's new text inside a shell command" and
9
- // `file-edits.md` forbid.
6
+ // The trigger and the delivered text behind the `file-body` row of `delivered-rules.ts`.
7
+ // Group 3 of the three Bash-string gaps: a file's new body carried inline in
8
+ // a shell command, the form `prompts/collaboration-workflow/file-edits.md` forbids.
10
9
  //
11
10
  // **The detector existed for measurement and refused nothing.** `time-writes.ts` already knew a
12
11
  // redirection and a heredoc write a file; nothing turned that knowledge into a refusal. This row does,
@@ -39,7 +38,7 @@ function has_heredoc(command: string): boolean {
39
38
  // The lines the shell reads as commands — every physical line outside a heredoc body — each paired with
40
39
  // the heredoc body it opened. A command, its redirect and its heredoc marker share one of these; the body
41
40
  // follows up to the delimiter line. Reading only the first physical line missed the interpreter a run
42
- // opened after a `cd <lane>` line (joshuafolkken/kit#3155), so every command line is read, a body line is
41
+ // opened after a `cd <lane>` line, so every command line is read, a body line is
43
42
  // never mistaken for one, and a write is judged only in the body its own command opened.
44
43
  interface CommandLine {
45
44
  text: string
@@ -118,7 +117,7 @@ function body_writes(body: string): boolean {
118
117
 
119
118
  // A script file for one of the body interpreters. Creating one is a new-file creation, but a script
120
119
  // whose body writes is the interpreter rewrite moved one call later — `cat > edit.py <<EOF` then
121
- // `python3 edit.py` carries the same replacement text (joshuafolkken/kit#3155).
120
+ // `python3 edit.py` carries the same replacement text.
122
121
  const SCRIPT_FILE = /\.(?:py|rb|pl|php|js|mjs|cjs)$/u
123
122
 
124
123
  // Shapes 1 and 4: a heredoc write whose target already exists, or whose target is a script that writes.
@@ -5,8 +5,7 @@ import { time_transcript_line, type Block } from '#scripts/time-runtime/time-tra
5
5
  import { bash_triggers } from './bash-triggers'
6
6
  import { tail_commands } from './tail-commands'
7
7
 
8
- // The trigger and the decision behind the `filing-cap` row of `delivered-rules.ts`
9
- // (joshuafolkken/kit#2119).
8
+ // The trigger and the decision behind the `filing-cap` row of `delivered-rules.ts`.
10
9
  //
11
10
  // **Automatic filing is capped at 10 Issues per run, refused at the eleventh filing.** `prerequisite.md` and
12
11
  // `observation-filing.md` state the ceiling; nothing counted it, so a run that over-filed was held
@@ -15,13 +14,13 @@ import { tail_commands } from './tail-commands'
15
14
  // `bash_triggers.is_issue_filing`, reused verbatim.
16
15
  //
17
16
  // **It fires on every filing past the cap, not once per run.** The subject is a recurring act — one
18
- // more filing — so `DeliveredRule.decide` is the right disposition (joshuafolkken/kit#1570): refused
17
+ // more filing — so `DeliveredRule.decide` is the right disposition: refused
19
18
  // once and free afterwards would put the enforcement back on the self-restraint that failed.
20
19
  //
21
20
  // **A guard-refused filing does not count.** Claude Code writes a denied call to the transcript as a
22
21
  // `tool_use` block with an errored `tool_result`, so the WIP cap's own reissue would otherwise
23
- // double-count one Issue — the same exclusion `investigation-reads.ts` makes for a refused read
24
- // (joshuafolkken/kit#1764). **Nor does one `issue:file` held itself** (joshuafolkken/kit#2808): a lint
22
+ // double-count one Issue — the same exclusion `investigation-reads.ts` makes for a refused read.
23
+ // **Nor does one `issue:file` held itself**: a lint
25
24
  // problem or an unacknowledged duplicate exits non-zero having filed nothing, and the reissue is the
26
25
  // same Issue. The filing is counted only where its result did not fail.
27
26
 
@@ -82,8 +81,8 @@ function is_prompt_line(line: string): boolean {
82
81
  return parsed.blocks.every((block) => block.result_id === '')
83
82
  }
84
83
 
85
- // The tail from the last prompt on, so a filing an earlier turn made does not answer for this one
86
- // (joshuafolkken/kit#2422). A tail with no prompt on it is returned whole.
84
+ // The tail from the last prompt on, so a filing an earlier turn made does not answer for this one.
85
+ // A tail with no prompt on it is returned whole.
87
86
  function current_turn(tail: string): string {
88
87
  const lines = tail.split('\n')
89
88
  const start = lines.findLastIndex((line) => is_prompt_line(line))
@@ -1,7 +1,7 @@
1
1
  import { repo_party } from '#scripts/discovery/repo-party'
2
2
  import { issue_citation } from './issue-citation'
3
3
 
4
- // The predicates behind the `filing-offer` row of the stop guard (joshuafolkken/kit#2422).
4
+ // The predicates behind the `filing-offer` row of the stop guard.
5
5
  //
6
6
  // **A first-party filing is Tier A, and an offer to file is that filing deferred to the user.**
7
7
  // `observation-filing.md` says a run that judges something worth filing files it without asking, yet a reply
@@ -1,14 +1,14 @@
1
1
  // A behavior-change Issue names its **firing point** — the tool call first invoked at the moment
2
2
  // the rule it changes would break (`prompts/collaboration-workflow/issue-template.md`). This
3
- // classifies that name against the rule-delivery table (joshuafolkken/kit#2212).
3
+ // classifies that name against the delivered-rule list.
4
4
  //
5
- // **Why the name matters.** joshuafolkken/kit#2201 placed a correct rule whose named tool call was
6
- // one call behind the one that actually broke it: the lane child's turn ended at `AskUserQuestion`,
7
- // which the guard never saw. A rule delivered by a hook can only fire on a tool the hook is wired to;
5
+ // **Why the name matters.** A correct rule whose named tool call is one call behind the one that
6
+ // actually breaks it never fires — a lane child's turn that ends at `AskUserQuestion` is a call the
7
+ // guard never sees. A rule delivered by a hook can only fire on a tool the hook is wired to;
8
8
  // a firing point naming a tool outside that set is a rule no hook can enforce, and saying so at filing
9
9
  // time is the whole point of the check.
10
10
 
11
- // **The hook-deliverable set — the single source is `rule-delivery.md`'s delivery table.** The
11
+ // **The hook-deliverable set — the single source is the list `pnpm josh rule:list` renders.** The
12
12
  // `PreToolUse` guard is wired to `Bash|Edit|Read|Write` (`scripts/hooks/pretool-guard.ts`), and the
13
13
  // lane-child interactive-ask row triggers on `AskUserQuestion`. A firing point naming one of these can
14
14
  // be delivered at the moment it binds; anything else cannot.
@@ -22,7 +22,7 @@ const HOOK_DELIVERABLE_TOOLS: ReadonlyArray<string> = [
22
22
 
23
23
  // **Known Claude Code tool calls that a hook cannot deliver a rule on.** They are real tools, so a
24
24
  // firing point naming one is not a typo — it is a rule whose enforcement stays with the parent's
25
- // self-restraint, the thing that failed in joshuafolkken/kit#2201. Kept apart from
25
+ // self-restraint. Kept apart from
26
26
  // `HOOK_DELIVERABLE_TOOLS` so `not-delivered` (a real but undeliverable tool) reads differently from
27
27
  // `unknown` (not a tool call name at all).
28
28
  const KNOWN_UNDELIVERABLE_TOOLS: ReadonlyArray<string> = [
@@ -1,5 +1,5 @@
1
1
  // The one reading of a `gh api` segment shared by the rows of `delivered-rules.ts` that judge such a
2
- // call by its spelling (joshuafolkken/kit#2122): the issue-body-read guard classifies read vs write,
2
+ // call by its spelling: the issue-body-read guard classifies read vs write,
3
3
  // and the third-party-write guard needs the same classification plus the target `owner/repo`. Two
4
4
  // copies of the flag regexes would be the clone `CLAUDE.md` prohibits, and the copy that forgot `-F`
5
5
  // or `--raw-field` would be the one that let a write through.
@@ -31,7 +31,7 @@ const OWNER_GROUP = 1
31
31
  const REPO_GROUP = 2
32
32
 
33
33
  // The placeholders `gh api` expands to its base repository's owner before it sends the request
34
- // (joshuafolkken/kit#3188) — `{owner}`, and the legacy `:owner` it still accepts. Which owner that is
34
+ // — `{owner}`, and the legacy `:owner` it still accepts. Which owner that is
35
35
  // depends on the checkout's remotes, so the caller resolves it rather than this parser.
36
36
  const OWNER_PLACEHOLDERS: ReadonlySet<string> = new Set(['{owner}', ':owner'])
37
37
 
@@ -1,5 +1,5 @@
1
1
  // The one reading of a shell segment as a `git` invocation, shared by the two Bash-string rows that
2
- // judge a git command by its spelling (joshuafolkken/kit#2120): `git-force.ts` refuses a force push or
2
+ // judge a git command by its spelling: `git-force.ts` refuses a force push or
3
3
  // a branch delete, and `worktree-guard.ts` refuses an unauthorized working-tree change. Both have to
4
4
  // skip the same wrapper and the same git global options before the subcommand is even in hand, so the
5
5
  // cut lives here rather than beside whichever row needed it first — two copies of it would be the clone
@@ -14,7 +14,7 @@
14
14
  // The wrapper words that may stand in front of `git`, the same ones `run-tail-rule.ts` skips in front of
15
15
  // `josh`: environment assignments, the package-manager launchers, `sudo`, `env`, and an opening
16
16
  // subshell parenthesis. Left in, `sudo git push --force`, `env git commit` and `(git push -f)` are
17
- // silently not a git command (joshuafolkken/kit#2983).
17
+ // silently not a git command.
18
18
  const ENV_ASSIGNMENT = /^[A-Za-z_]\w*=/u
19
19
  const WRAPPER_WORDS: ReadonlySet<string> = new Set([
20
20
  'pnpm',
@@ -95,7 +95,7 @@ function after_globals(words: ReadonlyArray<string>, start: number): number {
95
95
  }
96
96
 
97
97
  // The words after `command` once the wrapper is skipped, or `undefined` when the segment does not
98
- // invoke it. `gh` and `rm` are judged by the same wrapper cut as `git` (joshuafolkken/kit#2983), so
98
+ // invoke it. `gh` and `rm` are judged by the same wrapper cut as `git`, so
99
99
  // `env gh pr close` and `sudo rm -rf` are read as the calls they are.
100
100
  function arguments_of(segment: string, command: string): Array<string> | undefined {
101
101
  const words = words_of(segment)
@@ -2,8 +2,8 @@ import { bash_triggers } from './bash-triggers'
2
2
  import { git_argv } from './git-argv'
3
3
  import { shell_segments } from './shell-segments'
4
4
 
5
- // The trigger and the delivered text behind the `git-force` row of `delivered-rules.ts`
6
- // (joshuafolkken/kit#2120). Group 1 of the three Bash-string gaps: a force push or a branch delete
5
+ // The trigger and the delivered text behind the `git-force` row of `delivered-rules.ts`.
6
+ // Group 1 of the three Bash-string gaps: a force push or a branch delete
7
7
  // spelled in a way the `deny` glob cannot express.
8
8
  //
9
9
  // **The deny list stops the spellings a glob can reach and no others.** `Bash(git push *--force*)` and
@@ -0,0 +1,31 @@
1
+ import { json_value } from '#scripts/lib/json-value'
2
+
3
+ // The context a `PreToolUse` hook attached to a call, read off one transcript line.
4
+ // The harness writes a hook's `additionalContext` as an `attachment` line of
5
+ // this type, which is the only trace a rewritten call leaves: the call itself is recorded as it was
6
+ // typed, and no refusal comes back for it. `rule-value.ts` reads a rewrite's note from here so the
7
+ // rewrite is counted as the delivery it is.
8
+ const HOOK_CONTEXT_TYPE = 'hook_additional_context'
9
+
10
+ function strings_of(value: unknown): Array<string> {
11
+ if (!Array.isArray(value)) return []
12
+
13
+ return value.filter((one): one is string => typeof one === 'string')
14
+ }
15
+
16
+ // The substring test first, so the ordinary line is never parsed twice — `rule-value.ts` has already
17
+ // parsed every line once through `time_transcript_line`.
18
+ function hook_contexts_of(line: string): Array<string> {
19
+ if (!line.includes(HOOK_CONTEXT_TYPE)) return []
20
+
21
+ const parsed = json_value.parse_or_undefined(line)
22
+ const attachment = json_value.is_record(parsed) ? parsed['attachment'] : undefined
23
+
24
+ if (!json_value.is_record(attachment) || attachment['type'] !== HOOK_CONTEXT_TYPE) return []
25
+
26
+ return strings_of(attachment['content'])
27
+ }
28
+
29
+ const hook_context_line = { HOOK_CONTEXT_TYPE, hook_contexts_of }
30
+
31
+ export { hook_context_line }
@@ -1,9 +1,9 @@
1
1
  import type { CostVerdict } from '#scripts/cost-runtime/cost-cli'
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
 
5
- // A short reuse window over the transcript-priced verdict `implementation-cut.ts` reads
6
- // (joshuafolkken/kit#2385).
6
+ // A short reuse window over the transcript-priced verdict `implementation-cut.ts` reads.
7
7
  //
8
8
  // **The read is a whole-transcript price and its caller is asked of every edit.**
9
9
  // `is_over_threshold_edit` reads `cost_cli.session_verdict` — which loads and parses the session
@@ -46,13 +46,10 @@ function cached_verdict(target: string, now_ms: number): CostVerdict | undefined
46
46
 
47
47
  if (raw === undefined) return undefined
48
48
 
49
- try {
50
- const { read_at_ms, verdict } = cache_schema.parse(JSON.parse(raw))
49
+ const cached = json_value.parse_with(raw, cache_schema)
50
+ if (cached === undefined) return undefined
51
51
 
52
- return now_ms - read_at_ms < VERDICT_REUSE_MS ? verdict : undefined
53
- } catch {
54
- return undefined
55
- }
52
+ return now_ms - cached.read_at_ms < VERDICT_REUSE_MS ? cached.verdict : undefined
56
53
  }
57
54
 
58
55
  // The verdict, read through the window: the stored value inside it, a fresh `read()` past it. The
@@ -1,3 +1,4 @@
1
+ import { agent_session_role } from '#scripts/agent/agent-session-role'
1
2
  import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-threshold'
2
3
  import { cost_cli, type CostVerdict } from '#scripts/cost-runtime/cost-cli'
3
4
  import { cost_format } from '#scripts/cost-runtime/cost-format'
@@ -12,23 +13,16 @@ import { bash_triggers } from './bash-triggers'
12
13
  import { implementation_cut_verdict } from './implementation-cut-verdict'
13
14
  import { shell_segments } from './shell-segments'
14
15
 
15
- // The implementation-phase cut, delivered at the call it binds on (joshuafolkken/kit#2310).
16
+ // The implementation-phase cut, delivered at the call it binds on.
16
17
  //
17
- // **The mechanism was there and the verdict was taken at the wrong time.** joshuafolkken/kit#1933
18
- // built the second cut boundary — a lane child ends its process *during* implementation once its
19
- // recent-context cost crosses the shared threshold, and a fresh one resumes back into implementation —
20
- // and left the child to run `pnpm josh cost --cut` at each working-tree boundary itself. It never did.
21
- // The five lanes joshuafolkken/kit#2310 measured (#2304 #2294 #2297 #2296 #2298) each read the verdict
22
- // exactly once, at session entry where the context has not yet grown — so the check answered `under`
23
- // by construction and the cut fired 0 times while 33.9% of their requests ran past 200,000 tokens.
24
- //
25
- // **This is the same lesson pre-gate-cut.ts records, one boundary earlier.** joshuafolkken/kit#1864
26
- // measured the pre-gate cut taken 0 times while it was carried as prose, and a `PreToolUse` refusal is
27
- // what took it. joshuafolkken/kit#1933 had reasoned the implementation cut *could not* be a guard,
28
- // because the per-request cost was read asynchronously; but `cost_cli.session_verdict` is synchronous
29
- // and is the very verdict `pnpm josh cost --cut` prints, so the guard reads it directly rather than
30
- // approximating it — the same statistic and the same threshold, never the second measurement #1933
31
- // forbids.
18
+ // **The verdict is read at the working-tree boundary, not at the entry.** A lane child ends its
19
+ // process *during* implementation once its recent-context cost crosses the shared threshold, and a
20
+ // fresh one resumes back into implementation. Read only at session entry, where the context has not
21
+ // yet grown, the verdict answers `under` by construction; so the guard reads it at each edit, the
22
+ // same way `pre-gate-cut.ts` binds the boundary one step later. `cost_cli.session_verdict` is
23
+ // synchronous and is the very verdict `pnpm josh cost --cut` prints, so the guard reads it directly
24
+ // rather than approximating it — the same statistic and the same threshold, never a second
25
+ // measurement.
32
26
 
33
27
  // The two edit tools the `PreToolUse` matcher routes here, and the working-tree boundary the cut is
34
28
  // taken at. A `PreToolUse` refusal fires *before* the edit lands, so the tree is at the consistent
@@ -59,12 +53,12 @@ function takes_the_impl_cut(command: string): boolean {
59
53
  // What the trigger has to know about the world, passed in so the decision is testable without a lane on
60
54
  // disk, a cut record, or a session transcript. `verdict` is the synchronous `pnpm josh cost --cut`
61
55
  // reading — the same per-request billed-input statistic against the same threshold — so the guard
62
- // prices its cut on exactly what the parent hand-off does (joshuafolkken/kit#1933).
56
+ // prices its cut on exactly what the parent hand-off does.
63
57
  interface LaneCostState {
64
58
  directory: string
65
59
  source: MarkerSource
66
60
  carried: (now?: Date) => RunCut | undefined
67
- // The issue whose run hold stands over this checkout (joshuafolkken/kit#2760) — how a `fullrun`
61
+ // The issue whose run hold stands over this checkout — how a `fullrun`
68
62
  // held outside a lane is told apart from a person's tree.
69
63
  held_issue: () => string | undefined
70
64
  verdict: () => CostVerdict
@@ -76,7 +70,7 @@ function current_state(): LaneCostState {
76
70
  source: process.env,
77
71
  carried: run_cut.carried_cut_sync,
78
72
  held_issue: run_cut.held_issue_sync,
79
- // **Read through the short reuse window** (joshuafolkken/kit#2385). The row now fires per
73
+ // **Read through the short reuse window**. The row now fires per
80
74
  // threshold crossing rather than once per run, so this predicate is a candidate on every edit;
81
75
  // the window collapses one turn's burst of edits to a single whole-transcript price.
82
76
  verdict: (): CostVerdict =>
@@ -85,7 +79,7 @@ function current_state(): LaneCostState {
85
79
  }
86
80
 
87
81
  // A dispatched lane child's issue for this checkout. The dispatch mark is what tells a child apart from
88
- // a person (joshuafolkken/kit#1904), read from the environment against this lane's own issue so a
82
+ // a person, read from the environment against this lane's own issue so a
89
83
  // leaked mark for another issue reads as a person.
90
84
  function lane_child_issue(state: LaneCostState): string | undefined {
91
85
  if (!lane_child_marker.is_child_of(state.directory, state.source)) return undefined
@@ -101,15 +95,25 @@ function held_run_issue(state: LaneCostState): string | undefined {
101
95
  return state.held_issue()
102
96
  }
103
97
 
98
+ // **A ship reviewer is not the run, though it carries its mark and its hold**
99
+ // (joshuafolkken/kit#3623). The supervisor launches it in the implementing child's own checkout and
100
+ // waits on it, so a cut would end the one session whose findings file the supervisor reads and relaunch
101
+ // a second child beside the supervisor's repair. `agent_session_role` is what tells the two apart.
102
+ function implementing_run_issue(state: LaneCostState): string | undefined {
103
+ if (agent_session_role.is_reviewer(state.source)) return undefined
104
+
105
+ return lane_child_issue(state) ?? held_run_issue(state)
106
+ }
107
+
104
108
  // The run this checkout's edits belong to, with no cut already carried — a dispatched lane child, or
105
- // **a `fullrun` held in its own checkout** (joshuafolkken/kit#2760): the cut was lane-only, so a run a
109
+ // **a `fullrun` held in its own checkout**: the cut was lane-only, so a run a
106
110
  // person started grew without a bound mid-implementation. The run hold naming an issue is what marks
107
111
  // such a run, and a person's tree holds nothing, so it still sees no refusal. **The carried-cut half
108
112
  // keeps the guard silent between a cut and its resume**, exactly as `pre-gate-cut.ts`'s does: a record
109
113
  // naming this issue means a cut is already in flight, and `begin_cut`'s exclusive create would refuse
110
114
  // a second one anyway.
111
115
  function uncut_run_issue(state: LaneCostState): string | undefined {
112
- const issue = lane_child_issue(state) ?? held_run_issue(state)
116
+ const issue = implementing_run_issue(state)
113
117
 
114
118
  if (issue === undefined) return undefined
115
119
 
@@ -133,7 +137,7 @@ function warrants_the_cut(state: LaneCostState): boolean {
133
137
  // a dispatched child makes in an uncut lane — where crossing the threshold is exactly the event this
134
138
  // guard exists to catch.
135
139
  //
136
- // **The unmeasurable direction matches the pre-gate cut** (joshuafolkken/kit#2385). A session that
140
+ // **The unmeasurable direction matches the pre-gate cut**. A session that
137
141
  // cannot be priced reads as warranting the cut, the same safety-net direction `pre-gate-cut.ts`'s
138
142
  // `warrants_the_cut` takes (`verdict !== UNDER_VERDICT`): the two rules read one statistic against one
139
143
  // threshold, so they must not disagree about whether an unmeasurable session is due a cut.
@@ -146,10 +150,9 @@ function is_over_threshold_edit(
146
150
  return warrants_the_cut(state)
147
151
  }
148
152
 
149
- // **The threshold in the refusal text is assembled from the constant, never spelled** (joshuafolkken/kit#2385).
150
- // joshuafolkken/kit#2374 lowered the shared threshold and the literal `200,000` stayed behind in this
151
- // text, telling agents the wrong number; building it from `CONTEXT_CUT_THRESHOLD` is what keeps the two
152
- // from ever drifting again. `cost_format.format_tokens` renders it the way every cost report does.
153
+ // **The threshold in the refusal text is assembled from the constant, never spelled**.
154
+ // A spelled literal is left behind when the shared threshold moves, telling agents the wrong number;
155
+ // building it from `CONTEXT_CUT_THRESHOLD` keeps the two from drifting. `cost_format.format_tokens` renders it the way every cost report does.
153
156
  const THRESHOLD_TEXT = `${cost_format.format_tokens(CONTEXT_CUT_THRESHOLD)}-token`
154
157
 
155
158
  // The instruction in the shape a refusal can carry: what the cut is for, what each verdict means, and
@@ -161,7 +164,7 @@ const IMPLEMENTATION_CUT_REASON =
161
164
  'this issue (joshuafolkken/kit#2760), and its recent-context ' +
162
165
  `cost has crossed the shared ${THRESHOLD_TEXT} threshold mid-implementation, so the thinking accumulated ` +
163
166
  'so far is now re-read on every later request. Take the cut before this edit. ' +
164
- 'First write a handoff file with the Write tool — the user’s instruction verbatim, what you have ' +
167
+ `First write a handoff file at \`${run_cut_handoff.HANDOFF_PATH}\` (ignored, so it is never committed) with the Write tool — the user’s instruction verbatim, what you have ` +
165
168
  'completed, what remains, and what you deliberately did not touch, as ' +
166
169
  `${run_cut_handoff.HANDOFF_FORMAT} (Markdown is refused) — and pass it as \`--handoff <path>\`, ` +
167
170
  'so the fresh process resumes on the original instruction rather than the working tree alone ' +
@@ -183,7 +186,7 @@ const IMPLEMENTATION_CUT_REASON =
183
186
  'answered — an edit reissued right after this refusal passes, so `busy` / `failed` cannot wedge the ' +
184
187
  'run edit after edit; this fires again on the next threshold crossing rather than once per run.'
185
188
 
186
- // **A refusal younger than this window is this edit's own refusal being answered** (joshuafolkken/kit#2385).
189
+ // **A refusal younger than this window is this edit's own refusal being answered**.
187
190
  // A `decide` row that refused every over-threshold edit would wedge a run whose cut came back `busy` /
188
191
  // `failed` / `unready` — the very cases once-per-run relied on the reissue passing through. So an edit
189
192
  // reissued inside this window passes: it is longer than a refusal-then-reissue round trip, so the
@@ -194,7 +197,7 @@ function is_reissued_refusal(now_ms: number, delivered_at_ms: number): boolean {
194
197
  return now_ms - delivered_at_ms < REISSUE_WINDOW_MS
195
198
  }
196
199
 
197
- // **Fires on every threshold crossing rather than once per run** (joshuafolkken/kit#2385). Once per run
200
+ // **Fires on every threshold crossing rather than once per run**. Once per run
198
201
  // silenced the row for the rest of a process the moment its first refusal landed — and a `busy` /
199
202
  // `failed` / `unready` verdict, or an edit reissued unchanged, left the context to grow unwatched to
200
203
  // 282,747 tokens with the cut never taken. `decide` re-asks on every over-threshold edit; the reissue
@@ -210,8 +213,8 @@ function decide(
210
213
  return !is_reissued_refusal(run.now_ms, delivered_at_ms)
211
214
  }
212
215
 
213
- // The row itself, so `delivered-rules.ts` spreads one entry. `decide` fires it per threshold crossing
214
- // (joshuafolkken/kit#2385); `keeps` is the implementation cut command, read from a `Bash` call the same
216
+ // The row itself, so `delivered-rules.ts` spreads one entry. `decide` fires it per threshold crossing;
217
+ // `keeps` is the implementation cut command, read from a `Bash` call the same
215
218
  // way `pre-gate-cut`'s is.
216
219
  const ROW = {
217
220
  id: 'implementation-cut',
@@ -3,8 +3,8 @@ import { git_argv } from './git-argv'
3
3
  import { shell_segments } from './shell-segments'
4
4
  import { worktree_guard } from './worktree-guard'
5
5
 
6
- // The trigger and the delivered text behind the `index-mutation` row of `delivered-rules.ts`
7
- // (joshuafolkken/kit#2983). `CLAUDE.md` → Git Rules forbids staging or otherwise mutating the git index
6
+ // The trigger and the delivered text behind the `index-mutation` row of `delivered-rules.ts`.
7
+ // `CLAUDE.md` → Git Rules forbids staging or otherwise mutating the git index
8
8
  // on the run's own judgement, and `.claude/settings.json` backs it with `Bash(git add*)` /
9
9
  // `Bash(git commit*)` and their siblings — but those are prefix globs, so `git -C . commit`,
10
10
  // `git -c k=v commit` and `env git commit` all pass them. Reading the argv through `git-argv.ts`, the
@@ -1,6 +1,6 @@
1
- // The bare-`#N` predicate behind the `issue-citation` row of the stop guard (joshuafolkken/kit#2121),
1
+ // The bare-`#N` predicate behind the `issue-citation` row of the stop guard,
2
2
  // and the printing-side formatter that keeps a bare `#N` out of session-facing output in the first
3
- // place (joshuafolkken/kit#2329).
3
+ // place.
4
4
  //
5
5
  // **Session-facing output cites an Issue as a number-link, never a bare `#N`.** `CLAUDE.md` and
6
6
  // `prompts/collaboration-workflow/issue-citation.md` require `[#<N>](https://github.com/<owner>/<repo>/issues/<N>) — <short summary>`
@@ -8,13 +8,13 @@
8
8
  // it is. The stop guard reads `last_assistant_message` — the turn's session-facing text — and this
9
9
  // predicate answers whether a bare number slipped into it.
10
10
  //
11
- // **It blocks the stop, so a false positive costs a wasted turn** (joshuafolkken/kit#2247). The nudge
11
+ // **It blocks the stop, so a false positive costs a wasted turn**. The nudge
12
12
  // now reaches the model rather than the person, so the detection is tightened to what is genuinely a
13
13
  // bare citation: a `#N` inside a fenced code block, inside an inline-code span, on a quote line, or
14
14
  // right after `PR` / `pull request` is not a citation slip and is skipped. The scan is line-based so
15
15
  // each exclusion is decided from the one line the mention sits on.
16
16
  //
17
- // **`linkify` runs that same scan the other way** (joshuafolkken/kit#2329): a command whose stdout a
17
+ // **`linkify` runs that same scan the other way**: a command whose stdout a
18
18
  // run copies into its reply passes the text through it, and every bare `#N` the predicate would flag
19
19
  // is rewritten to `[#N](url)` — which the predicate then reads as linked, so the material that fed the
20
20
  // duplicate reply is fixed where it is printed rather than scolded after it reaches the screen. The
@@ -40,7 +40,7 @@ const OWNER_REPO = /^[^\s/#]+\/[^\s/#]+$/u
40
40
  const MARKDOWN_LINK = /\[[^[\]]*\]\([^()]*\)/gu
41
41
  // What continues a `#N` into something longer, read off the two characters after its last digit: a
42
42
  // word character (a hex color, `#1e90ff`) or a hyphen and a letter (a heading anchor, `#12-setup`) —
43
- // never an Issue number (joshuafolkken/kit#2995). A hyphen before a digit or `#` is a range
43
+ // never an Issue number. A hyphen before a digit or `#` is a range
44
44
  // (`#12-#15`, `#3-5`), whose first number is still a citation.
45
45
  const NUMBER_CONTINUATION = /^(?:\w|-[a-z])/iu
46
46
  // The width of the window `NUMBER_CONTINUATION` reads: a hyphen and the letter after it.
@@ -178,7 +178,7 @@ function lines_outside_fences(message: string): ReadonlyArray<string> {
178
178
  }
179
179
 
180
180
  // The run's own prose: the lines outside every fenced-code block and off every quote line. Shared with
181
- // the filing-offer row of the stop guard (joshuafolkken/kit#2422), which asks the same "is this the
181
+ // the filing-offer row of the stop guard, which asks the same "is this the
182
182
  // run speaking, not an example or a quote" question of the same reply.
183
183
  function prose_lines(message: string): ReadonlyArray<string> {
184
184
  return lines_outside_fences(message).filter((line) => !QUOTE_LINE.test(line))
@@ -208,7 +208,7 @@ function prompt_references(prompt: string): ReadonlySet<string> {
208
208
  return found
209
209
  }
210
210
 
211
- // **A number the person's prompt already carried is quoted, not cited** (joshuafolkken/kit#2819). A
211
+ // **A number the person's prompt already carried is quoted, not cited**. A
212
212
  // pasted log from another repository holds its own `#1`…`#7`; `issue:cite` would link them to this
213
213
  // repository's unrelated Issues, so following the refusal would make the reply wrong. Only the exact
214
214
  // reference the prompt wrote is exempt, so a bare `#N` the run brought in itself is still refused.