@joshuafolkken/kit 1.1514.0 → 1.1784.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/settings.json +5 -5
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +5 -5
- package/.claude/skills/workflow-commands/background-commands.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +10 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +17 -13
- package/.claude/skills/workflow-commands/backlogrun-park.md +14 -23
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +13 -7
- package/.claude/skills/workflow-commands/delegation.md +6 -5
- package/.claude/skills/workflow-commands/entry-sequence.md +9 -9
- package/.claude/skills/workflow-commands/followup.md +9 -31
- package/.claude/skills/workflow-commands/fullrun-steps.md +36 -45
- package/.claude/skills/workflow-commands/fullrun.md +2 -2
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +16 -12
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +1 -1
- package/.claude/skills/workflow-commands/pre-gate-cut.md +13 -30
- package/.claude/skills/workflow-commands/prerequisite.md +10 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +13 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +120 -10
- package/.github/workflows/publish.yml +8 -1
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +3 -7
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +3 -7
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +79 -37
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-TNUMY6NL.js → chunk-PT5R6UJD.js} +4193 -1900
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-APUO6U4J.js → chunk-WR2KQAYZ.js} +1843 -440
- package/dist/hooks/{chunk-O6GDRNJB.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +5 -6
- package/dist/hooks/inputs.json +443 -317
- package/dist/hooks/pretool-guard.js +7 -25
- package/dist/hooks/session-lang.js +44 -51
- package/dist/hooks/stop-guard.js +7716 -2187
- package/dist/josh.js +6002 -3583
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +3 -1
- package/package.json +10 -48
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -7
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +33 -16
- package/prompts/collaboration-workflow/lane-instructions.md +1 -2
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +4 -6
- package/prompts/collaboration-workflow/output-bounds.md +2 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +5 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +2 -2
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +14 -4
- package/prompts/collaboration-workflow/wip-cap.md +1 -1
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +41 -21
- package/prompts/testing-guide.md +8 -43
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +14 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +53 -6
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +30 -7
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/investigation-guard.ts +0 -8
- package/scripts/delegation/investigation-reads.ts +3 -4
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +8 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +80 -98
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +37 -5
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-ledger.ts +32 -4
- package/scripts/gate/gate-plan.ts +41 -34
- package/scripts/gate/gate-report.ts +14 -2
- package/scripts/gate/gate-run-steps.ts +53 -8
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +27 -24
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-write.ts +67 -29
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +2 -2
- package/scripts/git/main-merge.ts +25 -9
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +0 -8
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +30 -3
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +32 -19
- package/scripts/hooks/reserved-run.ts +67 -9
- package/scripts/hooks/run-hook.sh +13 -4
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +2 -21
- package/scripts/hooks/stop-guard.ts +13 -9
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +34 -78
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/expected-effect-lint.ts +1 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +0 -9
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +12 -7
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +81 -90
- package/scripts/issue/issue-lint-cli.ts +2 -10
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +111 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +15 -43
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +157 -158
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +111 -71
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +103 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-logic.ts +6 -13
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +62 -21
- package/scripts/lane/lane-child-invocation.ts +8 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +24 -3
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +92 -123
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-measure-cli.ts +57 -11
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +24 -3
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +19 -5
- package/scripts/lane/lane-session-broker.ts +102 -21
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw.ts +50 -49
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon.ts +265 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +279 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +62 -30
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +18 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +6 -15
- package/scripts/report/report-format-reference.ts +2 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +81 -15
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +8 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +80 -2
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +7 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +4 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +9 -1
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +1 -1
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +1 -1
- package/scripts/rules/shell-segments.ts +35 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +3 -4
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +82 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +116 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +151 -27
- package/scripts/run/board/run-board-reason.ts +235 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +207 -265
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +2 -2
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +147 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +122 -107
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry.ts +9 -4
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +6 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +34 -8
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +62 -48
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +33 -9
- package/scripts/run/merge/run-merge-steps.ts +120 -85
- package/scripts/run/merge/run-merge.ts +38 -37
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review.ts +2 -1
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +63 -140
- package/scripts/run/ship/run-ship-detach.ts +19 -8
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +18 -2
- package/scripts/run/ship/run-ship-overlap.ts +42 -5
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +81 -24
- package/scripts/run/ship/run-ship-preflight.ts +137 -32
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +107 -23
- package/scripts/run/ship/run-ship-review-steps.ts +105 -151
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +43 -6
- package/scripts/run/ship/run-ship.ts +30 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +3 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +15 -0
- package/scripts/split/split-measure.ts +65 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +42 -24
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +61 -149
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +10 -1
- package/scripts/time-runtime/time-shell.ts +97 -10
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +4 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import type { CommandUsage } from './josh-command-types'
|
|
2
|
-
|
|
3
|
-
// The usage of the commands `docs/josh-commands-automation.md` documents under "Workflow",
|
|
4
|
-
// "Versioning", "Maintenance" and "Git hooks", keyed by command name. The page's usage blocks are
|
|
5
|
-
// generated from this table and `josh help <command>` prints it, so an example or a flag is written
|
|
6
|
-
// once, here (#3939).
|
|
7
|
-
const PR_TITLE = '"PR title #N"'
|
|
8
|
-
const ISSUE_URL = '--issue-url "https://..."'
|
|
9
|
-
const REVIEW_ISSUE = '--issue 2325'
|
|
10
|
-
const CHECK = '--check'
|
|
11
|
-
const JSON_FLAG = '--json'
|
|
12
|
-
const BODY_FILE_NOTE =
|
|
13
|
-
'(`-` reads stdin); use this whenever the body carries a backtick or `$`. Passing both forms is refused.'
|
|
14
|
-
|
|
15
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
16
|
-
const WORKFLOW_USAGE: Readonly<Record<string, CommandUsage>> = {
|
|
17
|
-
followup: {
|
|
18
|
-
examples: [
|
|
19
|
-
{ arguments: PR_TITLE, note: 'merges (default)' },
|
|
20
|
-
{ arguments: String.raw`${PR_TITLE} --notify-message "Implemented X:\n- change 1"` },
|
|
21
|
-
{ arguments: `${PR_TITLE} --notify-message-file completion.md` },
|
|
22
|
-
{ arguments: `${PR_TITLE} --ai-review-ignore-reason "false positive"` },
|
|
23
|
-
{ arguments: `${PR_TITLE} --no-merge`, note: 'do the work, leave the PR open' },
|
|
24
|
-
],
|
|
25
|
-
flags: [
|
|
26
|
-
{
|
|
27
|
-
names: ['--no-merge'],
|
|
28
|
-
description:
|
|
29
|
-
'do the follow-up work but do not merge; leaves the PR open (the only flag that stops the merge). `--merge` is a deprecated no-op. A PR already merged by hand skips the CI wait, the AI-review scan and the merge and runs only the post-merge tail; a completion report already on the Issue is not posted again.',
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
names: ['--notify-message'],
|
|
33
|
-
description: 'inline completion body; `\\n` expands to newlines.',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
names: ['--notify-message-file'],
|
|
37
|
-
description: `read the completion body from a file ${BODY_FILE_NOTE}`,
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
names: ['--ai-review-ignore-reason'],
|
|
41
|
-
description: 'reason to dismiss an AI-review finding.',
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
},
|
|
45
|
-
notify: {
|
|
46
|
-
examples: [
|
|
47
|
-
{ arguments: String.raw`--task-type planning ${ISSUE_URL} --body="- bullet 1\n- bullet 2"` },
|
|
48
|
-
{
|
|
49
|
-
arguments: `--task-type confirmation ${ISSUE_URL} --body-file r.md --recommended "Go" --alternative "Wait"`,
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
flags: [
|
|
53
|
-
{
|
|
54
|
-
names: ['--task-type'],
|
|
55
|
-
description:
|
|
56
|
-
'one of `planning` 📋, `completion` ✅, `failure` ❌, `warning` ⚠️, `kickoff_retry` 🔄, `confirmation` ⏸️. Do not send `completion` or `warning` by hand — `josh followup` sends them.',
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
names: ['--body', "--body=$'…'"],
|
|
60
|
-
description: "inline body; use `--body=$'…'` when it starts with `-`.",
|
|
61
|
-
},
|
|
62
|
-
{ names: ['--body-file'], description: `read the body from a file ${BODY_FILE_NOTE}` },
|
|
63
|
-
{
|
|
64
|
-
names: ['--repo-name', '--issue-url', '--pr-url'],
|
|
65
|
-
description:
|
|
66
|
-
'header repository, resolved in that order, then the working directory. The issue title is read from `--issue-url`.',
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
names: ['--recommended', '--alternative'],
|
|
70
|
-
description:
|
|
71
|
-
'the choices appended under `JOSH_SESSION_LANG` headings; `--recommended` is required for `confirmation`, `--alternative` is repeatable.',
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
'observations:flush': { examples: [{ arguments: '' }] },
|
|
76
|
-
'measure:rerun': { examples: [{ arguments: '2212' }] },
|
|
77
|
-
'review:record': {
|
|
78
|
-
examples: [
|
|
79
|
-
{ arguments: `${REVIEW_ISSUE} bug-risks:medium:src/foo.ts:42 tests:low:a.test.ts` },
|
|
80
|
-
{ arguments: REVIEW_ISSUE, note: 'a zero-finding round — records one `none` line' },
|
|
81
|
-
{
|
|
82
|
-
arguments: `${REVIEW_ISSUE} --comment`,
|
|
83
|
-
note: 'a round that passed after the PR opened — an Issue comment, no append',
|
|
84
|
-
},
|
|
85
|
-
{ arguments: `${CHECK} ${REVIEW_ISSUE}`, note: 'the merge gate: was it recorded?' },
|
|
86
|
-
],
|
|
87
|
-
},
|
|
88
|
-
bump: { examples: [{ arguments: 'major' }, { arguments: 'minor' }, { arguments: 'patch' }] },
|
|
89
|
-
release: {
|
|
90
|
-
examples: [
|
|
91
|
-
{ arguments: '' },
|
|
92
|
-
{ arguments: '--dry-run', note: 'count and report, write nothing' },
|
|
93
|
-
],
|
|
94
|
-
flags: [
|
|
95
|
-
{
|
|
96
|
-
names: ['--dry-run'],
|
|
97
|
-
description:
|
|
98
|
-
'count and report only; writes nothing, fetches nothing, and creates no work tree.',
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
names: ['--help', '-h'],
|
|
102
|
-
description:
|
|
103
|
-
'print the usage line and exit 0 without fetching or releasing. Any other argument is refused with the usage line and a non-zero exit, before anything is fetched.',
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
},
|
|
107
|
-
'release:scope': {
|
|
108
|
-
examples: [
|
|
109
|
-
{ arguments: '', note: '→ required | skip | unknown' },
|
|
110
|
-
{ arguments: '--json', note: '{"scope":"…","reason":"…"} on one line' },
|
|
111
|
-
],
|
|
112
|
-
},
|
|
113
|
-
'ruleset:check': {
|
|
114
|
-
examples: [
|
|
115
|
-
{ arguments: '', note: 'report only' },
|
|
116
|
-
{ arguments: '--apply', note: 'add the missing checks to the existing rule' },
|
|
117
|
-
],
|
|
118
|
-
flags: [
|
|
119
|
-
{
|
|
120
|
-
names: ['--apply'],
|
|
121
|
-
description:
|
|
122
|
-
"append the missing checks to the ruleset's required-checks rule (or to the branch protection's contexts). It never creates a ruleset: with none, create one under Settings → Rules → Rulesets, then rerun. Writing a repository setting needs admin access, so only this flag writes — `josh sync` and `josh doctor` never do.",
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
},
|
|
126
|
-
'audit:provision': {
|
|
127
|
-
examples: [
|
|
128
|
-
{ arguments: '', note: 'no-op if a scanner is already present' },
|
|
129
|
-
{ arguments: '--force', note: 'ignore backoff, allow a longer download' },
|
|
130
|
-
],
|
|
131
|
-
flags: [
|
|
132
|
-
{
|
|
133
|
-
names: ['--force'],
|
|
134
|
-
description:
|
|
135
|
-
'ignore the 6-hour failure backoff and allow a longer download window; the command to run after fixing a network problem.',
|
|
136
|
-
},
|
|
137
|
-
],
|
|
138
|
-
},
|
|
139
|
-
'reconcile-templates': {
|
|
140
|
-
examples: [
|
|
141
|
-
{ arguments: '', note: 'regenerate copy templates + record tripwire hashes' },
|
|
142
|
-
{ arguments: CHECK, note: 'verify templates are in sync; non-zero on drift' },
|
|
143
|
-
],
|
|
144
|
-
flags: [
|
|
145
|
-
{
|
|
146
|
-
names: [CHECK],
|
|
147
|
-
description:
|
|
148
|
-
'verify only; exits non-zero on drift. A pre-commit hook runs this when a tracked source or copy template is staged.',
|
|
149
|
-
},
|
|
150
|
-
],
|
|
151
|
-
},
|
|
152
|
-
'pre-push-unit': { examples: [{ arguments: '' }] },
|
|
153
|
-
'reserved-run': {
|
|
154
|
-
examples: [
|
|
155
|
-
{ arguments: '2 -- pnpm install', note: 'hold 2 cores while installing' },
|
|
156
|
-
{ arguments: '1 -- pnpm josh audit', note: 'hold 1 core while scanning' },
|
|
157
|
-
],
|
|
158
|
-
},
|
|
159
|
-
'pre-commit-type-check': { examples: [{ arguments: '' }] },
|
|
160
|
-
'pr:classification': {
|
|
161
|
-
examples: [{ arguments: '', note: 'run by CI on a pull request; fails without one label' }],
|
|
162
|
-
},
|
|
163
|
-
'observation:record': {
|
|
164
|
-
examples: [
|
|
165
|
-
{ arguments: "flaky-e2e d1 'tests/e2e/login.test.ts' 'times out on CI only'" },
|
|
166
|
-
{
|
|
167
|
-
arguments: "flaky-e2e d1 'src/app.ts' 'fails there too' --checkout ~/Development/app",
|
|
168
|
-
note: "another repository's ledger",
|
|
169
|
-
},
|
|
170
|
-
],
|
|
171
|
-
flags: [
|
|
172
|
-
{
|
|
173
|
-
names: ['--checkout <path>'],
|
|
174
|
-
description: "count and append in that repository's `.josh/observations/` instead.",
|
|
175
|
-
},
|
|
176
|
-
],
|
|
177
|
-
},
|
|
178
|
-
'release:github': {
|
|
179
|
-
examples: [
|
|
180
|
-
{ arguments: '', note: 'run by CI with GH_TOKEN, RELEASE_TAG and GITHUB_REPOSITORY set' },
|
|
181
|
-
],
|
|
182
|
-
},
|
|
183
|
-
'latest:scope': {
|
|
184
|
-
examples: [
|
|
185
|
-
{ arguments: '', note: 'required or skip, the reason on stderr' },
|
|
186
|
-
{ arguments: '--record', note: 'note a finished josh latest run' },
|
|
187
|
-
{ arguments: JSON_FLAG, note: 'the verdict and the reason as JSON' },
|
|
188
|
-
],
|
|
189
|
-
flags: [
|
|
190
|
-
{ names: ['--record'], description: 'write the completion record `josh latest` ends with.' },
|
|
191
|
-
{ names: [JSON_FLAG], description: 'emit the verdict and its reason as JSON.' },
|
|
192
|
-
],
|
|
193
|
-
},
|
|
194
|
-
'latest:guard': { examples: [{ arguments: '', note: 'refuses inside a lane' }] },
|
|
195
|
-
'prevent-main-commit': { examples: [{ arguments: '', note: 'run by the pre-commit hook' }] },
|
|
196
|
-
'check-commit-message': {
|
|
197
|
-
examples: [{ arguments: '.git/COMMIT_EDITMSG', note: 'run by the commit-msg hook' }],
|
|
198
|
-
},
|
|
199
|
-
'secretlint-scan': {
|
|
200
|
-
examples: [{ arguments: 'src/app.ts .env.example', note: 'the staged paths' }],
|
|
201
|
-
},
|
|
202
|
-
'pre-commit-lint': {
|
|
203
|
-
examples: [
|
|
204
|
-
{ arguments: 'cspell src/app.ts' },
|
|
205
|
-
{ arguments: 'prettier src/app.ts' },
|
|
206
|
-
{ arguments: 'eslint src/app.ts' },
|
|
207
|
-
],
|
|
208
|
-
},
|
|
209
|
-
}
|
|
210
|
-
/* eslint-enable @typescript-eslint/naming-convention */
|
|
211
|
-
|
|
212
|
-
export { WORKFLOW_USAGE }
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { FAIL_EXIT_CODE, type BufferedProcessResult } from '#scripts/lib/buffered-process'
|
|
2
|
-
import type { ESLint } from 'eslint'
|
|
3
|
-
|
|
4
|
-
// Some rules read other files, and the lint cache keys a verdict on the linted file's own content.
|
|
5
|
-
// So once the other file is fixed, the untouched one keeps its cached error until its own content
|
|
6
|
-
// changes. `import/no-cycle` did it first (joshuafolkken/kit#3641): a cycle closed by editing one
|
|
7
|
-
// side stayed reported on the other. The type-aware rules do it too (joshuafolkken/kit#3667): a call
|
|
8
|
-
// to a function its module did not export yet stays `no-unsafe-call` after the export is added.
|
|
9
|
-
//
|
|
10
|
-
// A red lint run therefore re-reads its cached report: the files reported for a rule that reads
|
|
11
|
-
// other files are linted once more without the cache, and their fresh results replace the cached
|
|
12
|
-
// ones. A green run never reaches this, so the green path costs what it did.
|
|
13
|
-
//
|
|
14
|
-
// Which rules those are is the rule's own statement, never a list kept here: a type-aware rule
|
|
15
|
-
// declares `requiresTypeChecking`, and the `import` plugin's rules resolve the modules they name.
|
|
16
|
-
// That plugin answers to two names: the base config registers it as `import`, and its own preset —
|
|
17
|
-
// whose rules a hand-authored `.js` file keeps — as `import-x`.
|
|
18
|
-
//
|
|
19
|
-
// Only a stale red is re-read. A stale green — the other file broke, the untouched one still
|
|
20
|
-
// answers clean — is not something a report can point at; the type check is what catches it.
|
|
21
|
-
//
|
|
22
|
-
// That holds for a run narrowed to one change's files as much as for the whole tree: the change can
|
|
23
|
-
// hold both files, and the one a later edit leaves alone keeps its cached report.
|
|
24
|
-
//
|
|
25
|
-
// The cached run is asked again through the Node API rather than read off the first run's report:
|
|
26
|
-
// that report is the stylish text, and taking a file out of it means re-deriving its problem
|
|
27
|
-
// counts. The second asking is answered from the cache the first one just wrote.
|
|
28
|
-
const IMPORT_RULE_PATTERN = /^import(?:-x)?\//u
|
|
29
|
-
const FORMATTER = 'stylish'
|
|
30
|
-
const UNCACHED_SUFFIX = '.uncached'
|
|
31
|
-
|
|
32
|
-
type RulesMeta = ESLint.LintResultData['rulesMeta']
|
|
33
|
-
|
|
34
|
-
interface Linters {
|
|
35
|
-
cached: ESLint
|
|
36
|
-
fresh: ESLint
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
interface CrossFileRecheckOptions {
|
|
40
|
-
cache_file: string
|
|
41
|
-
// What the run linted — the whole tree, or one change's files — so the cached run is asked the
|
|
42
|
-
// question it was asked the first time.
|
|
43
|
-
patterns: ReadonlyArray<string>
|
|
44
|
-
// What the fixture test varies: the directory linted and the configuration it is linted with.
|
|
45
|
-
eslint_options?: ESLint.Options
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// The exit code is eslint's "finished and reported problems", not any failure: a run that could not
|
|
49
|
-
// finish — a configuration that does not load, a rule that threw — exits 2, and asking it again
|
|
50
|
-
// throws the same error here, ahead of both buffered reports.
|
|
51
|
-
function is_red(result: BufferedProcessResult): boolean {
|
|
52
|
-
return result.exit_code === FAIL_EXIT_CODE
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// `requiresTypeChecking` is typescript-eslint's convention, which other type-aware plugins follow;
|
|
56
|
-
// eslint's own type for a rule's docs does not name it.
|
|
57
|
-
function is_type_aware(documentation: object | undefined): boolean {
|
|
58
|
-
if (documentation === undefined) return false
|
|
59
|
-
|
|
60
|
-
return 'requiresTypeChecking' in documentation && documentation.requiresTypeChecking === true
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// A problem with no rule is the parser's, about the file itself.
|
|
64
|
-
function reads_other_files(rule_id: string | null, rules_meta: RulesMeta): boolean {
|
|
65
|
-
if (rule_id === null) return false
|
|
66
|
-
|
|
67
|
-
return IMPORT_RULE_PATTERN.test(rule_id) || is_type_aware(rules_meta[rule_id]?.docs)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function suspects_of(linter: ESLint, cached: Array<ESLint.LintResult>): Array<string> {
|
|
71
|
-
const rules_meta = linter.getRulesMetaForResults(cached)
|
|
72
|
-
|
|
73
|
-
return cached
|
|
74
|
-
.filter((result) =>
|
|
75
|
-
result.messages.some((message) => reads_other_files(message.ruleId, rules_meta)),
|
|
76
|
-
)
|
|
77
|
-
.map((result) => result.filePath)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function cached_options(options: CrossFileRecheckOptions): ESLint.Options {
|
|
81
|
-
return {
|
|
82
|
-
...options.eslint_options,
|
|
83
|
-
cache: true,
|
|
84
|
-
cacheStrategy: 'content',
|
|
85
|
-
cacheLocation: options.cache_file,
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// A linter that runs without a cache deletes the cache file it would have used, and that defaults to
|
|
90
|
-
// the very file the lint run keeps. So the uncached linter is pointed at a sibling path nothing
|
|
91
|
-
// ever writes: the re-reading must not cost the next run its whole cache.
|
|
92
|
-
function fresh_options(options: CrossFileRecheckOptions): ESLint.Options {
|
|
93
|
-
return {
|
|
94
|
-
...options.eslint_options,
|
|
95
|
-
cache: false,
|
|
96
|
-
cacheLocation: `${options.cache_file}${UNCACHED_SUFFIX}`,
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// `eslint` is loaded here, only past a red report: it is an optional peer a basic-profile
|
|
101
|
-
// consumer may not have, and this module is imported by the entry of every `josh lint`, which has to
|
|
102
|
-
// reach its skip notice there.
|
|
103
|
-
async function create_linters(options: CrossFileRecheckOptions): Promise<Linters> {
|
|
104
|
-
const eslint = await import('eslint')
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
cached: new eslint.ESLint(cached_options(options)),
|
|
108
|
-
fresh: new eslint.ESLint(fresh_options(options)),
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
async function lint_fresh(
|
|
113
|
-
linter: ESLint,
|
|
114
|
-
suspects: Array<string>,
|
|
115
|
-
): Promise<Map<string, ESLint.LintResult>> {
|
|
116
|
-
const fresh = await linter.lintFiles(suspects)
|
|
117
|
-
|
|
118
|
-
return new Map(fresh.map((result) => [result.filePath, result]))
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
async function report(
|
|
122
|
-
linter: ESLint,
|
|
123
|
-
results: Array<ESLint.LintResult>,
|
|
124
|
-
): Promise<Pick<BufferedProcessResult, 'output' | 'exit_code'>> {
|
|
125
|
-
const formatter = await linter.loadFormatter(FORMATTER)
|
|
126
|
-
const is_failed = results.some((result) => result.errorCount > 0)
|
|
127
|
-
|
|
128
|
-
return { output: await formatter.format(results), exit_code: is_failed ? FAIL_EXIT_CODE : 0 }
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// A red about rules that read nothing else is handed back as the run reported it: its cached
|
|
132
|
-
// verdicts are about the files they are keyed on.
|
|
133
|
-
async function verify(
|
|
134
|
-
result: BufferedProcessResult,
|
|
135
|
-
options: CrossFileRecheckOptions,
|
|
136
|
-
): Promise<BufferedProcessResult> {
|
|
137
|
-
if (!is_red(result)) return result
|
|
138
|
-
const started_at = performance.now()
|
|
139
|
-
const linters = await create_linters(options)
|
|
140
|
-
const cached = await linters.cached.lintFiles([...options.patterns])
|
|
141
|
-
const suspects = suspects_of(linters.cached, cached)
|
|
142
|
-
if (suspects.length === 0) return result
|
|
143
|
-
const fresh = await lint_fresh(linters.fresh, suspects)
|
|
144
|
-
const verified = await report(
|
|
145
|
-
linters.fresh,
|
|
146
|
-
cached.map((entry) => fresh.get(entry.filePath) ?? entry),
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
return { ...verified, elapsed_ms: result.elapsed_ms + performance.now() - started_at }
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const cross_file_recheck = { verify }
|
|
153
|
-
|
|
154
|
-
export type { CrossFileRecheckOptions }
|
|
155
|
-
export { cross_file_recheck }
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import { fix_gh_packages_logic } from '#scripts/gh/fix-gh-packages-logic'
|
|
2
|
-
|
|
3
|
-
const SCOPE = '@joshuafolkken'
|
|
4
|
-
const REGISTRY_KEY = `${SCOPE}:registry`
|
|
5
|
-
const PUBLIC_REGISTRY = 'https://registry.npmjs.org/'
|
|
6
|
-
const GITHUB_REGISTRY = 'https://npm.pkg.github.com/'
|
|
7
|
-
const MAPPING = `${REGISTRY_KEY}=${PUBLIC_REGISTRY}`
|
|
8
|
-
const REGISTRY_VALUE_INDEX = 1
|
|
9
|
-
const SPLIT_LIMIT = 2
|
|
10
|
-
|
|
11
|
-
interface MigrationPlan {
|
|
12
|
-
content: string
|
|
13
|
-
packages: ReadonlyArray<string>
|
|
14
|
-
blocked: ReadonlyArray<string>
|
|
15
|
-
change: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
type IntegrityPair = readonly [string, string]
|
|
19
|
-
|
|
20
|
-
function normalized_registry(value: string): string {
|
|
21
|
-
let normalized = value.trim()
|
|
22
|
-
while (normalized.endsWith('/')) normalized = normalized.slice(0, -1)
|
|
23
|
-
|
|
24
|
-
return `${normalized}/`
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function mapping_lines(content: string): ReadonlyArray<string> {
|
|
28
|
-
return content.split(/\r?\n/u).filter((line) => line.trimStart().startsWith(`${REGISTRY_KEY}=`))
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function registry_of(content: string): string | undefined {
|
|
32
|
-
const lines = mapping_lines(content)
|
|
33
|
-
if (lines.length !== 1) return undefined
|
|
34
|
-
|
|
35
|
-
return normalized_registry(lines[0]?.split('=', SPLIT_LIMIT)[REGISTRY_VALUE_INDEX] ?? '')
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function scoped_packages(lockfile: string): ReadonlyArray<string> {
|
|
39
|
-
const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile)
|
|
40
|
-
|
|
41
|
-
return Object.keys(packages)
|
|
42
|
-
.filter((key) => key.startsWith(`${SCOPE}/`))
|
|
43
|
-
.map((key) => fix_gh_packages_logic.package_path_from_key(key))
|
|
44
|
-
.filter((name, index, names) => names.indexOf(name) === index)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function scoped_versions(lockfile: string): ReadonlyArray<readonly [string, string]> {
|
|
48
|
-
const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile)
|
|
49
|
-
|
|
50
|
-
return Object.keys(packages)
|
|
51
|
-
.filter((key) => key.startsWith(`${SCOPE}/`))
|
|
52
|
-
.map(
|
|
53
|
-
(key) =>
|
|
54
|
-
[
|
|
55
|
-
fix_gh_packages_logic.package_path_from_key(key),
|
|
56
|
-
fix_gh_packages_logic.package_version_from_key(key),
|
|
57
|
-
] as const,
|
|
58
|
-
)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function is_github_tarball(value: string): boolean {
|
|
62
|
-
try {
|
|
63
|
-
const url = new URL(value)
|
|
64
|
-
|
|
65
|
-
return url.protocol === 'https:' && url.hostname === 'npm.pkg.github.com'
|
|
66
|
-
} catch {
|
|
67
|
-
return false
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function github_tarballs(lockfile: string): ReadonlyArray<string> {
|
|
72
|
-
const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile)
|
|
73
|
-
|
|
74
|
-
return Object.entries(packages)
|
|
75
|
-
.filter(
|
|
76
|
-
([key, entry]) =>
|
|
77
|
-
key.startsWith(`${SCOPE}/`) &&
|
|
78
|
-
entry.resolution?.tarball !== undefined &&
|
|
79
|
-
is_github_tarball(entry.resolution.tarball),
|
|
80
|
-
)
|
|
81
|
-
.map(([key]) => key)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function remove_flow_tarball(line: string): string {
|
|
85
|
-
const marker = ', tarball: https://npm.pkg.github.com/'
|
|
86
|
-
const start = line.indexOf(marker)
|
|
87
|
-
if (start === -1) return line
|
|
88
|
-
const end = line.indexOf('}', start)
|
|
89
|
-
if (end === -1) return line
|
|
90
|
-
|
|
91
|
-
return `${line.slice(0, start)}${line.slice(end)}`
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function is_package_entry(line: string): boolean {
|
|
95
|
-
return /^ {2}[^ ]/u.test(line)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function is_github_tarball_line(line: string): boolean {
|
|
99
|
-
return line.trimStart().startsWith('tarball: https://npm.pkg.github.com/')
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Integrities are keyed by `name@version`, so two scoped packages sharing a version never collide.
|
|
103
|
-
function package_id(key: string): string {
|
|
104
|
-
const name = fix_gh_packages_logic.package_path_from_key(key)
|
|
105
|
-
|
|
106
|
-
return `${name}@${fix_gh_packages_logic.package_version_from_key(key)}`
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function clean_scoped_line(
|
|
110
|
-
line: string,
|
|
111
|
-
id: string,
|
|
112
|
-
integrities: ReadonlyMap<string, IntegrityPair>,
|
|
113
|
-
): string | undefined {
|
|
114
|
-
if (!id) return line
|
|
115
|
-
if (is_github_tarball_line(line)) return undefined
|
|
116
|
-
const cleaned = remove_flow_tarball(line)
|
|
117
|
-
const pair = integrities.get(id)
|
|
118
|
-
if (pair === undefined) return cleaned
|
|
119
|
-
|
|
120
|
-
return cleaned.split(`integrity: ${pair[0]}`).join(`integrity: ${pair[1]}`)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function next_scoped_id(line: string, id: string): string {
|
|
124
|
-
if (!is_package_entry(line)) return id
|
|
125
|
-
const prefix = ` '${SCOPE}/`
|
|
126
|
-
if (!line.startsWith(prefix)) return ''
|
|
127
|
-
|
|
128
|
-
return package_id(line.slice(" '".length).split("'", 1)[0] ?? '')
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function integrity_pair(
|
|
132
|
-
old_integrity: string | undefined,
|
|
133
|
-
npm_integrity: string | undefined,
|
|
134
|
-
): IntegrityPair | undefined {
|
|
135
|
-
if (old_integrity === undefined || npm_integrity === undefined) return undefined
|
|
136
|
-
|
|
137
|
-
return [old_integrity, npm_integrity]
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function lock_integrities(
|
|
141
|
-
lockfile: string,
|
|
142
|
-
npm_integrities: ReadonlyMap<string, string>,
|
|
143
|
-
): Map<string, IntegrityPair> {
|
|
144
|
-
const packages = fix_gh_packages_logic.parse_lockfile_packages(lockfile)
|
|
145
|
-
const pairs = new Map<string, IntegrityPair>()
|
|
146
|
-
const scoped_entries = Object.entries(packages).filter(([key]) => key.startsWith(`${SCOPE}/`))
|
|
147
|
-
|
|
148
|
-
for (const [key, entry] of scoped_entries) {
|
|
149
|
-
const id = package_id(key)
|
|
150
|
-
const pair = integrity_pair(entry.resolution?.integrity, npm_integrities.get(id))
|
|
151
|
-
if (pair !== undefined) pairs.set(id, pair)
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return pairs
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function push_if_defined(lines: Array<string>, cleaned: string | undefined): void {
|
|
158
|
-
if (cleaned !== undefined) lines.push(cleaned)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function rewrite_scoped_lockfile(
|
|
162
|
-
lockfile: string,
|
|
163
|
-
npm_integrities: ReadonlyMap<string, string>,
|
|
164
|
-
): string {
|
|
165
|
-
let id = ''
|
|
166
|
-
const lines: Array<string> = []
|
|
167
|
-
const integrities = lock_integrities(lockfile, npm_integrities)
|
|
168
|
-
|
|
169
|
-
for (const line of lockfile.split('\n')) {
|
|
170
|
-
id = next_scoped_id(line, id)
|
|
171
|
-
const cleaned = clean_scoped_line(line, id, integrities)
|
|
172
|
-
|
|
173
|
-
push_if_defined(lines, cleaned)
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return lines.join('\n')
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function append_mapping(content: string, eol: string): string {
|
|
180
|
-
const separator = content && !content.endsWith('\n') ? eol : ''
|
|
181
|
-
|
|
182
|
-
return `${content}${separator}${MAPPING}${eol}`
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function replace_mapping(content: string): string {
|
|
186
|
-
const lines = mapping_lines(content)
|
|
187
|
-
const eol = content.includes('\r\n') ? '\r\n' : '\n'
|
|
188
|
-
|
|
189
|
-
if (lines.length === 0) return append_mapping(content, eol)
|
|
190
|
-
|
|
191
|
-
return content
|
|
192
|
-
.split(/\r?\n/u)
|
|
193
|
-
.map((line) => (line === lines[0] ? MAPPING : line))
|
|
194
|
-
.join(eol)
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function unsupported_registry(project_npmrc: string): string | undefined {
|
|
198
|
-
const registry = registry_of(project_npmrc)
|
|
199
|
-
|
|
200
|
-
if (registry === undefined || [GITHUB_REGISTRY, PUBLIC_REGISTRY].includes(registry)) {
|
|
201
|
-
return undefined
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return `unsupported project registry: ${registry}`
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
function has_duplicate_mapping(project_npmrc: string, user_npmrc: string): boolean {
|
|
208
|
-
return mapping_lines(project_npmrc).length > 1 || mapping_lines(user_npmrc).length > 1
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function previous_registry(project_npmrc: string, user_npmrc: string): string {
|
|
212
|
-
return registry_of(project_npmrc) ?? registry_of(user_npmrc) ?? 'default npm'
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
function plan(project_npmrc: string, user_npmrc: string, lockfile: string): MigrationPlan {
|
|
216
|
-
const packages = scoped_packages(lockfile)
|
|
217
|
-
// Every scoped package may migrate; `migrate` blocks any whose locked version is not on public npm.
|
|
218
|
-
const blocked: Array<string> = []
|
|
219
|
-
if (has_duplicate_mapping(project_npmrc, user_npmrc)) blocked.push('duplicate registry mappings')
|
|
220
|
-
const unsupported = unsupported_registry(project_npmrc)
|
|
221
|
-
if (unsupported !== undefined) blocked.push(unsupported)
|
|
222
|
-
const before = previous_registry(project_npmrc, user_npmrc)
|
|
223
|
-
const change = `${before} → ${PUBLIC_REGISTRY}`
|
|
224
|
-
|
|
225
|
-
return { content: replace_mapping(project_npmrc), packages, blocked, change }
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const migrate_logic = {
|
|
229
|
-
plan,
|
|
230
|
-
github_tarballs,
|
|
231
|
-
is_github_tarball,
|
|
232
|
-
rewrite_scoped_lockfile,
|
|
233
|
-
scoped_versions,
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export { migrate_logic }
|
|
237
|
-
export type { MigrationPlan }
|