@joshuafolkken/kit 1.1514.0 → 1.1784.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 -1
- package/.claude/settings.json +5 -5
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +5 -5
- package/.claude/skills/workflow-commands/background-commands.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +10 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +17 -13
- package/.claude/skills/workflow-commands/backlogrun-park.md +14 -23
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +13 -7
- package/.claude/skills/workflow-commands/delegation.md +6 -5
- package/.claude/skills/workflow-commands/entry-sequence.md +9 -9
- package/.claude/skills/workflow-commands/followup.md +9 -31
- package/.claude/skills/workflow-commands/fullrun-steps.md +36 -45
- package/.claude/skills/workflow-commands/fullrun.md +2 -2
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +16 -12
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +1 -1
- package/.claude/skills/workflow-commands/pre-gate-cut.md +13 -30
- package/.claude/skills/workflow-commands/prerequisite.md +10 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +13 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +120 -10
- package/.github/workflows/publish.yml +8 -1
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +3 -7
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +3 -7
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +79 -37
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-TNUMY6NL.js → chunk-PT5R6UJD.js} +4193 -1900
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-APUO6U4J.js → chunk-WR2KQAYZ.js} +1843 -440
- package/dist/hooks/{chunk-O6GDRNJB.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +5 -6
- package/dist/hooks/inputs.json +443 -317
- package/dist/hooks/pretool-guard.js +7 -25
- package/dist/hooks/session-lang.js +44 -51
- package/dist/hooks/stop-guard.js +7716 -2187
- package/dist/josh.js +6002 -3583
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +3 -1
- package/package.json +10 -48
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -7
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +33 -16
- package/prompts/collaboration-workflow/lane-instructions.md +1 -2
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +4 -6
- package/prompts/collaboration-workflow/output-bounds.md +2 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +5 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +2 -2
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +14 -4
- package/prompts/collaboration-workflow/wip-cap.md +1 -1
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +41 -21
- package/prompts/testing-guide.md +8 -43
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +14 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +53 -6
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +30 -7
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/investigation-guard.ts +0 -8
- package/scripts/delegation/investigation-reads.ts +3 -4
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +8 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +80 -98
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +37 -5
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-ledger.ts +32 -4
- package/scripts/gate/gate-plan.ts +41 -34
- package/scripts/gate/gate-report.ts +14 -2
- package/scripts/gate/gate-run-steps.ts +53 -8
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +27 -24
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-write.ts +67 -29
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +2 -2
- package/scripts/git/main-merge.ts +25 -9
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +0 -8
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +30 -3
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +32 -19
- package/scripts/hooks/reserved-run.ts +67 -9
- package/scripts/hooks/run-hook.sh +13 -4
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +2 -21
- package/scripts/hooks/stop-guard.ts +13 -9
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +34 -78
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/expected-effect-lint.ts +1 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +0 -9
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +12 -7
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +81 -90
- package/scripts/issue/issue-lint-cli.ts +2 -10
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +111 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +15 -43
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +157 -158
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +111 -71
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +103 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-logic.ts +6 -13
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +62 -21
- package/scripts/lane/lane-child-invocation.ts +8 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +24 -3
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +92 -123
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-measure-cli.ts +57 -11
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +24 -3
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +19 -5
- package/scripts/lane/lane-session-broker.ts +102 -21
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw.ts +50 -49
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon.ts +265 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +279 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +62 -30
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +18 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +6 -15
- package/scripts/report/report-format-reference.ts +2 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +81 -15
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +8 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +80 -2
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +7 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +4 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +9 -1
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +1 -1
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +1 -1
- package/scripts/rules/shell-segments.ts +35 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +3 -4
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +82 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +116 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +151 -27
- package/scripts/run/board/run-board-reason.ts +235 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +207 -265
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +2 -2
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +147 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +122 -107
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry.ts +9 -4
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +6 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +34 -8
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +62 -48
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +33 -9
- package/scripts/run/merge/run-merge-steps.ts +120 -85
- package/scripts/run/merge/run-merge.ts +38 -37
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review.ts +2 -1
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +63 -140
- package/scripts/run/ship/run-ship-detach.ts +19 -8
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +18 -2
- package/scripts/run/ship/run-ship-overlap.ts +42 -5
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +81 -24
- package/scripts/run/ship/run-ship-preflight.ts +137 -32
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +107 -23
- package/scripts/run/ship/run-ship-review-steps.ts +105 -151
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +43 -6
- package/scripts/run/ship/run-ship.ts +30 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +3 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +15 -0
- package/scripts/split/split-measure.ts +65 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +42 -24
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +61 -149
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +10 -1
- package/scripts/time-runtime/time-shell.ts +97 -10
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +4 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync,
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import { is_workflow_destination } from '#scripts/claude/workflow-destination'
|
|
4
4
|
import { gh_spawn } from '#scripts/gh/gh-spawn'
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
copy_directory_failure,
|
|
10
10
|
directory_copy_blocker,
|
|
11
11
|
} from '#scripts/sync/directory-copy-guard'
|
|
12
|
-
import {
|
|
12
|
+
import { file_content } from '#scripts/sync/file-content'
|
|
13
13
|
import { distributed_paths } from './distributed-paths'
|
|
14
14
|
import { transform_copied_content } from './init-copy-content'
|
|
15
15
|
import { init_logic } from './init-logic'
|
|
@@ -76,8 +76,7 @@ function copied_content(source_path: string, destination_path: string): string {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
function copy_ai_file(source_path: string, destination_path: string): void {
|
|
79
|
-
|
|
80
|
-
writeFileSync(destination_path, copied_content(source_path, destination_path))
|
|
79
|
+
file_content.write_contained(destination_path, copied_content(source_path, destination_path))
|
|
81
80
|
}
|
|
82
81
|
|
|
83
82
|
// `init` declines to modify a file that already exists, and that includes not stamping it: the
|
|
@@ -139,7 +138,7 @@ function merge_existing_workspace_yaml(source_path: string, destination_path: st
|
|
|
139
138
|
return
|
|
140
139
|
}
|
|
141
140
|
|
|
142
|
-
|
|
141
|
+
file_content.write_contained(destination_path, merged)
|
|
143
142
|
console.info(` ✔ updated ${WORKSPACE_YAML}`)
|
|
144
143
|
}
|
|
145
144
|
|
|
@@ -158,7 +157,7 @@ function did_skip_workspace_yaml_copy(source_path: string, destination_path: str
|
|
|
158
157
|
return false
|
|
159
158
|
}
|
|
160
159
|
|
|
161
|
-
|
|
160
|
+
file_content.write_contained(destination_path, workspace_content(source_path, destination_path))
|
|
162
161
|
console.info(` ✔ created ${WORKSPACE_YAML}`)
|
|
163
162
|
|
|
164
163
|
return false
|
|
@@ -268,40 +267,15 @@ function did_skip_ai_directory_copy(directory_name: string): boolean {
|
|
|
268
267
|
// AI file — leaves an existing one untouched so a consumer's additions are never disturbed. `josh sync`
|
|
269
268
|
// is what ensures the import line on an existing file (sync.ts). CLAUDE.md is no longer byte-copied,
|
|
270
269
|
// so it is handled here rather than through AI_COPY_FILES.
|
|
271
|
-
//
|
|
272
|
-
// The one edit made to an existing file is the rules import written under the static profile name,
|
|
273
|
-
// moved onto the basic path — only that kit-written line, never the consumer's additions.
|
|
274
|
-
// An unreadable file is left as it is and reported as skipped, as it was before the migration.
|
|
275
|
-
function read_if_readable(destination_path: string): string | undefined {
|
|
276
|
-
return file_reader.read_if_readable(destination_path)
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
function report_existing_claude_md(destination_path: string): void {
|
|
280
|
-
const existing = read_if_readable(destination_path) ?? ''
|
|
281
|
-
const migrated = basic_path_migration.migrate_basic_paths(existing)
|
|
282
|
-
|
|
283
|
-
if (migrated === existing) {
|
|
284
|
-
console.info(` ⏭ skipped ${CLAUDE_MD_FILENAME} (already exists)`)
|
|
285
|
-
|
|
286
|
-
return
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
writeFileSync(destination_path, migrated)
|
|
290
|
-
console.info(` ✔ updated ${CLAUDE_MD_FILENAME} (rules import moved to the basic path)`)
|
|
291
|
-
}
|
|
292
|
-
|
|
293
270
|
function basic_claude_md(): string {
|
|
294
271
|
return `> If kit is not installed, run \`pnpm install\` first.\n\n${BASIC_CLAUDE_IMPORT}\n`
|
|
295
272
|
}
|
|
296
273
|
|
|
297
|
-
// A basic CLAUDE.md imports the basic rules alone: the full bootstrap and import are removed,
|
|
298
|
-
//
|
|
299
|
-
// The project's own lines stay as they are.
|
|
274
|
+
// A basic CLAUDE.md imports the basic rules alone: the full bootstrap and import are removed, and the
|
|
275
|
+
// basic header is restored when no basic import is left. The project's own lines stay as they are.
|
|
300
276
|
function ensure_basic_claude_md(existing: string | undefined): string {
|
|
301
277
|
if (existing === undefined) return basic_claude_md()
|
|
302
|
-
const kept =
|
|
303
|
-
distributed_paths.remove_claude_md_import(existing),
|
|
304
|
-
)
|
|
278
|
+
const kept = distributed_paths.remove_claude_md_import(existing)
|
|
305
279
|
|
|
306
280
|
if (kept.includes(BASIC_CLAUDE_IMPORT)) return kept
|
|
307
281
|
|
|
@@ -312,7 +286,7 @@ function did_skip_claude_md_import(shape?: ProjectShape): boolean {
|
|
|
312
286
|
const destination_path = path.join(PROJECT_ROOT, CLAUDE_MD_FILENAME)
|
|
313
287
|
|
|
314
288
|
if (existsSync(destination_path)) {
|
|
315
|
-
|
|
289
|
+
console.info(` ⏭ skipped ${CLAUDE_MD_FILENAME} (already exists)`)
|
|
316
290
|
|
|
317
291
|
return true
|
|
318
292
|
}
|
|
@@ -320,7 +294,7 @@ function did_skip_claude_md_import(shape?: ProjectShape): boolean {
|
|
|
320
294
|
const content =
|
|
321
295
|
shape?.profile === 'basic' ? basic_claude_md() : init_logic.ensure_claude_md_import(undefined)
|
|
322
296
|
|
|
323
|
-
|
|
297
|
+
file_content.write_contained(destination_path, content)
|
|
324
298
|
console.info(` ✔ created ${CLAUDE_MD_FILENAME}`)
|
|
325
299
|
|
|
326
300
|
return false
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { existsSync, readFileSync, realpathSync
|
|
1
|
+
import { existsSync, readFileSync, realpathSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
4
|
+
import { file_content } from '#scripts/sync/file-content'
|
|
3
5
|
import { z } from 'zod'
|
|
4
6
|
import { init_basic } from './init-basic'
|
|
5
7
|
import { init_install, type InstallStep } from './init-install'
|
|
@@ -8,7 +10,6 @@ import { project_profile } from './project-profile'
|
|
|
8
10
|
|
|
9
11
|
const KIT_PACKAGE_NAME = '@joshuafolkken/kit'
|
|
10
12
|
const NODE_MODULES = 'node_modules'
|
|
11
|
-
const PACKAGE_JSON = 'package.json'
|
|
12
13
|
// The basic template lists exactly the build scripts kit's own dependency tree carries, which is
|
|
13
14
|
// what installing kit alone needs approved.
|
|
14
15
|
const KIT_BUILDS_TEMPLATE = 'templates/pnpm-workspace.basic.yaml'
|
|
@@ -45,10 +46,8 @@ function kit_build_flags(template: string): Array<string> {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
function has_kit_dependency(project_root: string): boolean {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const parsed: unknown = JSON.parse(readFileSync(manifest_path, 'utf8'))
|
|
51
|
-
const manifest = dependency_fields_schema.parse(parsed)
|
|
49
|
+
if (!existsSync(package_manifest.manifest_path(project_root))) return false
|
|
50
|
+
const manifest = package_manifest.read_manifest(project_root, dependency_fields_schema)
|
|
52
51
|
const names = Object.keys({ ...manifest.dependencies, ...manifest.devDependencies })
|
|
53
52
|
|
|
54
53
|
return names.includes(KIT_PACKAGE_NAME)
|
|
@@ -77,9 +76,11 @@ function handoff_step(args: ReadonlyArray<string>): InstallStep {
|
|
|
77
76
|
// pnpm walks up to the nearest `package.json`, so without one here it installs kit into whatever
|
|
78
77
|
// project an ancestor directory holds and rewrites that project's files.
|
|
79
78
|
function ensure_project_manifest(project_root: string): void {
|
|
80
|
-
const manifest_path =
|
|
79
|
+
const manifest_path = package_manifest.manifest_path(project_root)
|
|
81
80
|
|
|
82
|
-
if (
|
|
81
|
+
if (existsSync(manifest_path)) return
|
|
82
|
+
|
|
83
|
+
file_content.write_contained(manifest_path, init_basic.initial_manifest())
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
function is_handed_off(): boolean {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { json_value } from '#scripts/lib/json-value'
|
|
2
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
2
3
|
|
|
3
4
|
type ChangeKind = 'create' | 'merge' | 'overwrite' | 'delete'
|
|
4
5
|
|
|
@@ -10,7 +11,6 @@ interface FileChange {
|
|
|
10
11
|
|
|
11
12
|
type JsonRecord = Record<string, unknown>
|
|
12
13
|
|
|
13
|
-
const PACKAGE_JSON = 'package.json'
|
|
14
14
|
const JSON_EXTENSION = '.json'
|
|
15
15
|
const KIND_WIDTH = 'overwrite'.length
|
|
16
16
|
const NO_CHANGES = ' (no file changes)'
|
|
@@ -41,7 +41,7 @@ interface DryRunSplit {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
const DRY_RUN_FLAG = '--dry-run'
|
|
44
|
-
const INIT_SCRIPT = 'scripts/init/init.ts'
|
|
44
|
+
const INIT_SCRIPT = 'scripts/init/init-main.ts'
|
|
45
45
|
const SCRATCH_PREFIX = 'josh-init-dry-run-'
|
|
46
46
|
const DEFAULT_BRANCH = 'main'
|
|
47
47
|
const TITLE = 'josh init --dry-run — nothing was written. The setup would:'
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { existsSync,
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
+
import { file_content } from '#scripts/sync/file-content'
|
|
3
4
|
import type { FileAction } from './init-actions'
|
|
4
5
|
|
|
5
6
|
const SAMPLE_INDENT_WIDTH = 4
|
|
6
7
|
const SAMPLE_INDENT = ' '.repeat(SAMPLE_INDENT_WIDTH)
|
|
7
8
|
|
|
8
9
|
function write_new_file(action: FileAction, destination_path: string): void {
|
|
9
|
-
|
|
10
|
-
writeFileSync(destination_path, action.create())
|
|
10
|
+
file_content.write_contained(destination_path, action.create())
|
|
11
11
|
console.info(` ✔ created ${action.dest}`)
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -17,14 +17,12 @@ function show_sample(action: FileAction): void {
|
|
|
17
17
|
console.info(action.create().replaceAll(/^/gmu, () => SAMPLE_INDENT))
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
// A file that already holds the sample needs nothing added, so only
|
|
21
|
-
//
|
|
20
|
+
// A file that already holds the sample needs nothing added, so only a create-only file (no merge)
|
|
21
|
+
// that differs gets it shown (#3069).
|
|
22
22
|
function report_unchanged(action: FileAction, existing: string): void {
|
|
23
23
|
const is_sample_missing = existing !== action.create()
|
|
24
|
-
const should_show_sample =
|
|
25
|
-
action.merge === undefined || action.should_show_sample_when_unchanged === true
|
|
26
24
|
|
|
27
|
-
if (is_sample_missing &&
|
|
25
|
+
if (is_sample_missing && action.merge === undefined) show_sample(action)
|
|
28
26
|
else console.info(` ✔ unchanged ${action.dest}`)
|
|
29
27
|
}
|
|
30
28
|
|
|
@@ -38,7 +36,7 @@ function merge_existing_file(action: FileAction, destination_path: string): void
|
|
|
38
36
|
return
|
|
39
37
|
}
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
file_content.write_contained(destination_path, merged)
|
|
42
40
|
console.info(` ✔ updated ${action.dest}`)
|
|
43
41
|
}
|
|
44
42
|
|
|
@@ -4,7 +4,7 @@ import { parse_jsonc } from '#scripts/config-merge/parse-jsonc'
|
|
|
4
4
|
import { patch_json_key } from '#scripts/config-merge/patch-json-key'
|
|
5
5
|
import { json_object_schema, string_array_schema, string_record_schema } from '#scripts/lib/schemas'
|
|
6
6
|
import { safe_chain_preinstall } from '#scripts/safe-chain/preinstall-command'
|
|
7
|
-
import {
|
|
7
|
+
import { init_logic_migrate } from './init-logic-migrate'
|
|
8
8
|
import { PACKAGE_JSON_KEY_ORDER } from './init-logic-package-key-order'
|
|
9
9
|
import { kit_base_preset } from './kit-base-preset'
|
|
10
10
|
import { EXTENDS_FIELD, tsconfig_preset_migration } from './tsconfig-preset-migration'
|
|
@@ -203,7 +203,7 @@ function merge_package_scripts(content: string, scripts: Record<string, string>)
|
|
|
203
203
|
const parsed = parse_jsonc(content)
|
|
204
204
|
const raw = parsed['scripts']
|
|
205
205
|
const existing = raw === undefined ? {} : string_record_schema.parse(raw)
|
|
206
|
-
const migrated =
|
|
206
|
+
const migrated = init_logic_migrate.migrate_scripts(existing)
|
|
207
207
|
const to_add = missing_entries(migrated, scripts)
|
|
208
208
|
const did_migrate = JSON.stringify(migrated) !== JSON.stringify(existing)
|
|
209
209
|
|
|
@@ -1,89 +1,16 @@
|
|
|
1
1
|
import { safe_chain_preinstall } from '#scripts/safe-chain/preinstall-command'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
// The one `scripts` migration `josh init` still makes: a safe-chain `preinstall` an earlier kit
|
|
4
|
+
// wrote. The `jf-` values, the pre-josh values and the retired managed scripts were dropped once no
|
|
5
|
+
// consumer carried them (joshuafolkken/kit#4187); this one is removable from kit 2.0.0.
|
|
6
|
+
function migrate_scripts(scripts: Record<string, string>): Record<string, string> {
|
|
7
|
+
const current = scripts['preinstall']
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
// its value is the one `sv create` writes itself, so it cannot be told apart from the project's own.
|
|
9
|
-
const PRE_JOSH_SCRIPT_VALUES: ReadonlyMap<string, string> = new Map([
|
|
10
|
-
['lint', 'pnpm lint:prettier && pnpm lint:eslint'],
|
|
11
|
-
['lint:prettier', 'prettier --check .'],
|
|
12
|
-
['lint:eslint', 'eslint . --cache --cache-strategy content'],
|
|
13
|
-
['format', 'pnpm format:prettier && pnpm format:eslint'],
|
|
14
|
-
['format:prettier', 'prettier --write .'],
|
|
15
|
-
['format:eslint', 'eslint . --fix --cache --cache-strategy content'],
|
|
16
|
-
['cspell', 'cspell lint --no-must-find-files --no-progress "**/*.{ts,js,md,yaml,yml,json}"'],
|
|
17
|
-
['cspell:dot', 'pnpm cspell . --dot'],
|
|
18
|
-
['test:unit', 'vitest run'],
|
|
19
|
-
['lefthook:install', 'lefthook install'],
|
|
20
|
-
['lefthook:uninstall', 'lefthook uninstall'],
|
|
21
|
-
['lefthook:commit', 'lefthook run pre-commit'],
|
|
22
|
-
['lefthook:push', 'lefthook run pre-push'],
|
|
23
|
-
['main:sync', 'git checkout main && git pull'],
|
|
24
|
-
['main:merge', 'git pull origin main'],
|
|
25
|
-
['check:ci', 'svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --threshold error'],
|
|
26
|
-
])
|
|
9
|
+
if (current === undefined) return scripts
|
|
27
10
|
|
|
28
|
-
|
|
29
|
-
'git',
|
|
30
|
-
'git:followup',
|
|
31
|
-
'telegram:test',
|
|
32
|
-
'audit:security',
|
|
33
|
-
'prep',
|
|
34
|
-
'issue:prep',
|
|
35
|
-
'prevent-main-commit',
|
|
36
|
-
'check-commit-message',
|
|
37
|
-
'version:major',
|
|
38
|
-
'version:minor',
|
|
39
|
-
'version:patch',
|
|
40
|
-
'version:current',
|
|
41
|
-
'overrides:check',
|
|
42
|
-
'test:e2e',
|
|
43
|
-
'test',
|
|
44
|
-
'latest',
|
|
45
|
-
'latest:corepack',
|
|
46
|
-
'latest:update',
|
|
47
|
-
'check',
|
|
48
|
-
'check:svelte',
|
|
49
|
-
'check:svelte:ci',
|
|
50
|
-
...PRE_JOSH_SCRIPT_VALUES.keys(),
|
|
51
|
-
])
|
|
52
|
-
|
|
53
|
-
function migrate_jf_value(value: string): string {
|
|
54
|
-
if (!value.startsWith(JF_PREFIX)) return value
|
|
55
|
-
|
|
56
|
-
return `${JOSH_PREFIX}${value.slice(JF_PREFIX.length)}`
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function migrate_script(key: string, value: string): string {
|
|
60
|
-
const migrated = migrate_jf_value(value)
|
|
61
|
-
|
|
62
|
-
return key === PREINSTALL_KEY ? safe_chain_preinstall.migrate_preinstall(migrated) : migrated
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function apply_jf_migrations(scripts: Record<string, string>): Record<string, string> {
|
|
66
|
-
return Object.fromEntries(
|
|
67
|
-
Object.entries(scripts).map(([key, value]) => [key, migrate_script(key, value)]),
|
|
68
|
-
)
|
|
11
|
+
return { ...scripts, preinstall: safe_chain_preinstall.migrate_preinstall(current) }
|
|
69
12
|
}
|
|
70
13
|
|
|
71
|
-
|
|
72
|
-
if (value.startsWith(JOSH_PREFIX) || value.startsWith(JF_PREFIX)) return true
|
|
73
|
-
|
|
74
|
-
return PRE_JOSH_SCRIPT_VALUES.get(key) === value
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// A retired name alone does not make a script kit's: `sv create` writes its own `check`, which must
|
|
78
|
-
// survive `josh init`. Only a value kit itself wrote is retired.
|
|
79
|
-
function is_retired_script(key: string, value: string): boolean {
|
|
80
|
-
return RETIRED_MANAGED_SCRIPTS.has(key) && is_kit_written(key, value)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function remove_retired_scripts(scripts: Record<string, string>): Record<string, string> {
|
|
84
|
-
return Object.fromEntries(
|
|
85
|
-
Object.entries(scripts).filter(([key, value]) => !is_retired_script(key, value)),
|
|
86
|
-
)
|
|
87
|
-
}
|
|
14
|
+
const init_logic_migrate = { migrate_scripts }
|
|
88
15
|
|
|
89
|
-
export {
|
|
16
|
+
export { init_logic_migrate }
|
|
@@ -83,7 +83,6 @@ const AI_COPY_FILES: ReadonlyArray<string> = [
|
|
|
83
83
|
'.coderabbit.yaml',
|
|
84
84
|
'.gitattributes',
|
|
85
85
|
'.mcp.json',
|
|
86
|
-
'.ncurc.json',
|
|
87
86
|
'.prettierignore',
|
|
88
87
|
'SECURITY.md',
|
|
89
88
|
'pnpm-workspace.yaml',
|
|
@@ -100,7 +99,6 @@ const AI_COPY_FILES: ReadonlyArray<string> = [
|
|
|
100
99
|
'.github/actions/setup-node/action.yml',
|
|
101
100
|
'.github/pull_request_template.md',
|
|
102
101
|
'.github/release.yml',
|
|
103
|
-
'.github/dependabot.yml',
|
|
104
102
|
'.claude/settings.json',
|
|
105
103
|
'.codex/config.toml',
|
|
106
104
|
'.codex/hooks.json',
|
|
@@ -117,6 +115,9 @@ interface FileCopyMapping {
|
|
|
117
115
|
// hand-edit stay here.
|
|
118
116
|
const AI_COPY_FILE_MAPPINGS: ReadonlyArray<FileCopyMapping> = [
|
|
119
117
|
{ src: 'templates/workflows/ci.yml', dest: '.github/workflows/ci.yml' },
|
|
118
|
+
// A template rather than a copy of kit's own file: kit groups its github-actions bumps, which a
|
|
119
|
+
// consumer's auto-merge would hold whole once one bump touches an upstream-managed workflow.
|
|
120
|
+
{ src: 'templates/dependabot.yml', dest: '.github/dependabot.yml' },
|
|
120
121
|
// The counterpart to the distributed `.github/dependabot.yml`: without it a consumer receives
|
|
121
122
|
// the machinery that opens Dependabot pull requests and none of the machinery that closes them,
|
|
122
123
|
// so every github-actions bump sits green and unmerged.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { run_cli } from './init'
|
|
4
|
+
|
|
5
|
+
// The `josh init` entry, kept apart from `init.ts` because other modules import that one: a bundle is
|
|
6
|
+
// one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186). `run_cli` sets its own exit code.
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
run_cli(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
package/scripts/init/init.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
import { existsSync, readFileSync, writeFileSync } from 'node:fs'
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
3
2
|
import path from 'node:path'
|
|
4
|
-
import { fileURLToPath } from 'node:url'
|
|
5
3
|
import { resolve_local_bin } from '#scripts/build/local-bin'
|
|
6
4
|
import { doctor_io } from '#scripts/doctor/doctor-io'
|
|
7
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
8
7
|
import { package_version_schema, with_package_manager_schema } from '#scripts/lib/schemas'
|
|
9
8
|
import { auto_merge_setting } from '#scripts/repo/auto-merge-setting'
|
|
10
9
|
import { pack_hook } from '#scripts/safe-chain/pack-hook'
|
|
11
|
-
import { project_config } from '#scripts/safe-chain/project-config'
|
|
12
10
|
import { security_updates } from '#scripts/security/security-updates'
|
|
13
11
|
import { did_refuse_self_run } from '#scripts/self-sync-guard/self-sync-refusal'
|
|
12
|
+
import { file_content } from '#scripts/sync/file-content'
|
|
14
13
|
import { sync } from '#scripts/sync/sync'
|
|
15
14
|
import { package_manager_version } from '#scripts/version/package-manager-version'
|
|
16
15
|
import { execaSync } from 'execa'
|
|
@@ -28,10 +27,8 @@ import { package_manager_pin } from './package-manager-pin'
|
|
|
28
27
|
import { project_profile, type ProjectProfile, type ProjectShape } from './project-profile'
|
|
29
28
|
import { working_tree } from './working-tree'
|
|
30
29
|
|
|
31
|
-
const PACKAGE_JSON = 'package.json'
|
|
32
30
|
const KIT_PACKAGE_NAME = '@joshuafolkken/kit'
|
|
33
31
|
const LEFTHOOK_BIN = 'lefthook'
|
|
34
|
-
const ARGUMENT_START_INDEX = 2
|
|
35
32
|
const INSTALL_HINT = '→ run `pnpm install` to install what package.json lists'
|
|
36
33
|
const INIT_USAGE = 'josh init [--profile basic|full] [--no-install] [--dry-run]'
|
|
37
34
|
|
|
@@ -152,7 +149,7 @@ function merge_project_package_json(shape: ProjectShape): void {
|
|
|
152
149
|
return
|
|
153
150
|
}
|
|
154
151
|
|
|
155
|
-
|
|
152
|
+
file_content.write_contained(package_json_path, merged)
|
|
156
153
|
console.info(` ✔ ${is_existing ? 'updated' : 'created'} package.json`)
|
|
157
154
|
}
|
|
158
155
|
|
|
@@ -230,7 +227,7 @@ function initialize_project(shape: ProjectShape): void {
|
|
|
230
227
|
|
|
231
228
|
run_ai_file_actions(shape)
|
|
232
229
|
pack_hook.sync_pack_hook(PROJECT_ROOT, PACKAGE_DIR)
|
|
233
|
-
if (shape.profile === 'full')
|
|
230
|
+
if (shape.profile === 'full') sync.sync_release_window_mirrors(PROJECT_ROOT)
|
|
234
231
|
}
|
|
235
232
|
|
|
236
233
|
// A tool `init` just listed is absent until the user installs it — and `josh lint` then fails on it
|
|
@@ -337,10 +334,6 @@ function run_cli(args: ReadonlyArray<string>): void {
|
|
|
337
334
|
}
|
|
338
335
|
}
|
|
339
336
|
|
|
340
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
341
|
-
run_cli(process.argv.slice(ARGUMENT_START_INDEX))
|
|
342
|
-
}
|
|
343
|
-
|
|
344
337
|
const init = {
|
|
345
338
|
copy_ai_file: init_ai_copy.copy_ai_file,
|
|
346
339
|
apply_package_json_merges,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
2
2
|
import { z } from 'zod'
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const PACKAGE_JSON = 'package.json'
|
|
3
|
+
import { PACKAGE_DIR } from './init-paths'
|
|
6
4
|
|
|
7
5
|
const kit_manifest_schema = z.object({
|
|
8
6
|
peerDependencies: z.record(z.string(), z.string()).default({}),
|
|
@@ -12,9 +10,7 @@ const kit_manifest_schema = z.object({
|
|
|
12
10
|
type KitManifest = z.infer<typeof kit_manifest_schema>
|
|
13
11
|
|
|
14
12
|
function read_kit_manifest(): KitManifest {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return kit_manifest_schema.parse(JSON.parse(content))
|
|
13
|
+
return package_manifest.read_manifest(PACKAGE_DIR, kit_manifest_schema)
|
|
18
14
|
}
|
|
19
15
|
|
|
20
16
|
// The version kit's own devDependencies carry for each name, so a consumer runs the toolchain kit
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
1
2
|
import { PACK_HOOK_FILE } from '#scripts/safe-chain/pack-hook'
|
|
2
3
|
import { PROJECT_CONFIG_FILE } from '#scripts/safe-chain/project-config'
|
|
3
4
|
import { managed_config_scope } from '#scripts/sync/managed-config-scope'
|
|
4
5
|
import { BASIC_PRETTIER_CONFIG } from './init-actions'
|
|
5
6
|
import { CLAUDE_MD_FILENAME } from './init-ai-copy'
|
|
6
7
|
|
|
7
|
-
const MANIFEST_FILE = 'package.json'
|
|
8
8
|
const LOCKFILE = 'pnpm-lock.yaml'
|
|
9
9
|
|
|
10
10
|
// The paths `josh init` writes beyond what `managed_config_scope` enumerates. They stay out of that
|
|
@@ -15,7 +15,7 @@ const SETUP_ONLY_PATHS: ReadonlySet<string> = new Set([
|
|
|
15
15
|
BASIC_PRETTIER_CONFIG,
|
|
16
16
|
PROJECT_CONFIG_FILE,
|
|
17
17
|
PACK_HOOK_FILE,
|
|
18
|
-
|
|
18
|
+
PACKAGE_JSON,
|
|
19
19
|
LOCKFILE,
|
|
20
20
|
])
|
|
21
21
|
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { existsSync, readdirSync,
|
|
1
|
+
import { existsSync, readdirSync, type Dirent } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import { repo_origin } from '#scripts/discovery/repo-origin'
|
|
4
4
|
import { git_spawn_sync } from '#scripts/git/git-spawn-sync'
|
|
5
5
|
import { json_value } from '#scripts/lib/json-value'
|
|
6
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
6
7
|
import { KIT_PACKAGE_NAME } from '#scripts/version/kit-descriptor'
|
|
8
|
+
import { z } from 'zod'
|
|
7
9
|
import { kit_written_paths } from './kit-written-paths'
|
|
8
10
|
import { own_formatter } from './own-formatter'
|
|
9
11
|
import { workflow_mark } from './workflow-mark'
|
|
@@ -76,9 +78,8 @@ function requested_profile(
|
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
function read_manifest(root: string): Record<string, unknown> | undefined {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const parsed: unknown = JSON.parse(readFileSync(filename, 'utf8'))
|
|
81
|
+
if (!existsSync(package_manifest.manifest_path(root))) return undefined
|
|
82
|
+
const parsed = package_manifest.read_manifest(root, z.unknown())
|
|
82
83
|
|
|
83
84
|
if (!json_value.is_record(parsed)) throw new Error('package.json must contain an object')
|
|
84
85
|
|
|
@@ -12,7 +12,8 @@ import { string_array_schema } from '#scripts/lib/schemas'
|
|
|
12
12
|
// `*.json`; a consumer whose `extends` still points at the old path would never be repaired by the
|
|
13
13
|
// ensure-based merge — an `@joshuafolkken/*` tsconfig entry is already present, so nothing is added
|
|
14
14
|
// — hence the rewrite here. Scoped to `@joshuafolkken/*/tsconfig/*` paths so an unrelated
|
|
15
|
-
// project-local `.jsonc` config is left alone.
|
|
15
|
+
// project-local `.jsonc` config is left alone. Removable from kit 2.0.0; a consumer still extended
|
|
16
|
+
// a `.jsonc` preset at joshuafolkken/kit#4187.
|
|
16
17
|
const LEGACY_PRESET_ENTRY = /@joshuafolkken\/[^/]+\/tsconfig\/[^/]+\.jsonc$/u
|
|
17
18
|
const LEGACY_SUFFIX = '.jsonc'
|
|
18
19
|
const CURRENT_SUFFIX = '.json'
|
|
@@ -13,7 +13,7 @@ const VSCODE_TASKS_FILENAME = 'tasks.json'
|
|
|
13
13
|
|
|
14
14
|
// A label kit once shipped a task under, mapped to the label that replaced it. A consumer's task still
|
|
15
15
|
// carrying the retired label is the same kit task under its old name, so it is replaced in place — an
|
|
16
|
-
// append would leave the retired
|
|
16
|
+
// append would leave the retired task beside its successor.
|
|
17
17
|
const RETIRED_LABELS: ReadonlyMap<unknown, string> = new Map([
|
|
18
18
|
['josh: run event watch', 'josh: run board'],
|
|
19
19
|
])
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import type { IssueRead } from '#scripts/gh/git-gh-issue-read'
|
|
3
|
+
import { git_spawn } from '#scripts/git/git-spawn'
|
|
4
|
+
import { parse_json } from '#scripts/git/parse-json-array'
|
|
5
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
6
|
+
import { run_prep_locate } from '#scripts/run/run-prep-locate'
|
|
7
|
+
import { z } from 'zod'
|
|
8
|
+
import { defect_origin, type Candidate, type Merge, type TargetMerges } from './defect-origin'
|
|
9
|
+
import { issue_read_cli } from './issue-read-cli'
|
|
10
|
+
import { session_cite } from './session-cite'
|
|
11
|
+
|
|
12
|
+
const SUCCESS_EXIT_CODE = 0
|
|
13
|
+
const FAILURE_EXIT_CODE = 1
|
|
14
|
+
const USAGE = 'Usage: pnpm josh defect:origin <N>'
|
|
15
|
+
const UNREADABLE_MESSAGE = 'Could not read the issue, so no origin candidate is listed:'
|
|
16
|
+
const UNSEARCHABLE_MESSAGE = 'Could not search the merge history for'
|
|
17
|
+
|
|
18
|
+
const filed_schema = z.object({ createdAt: z.string() })
|
|
19
|
+
|
|
20
|
+
interface IssueText {
|
|
21
|
+
text: string
|
|
22
|
+
filed_at: string | undefined
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// A target that git cannot search is named on stderr and contributes nothing, rather than ending the
|
|
26
|
+
// listing or passing for a target no merge touched.
|
|
27
|
+
async function read_merges(
|
|
28
|
+
target: string,
|
|
29
|
+
arguments_: Array<string>,
|
|
30
|
+
): Promise<ReadonlyArray<Merge>> {
|
|
31
|
+
try {
|
|
32
|
+
return defect_origin.parse_merges(await git_spawn.read(arguments_))
|
|
33
|
+
} catch {
|
|
34
|
+
console.error(`${UNSEARCHABLE_MESSAGE} ${target}`)
|
|
35
|
+
|
|
36
|
+
return []
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// A path is looked up by pathspec; a name no path matches, by the merges that added or removed it.
|
|
41
|
+
async function merges_for(target: string, before: string | undefined): Promise<TargetMerges> {
|
|
42
|
+
const by_path = await read_merges(target, defect_origin.path_arguments(target, before))
|
|
43
|
+
const merges =
|
|
44
|
+
by_path.length > 0
|
|
45
|
+
? by_path
|
|
46
|
+
: await read_merges(target, defect_origin.pickaxe_arguments(target, before))
|
|
47
|
+
|
|
48
|
+
return { target, merges }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function candidates_for(issue: IssueText): Promise<ReadonlyArray<Candidate>> {
|
|
52
|
+
const targets = run_prep_locate.extract_targets(issue.text)
|
|
53
|
+
const found = await Promise.all(
|
|
54
|
+
targets.map(async (target) => await merges_for(target, issue.filed_at)),
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
return defect_origin.rank(found)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async function listing(issue_number: string, issue: IssueText): Promise<string> {
|
|
61
|
+
return defect_origin.format(issue_number, await candidates_for(issue))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// An unreadable filing time leaves the log unbounded rather than listing nothing.
|
|
65
|
+
function filed_at_of(read: IssueRead): string | undefined {
|
|
66
|
+
if (read.kind !== 'read') return undefined
|
|
67
|
+
|
|
68
|
+
return parse_json.parse_json_object_or_undefined(read.json, filed_schema)?.createdAt
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// The body and trusted comments as `issue:read` prints them, and when the issue was filed; the
|
|
72
|
+
// failure kind when the issue could not be read.
|
|
73
|
+
async function read_issue(issue_number: string): Promise<IssueText | string> {
|
|
74
|
+
const [read, filed] = await Promise.all([
|
|
75
|
+
issue_read_cli.read_block(issue_number),
|
|
76
|
+
git_gh_command.issue_view_json_classified(issue_number, 'createdAt'),
|
|
77
|
+
])
|
|
78
|
+
|
|
79
|
+
return read.kind === 'ok' ? { text: read.block, filed_at: filed_at_of(filed) } : read.kind
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
83
|
+
const [issue_number = ''] = argv
|
|
84
|
+
|
|
85
|
+
if (argv.length !== 1 || !issue_number_shape.is_issue_number(issue_number)) {
|
|
86
|
+
console.error(USAGE)
|
|
87
|
+
|
|
88
|
+
return FAILURE_EXIT_CODE
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const issue = await read_issue(issue_number)
|
|
92
|
+
|
|
93
|
+
if (typeof issue === 'string') {
|
|
94
|
+
console.error(`${UNREADABLE_MESSAGE} ${issue}`)
|
|
95
|
+
|
|
96
|
+
return FAILURE_EXIT_CODE
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
console.info(session_cite.text(await listing(issue_number, issue)))
|
|
100
|
+
|
|
101
|
+
return SUCCESS_EXIT_CODE
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const defect_origin_cli = { USAGE, run }
|
|
105
|
+
|
|
106
|
+
export { defect_origin_cli }
|