@joshuafolkken/kit 1.1514.0 → 1.1784.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 (858) hide show
  1. package/.claude/agents/investigator.md +1 -1
  2. package/.claude/settings.json +5 -5
  3. package/.claude/skills/epic-commands/SKILL.md +26 -65
  4. package/.claude/skills/epic-commands/epic-bundle.md +3 -1
  5. package/.claude/skills/workflow-commands/SKILL.md +5 -5
  6. package/.claude/skills/workflow-commands/background-commands.md +5 -5
  7. package/.claude/skills/workflow-commands/backlogrun-child.md +10 -8
  8. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
  9. package/.claude/skills/workflow-commands/backlogrun-lanes.md +17 -13
  10. package/.claude/skills/workflow-commands/backlogrun-park.md +14 -23
  11. package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
  12. package/.claude/skills/workflow-commands/backlogrun-recovery.md +5 -5
  13. package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
  14. package/.claude/skills/workflow-commands/backlogrun.md +1 -1
  15. package/.claude/skills/workflow-commands/chain-rule.md +13 -7
  16. package/.claude/skills/workflow-commands/delegation.md +6 -5
  17. package/.claude/skills/workflow-commands/entry-sequence.md +9 -9
  18. package/.claude/skills/workflow-commands/followup.md +9 -31
  19. package/.claude/skills/workflow-commands/fullrun-steps.md +36 -45
  20. package/.claude/skills/workflow-commands/fullrun.md +2 -2
  21. package/.claude/skills/workflow-commands/halfrun.md +17 -25
  22. package/.claude/skills/workflow-commands/issue-comments.md +16 -12
  23. package/.claude/skills/workflow-commands/issue-scout.md +2 -2
  24. package/.claude/skills/workflow-commands/kickoff.md +24 -23
  25. package/.claude/skills/workflow-commands/latest-gate.md +7 -12
  26. package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
  27. package/.claude/skills/workflow-commands/observation-filing.md +4 -36
  28. package/.claude/skills/workflow-commands/observation-ledger.md +1 -1
  29. package/.claude/skills/workflow-commands/pre-gate-cut.md +13 -30
  30. package/.claude/skills/workflow-commands/prerequisite.md +10 -16
  31. package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
  32. package/.claude/skills/workflow-commands/prrun.md +3 -7
  33. package/.claude/skills/workflow-commands/retrospective.md +1 -1
  34. package/.claude/skills/workflow-commands/split-assessment.md +13 -1
  35. package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
  36. package/.codex/hooks.json +5 -5
  37. package/.github/actions/setup-node/action.yml +9 -0
  38. package/.github/actions/setup-pnpm/action.yml +1 -1
  39. package/.github/dependabot.yml +16 -0
  40. package/.github/release.yml +0 -2
  41. package/.github/workflows/ci.yml +120 -10
  42. package/.github/workflows/publish.yml +8 -1
  43. package/.github/workflows/sonar-qube.yml +1 -0
  44. package/.prettierignore +2 -0
  45. package/.vscode/tasks.json +1 -2
  46. package/CLAUDE.md +3 -7
  47. package/README.md +4 -2
  48. package/SECURITY.md +1 -1
  49. package/dist/CLAUDE.md +3 -7
  50. package/dist/commands/document-read-cli.js +882 -0
  51. package/dist/commands/{document-section-cli.js → document-section-main.js} +79 -37
  52. package/dist/commands/read-set-cli.js +1867 -0
  53. package/dist/commands/run-prep-main.js +21653 -0
  54. package/dist/commands/run-step-cli.js +23880 -0
  55. package/dist/config-merge/index.js +5 -1
  56. package/dist/hooks/audit-provision.js +20 -35
  57. package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
  58. package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
  59. package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
  60. package/dist/hooks/{chunk-TNUMY6NL.js → chunk-PT5R6UJD.js} +4193 -1900
  61. package/dist/hooks/chunk-TUIFS5E7.js +72 -0
  62. package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
  63. package/dist/hooks/{chunk-APUO6U4J.js → chunk-WR2KQAYZ.js} +1843 -440
  64. package/dist/hooks/{chunk-O6GDRNJB.js → chunk-XGBNSWEI.js} +248 -46
  65. package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
  66. package/dist/hooks/codex-hook-adapter.js +10 -22
  67. package/dist/hooks/format-edited.js +5 -6
  68. package/dist/hooks/inputs.json +443 -317
  69. package/dist/hooks/pretool-guard.js +7 -25
  70. package/dist/hooks/session-lang.js +44 -51
  71. package/dist/hooks/stop-guard.js +7716 -2187
  72. package/dist/josh.js +6002 -3583
  73. package/dist/self-sync-guard/index.js +74 -10
  74. package/dist/version/index.js +115 -406
  75. package/eslint/base.js +1 -1
  76. package/lefthook/base.yml +3 -1
  77. package/package.json +10 -48
  78. package/pnpm-workspace.yaml +4 -2
  79. package/prompts/coding-standards.md +1 -1
  80. package/prompts/collaboration-workflow/file-edits.md +1 -7
  81. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  82. package/prompts/collaboration-workflow/issue-template.md +33 -16
  83. package/prompts/collaboration-workflow/lane-instructions.md +1 -2
  84. package/prompts/collaboration-workflow/measurement.md +37 -0
  85. package/prompts/collaboration-workflow/operating-rules.md +4 -6
  86. package/prompts/collaboration-workflow/output-bounds.md +2 -7
  87. package/prompts/collaboration-workflow/plan-comment.md +3 -42
  88. package/prompts/collaboration-workflow/principles.md +5 -0
  89. package/prompts/collaboration-workflow/report-format.md +31 -60
  90. package/prompts/collaboration-workflow/residency.md +2 -2
  91. package/prompts/collaboration-workflow/shell-body.md +6 -16
  92. package/prompts/collaboration-workflow/turn-batching.md +0 -2
  93. package/prompts/collaboration-workflow/upstream-interrupt.md +14 -4
  94. package/prompts/collaboration-workflow/wip-cap.md +1 -1
  95. package/prompts/collaboration-workflow.md +3 -7
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +1 -2
  98. package/prompts/review.md +41 -21
  99. package/prompts/testing-guide.md +8 -43
  100. package/scripts/agent/agent-event.ts +15 -15
  101. package/scripts/agent/agent-exit-record.ts +13 -1
  102. package/scripts/agent/api-auth.ts +41 -0
  103. package/scripts/agent/api-outage.ts +1 -1
  104. package/scripts/auto-ok/auto-ok-cli.ts +14 -16
  105. package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
  106. package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
  107. package/scripts/auto-ok/auto-ok-judge.ts +13 -2
  108. package/scripts/auto-ok/auto-ok-main.ts +17 -0
  109. package/scripts/backlog/backlog-arrival.ts +14 -3
  110. package/scripts/backlog/backlog-budget-cli.ts +7 -33
  111. package/scripts/backlog/backlog-budget-main.ts +16 -0
  112. package/scripts/backlog/backlog-budget.ts +2 -3
  113. package/scripts/backlog/backlog-defect-priority.ts +4 -3
  114. package/scripts/backlog/backlog-drive-adopt.ts +67 -0
  115. package/scripts/backlog/backlog-drive-args.ts +4 -5
  116. package/scripts/backlog/backlog-drive-cli.ts +113 -28
  117. package/scripts/backlog/backlog-drive-hold.ts +162 -0
  118. package/scripts/backlog/backlog-drive-idle.ts +151 -0
  119. package/scripts/backlog/backlog-drive-judge.ts +25 -0
  120. package/scripts/backlog/backlog-drive-memory.ts +126 -0
  121. package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
  122. package/scripts/backlog/backlog-drive-named.ts +53 -6
  123. package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
  124. package/scripts/backlog/backlog-drive-paused.ts +169 -0
  125. package/scripts/backlog/backlog-drive-restore.ts +30 -7
  126. package/scripts/backlog/backlog-drive-seats.ts +18 -8
  127. package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
  128. package/scripts/backlog/backlog-drive.ts +79 -75
  129. package/scripts/backlog/backlog-next-main.ts +16 -0
  130. package/scripts/backlog/backlog-next-shared.ts +73 -0
  131. package/scripts/backlog/backlog-next.ts +48 -16
  132. package/scripts/backlog/backlog-occupied.ts +52 -39
  133. package/scripts/backlog/backlog-offer-cli.ts +6 -21
  134. package/scripts/backlog/backlog-offer-exclude.ts +15 -0
  135. package/scripts/backlog/backlog-offer-main.ts +12 -0
  136. package/scripts/backlog/backlog-offer.ts +36 -3
  137. package/scripts/backlog/backlog-overlap.ts +22 -4
  138. package/scripts/backlog/backlog-plan-read.ts +6 -2
  139. package/scripts/backlog/backlog-plan.ts +18 -4
  140. package/scripts/backlog/backlog-pool.ts +10 -10
  141. package/scripts/backlog/backlog-rank.ts +10 -2
  142. package/scripts/backlog/backlog-ready.ts +112 -30
  143. package/scripts/backlog/backlog-stalled-detect.ts +109 -36
  144. package/scripts/backlog/backlog-stalled.ts +52 -16
  145. package/scripts/backlog/backlog-wait-cause.ts +86 -0
  146. package/scripts/backlog/backlog-waves.ts +39 -13
  147. package/scripts/backlog/backlogrun-args.ts +19 -7
  148. package/scripts/backlog/backlogrun-cli.ts +19 -5
  149. package/scripts/backlog/backlogrun-launch.ts +6 -0
  150. package/scripts/backlog/backlogrun-restart.ts +97 -0
  151. package/scripts/backlog/backlogrun-stop.ts +79 -7
  152. package/scripts/behavior/behavior-cli.ts +2 -2
  153. package/scripts/behavior/behavior-rules.ts +47 -24
  154. package/scripts/build/build-bin.ts +2 -16
  155. package/scripts/build/build-claude-md.ts +0 -7
  156. package/scripts/build/build-commands.ts +0 -13
  157. package/scripts/build/build-hooks.ts +49 -48
  158. package/scripts/build/hook-bundle-stamp.ts +29 -11
  159. package/scripts/build/local-bin.ts +1 -1
  160. package/scripts/cases/cases-cli.ts +25 -13
  161. package/scripts/cases/cases-interaction-scan.ts +134 -0
  162. package/scripts/cases/cases-interaction.ts +183 -0
  163. package/scripts/cases/cases-logic.ts +39 -6
  164. package/scripts/ci/pr-classification-main.ts +18 -0
  165. package/scripts/ci/pr-classification.ts +10 -17
  166. package/scripts/clone/clone-scan.ts +1 -1
  167. package/scripts/cost-runtime/cost-blocks.ts +22 -37
  168. package/scripts/cost-runtime/cost-cli.ts +31 -14
  169. package/scripts/cost-runtime/cost-main.ts +12 -0
  170. package/scripts/cost-runtime/cost-transcript.ts +1 -0
  171. package/scripts/delegation/delegation-policy.ts +17 -4
  172. package/scripts/delegation/duplicate-read-guard.ts +0 -8
  173. package/scripts/delegation/investigation-guard.ts +0 -8
  174. package/scripts/delegation/investigation-reads.ts +3 -4
  175. package/scripts/dependabot/dependabot-cooldown.ts +194 -0
  176. package/scripts/discovery/repo-discovery.ts +24 -6
  177. package/scripts/doctor/doctor-consumer.ts +2 -5
  178. package/scripts/document/document-byte-budget.ts +8 -6
  179. package/scripts/document/document-scan.ts +1 -1
  180. package/scripts/document/document-section-cli.ts +0 -8
  181. package/scripts/document/document-section-main.ts +12 -0
  182. package/scripts/epic/epic-audit-cli.ts +12 -6
  183. package/scripts/epic/epic-bundle-apply.ts +137 -0
  184. package/scripts/epic/epic-bundle-cli.ts +32 -121
  185. package/scripts/epic/epic-bundle-format.ts +116 -0
  186. package/scripts/epic/epic-bundle-main.ts +17 -0
  187. package/scripts/epic/epic-busy.ts +5 -12
  188. package/scripts/epic/epic-classify.ts +24 -15
  189. package/scripts/epic/epic-cli-argv.ts +31 -0
  190. package/scripts/epic/epic-cli-decide.ts +42 -0
  191. package/scripts/epic/epic-cli.ts +6 -38
  192. package/scripts/epic/epic-close.ts +112 -55
  193. package/scripts/epic/epic-cross-repo.ts +4 -7
  194. package/scripts/epic/epic-decide.ts +119 -0
  195. package/scripts/epic/epic-decision.ts +9 -0
  196. package/scripts/epic/epic-fetch.ts +4 -0
  197. package/scripts/epic/epic-graph.ts +2 -0
  198. package/scripts/epic/epic-issue.ts +5 -1
  199. package/scripts/epic/epic-label-age.ts +1 -1
  200. package/scripts/epic/epic-lane-offer.ts +39 -4
  201. package/scripts/epic/epic-next-main.ts +24 -0
  202. package/scripts/epic/epic-next.ts +6 -24
  203. package/scripts/epic/epic-outside-blocker.ts +6 -2
  204. package/scripts/epic/epic-parse.ts +9 -3
  205. package/scripts/epic/epic-read.ts +1 -0
  206. package/scripts/epic/epic-reconcile.ts +39 -0
  207. package/scripts/epic/epic-run.ts +10 -1
  208. package/scripts/epic/epic-solo.ts +50 -14
  209. package/scripts/epic/epic.ts +41 -7
  210. package/scripts/exports/unused-members-cli.ts +2 -2
  211. package/scripts/followup/followup-checks-event.ts +8 -3
  212. package/scripts/followup/followup-coderabbit-wait.ts +82 -0
  213. package/scripts/followup/followup-review-gates.ts +81 -0
  214. package/scripts/followup/git-followup-stages.ts +13 -3
  215. package/scripts/followup/git-followup-workflow.ts +19 -66
  216. package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
  217. package/scripts/followup/git-pr-followup.ts +36 -8
  218. package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
  219. package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
  220. package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
  221. package/scripts/gate/busy-average.ts +58 -0
  222. package/scripts/gate/check-cpu.ts +60 -0
  223. package/scripts/gate/check-inputs.ts +39 -95
  224. package/scripts/gate/check-reuse.ts +33 -54
  225. package/scripts/gate/command-memory.ts +192 -0
  226. package/scripts/gate/core-admission.ts +218 -28
  227. package/scripts/gate/core-budget-timing.ts +37 -0
  228. package/scripts/gate/core-budget.ts +80 -98
  229. package/scripts/gate/core-wait-record.ts +48 -0
  230. package/scripts/gate/core-wait.ts +37 -5
  231. package/scripts/gate/core-weights.ts +86 -0
  232. package/scripts/gate/free-cores.ts +27 -4
  233. package/scripts/gate/gate-ledger.ts +32 -4
  234. package/scripts/gate/gate-plan.ts +41 -34
  235. package/scripts/gate/gate-report.ts +14 -2
  236. package/scripts/gate/gate-run-steps.ts +53 -8
  237. package/scripts/gate/gate-skip.ts +12 -2
  238. package/scripts/gate/gate-steps.ts +12 -1
  239. package/scripts/gate/input-fingerprint.ts +42 -0
  240. package/scripts/gate/machine-capacity.ts +65 -31
  241. package/scripts/gate/moved-paths.ts +67 -0
  242. package/scripts/gate/project-checks.ts +5 -12
  243. package/scripts/gate/scoped-green.ts +12 -8
  244. package/scripts/gate/since-green.ts +62 -0
  245. package/scripts/gate/toolchain-inputs.ts +115 -0
  246. package/scripts/gate/verification-gate.ts +27 -24
  247. package/scripts/gate/verification-inputs.ts +250 -0
  248. package/scripts/gh/gh-author-association.ts +96 -9
  249. package/scripts/gh/git-ai-review-scan.ts +4 -2
  250. package/scripts/gh/git-gh-api-path.ts +15 -0
  251. package/scripts/gh/git-gh-branch-rules.ts +73 -0
  252. package/scripts/gh/git-gh-conditional.ts +5 -2
  253. package/scripts/gh/git-gh-issue-read.ts +5 -1
  254. package/scripts/gh/git-gh-issue-write.ts +67 -29
  255. package/scripts/gh/git-gh-issue.ts +7 -3
  256. package/scripts/gh/git-gh-poll-read.ts +89 -0
  257. package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
  258. package/scripts/gh/git-gh-pr-rest.ts +1 -1
  259. package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
  260. package/scripts/gh/git-gh-pr.ts +27 -15
  261. package/scripts/gh/git-pr-checks-eval.ts +39 -7
  262. package/scripts/gh/git-pr-checks-parse.ts +39 -9
  263. package/scripts/gh/git-pr-merge-checked.ts +80 -0
  264. package/scripts/git/base-tree.ts +19 -2
  265. package/scripts/git/changed-file-scope.ts +6 -4
  266. package/scripts/git/changed-paths.ts +18 -1
  267. package/scripts/git/git-diff-reads.ts +27 -2
  268. package/scripts/git/git-grep-hits.ts +85 -0
  269. package/scripts/git/git-location-environment.ts +1 -1
  270. package/scripts/git/git-merge-conflicts.ts +83 -0
  271. package/scripts/git/git-preflight.ts +37 -12
  272. package/scripts/git/git-push-transport.ts +1 -2
  273. package/scripts/git/git-schemas.ts +17 -7
  274. package/scripts/git/git-spawn.ts +1 -2
  275. package/scripts/git/git-status.ts +4 -4
  276. package/scripts/git/main-merge-main.ts +12 -0
  277. package/scripts/git/main-merge-regenerate.ts +2 -2
  278. package/scripts/git/main-merge.ts +25 -9
  279. package/scripts/git/main-sync-main.ts +12 -0
  280. package/scripts/git/main-sync.ts +0 -9
  281. package/scripts/git/stash/git-stash.ts +27 -4
  282. package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
  283. package/scripts/git/stash/stash-pop-cli.ts +6 -12
  284. package/scripts/git/stash/stash-pop-main.ts +12 -0
  285. package/scripts/git/stash/stash-push-cli.ts +76 -0
  286. package/scripts/git/stash/stash-push-main.ts +12 -0
  287. package/scripts/hooks/batch-guard.ts +0 -8
  288. package/scripts/hooks/check-commit-message-main.ts +8 -0
  289. package/scripts/hooks/check-commit-message.ts +4 -7
  290. package/scripts/hooks/format-edited-file.ts +8 -24
  291. package/scripts/hooks/pre-commit-lint.ts +30 -3
  292. package/scripts/hooks/pre-push-unit.ts +4 -2
  293. package/scripts/hooks/pretool-guard-cli.ts +1 -8
  294. package/scripts/hooks/pretool-guard.ts +32 -19
  295. package/scripts/hooks/reserved-run.ts +67 -9
  296. package/scripts/hooks/run-hook.sh +13 -4
  297. package/scripts/hooks/shell-rules-notice.ts +37 -0
  298. package/scripts/hooks/stop-actions.ts +2 -21
  299. package/scripts/hooks/stop-guard.ts +13 -9
  300. package/scripts/init/hook-command-rewrite.ts +19 -5
  301. package/scripts/init/hook-launch.ts +15 -17
  302. package/scripts/init/init-actions.ts +0 -6
  303. package/scripts/init/init-ai-copy.ts +10 -36
  304. package/scripts/init/init-bootstrap.ts +9 -8
  305. package/scripts/init/init-dry-run-report.ts +1 -1
  306. package/scripts/init/init-dry-run.ts +1 -1
  307. package/scripts/init/init-file-action.ts +7 -9
  308. package/scripts/init/init-logic-json-merge.ts +2 -2
  309. package/scripts/init/init-logic-migrate.ts +9 -82
  310. package/scripts/init/init-logic.ts +3 -2
  311. package/scripts/init/init-main.ts +12 -0
  312. package/scripts/init/init.ts +5 -12
  313. package/scripts/init/kit-development-versions.ts +3 -7
  314. package/scripts/init/kit-written-paths.ts +2 -2
  315. package/scripts/init/project-profile.ts +5 -4
  316. package/scripts/init/tsconfig-preset-migration.ts +2 -1
  317. package/scripts/init/vscode-tasks.ts +1 -1
  318. package/scripts/issue/defect-origin-cli.ts +106 -0
  319. package/scripts/issue/defect-origin-line.ts +60 -0
  320. package/scripts/issue/defect-origin-main.ts +11 -0
  321. package/scripts/issue/defect-origin.ts +114 -0
  322. package/scripts/issue/defect-rate-cli.ts +34 -78
  323. package/scripts/issue/defect-rate.ts +0 -16
  324. package/scripts/issue/defect-report-cli.ts +128 -0
  325. package/scripts/issue/defect-report-format.ts +56 -0
  326. package/scripts/issue/defect-report-main.ts +11 -0
  327. package/scripts/issue/defect-report.ts +160 -0
  328. package/scripts/issue/expected-effect-lint.ts +1 -0
  329. package/scripts/issue/issue-already-done-cli.ts +62 -0
  330. package/scripts/issue/issue-body-or-comment.ts +40 -0
  331. package/scripts/issue/issue-cite-cli.ts +0 -9
  332. package/scripts/issue/issue-cite-main.ts +12 -0
  333. package/scripts/issue/issue-classification.ts +12 -7
  334. package/scripts/issue/issue-comment-cli.ts +10 -24
  335. package/scripts/issue/issue-comment-main.ts +12 -0
  336. package/scripts/issue/issue-evidence-exit.ts +100 -0
  337. package/scripts/issue/issue-file-cli.ts +29 -7
  338. package/scripts/issue/issue-file.ts +19 -19
  339. package/scripts/issue/issue-fold-cli.ts +2 -11
  340. package/scripts/issue/issue-fold-main.ts +12 -0
  341. package/scripts/issue/issue-labels.ts +81 -90
  342. package/scripts/issue/issue-lint-cli.ts +2 -10
  343. package/scripts/issue/issue-lint-main.ts +12 -0
  344. package/scripts/issue/issue-measured-cli.ts +56 -0
  345. package/scripts/issue/issue-merged.ts +19 -2
  346. package/scripts/issue/issue-not-before-label.ts +135 -0
  347. package/scripts/issue/issue-not-before.ts +111 -0
  348. package/scripts/issue/issue-number-shape.ts +15 -1
  349. package/scripts/issue/issue-park.ts +28 -0
  350. package/scripts/issue/issue-plan-cli.ts +151 -0
  351. package/scripts/issue/issue-priority.ts +151 -0
  352. package/scripts/issue/issue-rank.ts +7 -1
  353. package/scripts/issue/issue-read-cli.ts +3 -10
  354. package/scripts/issue/issue-read-main.ts +12 -0
  355. package/scripts/issue/issue-read.ts +29 -5
  356. package/scripts/issue/issue-release-cli.ts +0 -10
  357. package/scripts/issue/issue-release-main.ts +13 -0
  358. package/scripts/issue/issue-release.ts +7 -12
  359. package/scripts/issue/issue-sample-gate.ts +192 -0
  360. package/scripts/issue/issue-sample-source.ts +76 -0
  361. package/scripts/issue/issue-scout-cli.ts +0 -11
  362. package/scripts/issue/issue-scout-main.ts +14 -0
  363. package/scripts/issue/issue-state-cli.ts +0 -10
  364. package/scripts/issue/issue-state-main.ts +12 -0
  365. package/scripts/issue/issue-watch-diff.ts +56 -15
  366. package/scripts/issue/issue-watch.ts +2 -1
  367. package/scripts/issue/issue-wip.ts +2 -7
  368. package/scripts/issue/measure-rerun-cli.ts +13 -8
  369. package/scripts/issue/plan-consumers-cli.ts +39 -0
  370. package/scripts/issue/plan-consumers-main.ts +11 -0
  371. package/scripts/issue/plan-consumers-section.ts +55 -0
  372. package/scripts/issue/plan-consumers.ts +127 -0
  373. package/scripts/josh/agent-session-environment.ts +1 -1
  374. package/scripts/josh/command-usage.ts +15 -43
  375. package/scripts/josh/file-map-stamp.ts +49 -16
  376. package/scripts/josh/hook-decision.ts +32 -20
  377. package/scripts/josh/josh-command-map.ts +4 -1
  378. package/scripts/josh/josh-command-types.ts +12 -6
  379. package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
  380. package/scripts/josh/josh-commands-ai.ts +157 -158
  381. package/scripts/josh/josh-commands-backlog.ts +82 -16
  382. package/scripts/josh/josh-commands-clone.ts +1 -0
  383. package/scripts/josh/josh-commands-development.ts +111 -71
  384. package/scripts/josh/josh-commands-document.ts +43 -1
  385. package/scripts/josh/josh-commands-epic.ts +171 -0
  386. package/scripts/josh/josh-commands-hooks.ts +25 -2
  387. package/scripts/josh/josh-commands-issue-write.ts +181 -0
  388. package/scripts/josh/josh-commands-issue.ts +124 -24
  389. package/scripts/josh/josh-commands-lane.ts +103 -2
  390. package/scripts/josh/josh-commands-lint.ts +19 -8
  391. package/scripts/josh/josh-commands-maintenance.ts +112 -4
  392. package/scripts/josh/josh-commands-pause.ts +29 -0
  393. package/scripts/josh/josh-commands-progress.ts +87 -0
  394. package/scripts/josh/josh-commands-project.ts +138 -9
  395. package/scripts/josh/josh-commands-review.ts +124 -0
  396. package/scripts/josh/josh-commands-run.ts +211 -23
  397. package/scripts/josh/josh-commands-ship.ts +169 -0
  398. package/scripts/josh/josh-commands-split.ts +9 -0
  399. package/scripts/josh/josh-commands-versioning.ts +49 -2
  400. package/scripts/josh/josh-commands-workflow.ts +144 -6
  401. package/scripts/josh/josh-logic.ts +6 -13
  402. package/scripts/josh/package-directory.ts +2 -4
  403. package/scripts/josh/process-identity.ts +13 -4
  404. package/scripts/josh/session-language-cli.ts +4 -8
  405. package/scripts/josh/session-language-main.ts +13 -0
  406. package/scripts/josh/session-language.ts +6 -1
  407. package/scripts/josh/shared-cache.ts +90 -0
  408. package/scripts/josh/stamp-file.ts +9 -15
  409. package/scripts/lane/lane-await.ts +51 -12
  410. package/scripts/lane/lane-cache.ts +5 -30
  411. package/scripts/lane/lane-capacity.ts +14 -23
  412. package/scripts/lane/lane-check-stats.ts +62 -21
  413. package/scripts/lane/lane-child-invocation.ts +8 -0
  414. package/scripts/lane/lane-cli.ts +15 -5
  415. package/scripts/lane/lane-close.ts +86 -18
  416. package/scripts/lane/lane-core-wait-stats.ts +66 -0
  417. package/scripts/lane/lane-dispatch.ts +24 -3
  418. package/scripts/lane/lane-gap-stats.ts +156 -0
  419. package/scripts/lane/lane-handoff.ts +69 -1
  420. package/scripts/lane/lane-held-stats.ts +129 -0
  421. package/scripts/lane/lane-install.ts +4 -11
  422. package/scripts/lane/lane-launch-cli.ts +0 -9
  423. package/scripts/lane/lane-launch-main.ts +12 -0
  424. package/scripts/lane/lane-ledger-schema.ts +266 -0
  425. package/scripts/lane/lane-ledger.ts +92 -123
  426. package/scripts/lane/lane-limit-cli.ts +12 -1
  427. package/scripts/lane/lane-measure-cli.ts +57 -11
  428. package/scripts/lane/lane-open.ts +9 -1
  429. package/scripts/lane/lane-parked.ts +3 -3
  430. package/scripts/lane/lane-pause-cli.ts +130 -0
  431. package/scripts/lane/lane-pause.ts +158 -0
  432. package/scripts/lane/lane-process-table.ts +166 -0
  433. package/scripts/lane/lane-reap-settle.ts +124 -0
  434. package/scripts/lane/lane-reap.ts +50 -15
  435. package/scripts/lane/lane-registry.ts +24 -3
  436. package/scripts/lane/lane-residents.ts +162 -0
  437. package/scripts/lane/lane-restart.ts +22 -2
  438. package/scripts/lane/lane-round-two-stats.ts +49 -0
  439. package/scripts/lane/lane-sampler.ts +4 -0
  440. package/scripts/lane/lane-session-action.ts +19 -5
  441. package/scripts/lane/lane-session-broker.ts +102 -21
  442. package/scripts/lane/lane-snapshot-trace.ts +84 -0
  443. package/scripts/lane/lane-spans.ts +51 -0
  444. package/scripts/lane/lane-spent.ts +6 -3
  445. package/scripts/lane/lane-stage-stats.ts +7 -2
  446. package/scripts/lane/lane-state.ts +302 -0
  447. package/scripts/lane/lane-stats.ts +58 -4
  448. package/scripts/lane/lane-stop-stats.ts +113 -37
  449. package/scripts/lane/lane-test-related-stats.ts +127 -0
  450. package/scripts/lane/lane-transcript-calls.ts +145 -0
  451. package/scripts/lane/lane-transcript-stats.ts +168 -0
  452. package/scripts/lane/lane-vacant.ts +13 -3
  453. package/scripts/lane/lane-withdraw-cli.ts +5 -4
  454. package/scripts/lane/lane-withdraw.ts +50 -49
  455. package/scripts/lane/process-directories.ts +70 -0
  456. package/scripts/lane/process-lane-marks.ts +94 -0
  457. package/scripts/lib/atomic-write.ts +62 -0
  458. package/scripts/lib/buffered-process.ts +12 -5
  459. package/scripts/lib/cli-flags.ts +53 -0
  460. package/scripts/lib/figure-format.ts +63 -0
  461. package/scripts/lib/json-value.ts +9 -1
  462. package/scripts/lib/package-manifest.ts +35 -0
  463. package/scripts/lib/read-file.ts +3 -1
  464. package/scripts/lib/stamped-memo.ts +63 -0
  465. package/scripts/lib/stdout-on-stderr.ts +24 -0
  466. package/scripts/lib/timeouts.ts +9 -0
  467. package/scripts/lib/transcript-record.ts +91 -0
  468. package/scripts/lines/effective-limit.ts +1 -1
  469. package/scripts/lint/eslint-cache-dependencies.ts +145 -0
  470. package/scripts/lint/eslint-daemon.ts +265 -0
  471. package/scripts/lint/format.ts +11 -2
  472. package/scripts/lint/import-graph.ts +279 -0
  473. package/scripts/lint/lint-gate-scope.ts +102 -0
  474. package/scripts/lint/lint-parallel-main.ts +19 -0
  475. package/scripts/lint/lint-parallel.ts +62 -30
  476. package/scripts/lint/lint-related-scope.ts +30 -24
  477. package/scripts/lint/lint-related.ts +38 -6
  478. package/scripts/notify/confirmation-options.ts +1 -2
  479. package/scripts/notify/telegram-notify.ts +20 -20
  480. package/scripts/notify/telegram-test-logic.ts +0 -1
  481. package/scripts/notify/telegram-test-main.ts +8 -0
  482. package/scripts/notify/telegram-test.ts +2 -6
  483. package/scripts/observations/observation-ledger.ts +13 -0
  484. package/scripts/observations/observations-flush-landing.ts +5 -3
  485. package/scripts/observations/observations-flush.ts +6 -1
  486. package/scripts/overrides/overrides-check.ts +2 -5
  487. package/scripts/overrides/overrides-files.ts +2 -1
  488. package/scripts/overrides/overrides-logic.ts +3 -6
  489. package/scripts/package/verify-optional-eslint-install.ts +8 -6
  490. package/scripts/propagate/propagate-publish.ts +2 -7
  491. package/scripts/propagate/propagate-targets.ts +4 -12
  492. package/scripts/refactor/import-graph.ts +9 -7
  493. package/scripts/release/github-release-runs.ts +17 -6
  494. package/scripts/release/release-approval-prune.ts +18 -0
  495. package/scripts/release/release-history.ts +1 -3
  496. package/scripts/release/release-progress.ts +42 -22
  497. package/scripts/release/release-publish-run.ts +39 -0
  498. package/scripts/release/release-publish.ts +6 -6
  499. package/scripts/release/release-scope-cli.ts +0 -10
  500. package/scripts/release/release-scope-main.ts +12 -0
  501. package/scripts/repo/repo-setting.ts +3 -6
  502. package/scripts/repo/required-checks-logic.ts +6 -15
  503. package/scripts/report/report-format-reference.ts +2 -0
  504. package/scripts/report/report-labels.ts +155 -0
  505. package/scripts/report/report-lint-cli.ts +3 -0
  506. package/scripts/report/report-lint.ts +85 -110
  507. package/scripts/report/report-template-cli.ts +59 -0
  508. package/scripts/report/report-template.ts +112 -0
  509. package/scripts/review/acceptance-map.ts +1 -0
  510. package/scripts/review/removed-tests-check.ts +86 -0
  511. package/scripts/review/removed-tests.ts +149 -0
  512. package/scripts/review/review-brief-cli.ts +81 -15
  513. package/scripts/review/review-brief-main.ts +12 -0
  514. package/scripts/review/review-brief.ts +31 -3
  515. package/scripts/review/review-code-tree.ts +10 -6
  516. package/scripts/review/review-comment-round.ts +26 -8
  517. package/scripts/review/review-finding-ledger.ts +30 -15
  518. package/scripts/review/review-interaction.ts +94 -0
  519. package/scripts/review/review-readers-scan.ts +163 -0
  520. package/scripts/review/review-record-cli.ts +69 -30
  521. package/scripts/review/review-record-main.ts +12 -0
  522. package/scripts/review/review-round-one-blobs.ts +221 -0
  523. package/scripts/review/review-round2-cli.ts +49 -12
  524. package/scripts/review/review-round2.ts +80 -12
  525. package/scripts/review/review-stamps.ts +19 -1
  526. package/scripts/review/review-stop-log.ts +96 -0
  527. package/scripts/review/review-stops-cli.ts +85 -0
  528. package/scripts/review/review-tree.ts +6 -17
  529. package/scripts/review/review-untouched-readers.ts +146 -0
  530. package/scripts/review/test-titles.ts +118 -0
  531. package/scripts/rules/agent-model.ts +8 -0
  532. package/scripts/rules/bash-triggers.ts +46 -3
  533. package/scripts/rules/decision-oracle-batch.ts +9 -1
  534. package/scripts/rules/decision-oracle.ts +2 -2
  535. package/scripts/rules/delivered-rules.ts +80 -2
  536. package/scripts/rules/destructive-command.ts +8 -1
  537. package/scripts/rules/direct-filing.ts +10 -2
  538. package/scripts/rules/direct-issue-comment.ts +117 -0
  539. package/scripts/rules/direct-pr-create.ts +69 -3
  540. package/scripts/rules/early-heartbeat.ts +2 -1
  541. package/scripts/rules/file-body.ts +7 -0
  542. package/scripts/rules/filing-cap.ts +7 -0
  543. package/scripts/rules/git-argv.ts +72 -14
  544. package/scripts/rules/git-force.ts +12 -2
  545. package/scripts/rules/guard-remedy.ts +4 -0
  546. package/scripts/rules/implementation-cut-verdict.ts +1 -1
  547. package/scripts/rules/implementation-cut.ts +11 -3
  548. package/scripts/rules/index-guard.ts +8 -1
  549. package/scripts/rules/issue-comments.ts +9 -1
  550. package/scripts/rules/josh-git-bare.ts +7 -0
  551. package/scripts/rules/lane-background.ts +67 -25
  552. package/scripts/rules/lane-carry-conflict.ts +6 -0
  553. package/scripts/rules/lane-direct-tool.ts +74 -0
  554. package/scripts/rules/lane-interactive-ask.ts +9 -2
  555. package/scripts/rules/lane-park.ts +45 -23
  556. package/scripts/rules/lane-split-park.ts +10 -2
  557. package/scripts/rules/lane-switch-main.ts +7 -0
  558. package/scripts/rules/oracle-consulted.ts +10 -0
  559. package/scripts/rules/oracle-firing.ts +1 -0
  560. package/scripts/rules/permission-guards.ts +3 -0
  561. package/scripts/rules/piped-verification.ts +1 -1
  562. package/scripts/rules/poll-loop.ts +7 -0
  563. package/scripts/rules/pr-merge.ts +123 -0
  564. package/scripts/rules/protected-files.ts +32 -5
  565. package/scripts/rules/raw-field-body.ts +6 -0
  566. package/scripts/rules/rule-body-guard.ts +8 -0
  567. package/scripts/rules/rule-list.ts +9 -28
  568. package/scripts/rules/rule-value-cache.ts +4 -9
  569. package/scripts/rules/rule-value-cli.ts +51 -32
  570. package/scripts/rules/rule-value.ts +1 -1
  571. package/scripts/rules/shell-segments.ts +35 -0
  572. package/scripts/rules/stop-rule-rows.ts +64 -0
  573. package/scripts/rules/stop-rules.ts +3 -4
  574. package/scripts/rules/test-declared-commit.ts +11 -1
  575. package/scripts/rules/third-party-write.ts +7 -0
  576. package/scripts/rules/timed-rerun.ts +69 -0
  577. package/scripts/rules/worktree-guard.ts +13 -3
  578. package/scripts/run/board/run-board-app-name.ts +23 -0
  579. package/scripts/run/board/run-board-cli.ts +65 -32
  580. package/scripts/run/board/run-board-earlier.ts +94 -0
  581. package/scripts/run/board/run-board-ending-reason.ts +67 -0
  582. package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
  583. package/scripts/run/board/run-board-estimate.ts +98 -0
  584. package/scripts/run/board/run-board-fit.ts +153 -36
  585. package/scripts/run/board/run-board-fold.ts +123 -0
  586. package/scripts/run/board/run-board-fresh.ts +2 -2
  587. package/scripts/run/board/run-board-gather-live.ts +29 -0
  588. package/scripts/run/board/run-board-gather-thread.ts +189 -0
  589. package/scripts/run/board/run-board-gather-worker.ts +29 -0
  590. package/scripts/run/board/run-board-gather.ts +187 -0
  591. package/scripts/run/board/run-board-github.ts +118 -38
  592. package/scripts/run/board/run-board-header.ts +82 -20
  593. package/scripts/run/board/run-board-keys.ts +58 -0
  594. package/scripts/run/board/run-board-kind.ts +20 -6
  595. package/scripts/run/board/run-board-labels.ts +116 -71
  596. package/scripts/run/board/run-board-lane-state.ts +109 -0
  597. package/scripts/run/board/run-board-lane-time.ts +122 -0
  598. package/scripts/run/board/run-board-layout.ts +239 -60
  599. package/scripts/run/board/run-board-length.ts +52 -0
  600. package/scripts/run/board/run-board-machine.ts +8 -4
  601. package/scripts/run/board/run-board-main.ts +12 -0
  602. package/scripts/run/board/run-board-notes.ts +52 -31
  603. package/scripts/run/board/run-board-now.ts +1 -1
  604. package/scripts/run/board/run-board-operation.ts +15 -33
  605. package/scripts/run/board/run-board-phase.ts +1 -1
  606. package/scripts/run/board/run-board-plan-shared.ts +115 -0
  607. package/scripts/run/board/run-board-plan.ts +55 -3
  608. package/scripts/run/board/run-board-planning.ts +45 -0
  609. package/scripts/run/board/run-board-priority.ts +44 -0
  610. package/scripts/run/board/run-board-process-groups.ts +195 -0
  611. package/scripts/run/board/run-board-read.ts +151 -27
  612. package/scripts/run/board/run-board-reason.ts +235 -51
  613. package/scripts/run/board/run-board-released.ts +35 -0
  614. package/scripts/run/board/run-board-render-checks.ts +39 -5
  615. package/scripts/run/board/run-board-render-condition.ts +96 -0
  616. package/scripts/run/board/run-board-render-drawn.ts +67 -0
  617. package/scripts/run/board/run-board-render-foot.ts +59 -0
  618. package/scripts/run/board/run-board-render-icon.ts +35 -0
  619. package/scripts/run/board/run-board-render-lanes.ts +145 -0
  620. package/scripts/run/board/run-board-render-lead.ts +80 -0
  621. package/scripts/run/board/run-board-render-legend.ts +117 -48
  622. package/scripts/run/board/run-board-render-notes.ts +156 -29
  623. package/scripts/run/board/run-board-render-processes.ts +196 -0
  624. package/scripts/run/board/run-board-render-section.ts +119 -0
  625. package/scripts/run/board/run-board-render-slot.ts +3 -36
  626. package/scripts/run/board/run-board-render-tail.ts +115 -48
  627. package/scripts/run/board/run-board-render-time.ts +56 -0
  628. package/scripts/run/board/run-board-render-title.ts +117 -24
  629. package/scripts/run/board/run-board-render-waits.ts +104 -20
  630. package/scripts/run/board/run-board-render.ts +207 -265
  631. package/scripts/run/board/run-board-roots.ts +54 -0
  632. package/scripts/run/board/run-board-row-yield.ts +9 -4
  633. package/scripts/run/board/run-board-setup.ts +1 -12
  634. package/scripts/run/board/run-board-snapshot.ts +111 -0
  635. package/scripts/run/board/run-board-spin.ts +2 -2
  636. package/scripts/run/board/run-board-state.ts +22 -33
  637. package/scripts/run/board/run-board-status.ts +147 -71
  638. package/scripts/run/board/run-board-thanks-read.ts +2 -2
  639. package/scripts/run/board/run-board-tick.ts +122 -107
  640. package/scripts/run/board/run-board-usage-board.ts +78 -0
  641. package/scripts/run/board/run-board-usage-lanes.ts +113 -0
  642. package/scripts/run/board/run-board-usage-listing.ts +93 -0
  643. package/scripts/run/board/run-board-usage-read.ts +120 -150
  644. package/scripts/run/board/run-board-usage-rusage.ts +19 -7
  645. package/scripts/run/board/run-board-usage-text.ts +139 -51
  646. package/scripts/run/board/run-board-usage-top.ts +102 -0
  647. package/scripts/run/board/run-board-usage.ts +89 -72
  648. package/scripts/run/board/run-board-usual.ts +20 -9
  649. package/scripts/run/carry/run-carry-args.ts +4 -7
  650. package/scripts/run/carry/run-carry-conversation.ts +1 -1
  651. package/scripts/run/carry/run-carry.ts +9 -4
  652. package/scripts/run/cut/run-cut-handoff.ts +2 -2
  653. package/scripts/run/event/run-event-cli.ts +1 -5
  654. package/scripts/run/event/run-event-filed.ts +12 -6
  655. package/scripts/run/event/run-event-follow.ts +2 -3
  656. package/scripts/run/event/run-event-render.ts +6 -10
  657. package/scripts/run/event/run-event-scope.ts +2 -2
  658. package/scripts/run/event/run-event-stream-emit.ts +82 -22
  659. package/scripts/run/event/run-event-stream.ts +34 -8
  660. package/scripts/run/hold/run-hold-adopt.ts +65 -0
  661. package/scripts/run/hold/run-hold-cli.ts +93 -22
  662. package/scripts/run/hold/run-hold-main.ts +12 -0
  663. package/scripts/run/hold/run-hold-member.ts +37 -0
  664. package/scripts/run/hold/run-stop-notify.ts +183 -0
  665. package/scripts/run/merge/run-merge-auth.ts +31 -0
  666. package/scripts/run/merge/run-merge-cli.ts +62 -48
  667. package/scripts/run/merge/run-merge-close.ts +74 -0
  668. package/scripts/run/merge/run-merge-collect.ts +6 -13
  669. package/scripts/run/merge/run-merge-driver.ts +71 -0
  670. package/scripts/run/merge/run-merge-main.ts +12 -0
  671. package/scripts/run/merge/run-merge-outcome.ts +23 -0
  672. package/scripts/run/merge/run-merge-restart.ts +39 -0
  673. package/scripts/run/merge/run-merge-ship.ts +20 -4
  674. package/scripts/run/merge/run-merge-signals.ts +33 -9
  675. package/scripts/run/merge/run-merge-steps.ts +120 -85
  676. package/scripts/run/merge/run-merge.ts +38 -37
  677. package/scripts/run/park/run-park-cli.ts +91 -0
  678. package/scripts/run/park/run-park.ts +88 -0
  679. package/scripts/run/park/run-stalled.ts +68 -0
  680. package/scripts/run/pause/run-pause-cli.ts +73 -0
  681. package/scripts/run/pause/run-pause.ts +251 -0
  682. package/scripts/run/progress/run-progress-cli.ts +4 -12
  683. package/scripts/run/progress/run-progress-clock.ts +1 -1
  684. package/scripts/run/progress/run-progress-config.ts +6 -14
  685. package/scripts/run/progress/run-progress-main.ts +12 -0
  686. package/scripts/run/progress/run-progress.ts +1 -4
  687. package/scripts/run/review/run-review.ts +2 -1
  688. package/scripts/run/run-ending.ts +1 -0
  689. package/scripts/run/run-invocation.ts +5 -6
  690. package/scripts/run/run-liveness-cli.ts +6 -8
  691. package/scripts/run/run-liveness.ts +60 -29
  692. package/scripts/run/run-next.ts +1 -1
  693. package/scripts/run/run-parent-cut-hook.ts +2 -2
  694. package/scripts/run/run-preflight.ts +18 -3
  695. package/scripts/run/run-prep-cli.ts +1 -10
  696. package/scripts/run/run-prep-locate.ts +7 -50
  697. package/scripts/run/run-prep-main.ts +12 -0
  698. package/scripts/run/run-prep.ts +6 -0
  699. package/scripts/run/run-report-cli.ts +101 -13
  700. package/scripts/run/run-report-handoff.ts +114 -0
  701. package/scripts/run/run-step.ts +1 -1
  702. package/scripts/run/run-stranded-detect.ts +13 -0
  703. package/scripts/run/run-watcher-guard-cli.ts +1 -1
  704. package/scripts/run/run-watcher-guard.ts +1 -1
  705. package/scripts/run/ship/run-ship-args.ts +121 -0
  706. package/scripts/run/ship/run-ship-body-draft.ts +110 -0
  707. package/scripts/run/ship/run-ship-cli.ts +63 -140
  708. package/scripts/run/ship/run-ship-detach.ts +19 -8
  709. package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
  710. package/scripts/run/ship/run-ship-next.ts +18 -2
  711. package/scripts/run/ship/run-ship-overlap.ts +42 -5
  712. package/scripts/run/ship/run-ship-place.ts +96 -0
  713. package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
  714. package/scripts/run/ship/run-ship-pre-detach.ts +81 -24
  715. package/scripts/run/ship/run-ship-preflight.ts +137 -32
  716. package/scripts/run/ship/run-ship-probe.ts +11 -3
  717. package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
  718. package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
  719. package/scripts/run/ship/run-ship-return.ts +107 -23
  720. package/scripts/run/ship/run-ship-review-steps.ts +105 -151
  721. package/scripts/run/ship/run-ship-review.ts +73 -6
  722. package/scripts/run/ship/run-ship-reviewer.ts +207 -0
  723. package/scripts/run/ship/run-ship-stage.ts +55 -6
  724. package/scripts/run/ship/run-ship-steps.ts +46 -15
  725. package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
  726. package/scripts/run/ship/run-ship-stop-text.ts +11 -6
  727. package/scripts/run/ship/run-ship-sync.ts +43 -6
  728. package/scripts/run/ship/run-ship.ts +30 -2
  729. package/scripts/run/tidy/run-tidy-cli.ts +0 -4
  730. package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
  731. package/scripts/run/tidy/run-tidy-main.ts +8 -0
  732. package/scripts/run/wake/run-wake-cli.ts +119 -100
  733. package/scripts/run/wake/run-wake-code.ts +83 -0
  734. package/scripts/run/wake/run-wake-driver.ts +19 -8
  735. package/scripts/run/wake/run-wake-loop.ts +34 -3
  736. package/scripts/run/wake/run-wake-main.ts +13 -0
  737. package/scripts/run/wake/run-wake-ports.ts +90 -0
  738. package/scripts/run/wake/run-wake-takeover.ts +66 -0
  739. package/scripts/run/wake/run-wake.ts +2 -1
  740. package/scripts/safe-chain/pack-hook.ts +2 -2
  741. package/scripts/safe-chain/preinstall-command.ts +2 -1
  742. package/scripts/safe-chain/project-config.ts +3 -9
  743. package/scripts/security/security-audit-main.ts +8 -0
  744. package/scripts/security/security-audit-provision-logic.ts +0 -11
  745. package/scripts/security/security-audit-provision-main.ts +12 -0
  746. package/scripts/security/security-audit-provision.ts +11 -26
  747. package/scripts/security/security-audit.ts +6 -7
  748. package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
  749. package/scripts/split/split-assess-cli.ts +2 -2
  750. package/scripts/split/split-assess.ts +15 -0
  751. package/scripts/split/split-measure.ts +65 -0
  752. package/scripts/sync/claude-settings-merge.ts +8 -15
  753. package/scripts/sync/directory-copy-guard.ts +4 -9
  754. package/scripts/sync/file-content.ts +78 -8
  755. package/scripts/sync/sync-ai-files.ts +3 -5
  756. package/scripts/sync/sync-configs.ts +11 -23
  757. package/scripts/sync/sync-hook-safety.ts +4 -10
  758. package/scripts/sync/sync-main.ts +11 -0
  759. package/scripts/sync/sync.ts +25 -37
  760. package/scripts/test/test-declared-changed.ts +2 -2
  761. package/scripts/test/test-declared.ts +1 -1
  762. package/scripts/test/test-e2e-guard.ts +25 -1
  763. package/scripts/test/test-e2e-stamp.ts +38 -0
  764. package/scripts/test/test-pinned-logic.ts +145 -0
  765. package/scripts/test/test-pinned-main.ts +78 -0
  766. package/scripts/test/test-pinned.ts +100 -0
  767. package/scripts/test/test-read-map.ts +264 -0
  768. package/scripts/test/test-read-recording.ts +91 -0
  769. package/scripts/test/test-read-trace.ts +148 -0
  770. package/scripts/test/test-red-main.ts +12 -0
  771. package/scripts/test/test-red.ts +12 -30
  772. package/scripts/test/test-related-main.ts +18 -0
  773. package/scripts/test/test-related-record.ts +119 -0
  774. package/scripts/test/test-related-scope.ts +229 -43
  775. package/scripts/test/test-related.ts +300 -22
  776. package/scripts/test/test-unit-guard-main.ts +15 -0
  777. package/scripts/test/test-unit-guard.ts +42 -24
  778. package/scripts/test/unit-count-file.ts +37 -0
  779. package/scripts/test/unit-run-marker.ts +162 -0
  780. package/scripts/test/unit-setup-files.ts +51 -0
  781. package/scripts/test/unit-worker-share.ts +61 -149
  782. package/scripts/test/whole-suite-files.ts +63 -0
  783. package/scripts/time-runtime/time-background.ts +20 -2
  784. package/scripts/time-runtime/time-bundles.ts +4 -3
  785. package/scripts/time-runtime/time-density-hook.ts +8 -6
  786. package/scripts/time-runtime/time-followup-stage.ts +1 -3
  787. package/scripts/time-runtime/time-format.ts +5 -28
  788. package/scripts/time-runtime/time-markers.ts +10 -1
  789. package/scripts/time-runtime/time-shell.ts +97 -10
  790. package/scripts/time-runtime/time-transcript-line.ts +49 -62
  791. package/scripts/uninstall/uninstall.ts +1 -1
  792. package/scripts/version/bump-version-main.ts +12 -0
  793. package/scripts/version/bump-version.ts +25 -25
  794. package/scripts/version/effective-upstream.ts +6 -12
  795. package/scripts/version/latest-corepack.ts +17 -32
  796. package/scripts/version/latest-if-required-cli.ts +93 -0
  797. package/scripts/version/latest-lane-guard-main.ts +8 -0
  798. package/scripts/version/latest-lane-guard.ts +0 -4
  799. package/scripts/version/latest-scope-cli.ts +0 -9
  800. package/scripts/version/latest-scope-main.ts +12 -0
  801. package/scripts/version/latest-update.ts +5 -5
  802. package/scripts/version/npm-registry.ts +44 -6
  803. package/scripts/version/publishable-range-check.ts +5 -16
  804. package/scripts/version/release-age.ts +1 -1
  805. package/scripts/version/release-hold.ts +1 -1
  806. package/scripts/version/release-window.ts +38 -0
  807. package/scripts/version/running-binary.ts +1 -1
  808. package/scripts/version/safe-chain-version-update.ts +3 -8
  809. package/scripts/version/version-targets.ts +6 -28
  810. package/templates/dependabot.yml +29 -0
  811. package/templates/gitignore +4 -1
  812. package/templates/pnpm-workspace.basic.yaml +1 -1
  813. package/templates/sonar-project.properties +3 -2
  814. package/templates/workflows/ci.yml +12 -4
  815. package/templates/workflows/github-release.yml +4 -0
  816. package/tsconfig.sonar.json +1 -1
  817. package/.ncurc.json +0 -3
  818. package/dist/hooks/batch-guard.js +0 -29
  819. package/dist/hooks/chunk-4KKD2UTK.js +0 -66
  820. package/dist/hooks/chunk-6TS2JD6D.js +0 -237
  821. package/dist/hooks/chunk-7DSBJVFH.js +0 -50
  822. package/dist/hooks/chunk-A65Y4YOR.js +0 -79
  823. package/dist/hooks/chunk-CDY4NFQG.js +0 -15
  824. package/dist/hooks/chunk-EFXE6C37.js +0 -81
  825. package/dist/hooks/chunk-GP4IEC4O.js +0 -20
  826. package/dist/hooks/chunk-JP45SOCJ.js +0 -56
  827. package/dist/hooks/chunk-LAOV7NLM.js +0 -45
  828. package/dist/hooks/chunk-M4HGZV7U.js +0 -83
  829. package/dist/hooks/chunk-PF2NZL2A.js +0 -131
  830. package/dist/hooks/chunk-PTICX4OL.js +0 -358
  831. package/dist/hooks/chunk-RT27QRJW.js +0 -6247
  832. package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
  833. package/dist/hooks/chunk-UPUZF3AN.js +0 -279
  834. package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
  835. package/dist/hooks/duplicate-read-guard.js +0 -30
  836. package/dist/hooks/investigation-guard.js +0 -29
  837. package/scripts/backlog/backlog-stalled-cli.ts +0 -30
  838. package/scripts/cost-runtime/cost-format.ts +0 -29
  839. package/scripts/init/basic-path-migration.ts +0 -24
  840. package/scripts/issue/issue-backlinks-cli.ts +0 -93
  841. package/scripts/josh/josh-commands-guard.ts +0 -38
  842. package/scripts/josh/josh-usage-automation.ts +0 -121
  843. package/scripts/josh/josh-usage-backlog.ts +0 -180
  844. package/scripts/josh/josh-usage-developer.ts +0 -230
  845. package/scripts/josh/josh-usage-hooks.ts +0 -38
  846. package/scripts/josh/josh-usage-issue.ts +0 -205
  847. package/scripts/josh/josh-usage-review.ts +0 -101
  848. package/scripts/josh/josh-usage-run.ts +0 -252
  849. package/scripts/josh/josh-usage-session.ts +0 -238
  850. package/scripts/josh/josh-usage-workflow.ts +0 -212
  851. package/scripts/lint/cross-file-recheck.ts +0 -155
  852. package/scripts/registry-migration/migrate-logic.ts +0 -237
  853. package/scripts/registry-migration/migrate.ts +0 -292
  854. package/scripts/registry-migration/user-npmrc.ts +0 -15
  855. package/scripts/rules/rule-guard.ts +0 -23
  856. package/scripts/rules/rule-registry-rows.ts +0 -292
  857. package/scripts/rules/rule-registry.ts +0 -112
  858. package/scripts/run/run-stranded-cli.ts +0 -27
@@ -6,24 +6,14 @@
6
6
 
7
7
  ラベルの有無、概要行の字数上限、コードフェンス囲み、概要へのファイルパス・CLI フラグの混入、ケース段と「壊れるとしたら」段の形は、サマリを標準入力で `pnpm josh report:lint` に渡して検査する(`ok` か違反行を印字する — joshuafolkken/kit#2123)。
8
8
 
9
- ### 出力はコードフェンスで囲まない(必須)
9
+ ### 骨組みは `josh report:template` が印字する
10
10
 
11
- 以下のテンプレートは**フェンスの中身だけ**をセッションに書く(空白での桁揃えと単独行の `---` も使わない)。
11
+ 作業前サマリと完了報告の骨組みは `pnpm josh report:template summary|done [<path>...]` で印字し、写さない。ラベルは `report:lint` と同じ 1 つのラベル表(`scripts/report/report-labels.ts`)から、`JOSH_SESSION_LANG` の言語で出る(`ja` 以外は英語)。渡したパスは「対象」「変更ファイル」と変更ごとの行を埋め、そのパスに `josh cases` が求める異常系を「壊れるとしたら」の先頭に置く。残る `<…>` だけを書く。
12
12
 
13
- ### ラベルはセッション言語に訳し、注釈は付けない(必須)
14
-
15
- **(1) ラベルはセッション言語に訳す。** 日本語セッションでの対応:
16
-
17
- - `■ Overview` → `■ 概要`
18
- - `Now` / `Change` / `Check` → `今こうなっている` / `こう直す` / `確かめ方`
19
- - `Details` → `技術詳細`、`Changes and tests` → `変更とテスト`
20
- - `Cause` / `Fix` / `Result`(完了報告)→ `原因` / `対応` / `結果`
21
- - `■ Hand-off`(区切り)→ `■ 区切り`
22
- - `Done` / `Remaining` / `Why it stopped` / `Next command` → `終わったこと` / `残っていること` / `止めた理由` / `次に打つコマンド`
23
-
24
- 成果物の散文(Issue 本文、Issue/PR コメント、Telegram 本文)のラベルもこの表で訳す。英語のまま残るのは「出力の言語(`JOSH_SESSION_LANG`)」が挙げた 3 つだけ。
25
-
26
- **(2) ラベルに注釈を付けない。** `■ 概要(平易な説明)` は誤り。注意書きはラベルの下の説明文に置く。
13
+ - 出力はコードフェンスで囲まない(空白での桁揃えと単独行の `---` も使わない)
14
+ - ラベルに注釈を付けない。`■ 概要(平易な説明)` は誤り。注意書きはラベルの下の説明文に置く
15
+ - 成果物の散文(Issue 本文、Issue/PR コメント、Telegram 本文)のラベルも、このコマンドが印字するラベルで書く。英語のまま残るのは「出力の言語(`JOSH_SESSION_LANG`)」が挙げた 3 つだけ
16
+ - 区切り(hand-off)のラベルも同じ表にあり、`pnpm josh run:report --handoff` が印字する
27
17
 
28
18
  ### 作業前サマリはいつ・どう出すか
29
19
 
@@ -34,37 +24,18 @@
34
24
 
35
25
  ### 作業前サマリ(セッション向け・`JOSH_SESSION_LANG` の言語)
36
26
 
37
- ```md
38
- **■ 概要**
39
-
40
- - **今こうなっている**: <1文 — 利用者から見て何が起きているか>
41
- - **こう直す**: <1文 — 手段ではなく、直った後どうなるか>
42
- - **確かめ方**: <1文 — どう確認するか>
43
-
44
- **技術詳細**
45
-
46
- - 対象: <触るファイル / モジュール>
47
- - 方針: <アプローチとその理由>
48
- - 副作用 / スコープ外: <意図的にスコープ外にした点。なければ省略>
27
+ `pnpm josh report:template summary <触るファイル...>` が印字する。各欄に書くこと:
49
28
 
50
- **変更とテスト**
51
-
52
- 1. <変更内容> — Test: <Unit|E2E> — `<file path>` — <検証する挙動>
53
- - ケース: 正常 / 空・0件 / 1件 / 多数 / 境界 / 不正入力 / 重複 / 順序 / null
54
- - 該当しないものは消し、消した理由を添える(例:「重複: 該当なし — 入力は集合なので重複しない」)
55
- - 壊れるとしたら:
56
- 1. <この変更に固有の、壊れうる条件>
57
- 2. <...>
58
- 3. <...>
59
- 2. ...
60
- ```
29
+ - 概要の 3 行: 利用者から見て何が起きているか / 手段ではなく直った後どうなるか / どう確認するか
30
+ - 方針はアプローチとその理由、副作用 / スコープ外は意図的に外した点(なければ省略)
31
+ - 変更ごとの行は `<変更内容> — Test: <Unit|E2E> — <テストのファイルパス> — <検証する挙動>`
61
32
 
62
33
  テスト宣言はケース単位の 2 段で書く(joshuafolkken/kit#2246)。
63
34
 
64
- - 第 1 段(ケース)は固定語彙を並べ、**該当しないものは `該当なし` に続けて理由を書いて消す**
35
+ - 第 1 段(ケース)は固定語彙を並べ、**該当しないものは `該当なし` に続けて理由を書いて消す**(例:「重複: 該当なし — 入力は集合なので重複しない」)
65
36
  - 第 2 段(壊れるとしたら)は、この変更に固有の壊れうる条件を**最低 3 件**書く。書けないときは `どう呼ばれても壊れない` と明示する
66
37
  - 複数ケースは `it.each` 1 本に畳んでよい
67
- - 差分が HTTP・プロセス起動・ファイル IO・時間の境界を跨ぐときは、`pnpm josh cases <path...>` が印字する異常系を第 2 段に載せる
38
+ - 差分が HTTP・プロセス起動・ファイル IO・時間の境界を跨ぐとき、または共有状態(`.josh/` 配下・lock)や環境(`process.env`・常駐プロセス)に依存するときは、`pnpm josh cases <path...>` が印字する異常系を第 2 段に載せる。共有状態には同じ状態を読み書きする他のソースが `file:line` で付く
68
39
 
69
40
  ### 行数予算は編集前に読む
70
41
 
@@ -72,46 +43,46 @@
72
43
 
73
44
  ### 変更対象はまとめて読んでから編集する(joshuafolkken/kit#2202)
74
45
 
75
- **「変更とテスト」が変更対象ファイルを列挙したら、1 回の `pnpm josh read:files <path> [<path> ...]` で読み、続く独立した編集は 1 回の `pnpm josh edit:files -` で送る**(個別の `Edit` は依存する編集・1 件だけの編集・`Write` のとき)。詳細は [`turn-batching.md`](turn-batching.md) →「実装中の独立編集に効く合成コマンド」。
46
+ `pnpm josh read:files` / `edit:files` で畳む — [`turn-batching.md`](turn-batching.md) →「実装中の独立編集に効く合成コマンド」。
76
47
 
77
48
  ### 完了報告(セッション向け)
78
49
 
79
- ```md
80
- **■ 完了報告**
81
-
82
- - **原因**: <1文 — なぜそうなっていたか>
83
- - **対応**: <1文 — 何をしたか>
84
- - **結果**: <1文 — 利用者から見て何が変わったか>(v<version>)
50
+ `pnpm josh report:template done <変更したファイル...>` が印字する。各欄に書くこと:
85
51
 
86
- **技術詳細**
87
-
88
- - 変更ファイル: <...>
89
- - テスト結果: <...>
90
- - 実行証跡: <実行可能な経路を触った変更では、実際に叩いたコマンドとその出力(UI ならスクリーンショット)。無いなら理由>
91
- - 捕まえられた検証: <不具合修正のみ。その検証の種類を 1 行(2 回目は台帳で昇格, #2448)>
92
- - 残課題: <なければ「なし」>
93
- ```
52
+ - 概要の 3 行: なぜそうなっていたか / 何をしたか / 利用者から見て何が変わったか(版を添える)
53
+ - 実行証跡: 実行可能な経路を触った変更では、実際に叩いたコマンドとその出力(UI ならスクリーンショット)。無いなら理由
54
+ - 捕まえられた検証: 不具合修正のみ。その検証の種類を 1 行(2 回目は台帳で昇格, #2448)
55
+ - 残課題: なければ「なし」
94
56
 
95
57
  **実行証跡は「動くこと」の証拠であり、gate の緑ではない**(joshuafolkken/kit#2246)。同じ証跡を PR 本文の `## 実機証跡` 節(コマンド+実出力のフェンス)にも置く。無い実行時の変更は `pnpm josh followup` がマージを拒否する(#2446)。
96
58
 
97
59
  ### PR 本文の受け入れ条件の対応表
98
60
 
99
- `## 受け入れ条件の対応` 節の行の形(`pnpm josh pr` が識別子つきの `未記入` 行を付け、`pnpm josh followup` が照合する — `scripts/review/acceptance-map.ts`):
61
+ `## 受け入れ条件の対応` 節の行の形(`pnpm josh pr` が識別子つきの `未記入` 行を付け、`pnpm josh followup` が照合する — `scripts/review/acceptance-map.ts`)。`pnpm josh ship` の経路では、同じ識別子つきの `未記入` 行を `pnpm josh run:prep` / `pnpm josh run:step` の ship 事前要求が出し、同じ行と `## 実機証跡` 見出しを ship 本文の下書き(作業ツリーの git ディレクトリの `josh-ship-body-<N>.md`)にも書く。`--body-file` を省いた ship はこの下書きを本文として読む(`scripts/run/ship/run-ship-body-draft.ts`):
100
62
 
101
63
  ```md
102
64
  - `ac-1a2b3c4d` <条件> — 満たした: <テスト名・`file:line`・実行出力のいずれか>
103
65
  - `ac-5e6f7a8b` <条件> — 見送り: #<切り出した Issue> <理由>
104
66
  ```
105
67
 
68
+ ### PR 本文の消えたテストの処置
69
+
70
+ `## 消えたテストの処置` 節の行の形(`pnpm josh review:brief` が `Removed tests` として一覧化し、`pnpm josh ship` と `pnpm josh followup` が照合する — `scripts/review/removed-tests.ts`。緑の `pnpm josh test:related` が、テスト名入りの `未記入` 行を ship 本文の下書きに足す — `scripts/run/ship/run-ship-removed-rows.ts`):
71
+
72
+ ```md
73
+ - `<describe> > <テスト名>` — 置き換え: <いまその振る舞いを守るテスト名>
74
+ - `<describe> > <テスト名>` — 廃止: #<振る舞いの廃止を決めた Issue> <理由>
75
+ ```
76
+
106
77
  **`run:carry` の実行証跡は `JOSH_TEMP_ROOT` を新しい一時ディレクトリに向けて取る(必須)。** 状態レコードは本物の run と共有なので、`JOSH_TEMP_ROOT="$(mktemp -d)" pnpm josh run:carry --begin …` のように各コマンドの頭に付ける(`docs/environment-variables.md` → "Runs")。`run:merge` は main の同期・lane の close・GitHub への書き込みを行うため、これでは切り離せない。
107
78
 
108
79
  ### 区切りの報告(完了報告と区別する・必須)
109
80
 
110
- `backlogrun` の区切り(hand-off)は完了報告ではない — **`原因` / `対応` / `結果` を使わない**。書式は [`.claude/skills/workflow-commands/backlogrun-handoff-report.md`](../../.claude/skills/workflow-commands/backlogrun-handoff-report.md)。
81
+ `backlogrun` の区切り(hand-off)は完了報告ではない — **`原因` / `対応` / `結果` を使わない**。報告は `pnpm josh run:report --handoff` が印字し、手で書かない([`.claude/skills/workflow-commands/backlogrun-handoff-report.md`](../../.claude/skills/workflow-commands/backlogrun-handoff-report.md))。
111
82
 
112
83
  ### 概要 3 行の書き方(ここが本体)
113
84
 
114
- 字数と内部識別子の混入は `report:lint` が検査する。平易にするために語彙と抽象度を制約する:
85
+ 平易にするために語彙と抽象度を制約する:
115
86
 
116
87
  - 専門用語は使わないか、`〜(=…のこと)` の形でその場で言い換える
117
88
  - 変更点の羅列ではなく、原因 → 対応 → 効果の因果で書く
@@ -124,7 +95,7 @@
124
95
  - **何かが「古い」「壊れている」「変わらない」と書くときは、その対象を名指しする** — 対象パッケージ名・画面名・出力の種類のいずれかを含める
125
96
  - 主語のない「状況」「案内」「問題」「その処理」だけで済ませない
126
97
  - 書いてよい具体名: 利用者が画面で目にするもの — パッケージ名、表示されるコマンドの目的、画面名、メッセージの種類
127
- - 書いてはいけない具体名: 内部識別子 — ファイルパス、関数名・型名、CLI のオプションフラグ
98
+ - 書いてはいけない具体名: 内部識別子(上記「作業前サマリはいつ・どう出すか」)
128
99
 
129
100
  悪い例は「古いままだと警告が出るのに、案内されたコマンドを実行しても状況が変わらない」(何の話か特定できない)。良い例:
130
101
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  > **その規則が効き始める瞬間を、1 件のツール呼び出しとして名指しできるか。**
26
26
 
27
- できるなら、規則本文を常駐から出し、配送ガードの行に `scripts/rules/rule-registry.ts` の項目を添え、[`rule-delivery.md`](./rule-delivery.md) が指す `pnpm josh rule:list` の一覧に載せる(joshuafolkken/kit#1524)。**規則ごとのトリガ行は常駐に残さない** — `CLAUDE.md` には一覧への導線 1 行だけを置く。フックが走らないセッションは一覧を自己点検に使う(`principles.md` →「Claude Code 以外のエージェントでの読み替え」)。
27
+ できるなら、規則本文を常駐から出し、配送ガードの行に説明(`about`)を持たせ、[`rule-delivery.md`](./rule-delivery.md) が指す `pnpm josh rule:list` の一覧に載せる(joshuafolkken/kit#1524)。**規則ごとのトリガ行は常駐に残さない** — `CLAUDE.md` には一覧への導線 1 行だけを置く。フックが走らないセッションは一覧を自己点検に使う(`principles.md` →「Claude Code 以外のエージェントでの読み替え」)。
28
28
 
29
29
  ### 第 2 問 — skill なしのターンでも効く必要があるか
30
30
 
@@ -36,6 +36,6 @@
36
36
 
37
37
  - **常駐規則は、トリガと導線の 2 つで書く。** **判定は、導線を一度も開かないターンでも常駐の記述だけで正しく振る舞えるかである。**
38
38
  - **削ることは移すことであり、削除は理由を示して初めて許される例外である。** 先に導線の先へ移し、マーカーテストも付け替える。移さず引退させてよいのは 3 条件がすべて揃うときだけ — 同じ文書に単一ソースが宣言された文の写しである・単一ソースと突き合わせてほかにない文を含まない・マーカーテストが固定していない。揃わなければ候補と証拠を記録して規則は残す
39
- - 経緯(Issue 番号・なぜ・計測・却下案)は `docs/maintainers/<topic>-rationale.md` に置き、その冒頭で説明する手順文書を名指しする。**参照の向きは根拠 → 手順だけ** — AI が読む文書から根拠文書は指さない(`scripts/document/rationale-documents.test.ts` が検出する)。Issue 番号引用の件数は `scripts/document/issue-citation-budget.ts` のラチェットに従う — 減らしたら記録も下げる
39
+ - 経緯(Issue 番号・なぜ・計測・却下案)は `docs/maintainers/<topic>-rationale.md` に置き、その冒頭で説明する手順文書を名指しする。**参照の向きは根拠 → 手順だけ** — AI が読む文書から根拠文書は指さない(`scripts/document/rationale-documents.test.ts` が検出する)。Issue 番号引用の件数は `tools/document/issue-citation-budget.ts` のラチェットに従う — 減らしたら記録も下げる
40
40
  - 引用は本文があるファイルを直接指す
41
41
  - 予算が詰まったら回収で解く。**引き上げは Tier C として扱う** — `RESIDENT_CEILING_BYTES`・`RESIDENT_HEADROOM_BYTES`・`RE_INLINE_GUARD_HEADROOM_BYTES` の緩和は、3 条件(回収の余地が尽きたことを計測で示す・需要が 1 規則ではなく常駐すべき規則数の増加から来る・増やす量は需要と回収可能量の差だけで丸めない)を示し、ユーザーの明示指示を得てから行う。条件が揃うこと自体は指示ではない
@@ -1,22 +1,10 @@
1
1
  ## 本文をシェルの二重引用符に載せない(joshuafolkken/kit#1198)
2
2
 
3
- `CLAUDE.md` からは [`rule-delivery.md`](./rule-delivery.md) →「配送されている規則」を経て届く。[`file-edits.md`](./file-edits.md) が防ぐのはコストの二重払い、こちらが防ぐのは**テキストが実行されること**である。
4
-
5
- ### 何が起きるのか
6
-
7
- 二重引用符の中のバッククォートと `$` は実行前に評価される。次の呼び出しは `pnpm josh ms` を実行し、その出力を本文に埋め込む。
8
-
9
- ```bash
10
- gh api repos/{owner}/{repo}/issues/1535/comments -f body="… `pnpm josh ms` は …"
11
- ```
12
-
13
- `pnpm josh followup --notify-message "…"` も同じく壊れる。
14
-
15
- 発火するのは `` ` `` と `$` で、`!` ではない。
3
+ 防ぐのは本文の**テキストが実行されること**である。二重引用符の中の `` ` `` と `$` は実行前に評価される(`!` は評価されない)。
16
4
 
17
5
  ### 安全な書き方
18
6
 
19
- **本文をファイルに書いて、パスで渡す。**
7
+ **本文をファイルに書いて、パスで渡す。** `--body-file` の本文や計画メモは `.josh/tmp/` に置く(ignore 済みなのでコミットに混ざらない)。
20
8
 
21
9
  ```bash
22
10
  pnpm josh issue:comment <N> --body-file <path>
@@ -29,7 +17,9 @@ PR コメントも `pnpm josh issue:comment <N> --body-file <path>` で投稿す
29
17
 
30
18
  ### コメント投稿は `pnpm josh issue:comment` の 1 綴りだけ(joshuafolkken/kit#2304)
31
19
 
32
- `gh api` の `-f body=@<path>` / `--raw-field body=@<path>` は `@<path>` というリテラルを黙って投稿する。**Issue/PR コメントの投稿は `pnpm josh issue:comment <N> --body-file <path>` ただ 1 綴りに寄せる。** `-f body=@…` は `pnpm josh rule:guard` が実行前に拒否する(`raw-field-body` 行、`scripts/rules/raw-field-body.ts`)。Issue body 書き換えの `-X PATCH ... --field body=@<path>` は `-F` 側で安全なのでそのまま使う。
20
+ 自リポジトリへの `gh issue comment` / `gh api` コメント投稿 → `direct-issue-comment` 行が拒否する(`scripts/rules/direct-issue-comment.ts`)。
21
+
22
+ `-f body=@<path>` は `@<path>` というリテラルを投稿するので、`raw-field-body` 行が拒否する。Issue body 書き換えの `--field body=@<path>` は安全なのでそのまま使う。
33
23
 
34
24
  `--body-file` / `--notify-message-file` は `-` で標準入力を読む(実装は `scripts/josh/cli-body.ts`)。`--body` と `--body-file` の同時指定は拒否される。
35
25
 
@@ -37,4 +27,4 @@ PR コメントも `pnpm josh issue:comment <N> --body-file <path>` で投稿す
37
27
 
38
28
  ### 引き金つき配送
39
29
 
40
- `pnpm josh rule:guard` は、二重引用符の本文値にバッククォートか `$` を含む `Bash` 呼び出しを拒否する。拒否されたら本文をファイルに移して出し直す。**引き金が見えない綴り(`-b`・`-f title=` など)でも、フックが走らないエージェントでも規則は同じく拘束する。**
30
+ `shell-body` 行が強制する。引き金が見えない綴り(`-b`・`-f title=` など)でも規則は同じく拘束する。
@@ -1,7 +1,5 @@
1
1
  # 独立した呼び出しは同じターンに載せる(joshuafolkken/kit#1304)
2
2
 
3
- 常駐側には [`rule-delivery.md`](./rule-delivery.md) →「配送されている規則」への導線だけが残り、規則本文は `pnpm josh batch:guard` が効く瞬間に配送する。
4
-
5
3
  ## 何を求めているか
6
4
 
7
5
  > **この呼び出しの入力は、いま出していない別の呼び出しの結果に依存しているか。**
@@ -14,7 +14,7 @@
14
14
 
15
15
  **実行中のリポジトリ自身はこの手順の対象外である。** kit の中で kit のラン機構(`backlog:drive`、`run:wake`、`run:carry`、レーン、分類、カウンタ、ガードなど)の不具合を見つけたら、上流 Issue で停止する代わりに、このリポジトリの割り込みとして次を行う。
16
16
 
17
- 1. **起票する** — `pnpm josh issue:file "<title>" --body-file <path> --depth <n> --route interrupt --label priority:high`。上限は効かない(`wip-cap.md` →「割り込み起票 — 上限が効かない側」の条件 2)
17
+ 1. **起票する** — `pnpm josh issue:file "<title>" --body-file <path> --route interrupt --label priority:high`。上限は効かない(`wip-cap.md` →「割り込み起票 — 上限が効かない側」の条件 2)
18
18
  2. **止まらずに直す** — 壊れた機構を迂回せず、検証ゲートも緩めない。`backlogrun` の中では割り込みを次の子にし、着地後に塞がれていた子へ戻る(プールでは `priority:high` が先頭、epic の下では `wip-cap.md` の手順 3 で挿入、名前指定のランでは `pnpm josh lane:launch <N>` で自分で dispatch)。バッチの外では `wip-cap.md` の手順 4 どおり、打つべき `fullrun #<N>` を報告して止まる
19
19
  3. **再開できるなら自分で再開し、動くことを確かめる** — 修正のマージ後、手渡し済み・所有者が死んだ記録・監督プロセスの停止(`warning` Telegram)には `pnpm josh run:wake --start`、`run:carry` の `standing` には `pnpm josh run:carry --resume "<invocation>" --owner "$PPID"` を打つ。`pnpm josh run:wake --list` が監督プロセスを示し、ログに次の子の dispatch が現れることを確かめて報告する
20
20
  4. **人に打ち直しを求めるのは再開の手段が無いときだけ** — `mismatch`(別の起動の記録)、別の生きた所有者の `busy`。新しい承認を宣言するのは人だけ
@@ -22,15 +22,25 @@
22
22
 
23
23
  手順:
24
24
 
25
- 1. **現在の作業を退避する**: `git stash push -u -m "upstream-interrupt: paused #<N>"`(WIP コミットでも可)
25
+ 1. **現在の作業を退避する**: `pnpm josh stash:push "upstream-interrupt: paused #<N>"`(WIP コミットでも可)
26
26
  2. **進行中の Issue に状況を書く**: `pnpm josh issue:comment <N> --body-file <path>` で、stash したこと、中断理由(どの別パッケージのどんな問題か)、新 Issue へのリンク(`## Upstream issues` 見出しの下に `owner/repo#N` 形式、→「起票元へのバックリンク」)
27
- 3. **対象パッケージのリポジトリに Issue を作成する(確認なし)**: `pnpm josh issue:file "<root-cause title>" --body-file <body-file> --depth <n> --route tier-a --repo <owner>/<repo>`(joshuafolkken/kit#1083)。検査・分類ラベル・重複探し・`epic:bundle` はコマンドが行う(`docs/josh-commands-backlog.md` → `josh issue:file`)。根本原因・再現・期待結果を `prompts/collaboration-workflow/issue-template.md` の Step 1 のテンプレで書き、`## Origin` 節に起票元 Issue を `owner/repo#N` 形式で書く
27
+ 3. **対象パッケージのリポジトリに Issue を作成する(確認なし)**: `pnpm josh issue:file "<root-cause title>" --body-file <body-file> --route tier-a --repo <owner>/<repo>`(joshuafolkken/kit#1083)。検査・分類ラベル・重複探し・`epic:bundle` はコマンドが行う(`docs/josh-commands-backlog.md` → `josh issue:file`)。根本原因・再現・期待結果を `prompts/collaboration-workflow/issue-template.md` の Step 1 のテンプレで書き、`## Origin` 節に起票元 Issue を `owner/repo#N` 形式で書く
28
28
  4. **`confirmation` Telegram を送って停止する**: 上流 Issue の URL と何が止まっているかを書く(→ `CLAUDE.md` → "Mid-workflow stop notification (`confirmation`)")
29
29
  5. **元の作業を再開する**: 上流の修正がマージされた、またはユーザーが先送りを明示判断した後に `pnpm josh stash:pop "upstream-interrupt: paused #<N>"` で復元する(`operating-rules.md` → "no-self-staging")。上流 Issue を割り込みで実装するかもユーザーが決める
30
30
 
31
+ ### first-party の Issue・PR への書き込みは確認不要
32
+
33
+ `pnpm josh repo:party` が `first-party` と答えたリポジトリの Issue・PR への書き込みは Tier A で、ユーザーに確認しない。起票、コメント、ラベル、本文の編集、`@dependabot rebase` などの Dependabot へのコマンドコメントを含む。
34
+
35
+ - 頼まれていない観察の起票はこの節で許可しない: この節が外すのは書き込み先の確認だけ。起票するかは `.claude/skills/workflow-commands/observation-filing.md` に従う
36
+ - `unknown` はこの節の対象外: first-party と判定できないので、書き込む前にユーザーに確認する
37
+
38
+ - **「外部への書き込み」は third-party への書き込みだけを指す**。first-party への書き込みをそう呼ばない
39
+ - マージ・ブランチ削除などの共有状態の操作は書き込みに含まれず、Tier C のまま(`CLAUDE.md` → "Git Rules")
40
+
31
41
  ### 第三者リポジトリへの書き込みは Tier C(明示指示が必要)
32
42
 
33
- 「起票は確認なし」は first-party だけに成り立つ。
43
+ 「起票は確認なし」も「書き込みは確認不要」も first-party だけに成り立つ。
34
44
 
35
45
  - **判定は `pnpm josh repo:party [<owner/repo>]` が答える**: `first-party` / `third-party` / `unknown`(unknown は third-party 扱いしない)。fork や contribute しているだけの org リポジトリも third-party
36
46
  - **third-party への書き込みは種別を問わず Tier C**: Issue・コメント・PR・Discussion・レビュー、既存 Issue のクローズ・編集も、その turn のユーザーの明示指示なしに行わない。正しい診断も許可ではない
@@ -55,7 +55,7 @@
55
55
  1. **上限に関係なく起票する。** 1 件閉じることを条件にしない。本文の検査、分類ラベルの付与、重複探し、`epic:bundle` はコマンドが行う(`docs/josh-commands-backlog.md` → `josh issue:file`)。
56
56
 
57
57
  ```bash
58
- pnpm josh issue:file "<title>" --body-file <body-file> --depth <n> --route interrupt
58
+ pnpm josh issue:file "<title>" --body-file <body-file> --route interrupt
59
59
  ```
60
60
 
61
61
  2. 超過している事実と当たった条件の番号を、両方とも本文に 1 行書く(例:「オープン 37 件で起票。3 条件のうち 2(文書化された手順が完了できない)に該当」)。
@@ -1,13 +1,8 @@
1
1
  # Issue-Driven Collaboration Workflow
2
2
 
3
- 複数の AI ツール(Claude / Cursor / Gemini)で共通に使う Issue 駆動ワークフローの**索引**。
3
+ 複数の AI ツール(Claude / Cursor / Gemini)で共通に使う Issue 駆動ワークフローの**索引**。人間が読むための索引であり、規則を定める場所ではない。必要な 1 本だけを開く。
4
4
 
5
- ## この索引の使い方
6
-
7
- 人間が読むための索引であり、規則を定める場所ではない。常駐の引き金は `CLAUDE.md`、実行中の手順は `.claude/skills/workflow-commands/`、各話題の規則は下表のファイルが一次情報である。
8
-
9
- - 下表から必要な 1 本だけを開く。
10
- - 他の文書から話題を指すときは、索引でなく**本文があるファイルを直接指す**([`residency.md`](./collaboration-workflow/residency.md))。
5
+ 他の文書から話題を指すときは、索引でなく**本文があるファイルを直接指す**([`residency.md`](./collaboration-workflow/residency.md))。
11
6
 
12
7
  | 話題 | ファイル |
13
8
  | ---------------------------------------------------------- | ------------------------------------------------------------------------- |
@@ -27,6 +22,7 @@
27
22
  | 常駐ドキュメントと skill の分担 | [`residency.md`](./collaboration-workflow/residency.md) |
28
23
  | 引き金つき配送 — 規則を効く瞬間に届ける | [`rule-delivery.md`](./collaboration-workflow/rule-delivery.md) |
29
24
  | コマンド出力が文脈へ持ち込む量の上限 | [`output-bounds.md`](./collaboration-workflow/output-bounds.md) |
25
+ | 所要時間は記録から測る | [`measurement.md`](./collaboration-workflow/measurement.md) |
30
26
  | 運用ルール | [`operating-rules.md`](./collaboration-workflow/operating-rules.md) |
31
27
  | 用語集 — lane・cut・hold・park など | [`glossary.md`](./collaboration-workflow/glossary.md) |
32
28
  | headless のレーン子・レビューの起動時の規則セット | [`lane-instructions.md`](./collaboration-workflow/lane-instructions.md) |
@@ -90,4 +90,4 @@ lint が一部の面しか見ない項目だけを挙げる。コーディング
90
90
 
91
91
  ## 実装後の品質保証(絶対遵守)
92
92
 
93
- 実装後は `read_lints` → `pnpm run lint` の順で全関与ファイルを確認し、エラー0件になるまで修正する。エラーが残ったまま完了報告しない。
93
+ 実装後は `pnpm josh lint:related` → `pnpm josh gate` の順で全関与ファイルを確認し、エラー0件になるまで修正する。エラーが残ったまま完了報告しない。レーン子の gate は `josh ship` が回す(`.claude/skills/workflow-commands/chain-rule.md` → "Run the review-to-merge chain" step 0)。
@@ -171,7 +171,7 @@ switching `no-restricted-syntax` off.
171
171
  ### 6. Tests
172
172
 
173
173
  - Every code change has a corresponding test (unit or E2E) per `CLAUDE.md` Code Change Rules Step 0
174
- - Test titles are English only and describe behavior, not implementation
174
+ - Test titles describe behavior, not implementation
175
175
  - **Mutation check**: for the most critical test added or changed — if the key assertion/condition in
176
176
  the implementation were inverted or removed, would it fail? If no or uncertain, rewrite it.
177
177
  - **Requirement check**: does the test verify the behavior the issue/task describes, or only that code
@@ -179,7 +179,6 @@ switching `no-restricted-syntax` off.
179
179
 
180
180
  ### 7. Comments & content
181
181
 
182
- - Comments are English only
183
182
  - No narration comments (`// Added for issue #123`, `// TODO: refactor later`) — only non-obvious _why_
184
183
  - No duplicated logic that should be extracted
185
184
 
package/prompts/review.md CHANGED
@@ -24,9 +24,10 @@ first review counts), whichever comes first. Round 2 is a verification pass over
24
24
 
25
25
  ## Before round 1 — the implementer's self-check
26
26
 
27
- Answer these five over your own diff before the scoped pair that precedes round 1, and fix what an
28
- answer turns up (about two in three of 135 sampled round-1 High/Medium findings fell under one). The
29
- review, its severity tests and the round cap are unchanged.
27
+ Answer these nine over your own diff before the scoped pair that precedes round 1, and fix what an
28
+ answer turns up (about four in five of 100 sampled High/Medium findings that stopped lane reviews
29
+ fell under one; `pnpm josh lane:stats` counts the kinds that still stop). The review, its severity
30
+ tests and the round cap are unchanged.
30
31
 
31
32
  1. **Tests pin the change** — for each condition, branch or call added or changed, name the test that
32
33
  turns red when it is deleted or inverted, and check its fixture reaches that branch (no assert on a
@@ -38,8 +39,24 @@ review, its severity tests and the round cap are unchanged.
38
39
  path returns something a caller can tell apart from `false`, `undefined` or "nothing found".
39
40
  4. **Every caller moved with it** — grep every reference to a changed function, list or command, and
40
41
  update each sibling path (the other CLI, the registry, the consumer side) in the same change.
42
+ The readers outside the diff: `pnpm josh review:brief` → `## Readers outside the diff`.
41
43
  5. **The Issue is met on HEAD** — the premises you relied on hold on the current tree, and each
42
44
  acceptance criterion is checked against the diff.
45
+ 6. **State is read fresh** — for every record, stamp, snapshot, memo or ledger a decision reads, name
46
+ its writer and check it cannot be older than the decision (a past `success`, a tick's shared
47
+ snapshot, a sync before the commit) or written by another run in between.
48
+ 7. **The rule covers its whole input space** — list every kind of input a scan, pattern, matcher or
49
+ lookup must accept or reject (the sibling file type, the consumer's config beside the root, quoted
50
+ text, a subshell, a pipe, a heredoc) and pin one test row per kind.
51
+ 8. **Edge inputs and environments** — say what the change does when its input is empty, absent or
52
+ new, and outside a TTY, a lane or the default agent runtime.
53
+ 9. **Claims about other components are checked in their code** — for every claim your code or a
54
+ comment makes about another component's behavior (what a stage does, who enforces a limit, which
55
+ repository it runs in), open that component's code and confirm it; then name each context the
56
+ change runs in — kit and a consumer, and a predecessor that died midway leaving its record behind.
57
+
58
+ The brief lists `Removed tests` → each needs a `## 消えたテストの処置` row in the PR body, or the
59
+ merge is refused: `prompts/collaboration-workflow/report-format.md` → "PR 本文の消えたテストの処置".
43
60
 
44
61
  ---
45
62
 
@@ -59,10 +76,20 @@ pnpm josh review:brief --level-only --staged # the staged diff
59
76
 
60
77
  ---
61
78
 
79
+ ## Interaction review
80
+
81
+ After round 1 and its record, `pnpm josh review:brief --interaction` answers whether the change takes
82
+ the interaction review and prints its brief; hand it to a reviewer subagent, dispose of the findings
83
+ by the three-way disposition below, and record the pass with
84
+ `pnpm josh review:record --interaction --issue <N> [<category>:<severity>:<file> ...]`.
85
+
86
+ `pnpm josh followup` refuses a due change with none recorded; `pnpm josh ship --review` runs it itself.
87
+
62
88
  ## Review round cap (2 rounds)
63
89
 
64
90
  Two rounds is the ceiling, not the schedule: every fix creates new surface a further round would find
65
- something in. Whether round 2 is due is `pnpm josh review:round2`'s answer (below).
91
+ something in. Whether round 2 is due is `pnpm josh review:round2`'s answer (below). The interaction
92
+ review is not one of the two.
66
93
 
67
94
  ### A merge-conflict resolution review is not one of the two
68
95
 
@@ -95,13 +122,8 @@ deferred. Without the flag, and on any uncertainty (a missing round-1 snapshot i
95
122
  One path outside that set makes it `required` — `.claude/**`, `CLAUDE.md`, a test, configuration, a
96
123
  code line, or a source file whose comment-free text cannot be read.
97
124
 
98
- Record a skipped round on the Issue:
99
-
100
- 1. Label the Issue `review-round2-skipped`, created once per repository:
101
- `gh api repos/{owner}/{repo}/labels -f name=review-round2-skipped -f color=c5def5 -f description="Review round 2 was skipped under the condition in prompts/review.md" --silent 2>/dev/null || true`,
102
- then `gh api repos/{owner}/{repo}/issues/<N>/labels -f 'labels[]=review-round2-skipped'`.
103
- 2. Comment under `## Round 2 skipped`, naming which arm fired and quoting the command's reason line
104
- verbatim.
125
+ Record a skipped round on the Issue with a comment under `## Round 2 skipped`, naming which arm fired
126
+ and quoting the command's reason line verbatim.
105
127
 
106
128
  ### Three-way disposition after the cap
107
129
 
@@ -139,19 +161,17 @@ Branch 2 only:
139
161
  a `fold`; the first filing asks nothing.
140
162
 
141
163
  1. Before the current Issue closes, file it tagged `route:review-cap`:
142
- `pnpm josh issue:file "<title>" --body-file <body-file> --depth <n> --route review-cap`. It lints
164
+ `pnpm josh issue:file "<title>" --body-file <body-file> --route review-cap`. It lints
143
165
  the body, applies the declared labels, runs the duplicate scan and `epic:bundle`
144
166
  (`docs/josh-commands-backlog.md` → `josh issue:file`). `epic:bundle` reads open issues only, so
145
167
  after the parent closes it answers `none` permanently.
146
- 2. Act on the printed `epic:bundle` answer by running the write command yourself — `epic:bundle`
147
- writes nothing, and a hand edit of the epic body leaves the task list and `blocked-by` relations
148
- disagreeing (`epic:next` returns `error`). Tier A, no confirmation:
149
- - `add_to_epic` → `pnpm josh epic --add <E> <new>`, with `--before <M>` / `--after <M>` when the
150
- relation carries an order.
151
- - `create_epic` → `pnpm josh epic "<title>" <new> <other> [--ordered]`.
152
- - `ask` (candidates across two or more epics) → run the recommended epic's write command and record
153
- what was taken, what was rejected and why on the new Issue and that epic's `## Decisions`. Stop
154
- only where the two epics are genuinely too close to separate.
168
+ 2. Act on the printed `epic:bundle` answer with `pnpm josh epic:bundle <new> --apply` — never a
169
+ hand edit of the epic body, which leaves the task list and `blocked-by` relations disagreeing
170
+ (`epic:next` returns `error`). Tier A, no confirmation:
171
+ - `add_to_epic` / `create_epic` → `--apply` writes it, with any recorded order.
172
+ - `ask` (candidates across two or more epics) → `--apply` writes nothing; place it in the
173
+ recommended epic with `pnpm josh epic --add <E> <new> --decision-file <path>`
174
+ (`.claude/skills/epic-commands/epic-bundle.md`).
155
175
  - `none` → nothing.
156
176
  - Non-zero exit, or any ⚠ warning above `Nothing to bundle.` → stop and report what it said; a
157
177
  `none` after such a warning is not "nothing to bundle".
@@ -2,20 +2,7 @@
2
2
 
3
3
  ## 0. Per-Requirement Test Coverage (MANDATORY)
4
4
 
5
- Before any implementation code, **list every requirement from the user's request and assign a test to each one**.
6
-
7
- ### Planning template
8
-
9
- ```text
10
- Req 1: "Label chip shown immediately"
11
- → E2E: open editor, type new label, press Enter → chip visible without blurring
12
-
13
- Req 2: "Down arrow moves to next row"
14
- → E2E: open editor on row 1, press ↓ → row 2 enters edit mode
15
-
16
- Req N: ...
17
- → Unit/E2E: ...
18
- ```
5
+ Every requirement gets a test (`CLAUDE.md` → "Code Change Rules" Step 0); the declaration's form is `prompts/collaboration-workflow/report-format.md` → "作業前サマリはいつ・どう出すか". This section decides which test.
19
6
 
20
7
  ### Rules
21
8
 
@@ -24,7 +11,6 @@ Req N: ...
24
11
  - **Non-runtime updates (pre-approved manual-only exception):** a change touching no executable runtime code path — docs, non-executable config, editor/IDE files, cosmetic asset swaps with no selector/path change — may be verified by hand; declare it in Step 0 with the reason. The mechanically exempt (`*.md`, `.editorconfig`, `.idea/**`, `.vscode/**`, `prompts/**`) need no declaration. A runtime change whose test is infeasible needs the reason and user approval.
25
12
  - **basic で kit がテストできない言語だけの変更:** `package.json` に `josh.profile: basic`(改名前の `static` も同じ)があり、変更が HTML/CSS や Lua などのソースだけなら自動テストは不要。HTML/CSS はブラウザーで対象ページを開き、想定する画面幅でレイアウト・リンク・HTML 内の操作を確認する。そのほかのソースは変更した処理を実際に動かす。どちらも結果を記録する。JavaScript または TypeScript のファイルを含む変更は自動テストを行う。
26
13
  - Test infeasible (e.g., a native OS date-picker Playwright cannot drive) → comment why in the test file and test the closest observable behavior (e.g., the editor stays open after `change`).
27
- - A requirement without its test is not done.
28
14
 
29
15
  ### Verification checklist (add to the completion gate)
30
16
 
@@ -58,10 +44,7 @@ Req N: ...
58
44
 
59
45
  ## 2. Test Guidelines
60
46
 
61
- ### Naming
62
-
63
- - Variables/functions: `snake_case` | Constants: `UPPER_SNAKE_CASE`
64
- - Boolean prefix: `is_`, `has_`, `should_`, `can_`, `will_`, `did_`
47
+ Naming, imports, `any`, `@ts-ignore`, magic numbers, template `String()` and the 10-statement limit are lint-enforced (`eslint/base.js`); this section holds only what lint cannot see.
65
48
 
66
49
  ### Test Functions
67
50
 
@@ -73,15 +56,6 @@ Req N: ...
73
56
  - Playwright: `for` loop; Vitest: `test.each` / `it.each`
74
57
  - Cases: a `cases` or `*_cases` array at file top, outside test functions
75
58
 
76
- ### Constants
77
-
78
- - Magic numbers/strings except `0`, `1`, `-1` → `UPPER_SNAKE_CASE` constants after the imports
79
-
80
- ### Imports
81
-
82
- - Always the `.js` extension: `import { foo } from './bar.js'`
83
- - Type imports: `import { type Foo } from '...'`
84
-
85
59
  ### Playwright
86
60
 
87
61
  - Select with `page.getByTestId('id')`; add `data-testid` to the implementation
@@ -102,17 +76,6 @@ When tests leave persistent state behind:
102
76
  ### Error Messages
103
77
 
104
78
  - State expected and actual values
105
- - Wrap `number` in template literals with `String()`
106
- - No `?? ''` unless the value can be `undefined`
107
-
108
- ### Type Safety
109
-
110
- - No `any`; use every loop variable
111
- - `@ts-expect-error`, not `@ts-ignore`
112
-
113
- ### Statement Limit
114
-
115
- - Max 10 statements per test function; split beyond that
116
79
 
117
80
  ### No live network
118
81
 
@@ -122,15 +85,15 @@ When tests leave persistent state behind:
122
85
 
123
86
  ### A josh command that writes state runs through the integration harness (kit only)
124
87
 
125
- - A new or changed state-writing josh command needs a test in all three environments of `scripts/test/josh-harness.ts` — kit, a consumer without `docs/`, a lane worktree (joshuafolkken/kit#2402). Packed suite: `vitest.harness.config.ts`
88
+ - A new or changed state-writing josh command needs a test in all three environments of `tools/test/josh-harness.ts` — kit, a consumer without `docs/`, a lane worktree (joshuafolkken/kit#2402). Packed suite: `vitest.harness.config.ts`
126
89
 
127
90
  ---
128
91
 
129
92
  ## 3. Checklist
130
93
 
131
- - [ ] `pnpm josh gate`, then E2E per § 6: the CI E2E job where a pull request is open; where there is none, run `pnpm josh test:e2e` with `CI` unset (DEV: `pnpm run dev` on the port `playwright.config.ts` derives from `PORT_SEED`); no `pnpm build` or `CI=true` unless asked. Playwright cannot run here → report the E2E result missing and the gate not closed
132
- - [ ] `read_lints`: 0 errors on touched files; Playwright: no failures and no flaky runs
133
- - [ ] § 2 holds: constants, `.js` imports, `data-testid` selectors, correct `async`/`await`, no `any`, ≤10 statements, `String()` / no needless `?? ''`
94
+ - [ ] `pnpm josh gate`, then the E2E gate per § 6
95
+ - [ ] `pnpm josh lint:related`: 0 errors on touched files; Playwright: no failures and no flaky runs
96
+ - [ ] § 2 holds: `data-testid` selectors, `async` Playwright tests, expected/actual in error messages
134
97
 
135
98
  ---
136
99
 
@@ -161,6 +124,8 @@ Decided by whether a pull request is open:
161
124
 
162
125
  **Never ask the user to run it**, in either row, and never report completion on an unread E2E result — unread is not a pass.
163
126
 
127
+ Second row: run with `CI` unset (DEV: `pnpm run dev` on the port `playwright.config.ts` derives from `PORT_SEED`); no `pnpm build` or `CI=true` unless asked. Playwright cannot run here → report the E2E result missing and the gate not closed.
128
+
164
129
  Second row: prefer an integrated gate when the installed toolkit's printed command list has one (not by toolkit or version) — `@joshuafolkken/app-kit`'s `pnpm josh-app verify` builds and boots once for E2E and the DAST scan, delegating E2E to `josh test:e2e` (so the skip below applies).
165
130
 
166
131
  ### A project with no E2E suite
@@ -1,15 +1,11 @@
1
1
  import { json_value } from '#scripts/lib/json-value'
2
+ import { transcript_record, type TranscriptRecord } from '#scripts/lib/transcript-record'
2
3
  import { z } from 'zod'
3
4
  import type { AgentProvider } from './agent-role-profile'
4
5
  import { claude_result_event } from './claude-result-event'
5
6
 
6
- const TEXT_BLOCK_SCHEMA = z.looseObject({ type: z.literal('text'), text: z.string() })
7
- const CLAUDE_MESSAGE_SCHEMA = z.looseObject({ content: z.array(z.unknown()).optional() })
7
+ const ASSISTANT_TYPE = 'assistant'
8
8
  const CLAUDE_INIT_SCHEMA = z.looseObject({ type: z.literal('system'), subtype: z.literal('init') })
9
- const CLAUDE_ASSISTANT_SCHEMA = z.looseObject({
10
- type: z.literal('assistant'),
11
- message: CLAUDE_MESSAGE_SCHEMA,
12
- })
13
9
  const USAGE_SCHEMA = z.looseObject({
14
10
  input_tokens: z.number().optional(),
15
11
  cached_input_tokens: z.number().optional(),
@@ -58,12 +54,16 @@ function usable_text(value: unknown): string | undefined {
58
54
  return typeof value === 'string' && value.trim() !== '' ? value : undefined
59
55
  }
60
56
 
61
- function claude_progress(content: ReadonlyArray<unknown>): string | undefined {
62
- return content
63
- .map((block) => TEXT_BLOCK_SCHEMA.safeParse(block))
64
- .filter((parsed) => parsed.success)
65
- .map((parsed) => parsed.data.text)
66
- .findLast((text) => text.trim() !== '')
57
+ function claude_progress(record: TranscriptRecord): string | undefined {
58
+ return transcript_record
59
+ .blocks_of(record)
60
+ .filter((block) => block.type === transcript_record.TEXT_TYPE)
61
+ .map((block) => usable_text(block.text))
62
+ .findLast((text) => text !== undefined)
63
+ }
64
+
65
+ function is_claude_assistant(record: TranscriptRecord | undefined): record is TranscriptRecord {
66
+ return record?.type === ASSISTANT_TYPE && record.message !== undefined && record.message !== null
67
67
  }
68
68
 
69
69
  function claude_result(value: unknown, state: AgentEventState): AgentEventState | undefined {
@@ -80,9 +80,9 @@ function claude_result(value: unknown, state: AgentEventState): AgentEventState
80
80
  }
81
81
 
82
82
  function claude_assistant(value: unknown, state: AgentEventState): AgentEventState | undefined {
83
- const assistant = CLAUDE_ASSISTANT_SCHEMA.safeParse(value)
84
- if (!assistant.success) return undefined
85
- const progress = claude_progress(assistant.data.message.content ?? []) ?? state.progress
83
+ const record = transcript_record.read(value)
84
+ if (!is_claude_assistant(record)) return undefined
85
+ const progress = claude_progress(record) ?? state.progress
86
86
 
87
87
  return { ...state, provider: 'anthropic', progress }
88
88
  }
@@ -42,6 +42,18 @@ function is_mid_turn(transcript: string): boolean {
42
42
  return TURN_TYPES.has(last)
43
43
  }
44
44
 
45
- const agent_exit_record = { is_mid_turn, read_exit_record }
45
+ // Whether the transcript's last line is its exit record. A log appended across launches keeps an
46
+ // earlier session's record, so a later session that died before finishing — inside a turn, or on a
47
+ // start-up error that is not JSON — leaves something else last and its own ending unread.
48
+ function ends_on_exit_record(transcript: string): boolean {
49
+ const last = transcript.split('\n').findLast((line) => line.trim() !== '')
50
+
51
+ return (
52
+ last !== undefined &&
53
+ claude_result_event.decode(json_value.parse_or_undefined(last)) !== undefined
54
+ )
55
+ }
56
+
57
+ const agent_exit_record = { ends_on_exit_record, is_mid_turn, read_exit_record }
46
58
 
47
59
  export { agent_exit_record }