@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
@@ -1,24 +1,25 @@
1
1
  # The observation ledger — grammar, commit path and promotion
2
2
 
3
3
  **Read only when the depth test in `observation-filing.md` turns an observation away, or a user
4
- reports a bug** (its kind of miss, below), in the turn that appends the line (joshuafolkken/kit#3176).
4
+ reports a bug** (its kind of miss, below), in the turn that appends the line.
5
5
  A run that files outright, or finds nothing, never reads it. This file is the single source of the ledger's grammar, its commit path and the
6
- second-sighting promotion.
6
+ second-sighting promotion. Provenance: `docs/maintainers/observation-ledger-rationale.md` → "Where
7
+ each rule came from".
7
8
 
8
9
  ## The ledger — where an observation that cannot cite a blockage goes
9
10
 
10
- **An observation the depth test turns away is recorded in the ledger, not discarded**
11
- (joshuafolkken/kit#1728). Rationale: `docs/maintainers/observation-ledger-rationale.md` → "Why the
11
+ **An observation the depth test turns away is recorded in the ledger, not discarded.**
12
+ Rationale: `docs/maintainers/observation-ledger-rationale.md` → "Why the
12
13
  ledger exists".
13
14
 
14
15
  - **The destination is the `.josh/observations/` directory in the repository the
15
16
  observation is about** — the same repository the Issue would have been filed into — **one file per
16
- issue** (joshuafolkken/kit#2919): append to `<N>.md` for the issue the run is executing (the number
17
+ issue**: append to `<N>.md` for the issue the run is executing (the number
17
18
  its branch leads with, a lane's included), or to `<YYYY-MM-DD>.md` for a line written on the
18
19
  default branch outside any issue's run. Parallel lanes therefore write different files, and their
19
20
  pull requests never conflict on the ledger. **The count and the append are both run in that
20
21
  repository's checkout** — in this repository, the work tree the run is in, a lane's inside a lane —
21
- resolved the way `target-repository.md` (`target-repository.md`) resolves any cross-repository target, and the
22
+ resolved the way `target-repository.md` resolves any cross-repository target, and the
22
23
  directory is created on the first append where that repository has none. **The subject decides, never the
23
24
  working directory**: an observation about this package's own orchestration, seen while a run is
24
25
  inside a repository that consumes it, is recorded here rather than there — the append follows the
@@ -61,18 +62,22 @@ here rather than in the ledger** (`docs/maintainers/observation-ledger-rationale
61
62
  ledger exists").
62
63
 
63
64
  **The identity key is the whole of the repeat test — never a similarity judgement about the prose.**
64
- Choose the key from the phenomenon rather than from the run, then count what the ledger already holds
65
- for it, in that repository's checkout rather than the working directory. **Every file of the
66
- directory is counted**, because a recurrence is a recurrence whichever issue's file each sighting
67
- sits in. **The `|| true` is not decoration**: `grep -c` exits non-zero on a count of zero, which is
68
- the first-sighting branch and the common one, so without it the step reads as a failed command
69
- wherever an exit status is being watched. **A missing directory is still a first sighting** — `cat`
70
- complains on standard error and the count is zero; the append below creates the directory.
65
+ Choose the key from the phenomenon rather than from the run, then record the sighting with one
66
+ command — it counts what the ledger already holds for the key, appends the line and prints the
67
+ verdict:
71
68
 
72
69
  ```bash
73
- cat <that repository's checkout>/.josh/observations/*.md | grep -c '^- k:<slug> |' || true
70
+ pnpm josh observation:record <slug> d<n> '<where>' '<what>' [--checkout <that repository's checkout>]
74
71
  ```
75
72
 
73
+ Standard output is one token: `file` (this is the second sighting — file it, below) or `ledger` (the
74
+ line is the record, nothing to file); standard error lists the earlier sightings and the file
75
+ appended to. A line that breaks the grammar, or uses `k:example`, is refused with exit 1 and nothing
76
+ appended. **Every
77
+ file of the directory is counted**, in the named checkout rather than the working directory, because
78
+ a recurrence is a recurrence whichever issue's file each sighting sits in; a missing directory is a
79
+ first sighting, and the append creates it.
80
+
76
81
  Free-text comparison is what the key exists to replace, so two lines that read alike under different
77
82
  keys are two observations, and a mis-keyed entry is corrected by appending a correctly-keyed line
78
83
  rather than by editing the one already written.
@@ -83,27 +88,34 @@ could not.
83
88
 
84
89
  ## The commit path — how an appended line reaches the default branch
85
90
 
86
- **An append nobody commits is an append nobody can count** (joshuafolkken/kit#1756). Rationale:
91
+ **An append nobody commits is an append nobody can count.** Rationale:
87
92
  `docs/maintainers/observation-ledger-rationale.md` → "Why the ledger has a commit path".
88
93
 
89
- - **A run's appended lines ride its own commit** (joshuafolkken/kit#2763). `pnpm josh git` stages
94
+ - **A run's appended lines ride its own commit.** `pnpm josh git` stages
90
95
  `.josh/observations/` with the run's other changes, in the one staging step every entry
91
96
  point goes through (`scripts/git/git-staging.ts`), so the lines are reviewed and merged with the
92
97
  pull request of the run that recorded them, and the run's CI is the only wait they cost.
93
98
  **Record before the commit, not after the merge:** a finding recorded with `pnpm josh review:record`
94
99
  before `pnpm josh git -y` is carried; the time while CI runs is for the records that need no CI
95
100
  result — filing an observation Issue, drafting the completion report.
96
- - **A line that breaks the grammar is not carried** (joshuafolkken/kit#2123). The staging step parses
97
- every file of the ledger first — after moving lines still on an old single-file path
98
- (joshuafolkken/kit#2724, joshuafolkken/kit#2919) — and on a broken line leaves the ledger out of the
101
+ - **A line that breaks the grammar is not carried.** The staging step parses
102
+ every file of the ledger first — after moving lines still on an old single-file path — and on a broken line leaves the ledger out of the
99
103
  commit and says so; the commit itself goes ahead.
100
- - **`pnpm josh followup` commits a line appended after the run's commit onto the pull request, before
101
- the merge** (joshuafolkken/kit#2919) — a second review round's record is the usual case. After the
102
- merge gates and before the CI wait, `followup` reads the tree and, **only when the ledger holds a
103
- pending append**, stages the ledger paths alone, commits them and pushes the branch; the CI wait
104
- that follows covers the pushed commit. A broken line refuses the merge, because the line would
105
- otherwise be lost with the branch. A run whose lines rode its commit pays nothing.
106
- - **A lane carries its own lines, in its own pull request** (joshuafolkken/kit#2919). Its writers
104
+ - **A review round that passes after the pull request opened is recorded on the Issue, not in the
105
+ ledger** — `pnpm josh review:record --issue <N> --comment` posts the same `- rf:` lines as a comment
106
+ and appends nothing. That round reads only, so no commit of the run's follows it; a line in the tree
107
+ would be pushed onto the open pull request and its CI would start over. `pnpm josh ship --review`
108
+ does this for a passing round 2. **A round 2 that blocks records in the tree as before** — the fix it
109
+ stops for is pushed anyway and carries the lines. The comment's lines are outside the count
110
+ `pnpm josh review:findings` and the retrospective read.
111
+ - **`pnpm josh followup` commits any other line appended after the run's commit onto the pull request,
112
+ before the merge** — the residual path, for an observation recorded between the commit and the
113
+ merge. After the merge gates and before the CI wait, `followup` reads the tree and, **only when the
114
+ ledger holds a pending append**, stages the ledger paths alone, commits them and pushes the branch;
115
+ that push restarts the pull request's CI, and the wait that follows covers it. A broken line refuses
116
+ the merge, because the line would otherwise be lost with the branch. A run whose lines rode its
117
+ commit pays nothing.
118
+ - **A lane carries its own lines, in its own pull request.** Its writers
107
119
  append to its own tree's `<N>.md`, so the two steps above take them to the default branch exactly as
108
120
  they do for a run in the primary checkout. **Nothing is held in the primary checkout for later.**
109
121
  - **`pnpm josh observations:flush` is left for a line written outside any issue's run** — the
@@ -114,11 +126,8 @@ could not.
114
126
  and refuses a working tree holding anything besides the ledger, so a run in progress cannot be
115
127
  flushed out from under. **Nothing is committed to the default branch directly.**
116
128
  - **Nothing to flush is an answer, not a failure.** With the ledger matching the commit it sits on
117
- the command prints `clean` and exits 0 — most cycles append nothing, and a command that errored
118
- there would be one nobody runs.
119
- - **The count the promotion below reads is a count of the default branch**, which is what this route
120
- buys: a ledger line that merged is one every later run, every other machine and every fresh clone
121
- can see, and only then can a second sighting be recognized as one.
129
+ the command prints `clean` and exits 0.
130
+ - **The count the promotion below reads is a count of the default branch.**
122
131
 
123
132
  ## The second sighting is what files it
124
133
 
@@ -126,12 +135,13 @@ could not.
126
135
  judged (rationale: `docs/maintainers/observation-ledger-rationale.md` → "Why a second sighting
127
136
  files"):
128
137
 
129
- - **On the count answering exactly `1`, the observation is filed**, at depth 1 or deeper, with no
130
- depth-0 citation — `1` and not "1 or more", because a higher count means the Issue was already
131
- opened by the sighting that answered `1`. The ledger line is appended as well, because the ledger
132
- stays append-only.
133
- - **The Issue quotes the ledger's own dates — the first sighting's and this one's** — so the reader
134
- can check the promotion against the file instead of taking the run's word for it.
138
+ - **On `observation:record` answering `file`, the observation is filed**, at depth 1 or deeper, with
139
+ no depth-0 citation. It answers `file` only when exactly one earlier sighting exists — a higher
140
+ count means the Issue was already opened by the sighting before. The line is appended either way,
141
+ because the ledger stays append-only.
142
+ - **The Issue quotes the ledger's own dates — the first sighting's and this one's**, both on the
143
+ command's standard error — so the reader can check the promotion against the file instead of
144
+ taking the run's word for it.
135
145
  - **Both ceilings still apply**, exactly as `observation-filing.md` states them: the 10-per-run cap counts a promoted
136
146
  filing, and the WIP cap still bites, since a promoted observation blocks nothing and is therefore
137
147
  still discretionary.
@@ -143,7 +153,7 @@ Issue, not new ones.
143
153
  ## A user-found bug is recorded by its kind of miss (user-found)
144
154
 
145
155
  **A user-reported bug is fixed or filed as always; this records the *kind of miss* alongside so the
146
- category never recurs as a first sighting** (joshuafolkken/kit#2246). The key is the **category of
156
+ category never recurs as a first sighting.** The key is the **category of
147
157
  oversight** — `k:missed-case-worktree` — so a second bug of the same kind counts against the first.
148
158
  **Depth `d1`, never `d0`**: the *kind of miss* is what a run fails to enumerate, which the table puts
149
159
  at depth 1. Nothing else changes; the `<what>` field leads with `User-reported:`, and no second
@@ -106,8 +106,8 @@ pnpm josh run:cut --resume <N>
106
106
  for the plan and the recorded decisions, then go straight to `pnpm josh gate`.
107
107
  - `resume-impl` (0) — like `resume`, but the cut was taken **during** implementation. Skip the title, the plan, the fresh hold claim and the split assessment,
108
108
  re-read the plan, then **continue implementation** — do **not** go straight to the gate.
109
- - `handed-off` (0) — a successor has already adopted this cut, `is_handed_off` is spent
110
- (joshuafolkken/kit#1935). This process was woken **after** its own cut. **End the turn quietly and do
109
+ - `handed-off` (0) — a successor has already adopted this cut, `is_handed_off` is spent.
110
+ This process was woken **after** its own cut. **End the turn quietly and do
111
111
  nothing**: a benign stop, no Telegram owed.
112
112
  - `stale` (1) — the record does not match the tree (wrong branch, a clean tree, an expired record, or
113
113
  an unknown hand-off state). **A resume failure**: send a `confirmation` Telegram and stop; never gate
@@ -145,7 +145,7 @@ decisions are read back from the issue. Rationale:
145
145
  - **The cut is exclusive** — `run:cut` writes the record with an exclusive create, so a second cut on
146
146
  the same tree is refused `busy`.
147
147
  - **The resume is unique.** Taking the hand-off over spends it — a second `run:cut --resume` reads a
148
- spent record and is answered `handed-off` (joshuafolkken/kit#1935), and the take-over is itself an
148
+ spent record and is answered `handed-off`, and the take-over is itself an
149
149
  exclusive create, so two resumes racing cannot both win. One lane crosses the pre-gate boundary
150
150
  exactly once.
151
151
 
@@ -176,7 +176,7 @@ not once per run**; **An edit reissued right after a refusal passes**; **An unme
176
176
  warrants the cut**; **It is silent between a cut and its resume**. Rationale:
177
177
  `docs/maintainers/pre-gate-cut-rationale.md` → "Why the rules are guards, not prose";
178
178
  `scripts/rules/implementation-cut.ts` implements it. A child that ended without cutting is detected
179
- after the fact by `pnpm josh run:ending <N> --output <path>` (joshuafolkken/kit#2139).
179
+ after the fact by `pnpm josh run:ending <N> --output <path>`.
180
180
 
181
181
  ## The threshold
182
182
 
@@ -191,8 +191,7 @@ the push is never a turn boundary (`chain-rule.md`).
191
191
 
192
192
  **The trigger**: a dispatched lane child about to stop for a decision (a Tier B toss-up, a Tier C
193
193
  action, an upstream defect) parks its own Issue first — `backlogrun-park.md` → "park and
194
- continue" — so the parent's `pnpm josh run:liveness` reads it `settled` (joshuafolkken/kit#2034),
195
- after #2012 and #2011. A `needs-human-review` or `already-done` stop already carries its label.
194
+ continue" — so the parent's `pnpm josh run:liveness` reads it `settled`. A `needs-human-review` or `already-done` stop already carries its label.
196
195
  `pnpm josh rule:guard` refuses `pnpm josh notify --task-type confirmation` from a marked child until
197
196
  then — **It fires once per run.**, and a person's own `fullrun` is never refused
198
197
  (`scripts/rules/lane-park.ts`).
@@ -205,9 +204,10 @@ the child promoted this run, on every occurrence (`scripts/rules/lane-split-park
205
204
  ### The interactive ask is refused one call earlier
206
205
 
207
206
  **The trigger**: a headless session ends the turn on an interactive ask, so the notify guard never
208
- fires (#2178). `pnpm josh rule:guard` therefore refuses `AskUserQuestion` for a marked lane child on
209
- every occurrence — park the question instead (joshuafolkken/kit#2201), completing
210
- joshuafolkken/kit#2034. A child that slips past is recovered by `pnpm josh run:ending`, which lifts
207
+ fires. `pnpm josh rule:guard` therefore refuses `AskUserQuestion` for a marked lane child on
208
+ every occurrence — park the question instead.
209
+ A child that slips past is recovered by `pnpm josh run:ending`, which lifts
211
210
  the refused ask into the park basis; `scripts/rules/lane-interactive-ask.ts` and the shared
212
211
  `scripts/agent/interactive-ask.ts` implement it.
213
212
 
213
+ Provenance of each rule: `docs/maintainers/pre-gate-cut-rationale.md` → "Where each rule came from".
@@ -1,24 +1,32 @@
1
1
  # A prerequisite discovered mid-run — a dependency, not a park
2
2
 
3
- **This file is the single source, so the entry read carries the trigger and the pointer, not the
4
- procedure** (joshuafolkken/kit#2189). `SKILL.md` → §2's table keeps the trigger, and each entry file
5
- (`entry-sequence.md` / `backlogrun-park.md`) routes here for the definition. It is
6
- read at its point of use — the moment a run discovers that another Issue in this repository has to
7
- land first.
3
+ **The single source of the prerequisite branch**, read at its point of use — the moment a run
4
+ discovers that another Issue in this repository has to land first. History:
5
+ `docs/maintainers/prerequisite-rationale.md` → "Where each rule came from".
8
6
 
9
- **A prerequisite discovered mid-run is a dependency, not a park.** Finding that something else in
10
- *this* repository has to land first is a third situation, distinct from an upstream defect and from a
11
- split: the Issue in hand is still one deliverable, it just needs another one before it.
7
+ **A prerequisite discovered mid-run is a dependency, not a park** — the Issue in hand is still one
8
+ deliverable, it just needs another one before it.
12
9
 
13
- **Four kinds of other work turn up mid-run, and the procedure differs for each.** Reading one as
14
- another is the failure this section exists to prevent:
10
+ **Four kinds of other work turn up mid-run, and the procedure differs for each:**
15
11
 
16
12
  | What turned up | What to do |
17
13
  | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
18
14
  | A defect originating in **another package** | File the upstream Issue and **stop** — Tier A for a first-party target; a third-party one is Tier C, recorded and drafted rather than filed (`CLAUDE.md` → "Cross-package problems"; `prompts/collaboration-workflow/upstream-interrupt.md`) |
19
15
  | This Issue was really **several** (a split) | File the children and the epic and **stop** — except under `backlogrun`, whose authorization already covers a batch, so the children are filed and run through (`split-assessment.md`) |
20
16
  | Another Issue in **this** repository has to land first (**a prerequisite**) | This section |
21
- | Something worth filing that is **none of the three** (**an observation**) | File it **without asking** — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (`observation-filing.md`). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to the run's own `.josh/observations/<N>.md` and is filed on its second sighting — all of them `observation-filing.md`'s |
17
+ | Something worth filing that is **none of the three** (**an observation**) | File it **without asking** in an unattended run, propose it first in an interactive session — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (`observation-filing.md`). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to the run's own `.josh/observations/<N>.md` and is filed on its second sighting — all of them `observation-filing.md`'s |
18
+
19
+ **A stop on a defect in this repository's own gate or run tooling is a prerequisite too.** The
20
+ defect's Issue is the prerequisite — filed if it is not yet, used by its number if it is — and it is
21
+ never recorded as an upstream interrupt, because the tooling is not another package
22
+ (`prompts/collaboration-workflow/upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合").
23
+
24
+ **A stop that a dependency can express is never a person's decision.** This is the single source of
25
+ that rule. A recommendation of "record `<N>` must land first and go on" is taken without asking;
26
+ `needs-decision` is reserved for a design decision nobody has made, a Tier B toss-up, or a Tier C
27
+ action. `pnpm josh run:merge` enforces the computable half: an unfinished child with an open
28
+ blocked-by is released to **wait** — no `needs-decision` label, no failure counted — and the backlog
29
+ offer hands it back once its blockers merge.
22
30
 
23
31
  **File the prerequisite with the `route:tier-a` label**, so a Tier A filing made during implementation
24
32
  stays countable by filing route afterwards. **This paragraph belongs to the prerequisite row, not to
@@ -33,7 +41,7 @@ The command lints the body against `prompts/collaboration-workflow/issue-templat
33
41
  classification labels it declares, and runs the duplicate scan and `epic:bundle` itself
34
42
  (`docs/josh-commands-backlog.md` → `josh issue:file`).
35
43
 
36
- Every "file the prerequisite" below means that labelled filing, and it always happens **first**: the
44
+ Every *file the prerequisite* step below means that labelled filing, and it always happens **first**: the
37
45
  steps after it name a number that does not exist until it is. **Its duplicate scan is read exactly as
38
46
  it is for a `new` entry** (`issue-scout.md`): a filing made mid-run is the one most likely to duplicate something.
39
47
 
@@ -42,8 +50,8 @@ it is for a `new` entry** (`issue-scout.md`): a filing made mid-run is the one m
42
50
  - **A named epic under `backlogrun`** files without confirmation, records the dependency with
43
51
  `pnpm josh epic --add <E> <N> --before <M>` — `<E>` the epic, `<N>` the prerequisite just filed,
44
52
  `<M>` the child in hand — and the run **continues rather than parking it** (`backlogrun-park.md` → "A
45
- prerequisite discovered mid-run"). Parking is only for a prerequisite that *cannot* be expressed as
46
- a dependency — one needing a design decision nobody has made, a Tier B toss-up, or a Tier C action.
53
+ prerequisite discovered mid-run"). A child outside any epic records the same relation on itself
54
+ directly; that branch is the same section's.
47
55
  - **`fullrun` / `halfrun`** file the same way without asking, insert the prerequisite into the epic
48
56
  that already tracks the Issue or create one over both, and then **stop**, leaving the person one
49
57
  command to type (`fullrun.md` / `halfrun.md`). Typing `fullrun` approved implementing **one** Issue;
@@ -53,7 +61,7 @@ it is for a `new` entry** (`issue-scout.md`): a filing made mid-run is the one m
53
61
 
54
62
  - **`git stash push -u` — the `-u` is not optional.** The work in progress almost always includes a
55
63
  new `*.test.ts`, which is untracked, and a stash without `-u` leaves exactly those files in the tree
56
- for the next child's `git switch main && git pull` to refuse.
64
+ for the next child's `pnpm josh ms` to refuse.
57
65
  - **The Issue comment is what gets the stash popped, not the Telegram.** The run that later picks the
58
66
  paused Issue up reads that comment and pops before implementing — **by message,
59
67
  `pnpm josh stash:pop "<the -m message>"`, never a positional `git stash pop`**, because the stash is
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Read this file in full when the run's hold is claimed, before the watcher starts.** It is a
4
4
  point-of-use document, never an entry read, and the single source of the heartbeat for `fullrun`,
5
- `halfrun`, `prrun` and the `backlogrun` parent alike (joshuafolkken/kit#3172). `kickoff` starts none.
5
+ `halfrun`, `prrun` and the `backlogrun` parent alike. `kickoff` starts none.
6
6
 
7
7
  ## Progress while the run is quiet
8
8
 
@@ -13,7 +13,7 @@ point-of-use document, never an entry read, and the single source of the heartbe
13
13
  pnpm josh run:progress --wait --output <the transcript path of each delegated unit> # in the background
14
14
  ```
15
15
 
16
- **Start it once; it reports by itself** (joshuafolkken/kit#3102). Each silence interval appends the
16
+ **Start it once; it reports by itself.** Each silence interval appends the
17
17
  five labelled lines to the run's event stream as a heartbeat and to the ambient log, prints nothing to
18
18
  standard output and keeps running — so a scheduled report never wakes the session, and the session
19
19
  relays none. **It exits only on one of three, and the command computes which:**
@@ -27,8 +27,8 @@ relays none. **It exits only on one of three, and the command computes which:**
27
27
  **A report is not an exit, and neither is a decline** — with no run recorded it keeps waiting, and the
28
28
  `--hours` exit says so on standard error.
29
29
 
30
- **`pnpm josh run:watcher:guard` detects a missed restart** (joshuafolkken/kit#2113): wired into
31
- `pretool-guard` (joshuafolkken/kit#2353), it refuses the next tool call while lane children are in
30
+ **`pnpm josh run:watcher:guard` detects a missed restart**: wired into
31
+ `pretool-guard`, it refuses the next tool call while lane children are in
32
32
  flight and the watcher's life record has gone stale — once per run, so the restart is not blocked.
33
33
 
34
34
  **`--mark` at every real report.** Whenever the run reports something of its own, run
@@ -47,18 +47,22 @@ Rationale: `docs/maintainers/progress-watcher-rationale.md` → "Why the heartbe
47
47
 
48
48
  ### What a report says
49
49
 
50
- **Every unscheduled progress statement is answered by `pnpm josh run:progress --once`** — the reply to
51
- an explicit ask and the note just after a run starts alike; it is exempt from the interval and records
52
- the report itself, so no `--mark` beside it. **Relay its five field lines verbatim** — round, rephrase
50
+ **Every unscheduled progress statement is answered by `pnpm josh run:progress --once`** — under
51
+ `backlogrun`, `pnpm josh run:board --chat` in one code block — the reply to an explicit ask and
52
+ the note just after a run starts alike; each is exempt from the interval and records the report
53
+ itself, so no `--mark` beside it. **Relay its lines verbatim** — round, rephrase
53
54
  or re-label nothing, and **never write a clock time the command did not print**; where a field is
54
55
  missing, say so. **A field's empty value is an observation, never a state** (`record unread` is not
55
56
  *not stalled*), and **nothing in the lines is a verification result** — no gate, CI or check rollup.
56
57
 
57
- **The heartbeat is ambient, never a Telegram.** `pnpm josh run:event --watch` is its reader, in a pane
58
- of the person's own; **no session relays the stream** — name the watch command once, at the first cut
59
- or when asked. `pnpm josh run:wake --list` is the one-line read for a person who types for it.
58
+ **The heartbeat is ambient, never a Telegram.** `pnpm josh run:board` is its reader, in a pane of the
59
+ person's own; **no session relays the stream** — name the board command once, at the first cut or when
60
+ asked; `.vscode/tasks.json` starts it on folder open once VSCode's automatic-task prompt is allowed.
61
+ `pnpm josh run:event --watch` stays for following the raw events one by one. `pnpm josh run:wake --list` is the one-line read for a person who types for it.
62
+ **A request for periodic progress is never a CronCreate job** — on screen, name `pnpm josh run:board`;
63
+ off-screen, start `pnpm josh run:board --every <minutes>` in the background (`docs/josh-commands-run.md`).
60
64
 
61
- **A stop is the only interrupt** (joshuafolkken/kit#2136): a `backlogrun` that has stopped ends with
65
+ **A stop is the only interrupt**: a `backlogrun` that has stopped ends with
62
66
  `pnpm josh run:carry --end --stopped "<reason>"`, which sends one ⏸️ confirmation; a parked child sends
63
67
  its own (`backlogrun-park.md`). Rationale: `docs/maintainers/progress-watcher-rationale.md` → "Why the
64
68
  signal tiers are split this way".
@@ -88,3 +92,5 @@ notification, and the running `--wait` is stopped in the same turn, since no rep
88
92
  covers `halfrun`'s stop before commit, a `needs-human-review` stop, a split or prerequisite stop, and a
89
93
  `backlogrun` named issue's failure stop. Rationale: `docs/maintainers/progress-watcher-rationale.md` →
90
94
  "Why the watcher runs where it does".
95
+
96
+ Provenance of each rule: `docs/maintainers/progress-watcher-rationale.md` → "Where each rule came from".
@@ -1,10 +1,10 @@
1
1
  # `prrun` — the manifest (plan → implement → PR → green → stop, a person merges)
2
2
 
3
3
  `prrun` sits between `halfrun` (stop before commit) and `fullrun` (auto-merge). It runs `fullrun`
4
- up to a green, mergeable pull request and **stops before the merge**, so a person merges by hand
5
- (joshuafolkken/kit#3023). **Read `fullrun.md` and `entry-sequence.md` for every step** — the entry
4
+ up to a green, mergeable pull request and **stops before the merge**, so a person merges by hand.
5
+ **Read `fullrun.md` and `entry-sequence.md` for every step** — the entry
6
6
  sequence, the step lists, the gate, the review and the stop branches are `fullrun`'s, unchanged. This
7
- file names only the difference, never a second copy of the procedure.
7
+ file names only the difference.
8
8
 
9
9
  ## The difference — the entry
10
10
 
@@ -1,21 +1,19 @@
1
1
  # The end-of-run retrospective
2
2
 
3
3
  **This is the retrospective's procedure, and it is read when `run:step` prints the retrospective step —
4
- not at the entry** (joshuafolkken/kit#2328). `SKILL.md` → §2's table keeps the rule itself: run what `run:step` prints once,
4
+ not at the entry.** `SKILL.md` → §2's table keeps the rule itself: run what `run:step` prints once,
5
5
  file the improvements worth carrying into the next run, stack the rest, and mark the step done.
6
- Everything that decides *how* — what the four sections mean, how the top two are chosen rather than
7
- rationed, the exclusions, and the `auto-ok` default that lets the next run pick them up — is here,
8
- because none of it binds until a run has actually drained its backlog. A run that never empties its pool
9
- never reads it; the one that does reads it in full, in the same turn, before it files.
6
+ Everything that decides *how* — what the four sections mean, how the top two are chosen, the
7
+ exclusions, and the `auto-ok` default — is here. Read it in full, in the same turn, before filing.
10
8
 
11
9
  **When it fires is not this file's, and not a judgement.** The run driver prints the step the moment the
12
10
  backlog drains — `backlog:offer` marks that drain on the event stream and `run:step` fires the
13
11
  retrospective at it, *before* the idle watch, so the improvement issues it files are what the watch then
14
- picks up (joshuafolkken/kit#2335); a run that stops without draining — the failure guard, `--idle 0` —
15
- still prints it at the stop position. Either way the rule that decides *when* a run acts lives in
16
- `run:step`'s state transitions rather than in prose here, which is `CLAUDE.md`'s run-driver rule. This
17
- file is reached only once the step is already owed. It is kit-only — `run:step` prints the step only in
18
- the kit repository — so a consumer run never reaches this procedure.
12
+ picks up; a run that stops without draining — the failure guard, `--idle 0` — still prints it at the
13
+ stop position. It is kit-only — `run:step` prints the step only in the kit repository.
14
+
15
+ Rationale: `docs/maintainers/retrospective-rationale.md` → "Why the retrospective is read at its step";
16
+ provenance: `docs/maintainers/retrospective-rationale.md` → "Where each rule came from".
19
17
 
20
18
  ## The digest is read, not skimmed
21
19
 
@@ -45,13 +43,10 @@ improves, and a `depth:2` finding names which decision it turns on (`observation
45
43
  test"). An improvement that cannot pass the test is not filed; it is not a shortfall of the two-item
46
44
  count, it simply is not yet a finding.
47
45
 
48
- **Order what passes by effect, and file the top two.** This is a selection, not a ration
49
- (`observation-filing.md` → "This is not the count cap"): nothing that passed the test is lost, because
50
- **the third onward is stacked in the observation ledger**, on the same append path
51
- `pnpm josh observations:flush` already drains. So "two" is the amount one turn hands the next run, not a
52
- ceiling on what may be recorded. **File nothing when nothing passes** — a run whose measurements show no
53
- improvement worth carrying files zero Issues, and that is what makes the "file → drain → file again"
54
- loop converge.
46
+ **Order what passes by effect, and file the top two.** **The third onward is stacked in the observation
47
+ ledger**, on the same append path `pnpm josh observations:flush` already drains. **File nothing when
48
+ nothing passes** — a run whose measurements show no improvement worth carrying files zero Issues.
49
+ `docs/maintainers/retrospective-rationale.md` → "Why the top two are a selection, not a ration".
55
50
 
56
51
  **Exclude what is already filed or already done, through the existing scout** (`issue-scout.md`). File
57
52
  each with `pnpm josh issue:file`, which runs the scout before creating anything: an **open** candidate
@@ -73,7 +68,7 @@ retrospective run on the carry record, so `run:step` prints `stop` from then on
73
68
  second time. The mark rides the record across a session cut and is removed with the record at
74
69
  `pnpm josh run:carry --end`, so one invocation runs the retrospective exactly once whether or not it was
75
70
  cut. **`--summary` is required** — the same close writes it as one `retrospective` event on the event
76
- stream (joshuafolkken/kit#2342), so a zero-filing retrospective differs from one that never ran; name
71
+ stream, so a zero-filing retrospective differs from one that never ran; name
77
72
  the issues filed (or that none were) and the candidates dropped with why.
78
73
 
79
74
  **A dispatched lane child never reaches any of this** — the batch runs the retrospective at its own end,
@@ -29,9 +29,10 @@ whether *several findings from one session* are one Issue — and reads the **sa
29
29
  same conjunction**: separability, and whether the whole clearly exceeds one gate.
30
30
  `pnpm josh issue:fold "<title>" …` answers `fold` / `separate` / `no-fold-needed`; its size half is
31
31
  `pnpm josh split:assess`, called not recomputed, and `separate` needs both halves exactly as `split`
32
- does. **There is no second criterion.** `observation-filing.md`'s observation, the review round cap's branch 2 and `prerequisite.md`'s
33
- prerequisite each route a second filing through it, delivered by `pnpm josh rule:guard` at the run's
34
- second `pnpm josh issue:file` call, never the first.
32
+ does. A diff with no non-test file, or none readable, answers `undetermined`: the size is then the
33
+ whole request's estimate above. **There is no second criterion.** `observation-filing.md`'s observation, the review round cap's branch 2 and `prerequisite.md`'s
34
+ prerequisite each route a second filing through it — `pnpm josh issue:file` asks it itself at the
35
+ run's second filing, never the first, and holds only a `fold`.
35
36
 
36
37
  ## Diff size is not a reason to split, and that is measured
37
38
 
@@ -76,7 +77,8 @@ moment that child merges and closes.
76
77
 
77
78
  **Each split child is filed with the `route:split` label** —
78
79
  `pnpm josh issue:file "<sub-title>" --body-file <body-file> --depth <n> --route split` — so the
79
- backlog's composition stays countable by filing route rather than by grepping issue bodies.
80
+ backlog's composition stays countable by filing route rather than by grepping issue bodies. A split of
81
+ a person's `kickoff new` also takes `--requested` (`kickoff.md` → "Words typed after `new`").
80
82
 
81
83
  ## Promote, or create a new epic
82
84
 
@@ -1,41 +1,39 @@
1
1
  # The `owner/repo#` prefix — which repository the run acts on
2
2
 
3
3
  **This file is the prefix's single source, read at its point of use — the moment an entry is typed with an
4
- `owner/repo#` prefix (or a short `repo#` name), not at any entry** (joshuafolkken/kit#2161). A run
5
- given a bare `#N` or `new` targets the session's own repository and never reaches it, so it costs a
6
- workflow entry nothing to leave it here. `SKILL.md` → §2's table keeps the trigger and points here.
4
+ `owner/repo#` prefix (or a short `repo#` name), not at any entry.** A run given a bare `#N` or `new`
5
+ targets the session's own repository and never reaches it. `SKILL.md` → §2's table keeps the trigger and
6
+ points here. Rationale: `docs/maintainers/target-repository-rationale.md` → "Why the prefix reads as it does".
7
7
 
8
8
  Every entry point takes the target repository in front of the Issue reference. Without it the target
9
9
  is the repository the session runs in.
10
10
 
11
11
  ```
12
- kickoff joshuafolkken/kit#412
12
+ kickoff joshuafolkken/kit#<N>
13
13
  kickoff kit#new
14
14
  kickoff kit#new "<title>"
15
- fullrun joshuafolkken/app-kit#12
16
- halfrun kit#412
17
- backlogrun kit#1 kit#2
18
- backlogrun joshuafolkken/kit#858 --only
15
+ fullrun joshuafolkken/app-kit#<N>
16
+ halfrun kit#<N>
17
+ backlogrun kit#<N> kit#<M>
18
+ backlogrun joshuafolkken/kit#<N> --only
19
19
  ```
20
20
 
21
- - **One definition, every entry point.** The prefix goes where `#N` goes, so no new keyword is added,
22
- and `owner/repo#new` stands in the same slot as `owner/repo#N`.
21
+ - **One definition, every entry point.** The prefix goes where `#N` goes, and `owner/repo#new` stands
22
+ in the same slot as `owner/repo#N`.
23
23
  - **A short name expands by prefixing the session repository's owner** — `pnpm josh repo:party`
24
- computes the party — and **never by searching kit#869's map**, which answers where a checkout is
25
- rather than which repository is meant. A short name therefore satisfies the first-party test (owner
26
- equality) by construction, so **there is structurally no path by which a short name resolves to a
27
- third-party target**, and a repository that is not checked out here is still a valid `kickoff`
28
- target. A name that does not exist fails as `gh` not found: report it, never read it as a near-miss
29
- for another name.
30
- - **It is not the standing prohibition on a bare `#N`.** What that forbids is a bare *Issue number*,
31
- which resolves without complaint to a different issue of the same number; a bare *repository* name
32
- whose owner is determined has no such failure mode.
24
+ computes the party — and **never by searching `pnpm josh doctor`'s checkout map**. A short name
25
+ therefore satisfies the first-party test (owner equality) by construction, so **there is structurally
26
+ no path by which a short name resolves to a third-party target**, and a repository that is not
27
+ checked out here is still a valid `kickoff` target. A name that does not exist fails as `gh` not
28
+ found: report it, never read it as a near-miss for another name.
29
+ - **It is not the standing prohibition on a bare `#N`**, which forbids a bare *Issue number*; a bare
30
+ *repository* name whose owner is determined is allowed.
33
31
  - **An explicit owner that is not the session's is a third-party target, and it stops the run.**
34
- `fullrun <other-owner>/repo#12` names a tracker we do not own, and every write there is Tier C
32
+ `fullrun <other-owner>/repo#<N>` names a tracker we do not own, and every write there is Tier C
35
33
  (`CLAUDE.md` → "Third-party repositories are Tier C"). **Decide it mechanically** with
36
34
  `pnpm josh repo:party <owner/repo>` — a `third-party` verdict stops the run. Typing the prefix is not the
37
- explicit instruction that rule requires. **Send a `confirmation` Telegram and stop** — nothing has
38
- been produced yet, so there is no finding to record and no draft to prepare.
35
+ explicit instruction that rule requires. **Send a `confirmation` Telegram and stop** — there is no
36
+ finding to record and no draft to prepare.
39
37
  - **No prefix leaves the behavior exactly as it was** — the target is the session's repository.
40
38
  - **`kickoff` needs no checkout**: name the target repository with `--repo <owner/repo>` on every
41
39
  `pnpm josh issue:file` call and in the path of every `gh api` call, and never clone. The one exception
@@ -45,15 +43,14 @@ backlogrun joshuafolkken/kit#858 --only
45
43
  `direct-filing` guard, and `pnpm josh issue:file` lints an epic body against the Issue template. The
46
44
  promote arm stops the same way.
47
45
  - **The implementing entries require a checkout and never create one — when the target is another
48
- repository.** A prefix naming the session's own repository changes nothing (`fullrun kit#412` in the
49
- kit checkout behaves exactly as `fullrun #412`). Otherwise resolve the checkout from `pnpm josh
46
+ repository.** A prefix naming the session's own repository changes nothing (`fullrun kit#<N>` in the
47
+ kit checkout behaves exactly as `fullrun #<N>`). Otherwise resolve the checkout from `pnpm josh
50
48
  doctor`'s map; **no checkout there, or a tree that is not clean, stops the run** with a
51
- `confirmation` Telegram — cloning decides the layout of someone's machine for them, and a dirty tree
52
- holds work that is not yours to stash. Otherwise the commands that act on the target execute in that
53
- checkout.
49
+ `confirmation` Telegram — never clone, never stash. Otherwise the commands that act on the target
50
+ execute in that checkout.
54
51
  - **A named epic is exempt from the whole bullet above**: `owner/repo#E` names where the *epic* lives,
55
52
  not where its children are implemented. Its state is read against that repository through `gh api`,
56
53
  so that repository needs no checkout. The checkout rules bind each child at implementation time,
57
54
  against **that child's** repository ("Concurrency" in `backlogrun.md`).
58
55
  - **Independent of `into <target>`**: this says which repository the run acts on, `into` says which
59
- epic the artifact joins — `kickoff kit#new into joshuafolkken/kit#909` is one correct line.
56
+ epic the artifact joins — `kickoff kit#new into joshuafolkken/kit#<E>` is one correct line.
@@ -1,12 +1,10 @@
1
1
  # The working-tree hold — one run per tree
2
2
 
3
- **This file is the single source, so the entry read carries the trigger and the pointer, not the
4
- procedure** (joshuafolkken/kit#2189). `SKILL.md` → §2's table keeps the trigger, and
5
- `entry-sequence.md` routes here for the definition. It is read at its point of use — the moment
6
- a run is about to claim or release the tree.
3
+ **The single source of the hold**, read at its point of use — the moment a run is about to claim or
4
+ release the tree. History: `docs/maintainers/working-tree-hold-rationale.md` → "Where each rule came from".
7
5
 
8
6
  **Ask `pnpm josh run:hold` before anything else, and obey what it answers.** It is the first call of
9
- `fullrun` and `halfrun` alike — before the title is normalized, before `git switch main`, and **before
7
+ `fullrun` and `halfrun` alike — before the title is normalized, before `pnpm josh ms`, and **before
10
8
  a `new` entry files its Issue**, because a run stopped after the filing has already left behind the
11
9
  artifact it should not have created.
12
10
 
@@ -24,15 +22,12 @@ pnpm josh run:release --force # a record left behind by a run that has ended
24
22
  **File nothing, create no branch, edit nothing.**
25
23
  - **`unknown` — nothing was established. Stop the same way.** It is not "the tree is free".
26
24
 
27
- **The unit is the working tree, and `epic-busy.ts` is not reused for it.** That read answers about a
28
- *repository* and implements `backlogrun`'s one-child-per-repository rule; what these entry points contend
29
- for is one branch, one index and one uncommitted diff, and a linked work tree has its own three.
30
- **`backlogrun`'s own guard is unchanged** — the two layers guard different resources.
25
+ **The unit is the working tree** — one branch, one index and one uncommitted diff, and a linked work
26
+ tree has its own three. **`backlogrun`'s per-repository guard (`epic-busy.ts`) is a separate layer and is
27
+ unchanged.**
31
28
 
32
- **`kickoff` does not claim it, and that is an exemption rather than an omission.** `kickoff` touches
33
- none of branch, index or uncommitted diff: it reads the Issue, normalizes the title, posts the plan,
34
- notifies and stops, every one of those against GitHub. It is a fact about the command rather than a
35
- judgement made at the entry, and it changes nothing for `fullrun` or `halfrun`.
29
+ **`kickoff` does not claim it** — it touches GitHub, never the branch, index or diff. Rationale for both:
30
+ `docs/maintainers/working-tree-hold-rationale.md` → "Why the unit is the working tree".
36
31
 
37
32
  **Claim it in the checkout the run will edit.** The record is keyed to the work tree the command runs
38
33
  in, so a cross-repository `fullrun owner/repo#N` resolves that repository's checkout from `pnpm josh
@@ -70,14 +65,13 @@ the procedure.
70
65
 
71
66
  ## The halfrun resume
72
67
 
73
- **`fullrun #<N>` or `prrun #<N>` after a `halfrun` stop resumes it instead of claiming**
74
- (joshuafolkken/kit#2796, #3042). The
68
+ **`fullrun #<N>` or `prrun #<N>` after a `halfrun` stop resumes it instead of claiming.** The
75
69
  stop is **recorded, never inferred**: the `halfrun` ends with `pnpm josh run:hold <N> --halfrun-stop`,
76
70
  which marks its own record (re-keying a `halfrun new`'s unnumbered one to the filed issue) — a
77
71
  `halfrun` still implementing or a `backlogrun` child leaves the same hold over the same dirty tree, and
78
72
  must not be adopted. On a marked hold for `#<N>` over a dirty tree, `run:entry` asks the session budget
79
73
  (`over` stops as usual), adopts the hold with the `fullrun` mark and prints `entry #<N> — resume:
80
- halfrun`. **Skip the title, the plan, the split assessment, `git switch main && git pull`,
74
+ halfrun`. **Skip the title, the plan, the split assessment, `pnpm josh ms`,
81
75
  `latest:scope` and the implementation**: the diff in the tree is what the person verified. Re-read the
82
76
  issue (`pnpm josh issue:read <N>`), then run the gate **in full** from the refactor (`chain-rule.md` →
83
77
  "Run the review-to-merge chain") — a fix made during the manual check has had no gate — and ship as
@@ -85,7 +79,7 @@ any `fullrun` does.
85
79
 
86
80
  ## The prrun resume
87
81
 
88
- **`fullrun #<N>` after a `prrun` stop resumes it the same way** (joshuafolkken/kit#3023). The `prrun`
82
+ **`fullrun #<N>` after a `prrun` stop resumes it the same way.** The `prrun`
89
83
  ends with `pnpm josh run:hold <N> --prrun-stop`, which writes the commit its pull request is on into its
90
84
  own record; only a record carrying that commit is adopted. `run:entry` asks the session budget, adopts
91
85
  the hold with the `fullrun` mark and prints one of three tokens — read, never inferred: