@joshuafolkken/kit 1.1035.0 → 1.1094.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 (605) hide show
  1. package/.claude/settings.json +9 -8
  2. package/.claude/skills/epic-commands/SKILL.md +5 -7
  3. package/.claude/skills/verify-ui/SKILL.md +1 -1
  4. package/.claude/skills/workflow-commands/SKILL.md +21 -13
  5. package/.claude/skills/workflow-commands/background-commands.md +5 -4
  6. package/.claude/skills/workflow-commands/backlogrun-child.md +3 -3
  7. package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -7
  8. package/.claude/skills/workflow-commands/backlogrun-park.md +6 -0
  9. package/.claude/skills/workflow-commands/backlogrun-progress.md +31 -37
  10. package/.claude/skills/workflow-commands/backlogrun-steps.md +25 -25
  11. package/.claude/skills/workflow-commands/backlogrun.md +2 -2
  12. package/.claude/skills/workflow-commands/chain-rule.md +6 -4
  13. package/.claude/skills/workflow-commands/delegation.md +3 -3
  14. package/.claude/skills/workflow-commands/followup-reference.md +3 -3
  15. package/.claude/skills/workflow-commands/followup.md +7 -3
  16. package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
  17. package/.claude/skills/workflow-commands/fullrun.md +3 -2
  18. package/.claude/skills/workflow-commands/halfrun.md +16 -19
  19. package/.claude/skills/workflow-commands/issue-comments.md +2 -2
  20. package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
  21. package/.claude/skills/workflow-commands/issue-scout.md +1 -1
  22. package/.claude/skills/workflow-commands/kickoff.md +9 -4
  23. package/.claude/skills/workflow-commands/latest-gate.md +1 -1
  24. package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
  25. package/.claude/skills/workflow-commands/observation-filing.md +44 -89
  26. package/.claude/skills/workflow-commands/pre-gate-cut.md +33 -36
  27. package/.claude/skills/workflow-commands/prerequisite.md +1 -1
  28. package/.claude/skills/workflow-commands/prrun.md +36 -0
  29. package/.claude/skills/workflow-commands/retrospective.md +1 -1
  30. package/.claude/skills/workflow-commands/working-tree-hold.md +24 -4
  31. package/.codex/hooks.json +16 -20
  32. package/.github/actions/setup-pnpm/action.yml +93 -0
  33. package/.github/dependabot.yml +5 -1
  34. package/.github/workflows/auto-tag.yml +21 -0
  35. package/.github/workflows/ci.yml +26 -128
  36. package/.github/workflows/pr-classification.yml +5 -41
  37. package/.github/workflows/publish.yml +42 -48
  38. package/.github/workflows/sonar-qube.yml +37 -4
  39. package/AGENTS.md +12 -2
  40. package/CLAUDE.md +15 -16
  41. package/GEMINI.md +14 -2
  42. package/README.md +59 -18
  43. package/SECURITY.md +36 -6
  44. package/cspell/index.yaml +2 -1
  45. package/dist/CLAUDE.md +15 -16
  46. package/dist/config-merge/index.js +15 -3
  47. package/dist/hooks/batch-guard.js +4 -4
  48. package/dist/hooks/{chunk-Y27M6A7X.js → chunk-3C4YCCEF.js} +5 -13
  49. package/dist/hooks/{chunk-D67KVGGY.js → chunk-7ZPFAVR7.js} +17 -88
  50. package/dist/hooks/{chunk-HOYJU5RM.js → chunk-E54KGFEQ.js} +11 -4
  51. package/dist/hooks/{chunk-KG6PZD72.js → chunk-IL27YTPH.js} +2 -2
  52. package/dist/hooks/{chunk-GJT4BNVE.js → chunk-KHWHKJOM.js} +3 -3
  53. package/dist/hooks/{chunk-HU66PWWL.js → chunk-M2XDCUKD.js} +1076 -509
  54. package/dist/hooks/{chunk-GLBDBJOK.js → chunk-NKOG3XAV.js} +199 -304
  55. package/dist/hooks/{chunk-ZXNE6NY3.js → chunk-O4LL4HTI.js} +2 -7
  56. package/dist/hooks/{chunk-XPLP27WA.js → chunk-OIZUHPJI.js} +5 -27
  57. package/dist/hooks/{chunk-EIFCAJRB.js → chunk-UD24EAIL.js} +2546 -1636
  58. package/dist/hooks/codex-hook-adapter.js +10 -11
  59. package/dist/hooks/duplicate-read-guard.js +5 -5
  60. package/dist/hooks/format-edited.js +15 -34
  61. package/dist/hooks/inputs.json +279 -0
  62. package/dist/hooks/investigation-guard.js +5 -5
  63. package/dist/hooks/pretool-guard.js +23 -16
  64. package/dist/hooks/session-lang.js +0 -1
  65. package/dist/hooks/stop-guard.js +188 -509
  66. package/dist/josh.js +166 -225
  67. package/dist/managed-marker/index.js +2 -1
  68. package/dist/version/index.js +412 -64
  69. package/eslint/rules/promise.js +5 -0
  70. package/package.json +13 -8
  71. package/prompts/collaboration-workflow/file-edits.md +6 -53
  72. package/prompts/collaboration-workflow/issue-citation.md +5 -5
  73. package/prompts/collaboration-workflow/operating-rules.md +4 -4
  74. package/prompts/collaboration-workflow/overview.md +13 -1
  75. package/prompts/collaboration-workflow/report-format.md +1 -1
  76. package/prompts/collaboration-workflow/residency.md +4 -4
  77. package/prompts/collaboration-workflow/rule-delivery.md +5 -36
  78. package/prompts/collaboration-workflow/shell-body.md +7 -9
  79. package/prompts/collaboration-workflow/turn-batching.md +21 -37
  80. package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
  81. package/prompts/collaboration-workflow/wip-cap.md +36 -36
  82. package/prompts/collaboration-workflow.md +5 -8
  83. package/prompts/review-rubric.md +1 -1
  84. package/prompts/review.md +3 -3
  85. package/prompts/sonar-hotspot-handling.md +12 -4
  86. package/prompts/testing-guide.md +3 -3
  87. package/scripts/adopt/adopt-toolkits.ts +2 -2
  88. package/scripts/adopt/adopt.ts +0 -2
  89. package/scripts/agent/agent-argv.ts +0 -2
  90. package/scripts/agent/agent-diagnostics.ts +1 -1
  91. package/scripts/agent/agent-role-profile.ts +0 -7
  92. package/scripts/agent/claude-agent-argv.ts +0 -2
  93. package/scripts/agent/codex-agent-argv.ts +1 -1
  94. package/scripts/agent/codex-hooks.ts +92 -0
  95. package/scripts/agent/interactive-ask.ts +1 -1
  96. package/scripts/auto-ok/auto-ok-cli.ts +15 -25
  97. package/scripts/backlog/backlog-budget.ts +0 -2
  98. package/scripts/backlog/backlog-defect-priority.ts +2 -2
  99. package/scripts/backlog/backlog-drive-cli.ts +10 -8
  100. package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
  101. package/scripts/backlog/backlog-drive-named.ts +2 -1
  102. package/scripts/backlog/backlog-drive.ts +76 -16
  103. package/scripts/backlog/backlog-named.ts +0 -3
  104. package/scripts/backlog/backlog-next.ts +32 -22
  105. package/scripts/backlog/backlog-offer-cli.ts +0 -5
  106. package/scripts/backlog/backlog-plan-cli.ts +6 -8
  107. package/scripts/backlog/backlog-plan.ts +1 -1
  108. package/scripts/backlog/backlog-pool.ts +34 -17
  109. package/scripts/backlog/backlog-rank.ts +106 -0
  110. package/scripts/backlog/backlog-ready.ts +19 -3
  111. package/scripts/backlog/backlog-scope.ts +1 -3
  112. package/scripts/backlog/backlog-stalled-detect.ts +2 -2
  113. package/scripts/backlog/backlog-stalled.ts +0 -1
  114. package/scripts/backlog/backlog-waves.ts +47 -31
  115. package/scripts/behavior/behavior-cli.ts +1 -1
  116. package/scripts/build/build-codex-hooks.ts +26 -0
  117. package/scripts/build/build-hooks.ts +92 -11
  118. package/scripts/build/hook-bundle-stamp.ts +111 -0
  119. package/scripts/cases/cases-cli.ts +1 -1
  120. package/scripts/cases/cases-logic.ts +1 -1
  121. package/scripts/ci/composite-actions.ts +30 -0
  122. package/scripts/ci/pr-classification.ts +3 -3
  123. package/scripts/claude/workflow-destination.ts +10 -1
  124. package/scripts/clone/clone-fingerprint.ts +0 -1
  125. package/scripts/clone/clone-scan-cli.ts +1 -1
  126. package/scripts/clone/clone-scan.ts +1 -1
  127. package/scripts/config-merge/json-format.ts +0 -1
  128. package/scripts/config-merge/patch-yaml-list.ts +1 -1
  129. package/scripts/cost-runtime/codex-usage.ts +2 -9
  130. package/scripts/cost-runtime/cost-attribute.ts +0 -1
  131. package/scripts/cost-runtime/cost-cli.ts +0 -3
  132. package/scripts/cost-runtime/cost-corpus.ts +0 -2
  133. package/scripts/cost-runtime/cost-format.ts +0 -3
  134. package/scripts/cost-runtime/cost-pricing.ts +0 -1
  135. package/scripts/cost-runtime/cost-tokens.ts +0 -1
  136. package/scripts/delegation/delegation-cli.ts +1 -1
  137. package/scripts/delegation/delegation-policy.ts +11 -1
  138. package/scripts/delegation/duplicate-read-guard.ts +0 -8
  139. package/scripts/delegation/fanout-cli.ts +1 -1
  140. package/scripts/delegation/fanout.ts +0 -2
  141. package/scripts/delegation/investigation-reads.ts +1 -164
  142. package/scripts/discovery/repo-map-logic.ts +0 -1
  143. package/scripts/discovery/repo-party-cli.ts +1 -1
  144. package/scripts/doctor/doctor-consumer.ts +4 -6
  145. package/scripts/doctor/doctor-logic.ts +0 -4
  146. package/scripts/doctor/doctor.ts +14 -9
  147. package/scripts/document/document-byte-budget.ts +8 -9
  148. package/scripts/document/document-byte-check.ts +0 -1
  149. package/scripts/document/document-read-cli.ts +0 -2
  150. package/scripts/document/document-section-cli.ts +1 -1
  151. package/scripts/document/document-section.ts +0 -3
  152. package/scripts/document/edit-files-cli.ts +0 -1
  153. package/scripts/document/entry-read-budget.ts +13 -4
  154. package/scripts/document/lane-child-read-set.ts +1 -6
  155. package/scripts/document/read-files-cli.ts +0 -4
  156. package/scripts/document/read-set-cli.ts +0 -2
  157. package/scripts/document/read-set-point-of-use.ts +1 -0
  158. package/scripts/document/read-set-pricing.ts +0 -1
  159. package/scripts/document/read-set-trim.ts +1 -1
  160. package/scripts/epic/epic-add.ts +1 -1
  161. package/scripts/epic/epic-audit-cli.ts +1 -4
  162. package/scripts/epic/epic-audit-orphans.ts +1 -3
  163. package/scripts/epic/epic-audit-rationale.ts +0 -1
  164. package/scripts/epic/epic-audit-report.ts +0 -2
  165. package/scripts/epic/epic-audit.ts +5 -4
  166. package/scripts/epic/epic-bundle-cli.ts +1 -1
  167. package/scripts/epic/epic-bundle-evidence.ts +0 -1
  168. package/scripts/epic/epic-bundle-referenced.ts +1 -5
  169. package/scripts/epic/epic-bundle.ts +0 -4
  170. package/scripts/epic/epic-busy.ts +4 -5
  171. package/scripts/epic/epic-candidate-confirm.ts +0 -5
  172. package/scripts/epic/epic-classify.ts +2 -2
  173. package/scripts/epic/epic-cli-argv.ts +0 -1
  174. package/scripts/epic/epic-close-comment.ts +1 -1
  175. package/scripts/epic/epic-close.ts +5 -2
  176. package/scripts/epic/epic-cross-repo.ts +2 -4
  177. package/scripts/epic/epic-decision.ts +0 -1
  178. package/scripts/epic/epic-fetch.ts +2 -2
  179. package/scripts/epic/epic-index.ts +2 -3
  180. package/scripts/epic/epic-issue.ts +1 -15
  181. package/scripts/epic/epic-lane-offer.ts +20 -30
  182. package/scripts/epic/epic-nested.ts +1 -1
  183. package/scripts/epic/epic-next-read.ts +1 -3
  184. package/scripts/epic/epic-next-views.ts +0 -1
  185. package/scripts/epic/epic-next.ts +1 -10
  186. package/scripts/epic/epic-parse.ts +0 -1
  187. package/scripts/epic/epic-promote.ts +0 -9
  188. package/scripts/epic/epic-rank.ts +37 -0
  189. package/scripts/epic/epic-read.ts +1 -2
  190. package/scripts/epic/epic-reconcile.ts +1 -1
  191. package/scripts/epic/epic-reference.ts +1 -13
  192. package/scripts/epic/epic-relation-recheck.ts +1 -1
  193. package/scripts/epic/epic-relations.ts +1 -1
  194. package/scripts/epic/epic-remove.ts +1 -1
  195. package/scripts/epic/epic-report.ts +0 -1
  196. package/scripts/epic/epic-run.ts +2 -3
  197. package/scripts/epic/epic-shape.ts +1 -1
  198. package/scripts/epic/epic-solo-stale.ts +107 -0
  199. package/scripts/epic/epic-solo.ts +32 -30
  200. package/scripts/epic/epic-triage.ts +1 -1
  201. package/scripts/epic/epic-validate.ts +1 -1
  202. package/scripts/epic/epic.ts +1 -1
  203. package/scripts/exports/unused-members-cli.ts +53 -0
  204. package/scripts/{git → followup}/followup-issue-number.ts +1 -6
  205. package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
  206. package/scripts/{git → followup}/git-followup-finish.ts +1 -3
  207. package/scripts/{git → followup}/git-followup-flush.ts +2 -2
  208. package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
  209. package/scripts/{git → followup}/git-followup-label.ts +4 -4
  210. package/scripts/followup/git-followup-merged.ts +112 -0
  211. package/scripts/{git → followup}/git-followup-pending.ts +1 -1
  212. package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
  213. package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
  214. package/scripts/{git → followup}/git-pr-followup.ts +53 -16
  215. package/scripts/gate/core-budget.ts +3 -9
  216. package/scripts/gate/gate-plan.ts +7 -4
  217. package/scripts/gate/gate-report.ts +0 -6
  218. package/scripts/gate/gate-tree.ts +1 -1
  219. package/scripts/gate/pre-commit-type-check.ts +0 -6
  220. package/scripts/gate/project-checks.ts +7 -8
  221. package/scripts/gate/scoped-green.ts +0 -1
  222. package/scripts/gate/type-check-step.ts +1 -1
  223. package/scripts/gate/verification-gate.ts +0 -2
  224. package/scripts/gh/fix-gh-packages.ts +15 -12
  225. package/scripts/gh/gh-spawn.ts +2 -2
  226. package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
  227. package/scripts/{git → gh}/git-gh-check.ts +2 -1
  228. package/scripts/{git → gh}/git-gh-exec.ts +1 -1
  229. package/scripts/{git → gh}/git-gh-failure.ts +1 -1
  230. package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
  231. package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
  232. package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
  233. package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
  234. package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
  235. package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
  236. package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
  237. package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
  238. package/scripts/{git → gh}/git-gh-pr.ts +3 -1
  239. package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
  240. package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
  241. package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
  242. package/scripts/{git → gh}/git-pr-checks.ts +2 -1
  243. package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
  244. package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
  245. package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
  246. package/scripts/{git → gh}/git-pr.ts +3 -3
  247. package/scripts/git/changed-file-scope.ts +0 -1
  248. package/scripts/git/git-branch.ts +3 -6
  249. package/scripts/git/git-command.ts +1 -1
  250. package/scripts/git/git-commit.ts +1 -1
  251. package/scripts/git/git-common-directory.ts +80 -24
  252. package/scripts/git/git-error.ts +66 -9
  253. package/scripts/git/git-execa-error.ts +6 -1
  254. package/scripts/git/git-issue.ts +1 -1
  255. package/scripts/git/git-preflight.ts +24 -6
  256. package/scripts/git/git-prompt.ts +6 -31
  257. package/scripts/git/git-push-transport.ts +12 -69
  258. package/scripts/git/git-push.ts +1 -1
  259. package/scripts/git/git-spawn.ts +79 -3
  260. package/scripts/git/git-ssh-keepalive.ts +74 -0
  261. package/scripts/git/git-staging.ts +1 -0
  262. package/scripts/git/git-status.ts +1 -1
  263. package/scripts/git/git-workflow.ts +1 -1
  264. package/scripts/git/gone-branch.ts +4 -2
  265. package/scripts/git/listing-cutoff.ts +1 -1
  266. package/scripts/git/main-merge.ts +1 -1
  267. package/scripts/git/main-sync.ts +19 -1
  268. package/scripts/git/parse-json-array.ts +0 -3
  269. package/scripts/git/repository-lock.ts +16 -16
  270. package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
  271. package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
  272. package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
  273. package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
  274. package/scripts/hooks/codex-hook-adapter.ts +0 -1
  275. package/scripts/hooks/edited-cspell.ts +1 -1
  276. package/scripts/hooks/format-edited-cli.ts +15 -0
  277. package/scripts/hooks/format-edited-file.ts +4 -9
  278. package/scripts/hooks/pre-push-unit.ts +0 -4
  279. package/scripts/hooks/pretool-guard-cli.ts +21 -0
  280. package/scripts/hooks/pretool-guard.ts +36 -19
  281. package/scripts/hooks/reserved-run.ts +1 -1
  282. package/scripts/hooks/step-zero-notice.ts +76 -0
  283. package/scripts/hooks/stop-guard.ts +47 -21
  284. package/scripts/init/claude-plugin-config.ts +4 -5
  285. package/scripts/init/hook-command-rewrite.ts +16 -8
  286. package/scripts/init/hook-launch.ts +41 -15
  287. package/scripts/init/init-basic.ts +2 -5
  288. package/scripts/init/init-logic.ts +7 -0
  289. package/scripts/init/init.ts +0 -3
  290. package/scripts/init/project-profile.ts +6 -11
  291. package/scripts/init/start-exec.ts +8 -2
  292. package/scripts/init/start-plan.ts +18 -5
  293. package/scripts/init/start-setup-pr.ts +52 -25
  294. package/scripts/init/start-steps.ts +42 -9
  295. package/scripts/init/start.ts +40 -10
  296. package/scripts/issue/behavior-change-lint.ts +0 -1
  297. package/scripts/issue/defect-rate-cli.ts +3 -3
  298. package/scripts/issue/defect-rate.ts +1 -2
  299. package/scripts/{git → issue}/git-next-issues.ts +37 -8
  300. package/scripts/issue/issue-backlinks-cli.ts +1 -5
  301. package/scripts/issue/issue-cite-cli.ts +2 -6
  302. package/scripts/issue/issue-cite.ts +19 -3
  303. package/scripts/issue/issue-classification.ts +1 -9
  304. package/scripts/issue/issue-closing-pr.ts +4 -4
  305. package/scripts/issue/issue-comment-cli.ts +2 -2
  306. package/scripts/issue/issue-file-cli.ts +5 -5
  307. package/scripts/issue/issue-file.ts +2 -2
  308. package/scripts/issue/issue-fold-cli.ts +1 -1
  309. package/scripts/issue/issue-fold-existing-cli.ts +1 -1
  310. package/scripts/{git → issue}/issue-labels.ts +20 -0
  311. package/scripts/issue/issue-lint-cli.ts +1 -1
  312. package/scripts/issue/issue-merged.ts +2 -2
  313. package/scripts/issue/issue-rank.ts +89 -0
  314. package/scripts/issue/issue-read-cli.ts +8 -47
  315. package/scripts/issue/issue-read.ts +0 -2
  316. package/scripts/issue/issue-report-failures.ts +80 -0
  317. package/scripts/issue/issue-scout-cli.ts +1 -7
  318. package/scripts/issue/issue-scout-closed.ts +2 -2
  319. package/scripts/issue/issue-scout.ts +0 -2
  320. package/scripts/issue/issue-state-cli.ts +5 -46
  321. package/scripts/issue/issue-state.ts +1 -5
  322. package/scripts/issue/markdown-section.ts +1 -1
  323. package/scripts/issue/measure-rerun-cli.ts +1 -1
  324. package/scripts/issue/reproduction-measure.ts +1 -1
  325. package/scripts/josh/cli-body.ts +1 -1
  326. package/scripts/josh/file-map-stamp.ts +0 -3
  327. package/scripts/josh/josh-command-map.ts +2 -102
  328. package/scripts/josh/josh-commands-ai.ts +9 -102
  329. package/scripts/josh/josh-commands-backlog.ts +5 -1
  330. package/scripts/josh/josh-commands-development.ts +10 -3
  331. package/scripts/josh/josh-commands-issue.ts +2 -2
  332. package/scripts/josh/josh-commands-maintenance.ts +7 -0
  333. package/scripts/josh/josh-commands-project.ts +7 -1
  334. package/scripts/josh/josh-commands-run.ts +114 -0
  335. package/scripts/josh/josh-commands-versioning.ts +8 -0
  336. package/scripts/josh/josh-commands-workflow.ts +2 -2
  337. package/scripts/josh/path-decision.ts +0 -3
  338. package/scripts/josh/process-owner.ts +16 -0
  339. package/scripts/josh/session-language-cli.ts +0 -1
  340. package/scripts/lane/lane-await.ts +3 -6
  341. package/scripts/lane/lane-capacity.ts +6 -3
  342. package/scripts/lane/lane-child-invocation.ts +20 -7
  343. package/scripts/lane/lane-child-marker.ts +16 -2
  344. package/scripts/lane/lane-cli.ts +33 -18
  345. package/scripts/lane/lane-close.ts +1 -3
  346. package/scripts/lane/lane-dispatch.ts +3 -4
  347. package/scripts/lane/lane-environment.ts +0 -9
  348. package/scripts/lane/lane-handoff.ts +38 -0
  349. package/scripts/lane/lane-launch-cli.ts +21 -11
  350. package/scripts/lane/lane-open.ts +0 -3
  351. package/scripts/lane/lane-output.ts +0 -1
  352. package/scripts/lane/lane-registry.ts +9 -0
  353. package/scripts/lane/lane-report.ts +10 -4
  354. package/scripts/lane/openai-lane-ship.ts +2 -0
  355. package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
  356. package/scripts/lane/openai-lane-supervisor.ts +6 -4
  357. package/scripts/lane/openai-review-broker.ts +3 -0
  358. package/scripts/lib/bounded-pool.ts +1 -0
  359. package/scripts/lib/json-value.ts +5 -4
  360. package/scripts/lib/poll.ts +3 -1
  361. package/scripts/lib/timed-fetch.ts +15 -0
  362. package/scripts/lib/timeouts.ts +13 -0
  363. package/scripts/{yaml → lib}/yaml-document.ts +3 -1
  364. package/scripts/{bytes → lines}/bytes-command.ts +0 -2
  365. package/scripts/lines/lines-command.ts +0 -1
  366. package/scripts/lint/lint-related-scope.ts +0 -1
  367. package/scripts/lint/lint-related.ts +1 -1
  368. package/scripts/{git → notify}/telegram-notify.ts +2 -2
  369. package/scripts/{git → notify}/telegram-test.ts +4 -4
  370. package/scripts/observations/observation-ledger-home.ts +0 -1
  371. package/scripts/observations/observation-ledger-line.ts +0 -1
  372. package/scripts/observations/observation-ledger-migrate.ts +1 -1
  373. package/scripts/observations/observations-flush-landing.ts +3 -3
  374. package/scripts/observations/observations-flush.ts +2 -2
  375. package/scripts/overrides/lockfile-overrides.ts +1 -1
  376. package/scripts/overrides/overrides-logic.ts +1 -1
  377. package/scripts/package/package-scout-cli.ts +2 -7
  378. package/scripts/package/package-scout.ts +0 -2
  379. package/scripts/propagate/propagate-git-failure.ts +0 -1
  380. package/scripts/propagate/propagate-git.ts +0 -2
  381. package/scripts/propagate/propagate-plan.ts +185 -0
  382. package/scripts/propagate/propagate-publish.ts +2 -3
  383. package/scripts/propagate/propagate-run.ts +5 -3
  384. package/scripts/propagate/propagate-steps.ts +19 -6
  385. package/scripts/propagate/propagate-targets.ts +13 -6
  386. package/scripts/propagate/propagate.ts +60 -46
  387. package/scripts/refactor/import-graph.ts +0 -1
  388. package/scripts/refactor/refactor-lint.ts +0 -2
  389. package/scripts/refactor/refactor-scan.ts +0 -1
  390. package/scripts/refactor/refactor-targets.ts +0 -1
  391. package/scripts/registry-migration/migrate-logic.ts +1 -2
  392. package/scripts/registry-migration/migrate.ts +19 -9
  393. package/scripts/release/github-release-cli.ts +8 -6
  394. package/scripts/release/github-release-environment.ts +46 -0
  395. package/scripts/release/github-release.ts +151 -94
  396. package/scripts/release/release-history.ts +0 -1
  397. package/scripts/release/release-plan.ts +0 -1
  398. package/scripts/release/release-publish.ts +2 -3
  399. package/scripts/release/release-scope-cli.ts +1 -2
  400. package/scripts/release/release-tag.ts +2 -4
  401. package/scripts/repo/auto-merge-setting-logic.ts +1 -4
  402. package/scripts/repo/repo-setting.ts +1 -1
  403. package/scripts/repo/repository-labels.ts +3 -3
  404. package/scripts/repo/required-checks-logic.ts +206 -0
  405. package/scripts/repo/required-checks-report.ts +71 -0
  406. package/scripts/repo/ruleset-check-cli.ts +53 -0
  407. package/scripts/repo/ruleset-check.ts +147 -0
  408. package/scripts/report/report-lint-cli.ts +0 -4
  409. package/scripts/review/disposition-cli.ts +1 -1
  410. package/scripts/review/live-evidence.ts +1 -1
  411. package/scripts/review/review-attest-cli.ts +0 -6
  412. package/scripts/review/review-attest.ts +48 -16
  413. package/scripts/review/review-brief-cli.ts +72 -8
  414. package/scripts/review/review-brief.ts +67 -9
  415. package/scripts/review/review-diff-parts.ts +89 -0
  416. package/scripts/review/review-diff-write.ts +97 -0
  417. package/scripts/review/review-finding-ledger.ts +0 -1
  418. package/scripts/review/review-record-cli.ts +1 -1
  419. package/scripts/review/review-record.ts +0 -1
  420. package/scripts/review/review-round2-cli.ts +1 -1
  421. package/scripts/review/review-stamps.ts +6 -2
  422. package/scripts/review/review-tree.ts +14 -2
  423. package/scripts/rules/decision-oracle-stage.ts +18 -0
  424. package/scripts/rules/decision-oracle.ts +10 -7
  425. package/scripts/rules/delivered-rules.ts +9 -1
  426. package/scripts/rules/destructive-command.ts +119 -0
  427. package/scripts/rules/direct-filing.ts +1 -1
  428. package/scripts/rules/file-body.ts +0 -3
  429. package/scripts/rules/filing-cap.ts +0 -2
  430. package/scripts/rules/gh-api.ts +7 -2
  431. package/scripts/rules/git-argv.ts +18 -7
  432. package/scripts/rules/git-force.ts +0 -2
  433. package/scripts/rules/implementation-cut.ts +1 -2
  434. package/scripts/rules/index-guard.ts +71 -0
  435. package/scripts/rules/issue-citation.ts +50 -25
  436. package/scripts/rules/issue-fold.ts +1 -2
  437. package/scripts/rules/lane-background.ts +15 -7
  438. package/scripts/rules/lane-carry-conflict.ts +1 -2
  439. package/scripts/rules/lane-park.ts +14 -8
  440. package/scripts/rules/last-prompt.ts +1 -0
  441. package/scripts/rules/oracle-consulted.ts +1 -1
  442. package/scripts/rules/oracle-firing.ts +1 -0
  443. package/scripts/rules/oracle-list-cli.ts +0 -3
  444. package/scripts/rules/permission-guards.ts +14 -0
  445. package/scripts/rules/pre-gate-cut.ts +2 -2
  446. package/scripts/rules/protected-files.ts +74 -0
  447. package/scripts/rules/reply-language.ts +1 -1
  448. package/scripts/rules/rule-body-guard.ts +0 -3
  449. package/scripts/rules/rule-value-cli.ts +0 -1
  450. package/scripts/rules/shell-body-trigger.ts +0 -1
  451. package/scripts/rules/shell-segments.ts +0 -1
  452. package/scripts/rules/stop-rules.ts +13 -5
  453. package/scripts/rules/tail-commands.ts +1 -1
  454. package/scripts/rules/test-declared-commit.ts +1 -1
  455. package/scripts/rules/third-party-write.ts +0 -1
  456. package/scripts/rules/worktree-guard.ts +26 -9
  457. package/scripts/run/run-carry-cli.ts +0 -2
  458. package/scripts/run/run-carry-stash.ts +2 -2
  459. package/scripts/run/run-carry-streak.ts +1 -1
  460. package/scripts/run/run-cut-cli.ts +0 -7
  461. package/scripts/run/run-cut.ts +8 -54
  462. package/scripts/run/run-ending-cli.ts +1 -1
  463. package/scripts/run/run-ending.ts +1 -4
  464. package/scripts/run/run-entry-cli.ts +101 -24
  465. package/scripts/run/run-entry.ts +0 -1
  466. package/scripts/run/run-event-cli.ts +0 -2
  467. package/scripts/run/run-event-follow.ts +1 -0
  468. package/scripts/run/run-event-render.ts +1 -1
  469. package/scripts/run/run-event-scope.ts +53 -4
  470. package/scripts/run/run-event-stream.ts +0 -3
  471. package/scripts/run/run-event-watch.ts +1 -0
  472. package/scripts/run/run-halfrun-resume.ts +20 -7
  473. package/scripts/run/run-headless.ts +24 -8
  474. package/scripts/run/run-hold-cli.ts +33 -10
  475. package/scripts/run/run-hold.ts +25 -5
  476. package/scripts/run/run-issue-number.ts +1 -1
  477. package/scripts/run/run-liveness-cli.ts +1 -1
  478. package/scripts/run/run-liveness.ts +2 -3
  479. package/scripts/run/run-merge-cli.ts +5 -13
  480. package/scripts/run/run-merge-steps.ts +5 -5
  481. package/scripts/run/run-merge.ts +1 -1
  482. package/scripts/run/run-next-cli.ts +1 -1
  483. package/scripts/run/run-parent-cut-hook.ts +143 -0
  484. package/scripts/run/run-preflight.ts +2 -9
  485. package/scripts/run/run-prep-cli.ts +2 -2
  486. package/scripts/run/run-prep-locate.ts +1 -1
  487. package/scripts/run/run-progress-cli.ts +4 -7
  488. package/scripts/run/run-progress-clock.ts +6 -34
  489. package/scripts/run/run-progress-config.ts +0 -4
  490. package/scripts/run/run-progress-read.ts +3 -3
  491. package/scripts/run/run-progress.ts +22 -10
  492. package/scripts/run/run-prrun-resume.ts +117 -0
  493. package/scripts/run/run-report-cli.ts +1 -2
  494. package/scripts/run/run-report.ts +0 -1
  495. package/scripts/run/run-retrospective.ts +1 -1
  496. package/scripts/run/run-review-cli.ts +0 -3
  497. package/scripts/run/run-review-steps.ts +2 -0
  498. package/scripts/run/run-review.ts +0 -2
  499. package/scripts/run/run-ship-cli.ts +27 -77
  500. package/scripts/run/run-ship-detach.ts +1 -0
  501. package/scripts/run/run-ship-next.ts +106 -0
  502. package/scripts/run/run-ship-preflight.ts +87 -0
  503. package/scripts/run/run-ship-return.ts +8 -3
  504. package/scripts/run/run-ship-review-steps.ts +23 -30
  505. package/scripts/run/run-ship-review.ts +20 -0
  506. package/scripts/run/run-ship-scoped.ts +45 -0
  507. package/scripts/run/run-ship-stage.ts +5 -1
  508. package/scripts/run/run-ship-steps.ts +105 -0
  509. package/scripts/run/run-ship.ts +2 -1
  510. package/scripts/run/run-stage-read.ts +62 -0
  511. package/scripts/run/run-stage.ts +160 -0
  512. package/scripts/run/run-status-cli.ts +1 -1
  513. package/scripts/run/run-step-cli.ts +21 -14
  514. package/scripts/run/run-step.ts +1 -1
  515. package/scripts/run/run-stop-notify.ts +1 -3
  516. package/scripts/run/run-stranded-cli.ts +0 -4
  517. package/scripts/run/run-stranded-detect.ts +2 -2
  518. package/scripts/run/run-tail-cli.ts +17 -11
  519. package/scripts/run/run-tail.ts +2 -0
  520. package/scripts/run/run-tidy-lanes.ts +2 -1
  521. package/scripts/run/run-tidy-stashes.ts +12 -12
  522. package/scripts/run/run-wake-cli.ts +4 -5
  523. package/scripts/run/run-wake-describe.ts +19 -1
  524. package/scripts/run/run-wake-loop.ts +2 -2
  525. package/scripts/run/run-wake.ts +2 -4
  526. package/scripts/run/run-watcher-guard-cli.ts +0 -4
  527. package/scripts/run/run-watcher-guard.ts +9 -7
  528. package/scripts/run/run-watcher-hook.ts +1 -1
  529. package/scripts/safe-chain/ci-installer-pin.ts +11 -5
  530. package/scripts/safe-chain/project-config.ts +1 -1
  531. package/scripts/security/security-audit-provision-logic.ts +0 -1
  532. package/scripts/security/security-audit-provision.ts +3 -2
  533. package/scripts/security/security-audit.ts +0 -1
  534. package/scripts/security/security-updates-logic.ts +0 -1
  535. package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
  536. package/scripts/sonar/sonar-hotspots.ts +0 -1
  537. package/scripts/sonar/sonar-new-code-cli.ts +150 -0
  538. package/scripts/sonar/sonar-new-code.ts +79 -0
  539. package/scripts/sonar/sonar-project.ts +97 -0
  540. package/scripts/split/split-assess-cli.ts +1 -1
  541. package/scripts/split/split-assess.ts +2 -5
  542. package/scripts/sync/managed-config-scope-cli.ts +1 -1
  543. package/scripts/sync/skill-migration.ts +0 -1
  544. package/scripts/sync/sync-hook-safety.ts +2 -3
  545. package/scripts/sync/sync.ts +1 -8
  546. package/scripts/sync/template-source-logic.ts +0 -1
  547. package/scripts/sync/workflow-pin-logic.ts +16 -28
  548. package/scripts/test/test-declared-logic.ts +0 -1
  549. package/scripts/test/test-declared.ts +0 -2
  550. package/scripts/test/test-red-commit.ts +2 -2
  551. package/scripts/test/test-red.ts +14 -7
  552. package/scripts/test/test-type-logic.ts +1 -1
  553. package/scripts/test/unit-worker-share.ts +7 -16
  554. package/scripts/time-runtime/time-batch-guard.ts +1 -2
  555. package/scripts/time-runtime/time-bundle-call.ts +2 -3
  556. package/scripts/time-runtime/time-bundles.ts +0 -4
  557. package/scripts/time-runtime/time-density-hook.ts +0 -2
  558. package/scripts/time-runtime/time-followup-stage.ts +1 -1
  559. package/scripts/time-runtime/time-format.ts +0 -73
  560. package/scripts/time-runtime/time-round-trips.ts +0 -4
  561. package/scripts/time-runtime/time-single-check.ts +1 -1
  562. package/scripts/time-runtime/time-spans.ts +1 -1
  563. package/scripts/time-runtime/time-transcript-line.ts +1 -2
  564. package/scripts/ui/ui-routes-cli.ts +0 -5
  565. package/scripts/ui/ui-routes.ts +0 -5
  566. package/scripts/version/effective-upstream.ts +2 -2
  567. package/scripts/version/latest-corepack.ts +7 -9
  568. package/scripts/version/latest-scope-cli.ts +0 -2
  569. package/scripts/version/latest-update.ts +0 -2
  570. package/scripts/version/npm-registry.ts +97 -0
  571. package/scripts/version/publishable-range-check.ts +1 -1
  572. package/scripts/version/release-hold.ts +0 -4
  573. package/scripts/version/running-binary.ts +2 -2
  574. package/scripts/version/version-check-logic.ts +0 -2
  575. package/scripts/version/version-commands.ts +5 -4
  576. package/scripts/version/version-remote.ts +28 -14
  577. package/scripts/version/version-targets.ts +4 -4
  578. package/templates/sonar-project.properties +28 -1
  579. package/templates/workflows/dependabot-auto-merge.yml +5 -3
  580. package/templates/workflows/github-release.yml +81 -0
  581. package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
  582. package/prompts/collaboration-workflow/epic-audit.md +0 -5
  583. package/prompts/collaboration-workflow/epic-bundle.md +0 -5
  584. package/scripts/init/plugin-install-hint.ts +0 -47
  585. package/scripts/version/parse-json.ts +0 -13
  586. /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
  587. /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
  588. /package/scripts/{git → gh}/git-gh-command.ts +0 -0
  589. /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
  590. /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
  591. /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
  592. /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
  593. /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
  594. /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
  595. /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
  596. /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
  597. /package/scripts/{git → gh}/git-pr-error.ts +0 -0
  598. /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
  599. /package/scripts/{git → gh}/github-issue-url.ts +0 -0
  600. /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
  601. /package/scripts/{git → issue}/issue-reference.ts +0 -0
  602. /package/scripts/{git → lib}/animation-helpers.ts +0 -0
  603. /package/scripts/{git → lib}/git-animation.ts +0 -0
  604. /package/scripts/{git → notify}/git-notify.ts +0 -0
  605. /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
@@ -54,7 +54,7 @@ inside the invocation" below):
54
54
  | `--max` | how many issues one invocation may merge — a run's own filing competes for that number rather than extending it | `run:carry --merged` |
55
55
  | `--idle`, and the 8-hour whole-run bound | how long one invocation may go on looking for more | the record's `started_at` |
56
56
  | **Ten filings per invocation** | how much one invocation may add to the pool at all, on **every** filing route (`SKILL.md` → §2d) | `run:carry --filed` |
57
- | The WIP cap of 30 open issues | how large the pool may become, across invocations | `prompts/collaboration-workflow/wip-cap.md` |
57
+ | The WIP cap on open issues | how large the pool may become, across invocations | `prompts/collaboration-workflow/wip-cap.md` |
58
58
 
59
59
  One invocation may add at most ten issues to the pool and merge at most `--max` of them, after which
60
60
  the run ends and the next one waits for a person to type the keyword.
@@ -131,7 +131,7 @@ single source.
131
131
  carried in a record rather than in the conversation:
132
132
 
133
133
  ```bash
134
- pnpm josh run:carry --begin "backlogrun --max 5 --idle 30" --owner "$PPID" # alias: josh rc
134
+ pnpm josh run:carry --begin "backlogrun --max 5 --idle 30" --owner "$PPID"
135
135
  pnpm josh run:carry --json # read it back in a resumed session
136
136
  ```
137
137
 
@@ -140,7 +140,7 @@ be answered and every standing record is refused rather than resumed. A live PID
140
140
  the sandbox cannot read is held as `busy`.
141
141
 
142
142
  **Ask it before the plan, in the same turn as the first `git switch main && git pull`.** The contract
143
- is `docs/josh-commands.md` → "`josh run:carry`"; what this loop does with each answer is here:
143
+ is `docs/josh-commands-automation.md` → "`josh run:carry`"; what this loop does with each answer is here:
144
144
 
145
145
  | It answers | What the run does |
146
146
  | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -204,7 +204,7 @@ judgment starts an AI session, with the branch result and resume flags in its pr
204
204
  **Start it in the same turn as `--begin`, and stop it in the same turn as `--end`:**
205
205
 
206
206
  ```bash
207
- pnpm josh run:wake --start # alias: josh rw ; right after `run:carry --begin`
207
+ pnpm josh run:wake --start # right after `run:carry --begin`
208
208
  pnpm josh run:wake --stop # in the same turn as `run:carry --end`
209
209
  ```
210
210
 
@@ -233,7 +233,7 @@ expired or cannot be read ends it the same way. `none` — the run having finish
233
233
 
234
234
  **A person keeps control of it.** `pnpm josh run:wake --list` names the running supervisor and
235
235
  `--stop` ends it; the full contract, what it launches and why that is a constant rather than a
236
- setting are `docs/josh-commands.md` → "`josh run:wake`".
236
+ setting are `docs/josh-commands-automation.md` → "`josh run:wake`".
237
237
 
238
238
  **Every unattended role runs with the provider selected from the invoking CLI and its own profile.**
239
239
  Codex sessions use OpenAI; Claude Code sessions use Anthropic. Anthropic uses scheduler
@@ -244,7 +244,7 @@ and legacy `JOSH_LANE_*` values to the worker only. Invalid configuration, a mis
244
244
  session marker, or a missing, outdated or unauthenticated CLI refuses without fallback, promotion or
245
245
  worker retry. `run:wake --list`, `lane:list`, the review brief and each launch
246
246
  log expose the resolved provider, role, model and effort.
247
- `docs/josh-commands.md` → "`josh lane:dispatch`" and `backlogrun-child.md` → "Each child runs in a
247
+ `docs/josh-commands-automation.md` → "`josh lane:dispatch`" and `backlogrun-child.md` → "Each child runs in a
248
248
  delegated unit" are the single sources.
249
249
 
250
250
  **It relays progress from the existing report record.** The driver keeps the same `run:merge` event
@@ -267,7 +267,7 @@ run.
267
267
  **The plan is one command's output, not an assembly of several:**
268
268
 
269
269
  ```bash
270
- pnpm josh backlog:plan # alias: josh blp
270
+ pnpm josh backlog:plan
271
271
  ```
272
272
 
273
273
  **It renders the same classified pool `backlog:next` answers from**, so **the plan cannot promise an
@@ -282,9 +282,8 @@ order the run does not take**. Its four sections are:
282
282
  is distinguished from "not reached yet".
283
283
 
284
284
  **Report all four to the person, in the session language, before the first child starts.** Epic
285
- children are enumerated individually rather than summarized under their root. A `⚠` about a truncated
286
- listing is reported with them: the plan is then partial, and saying so is what keeps it from reading as
287
- complete.
285
+ children are enumerated individually rather than summarized under their root. Report a truncated-listing
286
+ `⚠` with them: the plan is then partial.
288
287
 
289
288
  ### Resolve what the plan can resolve, before starting
290
289
 
@@ -293,27 +292,28 @@ stop at a time.**
293
292
 
294
293
  - **Decide everything decidable from the issue itself.** Read the issue's body **and its comments**
295
294
  (`SKILL.md` → §2g), and where the answer is already there, record it as an Issue comment and
296
- **remove the label** — `CLAUDE.md` → "Decision autonomy" already makes that Tier A. **Read every one
297
- of them in one call** — `pnpm josh issue:read <N> <N> …`, the numbers the plan just listed under
298
- "Waiting on a person" — rather than a `gh api` pair per issue.
295
+ **remove the label** — `CLAUDE.md` → "Decision autonomy" already makes that Tier A. **Read them all in
296
+ one `pnpm josh issue:read <N> <N> …` call**, not a `gh api` pair per issue.
299
297
  - **Never measure in order to decide.** A question needing a benchmark, a profile, or a run of the
300
298
  thing itself is not settled here: it stays labelled and the plan says so.
301
- - **Label what you find.** An issue that turns out to need a person's judgement has `needs-decision`
302
- applied — the same label a parked child gets, applied the way `backlogrun-park.md` → "park and continue"
303
- applies it. **The next plan then classifies it by reading the label alone**, never by reading the
304
- body again.
299
+ - **Label what you find.** An issue needing a person's judgement gets `needs-decision`, applied as
300
+ `backlogrun-park.md` → "park and continue" does. **The next plan classifies it by the label alone**,
301
+ never the body.
305
302
  - **Order and isolate the pool in the same pass** (joshuafolkken/kit#2776), from the same
306
303
  `issue:read`: an issue that must land first (it builds what another reuses, or both edit one code
307
- path) becomes a native `blocked-by`; an issue the `wip-cap.md` → 「実行のしかた」 enumeration hits
308
- gets `run:solo`, **every other one `run:lane`**. Comment the reason; the offer commands enforce all
304
+ path) becomes a native `blocked-by`; an issue meeting all three of the `wip-cap.md` → 「実行のしかた」
305
+ conditions gets `run:solo`, **every other one `run:lane`**. Comment the reason; the offer commands enforce all
309
306
  three, answering `triage` while an issue has neither.
307
+ - **`priority:high` puts an issue first** (joshuafolkken/kit#2928; ranking: `docs/josh-commands-automation.md` →
308
+ `josh backlog:next`). Apply it only on a cited ground — a stated deadline or urgency, or a person's
309
+ written policy — commenting the ground; **never remove it**.
310
310
  - **Report the order those labels produce — `pnpm josh backlog:plan --waves`** (joshuafolkken/kit#2778),
311
311
  `backlog:next` played forward wave by wave. Report it with the plan, never an order derived by hand.
312
312
  - **Then start the loop.** Whatever is still labelled is reported as parked and left standing; the
313
313
  run does not wait on it.
314
314
 
315
- **`needs-decision`, `run:solo` and `run:lane` are the workflow labels a run may apply, and none is
316
- `auto-ok` or `needs-human-review`.** Those two stay a person's alone (this file, `SKILL.md` → §2z); a
315
+ **`needs-decision`, `run:solo`, `run:lane` and `priority:high` are the workflow labels a run may
316
+ apply, and none is `auto-ok` or `needs-human-review`.** Those two stay a person's alone (this file, `SKILL.md` → §2z); a
317
317
  run parks with `needs-decision` and a person clears it.
318
318
 
319
319
  Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the plan and the decision pass come first"
@@ -331,7 +331,7 @@ returns the verdict with the issues to start. It stays both halves' contract sou
331
331
  *means* changes here.
332
332
 
333
333
  ```bash
334
- offer=$(pnpm josh backlog:offer --started "$started" --active "$active") # alias: josh blo
334
+ offer=$(pnpm josh backlog:offer --started "$started" --active "$active")
335
335
  offer=$(pnpm josh backlog:offer --started "$started" --active "$active" --exclude 1630,1631) # after #1630, #1631 merged
336
336
  ```
337
337
 
@@ -342,7 +342,7 @@ follow, one per line.** `backlog:offer` forwards `--exclude` and `--repo` to `ba
342
342
  in `--json`. **The verdict table is "The two budgets" below; the answer-to-word mapping it applies is
343
343
  this section's table.**
344
344
 
345
- **`backlog:next`'s output contract is `docs/josh-commands.md` → "`josh backlog:next`", and four parts
345
+ **`backlog:next`'s output contract is `docs/josh-commands-automation.md` → "`josh backlog:next`", and four parts
346
346
  of it decide how the mapping is written:**
347
347
 
348
348
  1. **Standard output is one token per line, and everything else is standard error.**
@@ -398,7 +398,7 @@ records.
398
398
  blocker sits in another opted-in epic — or is an opted-in standalone issue — makes the child wait on
399
399
  time, so one `backlogrun` runs both epics in that order. A blocker outside the opted-in backlog, or one
400
400
  inside it that itself waits on a person, makes the child wait on a person instead, and a cycle across
401
- epics answers `error`. The table is `docs/josh-commands.md` → "`josh epic:next`".
401
+ epics answers `error`. The table is `docs/josh-commands-automation.md` → "`josh epic:next`".
402
402
 
403
403
  **New work is picked up without restarting anything.** The command re-derives its pool from GitHub
404
404
  labels on every ask, so an issue filed and opted in while the run is going is offered on the next
@@ -466,7 +466,7 @@ again at its full budget. Both are ISO-8601 timestamps (`date -u +%FT%TZ`), and
466
466
  `--active` is refused. `--merged` is what has merged and `--running` what is still in a lane; **both
467
467
  count against the maximum**. **No ending abandons a lane**: whatever would have ended the run answers
468
468
  `watch` while `--running` is above zero, so the lanes drain and their merges reach the report. The full
469
- contract is `docs/josh-commands.md` → "`josh backlog:budget`".
469
+ contract is `docs/josh-commands-automation.md` → "`josh backlog:budget`".
470
470
 
471
471
  **The completion report names three things the budgets make meaningful**: how many issues this run
472
472
  took, how many of them were picked up during an idle watch, and the termination reason — quoted from
@@ -48,8 +48,8 @@ Each step is a terse trigger and a pointer; the procedure is read on demand from
48
48
  that bounds the amount. `auto-ok` is a person's alone.
49
49
  4. **Report the plan before the first child** — `pnpm josh backlog:plan`, then resolve every
50
50
  `needs-decision` issue decidable from its body in one pass. In the same pass, record `blocked-by`
51
- between issues that must land in order, and apply `run:solo` where the verification-path
52
- enumeration holds, `run:lane` elsewhere. `backlogrun-steps.md` → "The plan,
51
+ between issues that must land in order, and apply `run:solo` where all three of the
52
+ `wip-cap.md` → 「実行のしかた」 conditions hold, `run:lane` elsewhere. `backlogrun-steps.md` → "The plan,
53
53
  before the first child starts" and its "Resolve what the plan can resolve, before starting".
54
54
  5. **Named issues run first, in order** — `backlogrun-steps.md` → "Named issues run first, in order":
55
55
  the supervisor's driver dispatches each as a delegated `fullrun`, one at a time, then drains the
@@ -7,8 +7,10 @@ Review results and successful pushes are never turn boundaries.
7
7
 
8
8
  0. **A lane child** (#2428): `pnpm josh main:merge`, the scoped pair, `pnpm josh ship --detach --review
9
9
  "<title> #<N>"` (`--cite <N>`), then **end the turn** on `launched`/`busy`. A stop relaunches a child
10
- whose `run:step` names `ship --log <N>`: fix, re-detach (`--review` only if no round is recorded,
11
- else step 4). `failed` → step 1.
10
+ whose prompt names `pnpm josh ship --log <N>` and (Anthropic lane, #2964) the re-detach to run after
11
+ the fix — `pnpm josh ship --detach`, `--review` only if the stopped ship carried it and stopped before
12
+ round 2, which is final (`scripts/run/run-ship-next.ts`); the supervisor skips a recorded round 1.
13
+ `failed` → step 1.
12
14
  1. Run `pnpm josh main:merge`. **Then issue `pnpm josh run:cut <N>` alone, before the scoped pair and
13
15
  the gate** — the pre-gate cut (a no-op outside a lane, joshuafolkken/kit#2177). Then run the final scoped lint/test pair and `pnpm josh run:review`: it starts
14
16
  `pnpm josh gate` in the background and prints the `/code-review` brief in one call, so the two overlap
@@ -35,8 +37,8 @@ Review results and successful pushes are never turn boundaries.
35
37
  **`pnpm josh followup` refuses the merge until the round is recorded**
36
38
  (`pnpm josh review:record --check --issue <N>`, joshuafolkken/kit#2343).
37
39
  5. **The clean path ships in one call** — with no second round due, background
38
- `pnpm josh ship "<title> #<N>" --body-file <evidence.md>`: gate → `git -y` → foreground `followup` → `run:tail`, stopping at the
39
- first failure (joshuafolkken/kit#2398). `--review` runs both rounds (#2489). **Else a due round 2
40
+ `pnpm josh ship "<title> #<N>" --body-file <evidence.md>`: PR preflight (#2946) → gate → `git -y` →
41
+ `followup` → `run:tail`, stopping at the first failure (#2398). `--review` runs both rounds (#2489). **Else a due round 2
40
42
  does not fit `ship`**: the PR opens between the rounds — background `pnpm josh git -y "<title> #<N>"`, round 2 beside CI, then
41
43
  `pnpm josh followup`.
42
44
 
@@ -17,13 +17,13 @@ pnpm josh delegate --list # the enumeration, and what was rejected and why
17
17
  **how a wrong result is caught** cheaply in the parent tier, not merely by being unlikely to fail.
18
18
  `pnpm josh delegate --list` names both delegatable and rejected steps; a rejected step either has no
19
19
  verifier or lets a wrong result propagate too far. The command distinguishes `kept deliberately`
20
- from `kept by default`. `docs/josh-commands.md` → "`josh delegate`" carries the full enumeration.
20
+ from `kept by default`. `docs/josh-commands-automation.md` → "`josh delegate`" carries the full enumeration.
21
21
 
22
22
  **The mechanism is not the unit.** `pnpm josh delegate` covers a run step, a file-disjoint Step 0
23
23
  implementation unit (`pnpm josh fanout`), and `epic-child` — an epic's child and a named issue of a
24
24
  `backlogrun` alike. Do not add a second batch-child mechanism. Read `backlogrun-child.md` → "Each child
25
25
  runs in a delegated unit" at child dispatch; `backlogrun-steps.md` → "Named issues run first, in order"
26
- applies to named issues. `docs/josh-commands.md` → "`josh fanout`" carries file-disjoint dispatch.
26
+ applies to named issues. `docs/josh-commands-automation.md` → "`josh fanout`" carries file-disjoint dispatch.
27
27
 
28
28
  **`followup-filing` delegates the late review-finding filing chain** with the parent's finding text;
29
29
  the parent verifies the new Issue using `pnpm josh issue:state <new>`. For `epic-child`, the parent
@@ -41,7 +41,7 @@ a temporary probe script and return its output.
41
41
  delegate the unread investigation. Brief the unit on what was already read; do not re-read it there.
42
42
  **A delegation resets the counter rather than spending it**; `pnpm josh investigation:guard` counts
43
43
  unedited files and refuses the threshold read. `pnpm josh delegate --list` prints the threshold.
44
- `docs/josh-commands.md` → "`josh investigation:guard`" carries the command's counting details.
44
+ `docs/josh-commands-automation.md` → "`josh investigation:guard`" carries the command's counting details.
45
45
 
46
46
  **The main line does not idle while the unit reads:** read files this run will edit, then verify the
47
47
  unit's cited lines. Independent investigations launch together; a brief that needs another unit's
@@ -84,7 +84,7 @@ pnpm josh notify --task-type failure --issue-url "<issue-url>" --body "<the reas
84
84
  **The matching itself is unchanged, and so is the reason it is mechanical.** The instruction the mechanical read replaced was skipped in two runs out of three on the day it was measured, and one of those two could not have succeeded by eye at all: `AI_COPY_DIRECTORIES` holds directories, so a distributed path such as `.claude/skills/workflow-commands/backlogrun.md` appears in no list textually.
85
85
 
86
86
  ```bash
87
- pnpm josh sync:scope # managed | clean, naming which list claimed each path; alias: josh sys
87
+ pnpm josh sync:scope # managed | clean, naming which list claimed each path
88
88
  ```
89
89
 
90
90
  - **There is no flag to pass and nothing to approve.** `--managed-config-ignore-reason` is gone with the stop it existed to get past.
@@ -99,7 +99,7 @@ pnpm josh sync:scope # managed | clean, naming which list claimed each path;
99
99
  **The answer: `pnpm josh release:scope`.**
100
100
 
101
101
  ```bash
102
- pnpm josh release:scope # → required | skip | unknown ; alias: josh res
102
+ pnpm josh release:scope # → required | skip | unknown
103
103
  pnpm josh release:scope --json # the same answer as one JSON object
104
104
  ```
105
105
 
@@ -115,4 +115,4 @@ pnpm josh release:scope --json # the same answer as one JSON object
115
115
 
116
116
  **`pnpm josh release --dry-run` was checked first and does not answer this.** It refuses off the default branch and on a dirty working tree, and it counts against `HEAD` rather than `origin/<default>` — and every position above is a feature branch or a lane, which is exactly where it throws. So `release:scope` adds **no counting of its own**: it reads `git_followup_pending.read_pending`, the same fetch-then-count `pnpm josh followup` already uses for the Telegram line, and the two therefore cannot disagree.
117
117
 
118
- **This section is the single source.** `fullrun.md`, `backlogrun.md` and `backlogrun.md` point here rather than restating it, and `docs/josh-commands.md` → "`josh release:scope`" documents the command itself.
118
+ **This section is the single source.** `fullrun.md`, `backlogrun.md` and `backlogrun.md` point here rather than restating it, and `docs/josh-commands-automation.md` → "`josh release:scope`" documents the command itself.
@@ -19,7 +19,10 @@ bullets. Use the file option whenever it contains a command or path.
19
19
 
20
20
  It waits for required CI, checks CodeRabbit and top-level AI review comments, sends the completion
21
21
  Telegram, merges by default, posts the Issue report, closes completed epics, removes `in-progress`,
22
- and releases the hold. Only `--no-merge` stops the merge; `--merge` is a deprecated no-op. Keep the
22
+ and releases the hold. Only `--no-merge` stops the merge; `--merge` is a deprecated no-op. **A pull
23
+ request already merged by hand** (a `prrun` stop, joshuafolkken/kit#3023) skips the CI wait, the AI
24
+ review scan and the merge and runs only the post-merge tail; a completion report already on the Issue
25
+ is not posted or notified twice, so re-running is safe. Keep the
23
26
  default Issue target. Ignore a finding only after verifying it is inapplicable; rate-limit text is not
24
27
  a finding.
25
28
 
@@ -174,8 +177,9 @@ pnpm josh ms
174
177
  Review findings before merging. If blockers are found, it sends a `confirmation` Telegram and exits
175
178
  non-zero — fix the findings and re-run. **Green CI is not authorization to merge while AI review
176
179
  findings are open.** (SonarCloud findings are not scanned by `followup`; the `sonar-qube.yml` CI
177
- workflow runs the scan with `sonar.qualitygate.wait=true`, so a red Quality Gate fails the required
178
- `SonarQube` check, which `followup` waits on.)
180
+ workflow runs the scan with `sonar.qualitygate.wait=true` and then `josh sonar:new-code`, so a red
181
+ Quality Gate or a single new Sonar issue or duplicated block fails the required `SonarQube` check,
182
+ which `followup` waits on.)
179
183
  - **CodeRabbit rate-limit is not a finding.** If the only CodeRabbit comment is a rate-limit warning
180
184
  (`rate limited by coderabbit.ai` or `Rate limit exceeded`) and there is no substantive review, treat
181
185
  it as "no findings" and proceed. Same if CodeRabbit produced no comment on the latest commit.
@@ -26,7 +26,7 @@ in outline: refactor → `pnpm josh main:merge` → **a dispatched lane child ha
26
26
  joshuafolkken/kit#2428) → otherwise `pnpm josh run:cut <N>` (the pre-gate cut, before the gate; a no-op
27
27
  outside a lane) → start `pnpm josh gate` and a subagent `/code-review`
28
28
  with the brief `pnpm josh review:brief` prints on `git diff main`, join the gate before the commit,
29
- iterate to no high/medium findings, at most two reviews → **the clean path folds the ship region into
29
+ iterate to no high/medium findings, within the round cap (`prompts/review.md`) → **the clean path folds the ship region into
30
30
  one call**, `pnpm josh ship "<title> #<N>"` (gate → commit/push/PR → the CI-wait `followup` → the
31
31
  `run:tail` report bookkeeping, stopping at the first failed step; joshuafolkken/kit#2398), with any
32
32
  branch-2 filing (`pnpm josh issue:file`, which runs `epic:bundle` itself) run before it → **when a second round is due `ship` does not
@@ -44,7 +44,8 @@ implementation summary via `--notify-message` in the session language, leading w
44
44
  plain-language lines: `"Implemented <title>\nCause: ...\nFix: ...\nResult: ...\n\nDetails:\n-
45
45
  <change1>\n- <change2>"`. **`pnpm josh followup` waits for CI, verifies AI review findings, sends the
46
46
  completion notification, then merges; if blockers are found it exits non-zero — fix and re-run.**
47
- **マージ後に `pnpm josh ms` を実行する。** Codex レーンでは省略し、親の `run:merge` が主チェックアウトで同期する。Claude は従来どおり。
47
+ **Run `pnpm josh ms` after the merge.** A Codex lane skips it — the parent's `run:merge` syncs the
48
+ primary checkout; a Claude run keeps it.
48
49
 
49
50
  ## The `fullrun new` step list
50
51
 
@@ -21,7 +21,7 @@ single sources). Step 2 — the `in-progress` label — stays its own call, appl
21
21
  call reports `hold`.
22
22
 
23
23
  1. **Claim the working tree — first, before anything else.** For `fullrun #N`, first run the folded
24
- `pnpm josh run:entry <N>` above; it calls `run:hold` as its first step. For `fullrun new`, call
24
+ `pnpm josh run:entry <N>` above (no `--to` is `fullrun`, §2k); it calls `run:hold` as its first step. For `fullrun new`, call
25
25
  bare `pnpm josh run:hold`, ahead of the title and filing. `hold` continues; `busy` / `unknown` stop
26
26
  with a `confirmation` Telegram carrying stderr.
27
27
  `working-tree-hold.md` is the single source; a cross-repository target resolves its checkout from
@@ -63,7 +63,8 @@ call reports `hold`.
63
63
  boundary — immediately after `pnpm josh main:merge`, before the gate — it takes the cut with
64
64
  `pnpm josh run:cut <N>` (the ordered step in `chain-rule.md`), and it records any park on the Issue before the stop notify.
65
65
  `pre-gate-cut.md` is the single source of both.
66
- - **`resume: halfrun`** adopted a stopped `halfrun` (#2796): gate in full; `working-tree-hold.md`.
66
+ - **`resume: halfrun`** adopted a stopped `halfrun` (#2796): gate in full; `resume: prrun-*` a stopped
67
+ `prrun` (#3023); `working-tree-hold.md`.
67
68
 
68
69
  ## The stop branches
69
70
 
@@ -4,51 +4,48 @@ When this run files a new Issue, file it with `pnpm josh issue:file`, which lint
4
4
 
5
5
  `halfrun` sits between `kickoff` (plan only) and `fullrun` (full execution with auto-merge). It
6
6
  implements the change and runs the full verification gate, then **stops before commit** — nothing is
7
- committed, pushed, or opened as a PR — so the user manually verifies the change (typically by exercising
8
- the UI in a browser) against the working tree. Use `halfrun` when the change has UI/UX implications or
9
- anything else that requires human eyes before shipping.
7
+ committed, pushed, or opened as a PR — so a person verifies the working tree by hand. Use it when a change needs human eyes before shipping.
10
8
 
11
- **This file is the manifest** (joshuafolkken/kit#2189): the ordered steps as terse triggers and
12
- pointers, the detail read on demand from the file each pointer names.
9
+ **This file is the manifest** (joshuafolkken/kit#2189): terse ordered steps, each pointing at the file
10
+ that holds its detail.
13
11
 
14
12
  ## The ordered entry sequence
15
13
 
16
- 1. **Claim the working tree first** — `pnpm josh run:hold <N>` (bare for `halfrun new`), ahead of the
17
- title and a `new` entry's filing; `busy` / `unknown` stop with a `confirmation` Telegram. **The stop
18
- before commit keeps the hold** (the uncommitted work is what a second run would trample); a stop on a
14
+ 1. **Claim the working tree first** — `pnpm josh run:entry <N> --to halfrun` (bare `pnpm josh
15
+ run:hold` for `new`), ahead of the title and a `new` filing; it folds steps 3 and 5 and starts
16
+ at its stage line's `start:` (`SKILL.md` → §2k). `busy` / `unknown` stop with a `confirmation` Telegram. **The stop
17
+ before commit keeps the hold** (a second run would trample the uncommitted work); a stop on a
19
18
  split, prerequisite or third-party target releases it. `working-tree-hold.md` is the single source; a
20
19
  cross-repository target resolves its checkout from `pnpm josh doctor` first (`target-repository.md`).
21
20
  2. **Apply `in-progress` the moment `run:hold` answered `hold`** — the stop before commit keeps it on;
22
21
  a stop that leaves the tree clean removes it in the same turn as `pnpm josh run:release` (`gh api -X
23
22
  DELETE repos/{owner}/{repo}/issues/<N>/labels/in-progress 2>/dev/null || true`).
24
- 3. **Ask the session boundary in the same turn as the hold** — `pnpm josh cost --cut`, exactly as
25
- `fullrun`; `over` stops with a `confirmation` Telegram and the resume command (`halfrun #<N>` /
23
+ 3. **Ask the session boundary** — `pnpm josh cost --cut` (folded into `run:entry`); `over` stops with a `confirmation` Telegram and the resume command (`halfrun #<N>` /
26
24
  `halfrun new`). **Skip it when dispatched by a batch.** `backlogrun-progress.md` → "The hand-off" is
27
25
  the single source of the check and the shared 135,000 threshold.
28
26
  4. **Start the progress watcher once the hold is claimed** — `pnpm josh run:progress --wait` in the
29
27
  background, `--mark` in the same turn as every real report; the stop before commit ends the watcher
30
28
  itself (`backlogrun-progress.md` → "Progress while the run is quiet").
31
- 5. **Gather the mechanical reads — `pnpm josh run:prep <N>`** (`issue:read`'s body/comments — `SKILL.md`
32
- → §2g → `issue-comments.md`; `issue:state`'s `human_review`; `latest:scope`), then `pnpm josh
33
- run:next <N>`.
29
+ 5. **The mechanical reads** — `run:entry` folds `run:prep` (body/comments — `SKILL.md` → §2g;
30
+ `human_review`; `latest:scope`); a `new` entry runs `pnpm josh run:prep <N>` once filed.
34
31
 
35
32
  ## The step list
36
33
 
37
34
  `halfrun #<N>`: add `in-progress` → read Issue #N and its comments → **normalize the title** (same as
38
35
  `fullrun`) → post the agreed plan only if the body is blank → `git switch main && git pull`, then `pnpm
39
- josh latest:scope` and update dependencies only on `required` (`latest-gate.md`; load the
40
- `dependency-update` skill on `required`) → implement → run the **full verification gate** (refactor →
36
+ josh latest:scope` and update dependencies only on `required` (`latest-gate.md`; the
37
+ `dependency-update` skill) → implement → run the **full verification gate** (refactor →
41
38
  start `pnpm josh gate` beside a subagent `/code-review` with the brief `pnpm josh review:brief` prints,
42
- join the gate before the stop, iterate to no high/medium findings, at most two reviews → `pnpm josh
39
+ join the gate before the stop, iterate to no high/medium findings, within the round cap (`prompts/review.md`) → `pnpm josh
43
40
  test:e2e`, run by **you**, because `halfrun` opens no pull request and there is no CI E2E job; a printed
44
41
  skip is the answer where the project has no suite) → **mark the stop: `pnpm josh run:hold <N>
45
42
  --halfrun-stop`** (the record `fullrun #<N>` adopts; `new` passes the filed number) → send a
46
43
  `confirmation` Telegram with the resume commands in the body → **stop**. Plan comments are in the session language. The `confirmation` Telegram
47
- body MUST include the exact resume commands — **`fullrun #<N>` first**, since that is how a verified
44
+ body MUST include the exact resume commands — **the `Next:` line first**, since that is how a verified
48
45
  `halfrun` ships (joshuafolkken/kit#2796): its `run:entry` adopts this stop's marked hold and resumes at
49
46
  the gate. The direct commands follow for shipping without an agent:
50
47
  `pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'halfrun ready for manual
51
- verification\nNext: fullrun #<N>\nWithout an agent: pnpm josh git -y "<title> #<N>" && pnpm josh
48
+ verification\nNext: prrun #<N> | fullrun #<N>\nWithout an agent: pnpm josh git -y "<title> #<N>" && pnpm josh
52
49
  followup "<title> #<N>" --notify-message "Implemented <title>\\nCause: ...\\nFix: ...\\nResult:
53
50
  ...\\n\\nDetails:\\n- <change1>"'`. The stop report names the same two, in the same order.
54
51
  **Invoking `halfrun` is _not_ authorization to commit, push, or merge** — do not run `pnpm josh git -y` or `pnpm josh followup` yourself. If the user comes
@@ -72,7 +69,7 @@ Telegram and **stop**.
72
69
  - **A split** — the assessment (`split-assessment.md` → "The question") finds two or more
73
70
  separately-mergeable deliverables over one gate: file the children (each `route:split`) and the epic,
74
71
  then **STOP** with "Please run `backlogrun #<E> --only` to execute this epic." Typing `halfrun`
75
- authorized implementing **one** Issue and stopping for manual verification, never a batch.
72
+ authorized **one** Issue, never a batch.
76
73
  - **A prerequisite** — file it (`route:tier-a`), stash, record the dependency, and **STOP**;
77
74
  `prerequisite.md` is the single source of the filing, the `-u` stash and the epic:bundle branch.
78
75
  - **An observation** — file it without asking and carry on; `SKILL.md` → §2i.
@@ -12,7 +12,7 @@ delegated unit executing `fullrun`'s procedure, and the hook keys its once-per-r
12
12
  same turn as whatever else the run already needs:
13
13
 
14
14
  ```bash
15
- pnpm josh issue:read <N> [<N> ...] # body and comments, one call per batch; alias: josh ird
15
+ pnpm josh issue:read <N> [<N> ...] # body and comments, one call per batch
16
16
  gh api repos/{owner}/{repo}/issues/<N>/comments --jq '.[] | {user: .user.login, created_at, body}'
17
17
  ```
18
18
 
@@ -66,7 +66,7 @@ procedure and not two. **Parking it is not the place**: `needs-decision` means "
66
66
  nobody has given", and here the answer exists.
67
67
 
68
68
  **The exit is the `already-done` label.** It is `needs-decision`'s counterpart: `epic:next`,
69
- `backlog:next` and `auto-ok:next` all stop offering the Issue (`scripts/git/issue-labels.ts` →
69
+ `backlog:next` and `auto-ok:next` all stop offering the Issue (`scripts/issue/issue-labels.ts` →
70
70
  `NOT_DIRECTLY_RUNNABLE_LABELS`, `epic-classify.ts` → `human`), and `epic:busy` stops counting it as
71
71
  holding a lane. **Only a person removes it, by closing the Issue.**
72
72
 
@@ -1,20 +1,20 @@
1
- # 未着手 Issue への追加要件の統合
1
+ # Folding added requirements into an unstarted Issue
2
2
 
3
- ## 候補の読み取り
3
+ ## Reading the candidates
4
4
 
5
- 起票予定の目的・要件・受け入れ条件を含む全文を `pnpm josh issue:scout "<title>" --body-file <draft.md>` に渡す。明示的に参照した `#N` は見出しが似ていなくても候補になる。`Duplicates: incomplete` は読み取りまたは探索の不足であり、候補なしという結論ではない。
5
+ Pass the whole draft — purpose, requirements and acceptance criteria — to `pnpm josh issue:scout "<title>" --body-file <draft.md>`. An explicitly referenced `#N` is a candidate even when its title looks unrelated. `Duplicates: incomplete` means the read or the search fell short; it is not a conclusion that no candidate exists.
6
6
 
7
- 候補の本文とコメントを `pnpm josh issue:read <N>` で全て読み、状態とラベルを `pnpm josh issue:state <N>` で読む。紐づく PR と依存・実行順も調べる。本文と後のコメントが矛盾した場合は後のコメントを採る。読み取り失敗や打ち切りがあれば統合可否は未確定とする。
7
+ Read each candidate's body and every comment with `pnpm josh issue:read <N>`, and its state and labels with `pnpm josh issue:state <N>`. Check the linked PRs and the dependencies and run order too. When the body and a later comment disagree, the later comment wins. A failed or truncated read leaves the fold decision undetermined.
8
8
 
9
- ## 判定
9
+ ## Deciding
10
10
 
11
- 下書きの各受け入れ条件を既存 Issue と照合する。完全な重複は起票も編集もしない。別の成果物は従来の起票経路を使う。固有の追加要件を統合できるのは、既存 Issue が open かつ未着手で PR がなく、依存と実行順に衝突がなく、合計の規模が `split-assessment.md` → "The question" の一回の検証に収まる場合に限る。状態または判断材料が不明なら統合しない。
11
+ Match each acceptance criterion of the draft against the existing Issue. A complete duplicate is neither filed nor edited. A separate deliverable takes the ordinary filing path. Added requirements of its own may be folded in only when the existing Issue is open and unstarted with no PR, its dependencies and run order do not conflict, and the combined size fits the one verification pass of `split-assessment.md` → "The question". When the state or any input to the decision is unknown, do not fold.
12
12
 
13
- 判定記録の JSON を作り、`pnpm josh issue:fold-existing <assessment.json> --json` を実行する。`content` は `duplicate` / `compatible` / `separate` / `unknown`、`size_verdict` は `single` / `split` とする。ほかに `is_open`、`is_unstarted`、`has_pull_request`、`has_complete_read`、`has_dependency_conflict`、`is_separable`、`existing_body`、`draft_body`、`verification` を記録する。不明な事実は省略し、`inspect` を得る。判定記録は読んだ証跡であり、読み取りそのものの代わりにはならない。
13
+ Write the assessment as JSON and run `pnpm josh issue:fold-existing <assessment.json> --json`. `content` is `duplicate` / `compatible` / `separate` / `unknown`, and `size_verdict` is `single` / `split`. Also record `is_open`, `is_unstarted`, `has_pull_request`, `has_complete_read`, `has_dependency_conflict`, `is_separable`, `existing_body`, `draft_body` and `verification`. Omit a fact you do not know, and the answer is `inspect`. The assessment is evidence of the reading, never a substitute for it.
14
14
 
15
- ## 追記と再読
15
+ ## Appending and re-reading
16
16
 
17
- `fold` の場合、追記案の `body` は元の本文を保持し、固有の追加要件と検証方法を末尾に加える。書き込み直前に本文とコメントが判定時から変わっていないことを再確認する。変わっていれば再判定する。
17
+ On `fold`, the proposed `body` keeps the original body and appends the added requirements and how to verify them. Immediately before writing, confirm the body and comments have not changed since the assessment; if they have, assess again.
18
18
 
19
19
  ```bash
20
20
  pnpm josh issue:fold-existing assessment.json --json > result.json
@@ -24,4 +24,4 @@ gh api -X PATCH repos/{owner}/{repo}/issues/<N> --input patch.json
24
24
  pnpm josh issue:read <N>
25
25
  ```
26
26
 
27
- 再読して、元の要件・コメント中の判断記録・追加要件・検証方法が残ることを確認する。書き込みまたは再読が失敗した場合、統合は完了していない。統合時は新しい Issue を作らない。`separate` は従来の起票経路へ戻り、`inspect` は不足した情報を読み直す。
27
+ Re-read it and confirm the original requirements, the decisions recorded in comments, the added requirements and the verification all remain. A failed write or re-read means the fold is not complete. A fold never creates a new Issue. `separate` returns to the ordinary filing path, and `inspect` re-reads the missing information.
@@ -41,4 +41,4 @@ pnpm josh issue:file "<title>" --body-file <complete-draft.md> --depth <n> --dis
41
41
  - **The split path files each child through the same command.** The epic is created with
42
42
  `pnpm josh epic` over children that were scanned.
43
43
 
44
- Full behavior: `docs/josh-commands.md` → "`josh issue:file`" and "`josh issue:scout`".
44
+ Full behavior: `docs/josh-commands-automation.md` → "`josh issue:file`" and "`josh issue:scout`".
@@ -1,13 +1,18 @@
1
1
  # `kickoff` — Planning phase only (plan → Issue → Telegram notify → stop)
2
2
 
3
- - `kickoff #<N>`: Read existing Issue #N **and every comment on it** — `pnpm josh issue:read <N>`; a
3
+ - `kickoff #<N>`: **First `pnpm josh run:entry <N> --to kickoff`** (`SKILL.md` → §2k) — it claims
4
+ nothing and prints the stage line alone; `start: reached` means the Issue is already planned or further
5
+ up the ladder, so report the stage line and **stop**. Otherwise read existing Issue #N **and every comment on it** — `pnpm josh issue:read <N>`; a
4
6
  decision recorded after the body was written lives only in a comment, and the later text is the
5
7
  agreement in force (`SKILL.md` → §2g, which also carries the two answers that stop the run instead) →
6
8
  **normalize the title**: if the title is not in English or can be phrased more clearly, derive a
7
9
  better English title and run `gh api -X PATCH repos/{owner}/{repo}/issues/<N> -f title="<title>"` →
8
10
  analyze requirements → **scope assessment per `split-assessment.md`** → post the plan to the Issue (if
9
11
  body is blank, `gh api -X PATCH repos/{owner}/{repo}/issues/<N> -f body="<plan>"`; otherwise
10
- `pnpm josh issue:comment <N> --body-file <path>`) → send Telegram notification → **stop**
12
+ `pnpm josh issue:comment <N> --body-file <path>`) → **apply the `run:planned` label** — the mark the next
13
+ command's `run:entry` reads to start at the implementation, provisioned by `josh sync` (`gh api
14
+ repos/{owner}/{repo}/issues/<N>/labels -f 'labels[]=run:planned' --silent`) → send Telegram
15
+ notification, its last line `Next: halfrun #<N> | prrun #<N> | fullrun #<N>` → **stop**
11
16
  (do not implement). **When the assessment finds two or more separately-mergeable deliverables**, take
12
17
  the split path instead of posting a plan: create the children as in `kickoff new`, then either
13
18
  **promote `#N`** with `pnpm josh epic --promote <N> <N1> <N2> ... [--ordered] [--rationale-file
@@ -37,7 +42,7 @@ than filing.
37
42
  **Read `split-assessment.md` → "The question" first.** It is the split decision every entry point
38
43
  applies, including this one — `kickoff #N` assesses scope exactly as `kickoff new` does. Its default is
39
44
  not to split: separability and a scope that clearly exceeds what one verification gate can confirm in
40
- one pass (the guide is about 10 changed files and about 400 changed lines) have to hold **together**.
45
+ one pass (the size guide is stated there) have to hold **together**.
41
46
  The rest of `split-assessment.md` — what each entry does with the answer — is read on demand when a
42
47
  split is found.
43
48
 
@@ -80,4 +85,4 @@ split is found.
80
85
  creation call. (3) Send Telegram notification listing all created issues. (4) Present the command
81
86
  `backlogrun #<E> --only`. (5) **Stop** — do not implement.
82
87
 
83
- `pnpm josh issue:file` lints the body and applies the classification labels it declares, following `prompts/collaboration-workflow/issue-template.md` for classification (`docs/josh-commands.md` → `josh issue:file`).
88
+ `pnpm josh issue:file` lints the body and applies the classification labels it declares, following `prompts/collaboration-workflow/issue-template.md` for classification (`docs/josh-commands-automation.md` → `josh issue:file`).
@@ -82,4 +82,4 @@ found once — fix it forward before parking the issue for it.
82
82
 
83
83
  This file is the single source of the rule. `fullrun.md`, `halfrun.md`, `backlogrun.md` and `backlogrun.md`
84
84
  each name `pnpm josh latest:scope` at the point their procedure reaches it and route here for
85
- everything else; `docs/josh-commands.md` documents the command itself.
85
+ everything else; `docs/josh-commands-automation.md` documents the command itself.
@@ -57,7 +57,7 @@ run's *start*; this withholds its *end*. So a `needs-human-review` issue is stil
57
57
  the artifact a person is meant to look at would never be produced — and a child stopped by it **goes on
58
58
  holding its repository**, because the uncommitted work is still in the checkout; read as parked there,
59
59
  the next child would start `git switch main && git pull` on top of it. The code encodes both halves by
60
- leaving the label out of two sets: `scripts/git/issue-labels.ts` keeps it out of
60
+ leaving the label out of two sets: `scripts/issue/issue-labels.ts` keeps it out of
61
61
  `NOT_DIRECTLY_RUNNABLE_LABELS` and `scripts/epic/epic-busy.ts` keeps it out of the parked set.
62
62
 
63
63
  Each entry point's own branch stays in its own file — `fullrun.md`, `halfrun.md`,