@joshuafolkken/kit 1.1240.0 → 1.1373.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/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +52 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +19 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +195 -181
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -187
- package/dist/josh.js +282 -95
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +17 -11
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +3 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +30 -5
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +168 -30
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +53 -51
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +7 -7
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +1 -1
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +24 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +30 -35
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +25 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +6 -7
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +12 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +2 -2
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +1 -1
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-runs.ts +1 -1
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +6 -7
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +54 -36
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +9 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +171 -46
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +26 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +64 -18
- package/scripts/run/run-step.ts +107 -51
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +9 -9
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -279
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +26 -26
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { GIT_LOCATION_VARIABLES } from '#scripts/git/git-location-environment'
|
|
2
2
|
|
|
3
3
|
// The shell command a Claude Code hook is launched with, so it starts without a `pnpm` wrapper — and,
|
|
4
|
-
// for a consumer, without the `dist/josh.js` dispatcher re-spawning `tsx` for the hook's `.ts
|
|
5
|
-
//
|
|
4
|
+
// for a consumer, without the `dist/josh.js` dispatcher re-spawning `tsx` for the hook's `.ts`.
|
|
5
|
+
// Each hook is pre-built to its own `dist/hooks/<name>.js`
|
|
6
6
|
// (`scripts/build/build-hooks.ts`) and launched directly with `node`.
|
|
7
7
|
//
|
|
8
|
-
// **The command starts from the project root, never from wherever the session happens to be
|
|
9
|
-
//
|
|
8
|
+
// **The command starts from the project root, never from wherever the session happens to be**.
|
|
9
|
+
// Every path after the prefix is relative, so a hook fired from a
|
|
10
10
|
// subdirectory would otherwise miss its script. The root is git's, resolved with the location
|
|
11
11
|
// variables a git hook exports cleared first, and resolved with them only when that fails — git
|
|
12
12
|
// metadata outside the work tree. The consumer rewrite (`hook-command-rewrite.ts`) keeps this prefix,
|
|
13
13
|
// so both sides stay one mechanism for Claude Code and Codex alike.
|
|
14
14
|
//
|
|
15
|
-
// **Everything after the root is one script** (`scripts/hooks/run-hook.sh
|
|
15
|
+
// **Everything after the root is one script** (`scripts/hooks/run-hook.sh`):
|
|
16
16
|
// clearing the location variables for the hook itself, the bundle-ready gate and the live-source
|
|
17
17
|
// fallback live there once, so each hook command names only its hook.
|
|
18
18
|
|
|
@@ -7,6 +7,7 @@ import { init_logic } from './init-logic'
|
|
|
7
7
|
import { package_path, PROJECT_ROOT } from './init-paths'
|
|
8
8
|
import type { ProjectShape } from './project-profile'
|
|
9
9
|
import { session_language_environment } from './session-language-environment'
|
|
10
|
+
import { vscode_tasks } from './vscode-tasks'
|
|
10
11
|
|
|
11
12
|
const PRETTIER_CONFIG_JS = 'prettier.config.js'
|
|
12
13
|
const BASIC_PRETTIER_CONFIG = 'prettier.config.mjs'
|
|
@@ -38,6 +39,17 @@ function build_action(destination: string, create: () => string, merge: MergeFun
|
|
|
38
39
|
return { dest: destination, create, merge }
|
|
39
40
|
}
|
|
40
41
|
|
|
42
|
+
function build_vscode_tasks_action(): FileAction {
|
|
43
|
+
const tasks_path = path.join('.vscode', vscode_tasks.VSCODE_TASKS_FILENAME)
|
|
44
|
+
const kit_tasks = vscode_tasks.read_kit_tasks(read_package_file(tasks_path))
|
|
45
|
+
|
|
46
|
+
return build_action(
|
|
47
|
+
tasks_path,
|
|
48
|
+
() => read_package_file(tasks_path),
|
|
49
|
+
(existing) => vscode_tasks.merge_tasks(existing, kit_tasks),
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
41
53
|
function build_vscode_actions(): ReadonlyArray<FileAction> {
|
|
42
54
|
const extensions_path = path.join('.vscode', init_logic.VSCODE_EXTENSIONS_FILENAME)
|
|
43
55
|
const settings_path = path.join('.vscode', init_logic.get_vscode_settings_filename())
|
|
@@ -61,6 +73,7 @@ function build_vscode_actions(): ReadonlyArray<FileAction> {
|
|
|
61
73
|
init_logic.strip_kit_only_vscode_settings_content(read_package_file(settings_path)),
|
|
62
74
|
merge: (existing) => init_logic.merge_json_object(existing, settings_data),
|
|
63
75
|
},
|
|
76
|
+
build_vscode_tasks_action(),
|
|
64
77
|
]
|
|
65
78
|
}
|
|
66
79
|
|
|
@@ -33,7 +33,7 @@ const BASIC_AI_FILES = [
|
|
|
33
33
|
SECURITY_MD,
|
|
34
34
|
WORKSPACE_YAML,
|
|
35
35
|
]
|
|
36
|
-
// A basic project gets its own template for these, not kit's development copy
|
|
36
|
+
// A basic project gets its own template for these, not kit's development copy.
|
|
37
37
|
const BASIC_SOURCES: Readonly<Record<string, string>> = {
|
|
38
38
|
[PRETTIER_IGNORE]: 'templates/prettierignore.basic',
|
|
39
39
|
[WORKSPACE_YAML]: 'templates/pnpm-workspace.basic.yaml',
|
|
@@ -68,8 +68,8 @@ function copy_ai_file(source_path: string, destination_path: string): void {
|
|
|
68
68
|
// destination may hold a workflow the consumer wrote themselves, and a header claiming this package
|
|
69
69
|
// owns it would hold every bump to it back on a false premise. But an unstamped workflow is not
|
|
70
70
|
// merely out of date either — the consumer's auto-merge workflow reads the stamp, so until `sync`
|
|
71
|
-
// writes one, a bump to a workflow this package does overwrite merges and the next sync reverts it
|
|
72
|
-
//
|
|
71
|
+
// writes one, a bump to a workflow this package does overwrite merges and the next sync reverts it.
|
|
72
|
+
// A warning is the honest middle: `sync` resolves it either way, and this
|
|
73
73
|
// names the consequence rather than leaving it to be discovered from a revert.
|
|
74
74
|
//
|
|
75
75
|
// The destination is checked before the file is opened, and a read failure is stepped over, so
|
|
@@ -103,9 +103,9 @@ function did_skip_copy_if_absent(
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// The merged file is written back, and reported as `updated`, only when the merge changed it — a
|
|
106
|
-
// second `josh init` over an already-merged file reports `unchanged
|
|
106
|
+
// second `josh init` over an already-merged file reports `unchanged`.
|
|
107
107
|
// The workspace template with the project's own `.npmrc` values carried over: once the file holds a
|
|
108
|
-
// key, the merge keeps it, so this is the one chance to move the value
|
|
108
|
+
// key, the merge keeps it, so this is the one chance to move the value.
|
|
109
109
|
function read_workspace_template(source_path: string, destination_path: string): string {
|
|
110
110
|
const npmrc = file_reader.read_file_or_empty(path.join(path.dirname(destination_path), '.npmrc'))
|
|
111
111
|
|
|
@@ -242,10 +242,10 @@ function did_skip_ai_directory_copy(directory_name: string): boolean {
|
|
|
242
242
|
|
|
243
243
|
// `josh init` writes the one-line CLAUDE.md import when the consumer has none, and — like every other
|
|
244
244
|
// AI file — leaves an existing one untouched so a consumer's additions are never disturbed. `josh sync`
|
|
245
|
-
// is what ensures the import line on an existing file (sync.ts). CLAUDE.md is no longer byte-copied
|
|
246
|
-
//
|
|
245
|
+
// is what ensures the import line on an existing file (sync.ts). CLAUDE.md is no longer byte-copied,
|
|
246
|
+
// so it is handled here rather than through AI_COPY_FILES.
|
|
247
247
|
//
|
|
248
|
-
// The one edit made to an existing file is the rules import written
|
|
248
|
+
// The one edit made to an existing file is the rules import written under the static profile name,
|
|
249
249
|
// moved onto the basic path — only that kit-written line, never the consumer's additions.
|
|
250
250
|
// An unreadable file is left as it is and reported as skipped, as it was before the migration.
|
|
251
251
|
function read_if_readable(destination_path: string): string | undefined {
|
|
@@ -271,8 +271,8 @@ function basic_claude_md(): string {
|
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
// A basic CLAUDE.md imports the basic rules alone: the full bootstrap and import are removed, a
|
|
274
|
-
// pre-rename path is moved, and the basic header is restored when no basic import is left
|
|
275
|
-
//
|
|
274
|
+
// pre-rename path is moved, and the basic header is restored when no basic import is left.
|
|
275
|
+
// The project's own lines stay as they are.
|
|
276
276
|
function ensure_basic_claude_md(existing: string | undefined): string {
|
|
277
277
|
if (existing === undefined) return basic_claude_md()
|
|
278
278
|
const kept = basic_path_migration.migrate_basic_paths(
|
|
@@ -303,7 +303,7 @@ function did_skip_claude_md_import(shape?: ProjectShape): boolean {
|
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
// Returns the repository name resolved for the Sonar config, so `josh init` can reuse it for the
|
|
306
|
-
// security-updates report instead of spawning a second `gh repo view
|
|
306
|
+
// security-updates report instead of spawning a second `gh repo view`.
|
|
307
307
|
// Resolving it here rather than in the caller keeps every AI-file write ahead of the network call.
|
|
308
308
|
function should_copy_git_file(filename: string, shape?: ProjectShape): boolean {
|
|
309
309
|
if (shape?.has_git !== false) return true
|
|
@@ -10,7 +10,7 @@ const KIT_PACKAGE_NAME = '@joshuafolkken/kit'
|
|
|
10
10
|
const NODE_MODULES = 'node_modules'
|
|
11
11
|
const PACKAGE_JSON = 'package.json'
|
|
12
12
|
// The basic template lists exactly the build scripts kit's own dependency tree carries, which is
|
|
13
|
-
// what installing kit alone needs approved
|
|
13
|
+
// what installing kit alone needs approved.
|
|
14
14
|
const KIT_BUILDS_TEMPLATE = 'templates/pnpm-workspace.basic.yaml'
|
|
15
15
|
const HANDOFF_FAILURE = 'josh init from the project-installed kit failed — see the output above'
|
|
16
16
|
// Set on the handed-off run, so a kit that still does not find itself installed in the project — pnpm
|
|
@@ -29,7 +29,7 @@ function real_directory(directory: string): string | undefined {
|
|
|
29
29
|
|
|
30
30
|
// A `pnpm dlx` (or global) run executes whatever kit its cache held, which may be days behind the
|
|
31
31
|
// registry — and `init` pins the kit it runs as, so a stale cache used to leave its version and its
|
|
32
|
-
// templates in the project for good
|
|
32
|
+
// templates in the project for good. Only the kit the project itself installs
|
|
33
33
|
// does the setup. Compared by real path, so a global virtual store shared with the project still
|
|
34
34
|
// reads as the project's own kit.
|
|
35
35
|
function is_project_kit(package_directory: string, project_root: string): boolean {
|
|
@@ -75,7 +75,7 @@ function handoff_step(args: ReadonlyArray<string>): InstallStep {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
// pnpm walks up to the nearest `package.json`, so without one here it installs kit into whatever
|
|
78
|
-
// project an ancestor directory holds and rewrites that project's files
|
|
78
|
+
// project an ancestor directory holds and rewrites that project's files.
|
|
79
79
|
function ensure_project_manifest(project_root: string): void {
|
|
80
80
|
const manifest_path = path.join(project_root, PACKAGE_JSON)
|
|
81
81
|
|
|
@@ -21,11 +21,11 @@ import { init_logic } from './init-logic'
|
|
|
21
21
|
* managed-marker-logic.ts for why the stamp is on the file rather than in a list.
|
|
22
22
|
*
|
|
23
23
|
* The consumer's `.claude/settings.json` gets three further passes. The keys kit sets only for its
|
|
24
|
-
* own sessions are removed (
|
|
24
|
+
* own sessions are removed (see claude-kit-only-settings.ts). The kit plugin's marketplace and
|
|
25
25
|
* `enabledPlugins` declaration is injected, because the skills that used to be copied now ship as the
|
|
26
|
-
* `kit` plugin and load from that declaration
|
|
27
|
-
* rewritten from `pnpm josh` to the published bundle invoked directly with node
|
|
28
|
-
*
|
|
26
|
+
* `kit` plugin and load from that declaration. And its hook commands are
|
|
27
|
+
* rewritten from `pnpm josh` to the published bundle invoked directly with node,
|
|
28
|
+
* so a consumer's guarded call does not pay a `pnpm` launch it never needed.
|
|
29
29
|
* Keeping both on this one function is the same guarantee as the workflow passes — a copy path that
|
|
30
30
|
* skipped the plugin block would ship a settings file that never enables the plugin, and one that
|
|
31
31
|
* skipped the rewrite would leave every consumer hook slower than it has to be.
|
|
@@ -28,12 +28,11 @@ function read_extends_entries(content: string): ReadonlyArray<string> {
|
|
|
28
28
|
|
|
29
29
|
// Ensure kit's tsconfig base preset is in `extends` — UNLESS an `@joshuafolkken/*` tsconfig preset
|
|
30
30
|
// (kit's own base, or an app-kit / game-kit framework preset that already embeds kit base) is
|
|
31
|
-
// present. Adding kit's base alongside such a preset is a redundant second extend.
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
// joshuafolkken/kit#681.
|
|
31
|
+
// present. Adding kit's base alongside such a preset is a redundant second extend. The legacy
|
|
32
|
+
// `.jsonc` preset extension is migrated first: the presence check below matches it too, so without
|
|
33
|
+
// the rewrite a consumer stuck on the old path would be reported "already present" and never
|
|
34
|
+
// repaired. `base_directory` is the project root the `extends` paths resolve against, which the
|
|
35
|
+
// migration needs to confirm the renamed preset is installed.
|
|
37
36
|
function merge_tsconfig_extends(content: string, entry: string, base_directory: string): string {
|
|
38
37
|
const migrated = tsconfig_preset_migration.migrate_preset_paths(content, base_directory)
|
|
39
38
|
if (kit_base_preset.is_tsconfig_base_present(read_extends_entries(migrated))) return migrated
|
|
@@ -68,7 +67,7 @@ const COMPILER_OPTIONS_FIELD = 'compilerOptions'
|
|
|
68
67
|
|
|
69
68
|
// Prune the redundant options one at a time, in place. Setting `compilerOptions` to the kept subset
|
|
70
69
|
// would be one edit instead of several, but it replaces the whole block and takes any comment the
|
|
71
|
-
// consumer wrote inside it along with the options being dropped
|
|
70
|
+
// consumer wrote inside it along with the options being dropped. Each
|
|
72
71
|
// removal re-reads the document, so the shifting offsets take care of themselves.
|
|
73
72
|
function drop_redundant_options(content: string, redundant: ReadonlyArray<string>): string {
|
|
74
73
|
let current = content
|
|
@@ -146,7 +145,6 @@ function missing_entries<T>(
|
|
|
146
145
|
// `import` and tsconfig `extends` lists. Arrays and scalars stay untouched: combining a list such as
|
|
147
146
|
// `eslint.validate` would be a guess about intent, and overwriting it would drop the consumer's own
|
|
148
147
|
// entries. Without this, one customized key froze out every later kit addition inside it, silently.
|
|
149
|
-
// See joshuafolkken/kit#691.
|
|
150
148
|
function merge_owned_entries(current: unknown, update: unknown): unknown {
|
|
151
149
|
const current_object = json_object_schema.safeParse(current)
|
|
152
150
|
const update_object = json_object_schema.safeParse(update)
|
|
@@ -218,7 +216,7 @@ function merge_package_scripts(content: string, scripts: Record<string, string>)
|
|
|
218
216
|
}
|
|
219
217
|
|
|
220
218
|
// Replace only a safe-chain `preinstall` an earlier kit wrote, for a consumer that never re-runs
|
|
221
|
-
// `josh init`; every other key and script is kept
|
|
219
|
+
// `josh init`; every other key and script is kept.
|
|
222
220
|
function upgrade_safe_chain_preinstall(content: string): string {
|
|
223
221
|
const parsed = parse_jsonc(content)
|
|
224
222
|
const raw = parsed['scripts']
|
|
@@ -75,7 +75,7 @@ function is_kit_written(key: string, value: string): boolean {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
// A retired name alone does not make a script kit's: `sv create` writes its own `check`, which must
|
|
78
|
-
// survive `josh init
|
|
78
|
+
// survive `josh init`. Only a value kit itself wrote is retired.
|
|
79
79
|
function is_retired_script(key: string, value: string): boolean {
|
|
80
80
|
return RETIRED_MANAGED_SCRIPTS.has(key) && is_kit_written(key, value)
|
|
81
81
|
}
|
|
@@ -113,7 +113,7 @@ function merge_eslint_config(existing: string): string {
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
// The default is SvelteKit's stylesheet, and prettier-plugin-tailwindcss aborts every format when
|
|
116
|
-
// the named file is missing — so it is written only for a project that has it
|
|
116
|
+
// the named file is missing — so it is written only for a project that has it.
|
|
117
117
|
function detect_tailwind_stylesheet(project_root: string): string | undefined {
|
|
118
118
|
return existsSync(path.join(project_root, DEFAULT_TAILWIND_STYLESHEET))
|
|
119
119
|
? DEFAULT_TAILWIND_STYLESHEET
|
|
@@ -45,7 +45,7 @@ function remove_deprecated_yaml_keys(content: string): string {
|
|
|
45
45
|
// pnpm 11+ writes this placeholder into `allowBuilds` for every build script it ignored, and fails
|
|
46
46
|
// every later install until it is answered. `pnpm add -D @joshuafolkken/kit` before `josh init`
|
|
47
47
|
// leaves one for esbuild, and the key-level merge below keeps an existing `allowBuilds` whole, so a
|
|
48
|
-
// placeholder the template decides is answered here
|
|
48
|
+
// placeholder the template decides is answered here.
|
|
49
49
|
const BUILD_PLACEHOLDER_PATTERN = /^([ \t]+)([^\s:#][^:#]*): set this to true or false$/gmu
|
|
50
50
|
const TEMPLATE_BUILD_PATTERN = /^[ \t]+(?<key>[^\s:#][^:#]*):[ \t]*(?<value>true|false)\b/u
|
|
51
51
|
|
|
@@ -89,8 +89,8 @@ function build_entry_keys(block: string): Set<string> {
|
|
|
89
89
|
|
|
90
90
|
// The key-level merge keeps an existing `allowBuilds` whole, and `pnpm add -D @joshuafolkken/kit`
|
|
91
91
|
// before `josh init` always leaves one (esbuild's), so without this the template's other approvals
|
|
92
|
-
// never landed and the first `pnpm install` failed on the next build script, e.g. unrs-resolver's
|
|
93
|
-
//
|
|
92
|
+
// never landed and the first `pnpm install` failed on the next build script, e.g. unrs-resolver's.
|
|
93
|
+
// Entries the project already answered keep their value.
|
|
94
94
|
// Only a block mapping can take appended entry lines; a flow map (`allowBuilds: { … }`) is left whole.
|
|
95
95
|
const BLOCK_MAPPING_HEADER_PATTERN = /^allowBuilds:[ \t]*(?:#[^\n]*)?(?:\n|$)/u
|
|
96
96
|
const LEADING_INDENT_PATTERN = /^[ \t]+/u
|
|
@@ -133,7 +133,7 @@ interface MovedNpmrcSetting {
|
|
|
133
133
|
|
|
134
134
|
// `.npmrc` settings pnpm 12 reads only from `pnpm-workspace.yaml`, with the value shape each takes.
|
|
135
135
|
// A project's own value (a longer age window, `engine-strict=false`) replaces the template's, so the
|
|
136
|
-
// move neither loosens nor tightens what the project chose
|
|
136
|
+
// move neither loosens nor tightens what the project chose.
|
|
137
137
|
const MOVED_NPMRC_SETTINGS: ReadonlyArray<MovedNpmrcSetting> = [
|
|
138
138
|
{ npmrc_key: 'minimum-release-age', workspace_key: 'minimumReleaseAge', value_pattern: /^\d+$/u },
|
|
139
139
|
{ npmrc_key: 'engine-strict', workspace_key: 'engineStrict', value_pattern: /^(?:true|false)$/u },
|
|
@@ -23,7 +23,7 @@ function merge_yaml_list_entry(content: string, key: string, value: string): str
|
|
|
23
23
|
// lefthook preset (kit's own, or an app-kit / game-kit framework preset that already extends kit
|
|
24
24
|
// base) is present. Adding kit's `vanilla.yml` alongside such a preset would extend
|
|
25
25
|
// `lefthook/base.yml` twice, which lefthook rejects with a hard "possible recursion in extends"
|
|
26
|
-
// crash.
|
|
26
|
+
// crash.
|
|
27
27
|
function merge_lefthook_extends(content: string, value: string): string {
|
|
28
28
|
const entries = config_merge.read_yaml_list_field(content, LEFTHOOK_EXTENDS_FIELD)
|
|
29
29
|
if (kit_base_preset.is_lefthook_base_present(entries)) return content
|
|
@@ -35,7 +35,7 @@ function merge_lefthook_extends(content: string, value: string): string {
|
|
|
35
35
|
// preset (kit's own base, or an app-kit / game-kit framework preset that already imports kit's
|
|
36
36
|
// cspell base) is present. Adding kit's base alongside such a preset is a redundant double import.
|
|
37
37
|
// kit owns this dedup because there is no downstream overlay in kit's `josh sync` path — every
|
|
38
|
-
// consumer drives the sync through kit's CLI, so the check must live here.
|
|
38
|
+
// consumer drives the sync through kit's CLI, so the check must live here.
|
|
39
39
|
function merge_cspell_import(content: string, value: string): string {
|
|
40
40
|
const entries = config_merge.read_yaml_list_field(content, CSPELL_IMPORT_FIELD)
|
|
41
41
|
if (kit_base_preset.is_cspell_base_present(entries)) return content
|
|
@@ -11,12 +11,12 @@ import { init_logic_workspace } from './init-logic-workspace'
|
|
|
11
11
|
import { init_logic_yaml_merge } from './init-logic-yaml-merge'
|
|
12
12
|
|
|
13
13
|
const DEV_ENGINES_VALUE = {
|
|
14
|
-
packageManager: { name: 'pnpm', version: '>=12.1.0', onFail: '
|
|
14
|
+
packageManager: { name: 'pnpm', version: '>=12.1.0', onFail: 'download' },
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
// The settings lines earlier kit releases wrote into a project `.npmrc`. pnpm 12 reads only registry
|
|
18
18
|
// and auth settings from `.npmrc`, so all four are inert there: the age window and engine check now
|
|
19
|
-
// live in `pnpm-workspace.yaml`, and `confirmModulesPurge` no longer exists
|
|
19
|
+
// live in `pnpm-workspace.yaml`, and `confirmModulesPurge` no longer exists.
|
|
20
20
|
const LEGACY_NPMRC_LINES: ReadonlySet<string> = new Set([
|
|
21
21
|
'engine-strict=true',
|
|
22
22
|
'minimum-release-age=1440',
|
|
@@ -43,7 +43,7 @@ const LEGACY_POSTINSTALL_KEY = 'postinstall'
|
|
|
43
43
|
// both, so an install that left **zero** hooks in place still exited 0 and said nothing. The way it
|
|
44
44
|
// happens in practice is `core.hooksPath` — lefthook refuses to install while any custom hooks path is
|
|
45
45
|
// set — and the developer then commits and pushes for weeks with no pre-commit or pre-push check
|
|
46
|
-
// running at all, believing they are
|
|
46
|
+
// running at all, believing they are.
|
|
47
47
|
//
|
|
48
48
|
// **The `|| true` stays**: a consumer's `pnpm install` must not die over a developer-only hook, which
|
|
49
49
|
// is what it was added for. What changes is that the failure is named on standard error. The warning
|
|
@@ -72,7 +72,7 @@ const PREPARE_CMD = `(${GUARDED_LEFTHOOK_CMD} || true) && (${GUARDED_FIX_GH_PACK
|
|
|
72
72
|
|
|
73
73
|
// CLAUDE.md is deliberately absent: it is no longer byte-copied. A consumer's CLAUDE.md is a single
|
|
74
74
|
// @import of kit's published, path-transformed rules (ensure_claude_md_import), so a package update
|
|
75
|
-
// alone keeps it current
|
|
75
|
+
// alone keeps it current. AGENTS.md / GEMINI.md / .cursorrules stay copies
|
|
76
76
|
// here — they are for other tools that do not read CLAUDE.md's import.
|
|
77
77
|
const AI_COPY_FILES: ReadonlyArray<string> = [
|
|
78
78
|
'AGENTS.md',
|
|
@@ -92,11 +92,10 @@ const AI_COPY_FILES: ReadonlyArray<string> = [
|
|
|
92
92
|
'.github/workflows/sonar-qube.yml',
|
|
93
93
|
'.github/workflows/pr-classification.yml',
|
|
94
94
|
// Called by `ci.yml` and `pr-classification.yml` as `uses: ./.github/actions/setup-pnpm`; without
|
|
95
|
-
// it the consumer's jobs cannot resolve the action and their checks fail
|
|
96
|
-
// joshuafolkken/kit#3095).
|
|
95
|
+
// it the consumer's jobs cannot resolve the action and their checks fail.
|
|
97
96
|
'.github/actions/setup-pnpm/action.yml',
|
|
98
97
|
// The one place the workflows' Node.js version is written, called by every distributed workflow
|
|
99
|
-
// that sets Node.js up
|
|
98
|
+
// that sets Node.js up.
|
|
100
99
|
'.github/actions/setup-node/action.yml',
|
|
101
100
|
'.github/pull_request_template.md',
|
|
102
101
|
'.github/release.yml',
|
|
@@ -119,19 +118,18 @@ const AI_COPY_FILE_MAPPINGS: ReadonlyArray<FileCopyMapping> = [
|
|
|
119
118
|
{ src: 'templates/workflows/ci.yml', dest: '.github/workflows/ci.yml' },
|
|
120
119
|
// The counterpart to the distributed `.github/dependabot.yml`: without it a consumer receives
|
|
121
120
|
// the machinery that opens Dependabot pull requests and none of the machinery that closes them,
|
|
122
|
-
// so every github-actions bump sits green and unmerged
|
|
121
|
+
// so every github-actions bump sits green and unmerged.
|
|
123
122
|
{
|
|
124
123
|
src: 'templates/workflows/dependabot-auto-merge.yml',
|
|
125
124
|
dest: '.github/workflows/dependabot-auto-merge.yml',
|
|
126
125
|
},
|
|
127
126
|
// A template rather than a copy of kit's own file: kit releases from its publish.yml, so the file
|
|
128
|
-
// must not run in kit as well
|
|
127
|
+
// must not run in kit as well.
|
|
129
128
|
{ src: 'templates/workflows/github-release.yml', dest: '.github/workflows/github-release.yml' },
|
|
130
129
|
]
|
|
131
130
|
|
|
132
|
-
// Empty
|
|
133
|
-
//
|
|
134
|
-
// `kit` Claude Code plugin and load from the package, so nothing is copied into a consumer's tree.
|
|
131
|
+
// Empty: kit's skill directories ship as the `kit` Claude Code plugin and load from the package, so
|
|
132
|
+
// nothing is copied into a consumer's tree.
|
|
135
133
|
// The copy-and-transform machinery (directory-copy-guard.ts → transform_copied_tree) is kept intact
|
|
136
134
|
// for any future distributed directory; the migration that removes a consumer's stale skill copies
|
|
137
135
|
// lives in `scripts/sync/skill-migration.ts`.
|
|
@@ -143,7 +141,7 @@ const LEFTHOOK_EXTENDS = 'node_modules/@joshuafolkken/kit/lefthook/vanilla.yml'
|
|
|
143
141
|
// `extends` entry that does not already end in it, then hard-throws when the resulting path is
|
|
144
142
|
// missing — so a `.jsonc` preset resolves to `*.jsonc.json` and takes down the whole E2E suite
|
|
145
143
|
// before a single test runs. A tsconfig is parsed as JSONC regardless of extension, so comments in
|
|
146
|
-
// the preset still work.
|
|
144
|
+
// the preset still work.
|
|
147
145
|
const TSCONFIG_EXTENDS = './node_modules/@joshuafolkken/kit/tsconfig/base.json'
|
|
148
146
|
|
|
149
147
|
// Preset file basename within the package's tsconfig/ directory, used to read the base
|
|
@@ -159,7 +157,7 @@ const TSCONFIG_EXCLUDE_FIELD = 'exclude'
|
|
|
159
157
|
// config for. The two directories must stay disjoint (Playwright refuses an html output folder nested
|
|
160
158
|
// in the tests output folder, and vice versa), so both are excluded rather than consolidated. These
|
|
161
159
|
// belong in the CONSUMER file: a consumer `exclude` overrides the extended preset's instead of merging
|
|
162
|
-
// with it, so shipping them only in a preset would have no effect.
|
|
160
|
+
// with it, so shipping them only in a preset would have no effect.
|
|
163
161
|
const TSCONFIG_GENERATED_OUTPUT_EXCLUDE: ReadonlyArray<string> = [
|
|
164
162
|
'node_modules',
|
|
165
163
|
'build',
|
|
@@ -186,10 +184,10 @@ const TSCONFIG_GENERATED_OUTPUT_EXCLUDE: ReadonlyArray<string> = [
|
|
|
186
184
|
// `node_modules` above already covers it.
|
|
187
185
|
//
|
|
188
186
|
// Limit: these are the DEFAULT paths. A project that moves the worker with `kit.files.serviceWorker`
|
|
189
|
-
// in `svelte.config.js` gets globs that match nothing, and its real exclusion is still replaced
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
//
|
|
187
|
+
// in `svelte.config.js` gets globs that match nothing, and its real exclusion is still replaced.
|
|
188
|
+
// Covering it means reading `svelte.config.js`, which is the same project detection kit does not
|
|
189
|
+
// have; such a project should add its own path to `exclude` (the merge appends, so a hand-added entry
|
|
190
|
+
// survives).
|
|
193
191
|
const TSCONFIG_SVELTEKIT_EXCLUDE: ReadonlyArray<string> = [
|
|
194
192
|
'src/service-worker.js',
|
|
195
193
|
'src/service-worker/**/*.js',
|
|
@@ -226,7 +224,7 @@ const SUGGESTED_SCRIPTS_COMMON: Record<string, string> = {
|
|
|
226
224
|
// they fit within printWidth, one element per line once they do not — so the file kit writes is
|
|
227
225
|
// `prettier --check`-clean in the consumer whatever the entry count happens to be (#660).
|
|
228
226
|
// TypeScript 6 defaults `types` to `[]`, so a full project sees no `process` global — not even in the
|
|
229
|
-
// generated `playwright.config.ts` — until the Node types are named
|
|
227
|
+
// generated `playwright.config.ts` — until the Node types are named.
|
|
230
228
|
function generate_tsconfig(): string {
|
|
231
229
|
return json_format.format_json({
|
|
232
230
|
extends: TSCONFIG_EXTENDS,
|
|
@@ -378,9 +376,8 @@ function get_suggested_scripts_for_content(content: string): Record<string, stri
|
|
|
378
376
|
|
|
379
377
|
// **The upgrade path for projects `josh init` has already run in.** Their `prepare` carries the
|
|
380
378
|
// fix-gh-packages marker, and that marker is exactly what makes both merges here return early — so
|
|
381
|
-
// the
|
|
382
|
-
//
|
|
383
|
-
// projects would. This rewrites the lefthook clause kit itself wrote and nothing else, because the
|
|
379
|
+
// the consumers already installing with zero hooks and no warning would never receive the fix
|
|
380
|
+
// however often they re-ran `josh init`; only new projects would. This rewrites the lefthook clause kit itself wrote and nothing else, because the
|
|
384
381
|
// rest of that script is the consumer's. It is idempotent by construction: the new clause does not
|
|
385
382
|
// contain the old one as a substring, since `{ ` sits between them.
|
|
386
383
|
function upgrade_prepare_lefthook_warning(content: string): string {
|
package/scripts/init/init.ts
CHANGED
|
@@ -74,7 +74,7 @@ function get_kit_self_dependency(): Record<string, string> {
|
|
|
74
74
|
// Each config `init` generates runs a CLI or imports types the consumer has to resolve itself:
|
|
75
75
|
// `cspell.config.yaml` → cspell, `playwright.config.ts` → @types/node, `lefthook.yml` → lefthook.
|
|
76
76
|
// Prettier, its preset plugins and @playwright/test come in as peers. Without them the first
|
|
77
|
-
// `josh gate` after `pnpm install` fails
|
|
77
|
+
// `josh gate` after `pnpm install` fails.
|
|
78
78
|
const TOOL_DEVELOPMENT_DEPENDENCIES = ['cspell', '@types/node']
|
|
79
79
|
const LEFTHOOK_DEVELOPMENT_DEPENDENCY = 'lefthook'
|
|
80
80
|
|
|
@@ -203,7 +203,7 @@ function run_config_file_actions(shape: ProjectShape): void {
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
// Gated, unlike `sync`: `init` skips a file the consumer already has, so neither the npm-disable
|
|
206
|
-
//
|
|
206
|
+
// nor the auto-merge workflow may have landed, and a
|
|
207
207
|
// report's claim would then be false. `sync` overwrites both unconditionally, which is why it needs
|
|
208
208
|
// no gate. The gates are the artifacts themselves, so a consumer's own pre-existing auto-merge
|
|
209
209
|
// workflow still gets its prerequisite reported — it needs the same repository setting kit's does.
|
|
@@ -219,8 +219,8 @@ function report_repository_settings(name_with_owner: string | undefined): void {
|
|
|
219
219
|
|
|
220
220
|
// The same refusal `sync` makes, for a larger blast radius: `init` calls the `sync` writers directly
|
|
221
221
|
// rather than through `sync`'s own `main()`, so the guard there never ran for it — and on top of the
|
|
222
|
-
// 14 files #868 reproduced, `init` also rewrites `package.json` scripts and devDependencies
|
|
223
|
-
//
|
|
222
|
+
// 14 files #868 reproduced, `init` also rewrites `package.json` scripts and devDependencies.
|
|
223
|
+
// Checked before the first write, for the reason the sync guard is.
|
|
224
224
|
function run_ai_file_actions(shape: ProjectShape): void {
|
|
225
225
|
console.info('\nAI files:')
|
|
226
226
|
// `init` writes the same npm-disabling `.github/dependabot.yml` that `sync` distributes, so a
|
|
@@ -246,7 +246,7 @@ function initialize_project(shape: ProjectShape): void {
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
// A tool `init` just listed is absent until the user installs it — and `josh lint` then fails on it
|
|
249
|
-
// rather than skipping it
|
|
249
|
+
// rather than skipping it. Saying so is what tells the user the next step.
|
|
250
250
|
function report_manual_install(shape: ProjectShape): void {
|
|
251
251
|
console.info(`\nDependencies:\n ${INSTALL_HINT}`)
|
|
252
252
|
if (shape.has_git && shape.profile === 'full') install_lefthook()
|
|
@@ -266,7 +266,7 @@ function finish_dependencies(shape: ProjectShape, is_install: boolean): void {
|
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
// A kit run from outside the project — `pnpm dlx`, a global install — sets nothing up itself: it
|
|
269
|
-
// installs the project's kit and hands the whole run to that one
|
|
269
|
+
// installs the project's kit and hands the whole run to that one. Under
|
|
270
270
|
// `--no-install` nothing is installed, so the running kit does the setup as before.
|
|
271
271
|
function did_hand_off(args: ReadonlyArray<string>): boolean {
|
|
272
272
|
if (init_bootstrap.is_project_kit(PACKAGE_DIR, PROJECT_ROOT)) return false
|
|
@@ -300,7 +300,7 @@ function main(args: ReadonlyArray<string> = []): boolean {
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
// Only the command a person typed points onward to `josh start`: `josh start` calls `main` itself and
|
|
303
|
-
// is already the next step
|
|
303
|
+
// is already the next step.
|
|
304
304
|
// A setup that failed after writing, such as a failed install, sets the exit code and points nowhere.
|
|
305
305
|
function print_start_hint(): void {
|
|
306
306
|
if (process.exitCode !== undefined && process.exitCode !== 0) return
|
|
@@ -25,7 +25,7 @@ const KIT_TSCONFIG_PRESET = /@joshuafolkken\/[^/]+\/tsconfig\//u
|
|
|
25
25
|
// this segment-anchored fallback covers the prefix-less relative form. The `(?<![\w-])` /
|
|
26
26
|
// `(?![\w-])` boundaries anchor `sveltekit` to a complete path segment — mirroring app-kit's
|
|
27
27
|
// config-patch anchoring — so a `sveltekit-*` / `*-sveltekit` sibling and hyphenated `svelte-kit`
|
|
28
|
-
// are left untouched.
|
|
28
|
+
// are left untouched.
|
|
29
29
|
const SVELTEKIT_PRESET = /(?<![\w-])sveltekit(?![\w-])/u
|
|
30
30
|
|
|
31
31
|
function has_match(entries: ReadonlyArray<string>, pattern: RegExp): boolean {
|
|
@@ -5,7 +5,7 @@ const START_HINT =
|
|
|
5
5
|
'To use the GitHub Issue workflow, run pnpm exec josh start next: it puts this setup on GitHub, through a pull request when main already has commits.'
|
|
6
6
|
|
|
7
7
|
// Whether the commit checked out records kit in its manifest — the sign that kit's setup has already
|
|
8
|
-
// reached the branch, so `josh start` has no setup pull request to open
|
|
8
|
+
// reached the branch, so `josh start` has no setup pull request to open.
|
|
9
9
|
function is_kit_committed(root: string): boolean {
|
|
10
10
|
// `./` resolves the path from `root` rather than from the repository's top level.
|
|
11
11
|
const manifest = start_exec.git_read(['show', 'HEAD:./package.json'], root)
|
|
@@ -20,8 +20,7 @@ const SETUP_ONLY_PATHS: ReadonlySet<string> = new Set([
|
|
|
20
20
|
])
|
|
21
21
|
|
|
22
22
|
// Whether a changed path is one kit's setup wrote — what the setup pull request of `josh start`
|
|
23
|
-
// carries, so a file the user keeps beside it (notes, an editor's own directory) never rides along
|
|
24
|
-
// (joshuafolkken/kit#2816).
|
|
23
|
+
// carries, so a file the user keeps beside it (notes, an editor's own directory) never rides along.
|
|
25
24
|
function is_kit_written(file_path: string): boolean {
|
|
26
25
|
return SETUP_ONLY_PATHS.has(file_path) || managed_config_scope.has_managed_path([file_path])
|
|
27
26
|
}
|
|
@@ -19,7 +19,7 @@ function is_older_than(kit_pin: string, version: string): boolean {
|
|
|
19
19
|
|
|
20
20
|
// Never pin a project below the pnpm installing it: the lockfile that pnpm just wrote can name a
|
|
21
21
|
// version an older pnpm fails to resolve, so `pnpm install` under kit's older pin breaks the
|
|
22
|
-
// first `josh init
|
|
22
|
+
// first `josh init`. The kit pin keeps its integrity suffix when it wins.
|
|
23
23
|
function choose(kit_pin: string | undefined, user_agent: string | undefined): string | undefined {
|
|
24
24
|
const running = running_pnpm_version(user_agent)
|
|
25
25
|
if (kit_pin === undefined || running === undefined) return kit_pin
|
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { project_profile } from './project-profile'
|
|
4
4
|
|
|
5
5
|
const ARGUMENT_START_INDEX = 2
|
|
6
|
-
// A `ci.yml` synced before
|
|
6
|
+
// A `ci.yml` synced before the profile rename matches `*'profile: static ('*` on this output to
|
|
7
7
|
// hand a basic project to `josh gate`. A consumer can upgrade kit without re-syncing that workflow,
|
|
8
8
|
// so a basic project keeps printing the old phrase on a line of its own until every workflow reads
|
|
9
9
|
// the new name.
|
|
@@ -23,7 +23,7 @@ const IGNORED_DIRECTORIES = new Set(['.git', 'node_modules', 'dist', 'build', '.
|
|
|
23
23
|
const WEB_EXTENSIONS = new Set(['.html', '.css', '.js', '.jsx', '.mjs', '.cjs'])
|
|
24
24
|
const TYPESCRIPT_EXTENSIONS = new Set(['.ts', '.tsx'])
|
|
25
25
|
const PROFILE_ARG_LENGTH = 2
|
|
26
|
-
// The names before
|
|
26
|
+
// The names before the profile rename. A project that recorded one, or a script that passes one
|
|
27
27
|
// to `--profile`, keeps working: each reads as the profile it was renamed to.
|
|
28
28
|
const PROFILE_NAMES: Readonly<Record<string, ProjectProfile>> = {
|
|
29
29
|
basic: 'basic',
|
|
@@ -39,7 +39,7 @@ function parse_profile(value: unknown): ProjectProfile | undefined {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
// The pre-rename name of each profile, which every kit with `--profile` accepts — the new one only
|
|
42
|
-
// from
|
|
42
|
+
// from the rename on.
|
|
43
43
|
const LEGACY_NAMES: Readonly<Record<ProjectProfile, string>> = { basic: 'static', full: 'node' }
|
|
44
44
|
|
|
45
45
|
// A `josh init` handed to the project's kit may run an older kit than the one handing off: the
|
|
@@ -91,7 +91,7 @@ function has_build_script(value: unknown): boolean {
|
|
|
91
91
|
|
|
92
92
|
// kit itself is not evidence of a Node toolchain: `pnpm add -D @joshuafolkken/kit` before
|
|
93
93
|
// `josh init` is the documented order, and it must still leave an `index.html` site on the basic
|
|
94
|
-
// profile
|
|
94
|
+
// profile.
|
|
95
95
|
function has_project_dependencies(value: unknown): boolean {
|
|
96
96
|
if (!json_value.is_record(value)) return false
|
|
97
97
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// `josh init` seeds `JOSH_SESSION_LANG` in `.env` from the OS locale, so a newly adopting user starts
|
|
2
|
-
// in their own language
|
|
2
|
+
// in their own language. A project already using kit keeps its language: the
|
|
3
3
|
// session language takes effect only through the `session:lang` hook, so a project whose
|
|
4
4
|
// `.claude/settings.json` already wires it is left alone, and an existing `.env` value — the `export`
|
|
5
5
|
// form included — is never touched. The unset default stays `ja`.
|
|
@@ -9,10 +9,9 @@ import type { Visibility } from './start-plan'
|
|
|
9
9
|
// step and the `josh init` hint so none of them keeps a copy of its own.
|
|
10
10
|
//
|
|
11
11
|
// The git shapes below act on `root`, so `cwd` has to mean it: an inherited `GIT_DIR` and friends beat `cwd`
|
|
12
|
-
// and would carry a `git init` or commit into whichever repository a calling hook was firing in
|
|
13
|
-
// (joshuafolkken/kit#3151).
|
|
12
|
+
// and would carry a `git init` or commit into whichever repository a calling hook was firing in.
|
|
14
13
|
//
|
|
15
|
-
// **Every git and gh call here is bounded
|
|
14
|
+
// **Every git and gh call here is bounded**. A read asks the local
|
|
16
15
|
// repository and takes git's own budget. A write — and `gh repo create --push` — can fire the
|
|
17
16
|
// project's own commit and push hooks, which may run its whole suite, so it takes the suite budget:
|
|
18
17
|
// long enough for that, short enough that a push that never answers ends the run.
|
|
@@ -42,7 +41,7 @@ function git_run(args: ReadonlyArray<string>, root: string): void {
|
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
// Every gh spawn here dials GitHub directly, past a scanner's loopback proxy, the same as every
|
|
45
|
-
// other `gh` spawn under scripts
|
|
44
|
+
// other `gh` spawn under scripts/. Each argument list is written inline so
|
|
46
45
|
// `gh-subcommand-guard.ts` reads its subcommand rather than `<dynamic>`.
|
|
47
46
|
interface GhProbeOptions {
|
|
48
47
|
cwd: string
|
|
@@ -61,8 +61,8 @@ function refused(refusal: string): StepPlan {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
// Main already has a history but not kit's setup, so the setup reaches main the way every later change
|
|
64
|
-
// does — an Issue and a pull request a person merges — rather than a commit on main
|
|
65
|
-
//
|
|
64
|
+
// does — an Issue and a pull request a person merges — rather than a commit on main.
|
|
65
|
+
// On another branch the pull request would not be based on main, so it waits
|
|
66
66
|
// — except the setup branch a failed hook left checked out, where a re-run resumes. Once kit is
|
|
67
67
|
// committed there, nothing is left for the step, so a later run on that branch plans none.
|
|
68
68
|
function needs_setup_pr(state: GitState): boolean {
|
|
@@ -4,6 +4,7 @@ import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
|
4
4
|
import { git_pr } from '#scripts/gh/git-pr'
|
|
5
5
|
import { github_issue_url } from '#scripts/gh/github-issue-url'
|
|
6
6
|
import { git_issue, type IssueInfo } from '#scripts/git/git-issue'
|
|
7
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
7
8
|
import { IGNORE_FOR_RELEASE_LABEL } from '#scripts/issue/issue-labels'
|
|
8
9
|
import { KIT_PACKAGE_NAME } from '#scripts/version/kit-descriptor'
|
|
9
10
|
import { kit_written_paths } from './kit-written-paths'
|
|
@@ -31,7 +32,7 @@ function listing(args: ReadonlyArray<string>, root: string): Array<string> {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
function setup_issue(issue_number: string): IssueInfo {
|
|
34
|
-
return git_issue.parse(`${SETUP_TITLE}
|
|
35
|
+
return git_issue.parse(`${SETUP_TITLE} ${issue_cite.plain(issue_number)}`)
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
// The Issue number when `branch` is the branch an earlier `josh start` created for the setup pull
|
|
@@ -64,7 +65,7 @@ function carried_paths(root: string, current: string | undefined): Array<string>
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
// The Issue carries the release classification the pull request is opened with, so the PR step finds
|
|
67
|
-
// one without a person adding it
|
|
68
|
+
// one without a person adding it.
|
|
68
69
|
function file_setup_issue(): string {
|
|
69
70
|
const request = git_gh_issue_write.issue_create_request({
|
|
70
71
|
title: SETUP_TITLE,
|