@joshuafolkken/kit 1.1471.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 +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- 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 +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- 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-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- 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 +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- 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 +6 -7
- 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 +54 -7
- 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 +39 -8
- 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 +69 -0
- 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 +137 -18
- 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 +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- 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 +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- 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 +31 -60
- 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 +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- 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 +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- 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 +65 -129
- 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-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- 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/gh/git-pr.ts +13 -1
- 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 +78 -0
- package/scripts/git/main-merge.ts +39 -14
- 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 +5 -16
- 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 +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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 +60 -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 +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +7 -13
- 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 +19 -25
- 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/markdown-section.ts +19 -5
- 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 +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +31 -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 +112 -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 +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- 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 +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- 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 +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- 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 +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- 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-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- 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 +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- 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 +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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 +14 -5
- 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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -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 +12 -11
- 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 +4 -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-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -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 +82 -16
- 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 +67 -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 +90 -3
- 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 +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -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 +76 -7
- 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/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- 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 +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- 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 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- 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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -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 +240 -61
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- 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 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- 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 +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -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 +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- 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 +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- 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 +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- 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-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- 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 +55 -6
- 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 +54 -21
- 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 +71 -137
- 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 +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- 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 +10 -3
- 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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- 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/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 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,49 +1,77 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
|
-
import { text } from 'node:stream/consumers'
|
|
3
2
|
import { fileURLToPath } from 'node:url'
|
|
4
3
|
import { agent_headless } from '#scripts/agent/agent-headless'
|
|
5
4
|
import { backlog_ready } from '#scripts/backlog/backlog-ready'
|
|
6
5
|
import { backlog_stalled_detect } from '#scripts/backlog/backlog-stalled-detect'
|
|
7
6
|
import { repo_party } from '#scripts/discovery/repo-party'
|
|
7
|
+
import { stop_actions } from '#scripts/hooks/stop-actions'
|
|
8
8
|
import { hook_decision } from '#scripts/josh/hook-decision'
|
|
9
9
|
import { session_language } from '#scripts/josh/session-language'
|
|
10
10
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
11
11
|
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
12
|
+
import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
|
|
12
13
|
import { filing_cap } from '#scripts/rules/filing-cap'
|
|
13
14
|
import { lane_background } from '#scripts/rules/lane-background'
|
|
14
15
|
import { lane_park } from '#scripts/rules/lane-park'
|
|
15
16
|
import { last_prompt } from '#scripts/rules/last-prompt'
|
|
17
|
+
import { pre_gate_cut } from '#scripts/rules/pre-gate-cut'
|
|
18
|
+
import { stop_decision } from '#scripts/rules/stop-decision'
|
|
16
19
|
import { stop_rules, type StopContext, type StopOutcome } from '#scripts/rules/stop-rules'
|
|
20
|
+
import { tail_commands } from '#scripts/rules/tail-commands'
|
|
17
21
|
import { run_carry } from '#scripts/run/carry/run-carry'
|
|
18
22
|
import { run_cut } from '#scripts/run/cut/run-cut'
|
|
19
|
-
import {
|
|
23
|
+
import { run_cut_report } from '#scripts/run/cut/run-cut-report'
|
|
24
|
+
import { run_hold, type RunHold } from '#scripts/run/hold/run-hold'
|
|
25
|
+
import { run_hold_session } from '#scripts/run/hold/run-hold-session'
|
|
20
26
|
import { run_halfrun_resume } from '#scripts/run/run-halfrun-resume'
|
|
21
27
|
import { run_headless } from '#scripts/run/run-headless'
|
|
22
28
|
import { run_stranded_detect } from '#scripts/run/run-stranded-detect'
|
|
23
29
|
import { time_density_hook } from '#scripts/time-runtime/time-density-hook'
|
|
24
30
|
import { time_hook_transcript } from '#scripts/time-runtime/time-hook-transcript'
|
|
25
31
|
|
|
26
|
-
// The `Stop` hook entry: one process that delivers the
|
|
32
|
+
// The `Stop` hook entry: one process that delivers the stop-time rules, running the fixed ones itself
|
|
33
|
+
// (`stop-actions.ts`).
|
|
27
34
|
// It is the stop-time counterpart of `pretool-guard.ts` — a second entry on the same `hook_decision`
|
|
28
35
|
// foundation, not a second copy of it.
|
|
29
36
|
//
|
|
30
37
|
// **Every failure allows the stop.** A missing transcript, an unreadable hold record, a git status
|
|
31
38
|
// that will not read — each ends as "no block", for the same reason the PreToolUse guard fails open:
|
|
32
|
-
// a hook that failed closed would wedge a run over its own plumbing. The
|
|
33
|
-
//
|
|
39
|
+
// a hook that failed closed would wedge a run over its own plumbing. The hook runs the fixed
|
|
40
|
+
// operations itself (send the notify, release the hold) and `stop_hook_active` is the backstop, so failing
|
|
34
41
|
// open here costs at most a missed nudge, never a stuck run.
|
|
35
42
|
|
|
36
|
-
// The hold record for this working tree
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
async function hold_facts(): Promise<Pick<StopContext, 'hold_present' | 'prrun_stopped'>> {
|
|
43
|
+
// The hold record for this working tree. `unreadable` reads as absent: the safe direction for a stop
|
|
44
|
+
// guard is not to act, and an unreadable record is not proof a run is holding.
|
|
45
|
+
async function held_record(): Promise<RunHold | undefined> {
|
|
40
46
|
const directory = await run_hold.worktree_directory()
|
|
41
|
-
|
|
42
|
-
directory === undefined
|
|
43
|
-
? undefined
|
|
44
|
-
: run_halfrun_resume.hold_of(run_hold.read_hold(run_hold.hold_path(directory)))
|
|
47
|
+
if (directory === undefined) return undefined
|
|
45
48
|
|
|
46
|
-
return
|
|
49
|
+
return run_halfrun_resume.hold_of(run_hold.read_hold(run_hold.hold_path(directory)))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// The pause was announced: by a `josh notify` on the tail, or by this hook's own send, recorded on the
|
|
53
|
+
// hold since the pause began (joshuafolkken/kit#3961).
|
|
54
|
+
function was_notified(hold: RunHold | undefined, tail: string): boolean {
|
|
55
|
+
if (lane_park.mentions_confirmation_notify(tail)) return true
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
hold !== undefined && run_hold_session.is_notified_since(hold, last_prompt.pause_start(tail))
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// The Issue the hold names, whether it is a `prrun` stop's and this session's own, and whether its
|
|
63
|
+
// pause was already announced.
|
|
64
|
+
async function hold_facts(
|
|
65
|
+
tail: string,
|
|
66
|
+
): Promise<Pick<StopContext, 'hold_issue' | 'hold_owned' | 'notified' | 'prrun_stopped'>> {
|
|
67
|
+
const hold = await held_record()
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
hold_issue: hold?.issue,
|
|
71
|
+
hold_owned: hold === undefined || run_hold_session.is_session_hold(hold),
|
|
72
|
+
notified: was_notified(hold, tail),
|
|
73
|
+
prrun_stopped: hold?.prrun_stop_head !== undefined,
|
|
74
|
+
}
|
|
47
75
|
}
|
|
48
76
|
|
|
49
77
|
// A `confirmation` notify sits on this run's transcript tail. The tail is derived exactly as the
|
|
@@ -60,7 +88,20 @@ function was_filed(tail: string): boolean {
|
|
|
60
88
|
return filing_cap.turn_filing_count(tail) > 0
|
|
61
89
|
}
|
|
62
90
|
|
|
63
|
-
//
|
|
91
|
+
// This turn ended at a cut — a record still `carried`, or this turn's `run:cut` relaunching a successor.
|
|
92
|
+
// The second covers the successor's resume clearing the record before this stop (joshuafolkken/kit#3936);
|
|
93
|
+
// the held cut outside a lane prints no marker, so its person is still notified.
|
|
94
|
+
function is_cut_stop(tail: string): boolean {
|
|
95
|
+
if (run_cut.carried_cut_sync() !== undefined) return true
|
|
96
|
+
|
|
97
|
+
return tail_commands.answered(
|
|
98
|
+
filing_cap.current_turn(tail),
|
|
99
|
+
pre_gate_cut.takes_the_cut,
|
|
100
|
+
run_cut_report.RELAUNCHED_CUT_MARKER,
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// The session language the refusal is written for — `respond_from_stdin` has already loaded the `.env`.
|
|
64
105
|
function session_lang(): string {
|
|
65
106
|
return session_language.resolve_session_lang().lang
|
|
66
107
|
}
|
|
@@ -85,13 +126,13 @@ async function build_context(
|
|
|
85
126
|
const tail = transcript_tail(transcript_path)
|
|
86
127
|
|
|
87
128
|
return {
|
|
88
|
-
...(await hold_facts()),
|
|
129
|
+
...(await hold_facts(tail)),
|
|
89
130
|
tree_clean: !(await run_hold.is_tree_dirty()),
|
|
90
|
-
notified: lane_park.mentions_confirmation_notify(tail),
|
|
91
131
|
message: payload_tail.message,
|
|
92
132
|
prompt: last_prompt.prompt_text(tail),
|
|
133
|
+
answers_question: stop_decision.is_question(last_prompt.turn_prompt(tail)),
|
|
93
134
|
stop_hook_active: payload_tail.stop_hook_active,
|
|
94
|
-
cut_pending:
|
|
135
|
+
cut_pending: is_cut_stop(tail),
|
|
95
136
|
filed: was_filed(tail),
|
|
96
137
|
session_owner: repo_party.current_owner(),
|
|
97
138
|
...(await session_role_facts()),
|
|
@@ -167,24 +208,28 @@ async function run_report_checks(): Promise<void> {
|
|
|
167
208
|
await run_stranded_detect.run_stranded_check()
|
|
168
209
|
}
|
|
169
210
|
|
|
170
|
-
|
|
171
|
-
// is being held — all three rules block, so a bare `#N` is reported the same way.
|
|
172
|
-
async function write_stop_decision(raw_payload: string): Promise<void> {
|
|
173
|
-
hook_decision.load_environment_file()
|
|
211
|
+
async function decided_envelope(raw_payload: string): Promise<string | undefined> {
|
|
174
212
|
await run_report_checks()
|
|
175
213
|
|
|
176
|
-
|
|
214
|
+
return await stop_actions.envelope_of(await outcome_of(raw_payload), session_lang())
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Nothing reaches stdout on an ordinary stop, so what the harness parses stays empty unless the stop is
|
|
218
|
+
// held or the hook acted on it (`stop-actions.ts`). The report checks print too — a strand's skipped
|
|
219
|
+
// notify line — and text ahead of the envelope makes the harness drop the refusal, as the #4091 child's
|
|
220
|
+
// lane-background block was (joshuafolkken/kit#4101), so everything before the write goes to stderr.
|
|
221
|
+
async function write_stop_decision(raw_payload: string): Promise<void> {
|
|
222
|
+
const envelope = await stdout_on_stderr.run(async () => await decided_envelope(raw_payload))
|
|
177
223
|
|
|
178
|
-
if (
|
|
224
|
+
if (envelope === undefined) return
|
|
179
225
|
|
|
180
|
-
process.stdout.write(`${
|
|
226
|
+
process.stdout.write(`${envelope}\n`)
|
|
181
227
|
}
|
|
182
228
|
|
|
183
229
|
const stop_guard = { outcome_of, stop_outcome_for_payload }
|
|
184
230
|
|
|
185
231
|
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
186
|
-
|
|
187
|
-
else await write_stop_decision(await text(process.stdin))
|
|
232
|
+
await hook_decision.respond_from_stdin('stop:guard', write_stop_decision)
|
|
188
233
|
}
|
|
189
234
|
|
|
190
235
|
export { stop_guard, write_stop_decision }
|
|
@@ -49,8 +49,19 @@ const PLAIN_KIT_COMMANDS: ReadonlySet<string> = new Set(
|
|
|
49
49
|
'session:lang',
|
|
50
50
|
].map((command) => `${PNPM_JOSH_PREFIX}${command}`),
|
|
51
51
|
)
|
|
52
|
-
// The
|
|
53
|
-
|
|
52
|
+
// The root prefix kit wrote until joshuafolkken/kit#4187 moved the git location variables into the
|
|
53
|
+
// launcher. A consumer's file still carries it until its next sync, which replaces it with the current
|
|
54
|
+
// one. History, never edited; removable from kit 2.0.0.
|
|
55
|
+
const LOCATION_VARIABLES =
|
|
56
|
+
'GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE'
|
|
57
|
+
const ROOT_LOOKUP = 'git rev-parse --show-toplevel'
|
|
58
|
+
const LEGACY_ROOT_PREFIX = `if project_root="$(unset ${LOCATION_VARIABLES}; ${ROOT_LOOKUP} 2>/dev/null)"; then unset ${LOCATION_VARIABLES}; else project_root="$(${ROOT_LOOKUP})"; fi && cd "$project_root" && `
|
|
59
|
+
// The values below are matched inside raw JSON text, so each root prefix is taken in its escaped form.
|
|
60
|
+
const ROOT_PREFIXES: ReadonlyArray<string> = [
|
|
61
|
+
hook_launch.PROJECT_ROOT_PREFIX,
|
|
62
|
+
LEGACY_ROOT_PREFIX,
|
|
63
|
+
].map((prefix) => JSON.stringify(prefix).slice(1, -1))
|
|
64
|
+
const [PROJECT_ROOT_PREFIX = ''] = ROOT_PREFIXES
|
|
54
65
|
// Capture the value of every `"command"` field, escapes and all, so the rewrites below touch command
|
|
55
66
|
// values alone — never an echo reminder's prose or a `"description"` that merely mentions the string.
|
|
56
67
|
const COMMAND_FIELD = /("command":\s*")((?:[^"\\]|\\.)*)(")/gu
|
|
@@ -76,10 +87,13 @@ function rewrite_command_value(value: string): string {
|
|
|
76
87
|
}
|
|
77
88
|
|
|
78
89
|
// kit's own commands already start from the root (`hook-launch.ts`), and so does an already-rewritten
|
|
79
|
-
// value. The prefix
|
|
80
|
-
// behind the `cd` it depends on and a second
|
|
90
|
+
// value. The prefix — the current one or the one before it — is taken off before the rewrite and the
|
|
91
|
+
// current one put back after it, so the install guard sits behind the `cd` it depends on and a second
|
|
92
|
+
// pass never doubles the prefix.
|
|
81
93
|
function without_root_prefix(value: string): string {
|
|
82
|
-
|
|
94
|
+
const prefix = ROOT_PREFIXES.find((candidate) => value.startsWith(candidate)) ?? ''
|
|
95
|
+
|
|
96
|
+
return value.slice(prefix.length)
|
|
83
97
|
}
|
|
84
98
|
|
|
85
99
|
function rewrite_hook_commands(content: string, is_codex = false): string {
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
import { GIT_LOCATION_VARIABLES } from '#scripts/git/git-location-environment'
|
|
2
|
-
|
|
3
1
|
// The shell command a Claude Code hook is launched with, so it starts without a `pnpm` wrapper — and,
|
|
4
2
|
// for a consumer, without the `dist/josh.js` dispatcher re-spawning `tsx` for the hook's `.ts`.
|
|
5
3
|
// Each hook is pre-built to its own `dist/hooks/<name>.js`
|
|
6
4
|
// (`scripts/build/build-hooks.ts`) and launched directly with `node`.
|
|
7
5
|
//
|
|
8
6
|
// **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
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
7
|
+
// Every path after the prefix is relative, so a hook fired from a subdirectory would otherwise miss its
|
|
8
|
+
// script. Claude Code names the root in `CLAUDE_PROJECT_DIR`, so its hooks start no `git` to find it;
|
|
9
|
+
// Codex runs a hook in the session's directory and names no root, so there the root is git's — asked
|
|
10
|
+
// first without the git location variables a git hook leaks, since a relative or bare `GIT_DIR` read
|
|
11
|
+
// from a subdirectory names the wrong work tree, and with them only when the checkout does not resolve
|
|
12
|
+
// without them (its metadata lives outside the work tree). A lookup that fails ends the command before
|
|
13
|
+
// the launcher (joshuafolkken/kit#4187).
|
|
14
14
|
//
|
|
15
|
-
// **Everything after the root is one script** (`scripts/hooks/run-hook.sh`):
|
|
16
|
-
//
|
|
17
|
-
//
|
|
15
|
+
// **Everything after the root is one script** (`scripts/hooks/run-hook.sh`): the git location
|
|
16
|
+
// variables a git hook exports, the bundle-ready gate and the live-source fallback live there once, so
|
|
17
|
+
// each hook command names only its hook. The consumer rewrite (`hook-command-rewrite.ts`) keeps this
|
|
18
|
+
// prefix, so both sides stay one mechanism for Claude Code and Codex alike.
|
|
19
|
+
|
|
20
|
+
import { GIT_LOCATION_VARIABLES } from '#scripts/git/git-location-environment'
|
|
18
21
|
|
|
19
22
|
const HOOK_DIST_DIR = 'dist/hooks'
|
|
20
23
|
const RUN_HOOK_SCRIPT = 'scripts/hooks/run-hook.sh'
|
|
21
|
-
const UNSET_OPTIONS = GIT_LOCATION_VARIABLES.map((name) => `-u ${name}`).join(' ')
|
|
22
24
|
const ROOT_LOOKUP = 'git rev-parse --show-toplevel'
|
|
23
|
-
const
|
|
25
|
+
const CODEX_ROOT = `$( (unset ${GIT_LOCATION_VARIABLES.join(' ')}; ${ROOT_LOOKUP} 2>/dev/null) || ${ROOT_LOOKUP})`
|
|
26
|
+
const PROJECT_ROOT_PREFIX = `project_root="\${CLAUDE_PROJECT_DIR:-${CODEX_ROOT}}" && cd "$project_root" && `
|
|
24
27
|
|
|
25
28
|
// `name` is the hook's bundle under `dist/hooks` without `.js` (e.g. `pretool-guard`), followed by any
|
|
26
29
|
// arguments it takes (e.g. `codex-hook-adapter pretool`).
|
|
@@ -2,7 +2,6 @@ import { readFileSync } from 'node:fs'
|
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import { json_format } from '#scripts/config-merge/json-format'
|
|
4
4
|
import { string_array_schema, vscode_settings_schema } from '#scripts/lib/schemas'
|
|
5
|
-
import { basic_path_migration } from './basic-path-migration'
|
|
6
5
|
import { init_logic } from './init-logic'
|
|
7
6
|
import { package_path, PROJECT_ROOT } from './init-paths'
|
|
8
7
|
import type { ProjectShape } from './project-profile'
|
|
@@ -20,9 +19,6 @@ interface FileAction {
|
|
|
20
19
|
dest: string
|
|
21
20
|
create: () => string
|
|
22
21
|
merge?: (existing: string) => string
|
|
23
|
-
// A merge that only migrates a kit-written line, for a file kit otherwise leaves to the project:
|
|
24
|
-
// when it changes nothing, the file is reported with the sample to add, as one with no merge is.
|
|
25
|
-
should_show_sample_when_unchanged?: boolean
|
|
26
22
|
}
|
|
27
23
|
|
|
28
24
|
function read_package_file(relative_path: string): string {
|
|
@@ -215,8 +211,6 @@ function build_basic_actions(shape: ProjectShape): ReadonlyArray<FileAction> {
|
|
|
215
211
|
dest: BASIC_PRETTIER_CONFIG,
|
|
216
212
|
create: () =>
|
|
217
213
|
"import { config } from '@joshuafolkken/kit/prettier/basic'\n\nexport default config\n",
|
|
218
|
-
merge: (existing) => basic_path_migration.migrate_basic_paths(existing),
|
|
219
|
-
should_show_sample_when_unchanged: true,
|
|
220
214
|
})
|
|
221
215
|
}
|
|
222
216
|
|
|
@@ -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.
|