@joshuafolkken/kit 1.1166.0 → 1.1229.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 (437) hide show
  1. package/.claude/.claude-plugin/plugin.json +1 -1
  2. package/.claude/settings.json +2 -2
  3. package/.claude/skills/dependency-update/SKILL.md +4 -8
  4. package/.claude/skills/epic-commands/SKILL.md +2 -2
  5. package/.claude/skills/epic-commands/epic-bundle.md +1 -1
  6. package/.claude/skills/workflow-commands/SKILL.md +2 -4
  7. package/.claude/skills/workflow-commands/backlogrun-child.md +6 -4
  8. package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -5
  9. package/.claude/skills/workflow-commands/backlogrun-park.md +29 -9
  10. package/.claude/skills/workflow-commands/backlogrun-progress.md +7 -2
  11. package/.claude/skills/workflow-commands/backlogrun-recovery.md +4 -3
  12. package/.claude/skills/workflow-commands/backlogrun-steps.md +24 -15
  13. package/.claude/skills/workflow-commands/chain-rule.md +1 -1
  14. package/.claude/skills/workflow-commands/delegation.md +2 -2
  15. package/.claude/skills/workflow-commands/followup.md +5 -0
  16. package/.claude/skills/workflow-commands/fullrun-steps.md +1 -1
  17. package/.claude/skills/workflow-commands/halfrun.md +1 -1
  18. package/.claude/skills/workflow-commands/issue-scout.md +1 -1
  19. package/.claude/skills/workflow-commands/kickoff.md +1 -1
  20. package/.claude/skills/workflow-commands/observation-ledger.md +3 -3
  21. package/.claude/skills/workflow-commands/pre-gate-cut.md +10 -5
  22. package/.claude/skills/workflow-commands/prerequisite.md +2 -2
  23. package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
  24. package/.claude/skills/workflow-commands/working-tree-hold.md +1 -1
  25. package/.codex/hooks.json +2 -2
  26. package/.cursorrules +6 -41
  27. package/.github/actions/setup-node/action.yml +1 -1
  28. package/.github/workflows/auto-tag.yml +3 -4
  29. package/.github/workflows/ci.yml +47 -33
  30. package/.github/workflows/dependabot-auto-merge.yml +13 -6
  31. package/.github/workflows/publish.yml +48 -4
  32. package/.github/workflows/sonar-qube.yml +3 -0
  33. package/.pnpmfile.mjs +4 -3
  34. package/.prettierignore +8 -2
  35. package/CLAUDE.md +18 -20
  36. package/README.md +26 -19
  37. package/SECURITY.md +15 -1
  38. package/dist/CLAUDE.md +18 -20
  39. package/dist/commands/document-section-cli.js +734 -0
  40. package/dist/hooks/audit-provision.js +346 -0
  41. package/dist/hooks/batch-guard.js +5 -4
  42. package/dist/hooks/{chunk-DYAVAM6S.js → chunk-55HHG5PX.js} +1405 -631
  43. package/dist/hooks/{chunk-A6P7PN7P.js → chunk-5VMKCCC4.js} +25 -10
  44. package/dist/hooks/chunk-5VNDSNG3.js +12 -0
  45. package/dist/hooks/{chunk-5KTCMCOT.js → chunk-6HJJXRBX.js} +4 -2
  46. package/dist/hooks/chunk-CDY4NFQG.js +15 -0
  47. package/dist/hooks/chunk-ELCN5LCH.js +135 -0
  48. package/dist/hooks/{chunk-ENA7P5FB.js → chunk-F56MFS4B.js} +3 -3
  49. package/dist/hooks/{chunk-ANJ2WGFD.js → chunk-FIVDHQGT.js} +7 -6
  50. package/dist/hooks/{chunk-3V37IID6.js → chunk-JBBMAPC4.js} +23 -14
  51. package/dist/hooks/{chunk-GU5MATVE.js → chunk-JUDKDCDP.js} +499 -389
  52. package/dist/hooks/{chunk-ZDZ555YH.js → chunk-NV2JRZZO.js} +743 -909
  53. package/dist/hooks/{chunk-V2BTOZHT.js → chunk-RNWHN5BP.js} +3 -3
  54. package/dist/hooks/{chunk-URJA6XY4.js → chunk-TQNPDZNH.js} +4 -4
  55. package/dist/hooks/{chunk-GYNGP7HI.js → chunk-VC3PZPZO.js} +1 -1
  56. package/dist/hooks/codex-hook-adapter.js +14 -12
  57. package/dist/hooks/duplicate-read-guard.js +6 -5
  58. package/dist/hooks/format-edited.js +4 -3
  59. package/dist/hooks/inputs.json +232 -210
  60. package/dist/hooks/investigation-guard.js +6 -5
  61. package/dist/hooks/pretool-guard.js +12 -10
  62. package/dist/hooks/session-lang.js +2 -4
  63. package/dist/hooks/stop-guard.js +81 -59
  64. package/dist/josh.js +872 -75
  65. package/dist/version/index.d.ts +7 -2
  66. package/dist/version/index.js +152 -75
  67. package/eslint/base.js +23 -1
  68. package/eslint/rules/code-quality.js +3 -0
  69. package/eslint/rules/early-return-one-liner.js +98 -0
  70. package/eslint/rules/unicorn.js +16 -1
  71. package/package.json +7 -6
  72. package/pnpm-workspace.yaml +9 -4
  73. package/prettier/basic.d.ts +3 -1
  74. package/prettier/index.d.ts +3 -1
  75. package/prettier/static.d.ts +3 -1
  76. package/prompts/coding-standards.md +1 -1
  77. package/prompts/collaboration-workflow/file-edits.md +4 -4
  78. package/prompts/collaboration-workflow/glossary.md +1 -1
  79. package/prompts/collaboration-workflow/operating-rules.md +17 -9
  80. package/prompts/collaboration-workflow/overview.md +2 -2
  81. package/prompts/collaboration-workflow/principles.md +14 -12
  82. package/prompts/collaboration-workflow/report-format.md +1 -1
  83. package/prompts/collaboration-workflow/residency.md +1 -1
  84. package/prompts/collaboration-workflow/rule-delivery.md +6 -6
  85. package/prompts/collaboration-workflow/shell-body.md +6 -6
  86. package/prompts/collaboration-workflow/turn-batching.md +1 -1
  87. package/prompts/collaboration-workflow/upstream-interrupt.md +12 -2
  88. package/prompts/collaboration-workflow/wip-cap.md +10 -10
  89. package/prompts/review-rubric.md +1 -2
  90. package/prompts/review.md +1 -1
  91. package/scripts/agent/agent-headless.ts +29 -0
  92. package/scripts/agent/agent-launch-environment.ts +6 -2
  93. package/scripts/agent/codex-agent-argv.ts +2 -1
  94. package/scripts/auto-ok/auto-ok-cli.ts +1 -1
  95. package/scripts/backlog/backlog-arrival.ts +3 -3
  96. package/scripts/backlog/backlog-budget.ts +1 -1
  97. package/scripts/backlog/backlog-drive-args.ts +135 -0
  98. package/scripts/backlog/backlog-drive-cli.ts +11 -137
  99. package/scripts/backlog/backlog-drive-launch.ts +39 -0
  100. package/scripts/backlog/backlog-drive-named-offer.ts +3 -5
  101. package/scripts/backlog/backlog-drive-named.ts +3 -3
  102. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  103. package/scripts/backlog/backlog-drive-owner.ts +1 -1
  104. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  105. package/scripts/backlog/backlog-drive-retrospective.ts +1 -1
  106. package/scripts/backlog/backlog-drive.ts +1 -1
  107. package/scripts/backlog/backlog-next.ts +31 -9
  108. package/scripts/backlog/backlog-offer-cli.ts +6 -6
  109. package/scripts/backlog/backlog-offer.ts +1 -1
  110. package/scripts/backlog/backlog-plan-cli.ts +7 -6
  111. package/scripts/backlog/backlog-pool.ts +57 -11
  112. package/scripts/backlog/backlog-rank.ts +18 -9
  113. package/scripts/backlog/backlog-ready.ts +1 -1
  114. package/scripts/backlog/backlog-restructure.ts +152 -0
  115. package/scripts/backlog/backlog-scope.ts +1 -1
  116. package/scripts/backlog/backlog-stalled-detect.ts +2 -2
  117. package/scripts/backlog/backlog-stalled.ts +1 -1
  118. package/scripts/backlog/backlog-waves.ts +15 -17
  119. package/scripts/build/build-codex-hooks.ts +3 -1
  120. package/scripts/build/build-commands.ts +66 -0
  121. package/scripts/build/build-hooks.ts +2 -1
  122. package/scripts/build/build-library.ts +12 -3
  123. package/scripts/build/build.ts +70 -0
  124. package/scripts/build/local-bin.ts +3 -13
  125. package/scripts/cost-runtime/context-cut-threshold.ts +1 -9
  126. package/scripts/cost-runtime/cost-verdict.ts +15 -28
  127. package/scripts/delegation/investigation-reads.ts +3 -1
  128. package/scripts/discovery/repo-origin.ts +5 -5
  129. package/scripts/doctor/doctor-consumer.ts +2 -2
  130. package/scripts/doctor/doctor-io.ts +2 -3
  131. package/scripts/document/capped-print-part.ts +30 -0
  132. package/scripts/document/capped-print.ts +3 -4
  133. package/scripts/document/document-byte-budget.ts +11 -2
  134. package/scripts/document/document-scan.ts +117 -0
  135. package/scripts/document/document-section.ts +143 -16
  136. package/scripts/document/entry-read-budget.ts +5 -3
  137. package/scripts/document/entry-read-set.ts +10 -89
  138. package/scripts/document/read-set-cost.ts +98 -0
  139. package/scripts/epic/epic-add-body.ts +1 -0
  140. package/scripts/epic/epic-audit-checks.ts +1 -1
  141. package/scripts/epic/epic-audit-rationale.ts +4 -3
  142. package/scripts/epic/epic-bundle-cli.ts +14 -3
  143. package/scripts/epic/epic-bundle-poll.ts +41 -0
  144. package/scripts/epic/epic-busy.ts +1 -1
  145. package/scripts/epic/epic-candidate-confirm.ts +3 -2
  146. package/scripts/epic/epic-classify.ts +1 -1
  147. package/scripts/epic/epic-cli-argv.ts +78 -46
  148. package/scripts/epic/epic-cli-remove.ts +11 -19
  149. package/scripts/epic/epic-cli.ts +74 -73
  150. package/scripts/epic/epic-close-comment.ts +1 -1
  151. package/scripts/epic/epic-close.ts +1 -1
  152. package/scripts/epic/epic-cross-repo.ts +5 -5
  153. package/scripts/epic/epic-graph.ts +1 -1
  154. package/scripts/epic/epic-index.ts +1 -1
  155. package/scripts/epic/epic-issue.ts +2 -6
  156. package/scripts/epic/epic-lane-offer.ts +2 -2
  157. package/scripts/epic/epic-next.ts +29 -42
  158. package/scripts/epic/epic-solo-stale.ts +1 -1
  159. package/scripts/epic/epic-triage.ts +8 -4
  160. package/scripts/epic/epic-validate.ts +1 -1
  161. package/scripts/followup/git-followup-finish.ts +2 -2
  162. package/scripts/followup/git-followup-label.ts +2 -2
  163. package/scripts/followup/git-followup-merged.ts +2 -2
  164. package/scripts/followup/git-followup-stages.ts +9 -0
  165. package/scripts/followup/git-pr-followup-checks.ts +142 -0
  166. package/scripts/followup/git-pr-followup.ts +5 -130
  167. package/scripts/gate/core-budget.ts +69 -1
  168. package/scripts/gate/gate-plan.ts +47 -7
  169. package/scripts/gate/gate-skip.ts +38 -7
  170. package/scripts/gate/hook-gate-reuse.ts +12 -10
  171. package/scripts/gate/pre-commit-type-check.ts +4 -1
  172. package/scripts/gate/project-checks.ts +6 -9
  173. package/scripts/gate/type-check-step.ts +2 -3
  174. package/scripts/gate/verification-gate.ts +27 -8
  175. package/scripts/gh/git-gh-api-path.ts +2 -2
  176. package/scripts/gh/git-gh-issue-rest.ts +3 -3
  177. package/scripts/gh/git-gh-issue-write.ts +53 -7
  178. package/scripts/gh/git-gh-issue.ts +5 -3
  179. package/scripts/gh/git-gh-pr-read.ts +68 -19
  180. package/scripts/gh/git-gh-pr-rest.ts +1 -1
  181. package/scripts/gh/git-gh-pr.ts +5 -1
  182. package/scripts/gh/git-pr-ai-review.ts +1 -1
  183. package/scripts/gh/git-pr-checks-eval.ts +9 -3
  184. package/scripts/gh/git-pr-checks-parse.ts +1 -1
  185. package/scripts/gh/git-pr-checks-watch.ts +6 -5
  186. package/scripts/gh/git-pr-checks.ts +18 -6
  187. package/scripts/gh/git-pr-coderabbit.ts +1 -1
  188. package/scripts/gh/git-pr-error.ts +1 -3
  189. package/scripts/gh/git-pr.ts +9 -13
  190. package/scripts/gh/github-issue-url.ts +2 -2
  191. package/scripts/git/constants.ts +12 -6
  192. package/scripts/git/git-command.ts +20 -218
  193. package/scripts/git/git-diff-reads.ts +225 -0
  194. package/scripts/git/git-error.ts +4 -12
  195. package/scripts/git/git-pre-push-hook.ts +139 -0
  196. package/scripts/git/git-prompt.ts +2 -6
  197. package/scripts/git/{schemas.ts → git-schemas.ts} +2 -0
  198. package/scripts/git/git-spawn-sync.ts +3 -1
  199. package/scripts/git/git-spawn.ts +1 -1
  200. package/scripts/git/git-staging.ts +4 -6
  201. package/scripts/git/git-status.ts +3 -9
  202. package/scripts/git/main-merge.ts +57 -21
  203. package/scripts/hooks/codex-hook-adapter.ts +1 -1
  204. package/scripts/hooks/edited-cspell.ts +2 -4
  205. package/scripts/hooks/format-edited-file.ts +3 -12
  206. package/scripts/hooks/pre-push-unit.ts +31 -9
  207. package/scripts/hooks/reserved-run.ts +2 -2
  208. package/scripts/hooks/run-hook.sh +5 -4
  209. package/scripts/hooks/stop-guard.ts +5 -3
  210. package/scripts/init/init-actions.ts +0 -5
  211. package/scripts/init/init-ai-copy.ts +13 -2
  212. package/scripts/init/init-logic-json-merge.ts +19 -0
  213. package/scripts/init/init-logic-secretlint.ts +7 -7
  214. package/scripts/init/init-logic-workspace.ts +41 -2
  215. package/scripts/init/init-logic.ts +16 -26
  216. package/scripts/init/init.ts +5 -15
  217. package/scripts/init/initial-commit.ts +4 -4
  218. package/scripts/init/kit-development-versions.ts +40 -0
  219. package/scripts/init/kit-setup-state.ts +2 -2
  220. package/scripts/init/start-exec.ts +68 -19
  221. package/scripts/init/start-setup-pr.ts +9 -9
  222. package/scripts/init/start-steps.ts +6 -10
  223. package/scripts/issue/defect-rate-cli.ts +1 -1
  224. package/scripts/issue/git-next-issues.ts +1 -1
  225. package/scripts/issue/issue-auto-ok.ts +1 -1
  226. package/scripts/issue/issue-backlinks-cli.ts +2 -2
  227. package/scripts/issue/issue-backlinks.ts +9 -9
  228. package/scripts/issue/issue-comment-cli.ts +19 -13
  229. package/scripts/issue/issue-file-cli.ts +45 -18
  230. package/scripts/issue/issue-file.ts +24 -1
  231. package/scripts/issue/issue-scout-closed.ts +1 -1
  232. package/scripts/issue/issue-state-cli.ts +30 -74
  233. package/scripts/josh/josh-command-map.ts +2 -0
  234. package/scripts/josh/josh-command-types.ts +11 -0
  235. package/scripts/josh/josh-commands-ai.ts +4 -4
  236. package/scripts/josh/josh-commands-backlog.ts +4 -1
  237. package/scripts/josh/josh-commands-development.ts +11 -1
  238. package/scripts/josh/josh-commands-document.ts +1 -0
  239. package/scripts/josh/josh-commands-lane.ts +22 -0
  240. package/scripts/josh/josh-commands-maintenance.ts +4 -4
  241. package/scripts/josh/josh-commands-run.ts +12 -7
  242. package/scripts/josh/josh-in-process.ts +28 -9
  243. package/scripts/josh/josh-logic.ts +33 -15
  244. package/scripts/josh/process-identity.ts +1 -3
  245. package/scripts/josh/session-language-cli.ts +3 -4
  246. package/scripts/lane/lane-await.ts +5 -1
  247. package/scripts/lane/lane-child-invocation.ts +2 -2
  248. package/scripts/lane/lane-cli.ts +3 -3
  249. package/scripts/lane/lane-dispatch.ts +14 -10
  250. package/scripts/lane/lane-environment.ts +5 -1
  251. package/scripts/lane/lane-handoff.ts +1 -1
  252. package/scripts/lane/lane-install.ts +2 -13
  253. package/scripts/lane/lane-launch-cli.ts +35 -3
  254. package/scripts/lane/lane-ledger.ts +145 -0
  255. package/scripts/lane/lane-leftover.ts +1 -1
  256. package/scripts/lane/lane-load.ts +108 -0
  257. package/scripts/lane/lane-measure-cli.ts +149 -0
  258. package/scripts/lane/lane-occupancy.ts +3 -0
  259. package/scripts/lane/lane-reap.ts +1 -3
  260. package/scripts/lane/lane-relaunch.ts +1 -1
  261. package/scripts/lane/lane-stats.ts +224 -0
  262. package/scripts/lane/lane-vacant.ts +36 -0
  263. package/scripts/lane/openai-lane-ship.ts +2 -2
  264. package/scripts/lane/openai-lane-supervisor-owner.ts +180 -0
  265. package/scripts/lane/openai-lane-supervisor.ts +7 -165
  266. package/scripts/lane/openai-review-broker.ts +2 -4
  267. package/scripts/lib/ancestor-directories.ts +35 -0
  268. package/scripts/lib/animation-helpers.ts +2 -2
  269. package/scripts/lib/buffered-process.ts +3 -7
  270. package/scripts/lib/cli-flags.ts +71 -1
  271. package/scripts/lib/spawn-exit.ts +2 -2
  272. package/scripts/lib/timeouts.ts +35 -2
  273. package/scripts/lines/line-budget.ts +4 -6
  274. package/scripts/notify/telegram-notify.ts +26 -1
  275. package/scripts/notify/telegram-test.ts +6 -0
  276. package/scripts/observations/observation-ledger-line.ts +6 -6
  277. package/scripts/observations/observation-ledger-migrate.ts +55 -4
  278. package/scripts/observations/observation-ledger.ts +26 -7
  279. package/scripts/overrides/lockfile-overrides.ts +1 -1
  280. package/scripts/overrides/overrides-logic.ts +1 -1
  281. package/scripts/propagate/propagate-git.ts +1 -1
  282. package/scripts/propagate/propagate-publish.ts +2 -2
  283. package/scripts/propagate/propagate-steps.ts +20 -15
  284. package/scripts/propagate/propagate.ts +36 -27
  285. package/scripts/refactor/import-graph.ts +18 -1
  286. package/scripts/refactor/refactor-lint.ts +4 -4
  287. package/scripts/repo/repository-labels.ts +2 -2
  288. package/scripts/repo/required-checks-logic.ts +1 -3
  289. package/scripts/review/live-evidence.ts +2 -4
  290. package/scripts/review/review-brief-cli.ts +1 -1
  291. package/scripts/review/review-finding-ledger.ts +1 -1
  292. package/scripts/review/review-findings-cli.ts +1 -3
  293. package/scripts/rules/decision-oracle-batch.ts +128 -0
  294. package/scripts/rules/decision-oracle-tokens.ts +21 -0
  295. package/scripts/rules/decision-oracle.ts +8 -120
  296. package/scripts/rules/delivered-rules.ts +26 -182
  297. package/scripts/rules/direct-filing.ts +1 -1
  298. package/scripts/rules/early-heartbeat.ts +3 -3
  299. package/scripts/rules/git-argv.ts +1 -1
  300. package/scripts/rules/git-force.ts +1 -1
  301. package/scripts/rules/implementation-cut.ts +2 -2
  302. package/scripts/rules/index-guard.ts +1 -1
  303. package/scripts/rules/issue-comments.ts +118 -0
  304. package/scripts/rules/{issue-fold.ts → issue-fold-rule.ts} +2 -2
  305. package/scripts/rules/lane-background.ts +2 -2
  306. package/scripts/rules/lane-park.ts +18 -0
  307. package/scripts/rules/lane-split-park.ts +128 -0
  308. package/scripts/rules/oracle-firing.ts +1 -1
  309. package/scripts/rules/poll-loop.ts +1 -1
  310. package/scripts/rules/pre-gate-cut.ts +3 -3
  311. package/scripts/rules/protected-files.ts +59 -4
  312. package/scripts/rules/{run-tail.ts → run-tail-rule.ts} +2 -2
  313. package/scripts/rules/shell-body-trigger.ts +1 -1
  314. package/scripts/rules/stop-rules.ts +18 -7
  315. package/scripts/rules/test-declared-commit.ts +4 -4
  316. package/scripts/rules/wip-cap.ts +63 -0
  317. package/scripts/run/{run-carry-args.ts → carry/run-carry-args.ts} +37 -13
  318. package/scripts/run/{run-carry-change.ts → carry/run-carry-change.ts} +29 -7
  319. package/scripts/run/{run-carry-cli.ts → carry/run-carry-cli.ts} +4 -6
  320. package/scripts/run/{run-carry.ts → carry/run-carry.ts} +12 -6
  321. package/scripts/run/{run-cut-args.ts → cut/run-cut-args.ts} +1 -1
  322. package/scripts/run/{run-cut-cli.ts → cut/run-cut-cli.ts} +3 -3
  323. package/scripts/run/{run-cut-report.ts → cut/run-cut-report.ts} +2 -2
  324. package/scripts/run/{run-cut.ts → cut/run-cut.ts} +1 -1
  325. package/scripts/run/{run-entry-cli.ts → entry/run-entry-cli.ts} +11 -11
  326. package/scripts/run/{run-entry.ts → entry/run-entry.ts} +2 -2
  327. package/scripts/run/{run-event-scope.ts → event/run-event-scope.ts} +1 -1
  328. package/scripts/run/{run-event-stream-emit.ts → event/run-event-stream-emit.ts} +1 -1
  329. package/scripts/run/{run-event-stream.ts → event/run-event-stream.ts} +16 -2
  330. package/scripts/run/{run-hold-cli.ts → hold/run-hold-cli.ts} +5 -5
  331. package/scripts/run/{run-merge-cli.ts → merge/run-merge-cli.ts} +10 -5
  332. package/scripts/run/{run-merge-steps.ts → merge/run-merge-steps.ts} +53 -5
  333. package/scripts/run/{run-merge.ts → merge/run-merge.ts} +1 -1
  334. package/scripts/run/{run-progress-cli.ts → progress/run-progress-cli.ts} +1 -1
  335. package/scripts/run/{run-progress-config.ts → progress/run-progress-config.ts} +2 -17
  336. package/scripts/run/{run-progress-read.ts → progress/run-progress-read.ts} +5 -5
  337. package/scripts/run/{run-progress.ts → progress/run-progress.ts} +1 -1
  338. package/scripts/run/{run-review-steps.ts → review/run-review-steps.ts} +2 -3
  339. package/scripts/run/run-ending.ts +2 -2
  340. package/scripts/run/run-halfrun-resume.ts +6 -1
  341. package/scripts/run/run-headless.ts +1 -1
  342. package/scripts/run/run-invocation.ts +85 -84
  343. package/scripts/run/run-liveness.ts +1 -1
  344. package/scripts/run/run-parent-cut-hook.ts +1 -1
  345. package/scripts/run/run-preflight.ts +6 -6
  346. package/scripts/run/run-prep-cli.ts +1 -1
  347. package/scripts/run/run-prrun-resume.ts +1 -1
  348. package/scripts/run/run-report-cli.ts +4 -4
  349. package/scripts/run/run-report.ts +2 -2
  350. package/scripts/run/run-status-cli.ts +1 -1
  351. package/scripts/run/run-step-cli.ts +3 -3
  352. package/scripts/run/run-step.ts +2 -2
  353. package/scripts/run/run-stop-notify.ts +1 -1
  354. package/scripts/run/run-stranded-detect.ts +4 -4
  355. package/scripts/run/run-stranded.ts +2 -2
  356. package/scripts/run/run-watcher-guard-cli.ts +1 -1
  357. package/scripts/run/run-watcher-guard.ts +5 -3
  358. package/scripts/run/run-watcher-hook.ts +1 -1
  359. package/scripts/run/{run-ship-cli.ts → ship/run-ship-cli.ts} +29 -8
  360. package/scripts/run/{run-ship-detach.ts → ship/run-ship-detach.ts} +3 -3
  361. package/scripts/run/ship/run-ship-lock.ts +50 -0
  362. package/scripts/run/{run-ship-next.ts → ship/run-ship-next.ts} +13 -0
  363. package/scripts/run/ship/run-ship-pre-detach.ts +66 -0
  364. package/scripts/run/{run-ship-preflight.ts → ship/run-ship-preflight.ts} +6 -2
  365. package/scripts/run/{run-ship-probe.ts → ship/run-ship-probe.ts} +2 -2
  366. package/scripts/run/{run-ship-return.ts → ship/run-ship-return.ts} +10 -6
  367. package/scripts/run/{run-ship-review-steps.ts → ship/run-ship-review-steps.ts} +3 -3
  368. package/scripts/run/{run-ship-scoped.ts → ship/run-ship-scoped.ts} +10 -1
  369. package/scripts/run/{run-ship-stage.ts → ship/run-ship-stage.ts} +13 -0
  370. package/scripts/run/{run-ship-steps.ts → ship/run-ship-steps.ts} +15 -8
  371. package/scripts/run/ship/run-ship-stop-text.ts +13 -0
  372. package/scripts/run/ship/run-ship-sync.ts +128 -0
  373. package/scripts/run/{run-ship.ts → ship/run-ship.ts} +6 -0
  374. package/scripts/run/{run-tidy-lanes.ts → tidy/run-tidy-lanes.ts} +1 -1
  375. package/scripts/run/{run-wake-cli.ts → wake/run-wake-cli.ts} +31 -9
  376. package/scripts/run/{run-wake-describe.ts → wake/run-wake-describe.ts} +3 -3
  377. package/scripts/run/{run-wake-driver.ts → wake/run-wake-driver.ts} +99 -17
  378. package/scripts/run/{run-wake-handoff.ts → wake/run-wake-handoff.ts} +1 -1
  379. package/scripts/run/{run-wake-loop.ts → wake/run-wake-loop.ts} +8 -2
  380. package/scripts/run/wake/run-wake-restart.ts +58 -0
  381. package/scripts/run/{run-wake-session.ts → wake/run-wake-session.ts} +3 -3
  382. package/scripts/run/{run-wake.ts → wake/run-wake.ts} +1 -1
  383. package/scripts/safe-chain/preinstall-command.ts +20 -21
  384. package/scripts/safe-chain/project-config.ts +19 -15
  385. package/scripts/sync/sync-ai-files.ts +1 -1
  386. package/scripts/sync/sync-configs.ts +2 -1
  387. package/scripts/sync/sync.ts +15 -2
  388. package/scripts/test/test-red-logic.ts +17 -2
  389. package/scripts/test/test-red.ts +8 -7
  390. package/scripts/test/unit-worker-share.ts +1 -0
  391. package/scripts/time-runtime/time-background.ts +5 -1
  392. package/scripts/time-runtime/time-instant.ts +3 -1
  393. package/scripts/time-runtime/time-spans.ts +6 -139
  394. package/scripts/time-runtime/time-tool-call.ts +160 -0
  395. package/scripts/time-runtime/time-transcript-line.ts +27 -1
  396. package/scripts/version/effective-upstream.ts +2 -20
  397. package/scripts/version/latest-corepack.ts +17 -17
  398. package/scripts/version/latest-regression.ts +1 -1
  399. package/scripts/version/latest-update.ts +4 -4
  400. package/scripts/version/npm-registry.ts +20 -5
  401. package/scripts/version/publishable-range-check.ts +2 -2
  402. package/scripts/version/publishable-range.ts +1 -1
  403. package/scripts/version/release-age.ts +48 -38
  404. package/scripts/version/release-hold.ts +1 -1
  405. package/scripts/version/safe-chain-version-update.ts +40 -0
  406. package/scripts/version/upgrade-shell-command.ts +48 -8
  407. package/scripts/version/version-check-logic.ts +23 -14
  408. package/scripts/version/version-commands.ts +23 -11
  409. package/scripts/version/version-remote.ts +28 -13
  410. package/templates/pnpm-workspace.basic.yaml +4 -0
  411. package/templates/workflows/dependabot-auto-merge.yml +5 -5
  412. package/templates/workflows/github-release.yml +2 -0
  413. package/scripts/build/build-config-merge.ts +0 -27
  414. package/scripts/build/build-managed-marker.ts +0 -27
  415. package/scripts/build/build-self-sync-guard.ts +0 -27
  416. package/scripts/build/build-version.ts +0 -26
  417. package/scripts/version/preinstall-version-update.ts +0 -86
  418. /package/scripts/overrides/{schemas.ts → overrides-schemas.ts} +0 -0
  419. /package/scripts/run/{run-carry-conversation.ts → carry/run-carry-conversation.ts} +0 -0
  420. /package/scripts/run/{run-carry-reclaim.ts → carry/run-carry-reclaim.ts} +0 -0
  421. /package/scripts/run/{run-carry-stash.ts → carry/run-carry-stash.ts} +0 -0
  422. /package/scripts/run/{run-carry-streak.ts → carry/run-carry-streak.ts} +0 -0
  423. /package/scripts/run/{run-cut-handoff.ts → cut/run-cut-handoff.ts} +0 -0
  424. /package/scripts/run/{run-entry-stop.ts → entry/run-entry-stop.ts} +0 -0
  425. /package/scripts/run/{run-event-cli.ts → event/run-event-cli.ts} +0 -0
  426. /package/scripts/run/{run-event-follow.ts → event/run-event-follow.ts} +0 -0
  427. /package/scripts/run/{run-event-render.ts → event/run-event-render.ts} +0 -0
  428. /package/scripts/run/{run-event-watch.ts → event/run-event-watch.ts} +0 -0
  429. /package/scripts/run/{run-hold.ts → hold/run-hold.ts} +0 -0
  430. /package/scripts/run/{run-progress-args.ts → progress/run-progress-args.ts} +0 -0
  431. /package/scripts/run/{run-progress-clock.ts → progress/run-progress-clock.ts} +0 -0
  432. /package/scripts/run/{run-review-cli.ts → review/run-review-cli.ts} +0 -0
  433. /package/scripts/run/{run-review.ts → review/run-review.ts} +0 -0
  434. /package/scripts/run/{run-ship-review.ts → ship/run-ship-review.ts} +0 -0
  435. /package/scripts/run/{run-tidy-cli.ts → tidy/run-tidy-cli.ts} +0 -0
  436. /package/scripts/run/{run-tidy-stashes.ts → tidy/run-tidy-stashes.ts} +0 -0
  437. /package/scripts/run/{run-tidy.ts → tidy/run-tidy.ts} +0 -0
@@ -18,7 +18,7 @@ another is the failure this section exists to prevent:
18
18
  | A defect originating in **another package** | File the upstream Issue and **stop** — Tier A for a first-party target; a third-party one is Tier C, recorded and drafted rather than filed (`CLAUDE.md` → "Cross-package problems"; `prompts/collaboration-workflow/upstream-interrupt.md`) |
19
19
  | This Issue was really **several** (a split) | File the children and the epic and **stop** — except under `backlogrun`, whose authorization already covers a batch, so the children are filed and run through (`split-assessment.md`) |
20
20
  | Another Issue in **this** repository has to land first (**a prerequisite**) | This section |
21
- | Something worth filing that is **none of the three** (**an observation**) | File it **without asking** — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (`observation-filing.md`). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to the run's own `docs/maintainers/observations/<N>.md` and is filed on its second sighting — all of them `observation-filing.md`'s |
21
+ | Something worth filing that is **none of the three** (**an observation**) | File it **without asking** — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (`observation-filing.md`). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to the run's own `.josh/observations/<N>.md` and is filed on its second sighting — all of them `observation-filing.md`'s |
22
22
 
23
23
  **File the prerequisite with the `route:tier-a` label**, so a Tier A filing made during implementation
24
24
  stays countable by filing route afterwards. **This paragraph belongs to the prerequisite row, not to
@@ -31,7 +31,7 @@ pnpm josh issue:file "<title>" --body-file <body-file> --depth <n> --route tier-
31
31
 
32
32
  The command lints the body against `prompts/collaboration-workflow/issue-template.md`, applies the
33
33
  classification labels it declares, and runs the duplicate scan and `epic:bundle` itself
34
- (`docs/josh-commands-automation.md` → `josh issue:file`).
34
+ (`docs/josh-commands-backlog.md` → `josh issue:file`).
35
35
 
36
36
  Every "file the prerequisite" below means that labelled filing, and it always happens **first**: the
37
37
  steps after it name a number that does not exist until it is. **Its duplicate scan is read exactly as
@@ -33,7 +33,7 @@ flight and the watcher's life record has gone stale — once per run, so the res
33
33
 
34
34
  **`--mark` at every real report.** Whenever the run reports something of its own, run
35
35
  `pnpm josh run:progress --mark` in the same turn to restart the silence clock. The clock is silence,
36
- never a timer (`docs/josh-commands-automation.md` → "`josh run:progress`").
36
+ never a timer (`docs/josh-commands-run.md` → "`josh run:progress`").
37
37
 
38
38
  **Do not keep a progress clock of your own** — the hook refuses the arm rather than asking
39
39
  (`scripts/rules/early-heartbeat.ts` → `decide`), though a single correctly-spaced arm is allowed.
@@ -65,7 +65,7 @@ or release once the work is done; only an expired record over a clean tree is re
65
65
  **The batch entry points claim per child, not per batch.** `backlogrun` never
66
66
  call it themselves; each child runs the `fullrun` procedure, so it claims on entry and `pnpm josh
67
67
  followup` releases it at that child's merge. The command's behavior and the answer table are
68
- `docs/josh-commands-automation.md` → "`josh run:hold` / `josh run:release`"; this file is the single source of
68
+ `docs/josh-commands-run.md` → "`josh run:hold` / `josh run:release`"; this file is the single source of
69
69
  the procedure.
70
70
 
71
71
  ## The halfrun resume
package/.codex/hooks.json CHANGED
@@ -2,11 +2,11 @@
2
2
  "hooks": {
3
3
  "SessionStart": [
4
4
  {
5
- "matcher": "",
5
+ "matcher": "startup",
6
6
  "hooks": [
7
7
  {
8
8
  "type": "command",
9
- "command": "pnpm josh audit:provision",
9
+ "command": "project_root=\"$(env -u GIT_ALTERNATE_OBJECT_DIRECTORIES -u GIT_COMMON_DIR -u GIT_DIR -u GIT_INDEX_FILE -u GIT_NAMESPACE -u GIT_OBJECT_DIRECTORY -u GIT_WORK_TREE git rev-parse --show-toplevel 2>/dev/null || git rev-parse --show-toplevel)\" && cd \"$project_root\" && sh scripts/hooks/run-hook.sh audit-provision",
10
10
  "timeout": 180
11
11
  }
12
12
  ]
package/.cursorrules CHANGED
@@ -1,45 +1,10 @@
1
- You are able to use the Svelte MCP server, where you have access to comprehensive Svelte 5 and SvelteKit documentation. Here's how to use the available tools effectively:
1
+ # Agent Instructions
2
2
 
3
- ## Available MCP Tools:
3
+ > **All rules for this repository live in [`CLAUDE.md`](./CLAUDE.md). Read it in full before doing
4
+ > any work here, and follow every rule in it.** This file exists only to point at it.
4
5
 
5
- ### 1. list-sections
6
+ **No hooks are configured for Cursor** — apply every hook-delivered rule yourself, per `prompts/collaboration-workflow/principles.md` → "Claude Code 以外のエージェントでの読み替え". Do not copy rules back into this file.
6
7
 
7
- Use this FIRST to discover all available documentation sections. Returns a structured list with titles, use_cases, and paths.
8
- When asked about Svelte or SvelteKit topics, ALWAYS use this tool at the start of the chat to find relevant sections.
8
+ ## Svelte MCP
9
9
 
10
- ### 2. get-documentation
11
-
12
- Retrieves full documentation content for specific sections. Accepts single or multiple sections.
13
- After calling the list-sections tool, you MUST analyze the returned documentation sections (especially the use_cases field) and then use the get-documentation tool to fetch ALL documentation sections that are relevant for the user's task.
14
-
15
- ### 3. svelte-autofixer
16
-
17
- Analyzes Svelte code and returns issues and suggestions.
18
- You MUST use this tool whenever writing Svelte code before sending it to the user. Keep calling it until no issues or suggestions are returned.
19
-
20
- ### 4. playground-link
21
-
22
- Generates a Svelte Playground link with the provided code.
23
- After completing the code, ask the user if they want a playground link. Only call this tool after user confirmation and NEVER if code was written to files in their project.
24
-
25
- ## Code Change Rules
26
-
27
- Whenever modifying, adding, or deleting any code:
28
-
29
- 1. **Verify the gate**: Run `pnpm josh gate` — lint, type check, spell check and unit tests, run concurrently, with every failing check reported in one pass. Re-run one on its own by copying the command from its output header while fixing — `pnpm josh lint`, `pnpm josh check`, `pnpm josh cspell:dot`, `pnpm josh test:unit` for a project with no application toolkit.
30
- 2. **Verify IDE Feedback**: ALWAYS run the **ReadLints** tool on every modified file (and any file that might be affected) before finishing. Fix all reported errors and warnings. IDE/ReadLints can report issues that terminal `pnpm josh lint` does not (e.g. type resolution for generated or gitignored paths).
31
- 3. **Fix Issues**: If any check fails (terminal or IDE feedback, or ReadLints), fix all reported issues immediately.
32
- 4. **Repeat**: Repeat the checks until **all** pass and **ReadLints shows no errors** for the modified files.
33
- 5. **Completion**: Only finish the task or response after ALL checks pass and ReadLints reports **zero errors** on modified files (warnings only are acceptable only when documented as a known exception, e.g. unused eslint-disable for Paraglide).
34
- 6. **Full test gate (code or E2E-impacting work):** `pnpm josh gate` already covers the spell check and the unit tests; E2E is closed on top of it, and **never by asking the user to run it**. With a pull request open, the CI E2E job is the authority and `pnpm josh followup` refuses to merge while any check is non-passing. With no pull request, run **`pnpm josh test:e2e`** yourself and read what it prints — it exits 0 without running when Playwright or the `*.e2e.{ts,js}` files are absent, and that printed skip is the answer for a project with no E2E suite. **Do not** claim completion using only `pnpm josh test:unit --run` when E2E applies, and **do not** fall back to **`pnpm build`** or **`CI=true`** to get past a Playwright run that will not finish — report that it did not run instead. Run it with `CI` unset so Playwright uses **DEV** (`pnpm run dev`, on the port `playwright.config.ts` resolves from `PORT_SEED`), matching the VS Code Test extension. Details: **Completion gate** in `CLAUDE.md` and `prompts/testing-guide.md` → "Closing the E2E gate without a human run".
35
-
36
- **Constraint**: Never state "it should pass" without actually having run the commands and confirmed the output. Do not end a task while **errors** exist. Before completing, you MUST run **ReadLints** on every modified file and fix every **error** (not just rely on terminal check/lint). If verification commands fail (e.g., system error), you MUST rely on ReadLints to ensure correctness. If **`pnpm josh test:e2e`** cannot complete in your environment, say so in the completion report and name the E2E result as missing — with a pull request open the CI E2E job is that result, and with no pull request there is none, so the gate is **not** closed. Never switch to build/CI flags to make it finish, and never hand the run to the user instead.
37
-
38
- ## Refactoring Rules
39
-
40
- - **Prompt Reference**: When performing any refactoring, ALWAYS read and follow the instructions in `prompts/refactoring.md` before starting.
41
-
42
- ## Git Rules
43
-
44
- - **No Commits**: DO NOT commit changes unless explicitly requested by the user.
45
- - **Workflow Awareness**: Use `pnpm josh git` when the user asks for git operations.
10
+ For Svelte 5 / SvelteKit work, use the Svelte MCP server: call `list-sections` first, then `get-documentation` for every section whose use_cases match the task, and run `svelte-autofixer` on any Svelte code you write until it reports nothing. Offer `playground-link` only when asked, and never for code written to project files.
@@ -5,7 +5,7 @@ description: >
5
5
 
6
6
  # The one place the Node.js version of kit's workflows is written (joshuafolkken/kit#3084). Every
7
7
  # job used to call actions/setup-node with its own `node-version` literal, so a version move had to
8
- # find all of them. A job that needs a different runtime says so explicitly — `node-26-pnpm` in
8
+ # find all of them. A job that needs a different runtime says so explicitly — `node-compat` in
9
9
  # `ci.yml` passes its own runtime to `.github/actions/setup-pnpm` instead of calling this.
10
10
  #
11
11
  # Distributed: `josh sync` writes this file into a consumer beside the workflows that call it, the
@@ -19,9 +19,8 @@ jobs:
19
19
  ref: ${{ github.event.client_payload.sha }}
20
20
  fetch-depth: 2
21
21
 
22
- - name: Setup Node.js
23
- uses: ./.github/actions/setup-node
24
-
22
+ # No Node.js setup: this job installs nothing and reads package.json with jq, which the runner
23
+ # image ships, so a Node.js version step would only add time (joshuafolkken/kit#3326).
25
24
  - name: Check if package.json changed
26
25
  id: pkg_changed
27
26
  run: |
@@ -37,7 +36,7 @@ jobs:
37
36
  id: current_version
38
37
  if: steps.pkg_changed.outputs.changed == 'true'
39
38
  run: |
40
- VERSION=$(node -p "require('./package.json').version")
39
+ VERSION=$(jq -r '.version' package.json)
41
40
  echo "version=$VERSION" >> $GITHUB_OUTPUT
42
41
  echo "Current version: $VERSION"
43
42
 
@@ -32,19 +32,41 @@ env:
32
32
  # pnpm version resolution, the store cache, the safe-chain installer pin and the install
33
33
  # (joshuafolkken/kit#2982).
34
34
  jobs:
35
- node-26-pnpm:
36
- name: Node 26 pnpm
35
+ # Every other job runs on the Node.js version `.github/actions/setup-node` names, while `engines`
36
+ # and the esbuild target accept Node 22 and a consumer may already be on 26. This job builds the
37
+ # package and starts the bundled CLI on both ends of that range, so a syntax or API the oldest
38
+ # supported Node lacks fails here instead of in a consumer (joshuafolkken/kit#3326). The runtime
39
+ # comes from pnpm's `runtime` input, not setup-node, so the one Node.js version stays written once.
40
+ # The oldest entry is the exact `engines` floor, not a bare major that resolves to the newest 22.x;
41
+ # `scripts/ci/ci-yml-pnpm-setup.test.ts` holds it equal to the floor `package.json` declares.
42
+ node-compat:
43
+ name: Node ${{ matrix.node }} build
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ node: ['22.19.0', 26]
37
48
  runs-on: ubuntu-latest
38
- timeout-minutes: 5
49
+ timeout-minutes: 10
39
50
  permissions:
40
51
  contents: read
41
52
  steps:
42
53
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
43
- - uses: ./.github/actions/setup-pnpm
54
+
55
+ - name: Setup pnpm and install dependencies
56
+ uses: ./.github/actions/setup-pnpm
44
57
  with:
45
- runtime: node@26
46
- install: 'false'
47
- - run: node --version && pnpm --version
58
+ runtime: node@${{ matrix.node }}
59
+
60
+ - name: Verify Node.js version
61
+ env:
62
+ NODE_VERSION: ${{ matrix.node }}
63
+ run: node --version | tee /dev/stderr | grep -qE "^v${NODE_VERSION}(\.|$)" && pnpm --version
64
+
65
+ - name: Build package
66
+ run: pnpm build
67
+
68
+ - name: Run CLI smoke
69
+ run: node dist/josh.js help
48
70
 
49
71
  playwright-image:
50
72
  name: Resolve Playwright image
@@ -333,10 +355,21 @@ jobs:
333
355
  # No ESLint cache here — nothing in this job lints — and no `--maxWorkers`: `gate-plan.ts` leaves
334
356
  # any machine below its measured 11 cores uncapped, so vitest sizes its own pool from the runner
335
357
  # exactly as it did inside the gate step.
358
+ # **Sharded across runners, because one runner is already saturated** (joshuafolkken/kit#3220).
359
+ # Alone on a 4-core runner vitest takes every core, so the suite can only get faster by spreading
360
+ # its files over more machines. `fail-fast: false` keeps a red shard from cancelling the others,
361
+ # so one run reports every failing file. The `Checks` aggregate below reads `needs.unit.result`,
362
+ # which for a matrix is `success` only when every shard succeeded — no change there is needed.
363
+ # Only kit shards: the distributed template runs the unit suite inside its single `checks` job,
364
+ # where a small consumer suite would pay the duplicated setup and could leave a shard with no file.
336
365
  unit:
337
- name: Unit Tests
366
+ name: Unit Tests (${{ matrix.shard }}/3)
338
367
  needs: reuse-pr-checks
339
368
  if: ${{ !cancelled() && needs.reuse-pr-checks.outputs.reuse != 'true' }}
369
+ strategy:
370
+ fail-fast: false
371
+ matrix:
372
+ shard: [1, 2, 3]
340
373
  runs-on: ubuntu-latest
341
374
  timeout-minutes: 8
342
375
  permissions:
@@ -366,9 +399,11 @@ jobs:
366
399
  # `scripts/ci/ci-yml-unit-job.test.ts` pins the command; the guard itself is
367
400
  # `scripts/test/test-unit-guard.ts`.
368
401
  - name: Run unit tests
369
- run: pnpm josh test:unit
402
+ run: pnpm josh test:unit --shard=${{ matrix.shard }}/3
370
403
 
404
+ # One shard is enough: the check does not depend on which test files ran beside it.
371
405
  - name: Verify optional ESLint consumer install
406
+ if: matrix.shard == 1
372
407
  run: pnpm exec tsx scripts/package/verify-optional-eslint-install.ts
373
408
 
374
409
  # **The required status check. `Checks` is a name the branch ruleset already requires, and this job
@@ -506,19 +541,9 @@ jobs:
506
541
  packages: read
507
542
  container: ${{ fromJSON(needs.playwright-image.outputs.container) }}
508
543
  timeout-minutes: 10
509
- # Better Auth rejects any origin its BETTER_AUTH_URL does not name, so this job pins the value
510
- # to the preview server the suite talks to rather than letting a production value reach it.
511
- # It has to be the port that server listens on. 4173 is correct because `PORT_SEED` — the
512
- # personal offset `playwright.config.ts` resolves the preview port from — is not committed (it
513
- # lives in a gitignored `.env`) and is not set anywhere in this workflow, so the port resolves
514
- # to its base on every CI run. That is the invariant, not a constant in `playwright.config.ts`:
515
- # the port there is seed-derived. The one setting that would move the port and leave this URL
516
- # behind is an `env` entry for the seed in this file, at workflow or job level. A repository or
517
- # organization variable would not: it reaches a step only through an explicit `vars.PORT_SEED`
518
- # expression, and nothing here writes one. For a seeded CI job, derive this URL from
519
- # `josh port preview` in the same job instead.
520
- env:
521
- BETTER_AUTH_URL: http://localhost:4173
544
+ # kit is not a SvelteKit app, so this job carries neither the `.svelte-kit` build cache nor the
545
+ # Better Auth `BETTER_AUTH_URL` pin; both belong to the consumer's copy in
546
+ # `templates/workflows/ci.yml`, which keeps them (joshuafolkken/kit#3326).
522
547
  steps:
523
548
  - name: Checkout code
524
549
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -528,17 +553,6 @@ jobs:
528
553
  with:
529
554
  registry-url: 'https://npm.pkg.github.com'
530
555
 
531
- - name: Setup build cache
532
- uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
533
- id: build-cache
534
- with:
535
- path: |
536
- .svelte-kit
537
- key: ${{ runner.os }}-build-cache-e2e-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('svelte.config.js', 'vite.config.ts', 'tsconfig.json', 'src/lib/server/auth.ts') }}
538
- restore-keys: |
539
- ${{ runner.os }}-build-cache-e2e-${{ hashFiles('pnpm-lock.yaml') }}-
540
- ${{ runner.os }}-build-cache-e2e-
541
-
542
556
  - name: Setup pnpm and install dependencies
543
557
  uses: ./.github/actions/setup-pnpm
544
558
  with:
@@ -11,18 +11,24 @@ concurrency:
11
11
  group: ${{ github.workflow }}-${{ github.ref }}
12
12
  cancel-in-progress: true
13
13
 
14
- permissions:
15
- contents: write
16
- pull-requests: write
17
-
18
14
  jobs:
15
+ # Gated on who opened the pull request rather than on who triggered the run, the same job gate as
16
+ # the distributed copy; arming stays restricted to Dependabot's own events, on the step below. The
17
+ # write rights are granted to this job alone (joshuafolkken/kit#3268).
19
18
  auto-merge:
20
19
  runs-on: ubuntu-latest
21
20
  timeout-minutes: 10
22
- if: github.actor == 'dependabot[bot]'
21
+ if: github.event.pull_request.user.login == 'dependabot[bot]'
22
+ permissions:
23
+ contents: write
24
+ pull-requests: write
23
25
  steps:
26
+ # The author gate also runs the job on a maintainer's push to a Dependabot branch, where this
27
+ # action fails because the first commit is no longer Dependabot's. Contained as in the
28
+ # distributed copy: the outputs stay empty, so the arming step below is simply not reached.
24
29
  - name: Fetch Dependabot metadata
25
30
  id: metadata
31
+ continue-on-error: true
26
32
  uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3.1.0
27
33
  with:
28
34
  github-token: '${{ secrets.GITHUB_TOKEN }}'
@@ -47,7 +53,8 @@ jobs:
47
53
  # CI only proves that kit still builds. Major bumps never auto-merge in either ecosystem.
48
54
  - name: Enable auto-merge for github-actions patch and minor updates
49
55
  if: >-
50
- steps.metadata.outputs.package-ecosystem == 'github_actions'
56
+ github.actor == 'dependabot[bot]'
57
+ && steps.metadata.outputs.package-ecosystem == 'github_actions'
51
58
  && (steps.metadata.outputs.update-type == 'version-update:semver-patch'
52
59
  || steps.metadata.outputs.update-type == 'version-update:semver-minor')
53
60
  env:
@@ -12,7 +12,37 @@ on:
12
12
  # cache is off here: a cache entry another run saved never reaches a job with publish credentials.
13
13
 
14
14
  jobs:
15
+ # The package is built once, here, and both registries receive this one tarball: a job that built
16
+ # its own copy could publish different bytes under the same version (joshuafolkken/kit#3268). The
17
+ # job holds no publish credentials, so the build runs without any.
18
+ pack:
19
+ if: startsWith(github.ref, 'refs/tags/v')
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 10
22
+ permissions:
23
+ contents: read
24
+ steps:
25
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+
27
+ - uses: ./.github/actions/setup-node
28
+
29
+ - uses: ./.github/actions/setup-pnpm
30
+ with:
31
+ cache: 'false'
32
+
33
+ - run: pnpm pack --out "$RUNNER_TEMP/kit.tgz"
34
+
35
+ # Kept as long as GitHub lets a run be re-run, so re-running a failed publish job still finds
36
+ # the tarball instead of forcing a full re-run that republishes an existing version.
37
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
38
+ with:
39
+ name: kit-package
40
+ path: ${{ runner.temp }}/kit.tgz
41
+ if-no-files-found: error
42
+ retention-days: 30
43
+
15
44
  publish-github:
45
+ needs: pack
16
46
  if: startsWith(github.ref, 'refs/tags/v')
17
47
  concurrency:
18
48
  group: package-publish
@@ -53,14 +83,22 @@ jobs:
53
83
  env:
54
84
  LATEST: ${{ steps.registry-latest.outputs.latest }}
55
85
 
86
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
87
+ with:
88
+ name: kit-package
89
+ path: ${{ runner.temp }}
90
+
56
91
  # The tag reaches the command through the environment rather than expanded into it, so a step
57
- # output is never parsed as shell (joshuafolkken/kit#3084).
58
- - run: pnpm publish --no-git-checks --tag "$PUBLISH_TAG" --registry https://npm.pkg.github.com
92
+ # output is never parsed as shell (joshuafolkken/kit#3084). setup-node's user config carries
93
+ # the GitHub Packages token, so it is kept here.
94
+ - name: Publish to GitHub Packages
95
+ run: cd "$RUNNER_TEMP" && npm publish kit.tgz --tag "$PUBLISH_TAG" --registry https://npm.pkg.github.com
59
96
  env:
60
97
  NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
61
98
  PUBLISH_TAG: ${{ steps.publish-tag.outputs.tag }}
62
99
 
63
100
  publish-npm:
101
+ needs: pack
64
102
  if: startsWith(github.ref, 'refs/tags/v')
65
103
  concurrency:
66
104
  group: package-publish
@@ -88,7 +126,10 @@ jobs:
88
126
  with:
89
127
  cache: 'false'
90
128
 
91
- - run: pnpm pack --out "$RUNNER_TEMP/kit.tgz"
129
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
130
+ with:
131
+ name: kit-package
132
+ path: ${{ runner.temp }}
92
133
 
93
134
  - name: Select npm tag
94
135
  id: publish-tag
@@ -115,6 +156,9 @@ jobs:
115
156
  create-release:
116
157
  needs: [publish-github, publish-npm, update-production]
117
158
  runs-on: ubuntu-latest
159
+ # `josh release:github` waits up to 60 minutes (120 polls, 30 seconds apart) for lower tags'
160
+ # releases, which can sit queued behind `package-publish`; the extra 5 minutes cover the setup
161
+ # before it. Lower this only together with that wait budget.
118
162
  timeout-minutes: 65
119
163
  permissions:
120
164
  actions: read
@@ -138,4 +182,4 @@ jobs:
138
182
  RELEASE_TAG: ${{ github.ref_name }}
139
183
  RELEASE_START_TAG: v1.887.0
140
184
  RELEASE_WORKFLOW: publish.yml
141
- RELEASE_JOBS: publish-github,publish-npm,update-production
185
+ RELEASE_JOBS: pack,publish-github,publish-npm,update-production
@@ -3,7 +3,10 @@ on:
3
3
  push:
4
4
  branches:
5
5
  - main
6
+ # Limited to main like ci.yml: a pull request into another branch is never merged to main as is,
7
+ # so its scan would spend a run and SonarCloud analysis on code that does not ship.
6
8
  pull_request:
9
+ branches: [main]
7
10
  types: [opened, synchronize, reopened]
8
11
  # A push run is grouped by the commit it carries, so a later push to main never cancels an earlier
9
12
  # one; without the sha every push to main shares one group and the run for the commit that changed
package/.pnpmfile.mjs CHANGED
@@ -2,9 +2,10 @@
2
2
  // `josh init` / `josh sync` copy this file into every project that publishes (joshuafolkken/kit#3110)
3
3
  // and overwrite it while this first line stays; edit it in kit, not here.
4
4
  // Strips the Safe Chain `preinstall` from the packed manifest only (joshuafolkken/kit#2693).
5
- // kit writes it to run Safe Chain for the repository's own development installs; shipped, it becomes
6
- // a build script every consumer's pnpm refuses to run unapproved, and it could not protect them
7
- // anyway — their install has already started by the time a dependency's `preinstall` runs. The
5
+ // kit writes it to warn the repository's own development installs when Safe Chain is not active
6
+ // (joshuafolkken/kit#3269); shipped, it becomes a build script every consumer's pnpm refuses to run
7
+ // unapproved, and it could not protect them anyway — their install has already started by the time
8
+ // a dependency's `preinstall` runs. The
8
9
  // repository's package.json keeps it; `pnpm pack` and `pnpm publish` call this hook on the copy they
9
10
  // write. Any other lifecycle script — a native build, a binary download — is the package's own and
10
11
  // ships untouched.
package/.prettierignore CHANGED
@@ -1,5 +1,11 @@
1
- # Claude Code
2
- .claude/
1
+ # Claude Code — local runtime state stays out; the distributed parts are formatted like any source
2
+ .claude/*
3
+ !.claude/settings.json
4
+ !.claude/skills/
5
+ !.claude/agents/
6
+ !.claude/.claude-plugin/
7
+ # Prettier pads every Markdown table column, which grows the skills past their byte budgets (joshuafolkken/kit#3325)
8
+ .claude/**/*.md
3
9
 
4
10
  # Package Managers
5
11
  package-lock.json
package/CLAUDE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Claude Code Instructions
2
2
 
3
- > **This file is the entry point for every agent rule.** `AGENTS.md` and `GEMINI.md` are pointers to it. A rule's trigger is written **once**, here; its procedure and numbers **once**, at its pointer (the single source). History and rationale: `docs/maintainers/claude-md-history.md`.
3
+ > The entry point for every agent rule — `AGENTS.md`, `GEMINI.md` and `.cursorrules` point here; each rule has a single source (`prompts/collaboration-workflow/residency.md`).
4
4
 
5
5
  ## Project
6
6
 
@@ -10,29 +10,29 @@ Stack: TypeScript · pnpm · SvelteKit · Vitest · Playwright · TailwindCSS ·
10
10
 
11
11
  - **Answer opinion-seeking questions from a neutral standpoint.** A leading question is not a cue to agree — recommend the option you genuinely judge best.
12
12
  - **Fix root causes, not symptoms.** Where the proper fix is out of scope, surface the root cause instead of papering over it.
13
- - **Cross-package problems → file the upstream Issue, then stop.** A defect in another package (a dependency, or `josh` / kit tooling) is never worked around locally — **weakening a verification gate is a workaround too**. File it (first-party Tier A, third-party Tier C) and stop. `prompts/collaboration-workflow/upstream-interrupt.md`.
13
+ - **Cross-package problems → file the upstream Issue, then stop.** A defect in another package (a dependency, or `josh` / kit tooling) is never worked around locally — **weakening a verification gate is a workaround too**. File it (first-party Tier A, third-party Tier C) and stop. `prompts/collaboration-workflow/upstream-interrupt.md`. Your own repository's run tooling is not another package: `upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合".
14
14
  - **Third-party repositories are Tier C.** Decide the party with `pnpm josh repo:party`; every write to a tracker we do not own needs explicit current-turn instruction. `prompts/collaboration-workflow/upstream-interrupt.md`.
15
- - **No clones — single-source, even across package boundaries.** Duplicate non-trivial logic only after presenting the alternative and getting explicit approval. `prompts/collaboration-workflow/principles.md` → "クローン禁止".
16
- - **Design for elegance and simplicity first.** Before adding a hook, guard, rule or abstraction, ask whether fixing the cause makes it unnecessary. `prompts/collaboration-workflow/principles.md` → "設計はエレガント".
17
- - **Distinguish consultation from execution.** A question or goal statement asks for analysis only — act on an explicit imperative or a workflow keyword. `prompts/collaboration-workflow/principles.md` → "相談と実行".
18
- - **Route distributed-doc / config changes upstream to kit.** In a consumer repo never edit kit-distributed docs/config (`josh sync` overwrites them); in kit you are the source. `prompts/collaboration-workflow/principles.md` → "配布ドキュメント".
19
- - **Latest-first, fix forward — pin back only as a last resort.** `prompts/collaboration-workflow/principles.md` → "最新優先".
15
+ - **No clones — single-source, even across package boundaries.** Duplicate non-trivial logic only after presenting the alternative and getting explicit approval. `prompts/collaboration-workflow/principles.md` → "no-clones".
16
+ - **Design for elegance and simplicity first.** Before adding a hook, guard, rule or abstraction, ask whether fixing the cause makes it unnecessary. `prompts/collaboration-workflow/principles.md` → "elegant-design".
17
+ - **Distinguish consultation from execution.** A question or goal statement asks for analysis only — act on an explicit imperative or a workflow keyword. `prompts/collaboration-workflow/principles.md` → "consult-vs-execute".
18
+ - **Route distributed-doc / config changes upstream to kit.** In a consumer repo never edit kit-distributed docs/config (`josh sync` overwrites them); in kit you are the source. `prompts/collaboration-workflow/principles.md` → "upstream-to-kit".
19
+ - **Latest-first, fix forward — pin back only as a last resort.** `prompts/collaboration-workflow/principles.md` → "latest-first".
20
20
  - **Output language follows `JOSH_SESSION_LANG`** (default `ja`) for session output and artifact prose; English for Issue/PR titles, code comments, test titles, commit messages and script strings. `prompts/collaboration-workflow/overview.md`.
21
21
  - **Cite an Issue with a number-link and a short title in the session language.** `prompts/collaboration-workflow/issue-citation.md`.
22
- - **Durable rules belong in prompts/docs, not local MEMORY.** `prompts/collaboration-workflow/principles.md` → "恒久ルール".
22
+ - **Durable rules belong in prompts/docs, not local MEMORY.** `prompts/collaboration-workflow/principles.md` → "durable-rules".
23
23
  - **Never carry a file's new text inside a shell command.** Use the Edit tool, not a heredoc. `prompts/collaboration-workflow/file-edits.md`.
24
24
  - **Never put a body in shell double quotes** — a backtick or `$` there is _executed_; pass the body by path. `prompts/collaboration-workflow/shell-body.md`.
25
25
  - **Put every call that does not depend on another's result in the same turn.** **The criterion is whether this call's input needs another call's result, not what kind of call it is** — edits are covered exactly as reads are. `pnpm josh batch:guard` enforces it; `prompts/collaboration-workflow/rule-delivery.md`.
26
26
 
27
- ### Decision autonomy (minimize confirmation stops)
27
+ ### Decision autonomy
28
28
 
29
- Classify each decision point and act; stop **only** when it genuinely needs the user's judgment. `prompts/collaboration-workflow/operating-rules.md` → 「意思決定の自律ポリシー(確認停止を減らす)」.
29
+ Classify each decision point and act; stop **only** where the user's judgment is genuinely needed. `prompts/collaboration-workflow/operating-rules.md` → "decision-autonomy".
30
30
 
31
31
  - **Tier A — reversible implementation / design choices** (library, naming, layout, tests, refactor shape; placing a filed Issue into an epic; self-correction). Pick the clearly-better option, proceed, log it.
32
32
  - **Tier B — genuine toss-up.** The only tier that stops — ask with the candidates and trade-offs.
33
33
  - **Tier C — irreversible / shared-state / out-of-scope actions** (merge, branch delete, force push, destructive ops, repo settings, out-of-scope work, `devEngines` / overrides edits): explicit user instruction only, never auto-decided. Deleting a git-tracked file is reversible, so it is not a destructive op — inspect the target first and surface any contradiction.
34
34
 
35
- Log auto-decisions: an Issue comment inside an Issue workflow, otherwise a one-line "Auto-decided: `<choice>` over `<alt>` because `<reason>`" in the reply.
35
+ Log auto-decisions: an Issue comment in an Issue workflow, else a one-line "Auto-decided: `<choice>` over `<alt>` because `<reason>`" in the reply.
36
36
 
37
37
  ## Environment Variables
38
38
 
@@ -40,7 +40,7 @@ Log auto-decisions: an Issue comment inside an Issue workflow, otherwise a one-l
40
40
 
41
41
  ## Critical Conventions (non-standard — always apply)
42
42
 
43
- Most are lint-enforced; `function` syntax and the early-return one-liner are not. Craft guidance: `prompts/coding-standards.md`.
43
+ Most are lint-enforced. Craft guidance: `prompts/coding-standards.md`.
44
44
 
45
45
  ### Naming
46
46
 
@@ -69,7 +69,7 @@ Svelte `PascalCase.svelte(.ts)` · TypeScript `kebab-case.ts` · tests `*.test.t
69
69
 
70
70
  - Effective overrides live in `pnpm-workspace.yaml`; check both files.
71
71
  - **NEVER** remove or modify entries in **either** location without explicit user approval.
72
- - **NEVER** modify the `devEngines` field in `package.json` without explicit user confirmation.
72
+ - **NEVER** modify the `devEngines` field in `package.json` without explicit user confirmation — except the `josh latest` lockstep pnpm bump, kept per the `dependency-update` skill.
73
73
  - After any dependency-update command, load the `dependency-update` skill before reporting anything about the pins.
74
74
 
75
75
  ## Package-First Development
@@ -78,7 +78,7 @@ Before building a feature, check for a well-maintained package — measure with
78
78
 
79
79
  ## Code Change Rules
80
80
 
81
- 0. **Work summary + test declaration** — before writing any implementation code, once per Issue (required in fullrun/halfrun/backlogrun; `kickoff` exempt), never wrapped in a code fence, never a confirmation stop. `prompts/collaboration-workflow/report-format.md`; `pnpm josh report:lint`.
81
+ 0. **Work summary + test declaration** — before writing any implementation code, once per Issue (required in fullrun/halfrun/prrun/backlogrun; `kickoff` exempt), never wrapped in a code fence, never a confirmation stop. `prompts/collaboration-workflow/report-format.md`; `pnpm josh report:lint`.
82
82
  - **Overview** — **Now / Change / Check**, one sentence each in the session language that a non-programmer can follow; name the concrete subject in each line — subject-less prose is not acceptable. Use no file paths, function or type names, or CLI option flags — only internal identifiers are banned.
83
83
  - **Details** — every change with its test: `<what changes> — Test: <Unit|E2E> — <file path> — <what it verifies>`. Completion reports lead with **Cause / Fix / Result**.
84
84
  - **Tests are required for ALL changes** — zero tests without explicit approval is a violation. Exceptions (non-runtime and basic-profile manual checks): `prompts/testing-guide.md`. `pnpm josh test:declared` answers from the changed paths; a runtime change with no test is refused at `pnpm josh git -y` on `required`.
@@ -103,18 +103,18 @@ When `josh bump` changes the version, update `docs/` for any changed behavior be
103
103
  ## Git Rules
104
104
 
105
105
  - **No commits** unless explicitly requested. **No merges, branch deletions, force pushes or other shared-state mutations** unless requested in the current turn — except invoking `fullrun` or `backlogrun` authorizes the merge via `pnpm josh followup`; `prrun` does not. `.claude/settings.json` denies these, but the deny is narrower than the rule — never read "the tool let me" as permission.
106
- - **Never stage or mutate the git index on your own** — only on explicit instruction or via `pnpm josh git`. `prompts/collaboration-workflow/operating-rules.md` → "git index を勝手に変更しない".
106
+ - **Never stage or mutate the git index on your own** — only on explicit instruction or via `pnpm josh git`. `prompts/collaboration-workflow/operating-rules.md` → "no-self-staging".
107
107
  - **Use `pnpm josh git`; open a PR with `pnpm josh pr`** — `pnpm josh rule:guard` refuses a direct `gh pr create`.
108
108
  - **Run `git status` (and `git stash list`) live** before acting on any tree assumption.
109
109
 
110
110
  ## Collaboration Workflow
111
111
 
112
- - The issue-driven flow: `prompts/collaboration-workflow.md`. **Before writing a rule as prose, place it by `prompts/collaboration-workflow/residency.md`** — computable answers go to `pnpm josh oracle:list`, ordering to `pnpm josh run:step`.
113
- - **File through `pnpm josh issue:file` — it counts the target repository's open Issues, never a hand count; above the WIP cap, close one first.** Nothing honestly closable means do not file. A filing the run is blocked by is exempt, and so is an **interrupt** — three tests decide that, never judgement: a verification answers wrongly, a documented workflow cannot complete, or data is lost or written outside the repository; both exemptions proceed, stating the overage. Meeting none of the three, a finding stays discretionary. `pnpm josh rule:guard` states it again at the call that files. `prompts/collaboration-workflow/wip-cap.md`.
112
+ - The issue-driven flow: `prompts/collaboration-workflow.md`; where a new rule goes: `prompts/collaboration-workflow/residency.md` (computable answers → `pnpm josh oracle:list`, ordering → `pnpm josh run:step`).
113
+ - **File through `pnpm josh issue:file`, never a hand count; above the WIP cap, close one first.** Exempt: a filing the run is blocked by, and an **interrupt** — a verification answers wrongly, a documented workflow cannot complete, or data is lost or written outside the repository; both proceed, stating the overage, and anything else stays discretionary. `pnpm josh rule:guard` states the rest at the call that files. `prompts/collaboration-workflow/wip-cap.md`.
114
114
 
115
115
  ### Shorthand Commands
116
116
 
117
- `kickoff`, `fullrun`, `prrun`, `halfrun`, `backlogrun` (with `#N` / `new`) are procedures in the `workflow-commands` skill — read it before any part of a command, including the first `gh` call. **What stays here is decided by one question: must the rule fire on a turn where no skill was loaded?** Explicit invocation, the mid-workflow stop notification, the `overrides` / `devEngines` prohibitions, the UI-verification gate and the three `epic:*` rules below all do.
117
+ `kickoff`, `fullrun`, `prrun`, `halfrun`, `backlogrun` (with `#N` / `new`) are procedures in the `workflow-commands` skill — read it before any part of a command, including the first `gh` call.
118
118
 
119
119
  **`queue` and `epicrun` were removed** — point `queue` to `backlogrun #N1 #N2 …` and `epicrun` to `backlogrun #E --only`.
120
120
 
@@ -135,5 +135,3 @@ Before pausing **any** run for the user — a command's stop, an upstream-Issue
135
135
  ```bash
136
136
  pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'<one-line reason>\n<what is needed from the user>'
137
137
  ```
138
-
139
- Keep `--body=...` one token when the body starts with `-`, otherwise `parseArgs` rejects it.
package/README.md CHANGED
@@ -12,32 +12,39 @@
12
12
  [![CI](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml)
13
13
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=joshuafolkken_kit&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=joshuafolkken_kit)
14
14
 
15
- **Tell your AI agent the change. It files the GitHub Issue and takes it to a merged PR — the same way in every project.**
15
+ **AI assistant setup, plus an optional GitHub workflow.**
16
16
 
17
- kit gives Claude Code or Codex (or Gemini, Cursor) your project's rules, checks and an Issue-driven workflow.
17
+ kit gives Claude Code or Codex your project's rules and checks. With the workflow, the agent takes each change from Issue to merged PR.
18
+
19
+ **Only want the AI assistant, without the GitHub workflow?** Set it up here: [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
18
20
 
19
21
  ## Sound familiar?
20
22
 
21
23
  Each pain links to how it is solved — or read [the whole story](./docs/why.md).
22
24
 
25
+ kit solves these in every project — and so do [app-kit] and [game-kit], which build on it:
26
+
27
+ - [Done doesn't mean done](./docs/why.md#done-doesnt-mean-done)
28
+ - [Quality slips with every change](./docs/why.md#quality-slips-with-every-change)
29
+ - [I keep repeating the same instructions](./docs/why.md#i-keep-repeating-the-same-instructions)
30
+ - [The agent does things I never asked for](./docs/why.md#the-agent-does-things-i-never-asked-for)
31
+ - [Reviewing every change is a chore](./docs/why.md#reviewing-every-change-is-a-chore)
32
+ - [Some changes need a human eye](./docs/why.md#some-changes-need-a-human-eye)
33
+ - [I spend all day talking to the agent](./docs/why.md#i-spend-all-day-talking-to-the-agent)
34
+ - [Big requests come back sloppy](./docs/why.md#big-requests-come-back-sloppy)
35
+ - [I want many Issues solved at once](./docs/why.md#i-want-many-issues-solved-at-once)
36
+ - [AI costs keep climbing](./docs/why.md#ai-costs-keep-climbing)
37
+ - [Writing Issues is a chore](./docs/why.md#writing-issues-is-a-chore)
38
+ - [Wiring AI up to GitHub is a chore](./docs/why.md#wiring-ai-up-to-github-is-a-chore)
39
+ - [I can't tell if the agent is stuck or done](./docs/why.md#i-cant-tell-if-the-agent-is-stuck-or-done)
40
+ - [One task overwrote another's work](./docs/why.md#one-task-overwrote-anothers-work)
41
+ - [A session cut off and I lost track](./docs/why.md#a-session-cut-off-and-i-lost-track)
42
+ - [The backlog fills with duplicate Issues](./docs/why.md#the-backlog-fills-with-duplicate-issues)
43
+
44
+ The app and game kits add:
45
+
23
46
  | Your pain | kit | [app-kit] | [game-kit] |
24
47
  | -------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :--------: |
25
- | [Done doesn't mean done](./docs/why.md#done-doesnt-mean-done) | ✅ | ✅ | ✅ |
26
- | [Quality slips with every change](./docs/why.md#quality-slips-with-every-change) | ✅ | ✅ | ✅ |
27
- | [I keep repeating the same instructions](./docs/why.md#i-keep-repeating-the-same-instructions) | ✅ | ✅ | ✅ |
28
- | [The agent does things I never asked for](./docs/why.md#the-agent-does-things-i-never-asked-for) | ✅ | ✅ | ✅ |
29
- | [Reviewing every change is a chore](./docs/why.md#reviewing-every-change-is-a-chore) | ✅ | ✅ | ✅ |
30
- | [Some changes need a human eye](./docs/why.md#some-changes-need-a-human-eye) | ✅ | ✅ | ✅ |
31
- | [I spend all day talking to the agent](./docs/why.md#i-spend-all-day-talking-to-the-agent) | ✅ | ✅ | ✅ |
32
- | [Big requests come back sloppy](./docs/why.md#big-requests-come-back-sloppy) | ✅ | ✅ | ✅ |
33
- | [I want many Issues solved at once](./docs/why.md#i-want-many-issues-solved-at-once) | ✅ | ✅ | ✅ |
34
- | [AI costs keep climbing](./docs/why.md#ai-costs-keep-climbing) | ✅ | ✅ | ✅ |
35
- | [Writing Issues is a chore](./docs/why.md#writing-issues-is-a-chore) | ✅ | ✅ | ✅ |
36
- | [Wiring AI up to GitHub is a chore](./docs/why.md#wiring-ai-up-to-github-is-a-chore) | ✅ | ✅ | ✅ |
37
- | [I can't tell if the agent is stuck or done](./docs/why.md#i-cant-tell-if-the-agent-is-stuck-or-done) | ✅ | ✅ | ✅ |
38
- | [One task overwrote another's work](./docs/why.md#one-task-overwrote-anothers-work) | ✅ | ✅ | ✅ |
39
- | [A session cut off and I lost track](./docs/why.md#a-session-cut-off-and-i-lost-track) | ✅ | ✅ | ✅ |
40
- | [The backlog fills with duplicate Issues](./docs/why.md#the-backlog-fills-with-duplicate-issues) | ✅ | ✅ | ✅ |
41
48
  | [Setting up SvelteKit on Cloudflare takes a day](https://github.com/joshuafolkken/app-kit/blob/main/docs/setup/install.md) | — | ✅ | ✅ |
42
49
  | [I'm not sure the app is secure](https://github.com/joshuafolkken/app-kit/blob/main/docs/security-headers.md) | — | ✅ | ✅ |
43
50
  | [Nobody looked at the screen](https://github.com/joshuafolkken/app-kit/blob/main/docs/shot.md) | — | ✅ | ✅ |
@@ -80,7 +87,7 @@ Add the two Telegram credentials to `.env` so a run that needs you can reach you
80
87
 
81
88
  Then open your agent and follow the [tutorial](./docs/tutorial.md).
82
89
 
83
- No Issue workflow? [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
90
+ AI assistant only, no GitHub workflow? [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
84
91
 
85
92
  ## Docs
86
93