@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.
- package/.claude/.claude-plugin/plugin.json +1 -1
- package/.claude/settings.json +2 -2
- package/.claude/skills/dependency-update/SKILL.md +4 -8
- package/.claude/skills/epic-commands/SKILL.md +2 -2
- package/.claude/skills/epic-commands/epic-bundle.md +1 -1
- package/.claude/skills/workflow-commands/SKILL.md +2 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +6 -4
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -5
- package/.claude/skills/workflow-commands/backlogrun-park.md +29 -9
- package/.claude/skills/workflow-commands/backlogrun-progress.md +7 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +4 -3
- package/.claude/skills/workflow-commands/backlogrun-steps.md +24 -15
- package/.claude/skills/workflow-commands/chain-rule.md +1 -1
- package/.claude/skills/workflow-commands/delegation.md +2 -2
- package/.claude/skills/workflow-commands/followup.md +5 -0
- package/.claude/skills/workflow-commands/fullrun-steps.md +1 -1
- package/.claude/skills/workflow-commands/halfrun.md +1 -1
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +1 -1
- package/.claude/skills/workflow-commands/observation-ledger.md +3 -3
- package/.claude/skills/workflow-commands/pre-gate-cut.md +10 -5
- package/.claude/skills/workflow-commands/prerequisite.md +2 -2
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +1 -1
- package/.codex/hooks.json +2 -2
- package/.cursorrules +6 -41
- package/.github/actions/setup-node/action.yml +1 -1
- package/.github/workflows/auto-tag.yml +3 -4
- package/.github/workflows/ci.yml +47 -33
- package/.github/workflows/dependabot-auto-merge.yml +13 -6
- package/.github/workflows/publish.yml +48 -4
- package/.github/workflows/sonar-qube.yml +3 -0
- package/.pnpmfile.mjs +4 -3
- package/.prettierignore +8 -2
- package/CLAUDE.md +18 -20
- package/README.md +26 -19
- package/SECURITY.md +15 -1
- package/dist/CLAUDE.md +18 -20
- package/dist/commands/document-section-cli.js +734 -0
- package/dist/hooks/audit-provision.js +346 -0
- package/dist/hooks/batch-guard.js +5 -4
- package/dist/hooks/{chunk-DYAVAM6S.js → chunk-55HHG5PX.js} +1405 -631
- package/dist/hooks/{chunk-A6P7PN7P.js → chunk-5VMKCCC4.js} +25 -10
- package/dist/hooks/chunk-5VNDSNG3.js +12 -0
- package/dist/hooks/{chunk-5KTCMCOT.js → chunk-6HJJXRBX.js} +4 -2
- package/dist/hooks/chunk-CDY4NFQG.js +15 -0
- package/dist/hooks/chunk-ELCN5LCH.js +135 -0
- package/dist/hooks/{chunk-ENA7P5FB.js → chunk-F56MFS4B.js} +3 -3
- package/dist/hooks/{chunk-ANJ2WGFD.js → chunk-FIVDHQGT.js} +7 -6
- package/dist/hooks/{chunk-3V37IID6.js → chunk-JBBMAPC4.js} +23 -14
- package/dist/hooks/{chunk-GU5MATVE.js → chunk-JUDKDCDP.js} +499 -389
- package/dist/hooks/{chunk-ZDZ555YH.js → chunk-NV2JRZZO.js} +743 -909
- package/dist/hooks/{chunk-V2BTOZHT.js → chunk-RNWHN5BP.js} +3 -3
- package/dist/hooks/{chunk-URJA6XY4.js → chunk-TQNPDZNH.js} +4 -4
- package/dist/hooks/{chunk-GYNGP7HI.js → chunk-VC3PZPZO.js} +1 -1
- package/dist/hooks/codex-hook-adapter.js +14 -12
- package/dist/hooks/duplicate-read-guard.js +6 -5
- package/dist/hooks/format-edited.js +4 -3
- package/dist/hooks/inputs.json +232 -210
- package/dist/hooks/investigation-guard.js +6 -5
- package/dist/hooks/pretool-guard.js +12 -10
- package/dist/hooks/session-lang.js +2 -4
- package/dist/hooks/stop-guard.js +81 -59
- package/dist/josh.js +872 -75
- package/dist/version/index.d.ts +7 -2
- package/dist/version/index.js +152 -75
- package/eslint/base.js +23 -1
- package/eslint/rules/code-quality.js +3 -0
- package/eslint/rules/early-return-one-liner.js +98 -0
- package/eslint/rules/unicorn.js +16 -1
- package/package.json +7 -6
- package/pnpm-workspace.yaml +9 -4
- package/prettier/basic.d.ts +3 -1
- package/prettier/index.d.ts +3 -1
- package/prettier/static.d.ts +3 -1
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +4 -4
- package/prompts/collaboration-workflow/glossary.md +1 -1
- package/prompts/collaboration-workflow/operating-rules.md +17 -9
- package/prompts/collaboration-workflow/overview.md +2 -2
- package/prompts/collaboration-workflow/principles.md +14 -12
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +6 -6
- package/prompts/collaboration-workflow/shell-body.md +6 -6
- package/prompts/collaboration-workflow/turn-batching.md +1 -1
- package/prompts/collaboration-workflow/upstream-interrupt.md +12 -2
- package/prompts/collaboration-workflow/wip-cap.md +10 -10
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +1 -1
- package/scripts/agent/agent-headless.ts +29 -0
- package/scripts/agent/agent-launch-environment.ts +6 -2
- package/scripts/agent/codex-agent-argv.ts +2 -1
- package/scripts/auto-ok/auto-ok-cli.ts +1 -1
- package/scripts/backlog/backlog-arrival.ts +3 -3
- package/scripts/backlog/backlog-budget.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +135 -0
- package/scripts/backlog/backlog-drive-cli.ts +11 -137
- package/scripts/backlog/backlog-drive-launch.ts +39 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +3 -5
- package/scripts/backlog/backlog-drive-named.ts +3 -3
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-owner.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +1 -1
- package/scripts/backlog/backlog-drive.ts +1 -1
- package/scripts/backlog/backlog-next.ts +31 -9
- package/scripts/backlog/backlog-offer-cli.ts +6 -6
- package/scripts/backlog/backlog-offer.ts +1 -1
- package/scripts/backlog/backlog-plan-cli.ts +7 -6
- package/scripts/backlog/backlog-pool.ts +57 -11
- package/scripts/backlog/backlog-rank.ts +18 -9
- package/scripts/backlog/backlog-ready.ts +1 -1
- package/scripts/backlog/backlog-restructure.ts +152 -0
- package/scripts/backlog/backlog-scope.ts +1 -1
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +1 -1
- package/scripts/backlog/backlog-waves.ts +15 -17
- package/scripts/build/build-codex-hooks.ts +3 -1
- package/scripts/build/build-commands.ts +66 -0
- package/scripts/build/build-hooks.ts +2 -1
- package/scripts/build/build-library.ts +12 -3
- package/scripts/build/build.ts +70 -0
- package/scripts/build/local-bin.ts +3 -13
- package/scripts/cost-runtime/context-cut-threshold.ts +1 -9
- package/scripts/cost-runtime/cost-verdict.ts +15 -28
- package/scripts/delegation/investigation-reads.ts +3 -1
- package/scripts/discovery/repo-origin.ts +5 -5
- package/scripts/doctor/doctor-consumer.ts +2 -2
- package/scripts/doctor/doctor-io.ts +2 -3
- package/scripts/document/capped-print-part.ts +30 -0
- package/scripts/document/capped-print.ts +3 -4
- package/scripts/document/document-byte-budget.ts +11 -2
- package/scripts/document/document-scan.ts +117 -0
- package/scripts/document/document-section.ts +143 -16
- package/scripts/document/entry-read-budget.ts +5 -3
- package/scripts/document/entry-read-set.ts +10 -89
- package/scripts/document/read-set-cost.ts +98 -0
- package/scripts/epic/epic-add-body.ts +1 -0
- package/scripts/epic/epic-audit-checks.ts +1 -1
- package/scripts/epic/epic-audit-rationale.ts +4 -3
- package/scripts/epic/epic-bundle-cli.ts +14 -3
- package/scripts/epic/epic-bundle-poll.ts +41 -0
- package/scripts/epic/epic-busy.ts +1 -1
- package/scripts/epic/epic-candidate-confirm.ts +3 -2
- package/scripts/epic/epic-classify.ts +1 -1
- package/scripts/epic/epic-cli-argv.ts +78 -46
- package/scripts/epic/epic-cli-remove.ts +11 -19
- package/scripts/epic/epic-cli.ts +74 -73
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +1 -1
- package/scripts/epic/epic-cross-repo.ts +5 -5
- package/scripts/epic/epic-graph.ts +1 -1
- package/scripts/epic/epic-index.ts +1 -1
- package/scripts/epic/epic-issue.ts +2 -6
- package/scripts/epic/epic-lane-offer.ts +2 -2
- package/scripts/epic/epic-next.ts +29 -42
- package/scripts/epic/epic-solo-stale.ts +1 -1
- package/scripts/epic/epic-triage.ts +8 -4
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/followup/git-followup-finish.ts +2 -2
- package/scripts/followup/git-followup-label.ts +2 -2
- package/scripts/followup/git-followup-merged.ts +2 -2
- package/scripts/followup/git-followup-stages.ts +9 -0
- package/scripts/followup/git-pr-followup-checks.ts +142 -0
- package/scripts/followup/git-pr-followup.ts +5 -130
- package/scripts/gate/core-budget.ts +69 -1
- package/scripts/gate/gate-plan.ts +47 -7
- package/scripts/gate/gate-skip.ts +38 -7
- package/scripts/gate/hook-gate-reuse.ts +12 -10
- package/scripts/gate/pre-commit-type-check.ts +4 -1
- package/scripts/gate/project-checks.ts +6 -9
- package/scripts/gate/type-check-step.ts +2 -3
- package/scripts/gate/verification-gate.ts +27 -8
- package/scripts/gh/git-gh-api-path.ts +2 -2
- package/scripts/gh/git-gh-issue-rest.ts +3 -3
- package/scripts/gh/git-gh-issue-write.ts +53 -7
- package/scripts/gh/git-gh-issue.ts +5 -3
- package/scripts/gh/git-gh-pr-read.ts +68 -19
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr.ts +5 -1
- package/scripts/gh/git-pr-ai-review.ts +1 -1
- package/scripts/gh/git-pr-checks-eval.ts +9 -3
- package/scripts/gh/git-pr-checks-parse.ts +1 -1
- package/scripts/gh/git-pr-checks-watch.ts +6 -5
- package/scripts/gh/git-pr-checks.ts +18 -6
- package/scripts/gh/git-pr-coderabbit.ts +1 -1
- package/scripts/gh/git-pr-error.ts +1 -3
- package/scripts/gh/git-pr.ts +9 -13
- package/scripts/gh/github-issue-url.ts +2 -2
- package/scripts/git/constants.ts +12 -6
- package/scripts/git/git-command.ts +20 -218
- package/scripts/git/git-diff-reads.ts +225 -0
- package/scripts/git/git-error.ts +4 -12
- package/scripts/git/git-pre-push-hook.ts +139 -0
- package/scripts/git/git-prompt.ts +2 -6
- package/scripts/git/{schemas.ts → git-schemas.ts} +2 -0
- package/scripts/git/git-spawn-sync.ts +3 -1
- package/scripts/git/git-spawn.ts +1 -1
- package/scripts/git/git-staging.ts +4 -6
- package/scripts/git/git-status.ts +3 -9
- package/scripts/git/main-merge.ts +57 -21
- package/scripts/hooks/codex-hook-adapter.ts +1 -1
- package/scripts/hooks/edited-cspell.ts +2 -4
- package/scripts/hooks/format-edited-file.ts +3 -12
- package/scripts/hooks/pre-push-unit.ts +31 -9
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/run-hook.sh +5 -4
- package/scripts/hooks/stop-guard.ts +5 -3
- package/scripts/init/init-actions.ts +0 -5
- package/scripts/init/init-ai-copy.ts +13 -2
- package/scripts/init/init-logic-json-merge.ts +19 -0
- package/scripts/init/init-logic-secretlint.ts +7 -7
- package/scripts/init/init-logic-workspace.ts +41 -2
- package/scripts/init/init-logic.ts +16 -26
- package/scripts/init/init.ts +5 -15
- package/scripts/init/initial-commit.ts +4 -4
- package/scripts/init/kit-development-versions.ts +40 -0
- package/scripts/init/kit-setup-state.ts +2 -2
- package/scripts/init/start-exec.ts +68 -19
- package/scripts/init/start-setup-pr.ts +9 -9
- package/scripts/init/start-steps.ts +6 -10
- package/scripts/issue/defect-rate-cli.ts +1 -1
- package/scripts/issue/git-next-issues.ts +1 -1
- package/scripts/issue/issue-auto-ok.ts +1 -1
- package/scripts/issue/issue-backlinks-cli.ts +2 -2
- package/scripts/issue/issue-backlinks.ts +9 -9
- package/scripts/issue/issue-comment-cli.ts +19 -13
- package/scripts/issue/issue-file-cli.ts +45 -18
- package/scripts/issue/issue-file.ts +24 -1
- package/scripts/issue/issue-scout-closed.ts +1 -1
- package/scripts/issue/issue-state-cli.ts +30 -74
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-command-types.ts +11 -0
- package/scripts/josh/josh-commands-ai.ts +4 -4
- package/scripts/josh/josh-commands-backlog.ts +4 -1
- package/scripts/josh/josh-commands-development.ts +11 -1
- package/scripts/josh/josh-commands-document.ts +1 -0
- package/scripts/josh/josh-commands-lane.ts +22 -0
- package/scripts/josh/josh-commands-maintenance.ts +4 -4
- package/scripts/josh/josh-commands-run.ts +12 -7
- package/scripts/josh/josh-in-process.ts +28 -9
- package/scripts/josh/josh-logic.ts +33 -15
- package/scripts/josh/process-identity.ts +1 -3
- package/scripts/josh/session-language-cli.ts +3 -4
- package/scripts/lane/lane-await.ts +5 -1
- package/scripts/lane/lane-child-invocation.ts +2 -2
- package/scripts/lane/lane-cli.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +14 -10
- package/scripts/lane/lane-environment.ts +5 -1
- package/scripts/lane/lane-handoff.ts +1 -1
- package/scripts/lane/lane-install.ts +2 -13
- package/scripts/lane/lane-launch-cli.ts +35 -3
- package/scripts/lane/lane-ledger.ts +145 -0
- package/scripts/lane/lane-leftover.ts +1 -1
- package/scripts/lane/lane-load.ts +108 -0
- package/scripts/lane/lane-measure-cli.ts +149 -0
- package/scripts/lane/lane-occupancy.ts +3 -0
- package/scripts/lane/lane-reap.ts +1 -3
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-stats.ts +224 -0
- package/scripts/lane/lane-vacant.ts +36 -0
- package/scripts/lane/openai-lane-ship.ts +2 -2
- package/scripts/lane/openai-lane-supervisor-owner.ts +180 -0
- package/scripts/lane/openai-lane-supervisor.ts +7 -165
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +35 -0
- package/scripts/lib/animation-helpers.ts +2 -2
- package/scripts/lib/buffered-process.ts +3 -7
- package/scripts/lib/cli-flags.ts +71 -1
- package/scripts/lib/spawn-exit.ts +2 -2
- package/scripts/lib/timeouts.ts +35 -2
- package/scripts/lines/line-budget.ts +4 -6
- package/scripts/notify/telegram-notify.ts +26 -1
- package/scripts/notify/telegram-test.ts +6 -0
- package/scripts/observations/observation-ledger-line.ts +6 -6
- package/scripts/observations/observation-ledger-migrate.ts +55 -4
- package/scripts/observations/observation-ledger.ts +26 -7
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/propagate/propagate-git.ts +1 -1
- package/scripts/propagate/propagate-publish.ts +2 -2
- package/scripts/propagate/propagate-steps.ts +20 -15
- package/scripts/propagate/propagate.ts +36 -27
- package/scripts/refactor/import-graph.ts +18 -1
- package/scripts/refactor/refactor-lint.ts +4 -4
- package/scripts/repo/repository-labels.ts +2 -2
- package/scripts/repo/required-checks-logic.ts +1 -3
- package/scripts/review/live-evidence.ts +2 -4
- package/scripts/review/review-brief-cli.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +1 -1
- package/scripts/review/review-findings-cli.ts +1 -3
- package/scripts/rules/decision-oracle-batch.ts +128 -0
- package/scripts/rules/decision-oracle-tokens.ts +21 -0
- package/scripts/rules/decision-oracle.ts +8 -120
- package/scripts/rules/delivered-rules.ts +26 -182
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/early-heartbeat.ts +3 -3
- package/scripts/rules/git-argv.ts +1 -1
- package/scripts/rules/git-force.ts +1 -1
- package/scripts/rules/implementation-cut.ts +2 -2
- package/scripts/rules/index-guard.ts +1 -1
- package/scripts/rules/issue-comments.ts +118 -0
- package/scripts/rules/{issue-fold.ts → issue-fold-rule.ts} +2 -2
- package/scripts/rules/lane-background.ts +2 -2
- package/scripts/rules/lane-park.ts +18 -0
- package/scripts/rules/lane-split-park.ts +128 -0
- package/scripts/rules/oracle-firing.ts +1 -1
- package/scripts/rules/poll-loop.ts +1 -1
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +59 -4
- package/scripts/rules/{run-tail.ts → run-tail-rule.ts} +2 -2
- package/scripts/rules/shell-body-trigger.ts +1 -1
- package/scripts/rules/stop-rules.ts +18 -7
- package/scripts/rules/test-declared-commit.ts +4 -4
- package/scripts/rules/wip-cap.ts +63 -0
- package/scripts/run/{run-carry-args.ts → carry/run-carry-args.ts} +37 -13
- package/scripts/run/{run-carry-change.ts → carry/run-carry-change.ts} +29 -7
- package/scripts/run/{run-carry-cli.ts → carry/run-carry-cli.ts} +4 -6
- package/scripts/run/{run-carry.ts → carry/run-carry.ts} +12 -6
- package/scripts/run/{run-cut-args.ts → cut/run-cut-args.ts} +1 -1
- package/scripts/run/{run-cut-cli.ts → cut/run-cut-cli.ts} +3 -3
- package/scripts/run/{run-cut-report.ts → cut/run-cut-report.ts} +2 -2
- package/scripts/run/{run-cut.ts → cut/run-cut.ts} +1 -1
- package/scripts/run/{run-entry-cli.ts → entry/run-entry-cli.ts} +11 -11
- package/scripts/run/{run-entry.ts → entry/run-entry.ts} +2 -2
- package/scripts/run/{run-event-scope.ts → event/run-event-scope.ts} +1 -1
- package/scripts/run/{run-event-stream-emit.ts → event/run-event-stream-emit.ts} +1 -1
- package/scripts/run/{run-event-stream.ts → event/run-event-stream.ts} +16 -2
- package/scripts/run/{run-hold-cli.ts → hold/run-hold-cli.ts} +5 -5
- package/scripts/run/{run-merge-cli.ts → merge/run-merge-cli.ts} +10 -5
- package/scripts/run/{run-merge-steps.ts → merge/run-merge-steps.ts} +53 -5
- package/scripts/run/{run-merge.ts → merge/run-merge.ts} +1 -1
- package/scripts/run/{run-progress-cli.ts → progress/run-progress-cli.ts} +1 -1
- package/scripts/run/{run-progress-config.ts → progress/run-progress-config.ts} +2 -17
- package/scripts/run/{run-progress-read.ts → progress/run-progress-read.ts} +5 -5
- package/scripts/run/{run-progress.ts → progress/run-progress.ts} +1 -1
- package/scripts/run/{run-review-steps.ts → review/run-review-steps.ts} +2 -3
- package/scripts/run/run-ending.ts +2 -2
- package/scripts/run/run-halfrun-resume.ts +6 -1
- package/scripts/run/run-headless.ts +1 -1
- package/scripts/run/run-invocation.ts +85 -84
- package/scripts/run/run-liveness.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +1 -1
- package/scripts/run/run-preflight.ts +6 -6
- package/scripts/run/run-prep-cli.ts +1 -1
- package/scripts/run/run-prrun-resume.ts +1 -1
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +2 -2
- package/scripts/run/run-status-cli.ts +1 -1
- package/scripts/run/run-step-cli.ts +3 -3
- package/scripts/run/run-step.ts +2 -2
- package/scripts/run/run-stop-notify.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +2 -2
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +5 -3
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/run/{run-ship-cli.ts → ship/run-ship-cli.ts} +29 -8
- package/scripts/run/{run-ship-detach.ts → ship/run-ship-detach.ts} +3 -3
- package/scripts/run/ship/run-ship-lock.ts +50 -0
- package/scripts/run/{run-ship-next.ts → ship/run-ship-next.ts} +13 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +66 -0
- package/scripts/run/{run-ship-preflight.ts → ship/run-ship-preflight.ts} +6 -2
- package/scripts/run/{run-ship-probe.ts → ship/run-ship-probe.ts} +2 -2
- package/scripts/run/{run-ship-return.ts → ship/run-ship-return.ts} +10 -6
- package/scripts/run/{run-ship-review-steps.ts → ship/run-ship-review-steps.ts} +3 -3
- package/scripts/run/{run-ship-scoped.ts → ship/run-ship-scoped.ts} +10 -1
- package/scripts/run/{run-ship-stage.ts → ship/run-ship-stage.ts} +13 -0
- package/scripts/run/{run-ship-steps.ts → ship/run-ship-steps.ts} +15 -8
- package/scripts/run/ship/run-ship-stop-text.ts +13 -0
- package/scripts/run/ship/run-ship-sync.ts +128 -0
- package/scripts/run/{run-ship.ts → ship/run-ship.ts} +6 -0
- package/scripts/run/{run-tidy-lanes.ts → tidy/run-tidy-lanes.ts} +1 -1
- package/scripts/run/{run-wake-cli.ts → wake/run-wake-cli.ts} +31 -9
- package/scripts/run/{run-wake-describe.ts → wake/run-wake-describe.ts} +3 -3
- package/scripts/run/{run-wake-driver.ts → wake/run-wake-driver.ts} +99 -17
- package/scripts/run/{run-wake-handoff.ts → wake/run-wake-handoff.ts} +1 -1
- package/scripts/run/{run-wake-loop.ts → wake/run-wake-loop.ts} +8 -2
- package/scripts/run/wake/run-wake-restart.ts +58 -0
- package/scripts/run/{run-wake-session.ts → wake/run-wake-session.ts} +3 -3
- package/scripts/run/{run-wake.ts → wake/run-wake.ts} +1 -1
- package/scripts/safe-chain/preinstall-command.ts +20 -21
- package/scripts/safe-chain/project-config.ts +19 -15
- package/scripts/sync/sync-ai-files.ts +1 -1
- package/scripts/sync/sync-configs.ts +2 -1
- package/scripts/sync/sync.ts +15 -2
- package/scripts/test/test-red-logic.ts +17 -2
- package/scripts/test/test-red.ts +8 -7
- package/scripts/test/unit-worker-share.ts +1 -0
- package/scripts/time-runtime/time-background.ts +5 -1
- package/scripts/time-runtime/time-instant.ts +3 -1
- package/scripts/time-runtime/time-spans.ts +6 -139
- package/scripts/time-runtime/time-tool-call.ts +160 -0
- package/scripts/time-runtime/time-transcript-line.ts +27 -1
- package/scripts/version/effective-upstream.ts +2 -20
- package/scripts/version/latest-corepack.ts +17 -17
- package/scripts/version/latest-regression.ts +1 -1
- package/scripts/version/latest-update.ts +4 -4
- package/scripts/version/npm-registry.ts +20 -5
- package/scripts/version/publishable-range-check.ts +2 -2
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +48 -38
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +40 -0
- package/scripts/version/upgrade-shell-command.ts +48 -8
- package/scripts/version/version-check-logic.ts +23 -14
- package/scripts/version/version-commands.ts +23 -11
- package/scripts/version/version-remote.ts +28 -13
- package/templates/pnpm-workspace.basic.yaml +4 -0
- package/templates/workflows/dependabot-auto-merge.yml +5 -5
- package/templates/workflows/github-release.yml +2 -0
- package/scripts/build/build-config-merge.ts +0 -27
- package/scripts/build/build-managed-marker.ts +0 -27
- package/scripts/build/build-self-sync-guard.ts +0 -27
- package/scripts/build/build-version.ts +0 -26
- package/scripts/version/preinstall-version-update.ts +0 -86
- /package/scripts/overrides/{schemas.ts → overrides-schemas.ts} +0 -0
- /package/scripts/run/{run-carry-conversation.ts → carry/run-carry-conversation.ts} +0 -0
- /package/scripts/run/{run-carry-reclaim.ts → carry/run-carry-reclaim.ts} +0 -0
- /package/scripts/run/{run-carry-stash.ts → carry/run-carry-stash.ts} +0 -0
- /package/scripts/run/{run-carry-streak.ts → carry/run-carry-streak.ts} +0 -0
- /package/scripts/run/{run-cut-handoff.ts → cut/run-cut-handoff.ts} +0 -0
- /package/scripts/run/{run-entry-stop.ts → entry/run-entry-stop.ts} +0 -0
- /package/scripts/run/{run-event-cli.ts → event/run-event-cli.ts} +0 -0
- /package/scripts/run/{run-event-follow.ts → event/run-event-follow.ts} +0 -0
- /package/scripts/run/{run-event-render.ts → event/run-event-render.ts} +0 -0
- /package/scripts/run/{run-event-watch.ts → event/run-event-watch.ts} +0 -0
- /package/scripts/run/{run-hold.ts → hold/run-hold.ts} +0 -0
- /package/scripts/run/{run-progress-args.ts → progress/run-progress-args.ts} +0 -0
- /package/scripts/run/{run-progress-clock.ts → progress/run-progress-clock.ts} +0 -0
- /package/scripts/run/{run-review-cli.ts → review/run-review-cli.ts} +0 -0
- /package/scripts/run/{run-review.ts → review/run-review.ts} +0 -0
- /package/scripts/run/{run-ship-review.ts → ship/run-ship-review.ts} +0 -0
- /package/scripts/run/{run-tidy-cli.ts → tidy/run-tidy-cli.ts} +0 -0
- /package/scripts/run/{run-tidy-stashes.ts → tidy/run-tidy-stashes.ts} +0 -0
- /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
|
|
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-
|
|
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-
|
|
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-
|
|
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": "
|
|
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
|
-
|
|
1
|
+
# Agent Instructions
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
23
|
-
|
|
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=$(
|
|
39
|
+
VERSION=$(jq -r '.version' package.json)
|
|
41
40
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
42
41
|
echo "Current version: $VERSION"
|
|
43
42
|
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -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
|
|
36
|
-
|
|
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:
|
|
49
|
+
timeout-minutes: 10
|
|
39
50
|
permissions:
|
|
40
51
|
contents: read
|
|
41
52
|
steps:
|
|
42
53
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
43
|
-
|
|
54
|
+
|
|
55
|
+
- name: Setup pnpm and install dependencies
|
|
56
|
+
uses: ./.github/actions/setup-pnpm
|
|
44
57
|
with:
|
|
45
|
-
runtime: node
|
|
46
|
-
|
|
47
|
-
-
|
|
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
|
-
#
|
|
510
|
-
#
|
|
511
|
-
#
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
|
6
|
-
// a build script every consumer's pnpm refuses to run
|
|
7
|
-
// anyway — their install has already started by the time
|
|
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
|
-
>
|
|
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
|
|
27
|
+
### Decision autonomy
|
|
28
28
|
|
|
29
|
-
Classify each decision point and act; stop **only**
|
|
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
|
|
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
|
|
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` → "
|
|
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
|
|
113
|
-
- **File through `pnpm josh issue:file
|
|
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.
|
|
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
|
[](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml)
|
|
13
13
|
[](https://sonarcloud.io/summary/new_code?id=joshuafolkken_kit)
|
|
14
14
|
|
|
15
|
-
**
|
|
15
|
+
**AI assistant setup, plus an optional GitHub workflow.**
|
|
16
16
|
|
|
17
|
-
kit gives Claude Code or Codex
|
|
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
|
-
|
|
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
|
|