@joshuafolkken/kit 1.1050.0 → 1.1094.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +9 -8
- package/.claude/skills/epic-commands/SKILL.md +5 -7
- package/.claude/skills/workflow-commands/SKILL.md +19 -11
- package/.claude/skills/workflow-commands/background-commands.md +4 -3
- package/.claude/skills/workflow-commands/backlogrun-child.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +8 -6
- package/.claude/skills/workflow-commands/backlogrun-progress.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
- package/.claude/skills/workflow-commands/backlogrun.md +2 -2
- package/.claude/skills/workflow-commands/chain-rule.md +4 -2
- package/.claude/skills/workflow-commands/delegation.md +3 -3
- package/.claude/skills/workflow-commands/followup-reference.md +1 -1
- package/.claude/skills/workflow-commands/followup.md +7 -3
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/fullrun.md +3 -2
- package/.claude/skills/workflow-commands/halfrun.md +16 -19
- package/.claude/skills/workflow-commands/issue-comments.md +1 -1
- package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +9 -4
- package/.claude/skills/workflow-commands/latest-gate.md +1 -1
- package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
- package/.claude/skills/workflow-commands/observation-filing.md +3 -3
- package/.claude/skills/workflow-commands/prerequisite.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +36 -0
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +22 -2
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/ci.yml +26 -128
- package/.github/workflows/pr-classification.yml +5 -41
- package/.github/workflows/publish.yml +33 -38
- package/.github/workflows/sonar-qube.yml +37 -4
- package/AGENTS.md +12 -2
- package/CLAUDE.md +15 -16
- package/GEMINI.md +14 -2
- package/README.md +59 -18
- package/SECURITY.md +36 -6
- package/cspell/index.yaml +2 -1
- package/dist/CLAUDE.md +15 -16
- package/dist/config-merge/index.js +15 -3
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-HJIISEAC.js → chunk-3C4YCCEF.js} +5 -13
- package/dist/hooks/{chunk-EJDX2TOB.js → chunk-7ZPFAVR7.js} +7 -88
- package/dist/hooks/{chunk-WQ4OSBSS.js → chunk-E54KGFEQ.js} +2 -2
- package/dist/hooks/{chunk-GQ7KP45M.js → chunk-IL27YTPH.js} +2 -2
- package/dist/hooks/{chunk-DMQN45FN.js → chunk-KHWHKJOM.js} +3 -3
- package/dist/hooks/{chunk-5BK3K7V4.js → chunk-M2XDCUKD.js} +997 -478
- package/dist/hooks/{chunk-7VPDUBRN.js → chunk-NKOG3XAV.js} +150 -153
- package/dist/hooks/{chunk-NJQOBE6L.js → chunk-O4LL4HTI.js} +2 -7
- package/dist/hooks/{chunk-NAS4C7GP.js → chunk-OIZUHPJI.js} +2 -2
- package/dist/hooks/{chunk-RLDX5SOC.js → chunk-UD24EAIL.js} +2084 -1412
- package/dist/hooks/codex-hook-adapter.js +10 -11
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +279 -0
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +9 -9
- package/dist/hooks/session-lang.js +0 -1
- package/dist/hooks/stop-guard.js +178 -324
- package/dist/josh.js +162 -119
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +34 -58
- package/eslint/rules/promise.js +5 -0
- package/package.json +9 -4
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/operating-rules.md +4 -4
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +3 -3
- package/prompts/collaboration-workflow/rule-delivery.md +1 -1
- package/prompts/collaboration-workflow/turn-batching.md +3 -3
- package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
- package/prompts/collaboration-workflow/wip-cap.md +25 -22
- package/prompts/collaboration-workflow.md +5 -8
- package/prompts/review-rubric.md +1 -1
- package/prompts/review.md +3 -3
- package/prompts/sonar-hotspot-handling.md +11 -3
- package/prompts/testing-guide.md +3 -3
- package/scripts/adopt/adopt-toolkits.ts +0 -2
- package/scripts/adopt/adopt.ts +0 -2
- package/scripts/agent/agent-argv.ts +0 -2
- package/scripts/agent/agent-diagnostics.ts +1 -1
- package/scripts/agent/agent-role-profile.ts +0 -7
- package/scripts/agent/claude-agent-argv.ts +0 -2
- package/scripts/agent/codex-agent-argv.ts +1 -1
- package/scripts/agent/codex-hooks.ts +92 -0
- package/scripts/agent/interactive-ask.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +6 -16
- package/scripts/backlog/backlog-budget.ts +0 -2
- package/scripts/backlog/backlog-defect-priority.ts +2 -2
- package/scripts/backlog/backlog-drive-cli.ts +10 -8
- package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
- package/scripts/backlog/backlog-drive-named.ts +2 -1
- package/scripts/backlog/backlog-drive.ts +76 -16
- package/scripts/backlog/backlog-named.ts +0 -3
- package/scripts/backlog/backlog-next.ts +9 -15
- package/scripts/backlog/backlog-offer-cli.ts +0 -5
- package/scripts/backlog/backlog-plan-cli.ts +1 -7
- package/scripts/backlog/backlog-plan.ts +1 -1
- package/scripts/backlog/backlog-pool.ts +3 -6
- package/scripts/backlog/backlog-rank.ts +2 -2
- package/scripts/backlog/backlog-ready.ts +19 -3
- package/scripts/backlog/backlog-scope.ts +1 -3
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +0 -1
- package/scripts/backlog/backlog-waves.ts +5 -2
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +26 -0
- package/scripts/build/build-hooks.ts +85 -9
- package/scripts/build/hook-bundle-stamp.ts +111 -0
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +1 -1
- package/scripts/ci/composite-actions.ts +30 -0
- package/scripts/ci/pr-classification.ts +3 -3
- package/scripts/claude/workflow-destination.ts +10 -1
- package/scripts/clone/clone-fingerprint.ts +0 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/json-format.ts +0 -1
- package/scripts/config-merge/patch-yaml-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +2 -9
- package/scripts/cost-runtime/cost-attribute.ts +0 -1
- package/scripts/cost-runtime/cost-cli.ts +0 -3
- package/scripts/cost-runtime/cost-corpus.ts +0 -2
- package/scripts/cost-runtime/cost-format.ts +0 -3
- package/scripts/cost-runtime/cost-pricing.ts +0 -1
- package/scripts/cost-runtime/cost-tokens.ts +0 -1
- package/scripts/delegation/delegation-cli.ts +1 -1
- package/scripts/delegation/delegation-policy.ts +0 -1
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +0 -2
- package/scripts/delegation/investigation-reads.ts +1 -164
- package/scripts/discovery/repo-map-logic.ts +0 -1
- package/scripts/discovery/repo-party-cli.ts +1 -1
- package/scripts/doctor/doctor-consumer.ts +4 -6
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/document-byte-budget.ts +4 -5
- package/scripts/document/document-byte-check.ts +0 -1
- package/scripts/document/document-read-cli.ts +0 -2
- package/scripts/document/document-section-cli.ts +1 -1
- package/scripts/document/document-section.ts +0 -3
- package/scripts/document/edit-files-cli.ts +0 -1
- package/scripts/document/entry-read-budget.ts +10 -2
- package/scripts/document/lane-child-read-set.ts +1 -6
- package/scripts/document/read-files-cli.ts +0 -4
- package/scripts/document/read-set-cli.ts +0 -2
- package/scripts/document/read-set-point-of-use.ts +1 -0
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +1 -1
- package/scripts/epic/epic-add.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +1 -4
- package/scripts/epic/epic-audit-orphans.ts +1 -3
- package/scripts/epic/epic-audit-rationale.ts +0 -1
- package/scripts/epic/epic-audit-report.ts +0 -2
- package/scripts/epic/epic-audit.ts +5 -4
- package/scripts/epic/epic-bundle-cli.ts +1 -1
- package/scripts/epic/epic-bundle-evidence.ts +0 -1
- package/scripts/epic/epic-bundle-referenced.ts +1 -5
- package/scripts/epic/epic-bundle.ts +0 -4
- package/scripts/epic/epic-busy.ts +4 -5
- package/scripts/epic/epic-candidate-confirm.ts +0 -5
- package/scripts/epic/epic-classify.ts +2 -2
- package/scripts/epic/epic-cli-argv.ts +0 -1
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +5 -2
- package/scripts/epic/epic-cross-repo.ts +2 -4
- package/scripts/epic/epic-decision.ts +0 -1
- package/scripts/epic/epic-fetch.ts +2 -2
- package/scripts/epic/epic-index.ts +2 -3
- package/scripts/epic/epic-issue.ts +1 -15
- package/scripts/epic/epic-lane-offer.ts +9 -8
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +1 -3
- package/scripts/epic/epic-next-views.ts +0 -1
- package/scripts/epic/epic-next.ts +1 -10
- package/scripts/epic/epic-parse.ts +0 -1
- package/scripts/epic/epic-promote.ts +0 -9
- package/scripts/epic/epic-rank.ts +2 -2
- package/scripts/epic/epic-read.ts +1 -2
- package/scripts/epic/epic-reconcile.ts +1 -1
- package/scripts/epic/epic-reference.ts +1 -13
- package/scripts/epic/epic-relation-recheck.ts +1 -1
- package/scripts/epic/epic-relations.ts +1 -1
- package/scripts/epic/epic-remove.ts +1 -1
- package/scripts/epic/epic-report.ts +0 -1
- package/scripts/epic/epic-run.ts +2 -3
- package/scripts/epic/epic-shape.ts +1 -1
- package/scripts/epic/epic-solo-stale.ts +107 -0
- package/scripts/epic/epic-solo.ts +3 -2
- package/scripts/epic/epic-triage.ts +1 -1
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/epic/epic.ts +1 -1
- package/scripts/exports/unused-members-cli.ts +53 -0
- package/scripts/{git → followup}/followup-issue-number.ts +1 -6
- package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
- package/scripts/{git → followup}/git-followup-finish.ts +1 -3
- package/scripts/{git → followup}/git-followup-flush.ts +2 -2
- package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
- package/scripts/{git → followup}/git-followup-label.ts +4 -4
- package/scripts/followup/git-followup-merged.ts +112 -0
- package/scripts/{git → followup}/git-followup-pending.ts +1 -1
- package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
- package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
- package/scripts/{git → followup}/git-pr-followup.ts +53 -16
- package/scripts/gate/core-budget.ts +3 -9
- package/scripts/gate/gate-plan.ts +7 -4
- package/scripts/gate/gate-report.ts +0 -6
- package/scripts/gate/gate-tree.ts +1 -1
- package/scripts/gate/pre-commit-type-check.ts +0 -6
- package/scripts/gate/project-checks.ts +7 -8
- package/scripts/gate/scoped-green.ts +0 -1
- package/scripts/gate/type-check-step.ts +1 -1
- package/scripts/gate/verification-gate.ts +0 -2
- package/scripts/gh/fix-gh-packages.ts +15 -12
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
- package/scripts/{git → gh}/git-gh-check.ts +2 -1
- package/scripts/{git → gh}/git-gh-exec.ts +1 -1
- package/scripts/{git → gh}/git-gh-failure.ts +1 -1
- package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
- package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
- package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
- package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
- package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
- package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
- package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
- package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
- package/scripts/{git → gh}/git-gh-pr.ts +3 -1
- package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
- package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
- package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
- package/scripts/{git → gh}/git-pr-checks.ts +2 -1
- package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
- package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
- package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
- package/scripts/{git → gh}/git-pr.ts +3 -3
- package/scripts/git/changed-file-scope.ts +0 -1
- package/scripts/git/git-branch.ts +3 -6
- package/scripts/git/git-commit.ts +1 -1
- package/scripts/git/git-common-directory.ts +80 -24
- package/scripts/git/git-error.ts +66 -9
- package/scripts/git/git-issue.ts +1 -1
- package/scripts/git/git-preflight.ts +2 -2
- package/scripts/git/git-prompt.ts +6 -31
- package/scripts/git/git-push.ts +1 -1
- package/scripts/git/git-staging.ts +1 -0
- package/scripts/git/git-status.ts +1 -1
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/gone-branch.ts +1 -0
- package/scripts/git/listing-cutoff.ts +1 -1
- package/scripts/git/main-merge.ts +1 -1
- package/scripts/git/main-sync.ts +19 -1
- package/scripts/git/parse-json-array.ts +0 -3
- package/scripts/git/repository-lock.ts +16 -16
- package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
- package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
- package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
- package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
- package/scripts/hooks/codex-hook-adapter.ts +0 -1
- package/scripts/hooks/edited-cspell.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +2 -0
- package/scripts/hooks/pre-push-unit.ts +0 -4
- package/scripts/hooks/pretool-guard.ts +22 -4
- package/scripts/hooks/reserved-run.ts +1 -1
- package/scripts/hooks/step-zero-notice.ts +76 -0
- package/scripts/hooks/stop-guard.ts +47 -21
- package/scripts/init/claude-plugin-config.ts +4 -5
- package/scripts/init/hook-command-rewrite.ts +16 -8
- package/scripts/init/hook-launch.ts +41 -15
- package/scripts/init/init-basic.ts +2 -5
- package/scripts/init/init-logic.ts +7 -0
- package/scripts/init/init.ts +0 -3
- package/scripts/init/project-profile.ts +6 -11
- package/scripts/init/start-exec.ts +1 -1
- package/scripts/init/start-setup-pr.ts +6 -6
- package/scripts/init/start-steps.ts +1 -0
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +3 -3
- package/scripts/issue/defect-rate.ts +1 -2
- package/scripts/{git → issue}/git-next-issues.ts +3 -3
- package/scripts/issue/issue-backlinks-cli.ts +1 -5
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +0 -2
- package/scripts/issue/issue-classification.ts +1 -9
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +2 -2
- package/scripts/issue/issue-file-cli.ts +5 -5
- package/scripts/issue/issue-file.ts +2 -2
- package/scripts/issue/issue-fold-cli.ts +1 -1
- package/scripts/issue/issue-fold-existing-cli.ts +1 -1
- package/scripts/{git → issue}/issue-labels.ts +8 -0
- package/scripts/issue/issue-lint-cli.ts +1 -1
- package/scripts/issue/issue-merged.ts +2 -2
- package/scripts/{git → issue}/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +8 -47
- package/scripts/issue/issue-read.ts +0 -2
- package/scripts/issue/issue-report-failures.ts +80 -0
- package/scripts/issue/issue-scout-cli.ts +1 -7
- package/scripts/issue/issue-scout-closed.ts +2 -2
- package/scripts/issue/issue-scout.ts +0 -2
- package/scripts/issue/issue-state-cli.ts +5 -46
- package/scripts/issue/issue-state.ts +1 -5
- package/scripts/issue/markdown-section.ts +1 -1
- package/scripts/issue/measure-rerun-cli.ts +1 -1
- package/scripts/issue/reproduction-measure.ts +1 -1
- package/scripts/josh/cli-body.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +0 -3
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-commands-ai.ts +9 -102
- package/scripts/josh/josh-commands-backlog.ts +5 -1
- package/scripts/josh/josh-commands-development.ts +8 -1
- package/scripts/josh/josh-commands-issue.ts +2 -2
- package/scripts/josh/josh-commands-maintenance.ts +7 -0
- package/scripts/josh/josh-commands-project.ts +6 -0
- package/scripts/josh/josh-commands-run.ts +114 -0
- package/scripts/josh/josh-commands-versioning.ts +8 -0
- package/scripts/josh/josh-commands-workflow.ts +2 -2
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +3 -6
- package/scripts/lane/lane-capacity.ts +6 -3
- package/scripts/lane/lane-child-invocation.ts +20 -7
- package/scripts/lane/lane-cli.ts +1 -4
- package/scripts/lane/lane-close.ts +1 -3
- package/scripts/lane/lane-dispatch.ts +3 -4
- package/scripts/lane/lane-environment.ts +0 -9
- package/scripts/lane/lane-handoff.ts +38 -0
- package/scripts/lane/lane-launch-cli.ts +21 -11
- package/scripts/lane/lane-open.ts +0 -3
- package/scripts/lane/lane-output.ts +0 -1
- package/scripts/lane/lane-registry.ts +9 -0
- package/scripts/lane/openai-lane-ship.ts +2 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
- package/scripts/lane/openai-lane-supervisor.ts +6 -4
- package/scripts/lane/openai-review-broker.ts +3 -0
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/json-value.ts +5 -4
- package/scripts/lib/poll.ts +3 -1
- package/scripts/lib/timed-fetch.ts +15 -0
- package/scripts/lib/timeouts.ts +13 -0
- package/scripts/{yaml → lib}/yaml-document.ts +3 -1
- package/scripts/{bytes → lines}/bytes-command.ts +0 -2
- package/scripts/lines/lines-command.ts +0 -1
- package/scripts/lint/lint-related-scope.ts +0 -1
- package/scripts/lint/lint-related.ts +1 -1
- package/scripts/{git → notify}/telegram-notify.ts +2 -2
- package/scripts/{git → notify}/telegram-test.ts +4 -4
- package/scripts/observations/observation-ledger-home.ts +0 -1
- package/scripts/observations/observation-ledger-line.ts +0 -1
- package/scripts/observations/observation-ledger-migrate.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +3 -3
- package/scripts/observations/observations-flush.ts +2 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/package/package-scout-cli.ts +2 -7
- package/scripts/package/package-scout.ts +0 -2
- package/scripts/propagate/propagate-git-failure.ts +0 -1
- package/scripts/propagate/propagate-git.ts +0 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +0 -2
- package/scripts/propagate/propagate-steps.ts +3 -5
- package/scripts/propagate/propagate-targets.ts +0 -4
- package/scripts/propagate/propagate.ts +0 -4
- package/scripts/refactor/import-graph.ts +0 -1
- package/scripts/refactor/refactor-lint.ts +0 -2
- package/scripts/refactor/refactor-scan.ts +0 -1
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +0 -2
- package/scripts/registry-migration/migrate.ts +19 -9
- package/scripts/release/github-release-cli.ts +8 -6
- package/scripts/release/github-release-environment.ts +46 -0
- package/scripts/release/github-release.ts +151 -94
- package/scripts/release/release-history.ts +0 -1
- package/scripts/release/release-plan.ts +0 -1
- package/scripts/release/release-publish.ts +2 -3
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/repo/auto-merge-setting-logic.ts +1 -4
- package/scripts/repo/repo-setting.ts +1 -1
- package/scripts/repo/repository-labels.ts +3 -3
- package/scripts/repo/required-checks-logic.ts +206 -0
- package/scripts/repo/required-checks-report.ts +71 -0
- package/scripts/repo/ruleset-check-cli.ts +53 -0
- package/scripts/repo/ruleset-check.ts +147 -0
- package/scripts/report/report-lint-cli.ts +0 -4
- package/scripts/review/disposition-cli.ts +1 -1
- package/scripts/review/live-evidence.ts +1 -1
- package/scripts/review/review-attest-cli.ts +0 -6
- package/scripts/review/review-attest.ts +4 -16
- package/scripts/review/review-brief-cli.ts +23 -6
- package/scripts/review/review-brief.ts +21 -8
- package/scripts/review/review-diff-parts.ts +89 -0
- package/scripts/review/review-diff-write.ts +97 -0
- package/scripts/review/review-finding-ledger.ts +0 -1
- package/scripts/review/review-record-cli.ts +1 -1
- package/scripts/review/review-record.ts +0 -1
- package/scripts/review/review-round2-cli.ts +1 -1
- package/scripts/review/review-stamps.ts +0 -3
- package/scripts/review/review-tree.ts +14 -2
- package/scripts/rules/decision-oracle-stage.ts +18 -0
- package/scripts/rules/decision-oracle.ts +10 -7
- package/scripts/rules/delivered-rules.ts +9 -1
- package/scripts/rules/destructive-command.ts +119 -0
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/file-body.ts +0 -3
- package/scripts/rules/filing-cap.ts +0 -2
- package/scripts/rules/gh-api.ts +7 -2
- package/scripts/rules/git-argv.ts +18 -7
- package/scripts/rules/git-force.ts +0 -2
- package/scripts/rules/implementation-cut.ts +0 -1
- package/scripts/rules/index-guard.ts +71 -0
- package/scripts/rules/issue-citation.ts +50 -25
- package/scripts/rules/lane-background.ts +15 -7
- package/scripts/rules/lane-park.ts +13 -6
- package/scripts/rules/last-prompt.ts +1 -0
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +0 -3
- package/scripts/rules/permission-guards.ts +14 -0
- package/scripts/rules/protected-files.ts +74 -0
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +0 -3
- package/scripts/rules/rule-value-cli.ts +0 -1
- package/scripts/rules/shell-body-trigger.ts +0 -1
- package/scripts/rules/shell-segments.ts +0 -1
- package/scripts/rules/stop-rules.ts +13 -5
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +0 -1
- package/scripts/rules/worktree-guard.ts +26 -9
- package/scripts/run/run-carry-cli.ts +0 -2
- package/scripts/run/run-carry-stash.ts +2 -2
- package/scripts/run/run-carry-streak.ts +1 -1
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +1 -1
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +101 -24
- package/scripts/run/run-entry.ts +0 -1
- package/scripts/run/run-event-cli.ts +0 -2
- package/scripts/run/run-event-follow.ts +1 -0
- package/scripts/run/run-event-render.ts +1 -1
- package/scripts/run/run-event-scope.ts +53 -4
- package/scripts/run/run-event-stream.ts +0 -3
- package/scripts/run/run-event-watch.ts +1 -0
- package/scripts/run/run-halfrun-resume.ts +20 -7
- package/scripts/run/run-headless.ts +2 -2
- package/scripts/run/run-hold-cli.ts +33 -10
- package/scripts/run/run-hold.ts +25 -5
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +1 -1
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +5 -13
- package/scripts/run/run-merge-steps.ts +5 -5
- package/scripts/run/run-merge.ts +1 -1
- package/scripts/run/run-next-cli.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +0 -1
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +2 -2
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-cli.ts +4 -7
- package/scripts/run/run-progress-clock.ts +6 -34
- package/scripts/run/run-progress-config.ts +0 -4
- package/scripts/run/run-progress-read.ts +1 -2
- package/scripts/run/run-progress.ts +1 -2
- package/scripts/run/run-prrun-resume.ts +117 -0
- package/scripts/run/run-report-cli.ts +1 -2
- package/scripts/run/run-report.ts +0 -1
- package/scripts/run/run-retrospective.ts +1 -1
- package/scripts/run/run-review-cli.ts +0 -3
- package/scripts/run/run-review-steps.ts +2 -0
- package/scripts/run/run-review.ts +0 -2
- package/scripts/run/run-ship-cli.ts +21 -3
- package/scripts/run/run-ship-detach.ts +1 -0
- package/scripts/run/run-ship-next.ts +106 -0
- package/scripts/run/run-ship-preflight.ts +1 -1
- package/scripts/run/run-ship-return.ts +8 -3
- package/scripts/run/run-ship-review-steps.ts +18 -4
- package/scripts/run/run-ship-review.ts +11 -0
- package/scripts/run/run-ship-scoped.ts +1 -0
- package/scripts/run/run-ship-steps.ts +1 -1
- package/scripts/run/run-ship.ts +0 -1
- package/scripts/run/run-stage-read.ts +62 -0
- package/scripts/run/run-stage.ts +160 -0
- package/scripts/run/run-status-cli.ts +1 -1
- package/scripts/run/run-step-cli.ts +21 -14
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stop-notify.ts +1 -3
- package/scripts/run/run-stranded-cli.ts +0 -4
- package/scripts/run/run-stranded-detect.ts +2 -2
- package/scripts/run/run-tail-cli.ts +17 -11
- package/scripts/run/run-tail.ts +2 -0
- package/scripts/run/run-tidy-lanes.ts +2 -1
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +2 -3
- package/scripts/run/run-wake-loop.ts +2 -2
- package/scripts/run/run-wake.ts +2 -4
- package/scripts/run/run-watcher-guard-cli.ts +0 -4
- package/scripts/run/run-watcher-guard.ts +9 -7
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/project-config.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +0 -1
- package/scripts/security/security-audit-provision.ts +3 -2
- package/scripts/security/security-audit.ts +0 -1
- package/scripts/security/security-updates-logic.ts +0 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
- package/scripts/sonar/sonar-hotspots.ts +0 -1
- package/scripts/sonar/sonar-new-code-cli.ts +150 -0
- package/scripts/sonar/sonar-new-code.ts +79 -0
- package/scripts/sonar/sonar-project.ts +97 -0
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +2 -5
- package/scripts/sync/managed-config-scope-cli.ts +1 -1
- package/scripts/sync/skill-migration.ts +0 -1
- package/scripts/sync/sync-hook-safety.ts +2 -3
- package/scripts/sync/sync.ts +1 -8
- package/scripts/sync/template-source-logic.ts +0 -1
- package/scripts/sync/workflow-pin-logic.ts +16 -28
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +0 -2
- package/scripts/test/test-red-commit.ts +2 -2
- package/scripts/test/test-red.ts +14 -7
- package/scripts/test/test-type-logic.ts +1 -1
- package/scripts/test/unit-worker-share.ts +7 -16
- package/scripts/time-runtime/time-batch-guard.ts +1 -2
- package/scripts/time-runtime/time-bundle-call.ts +0 -1
- package/scripts/time-runtime/time-bundles.ts +0 -4
- package/scripts/time-runtime/time-density-hook.ts +0 -2
- package/scripts/time-runtime/time-followup-stage.ts +1 -1
- package/scripts/time-runtime/time-format.ts +0 -73
- package/scripts/time-runtime/time-round-trips.ts +0 -4
- package/scripts/time-runtime/time-single-check.ts +1 -1
- package/scripts/time-runtime/time-spans.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +1 -2
- package/scripts/ui/ui-routes-cli.ts +0 -5
- package/scripts/ui/ui-routes.ts +0 -5
- package/scripts/version/effective-upstream.ts +2 -2
- package/scripts/version/latest-corepack.ts +7 -9
- package/scripts/version/latest-scope-cli.ts +0 -2
- package/scripts/version/latest-update.ts +0 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/publishable-range-check.ts +1 -1
- package/scripts/version/release-hold.ts +0 -4
- package/scripts/version/running-binary.ts +2 -2
- package/scripts/version/version-check-logic.ts +0 -2
- package/scripts/version/version-remote.ts +3 -3
- package/scripts/version/version-targets.ts +4 -4
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/dependabot-auto-merge.yml +5 -3
- package/templates/workflows/github-release.yml +81 -0
- package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
- package/prompts/collaboration-workflow/epic-audit.md +0 -5
- package/prompts/collaboration-workflow/epic-bundle.md +0 -5
- package/scripts/init/plugin-install-hint.ts +0 -47
- package/scripts/version/parse-json.ts +0 -13
- /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
- /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
- /package/scripts/{git → gh}/git-gh-command.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
- /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
- /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
- /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
- /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
- /package/scripts/{git → gh}/git-pr-error.ts +0 -0
- /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
- /package/scripts/{git → gh}/github-issue-url.ts +0 -0
- /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
- /package/scripts/{git → issue}/issue-reference.ts +0 -0
- /package/scripts/{git → lib}/animation-helpers.ts +0 -0
- /package/scripts/{git → lib}/git-animation.ts +0 -0
- /package/scripts/{git → notify}/git-notify.ts +0 -0
- /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
|
@@ -15,13 +15,6 @@ on:
|
|
|
15
15
|
# nothing here needs it: every run reads the pull request's labels as they stand when it runs, not as
|
|
16
16
|
# its event carried them, so whichever suite GitHub counts as newest holds a current verdict.
|
|
17
17
|
|
|
18
|
-
# The same safe-chain installer pin as ci.yml — the release and its install-safe-chain.sh SHA-256.
|
|
19
|
-
# `pnpm dlx … setup-ci` left only shims, so the install below ran without a scan (joshuafolkken/kit#2765).
|
|
20
|
-
# `josh latest` moves both together, in this file and in ci.yml.
|
|
21
|
-
env:
|
|
22
|
-
SAFE_CHAIN_INSTALLER_VERSION: 1.5.20
|
|
23
|
-
SAFE_CHAIN_INSTALLER_SHA256: 0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd
|
|
24
|
-
|
|
25
18
|
jobs:
|
|
26
19
|
classification:
|
|
27
20
|
name: Release classification
|
|
@@ -45,41 +38,12 @@ jobs:
|
|
|
45
38
|
- name: Configure GitHub Packages authentication for existing projects
|
|
46
39
|
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
test -n "$version"
|
|
53
|
-
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
54
|
-
|
|
55
|
-
- name: Setup pnpm
|
|
56
|
-
uses: pnpm/setup@fbda4c85fc2e1e08721cd8763afea8f48d60f024 # v3.0.0
|
|
57
|
-
with:
|
|
58
|
-
version: ${{ steps.pnpm-version.outputs.version }}
|
|
59
|
-
install: false
|
|
60
|
-
|
|
61
|
-
- name: Resolve pnpm store path
|
|
62
|
-
run: echo "PNPM_STORE_PATH=$(pnpm store path)" >> "$GITHUB_ENV"
|
|
63
|
-
|
|
64
|
-
- name: Setup pnpm store cache
|
|
65
|
-
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
41
|
+
# The shared pnpm preamble — version, store cache, the safe-chain installer pin and the install
|
|
42
|
+
# (joshuafolkken/kit#2765, joshuafolkken/kit#2982).
|
|
43
|
+
- name: Setup pnpm and install dependencies
|
|
44
|
+
uses: ./.github/actions/setup-pnpm
|
|
66
45
|
with:
|
|
67
|
-
|
|
68
|
-
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
69
|
-
restore-keys: |
|
|
70
|
-
${{ runner.os }}-pnpm-store-
|
|
71
|
-
|
|
72
|
-
- name: Setup safe-chain
|
|
73
|
-
run: |
|
|
74
|
-
installer="$RUNNER_TEMP/install-safe-chain.sh"
|
|
75
|
-
curl --proto '=https' -fsSL "https://github.com/AikidoSec/safe-chain/releases/download/$SAFE_CHAIN_INSTALLER_VERSION/install-safe-chain.sh" -o "$installer"
|
|
76
|
-
echo "$SAFE_CHAIN_INSTALLER_SHA256 $installer" | sha256sum -c -
|
|
77
|
-
sh "$installer" --ci
|
|
78
|
-
|
|
79
|
-
- name: Install dependencies
|
|
80
|
-
env:
|
|
81
|
-
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
82
|
-
run: pnpm install --frozen-lockfile --ignore-scripts
|
|
46
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
83
47
|
|
|
84
48
|
- name: Check release classification
|
|
85
49
|
env:
|
|
@@ -7,6 +7,10 @@ run-name: Publish ${{ github.ref_name }}
|
|
|
7
7
|
on:
|
|
8
8
|
workflow_dispatch:
|
|
9
9
|
|
|
10
|
+
# Every job installs through `.github/actions/setup-pnpm`, so the jobs holding the publish rights
|
|
11
|
+
# install behind the same hash-verified safe-chain scan as CI (joshuafolkken/kit#2982). The store
|
|
12
|
+
# cache is off here: a cache entry another run saved never reaches a job with publish credentials.
|
|
13
|
+
|
|
10
14
|
jobs:
|
|
11
15
|
publish-github:
|
|
12
16
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
@@ -27,29 +31,28 @@ jobs:
|
|
|
27
31
|
registry-url: 'https://npm.pkg.github.com'
|
|
28
32
|
scope: '@joshuafolkken'
|
|
29
33
|
|
|
30
|
-
-
|
|
31
|
-
|
|
34
|
+
# Read before setup-pnpm puts the safe-chain shims on PATH: safe-chain hides recent versions from
|
|
35
|
+
# registry metadata and prints a notice to stdout, which corrupts the value (joshuafolkken/kit#3060).
|
|
36
|
+
- name: Read registry latest
|
|
37
|
+
id: registry-latest
|
|
32
38
|
run: |
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
latest=$(cd "$RUNNER_TEMP" && npm view @joshuafolkken/kit dist-tags.latest --registry https://npm.pkg.github.com)
|
|
40
|
+
echo "latest=$latest" >> "$GITHUB_OUTPUT"
|
|
41
|
+
env:
|
|
42
|
+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
36
43
|
|
|
37
|
-
- uses:
|
|
44
|
+
- uses: ./.github/actions/setup-pnpm
|
|
38
45
|
with:
|
|
39
|
-
|
|
40
|
-
install: false
|
|
41
|
-
|
|
42
|
-
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
46
|
+
cache: 'false'
|
|
43
47
|
|
|
44
48
|
- name: Select GitHub Packages tag
|
|
45
49
|
id: publish-tag
|
|
46
50
|
run: |
|
|
47
51
|
version=$(node -p "require('./package.json').version")
|
|
48
|
-
|
|
49
|
-
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$latest")
|
|
52
|
+
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$LATEST")
|
|
50
53
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
51
54
|
env:
|
|
52
|
-
|
|
55
|
+
LATEST: ${{ steps.registry-latest.outputs.latest }}
|
|
53
56
|
|
|
54
57
|
- run: pnpm publish --no-git-checks --tag ${{ steps.publish-tag.outputs.tag }} --registry https://npm.pkg.github.com
|
|
55
58
|
env:
|
|
@@ -73,19 +76,16 @@ jobs:
|
|
|
73
76
|
node-version: 24
|
|
74
77
|
registry-url: 'https://registry.npmjs.org'
|
|
75
78
|
|
|
76
|
-
-
|
|
77
|
-
|
|
79
|
+
# Before setup-pnpm, for the same reason as publish-github's lookup (joshuafolkken/kit#3060).
|
|
80
|
+
- name: Read registry latest
|
|
81
|
+
id: registry-latest
|
|
78
82
|
run: |
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
83
|
+
latest=$(cd "$RUNNER_TEMP" && npm view @joshuafolkken/kit dist-tags.latest --registry https://registry.npmjs.org)
|
|
84
|
+
echo "latest=$latest" >> "$GITHUB_OUTPUT"
|
|
82
85
|
|
|
83
|
-
- uses:
|
|
86
|
+
- uses: ./.github/actions/setup-pnpm
|
|
84
87
|
with:
|
|
85
|
-
|
|
86
|
-
install: false
|
|
87
|
-
|
|
88
|
-
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
88
|
+
cache: 'false'
|
|
89
89
|
|
|
90
90
|
- run: pnpm pack --out "$RUNNER_TEMP/kit.tgz"
|
|
91
91
|
|
|
@@ -93,9 +93,10 @@ jobs:
|
|
|
93
93
|
id: publish-tag
|
|
94
94
|
run: |
|
|
95
95
|
version=$(node -p "require('./package.json').version")
|
|
96
|
-
|
|
97
|
-
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$latest")
|
|
96
|
+
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$LATEST")
|
|
98
97
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
98
|
+
env:
|
|
99
|
+
LATEST: ${{ steps.registry-latest.outputs.latest }}
|
|
99
100
|
|
|
100
101
|
- name: Publish to npm
|
|
101
102
|
run: cd "$RUNNER_TEMP" && npm publish kit.tgz --access public --tag ${{ steps.publish-tag.outputs.tag }} --registry https://registry.npmjs.org --userconfig /dev/null
|
|
@@ -124,22 +125,16 @@ jobs:
|
|
|
124
125
|
with:
|
|
125
126
|
node-version: 24
|
|
126
127
|
|
|
127
|
-
-
|
|
128
|
-
id: pnpm-version
|
|
129
|
-
run: |
|
|
130
|
-
version=$(node -p "const m = require('./package.json'); m.packageManager?.match(/^pnpm@([^+]+)/)?.[1] ?? (m.devEngines?.packageManager?.name === 'pnpm' ? m.devEngines.packageManager.version?.split('+')[0] : 'latest') ?? 'latest'")
|
|
131
|
-
test -n "$version"
|
|
132
|
-
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
133
|
-
|
|
134
|
-
- uses: pnpm/setup@fbda4c85fc2e1e08721cd8763afea8f48d60f024 # v3.0.0
|
|
128
|
+
- uses: ./.github/actions/setup-pnpm
|
|
135
129
|
with:
|
|
136
|
-
|
|
137
|
-
install: false
|
|
138
|
-
|
|
139
|
-
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
130
|
+
cache: 'false'
|
|
140
131
|
|
|
132
|
+
# Tags through v1.887.0 predate automatic GitHub Releases and must not block the first new one.
|
|
141
133
|
- name: Publish GitHub Release
|
|
142
|
-
run: pnpm
|
|
134
|
+
run: pnpm josh release:github
|
|
143
135
|
env:
|
|
144
136
|
GH_TOKEN: ${{ github.token }}
|
|
145
137
|
RELEASE_TAG: ${{ github.ref_name }}
|
|
138
|
+
RELEASE_START_TAG: v1.887.0
|
|
139
|
+
RELEASE_WORKFLOW: publish.yml
|
|
140
|
+
RELEASE_JOBS: publish-github,publish-npm,update-production
|
|
@@ -18,6 +18,7 @@ jobs:
|
|
|
18
18
|
name: SonarQube
|
|
19
19
|
permissions:
|
|
20
20
|
contents: read
|
|
21
|
+
packages: read
|
|
21
22
|
runs-on: ubuntu-latest
|
|
22
23
|
# A consumer that does not use SonarCloud has no SONAR_TOKEN, and the scan would fail on
|
|
23
24
|
# authentication and turn a required check red (joshuafolkken/kit#2815). `secrets` cannot be read
|
|
@@ -34,11 +35,43 @@ jobs:
|
|
|
34
35
|
if: env.SONAR_TOKEN != ''
|
|
35
36
|
with:
|
|
36
37
|
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
|
38
|
+
# SonarCloud's New Code starts at the previous version, so an analysis without
|
|
39
|
+
# `sonar.projectVersion` never moves that start and New Code grows without end, diluting every
|
|
40
|
+
# ratio the Quality Gate judges (joshuafolkken/kit#3045). The version is `package.json`'s, so
|
|
41
|
+
# each `josh bump` that reaches main starts a new New Code period.
|
|
42
|
+
- name: Resolve project version
|
|
43
|
+
id: project-version
|
|
44
|
+
if: env.SONAR_TOKEN != ''
|
|
45
|
+
run: |
|
|
46
|
+
version=$(jq -r '.version // empty' package.json)
|
|
47
|
+
echo "args=${version:+-Dsonar.projectVersion=$version}" >> "$GITHUB_OUTPUT"
|
|
37
48
|
- name: SonarQube Scan
|
|
38
49
|
if: env.SONAR_TOKEN != ''
|
|
39
50
|
uses: SonarSource/sonarqube-scan-action@d209202bc7d53ff1cc128f7f907dac145c9d6ae9 # v8.3.0
|
|
40
51
|
with:
|
|
41
|
-
# Wait for the SonarCloud Quality Gate and fail this job
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
args: -Dsonar.qualitygate.wait=true
|
|
52
|
+
# Wait for the SonarCloud Quality Gate and fail this job when the gate is red. The gate
|
|
53
|
+
# judges ratings and ratios, not counts, so it alone lets a few new code smells or a small
|
|
54
|
+
# copied block through; the new-code check below is what fails on a single finding.
|
|
55
|
+
args: -Dsonar.qualitygate.wait=true ${{ steps.project-version.outputs.args }}
|
|
56
|
+
# The new-code check reads the pull request's analysis from the SonarCloud API and fails this
|
|
57
|
+
# job (a required PR check) when the pull request adds any new issue, of any type or severity,
|
|
58
|
+
# or any new duplicated block (joshuafolkken/kit#3045). An issue resolved in SonarCloud as
|
|
59
|
+
# accepted or a false positive is not counted. A push to main has no pull request to read.
|
|
60
|
+
- name: Setup Node.js
|
|
61
|
+
if: env.SONAR_TOKEN != '' && github.event_name == 'pull_request'
|
|
62
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
63
|
+
with:
|
|
64
|
+
node-version: '24'
|
|
65
|
+
- name: Configure GitHub Packages authentication for existing projects
|
|
66
|
+
if: env.SONAR_TOKEN != '' && github.event_name == 'pull_request'
|
|
67
|
+
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
68
|
+
- name: Setup pnpm and install dependencies
|
|
69
|
+
if: env.SONAR_TOKEN != '' && github.event_name == 'pull_request'
|
|
70
|
+
uses: ./.github/actions/setup-pnpm
|
|
71
|
+
with:
|
|
72
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
73
|
+
- name: Fail on new Sonar issues or duplicated blocks
|
|
74
|
+
if: env.SONAR_TOKEN != '' && github.event_name == 'pull_request'
|
|
75
|
+
env:
|
|
76
|
+
PULL_REQUEST: ${{ github.event.pull_request.number }}
|
|
77
|
+
run: pnpm josh sonar:new-code "$PULL_REQUEST"
|
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
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.
|
|
5
|
-
> `CLAUDE.md` is
|
|
4
|
+
> any work here, and follow every rule in it.** This file exists only to point at it. The rules apply
|
|
5
|
+
> to whatever agent is doing the work, but `CLAUDE.md` is written for Claude Code and names its
|
|
6
|
+
> features — read them as follows.
|
|
7
|
+
|
|
8
|
+
- **Hooks.** Codex runs the same hooks from `.codex/hooks.json`, which is generated from
|
|
9
|
+
`.claude/settings.json`. Where Codex does not show a hook's output, apply the rule yourself — resolve
|
|
10
|
+
`JOSH_SESSION_LANG` from `.env` rather than waiting for it to be injected.
|
|
11
|
+
- **Skills, `/verify-ui` and `/code-review`.** Where `CLAUDE.md` says to load a skill or run one in a
|
|
12
|
+
subagent, read that skill's `SKILL.md` and follow it in your own session.
|
|
13
|
+
- **The `.claude/settings.json` deny list** is not enforced here. The rules it backs — no commits,
|
|
14
|
+
merges, staging or other shared-state changes without instruction — still bind you.
|
|
15
|
+
- **`AskUserQuestion`** means asking the user in plain text.
|
|
6
16
|
|
|
7
17
|
**Do not copy rules back into this file.** Every change to how agents work in this repository belongs
|
|
8
18
|
in `CLAUDE.md`.
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Claude Code Instructions
|
|
2
2
|
|
|
3
|
-
> **This file is the
|
|
4
|
-
>
|
|
5
|
-
> Each rule is written as a **trigger plus a pointer** — enough to act safely with nothing else loaded, with the steps and rationale at the pointer.
|
|
3
|
+
> **This file is the entry point for every agent rule.** `AGENTS.md` and `GEMINI.md` are pointers to it and carry no rules of their own — a rule's trigger is written **once**, here, and its procedure and any number it uses **once**, at its pointer. History, and the explanations kept out of this file: `docs/maintainers/claude-md-history.md`.
|
|
6
4
|
|
|
7
5
|
## Project
|
|
8
6
|
|
|
@@ -19,8 +17,8 @@ Stack: TypeScript · pnpm · SvelteKit · Vitest · Playwright · TailwindCSS ·
|
|
|
19
17
|
- **Distinguish consultation from execution.** A question about approach or a goal statement ("どうすべき?", "〜したい") is a request for analysis only — act only on an explicit imperative or a workflow keyword. `prompts/collaboration-workflow/principles.md` → "相談と実行".
|
|
20
18
|
- **Route distributed-doc / config changes upstream to kit.** In a consumer repo never edit kit-distributed docs/config locally (`josh sync` overwrites them); propose the change for kit. In kit itself you are the source. `prompts/collaboration-workflow/principles.md` → "配布ドキュメント".
|
|
21
19
|
- **Latest-first, fix forward — pin back only as a last resort.** Adopt newest versions by default and resolve a breaking bump forward, recording why on the rare pin-back. `prompts/collaboration-workflow/principles.md` → "最新優先".
|
|
22
|
-
- **Output language follows `JOSH_SESSION_LANG`** (default `ja`; a hook injects it). It governs session-facing output and artifact prose (Issue bodies, comments, Telegram). English stays for Issue/PR titles, code comments/test titles/commit messages, and script-emitted strings. `prompts/collaboration-workflow/overview.md`.
|
|
23
|
-
- **Cite an Issue with a number-link and a short
|
|
20
|
+
- **Output language follows `JOSH_SESSION_LANG`** (default `ja`; a hook injects it). It governs session-facing output and artifact prose (Issue bodies, comments, Telegram). English stays for Issue/PR titles, code comments/test titles/commit messages, and script-emitted strings. One language per doc layer (English here; mostly Japanese in the prompt files). `prompts/collaboration-workflow/overview.md`.
|
|
21
|
+
- **Cite an Issue with a number-link and a short title in the session language in session-facing output** — `[#<N>](https://github.com/<owner>/<repo>/issues/<N>) — <short summary>`. `prompts/collaboration-workflow/issue-citation.md`.
|
|
24
22
|
- **Durable rules belong in prompts/docs, not local MEMORY.** Encode a lasting rule as a change to kit's distributed prompts/docs, not auto-memory; propose the edit when the turn does not authorize one. `prompts/collaboration-workflow/principles.md` → "恒久ルール".
|
|
25
23
|
- **Never carry a file's new text inside a shell command.** Edit a region with the Edit tool, never a heredoc — unless the change is so scattered the partial edit would carry more text than the file. The criterion is whether the command carries the replacement wholesale, not the tool's name. `prompts/collaboration-workflow/file-edits.md`.
|
|
26
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`.
|
|
@@ -38,7 +36,7 @@ Classify each decision point into one tier and act; stop **only** when the choic
|
|
|
38
36
|
|
|
39
37
|
## Environment Variables
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
A `.env` at the project root: `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` are required for notifications; `JOSH_SESSION_LANG`, `PORT_SEED` and `JOSH_REPO_PATHS` are optional and personal. Setup and semantics: [docs/scripts-ai.md](https://github.com/joshuafolkken/kit/blob/main/docs/scripts-ai.md) and [docs/josh-commands.md](https://github.com/joshuafolkken/kit/blob/main/docs/josh-commands.md).
|
|
42
40
|
|
|
43
41
|
**GitHub operations are `gh api` (REST) — instructing prose included — and need `gh` installed; some environments lack it.** Auth: `gh auth login`; `GH_TOKEN` in CI/cloud. `prompts/collaboration-workflow/gh-rest.md`.
|
|
44
42
|
|
|
@@ -66,7 +64,7 @@ Read from a `.env` file at the project root by the AI scripts, `josh port` and `
|
|
|
66
64
|
### Quality limits
|
|
67
65
|
|
|
68
66
|
- Function complexity ≤5 · nesting ≤2 · function ≤25 lines · file ≤300 lines · params ≤4 · statements per function ≤10 · cognitive complexity ≤4
|
|
69
|
-
- **Those line counts are code lines, not physical lines**
|
|
67
|
+
- **Those line counts are code lines, not physical lines** — judge by what `pnpm josh lint` reports, never `wc -l`. Test files (`*.test.ts` / `*.e2e.ts`) allow 35 code lines per function.
|
|
70
68
|
- Magic numbers: extract all literals except `0`, `1`, `-1` to named `UPPER_CASE` constants
|
|
71
69
|
- No `any` · no unused vars · no floating promises · type assertions (`as`) are restricted
|
|
72
70
|
- All function params and return types must be explicitly typed
|
|
@@ -96,17 +94,17 @@ Read from a `.env` file at the project root by the AI scripts, `josh port` and `
|
|
|
96
94
|
|
|
97
95
|
- Before building a feature, check whether a well-maintained package already solves the problem rather than writing original code first, and propose replacing hand-rolled implementations with a suitable package when it improves maintainability.
|
|
98
96
|
- Prefer modern, actively-maintained packages (maintenance, popularity, bundle size, TypeScript support, license, fit). **If one is clearly the best fit, select it** (Tier A — log it); **only when two or more are genuinely close**, present about three ranked options and let the user choose.
|
|
99
|
-
- **Measure the choice before you judge it — `pnpm josh pkg:scout <keywords
|
|
97
|
+
- **Measure the choice before you judge it — `pnpm josh pkg:scout <keywords>`:** `clear` → select it (Tier A), `close` → ask (Tier B). Metrics and threshold: `docs/josh-commands-automation.md`.
|
|
100
98
|
|
|
101
99
|
## Code Change Rules
|
|
102
100
|
|
|
103
101
|
For every code modification, in order:
|
|
104
102
|
|
|
105
|
-
0. **Work summary + test declaration** _(before writing any implementation code)_: a two-layer summary — a plain-language overview a non-programmer can follow (three lines, **Now / Change / Check**, one sentence each, in the session language; name the concrete subject in each line — subject-less prose is not acceptable; no file paths, function or type names, or CLI option flags — only internal identifiers are banned, not names the reader sees on screen), **Details**, then **every change with its test** (`<what changes> — Test: <Unit|E2E> — <file path> — <what it verifies>`). Ordinary markdown, **never wrapped in a code fence**, once per Issue before implementation — required in fullrun/halfrun/backlogrun even when the Issue body was filled (`kickoff` is exempt); completion reports lead with **Cause / Fix / Result**. `prompts/collaboration-workflow/report-format.md`; `pnpm josh report:lint` checks the form, and
|
|
103
|
+
0. **Work summary + test declaration** _(before writing any implementation code)_: a two-layer summary — a plain-language overview a non-programmer can follow (three lines, **Now / Change / Check**, one sentence each, in the session language; name the concrete subject in each line — subject-less prose is not acceptable; no file paths, function or type names, or CLI option flags — only internal identifiers are banned, not names the reader sees on screen), **Details**, then **every change with its test** (`<what changes> — Test: <Unit|E2E> — <file path> — <what it verifies>`). Ordinary markdown, **never wrapped in a code fence**, once per Issue before implementation — required in fullrun/halfrun/backlogrun even when the Issue body was filled (`kickoff` is exempt); completion reports lead with **Cause / Fix / Result**. `prompts/collaboration-workflow/report-format.md`; `pnpm josh report:lint` checks the form, and a session's first runtime `Edit` / `Write` points here. Presentation only, never a confirmation stop.
|
|
106
104
|
|
|
107
105
|
- **Tests are required for ALL changes** — zero tests without explicit approval is a violation (bug fixes, timing/animation fixes and refactors included): bug fix → regression test; UI/animation/timing → E2E for the observable change; logic/utility → unit; refactor → tests pinning existing behavior BEFORE the change (`prompts/refactoring.md`).
|
|
108
106
|
- **Non-runtime updates (pre-approved manual-only exception)**: a change touching no executable runtime code path may proceed with manual verification — declare it in Step 0 and state why. It covers docs, non-executable config, editor/IDE files, and cosmetic asset swaps with no selector/path change; the mechanically exempt (`*.md`, `.editorconfig`, `.idea/**`, `.vscode/**`, `prompts/**`) are recognized by the command below, and the rest stay the exemption a person declares. A test infeasible for a runtime change needs its reason stated and user approval.
|
|
109
|
-
- **
|
|
107
|
+
- **Basic-profile manual-check exception:** when `package.json` records `josh.profile: basic` (or its former name `static`) and the change touches only files in languages kit cannot test (HTML/CSS, or sources such as Lua), verify by hand instead of with an automated test. For HTML/CSS, open the page in a browser and check layout, links and interactions in the HTML at the intended screen widths; for any other source, actually run the changed code. Report what you observed either way. JavaScript and TypeScript files still need automated tests, even when changed alongside. `pnpm josh test:declared` prints `exempt` with the reason in this case only.
|
|
110
108
|
- **The commit stage answers this mechanically**: `pnpm josh test:declared` prints `required` / `exempt` / `satisfied` from the changed paths, and a runtime change with no test is refused at `pnpm josh git -y` on `required` — add the declared test or declare the non-runtime exception, then reissue (`prompts/collaboration-workflow/rule-delivery.md`).
|
|
111
109
|
- **Read a target's line headroom before editing: `pnpm josh lines <path>`** — near the limit, `Target` carries the splitting plan.
|
|
112
110
|
|
|
@@ -131,7 +129,7 @@ Run the full verification set **in order**; do not skip, reorder, or report comp
|
|
|
131
129
|
|
|
132
130
|
## Pre-commit Self-Review (mandatory)
|
|
133
131
|
|
|
134
|
-
Before every `git commit` (follow-up commits included), self-review against `prompts/review.md` — a subagent runs `/code-review`, never a main-line `Skill` load: the staged diff, and `git diff main...HEAD` before opening or updating a PR. Level from `pnpm josh review:brief --level-only`; resolve all high/medium findings; iterate — **
|
|
132
|
+
Before every `git commit` (follow-up commits included), self-review against `prompts/review.md` — a subagent runs `/code-review`, never a main-line `Skill` load: the staged diff, and `git diff main...HEAD` before opening or updating a PR. Level from `pnpm josh review:brief --level-only`; resolve all high/medium findings; iterate — **no further than the round cap**, the last round a verification pass over the fix delta. Then route each remaining non-High finding through the three-way disposition: fix in place, file it as a follow-up Issue only when it is a confirmed defect that reaches a runtime path (`pnpm josh disposition <path>` answers `runtime` / `non-runtime`) — or drop it with a one-line PR note (the default). **A filed finding is run through `pnpm josh epic:bundle <new>` before the current Issue closes.** A confirmed High blocks rather than buying a round past the cap. `prompts/review.md` → "Review round cap".
|
|
135
133
|
|
|
136
134
|
## Doc Sync Rules
|
|
137
135
|
|
|
@@ -148,11 +146,11 @@ Before every `git commit` (follow-up commits included), self-review against `pro
|
|
|
148
146
|
|
|
149
147
|
- For the issue-driven proposal/plan/execution/notification flow, follow `prompts/collaboration-workflow/` (indexed by `prompts/collaboration-workflow.md`; each topic is its own file).
|
|
150
148
|
- **Before writing a rule as prose, place it by `prompts/collaboration-workflow/residency.md`** — its single source. A computable answer goes to `pnpm josh oracle:list` and an ordering rule to `pnpm josh run:step`, never into `CLAUDE.md` or a prompt file.
|
|
151
|
-
- **Count the target repository's open Issues before filing;
|
|
149
|
+
- **Count the target repository's open Issues before filing; 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. The count command and both procedures: `prompts/collaboration-workflow/wip-cap.md`.
|
|
152
150
|
|
|
153
151
|
### Shorthand Commands
|
|
154
152
|
|
|
155
|
-
`kickoff`, `fullrun`, `halfrun` and `backlogrun` are the Issue-driven shorthand commands. **Their procedures are not resident** — they live in the `workflow-commands` skill. **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; everything a run reaches only after reading the skill is routed to, never restated (`prompts/collaboration-workflow/residency.md` → "第 2 問").
|
|
153
|
+
`kickoff`, `fullrun`, `prrun`, `halfrun` and `backlogrun` are the Issue-driven shorthand commands. **Their procedures are not resident** — they live in the `workflow-commands` skill. **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; everything a run reaches only after reading the skill is routed to, never restated (`prompts/collaboration-workflow/residency.md` → "第 2 問").
|
|
156
154
|
|
|
157
155
|
**Read the skill before running any part of a command — including the first `gh` call.**
|
|
158
156
|
|
|
@@ -160,18 +158,19 @@ Before every `git commit` (follow-up commits included), self-review against `pro
|
|
|
160
158
|
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
161
159
|
| `kickoff [#N \| new]` | Plan only — normalize title, post the plan, notify, **stop** | `workflow-commands` skill + `kickoff.md` + `split-assessment.md` |
|
|
162
160
|
| `fullrun [#N \| new]` | Plan → implement → gate → PR → **merge** → notify | + `fullrun.md` + `split-assessment.md` + `chain-rule.md` |
|
|
161
|
+
| `prrun [#N \| new]` | `fullrun` up to a green, mergeable PR, then **stop** for a person to merge by hand | + `prrun.md` + the `fullrun` set |
|
|
163
162
|
| `halfrun [#N \| new]` | Implement + gate, then **stop before commit** for manual verification | + `halfrun.md` + `split-assessment.md` |
|
|
164
163
|
| `backlogrun [#N1 #N2 …]` | Run named Issues and epics in order (an epic runs its children first), then drain the opted-in backlog — dependency order, lanes. `--only` stops after the named list | + `backlogrun.md` + `split-assessment.md` + the `fullrun` set |
|
|
165
164
|
|
|
166
165
|
**`queue` and `epicrun` were removed** — tell a user who types `queue` to run `backlogrun #N1 #N2 …`, and one who types `epicrun` to run `backlogrun #E --only` (drop `--only` to also drain the backlog).
|
|
167
166
|
|
|
168
|
-
**Three rules decide what a run does when the work turns out not to be one Issue** — the split assessment every entry point applies identically (**its default is not to split**: separability **and** a scope clearly exceeding one verification gate —
|
|
167
|
+
**Three rules decide what a run does when the work turns out not to be one Issue** — the split assessment every entry point applies identically (**its default is not to split**: separability **and** a scope clearly exceeding one verification gate — the size guide in `split-assessment.md`, measured by `pnpm josh split:assess` — must both hold), a prerequisite discovered mid-run (a dependency, not parked), and a named `backlogrun` item that is not an epic. All bind only after a command has started, so all are read from the `workflow-commands` skill: `split-assessment.md`, `SKILL.md` → §2d, `backlogrun-child.md` → "When `#N` is not an epic", and `fullrun.md` / `halfrun.md` / `backlogrun.md` for the branch each entry takes.
|
|
169
168
|
|
|
170
169
|
**The `josh epic:*` commands have their own skill** — `epic:audit`, `epic:next`, `epic:bundle`, and how an epic spans repositories. **Read the `epic-commands` skill before running any of them, before writing an epic that tracks a child in another repository, and right after filing an issue.** Three rules stay here because they bind outside those commands: **recording a decision removes that child's `needs-decision` label** (Tier A); **fixing what the audit finds is Tier A**, park only when the contradiction is a design choice nobody has made; and **an epic in another repository is referenced as `owner/repo#N`** (a bare `#N` resolves to this repository's issue). Canonical reference: `.claude/skills/epic-commands/SKILL.md`.
|
|
171
170
|
|
|
172
171
|
#### Explicit invocation required (MANDATORY)
|
|
173
172
|
|
|
174
|
-
Never start a `kickoff` / `halfrun` / `fullrun` / `backlogrun` workflow (including their `#N` and `new` variants) unless the user has typed the keyword in the **current turn's prompt**.
|
|
173
|
+
Never start a `kickoff` / `halfrun` / `prrun` / `fullrun` / `backlogrun` workflow (including their `#N` and `new` variants) unless the user has typed the keyword in the **current turn's prompt**.
|
|
175
174
|
|
|
176
175
|
- Conversational requests like "implement X", "fix Y", "open a PR for Z" are **NOT** implicit invocations — do not infer authorization from the request shape.
|
|
177
176
|
- Do **NOT** ask confirmation questions like "Shall I run `fullrun`?". A confirmation prompt is not a substitute for explicit invocation.
|
|
@@ -184,7 +183,7 @@ Never start a `kickoff` / `halfrun` / `fullrun` / `backlogrun` workflow (includi
|
|
|
184
183
|
|
|
185
184
|
#### Mid-workflow stop notification (`confirmation`)
|
|
186
185
|
|
|
187
|
-
Whenever you pause **any** run mid-execution to wait for the user — a `kickoff` / `halfrun` / `fullrun` stop, an upstream-Issue interrupt, a Tier C confirmation — you MUST send a Telegram notification **before** stopping, so the user is alerted off-screen. `halfrun`'s built-in stop before commit is a confirmation pause and follows this same rule.
|
|
186
|
+
Whenever you pause **any** run mid-execution to wait for the user — a `kickoff` / `halfrun` / `prrun` / `fullrun` stop, an upstream-Issue interrupt, a Tier C confirmation — you MUST send a Telegram notification **before** stopping, so the user is alerted off-screen. `halfrun`'s built-in stop before commit is a confirmation pause and follows this same rule.
|
|
188
187
|
|
|
189
188
|
```bash
|
|
190
189
|
pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'<one-line reason>\n<what is needed from the user>'
|
package/GEMINI.md
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
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.
|
|
5
|
-
> `CLAUDE.md` is
|
|
4
|
+
> any work here, and follow every rule in it.** This file exists only to point at it. The rules apply
|
|
5
|
+
> to whatever agent is doing the work, but `CLAUDE.md` is written for Claude Code and names its
|
|
6
|
+
> features — read them as follows.
|
|
6
7
|
|
|
7
8
|
@CLAUDE.md
|
|
8
9
|
|
|
10
|
+
- **No hooks run under Gemini.** Every rule `CLAUDE.md` says a hook enforces or delivers is silently
|
|
11
|
+
unenforced here, so apply each one yourself: present the work summary before implementing, resolve
|
|
12
|
+
`JOSH_SESSION_LANG` from `.env`, run `pnpm josh lint:related` and `pnpm josh cspell:dot` after
|
|
13
|
+
editing instead of relying on the format-on-edit hook, and cite every Issue with a link and a short
|
|
14
|
+
title instead of relying on the stop-time check.
|
|
15
|
+
- **Skills, `/verify-ui` and `/code-review`.** Where `CLAUDE.md` says to load a skill or run one in a
|
|
16
|
+
subagent, read that skill's `SKILL.md` and follow it in your own session.
|
|
17
|
+
- **The `.claude/settings.json` deny list** is not enforced here. The rules it backs — no commits,
|
|
18
|
+
merges, staging or other shared-state changes without instruction — still bind you.
|
|
19
|
+
- **`AskUserQuestion`** means asking the user in plain text.
|
|
20
|
+
|
|
9
21
|
**Do not copy rules back into this file.** Every change to how agents work in this repository belongs
|
|
10
22
|
in `CLAUDE.md`.
|
package/README.md
CHANGED
|
@@ -1,29 +1,72 @@
|
|
|
1
1
|
# @joshuafolkken/kit
|
|
2
2
|
|
|
3
|
+
[](https://claude.com/claude-code)
|
|
4
|
+
[](https://openai.com/codex/)
|
|
5
|
+
[](https://www.npmjs.com/package/@joshuafolkken/kit)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
|
|
8
|
+
[](https://nodejs.org/)
|
|
9
|
+
[](https://www.typescriptlang.org/)
|
|
10
|
+
[](https://pnpm.io/)
|
|
11
|
+
|
|
12
|
+
[](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml)
|
|
13
|
+
[](https://sonarcloud.io/summary/new_code?id=joshuafolkken_kit)
|
|
14
|
+
|
|
3
15
|
**Write a GitHub Issue. Your AI agent takes it to a merged PR — the same way in every project.**
|
|
4
16
|
|
|
5
|
-
kit gives Claude Code
|
|
17
|
+
kit gives Claude Code or Codex (or Gemini, Cursor) your project's rules, checks and an Issue-driven workflow.
|
|
18
|
+
|
|
19
|
+
## Sound familiar?
|
|
20
|
+
|
|
21
|
+
Each pain links to how it is solved — or read [the whole story](./docs/why.md).
|
|
22
|
+
|
|
23
|
+
| Your pain | kit | [app-kit] | [game-kit] |
|
|
24
|
+
| -------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :--------: |
|
|
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
|
+
| [Setting up SvelteKit on Cloudflare takes a day](https://github.com/joshuafolkken/app-kit/blob/main/docs/setup/install.md) | — | ✅ | ✅ |
|
|
42
|
+
| [I'm not sure the app is secure](https://github.com/joshuafolkken/app-kit/blob/main/docs/security-headers.md) | — | ✅ | ✅ |
|
|
43
|
+
| [Nobody looked at the screen](https://github.com/joshuafolkken/app-kit/blob/main/docs/shot.md) | — | ✅ | ✅ |
|
|
44
|
+
| [Starting a 3D game means building it all first](https://github.com/joshuafolkken/game-kit/blob/main/docs/install.md) | — | — | ✅ |
|
|
45
|
+
|
|
46
|
+
Each kit includes the one to its left: app-kit builds on kit, game-kit builds on app-kit.
|
|
47
|
+
|
|
48
|
+
[app-kit]: https://github.com/joshuafolkken/app-kit
|
|
49
|
+
[game-kit]: https://github.com/joshuafolkken/game-kit
|
|
6
50
|
|
|
7
51
|
## The workflow
|
|
8
52
|
|
|
9
|
-
| You type
|
|
10
|
-
|
|
|
11
|
-
| `kickoff
|
|
12
|
-
| `halfrun
|
|
13
|
-
| `fullrun
|
|
14
|
-
| `backlogrun
|
|
53
|
+
| You type | The agent |
|
|
54
|
+
| ------------ | ------------------------------------------------ |
|
|
55
|
+
| `kickoff` | Writes the plan on the Issue, then stops |
|
|
56
|
+
| `halfrun` | Implements and self-reviews, stops before commit |
|
|
57
|
+
| `fullrun` | Plans if needed, implements through to merge |
|
|
58
|
+
| `backlogrun` | Runs many Issues unattended |
|
|
15
59
|
|
|
16
|
-
|
|
60
|
+
Each keyword in full: [Run Issues with the workflow keywords](./docs/how-to/run-issues.md). When a run needs you, it [notifies you on Telegram](./docs/how-to/set-up-notifications.md).
|
|
17
61
|
|
|
18
|
-
|
|
19
|
-
- **Missing tests stop the commit.** kit decides from the changed files whether a test is required, and stops the commit until the agent adds one or declares the change exempt.
|
|
20
|
-
- **It tells you when it stops.** A run that needs you sends a [Telegram notification](./docs/how-to/set-up-notifications.md).
|
|
62
|
+
## Why you can trust "done"
|
|
21
63
|
|
|
22
|
-
|
|
64
|
+
- **Checks are commands.** Lint, types, spelling and tests run as one gate — "it should pass" doesn't count.
|
|
65
|
+
- **No test, no commit.** kit decides from the changed files whether a test is required.
|
|
23
66
|
|
|
24
67
|
## Quick start
|
|
25
68
|
|
|
26
|
-
Requires Node.js
|
|
69
|
+
Requires Node.js, pnpm and the gh CLI — [how to install them](./docs/setup/prerequisites.md).
|
|
27
70
|
|
|
28
71
|
```bash
|
|
29
72
|
pnpm add -D --allow-build=esbuild --allow-build=unrs-resolver @joshuafolkken/kit
|
|
@@ -32,12 +75,10 @@ pnpm exec josh start
|
|
|
32
75
|
|
|
33
76
|
Then open your agent and follow the [tutorial](./docs/tutorial.md).
|
|
34
77
|
|
|
35
|
-
No Issue workflow?
|
|
78
|
+
No Issue workflow? [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
|
|
36
79
|
|
|
37
80
|
## Docs
|
|
38
81
|
|
|
39
|
-
[Tutorial](./docs/tutorial.md) · [How-to](./docs/how-to.md) · [Commands](./docs/josh-commands.md) · [Troubleshooting](./docs/troubleshooting.md) · [
|
|
40
|
-
|
|
41
|
-
## Contributing · License
|
|
82
|
+
[Tutorial](./docs/tutorial.md) · [How-to](./docs/how-to.md) · [Commands](./docs/josh-commands.md) · [Troubleshooting](./docs/troubleshooting.md) · [All docs](./docs/overview.md)
|
|
42
83
|
|
|
43
|
-
[
|
|
84
|
+
[Releases](https://github.com/joshuafolkken/kit/releases) · [Security](./SECURITY.md) · [Contributing](./CLAUDE.md) · [Maintaining kit](./docs/maintainers/README.md) · [MIT](./LICENSE)
|
package/SECURITY.md
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
| Version | Supported |
|
|
6
6
|
| ------- | ------------------ |
|
|
7
|
-
|
|
|
7
|
+
| Latest | :white_check_mark: |
|
|
8
|
+
| Older | :x: |
|
|
9
|
+
|
|
10
|
+
Fixes ship in a new release rather than as patches to older versions; upgrade to the latest release to receive them. Each release's changes are listed on the [Releases](https://github.com/joshuafolkken/kit/releases) page.
|
|
8
11
|
|
|
9
12
|
## Reporting a Vulnerability
|
|
10
13
|
|
|
@@ -17,13 +20,40 @@ We aim to acknowledge reports within **48 hours** and provide a resolution or mi
|
|
|
17
20
|
|
|
18
21
|
## Published Package Contents
|
|
19
22
|
|
|
20
|
-
The
|
|
23
|
+
The `files` field of `package.json` decides what the published `@joshuafolkken/kit` package contains. None of it carries credentials or private URLs. `josh init` and `josh sync` copy or merge part of it into a project; [sync.md](https://github.com/joshuafolkken/kit/blob/main/docs/sync.md) lists which files are overwritten and which are merged.
|
|
24
|
+
|
|
25
|
+
**Code that runs on your machine and in CI**
|
|
26
|
+
|
|
27
|
+
- `dist/`, `scripts/` — the `josh` command and the scripts behind it. They read and write files in your repository, run `git`, `gh` and `pnpm`, and call the GitHub API and, when configured, the Telegram API.
|
|
28
|
+
- `.claude/settings.json` — Claude Code hooks that run `pnpm josh …` commands on session start, on each prompt, before and after tool calls and on stop, plus a deny list for staging, committing, merging, force pushes and branch deletions. `josh sync` overwrites it.
|
|
29
|
+
- `.codex/` — the same hooks for Codex (`hooks.json`) and its project settings (`config.toml`).
|
|
30
|
+
- `.github/` — GitHub Actions workflows (CI, tagging, pull request classification, Dependabot auto-merge, SonarQube and production), composite actions, `dependabot.yml`, the pull request template and the release-notes config. `josh sync` overwrites the distributed workflows; their action references are pinned to commit SHAs. kit's own `publish.yml` ships in the package but is never copied into a project.
|
|
31
|
+
- `lefthook/` — Git hook presets: lint before commit, checks before push.
|
|
32
|
+
- The `preinstall` script `josh init` adds to `package.json` runs `pnpm dlx @aikidosec/safe-chain setup-ci` on every install, then a `node -e` check that only prints a warning, and only outside CI. The `prepare` script it adds runs `lefthook install` when Lefthook is present, then, when tsx is present, kit's `fix-gh-packages` script: only when the project `.npmrc` routes a scope to GitHub Packages, it reads a GitHub token (`NODE_AUTH_TOKEN`, a token in the project `.npmrc`, or `gh auth token`), queries GitHub Packages and rewrites tarball URLs in `pnpm-lock.yaml`.
|
|
33
|
+
|
|
34
|
+
**Agent instructions and skills**
|
|
35
|
+
|
|
36
|
+
- `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, `.cursorrules`, `prompts/` — the rules and procedures AI agents follow.
|
|
37
|
+
- `.claude/skills/`, `.claude/.claude-plugin/`, `.claude-plugin/` — the Claude Code skills, shipped as the `kit` plugin and its marketplace entry.
|
|
38
|
+
- `.mcp.json` — the MCP server configuration for the Svelte documentation server. It contains only the public endpoint `https://mcp.svelte.dev/mcp`.
|
|
39
|
+
- `.coderabbit.yaml` — CodeRabbit review settings.
|
|
40
|
+
|
|
41
|
+
**Configuration presets and templates**
|
|
42
|
+
|
|
43
|
+
- `eslint/`, `prettier/`, `tsconfig/`, `cspell/`, `env/`, `ports/`, `playwright.config.ts`, `tsconfig.sonar.json` — shared configuration your project imports or receives.
|
|
44
|
+
- `templates/` — the templates `josh init` and `josh sync` write from.
|
|
45
|
+
- `.vscode/`, `.gitattributes`, `.ncurc.json`, `.prettierignore`, `pnpm-workspace.yaml` — editor, Git and package-manager settings.
|
|
46
|
+
- `CODE_OF_CONDUCT.md`, `SECURITY.md` — community files.
|
|
47
|
+
|
|
48
|
+
## Secrets
|
|
21
49
|
|
|
22
|
-
|
|
23
|
-
- `.coderabbit.yaml`, `.cursorrules` — AI tool configurations with no sensitive data.
|
|
24
|
-
- `templates/`, `prompts/` — Markdown and config templates. No credentials.
|
|
50
|
+
kit never stores a secret in a file it ships or commits. The ones it uses:
|
|
25
51
|
|
|
26
|
-
|
|
52
|
+
- `TELEGRAM_BOT_TOKEN`, `TELEGRAM_CHAT_ID` — Telegram notifications. Keep them in a local `.env` file, which is gitignored, or in the environment. Set `JOSH_NOTIFY=off` to need neither.
|
|
53
|
+
- `SONAR_TOKEN` — a repository secret the distributed SonarQube workflow reads. Without it the workflow skips the scan.
|
|
54
|
+
- `GITHUB_TOKEN` — supplied by GitHub Actions to the distributed workflows; nothing to configure.
|
|
55
|
+
- `GH_TOKEN` — authenticates `gh` in CI and cloud sessions, where `gh auth login` is not available.
|
|
56
|
+
- `NODE_AUTH_TOKEN` — the GitHub Packages credential, only for projects that still install kit from there ([authentication.md](https://github.com/joshuafolkken/kit/blob/main/docs/authentication.md)). The `prepare` script above reads it.
|
|
27
57
|
|
|
28
58
|
## MCP External Endpoints
|
|
29
59
|
|