@joshuafolkken/kit 1.1514.0 → 1.2114.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/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- 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 +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- 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 +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -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 +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -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 +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- 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 +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -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 +5 -4
- 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 +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -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 +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- 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 +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- 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/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- 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/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -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 +33 -2
- 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 +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- 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-rank.ts +5 -0
- 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-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -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 +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- 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 +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -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/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -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 +38 -179
- 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/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- 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 +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -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 +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -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 +114 -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-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- 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 +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- 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 +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- 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 +160 -161
- 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 +142 -101
- 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 +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -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 +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- 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 +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -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 +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- 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/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- 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/token-shape.ts +111 -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-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -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 +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- 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/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- 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 +24 -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 +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- 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/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -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 +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- 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 +71 -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 +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -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 +90 -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 +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -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-link.ts +15 -2
- 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 +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- 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 +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -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 +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -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 +264 -258
- 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 +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- 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-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -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 +58 -10
- 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 +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- 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 +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- 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-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- 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 +3 -4
- 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 +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- 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 +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -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-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- 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 +6 -11
- package/scripts/security/secretlint-scan.ts +42 -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 +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- 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 +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -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/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- 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-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -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 +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- 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 +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- 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/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -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 +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -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-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- 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-O6GDRNJB.js +0 -343
- 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-TNUMY6NL.js +0 -4838
- 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/context-cut-threshold.ts +0 -11
- 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/filing-cap.ts +0 -132
- 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
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs'
|
|
2
|
+
import { isDeepStrictEqual } from 'node:util'
|
|
3
|
+
import { git_spawn_sync } from '#scripts/git/git-spawn-sync'
|
|
4
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
5
|
+
import { z } from 'zod'
|
|
6
|
+
import { package_manager_version } from './package-manager-version'
|
|
7
|
+
|
|
8
|
+
// The `devEngines` verdict a dependency update is judged by (`.claude/skills/dependency-update`):
|
|
9
|
+
// the committed manifest against the working tree, printed as one line so nobody compares the two
|
|
10
|
+
// strings by eye. `kept` is the lockstep pnpm bump — the version equal to the `packageManager` pin,
|
|
11
|
+
// integrity suffix included — and `josh sync`'s `onFail` move from `error` to `download`; any other
|
|
12
|
+
// change is `restore`, with the reason in brackets.
|
|
13
|
+
const HEAD_PACKAGE_JSON = `HEAD:./${PACKAGE_JSON}`
|
|
14
|
+
const NOT_JUDGED = `devEngines: not judged (no ${PACKAGE_JSON} at HEAD to compare against)`
|
|
15
|
+
const PACKAGE_MANAGER_KEY = 'packageManager'
|
|
16
|
+
const VERSION_KEY = 'version'
|
|
17
|
+
const ON_FAIL_KEY = 'onFail'
|
|
18
|
+
const ON_FAIL_FROM = 'error'
|
|
19
|
+
const ON_FAIL_TO = 'download'
|
|
20
|
+
const UNCHANGED = 'devEngines: unchanged'
|
|
21
|
+
const KEPT = 'devEngines: kept'
|
|
22
|
+
const SUFFIX_MISSING = 'integrity suffix missing'
|
|
23
|
+
const NO_PIN = 'no pnpm@ packageManager pin to match'
|
|
24
|
+
|
|
25
|
+
type Entries = Record<string, unknown>
|
|
26
|
+
|
|
27
|
+
const entries_schema = z.record(z.string(), z.unknown())
|
|
28
|
+
const manifest_schema = z.looseObject({
|
|
29
|
+
packageManager: z.string().default(''),
|
|
30
|
+
devEngines: entries_schema.default({}),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
type Manifest = z.infer<typeof manifest_schema>
|
|
34
|
+
|
|
35
|
+
function read_manifest(content: string): Manifest {
|
|
36
|
+
return manifest_schema.parse(JSON.parse(content))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function is_entries(value: unknown): value is Entries {
|
|
40
|
+
return entries_schema.safeParse(value).success
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function read_package_manager(development_engines: Entries): Entries {
|
|
44
|
+
const value = development_engines[PACKAGE_MANAGER_KEY]
|
|
45
|
+
|
|
46
|
+
return is_entries(value) ? value : {}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// `packageManager` is compared key by key only when both sides are objects; the npm array form, or
|
|
50
|
+
// a block added or removed whole, is a structural change in itself.
|
|
51
|
+
function is_compared_inside(key: string, before: Entries, after: Entries): boolean {
|
|
52
|
+
return key === PACKAGE_MANAGER_KEY && is_entries(before[key]) && is_entries(after[key])
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function changed_keys(before: Entries, after: Entries): Array<string> {
|
|
56
|
+
const keys = new Set([...Object.keys(before), ...Object.keys(after)])
|
|
57
|
+
|
|
58
|
+
return [...keys].filter((key) => !isDeepStrictEqual(before[key], after[key]))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// The version is judged against the pin below, so only its presence counts here.
|
|
62
|
+
function is_expected_change(key: string, before: Entries, after: Entries): boolean {
|
|
63
|
+
if (key === VERSION_KEY) return typeof after[key] === 'string'
|
|
64
|
+
|
|
65
|
+
return key === ON_FAIL_KEY && before[key] === ON_FAIL_FROM && after[key] === ON_FAIL_TO
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function find_structure_change(before: Entries, after: Entries): string | undefined {
|
|
69
|
+
const outer = changed_keys(before, after).filter((key) => !is_compared_inside(key, before, after))
|
|
70
|
+
const pm_before = read_package_manager(before)
|
|
71
|
+
const pm_after = read_package_manager(after)
|
|
72
|
+
const inner = changed_keys(pm_before, pm_after).filter(
|
|
73
|
+
(key) => !is_expected_change(key, pm_before, pm_after),
|
|
74
|
+
)
|
|
75
|
+
const keys = [...outer, ...inner.map((key) => `${PACKAGE_MANAGER_KEY}.${key}`)]
|
|
76
|
+
|
|
77
|
+
return keys.length === 0 ? undefined : `structure changed: ${keys.join(', ')}`
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Without a `pnpm@` pin there is nothing the version could be kept in lockstep with.
|
|
81
|
+
function find_version_mismatch(after: Manifest): string | undefined {
|
|
82
|
+
const pin = package_manager_version.extract_pnpm_pin(after.packageManager)
|
|
83
|
+
if (pin === undefined) return NO_PIN
|
|
84
|
+
const current = String(read_package_manager(after.devEngines)[VERSION_KEY])
|
|
85
|
+
if (current === pin) return undefined
|
|
86
|
+
if (pin.startsWith(`${current}+`)) return SUFFIX_MISSING
|
|
87
|
+
|
|
88
|
+
return `version ${current} is not the packageManager pin ${pin}`
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function judge(before_content: string, after_content: string): string {
|
|
92
|
+
const before = read_manifest(before_content).devEngines
|
|
93
|
+
const after = read_manifest(after_content)
|
|
94
|
+
if (isDeepStrictEqual(before, after.devEngines)) return UNCHANGED
|
|
95
|
+
const reason = find_structure_change(before, after.devEngines) ?? find_version_mismatch(after)
|
|
96
|
+
|
|
97
|
+
return reason === undefined ? KEPT : `devEngines: restore (${reason})`
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// A manifest that does not parse is answered apart from every verdict rather than thrown, so the
|
|
101
|
+
// overrides check that follows still runs.
|
|
102
|
+
function judge_or_explain(head: string, current: string): string {
|
|
103
|
+
try {
|
|
104
|
+
return judge(head, current)
|
|
105
|
+
} catch (error) {
|
|
106
|
+
return `devEngines: not judged (${PACKAGE_JSON} unreadable: ${String(error)})`
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function describe(head: string | undefined, current: string): string {
|
|
111
|
+
return head === undefined ? NOT_JUDGED : judge_or_explain(head, current)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// A `git show` that fails — no commit yet, no repository — answers apart from every verdict, so it
|
|
115
|
+
// never reads as a `devEngines` block the update added.
|
|
116
|
+
function report(): void {
|
|
117
|
+
const head = git_spawn_sync.read(['show', HEAD_PACKAGE_JSON])
|
|
118
|
+
|
|
119
|
+
console.info(describe(head, readFileSync(PACKAGE_JSON, 'utf8')))
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const development_engines_verdict = { judge, describe, report }
|
|
123
|
+
|
|
124
|
+
export { development_engines_verdict }
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs'
|
|
2
1
|
import { createRequire } from 'node:module'
|
|
3
2
|
import path from 'node:path'
|
|
4
3
|
import { ancestor_directories } from '#scripts/lib/ancestor-directories'
|
|
5
|
-
import {
|
|
4
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
6
5
|
import { package_named_version_schema } from '#scripts/lib/schemas'
|
|
7
6
|
|
|
8
|
-
const PACKAGE_JSON = 'package.json'
|
|
9
|
-
|
|
10
7
|
// Options for `resolve_effective_upstream_version`. `resolve_marker` is a subpath specifier used for
|
|
11
8
|
// `createRequire().resolve()` when the package root itself is not directly resolvable — e.g. kit does
|
|
12
9
|
// not list `package.json` (nor a `.` entry) in `exports`, so a subpath like
|
|
@@ -18,21 +15,18 @@ interface EffectiveUpstreamOptions {
|
|
|
18
15
|
// Read the `version` from a package.json only when its `name` matches the target package — undefined
|
|
19
16
|
// when the file is missing, malformed, or belongs to a different (e.g. nested) package. Matching by
|
|
20
17
|
// name is what lets the walk-up skip intermediate package.json files and land on the true root.
|
|
21
|
-
function read_matching_version(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
json_value.parse_or_undefined(readFileSync(manifest_path, 'utf8')),
|
|
25
|
-
)
|
|
26
|
-
if (!parsed.success || parsed.data.name !== package_name) return undefined
|
|
18
|
+
function read_matching_version(directory: string, package_name: string): string | undefined {
|
|
19
|
+
const manifest = package_manifest.read_manifest_if_valid(directory, package_named_version_schema)
|
|
20
|
+
if (manifest?.name !== package_name) return undefined
|
|
27
21
|
|
|
28
|
-
return
|
|
22
|
+
return manifest.version
|
|
29
23
|
}
|
|
30
24
|
|
|
31
25
|
// Walk up from a resolved file's directory to the package root, returning the version of the first
|
|
32
26
|
// ancestor package.json whose `name` matches the target — or undefined when no matching root exists.
|
|
33
27
|
function walk_up_for_version(start_directory: string, package_name: string): string | undefined {
|
|
34
28
|
for (const directory of ancestor_directories.list(start_directory)) {
|
|
35
|
-
const version = read_matching_version(
|
|
29
|
+
const version = read_matching_version(directory, package_name)
|
|
36
30
|
if (version !== undefined) return version
|
|
37
31
|
}
|
|
38
32
|
|
|
@@ -42,14 +42,15 @@
|
|
|
42
42
|
import { readFileSync, writeFileSync } from 'node:fs'
|
|
43
43
|
import { fileURLToPath } from 'node:url'
|
|
44
44
|
import { json_value } from '#scripts/lib/json-value'
|
|
45
|
-
import {
|
|
45
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
46
46
|
import { execaSync } from 'execa'
|
|
47
47
|
import semver from 'semver'
|
|
48
48
|
import { z } from 'zod'
|
|
49
|
+
import { development_engines_verdict } from './development-engines-verdict'
|
|
50
|
+
import { npm_registry } from './npm-registry'
|
|
49
51
|
import { package_manager_version } from './package-manager-version'
|
|
50
52
|
import { release_age } from './release-age'
|
|
51
53
|
|
|
52
|
-
const PACKAGE_JSON_PATH = 'package.json'
|
|
53
54
|
const PACKAGE_MANAGER_RE = /"packageManager"\s*:\s*"pnpm@(\d+)(?:[^\d]|$)/u
|
|
54
55
|
const PINNED_VERSION_RE = /"packageManager"\s*:\s*"pnpm@([^"+]+)/u
|
|
55
56
|
const TARGET_PREFIX = 'pnpm@'
|
|
@@ -133,13 +134,10 @@ function extract_times_json(stdout: string): Record<string, string> | undefined
|
|
|
133
134
|
// The registry's publish timestamps for every pnpm release (version → ISO date, plus the
|
|
134
135
|
// created/modified bookkeeping keys the selector ignores).
|
|
135
136
|
function query_release_times(): Record<string, string> | undefined {
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
timeout: COMMAND_TIMEOUT_MS,
|
|
139
|
-
})
|
|
140
|
-
if ((result.exitCode ?? FAILURE_EXIT_CODE) !== 0) return undefined
|
|
137
|
+
const answer = npm_registry.view('pnpm', 'time', 'json')
|
|
138
|
+
if (answer.exit_code !== 0) return undefined
|
|
141
139
|
|
|
142
|
-
return extract_times_json(
|
|
140
|
+
return extract_times_json(answer.stdout)
|
|
143
141
|
}
|
|
144
142
|
|
|
145
143
|
function to_resolution(
|
|
@@ -179,13 +177,10 @@ function parse_latest_version(stdout: string): string | undefined {
|
|
|
179
177
|
}
|
|
180
178
|
|
|
181
179
|
function query_latest_version(): string | undefined {
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
timeout: COMMAND_TIMEOUT_MS,
|
|
185
|
-
})
|
|
186
|
-
if ((result.exitCode ?? FAILURE_EXIT_CODE) !== 0) return undefined
|
|
180
|
+
const answer = npm_registry.view('pnpm', 'version', 'json')
|
|
181
|
+
if (answer.exit_code !== 0) return undefined
|
|
187
182
|
|
|
188
|
-
return parse_latest_version(
|
|
183
|
+
return parse_latest_version(answer.stdout)
|
|
189
184
|
}
|
|
190
185
|
|
|
191
186
|
// The target handed to pnpm self-update: an exact registry-resolved version on the pinned major, or
|
|
@@ -239,7 +234,7 @@ function run_pnpm_update(target: string): number {
|
|
|
239
234
|
// match). Runs on every path, not just after a successful bump: a repository that arrives
|
|
240
235
|
// with the two fields already out of step sits in the no-bump steady state forever, so an
|
|
241
236
|
// alignment gated on a bump would never repair it.
|
|
242
|
-
function sync_development_engines(package_json_path: string =
|
|
237
|
+
function sync_development_engines(package_json_path: string = PACKAGE_JSON): void {
|
|
243
238
|
const content = readFileSync(package_json_path, 'utf8')
|
|
244
239
|
const aligned = package_manager_version.align_development_engines_version(content)
|
|
245
240
|
if (aligned === content) return
|
|
@@ -249,10 +244,7 @@ function sync_development_engines(package_json_path: string = PACKAGE_JSON_PATH)
|
|
|
249
244
|
}
|
|
250
245
|
|
|
251
246
|
// Restore the pre-run manifest if self-update fails after changing it.
|
|
252
|
-
function restore_package_json(
|
|
253
|
-
content: string,
|
|
254
|
-
package_json_path: string = PACKAGE_JSON_PATH,
|
|
255
|
-
): void {
|
|
247
|
+
function restore_package_json(content: string, package_json_path: string = PACKAGE_JSON): void {
|
|
256
248
|
writeFileSync(package_json_path, content)
|
|
257
249
|
console.info('✔ Restored package.json pin (pnpm bump failed)')
|
|
258
250
|
}
|
|
@@ -274,20 +266,17 @@ function extract_encoded_integrity(stdout: string): string | undefined {
|
|
|
274
266
|
}
|
|
275
267
|
|
|
276
268
|
function query_integrity(target: string): string | undefined {
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
timeout: COMMAND_TIMEOUT_MS,
|
|
280
|
-
})
|
|
281
|
-
if ((result.exitCode ?? FAILURE_EXIT_CODE) !== 0) return undefined
|
|
269
|
+
const answer = npm_registry.view(target, 'dist.integrity', 'json')
|
|
270
|
+
if (answer.exit_code !== 0) return undefined
|
|
282
271
|
|
|
283
|
-
const encoded = extract_encoded_integrity(
|
|
272
|
+
const encoded = extract_encoded_integrity(answer.stdout)
|
|
284
273
|
if (encoded === undefined) return undefined
|
|
285
274
|
|
|
286
275
|
return decode_integrity(encoded)
|
|
287
276
|
}
|
|
288
277
|
|
|
289
278
|
function restore_integrity(target: string, integrity: string): void {
|
|
290
|
-
const content = readFileSync(
|
|
279
|
+
const content = readFileSync(PACKAGE_JSON, 'utf8')
|
|
291
280
|
const version = target.slice(TARGET_PREFIX.length)
|
|
292
281
|
const expected = `pnpm@${version}`
|
|
293
282
|
const current = PACKAGE_MANAGER_VALUE_RE.exec(content)?.[0]
|
|
@@ -303,10 +292,7 @@ function restore_integrity(target: string, integrity: string): void {
|
|
|
303
292
|
},
|
|
304
293
|
)
|
|
305
294
|
|
|
306
|
-
writeFileSync(
|
|
307
|
-
PACKAGE_JSON_PATH,
|
|
308
|
-
package_manager_version.align_development_engines_version(pinned),
|
|
309
|
-
)
|
|
295
|
+
writeFileSync(PACKAGE_JSON, package_manager_version.align_development_engines_version(pinned))
|
|
310
296
|
}
|
|
311
297
|
|
|
312
298
|
// The equal case is the steady state of every up-to-date run, so it logs as success; only
|
|
@@ -342,7 +328,7 @@ function pin_unpinned_manifest(original: string, target: string, integrity: stri
|
|
|
342
328
|
)
|
|
343
329
|
|
|
344
330
|
writeFileSync(
|
|
345
|
-
|
|
331
|
+
PACKAGE_JSON,
|
|
346
332
|
package_manager_version.align_development_engines_version(`${pinned}\n`),
|
|
347
333
|
)
|
|
348
334
|
|
|
@@ -403,10 +389,11 @@ function bump_to_registry_target(original: string, major: string | undefined): n
|
|
|
403
389
|
}
|
|
404
390
|
|
|
405
391
|
function main(): number {
|
|
406
|
-
const original = readFileSync(
|
|
392
|
+
const original = readFileSync(PACKAGE_JSON, 'utf8')
|
|
407
393
|
const status = bump_to_registry_target(original, extract_pnpm_major(original))
|
|
408
394
|
|
|
409
395
|
sync_development_engines()
|
|
396
|
+
development_engines_verdict.report()
|
|
410
397
|
|
|
411
398
|
return status
|
|
412
399
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
4
|
+
import { stash_pop_cli } from '#scripts/git/stash/stash-pop-cli'
|
|
5
|
+
import { stash_push_cli } from '#scripts/git/stash/stash-push-cli'
|
|
6
|
+
import { resolve_spawn_exit } from '#scripts/lib/spawn-exit'
|
|
7
|
+
import { execaSync } from 'execa'
|
|
8
|
+
import { latest_scope_cli } from './latest-scope-cli'
|
|
9
|
+
|
|
10
|
+
// `josh latest:if-required` — the dependency update a run owes, in one call.
|
|
11
|
+
//
|
|
12
|
+
// `latest:scope` decides; on `required` the tree is set aside, `josh latest` runs, and the stash is
|
|
13
|
+
// popped by its message. Four procedures used to spell that sequence out, and each copy was one more
|
|
14
|
+
// place to drift from the others. `josh latest` itself stays a fixed `sh -c` chain that takes no
|
|
15
|
+
// arguments, so the conditional form is its own command rather than a flag on it.
|
|
16
|
+
//
|
|
17
|
+
// **Every failure leaves the stash where it is.** A failed update can leave `package.json` half
|
|
18
|
+
// rewritten, and a conflicted pop is a stash git keeps — popping onto either would bury the work
|
|
19
|
+
// under conflicts, so the command stops with the message to pop it by.
|
|
20
|
+
|
|
21
|
+
const ARGV_OFFSET = 2
|
|
22
|
+
const USAGE = 'Usage: josh latest:if-required'
|
|
23
|
+
const STASH_MESSAGE = 'josh latest'
|
|
24
|
+
const LATEST_COMMAND: ReadonlyArray<string> = ['josh', 'latest']
|
|
25
|
+
const PNPM = 'pnpm'
|
|
26
|
+
const SUCCESS_EXIT_CODE = 0
|
|
27
|
+
const FAILURE_EXIT_CODE = 1
|
|
28
|
+
const KEPT_STASH_HINT = `the stash is kept — pop it with \`pnpm josh stash:pop "${STASH_MESSAGE}"\``
|
|
29
|
+
// A conflicted pop has already applied the stash, so popping it again would apply it twice.
|
|
30
|
+
const CONFLICTED_STASH_HINT = `the stash "${STASH_MESSAGE}" is applied and still kept — resolve the conflicts, then drop it`
|
|
31
|
+
|
|
32
|
+
function run_latest(): number {
|
|
33
|
+
const result = execaSync(PNPM, LATEST_COMMAND, { stdio: 'inherit', reject: false })
|
|
34
|
+
|
|
35
|
+
return resolve_spawn_exit(PNPM, result)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function stop(reason: string): number {
|
|
39
|
+
console.error(`latest:if-required stopped: ${reason}`)
|
|
40
|
+
|
|
41
|
+
return FAILURE_EXIT_CODE
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function refuse(): number {
|
|
45
|
+
console.error(USAGE)
|
|
46
|
+
|
|
47
|
+
return FAILURE_EXIT_CODE
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function restore(): Promise<number> {
|
|
51
|
+
const code = await stash_pop_cli.run([STASH_MESSAGE])
|
|
52
|
+
|
|
53
|
+
if (code !== SUCCESS_EXIT_CODE) return stop(`the pop failed — ${KEPT_STASH_HINT}`)
|
|
54
|
+
if (await git_stash.has_conflict()) return stop(`the pop conflicted — ${CONFLICTED_STASH_HINT}`)
|
|
55
|
+
|
|
56
|
+
return SUCCESS_EXIT_CODE
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function update(): Promise<number> {
|
|
60
|
+
const verdict = await stash_push_cli.set_aside({ message: STASH_MESSAGE, dir: undefined })
|
|
61
|
+
const is_stashed = verdict === stash_push_cli.STASHED_VERDICT
|
|
62
|
+
const code = run_latest()
|
|
63
|
+
|
|
64
|
+
if (code !== SUCCESS_EXIT_CODE) {
|
|
65
|
+
return stop(is_stashed ? `josh latest failed — ${KEPT_STASH_HINT}` : 'josh latest failed')
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return is_stashed ? await restore() : SUCCESS_EXIT_CODE
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// The scope on stdout and its reason on stderr, the split `latest:scope` prints in, so the log
|
|
72
|
+
// says why the update ran or did not.
|
|
73
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
74
|
+
if (argv.length > 0) return refuse()
|
|
75
|
+
|
|
76
|
+
const decision = latest_scope_cli.scope_decision()
|
|
77
|
+
|
|
78
|
+
console.info(decision.scope)
|
|
79
|
+
console.error(decision.reason)
|
|
80
|
+
if (decision.scope === latest_scope_cli.SKIPPED_SCOPE) return SUCCESS_EXIT_CODE
|
|
81
|
+
|
|
82
|
+
return await update()
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
86
|
+
process.exitCode = await run(argv)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const latest_if_required_cli = { run, STASH_MESSAGE }
|
|
90
|
+
|
|
91
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
92
|
+
|
|
93
|
+
export { latest_if_required_cli }
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { latest_lane_guard } from './latest-lane-guard'
|
|
4
|
+
|
|
5
|
+
// The `josh latest:guard` entry, kept apart from `latest-lane-guard.ts` because `latest:scope` imports
|
|
6
|
+
// that one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186). The guard takes no arguments and sets its own exit code.
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) latest_lane_guard.main()
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
1
|
import { lane_paths, type LaneEnvironment } from '#scripts/lane/lane-paths'
|
|
4
2
|
|
|
5
3
|
// Refuse a dependency update inside a lane.
|
|
@@ -44,6 +42,4 @@ const latest_lane_guard = {
|
|
|
44
42
|
main,
|
|
45
43
|
}
|
|
46
44
|
|
|
47
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) main()
|
|
48
|
-
|
|
49
45
|
export { latest_lane_guard }
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
1
|
import { latest_lane_guard } from './latest-lane-guard'
|
|
4
2
|
import { latest_stamp, type LatestStamp } from './latest-stamp'
|
|
5
3
|
|
|
@@ -14,7 +12,6 @@ import { latest_stamp, type LatestStamp } from './latest-stamp'
|
|
|
14
12
|
// paths*, and this decides from *when the last run happened*. The flag parsing and the printing are the small half;
|
|
15
13
|
// the read of the diff is what that module exists for, and this command never makes one.
|
|
16
14
|
|
|
17
|
-
const ARGV_OFFSET = 2
|
|
18
15
|
const USAGE = 'Usage: josh latest:scope [--record] [--json]'
|
|
19
16
|
const JSON_KEY = 'scope'
|
|
20
17
|
const JSON_FLAG = '--json'
|
|
@@ -124,10 +121,6 @@ function run(argv: ReadonlyArray<string>): number {
|
|
|
124
121
|
return 0
|
|
125
122
|
}
|
|
126
123
|
|
|
127
|
-
function main(argv: ReadonlyArray<string>): void {
|
|
128
|
-
process.exitCode = run(argv)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
124
|
const latest_scope_cli = {
|
|
132
125
|
decide,
|
|
133
126
|
JSON_KEY,
|
|
@@ -140,6 +133,4 @@ const latest_scope_cli = {
|
|
|
140
133
|
USAGE,
|
|
141
134
|
}
|
|
142
135
|
|
|
143
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) main(process.argv.slice(ARGV_OFFSET))
|
|
144
|
-
|
|
145
136
|
export { latest_scope_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { latest_scope_cli } from './latest-scope-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh latest:scope` entry, kept apart from `latest-scope-cli.ts` because other modules import
|
|
6
|
+
// that one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = latest_scope_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { readFileSync, writeFileSync } from 'node:fs'
|
|
8
8
|
import { fileURLToPath } from 'node:url'
|
|
9
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
9
10
|
import { file_reader } from '#scripts/lib/read-file'
|
|
10
11
|
import { lockfile_overrides } from '#scripts/overrides/lockfile-overrides'
|
|
11
12
|
import { overrides_files } from '#scripts/overrides/overrides-files'
|
|
@@ -16,7 +17,6 @@ import { latest_regression, type VersionRegression } from './latest-regression'
|
|
|
16
17
|
import { playwright_browsers } from './playwright-browsers'
|
|
17
18
|
import { safe_chain_version_update } from './safe-chain-version-update'
|
|
18
19
|
|
|
19
|
-
const PACKAGE_JSON_PATH = 'package.json'
|
|
20
20
|
const LOCKFILE_PATH = 'pnpm-lock.yaml'
|
|
21
21
|
|
|
22
22
|
interface TreeSnapshot {
|
|
@@ -44,7 +44,7 @@ function run_update_stages(stages: Array<Array<string>>): number {
|
|
|
44
44
|
|
|
45
45
|
function take_snapshot(): TreeSnapshot {
|
|
46
46
|
return {
|
|
47
|
-
package_json: readFileSync(
|
|
47
|
+
package_json: readFileSync(PACKAGE_JSON, 'utf8'),
|
|
48
48
|
lockfile: file_reader.read_file_or_empty(LOCKFILE_PATH),
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -54,7 +54,7 @@ function take_snapshot(): TreeSnapshot {
|
|
|
54
54
|
// "the latest release is <older>". The captured lockfile still carries the resolved URL and
|
|
55
55
|
// integrity, which installs fine.
|
|
56
56
|
function restore_snapshot(snapshot: TreeSnapshot): void {
|
|
57
|
-
writeFileSync(
|
|
57
|
+
writeFileSync(PACKAGE_JSON, snapshot.package_json)
|
|
58
58
|
if (snapshot.lockfile.length > 0) writeFileSync(LOCKFILE_PATH, snapshot.lockfile)
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -71,7 +71,7 @@ function report_kept_back(regressions: ReadonlyArray<VersionRegression>): void {
|
|
|
71
71
|
const PNPM_UPDATE_ALL_TIERS = ['pnpm', 'update']
|
|
72
72
|
|
|
73
73
|
function build_update_commands(): Array<Array<string>> {
|
|
74
|
-
const content = readFileSync(
|
|
74
|
+
const content = readFileSync(PACKAGE_JSON, 'utf8')
|
|
75
75
|
const latest = overrides_check.build_update_command(
|
|
76
76
|
overrides_files.read_current_overrides(),
|
|
77
77
|
content,
|
|
@@ -87,7 +87,7 @@ interface UpdateOutcome {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
function find_regressions_after_update(snapshot: TreeSnapshot): Array<VersionRegression> {
|
|
90
|
-
const after = readFileSync(
|
|
90
|
+
const after = readFileSync(PACKAGE_JSON, 'utf8')
|
|
91
91
|
|
|
92
92
|
return latest_regression.find_regressions(snapshot.package_json, after)
|
|
93
93
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { json_value } from '#scripts/lib/json-value'
|
|
2
|
-
import { FETCH_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
3
|
-
import { migrate_logic } from '#scripts/registry-migration/migrate-logic'
|
|
2
|
+
import { COMMAND_TIMEOUT_MS, FETCH_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
4
3
|
import { execaSync } from 'execa'
|
|
5
4
|
import semver from 'semver'
|
|
6
5
|
import { z } from 'zod'
|
|
@@ -18,8 +17,19 @@ const SCOPE_SEPARATOR = '/'
|
|
|
18
17
|
const ENCODED_SCOPE_SEPARATOR = '%2f'
|
|
19
18
|
const SCOPE_PATTERN = /^@[^/]+(?=\/)/u
|
|
20
19
|
const SCOPE_REGISTRY_SUFFIX = ':registry'
|
|
20
|
+
const GITHUB_REGISTRY_HOST = 'npm.pkg.github.com'
|
|
21
|
+
const PNPM = 'pnpm'
|
|
22
|
+
const JSON_FLAG = '--json'
|
|
23
|
+
const FAILURE_EXIT_CODE = 1
|
|
21
24
|
const github_scopes = new Map<string, boolean>()
|
|
22
25
|
|
|
26
|
+
type ViewFormat = 'json' | 'text'
|
|
27
|
+
|
|
28
|
+
interface ViewAnswer {
|
|
29
|
+
exit_code: number
|
|
30
|
+
stdout: string
|
|
31
|
+
}
|
|
32
|
+
|
|
23
33
|
// The version commands are synchronous end to end and exported that way to consumers, so the
|
|
24
34
|
// request runs in a child Node process rather than turning the whole chain async. Node's own
|
|
25
35
|
// `fetch` needs no external binary, and a non-2xx answer exits non-zero so it reads as "no answer".
|
|
@@ -53,19 +63,30 @@ function read_packument(package_name: string, accept: string): unknown {
|
|
|
53
63
|
return json_value.parse_or_undefined(result.stdout)
|
|
54
64
|
}
|
|
55
65
|
|
|
56
|
-
//
|
|
57
|
-
|
|
66
|
+
// The host is compared, not searched for, so a registry carrying it only in its path is not GitHub.
|
|
67
|
+
function is_github_registry(value: string): boolean {
|
|
68
|
+
try {
|
|
69
|
+
const url = new URL(value)
|
|
70
|
+
|
|
71
|
+
return url.protocol === 'https:' && url.hostname === GITHUB_REGISTRY_HOST
|
|
72
|
+
} catch {
|
|
73
|
+
return false
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Whether this checkout installs the package's scope from GitHub Packages, read with
|
|
78
|
+
// `pnpm config get` (project `.npmrc` over user `~/.npmrc`). The two
|
|
58
79
|
// registries are published by parallel jobs and can drift, so a consumer routed to GitHub Packages
|
|
59
80
|
// keeps reading it: public npm could otherwise offer a release its registry does not carry yet.
|
|
60
81
|
// Memoized per scope — kit and app-kit share one, and one report asks for both packages.
|
|
61
82
|
function is_github_scope(scope: string): boolean {
|
|
62
83
|
const is_cached_github = github_scopes.get(scope)
|
|
63
84
|
if (is_cached_github !== undefined) return is_cached_github
|
|
64
|
-
const result = execaSync(
|
|
85
|
+
const result = execaSync(PNPM, ['config', 'get', `${scope}${SCOPE_REGISTRY_SUFFIX}`], {
|
|
65
86
|
reject: false,
|
|
66
87
|
timeout: FETCH_TIMEOUT_MS,
|
|
67
88
|
})
|
|
68
|
-
const is_github = result.exitCode === 0 &&
|
|
89
|
+
const is_github = result.exitCode === 0 && is_github_registry(result.stdout.trim())
|
|
69
90
|
|
|
70
91
|
github_scopes.set(scope, is_github)
|
|
71
92
|
|
|
@@ -106,6 +127,21 @@ function has_public_version(package_name: string, version: string): boolean {
|
|
|
106
127
|
return parsed.success && parsed.data.time[version] !== undefined
|
|
107
128
|
}
|
|
108
129
|
|
|
130
|
+
// A `pnpm view` answer, for a question that has to see what the package manager sees: the
|
|
131
|
+
// checkout's own registry routing, and safe-chain's minimum-age filter when it is shimmed on PATH.
|
|
132
|
+
// `pnpm` rather than `npm`, because npm refuses to run at all inside a project whose
|
|
133
|
+
// `devEngines.packageManager` names pnpm with an `onFail` other than `"warn"` / `"ignore"` (kit
|
|
134
|
+
// ships `"download"`), failing with EBADDEVENGINES instead of answering.
|
|
135
|
+
function view(spec: string, field: string, format: ViewFormat = 'text'): ViewAnswer {
|
|
136
|
+
const format_arguments = format === 'json' ? [JSON_FLAG] : []
|
|
137
|
+
const result = execaSync(PNPM, ['view', spec, field, ...format_arguments], {
|
|
138
|
+
reject: false,
|
|
139
|
+
timeout: COMMAND_TIMEOUT_MS,
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
return { exit_code: result.exitCode ?? FAILURE_EXIT_CODE, stdout: result.stdout }
|
|
143
|
+
}
|
|
144
|
+
|
|
109
145
|
// The version itself, or nothing when it is not exactly a semver version.
|
|
110
146
|
function valid_version(value: string): string | undefined {
|
|
111
147
|
return version_schema.safeParse(value).success ? value : undefined
|
|
@@ -117,6 +153,8 @@ const npm_registry = {
|
|
|
117
153
|
read_latest,
|
|
118
154
|
read_release_times,
|
|
119
155
|
valid_version,
|
|
156
|
+
view,
|
|
120
157
|
}
|
|
121
158
|
|
|
122
159
|
export { npm_registry }
|
|
160
|
+
export type { ViewAnswer }
|
|
@@ -9,8 +9,8 @@ import { existsSync, readFileSync } from 'node:fs'
|
|
|
9
9
|
import path from 'node:path'
|
|
10
10
|
import { fileURLToPath } from 'node:url'
|
|
11
11
|
import { adopt_toolkits } from '#scripts/adopt/adopt-toolkits'
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
13
|
+
import { npm_registry } from './npm-registry'
|
|
14
14
|
import { peer_floor } from './peer-floor'
|
|
15
15
|
import {
|
|
16
16
|
publishable_range,
|
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
type RangeProbe,
|
|
20
20
|
} from './publishable-range'
|
|
21
21
|
|
|
22
|
-
const PACKAGE_JSON_PATH = 'package.json'
|
|
23
22
|
const FAILURE_EXIT_CODE = 1
|
|
24
23
|
const NODE_MODULES = 'node_modules'
|
|
25
24
|
|
|
@@ -27,18 +26,8 @@ const NODE_MODULES = 'node_modules'
|
|
|
27
26
|
// managers on PATH, so the answer comes back already filtered by the same minimum-age policy a
|
|
28
27
|
// consumer installs under. A plain fetch would read the unfiltered registry and pass a range no
|
|
29
28
|
// consumer can resolve — the exact blind spot this guard exists to close.
|
|
30
|
-
//
|
|
31
|
-
// `pnpm view` rather than `npm view` because npm refuses to run at all inside a project whose
|
|
32
|
-
// `devEngines.packageManager` names pnpm with an `onFail` other than `"warn"` / `"ignore"` (kit
|
|
33
|
-
// ships `"download"`, which npm refuses on just the same), failing every probe with
|
|
34
|
-
// EBADDEVENGINES instead of answering. Both are shimmed, so the filtered view is preserved.
|
|
35
29
|
function probe_range(name: string, range: string): ProbeResult {
|
|
36
|
-
|
|
37
|
-
reject: false,
|
|
38
|
-
timeout: COMMAND_TIMEOUT_MS,
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
return { exit_code: result.exitCode ?? FAILURE_EXIT_CODE, stdout: result.stdout }
|
|
30
|
+
return npm_registry.view(`${name}@${range}`, 'version')
|
|
42
31
|
}
|
|
43
32
|
|
|
44
33
|
function report(violations: ReadonlyArray<PublishedRange>, total: number): number {
|
|
@@ -90,14 +79,14 @@ function check_peer_floors(
|
|
|
90
79
|
function read_installed_toolkit_manifests(project_root: string): Array<string> {
|
|
91
80
|
return adopt_toolkits
|
|
92
81
|
.all_declared_toolkits(project_root)
|
|
93
|
-
.map((package_name) => path.join(project_root, NODE_MODULES, package_name,
|
|
82
|
+
.map((package_name) => path.join(project_root, NODE_MODULES, package_name, PACKAGE_JSON))
|
|
94
83
|
.filter((manifest_path) => existsSync(manifest_path))
|
|
95
84
|
.map((manifest_path) => readFileSync(manifest_path, 'utf8'))
|
|
96
85
|
}
|
|
97
86
|
|
|
98
87
|
// Both checks always run, so one invocation reports everything there is to fix.
|
|
99
88
|
function main(): void {
|
|
100
|
-
const package_json_content = readFileSync(
|
|
89
|
+
const package_json_content = readFileSync(PACKAGE_JSON, 'utf8')
|
|
101
90
|
const range_exit_code = check(package_json_content, probe_range)
|
|
102
91
|
const toolkit_json_contents = read_installed_toolkit_manifests(process.cwd())
|
|
103
92
|
const peer_exit_code = check_peer_floors(package_json_content, toolkit_json_contents)
|