@joshuafolkken/kit 1.1050.0 → 1.1128.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 +20 -12
- package/.claude/skills/workflow-commands/background-commands.md +36 -84
- 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 +30 -33
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -12
- 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 +8 -6
- package/.claude/skills/workflow-commands/halfrun.md +19 -21
- 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 +8 -16
- 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/pre-gate-cut.md +4 -8
- 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/split-assessment.md +4 -18
- package/.claude/skills/workflow-commands/working-tree-hold.md +22 -2
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-node/action.yml +33 -0
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/auto-tag.yml +2 -3
- package/.github/workflows/ci.yml +31 -134
- package/.github/workflows/dependabot-auto-merge.yml +1 -0
- package/.github/workflows/pr-classification.yml +6 -44
- package/.github/workflows/production.yml +1 -0
- package/.github/workflows/publish.yml +43 -47
- package/.github/workflows/sonar-qube.yml +41 -4
- package/.pnpmfile.mjs +29 -0
- package/AGENTS.md +5 -2
- package/CLAUDE.md +33 -27
- package/GEMINI.md +5 -2
- package/README.md +66 -20
- package/SECURITY.md +37 -6
- package/cspell/index.yaml +6 -1
- package/dist/CLAUDE.basic.md +6 -6
- package/dist/CLAUDE.md +33 -27
- package/dist/CLAUDE.static.md +6 -6
- package/dist/config-merge/index.js +48 -12
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-7VPDUBRN.js → chunk-4JZDP5X5.js} +152 -155
- package/dist/hooks/{chunk-HJIISEAC.js → chunk-5SD2YM7Z.js} +5 -13
- package/dist/hooks/{chunk-NAS4C7GP.js → chunk-77J7IEQM.js} +2 -2
- package/dist/hooks/{chunk-DMQN45FN.js → chunk-7HVB7SZG.js} +3 -3
- package/dist/hooks/{chunk-RLDX5SOC.js → chunk-AIOIOMPX.js} +4413 -1970
- package/dist/hooks/{chunk-5BK3K7V4.js → chunk-M7QKEKWO.js} +873 -2049
- package/dist/hooks/{chunk-WQ4OSBSS.js → chunk-MKVGBQPA.js} +2 -2
- package/dist/hooks/{chunk-EJDX2TOB.js → chunk-NXYMNPUQ.js} +7 -88
- package/dist/hooks/{chunk-NJQOBE6L.js → chunk-QVLT52OV.js} +2 -7
- package/dist/hooks/{chunk-GQ7KP45M.js → chunk-XYUIQOW3.js} +2 -2
- package/dist/hooks/codex-hook-adapter.js +12 -48
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +280 -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 +192 -333
- package/dist/josh.js +240 -148
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +70 -78
- package/eslint/rules/promise.js +5 -0
- package/eslint/rules/unicorn.js +3 -2
- package/package.json +26 -5
- package/pnpm-workspace.yaml +5 -7
- package/prompts/collaboration-workflow/glossary.md +17 -0
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/issue-template.md +1 -1
- package/prompts/collaboration-workflow/operating-rules.md +5 -5
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/principles.md +9 -0
- 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 +6 -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-arrival.ts +30 -10
- package/scripts/backlog/backlog-budget-cli.ts +15 -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 +6 -19
- package/scripts/backlog/backlog-plan-cli.ts +1 -7
- package/scripts/backlog/backlog-plan.ts +30 -19
- package/scripts/backlog/backlog-pool.ts +3 -6
- package/scripts/backlog/backlog-rank.ts +2 -2
- package/scripts/backlog/backlog-ready.ts +39 -10
- 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/parse-jsonc.ts +33 -3
- package/scripts/config-merge/patch-json-key.ts +13 -6
- 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 +3 -10
- 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 +6 -10
- package/scripts/doctor/doctor-io.ts +9 -13
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/backlogrun-parent-read-set.ts +12 -1
- package/scripts/document/document-byte-budget.ts +5 -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 +21 -7
- package/scripts/document/entry-read-set.ts +32 -8
- package/scripts/document/lane-child-read-set.ts +8 -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 +9 -3
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +4 -2
- 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 +8 -22
- 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 +13 -10
- 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-issue-write.ts +4 -1
- package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +4 -1
- 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-command.ts +6 -1
- 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-spawn-sync.ts +65 -0
- package/scripts/git/git-spawn.ts +5 -4
- 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} +2 -7
- 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-file-action.ts +54 -0
- package/scripts/init/init-logic-migrate.ts +35 -17
- package/scripts/init/init-logic-secretlint.ts +1 -1
- package/scripts/init/init-logic.ts +10 -19
- package/scripts/init/init.ts +11 -71
- package/scripts/init/kit-written-paths.ts +2 -0
- package/scripts/init/project-profile.ts +9 -17
- package/scripts/init/start-exec.ts +1 -1
- package/scripts/init/start-setup-pr.ts +6 -6
- package/scripts/init/start-steps.ts +3 -1
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +64 -23
- 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-backlinks.ts +7 -14
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +12 -8
- 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 +7 -14
- 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 +21 -6
- package/scripts/issue/measure-rerun-cli.ts +74 -15
- 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 +7 -1
- 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 +3 -3
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/run-github-prerequisite.ts +3 -6
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +46 -19
- 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 +5 -4
- 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 +31 -27
- 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 +7 -1
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/cli-flags.ts +31 -2
- package/scripts/lib/error-message.ts +12 -1
- 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/line-targets.ts +0 -11
- package/scripts/lines/lines-command.ts +5 -4
- 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 +3 -10
- 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 +2 -2
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +28 -21
- package/scripts/registry-migration/migrate.ts +25 -14
- package/scripts/release/github-release-cli.ts +19 -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 +38 -5
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/release/release-worktree.ts +97 -2
- 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-checkout.ts +3 -2
- 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 +10 -17
- 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/early-heartbeat.ts +4 -3
- 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 +22 -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 +20 -9
- 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-args.ts +8 -12
- 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-args.ts +1 -6
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +2 -6
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +133 -25
- package/scripts/run/run-entry-stop.ts +104 -0
- 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-emit.ts +7 -2
- 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 +29 -6
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +2 -6
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +7 -23
- 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 +4 -2
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +6 -3
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-args.ts +20 -4
- package/scripts/run/run-progress-cli.ts +35 -36
- package/scripts/run/run-progress-clock.ts +10 -35
- 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 +29 -19
- 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-probe.ts +4 -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 +3 -16
- 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 +6 -2
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +4 -13
- 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 +18 -12
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/pack-hook.ts +92 -0
- 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-ai-files.ts +4 -0
- 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-changed.ts +13 -16
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +3 -9
- 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-commands.ts +11 -1
- package/scripts/version/version-remote.ts +3 -3
- package/scripts/version/version-targets.ts +4 -4
- package/templates/CLAUDE.basic.md +6 -6
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/ci.yml +16 -82
- package/templates/workflows/dependabot-auto-merge.yml +6 -3
- package/templates/workflows/github-release.yml +79 -0
- package/tsconfig.sonar.json +4 -22
- 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.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
|
@@ -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')
|
|
@@ -21,39 +25,40 @@ jobs:
|
|
|
21
25
|
steps:
|
|
22
26
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
23
27
|
|
|
24
|
-
- uses: actions/setup-node
|
|
28
|
+
- uses: ./.github/actions/setup-node
|
|
25
29
|
with:
|
|
26
|
-
node-version: 24
|
|
27
30
|
registry-url: 'https://npm.pkg.github.com'
|
|
28
31
|
scope: '@joshuafolkken'
|
|
29
32
|
|
|
30
|
-
-
|
|
31
|
-
|
|
33
|
+
# Read before setup-pnpm puts the safe-chain shims on PATH: safe-chain hides recent versions from
|
|
34
|
+
# registry metadata and prints a notice to stdout, which corrupts the value (joshuafolkken/kit#3060).
|
|
35
|
+
- name: Read registry latest
|
|
36
|
+
id: registry-latest
|
|
32
37
|
run: |
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
latest=$(cd "$RUNNER_TEMP" && npm view @joshuafolkken/kit dist-tags.latest --registry https://npm.pkg.github.com)
|
|
39
|
+
echo "latest=$latest" >> "$GITHUB_OUTPUT"
|
|
40
|
+
env:
|
|
41
|
+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
36
42
|
|
|
37
|
-
- uses:
|
|
43
|
+
- uses: ./.github/actions/setup-pnpm
|
|
38
44
|
with:
|
|
39
|
-
|
|
40
|
-
install: false
|
|
41
|
-
|
|
42
|
-
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
45
|
+
cache: 'false'
|
|
43
46
|
|
|
44
47
|
- name: Select GitHub Packages tag
|
|
45
48
|
id: publish-tag
|
|
46
49
|
run: |
|
|
47
50
|
version=$(node -p "require('./package.json').version")
|
|
48
|
-
|
|
49
|
-
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$latest")
|
|
51
|
+
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$LATEST")
|
|
50
52
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
51
53
|
env:
|
|
52
|
-
|
|
54
|
+
LATEST: ${{ steps.registry-latest.outputs.latest }}
|
|
53
55
|
|
|
54
|
-
|
|
56
|
+
# The tag reaches the command through the environment rather than expanded into it, so a step
|
|
57
|
+
# output is never parsed as shell (joshuafolkken/kit#3084).
|
|
58
|
+
- run: pnpm publish --no-git-checks --tag "$PUBLISH_TAG" --registry https://npm.pkg.github.com
|
|
55
59
|
env:
|
|
56
60
|
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
61
|
+
PUBLISH_TAG: ${{ steps.publish-tag.outputs.tag }}
|
|
57
62
|
|
|
58
63
|
publish-npm:
|
|
59
64
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
@@ -68,24 +73,20 @@ jobs:
|
|
|
68
73
|
steps:
|
|
69
74
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
70
75
|
|
|
71
|
-
- uses: actions/setup-node
|
|
76
|
+
- uses: ./.github/actions/setup-node
|
|
72
77
|
with:
|
|
73
|
-
node-version: 24
|
|
74
78
|
registry-url: 'https://registry.npmjs.org'
|
|
75
79
|
|
|
76
|
-
-
|
|
77
|
-
|
|
80
|
+
# Before setup-pnpm, for the same reason as publish-github's lookup (joshuafolkken/kit#3060).
|
|
81
|
+
- name: Read registry latest
|
|
82
|
+
id: registry-latest
|
|
78
83
|
run: |
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
84
|
+
latest=$(cd "$RUNNER_TEMP" && npm view @joshuafolkken/kit dist-tags.latest --registry https://registry.npmjs.org)
|
|
85
|
+
echo "latest=$latest" >> "$GITHUB_OUTPUT"
|
|
82
86
|
|
|
83
|
-
- uses:
|
|
87
|
+
- uses: ./.github/actions/setup-pnpm
|
|
84
88
|
with:
|
|
85
|
-
|
|
86
|
-
install: false
|
|
87
|
-
|
|
88
|
-
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
89
|
+
cache: 'false'
|
|
89
90
|
|
|
90
91
|
- run: pnpm pack --out "$RUNNER_TEMP/kit.tgz"
|
|
91
92
|
|
|
@@ -93,12 +94,15 @@ jobs:
|
|
|
93
94
|
id: publish-tag
|
|
94
95
|
run: |
|
|
95
96
|
version=$(node -p "require('./package.json').version")
|
|
96
|
-
|
|
97
|
-
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$latest")
|
|
97
|
+
tag=$(pnpm exec tsx scripts/release/publish-tag-cli.ts "$version" "$LATEST")
|
|
98
98
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
|
99
|
+
env:
|
|
100
|
+
LATEST: ${{ steps.registry-latest.outputs.latest }}
|
|
99
101
|
|
|
100
102
|
- name: Publish to npm
|
|
101
|
-
run: cd "$RUNNER_TEMP" && npm publish kit.tgz --access public --tag $
|
|
103
|
+
run: cd "$RUNNER_TEMP" && npm publish kit.tgz --access public --tag "$PUBLISH_TAG" --registry https://registry.npmjs.org --userconfig /dev/null
|
|
104
|
+
env:
|
|
105
|
+
PUBLISH_TAG: ${{ steps.publish-tag.outputs.tag }}
|
|
102
106
|
|
|
103
107
|
update-production:
|
|
104
108
|
needs: [publish-github, publish-npm]
|
|
@@ -120,26 +124,18 @@ jobs:
|
|
|
120
124
|
with:
|
|
121
125
|
fetch-depth: 0
|
|
122
126
|
|
|
123
|
-
- uses: actions/setup-node
|
|
124
|
-
with:
|
|
125
|
-
node-version: 24
|
|
126
|
-
|
|
127
|
-
- name: Resolve pnpm version
|
|
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"
|
|
127
|
+
- uses: ./.github/actions/setup-node
|
|
133
128
|
|
|
134
|
-
- uses:
|
|
129
|
+
- uses: ./.github/actions/setup-pnpm
|
|
135
130
|
with:
|
|
136
|
-
|
|
137
|
-
install: false
|
|
138
|
-
|
|
139
|
-
- run: pnpm install --frozen-lockfile --ignore-scripts
|
|
131
|
+
cache: 'false'
|
|
140
132
|
|
|
133
|
+
# Tags through v1.887.0 predate automatic GitHub Releases and must not block the first new one.
|
|
141
134
|
- name: Publish GitHub Release
|
|
142
|
-
run: pnpm
|
|
135
|
+
run: pnpm josh release:github
|
|
143
136
|
env:
|
|
144
137
|
GH_TOKEN: ${{ github.token }}
|
|
145
138
|
RELEASE_TAG: ${{ github.ref_name }}
|
|
139
|
+
RELEASE_START_TAG: v1.887.0
|
|
140
|
+
RELEASE_WORKFLOW: publish.yml
|
|
141
|
+
RELEASE_JOBS: publish-github,publish-npm,update-production
|
|
@@ -18,7 +18,10 @@ jobs:
|
|
|
18
18
|
name: SonarQube
|
|
19
19
|
permissions:
|
|
20
20
|
contents: read
|
|
21
|
+
packages: read
|
|
21
22
|
runs-on: ubuntu-latest
|
|
23
|
+
# The scan waits for SonarCloud's Quality Gate, so the limit leaves room for that wait.
|
|
24
|
+
timeout-minutes: 20
|
|
22
25
|
# A consumer that does not use SonarCloud has no SONAR_TOKEN, and the scan would fail on
|
|
23
26
|
# authentication and turn a required check red (joshuafolkken/kit#2815). `secrets` cannot be read
|
|
24
27
|
# in a step `if:`, so the secret is lifted into the job env and the steps branch on that instead.
|
|
@@ -34,11 +37,45 @@ jobs:
|
|
|
34
37
|
if: env.SONAR_TOKEN != ''
|
|
35
38
|
with:
|
|
36
39
|
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
|
40
|
+
# The dependencies are installed before the scan, on a push as well as on a pull request:
|
|
41
|
+
# `tsconfig.sonar.json` extends `@joshuafolkken/kit/tsconfig/base`, which a consumer resolves
|
|
42
|
+
# only from node_modules, so a scan ahead of the install read a config it could not load
|
|
43
|
+
# (joshuafolkken/kit#3082). The new-code check below runs `pnpm josh` from the same install.
|
|
44
|
+
- name: Setup Node.js
|
|
45
|
+
if: env.SONAR_TOKEN != ''
|
|
46
|
+
uses: ./.github/actions/setup-node
|
|
47
|
+
- name: Configure GitHub Packages authentication for existing projects
|
|
48
|
+
if: env.SONAR_TOKEN != ''
|
|
49
|
+
run: printf '//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n' >> "$HOME/.npmrc"
|
|
50
|
+
- name: Setup pnpm and install dependencies
|
|
51
|
+
if: env.SONAR_TOKEN != ''
|
|
52
|
+
uses: ./.github/actions/setup-pnpm
|
|
53
|
+
with:
|
|
54
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
55
|
+
# SonarCloud's New Code starts at the previous version, so an analysis without
|
|
56
|
+
# `sonar.projectVersion` never moves that start and New Code grows without end, diluting every
|
|
57
|
+
# ratio the Quality Gate judges (joshuafolkken/kit#3045). The version is `package.json`'s, so
|
|
58
|
+
# each `josh bump` that reaches main starts a new New Code period.
|
|
59
|
+
- name: Resolve project version
|
|
60
|
+
id: project-version
|
|
61
|
+
if: env.SONAR_TOKEN != ''
|
|
62
|
+
run: |
|
|
63
|
+
version=$(jq -r '.version // empty' package.json)
|
|
64
|
+
echo "args=${version:+-Dsonar.projectVersion=$version}" >> "$GITHUB_OUTPUT"
|
|
37
65
|
- name: SonarQube Scan
|
|
38
66
|
if: env.SONAR_TOKEN != ''
|
|
39
67
|
uses: SonarSource/sonarqube-scan-action@d209202bc7d53ff1cc128f7f907dac145c9d6ae9 # v8.3.0
|
|
40
68
|
with:
|
|
41
|
-
# Wait for the SonarCloud Quality Gate and fail this job
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
args: -Dsonar.qualitygate.wait=true
|
|
69
|
+
# Wait for the SonarCloud Quality Gate and fail this job when the gate is red. The gate
|
|
70
|
+
# judges ratings and ratios, not counts, so it alone lets a few new code smells or a small
|
|
71
|
+
# copied block through; the new-code check below is what fails on a single finding.
|
|
72
|
+
args: -Dsonar.qualitygate.wait=true ${{ steps.project-version.outputs.args }}
|
|
73
|
+
# The new-code check reads the pull request's analysis from the SonarCloud API and fails this
|
|
74
|
+
# job (a required PR check) when the pull request adds any new issue, of any type or severity,
|
|
75
|
+
# or any new duplicated block (joshuafolkken/kit#3045). An issue resolved in SonarCloud as
|
|
76
|
+
# accepted or a false positive is not counted. A push to main has no pull request to read.
|
|
77
|
+
- name: Fail on new Sonar issues or duplicated blocks
|
|
78
|
+
if: env.SONAR_TOKEN != '' && github.event_name == 'pull_request'
|
|
79
|
+
env:
|
|
80
|
+
PULL_REQUEST: ${{ github.event.pull_request.number }}
|
|
81
|
+
run: pnpm josh sonar:new-code "$PULL_REQUEST"
|
package/.pnpmfile.mjs
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// josh-managed-pnpmfile: @joshuafolkken/kit
|
|
2
|
+
// `josh init` / `josh sync` copy this file into every project that publishes (joshuafolkken/kit#3110)
|
|
3
|
+
// and overwrite it while this first line stays; edit it in kit, not here.
|
|
4
|
+
// Strips the Safe Chain `preinstall` from the packed manifest only (joshuafolkken/kit#2693).
|
|
5
|
+
// kit writes it to run Safe Chain for the repository's own development installs; shipped, it becomes
|
|
6
|
+
// a build script every consumer's pnpm refuses to run unapproved, and it could not protect them
|
|
7
|
+
// anyway — their install has already started by the time a dependency's `preinstall` runs. The
|
|
8
|
+
// repository's package.json keeps it; `pnpm pack` and `pnpm publish` call this hook on the copy they
|
|
9
|
+
// write. Any other lifecycle script — a native build, a binary download — is the package's own and
|
|
10
|
+
// ships untouched.
|
|
11
|
+
const SAFE_CHAIN_PACKAGE = '@aikidosec/safe-chain'
|
|
12
|
+
|
|
13
|
+
function is_safe_chain_preinstall(name, command) {
|
|
14
|
+
return name === 'preinstall' && command.includes(SAFE_CHAIN_PACKAGE)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function strip_safe_chain_preinstall(manifest) {
|
|
18
|
+
const scripts = Object.fromEntries(
|
|
19
|
+
Object.entries(manifest.scripts ?? {}).filter(
|
|
20
|
+
([name, command]) => !is_safe_chain_preinstall(name, command),
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
return { ...manifest, scripts }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const hooks = { beforePacking: strip_safe_chain_preinstall }
|
|
28
|
+
|
|
29
|
+
export { hooks, is_safe_chain_preinstall }
|
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
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
|
-
|
|
4
|
+
> any work here, and follow every rule in it.** This file exists only to point at it.
|
|
5
|
+
|
|
6
|
+
**Codex runs the same hooks from `.codex/hooks.json`**, generated from `.claude/settings.json`; where
|
|
7
|
+
it does not show a hook's output, apply that rule yourself. How to read `CLAUDE.md`'s Claude Code
|
|
8
|
+
features here is `prompts/collaboration-workflow/principles.md` → "Claude Code 以外のエージェントでの読み替え".
|
|
6
9
|
|
|
7
10
|
**Do not copy rules back into this file.** Every change to how agents work in this repository belongs
|
|
8
11
|
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. Details: [environment-variables.md](https://github.com/joshuafolkken/kit/blob/main/docs/environment-variables.md), [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,18 +94,20 @@ 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)_:
|
|
103
|
+
0. **Work summary + test declaration** _(before writing any implementation code)_: once per Issue, present a two-layer summary in ordinary markdown, **never wrapped in a code fence** — required in fullrun/halfrun/backlogrun even when the Issue body was filled (`kickoff` is exempt). Presentation only, never a confirmation stop. `prompts/collaboration-workflow/report-format.md`; `pnpm josh report:lint` checks the form.
|
|
106
104
|
|
|
105
|
+
- **Overview** — three lines, **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, not names the reader sees on screen.
|
|
106
|
+
- **Details**, then **every change with its test**: `<what changes> — Test: <Unit|E2E> — <file path> — <what it verifies>`. Completion reports lead with **Cause / Fix / Result**.
|
|
107
107
|
- **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
|
-
- **Non-runtime updates (pre-approved manual-only exception)**: a change touching no executable runtime code path
|
|
109
|
-
- **
|
|
110
|
-
-
|
|
108
|
+
- **Non-runtime updates (pre-approved manual-only exception)**: a change touching no executable runtime code path — docs, non-executable config, editor/IDE files, cosmetic asset swaps with no selector/path change — may be verified by hand; declare it in Step 0 with the reason. The mechanically exempt (`*.md`, `.editorconfig`, `.idea/**`, `.vscode/**`, `prompts/**`) need no declaration. A runtime change whose test is infeasible needs the reason and user approval.
|
|
109
|
+
- **Basic-profile manual-check exception:** under `josh.profile: basic` (or `static`), a change touching only languages kit cannot test (HTML/CSS, Lua …) is verified by hand — a browser check of layout, links and interactions in the HTML, or actually run the changed code — and reported; JavaScript and TypeScript still need tests. `prompts/testing-guide.md`.
|
|
110
|
+
- **`pnpm josh test:declared`** answers `required` / `exempt` / `satisfied` from the changed paths; a runtime change with no test is refused at `pnpm josh git -y` on `required`.
|
|
111
111
|
- **Read a target's line headroom before editing: `pnpm josh lines <path>`** — near the limit, `Target` carries the splitting plan.
|
|
112
112
|
|
|
113
113
|
1. **Refactor first** — before any refactoring, read and follow `prompts/refactoring.md`; apply high/medium refactoring to all new/modified code and do not proceed until none remain.
|
|
@@ -131,7 +131,11 @@ Run the full verification set **in order**; do not skip, reorder, or report comp
|
|
|
131
131
|
|
|
132
132
|
## Pre-commit Self-Review (mandatory)
|
|
133
133
|
|
|
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
|
|
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. `prompts/review.md` → "Review round cap".
|
|
135
|
+
|
|
136
|
+
- **Scope** — the staged diff, and `git diff main...HEAD` before opening or updating a PR; level from `pnpm josh review:brief --level-only`.
|
|
137
|
+
- **Rounds** — resolve all high/medium findings, **no further than the round cap**, the last round a verification pass over the fix delta. A confirmed High blocks rather than buying a round past the cap.
|
|
138
|
+
- **Each remaining non-High finding** — 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>`), 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.**
|
|
135
139
|
|
|
136
140
|
## Doc Sync Rules
|
|
137
141
|
|
|
@@ -139,20 +143,20 @@ Before every `git commit` (follow-up commits included), self-review against `pro
|
|
|
139
143
|
|
|
140
144
|
## Git Rules
|
|
141
145
|
|
|
142
|
-
- **No commits** unless explicitly requested. **No PR merges, branch deletions, force pushes or other shared-state mutations** unless explicitly requested in the current turn — the default end state is PR still OPEN. **Exception**: invoking `fullrun` authorizes the merge, via `pnpm josh followup
|
|
146
|
+
- **No commits** unless explicitly requested. **No PR merges, branch deletions, force pushes or other shared-state mutations** unless explicitly requested in the current turn — the default end state is PR still OPEN. **Exception**: 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. `prompts/collaboration-workflow/operating-rules.md` → "指示されていない行動は取らない".
|
|
143
147
|
- **Never stage or mutate the git index on your own.** `git add` / `git rm --cached` / `git restore --staged` / `git commit` overwrite the user's snapshot and are denied by settings; inspection is read-only. Staging is allowed only on an explicit current-turn instruction or an authorized commit flow (`pnpm josh git`). `prompts/collaboration-workflow/operating-rules.md` → "git index を勝手に変更しない".
|
|
144
148
|
- **For git operations use `pnpm josh git`.** After a failed push, fix, push manually, then `pnpm josh pr` — **never** `gh pr create` directly, which bypasses `closes #N` generation so the Issue will not auto-close.
|
|
145
149
|
- **Start-of-conversation git status is a stale snapshot.** Before acting on any working-tree / index / stash / branch assumption, run `git status` (and `git stash list`) live first.
|
|
146
150
|
|
|
147
151
|
## Collaboration Workflow
|
|
148
152
|
|
|
149
|
-
-
|
|
153
|
+
- The issue-driven flow is `prompts/collaboration-workflow/`, indexed by `prompts/collaboration-workflow.md`.
|
|
150
154
|
- **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;
|
|
155
|
+
- **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
156
|
|
|
153
157
|
### Shorthand Commands
|
|
154
158
|
|
|
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 問").
|
|
159
|
+
`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
160
|
|
|
157
161
|
**Read the skill before running any part of a command — including the first `gh` call.**
|
|
158
162
|
|
|
@@ -160,36 +164,38 @@ Before every `git commit` (follow-up commits included), self-review against `pro
|
|
|
160
164
|
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
161
165
|
| `kickoff [#N \| new]` | Plan only — normalize title, post the plan, notify, **stop** | `workflow-commands` skill + `kickoff.md` + `split-assessment.md` |
|
|
162
166
|
| `fullrun [#N \| new]` | Plan → implement → gate → PR → **merge** → notify | + `fullrun.md` + `split-assessment.md` + `chain-rule.md` |
|
|
167
|
+
| `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
168
|
| `halfrun [#N \| new]` | Implement + gate, then **stop before commit** for manual verification | + `halfrun.md` + `split-assessment.md` |
|
|
164
169
|
| `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
170
|
|
|
166
|
-
**`queue` and `epicrun` were removed** —
|
|
171
|
+
**`queue` and `epicrun` were removed** — point `queue` to `backlogrun #N1 #N2 …` and `epicrun` to `backlogrun #E --only`.
|
|
167
172
|
|
|
168
|
-
**
|
|
173
|
+
**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 bind outside those commands:
|
|
169
174
|
|
|
170
|
-
|
|
175
|
+
- Recording a decision removes that child's `needs-decision` label (Tier A).
|
|
176
|
+
- **Fixing what the audit finds is Tier A**; park only when the contradiction is a design choice nobody has made.
|
|
177
|
+
- **An epic in another repository is referenced as `owner/repo#N`** — a bare `#N` resolves to this repository's issue.
|
|
171
178
|
|
|
172
179
|
#### Explicit invocation required (MANDATORY)
|
|
173
180
|
|
|
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**.
|
|
181
|
+
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
182
|
|
|
176
183
|
- 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
184
|
- Do **NOT** ask confirmation questions like "Shall I run `fullrun`?". A confirmation prompt is not a substitute for explicit invocation.
|
|
178
185
|
- Instead, **prompt the user to type the command themselves**, with the exact phrasing: "Please run \`<command>\` to start this task." (e.g. "Please run \`halfrun new\` to start this task.").
|
|
179
186
|
- This applies even when the user authorized a related workflow in an earlier turn — each invocation must be re-typed in the current turn.
|
|
180
187
|
|
|
181
|
-
**A session cut inside a declared budget is not a new invocation
|
|
188
|
+
**A session cut inside a declared budget is not a new invocation — for `backlogrun` alone**: a resumed `backlogrun` continues, while a `fullrun` cut still waits for the keyword. `backlogrun-steps.md` → "The session cut is inside the invocation".
|
|
182
189
|
|
|
183
|
-
**A `backlogrun` parks a child instead of stopping the run
|
|
190
|
+
**A `backlogrun` parks a child instead of stopping the run** — `backlogrun-park.md` → "park and continue".
|
|
184
191
|
|
|
185
192
|
#### Mid-workflow stop notification (`confirmation`)
|
|
186
193
|
|
|
187
|
-
|
|
194
|
+
Before pausing **any** run to wait for the user — a command's stop (`halfrun`'s stop before commit included), an upstream-Issue interrupt, a Tier C confirmation — you MUST send this Telegram, so the user is alerted off-screen:
|
|
188
195
|
|
|
189
196
|
```bash
|
|
190
197
|
pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'<one-line reason>\n<what is needed from the user>'
|
|
191
198
|
```
|
|
192
199
|
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
- Skip the notification when the stop was explicitly requested by the user in the same turn (they already know)
|
|
200
|
+
- Send it once per stop; skip it when the user asked for the stop in this same turn.
|
|
201
|
+
- Pass `--body=...` as one token when the body starts with `-`, otherwise `parseArgs` rejects it.
|
package/GEMINI.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
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 Claude-specific — it applies to whatever agent is doing the work.
|
|
4
|
+
> any work here, and follow every rule in it.** This file exists only to point at it.
|
|
6
5
|
|
|
7
6
|
@CLAUDE.md
|
|
8
7
|
|
|
8
|
+
**No hooks run under Gemini**, so every rule a hook delivers is yours to apply unaided. How to read
|
|
9
|
+
`CLAUDE.md`'s Claude Code features here — that list of rules included — is
|
|
10
|
+
`prompts/collaboration-workflow/principles.md` → "Claude Code 以外のエージェントでの読み替え".
|
|
11
|
+
|
|
9
12
|
**Do not copy rules back into this file.** Every change to how agents work in this repository belongs
|
|
10
13
|
in `CLAUDE.md`.
|
package/README.md
CHANGED
|
@@ -1,43 +1,89 @@
|
|
|
1
1
|
# @joshuafolkken/kit
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
+
|
|
15
|
+
**Tell your AI agent the change. It files the GitHub Issue and takes it to a merged PR — the same way in every project.**
|
|
16
|
+
|
|
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
|
-
| `
|
|
14
|
-
| `
|
|
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
|
+
| `prrun` | Opens a green pull request, stops before merge |
|
|
58
|
+
| `fullrun` | Plans if needed, implements through to merge |
|
|
59
|
+
| `backlogrun` | Runs many Issues unattended |
|
|
15
60
|
|
|
16
|
-
|
|
61
|
+
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
62
|
|
|
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).
|
|
63
|
+
## Why you can trust "done"
|
|
21
64
|
|
|
22
|
-
|
|
65
|
+
- **Checks are commands.** Lint, types, spelling and tests run as one gate — "it should pass" doesn't count.
|
|
66
|
+
- **No test, no commit.** kit decides from the changed files whether a test is required.
|
|
23
67
|
|
|
24
68
|
## Quick start
|
|
25
69
|
|
|
26
|
-
Requires Node.js
|
|
70
|
+
Requires Node.js, pnpm (kit is installed and run with pnpm only) and the gh CLI — [how to install them](./docs/setup/prerequisites.md). Sign in once with `gh auth login` before `josh start`.
|
|
27
71
|
|
|
28
72
|
```bash
|
|
29
73
|
pnpm add -D --allow-build=esbuild --allow-build=unrs-resolver @joshuafolkken/kit
|
|
30
74
|
pnpm exec josh start
|
|
31
75
|
```
|
|
32
76
|
|
|
77
|
+
`josh start` picks the project's profile, writes kit's rules and checks, and creates the GitHub repository and workflow labels when they are missing. On a repository that already has history it opens a setup pull request instead of committing to `main` — merge it before your first run ([what it does](./docs/init.md#josh-init-or-josh-start)).
|
|
78
|
+
|
|
79
|
+
Add the two Telegram credentials to `.env` so a run that needs you can reach you, or `JOSH_NOTIFY=off` to go without — [Set up notifications](./docs/how-to/set-up-notifications.md).
|
|
80
|
+
|
|
33
81
|
Then open your agent and follow the [tutorial](./docs/tutorial.md).
|
|
34
82
|
|
|
35
|
-
No Issue workflow?
|
|
83
|
+
No Issue workflow? [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
|
|
36
84
|
|
|
37
85
|
## Docs
|
|
38
86
|
|
|
39
|
-
[Tutorial](./docs/tutorial.md) · [How-to](./docs/how-to.md) · [Commands](./docs/josh-commands.md) · [Troubleshooting](./docs/troubleshooting.md) · [
|
|
40
|
-
|
|
41
|
-
## Contributing · License
|
|
87
|
+
[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
88
|
|
|
43
|
-
[
|
|
89
|
+
[Releases](https://github.com/joshuafolkken/kit/releases) · [Security](./SECURITY.md) · [Contributing](./docs/maintainers/README.md) · [MIT](./LICENSE)
|