@joshuafolkken/kit 1.1471.0 → 1.1784.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/settings.json +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/auto-ok/auto-ok-cli.ts +14 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +6 -7
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +54 -7
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +69 -0
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +137 -18
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +31 -60
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +65 -129
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/gh/git-pr.ts +13 -1
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +39 -14
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +5 -16
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +34 -78
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/expected-effect-lint.ts +60 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +81 -90
- package/scripts/issue/issue-lint-cli.ts +7 -13
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +111 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +19 -25
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +111 -71
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +31 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +112 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon.ts +265 -0
- package/scripts/lint/format.ts +14 -5
- package/scripts/lint/import-graph.ts +279 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +12 -11
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +18 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +6 -15
- package/scripts/report/report-format-reference.ts +4 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +82 -16
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +67 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +90 -3
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +76 -7
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +118 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +240 -61
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -47
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +2 -2
- package/scripts/run/board/run-board-state.ts +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry.ts +9 -4
- package/scripts/run/cut/run-cut-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review.ts +2 -1
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- package/scripts/run/ship/run-ship.ts +30 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +3 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +15 -0
- package/scripts/split/split-measure.ts +65 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +55 -6
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +54 -21
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +71 -137
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +10 -1
- package/scripts/time-runtime/time-shell.ts +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +10 -3
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { existsSync } from 'node:fs'
|
|
3
|
+
import path from 'node:path'
|
|
3
4
|
import { fileURLToPath } from 'node:url'
|
|
4
5
|
import { document_byte_check } from '#scripts/document/document-byte-check'
|
|
6
|
+
import { gate_plan } from '#scripts/gate/gate-plan'
|
|
5
7
|
import { scoped_green } from '#scripts/gate/scoped-green'
|
|
8
|
+
import { since_green } from '#scripts/gate/since-green'
|
|
6
9
|
import { changed_file_scope, type ChangedFileScope } from '#scripts/git/changed-file-scope'
|
|
7
10
|
import { review_stamps } from '#scripts/review/review-stamps'
|
|
8
11
|
import { lint_parallel } from './lint-parallel'
|
|
@@ -36,7 +39,8 @@ async function lint_exit_code(scope: ChangedFileScope): Promise<number> {
|
|
|
36
39
|
return await lint_parallel.run_lint_checks(
|
|
37
40
|
lint_related_scope.prettier_arguments(scope.files),
|
|
38
41
|
lint_related_scope.eslint_arguments(scope.files),
|
|
39
|
-
lint_related_scope.
|
|
42
|
+
lint_related_scope.RELATED_CACHES.eslint_file,
|
|
43
|
+
{ warm_daemon: true },
|
|
40
44
|
)
|
|
41
45
|
}
|
|
42
46
|
|
|
@@ -63,6 +67,38 @@ async function scoped_exit_code(scope: ChangedFileScope, root: string): Promise<
|
|
|
63
67
|
return byte_check_exit_code(scope, root)
|
|
64
68
|
}
|
|
65
69
|
|
|
70
|
+
// **A bare run reads only what moved since its last green run** (`since-green.ts`), while a lintable file
|
|
71
|
+
// is among it; otherwise the whole branch change, as before.
|
|
72
|
+
async function since_green_scope(root: string): Promise<ChangedFileScope | undefined> {
|
|
73
|
+
const moved = await since_green.read_moved(review_stamps.lint_related_stamp, gate_plan.LINT_LABEL)
|
|
74
|
+
|
|
75
|
+
if (moved === undefined) return undefined
|
|
76
|
+
|
|
77
|
+
const inputs = lint_related_scope.scope_inputs(existsSync)
|
|
78
|
+
const files = moved.map((file) => path.join(root, file))
|
|
79
|
+
|
|
80
|
+
if (changed_file_scope.select_files(files, inputs).length === 0) return undefined
|
|
81
|
+
|
|
82
|
+
process.stdout.write(`${since_green.describe(lint_related_scope.COMMAND_LABEL, moved)}\n`)
|
|
83
|
+
|
|
84
|
+
return changed_file_scope.resolve_scope(files, inputs)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async function resolve_lint_scope(
|
|
88
|
+
command_arguments: ReadonlyArray<string>,
|
|
89
|
+
root: string,
|
|
90
|
+
): Promise<ChangedFileScope> {
|
|
91
|
+
const since = command_arguments.length === 0 ? await since_green_scope(root) : undefined
|
|
92
|
+
|
|
93
|
+
if (since !== undefined) return since
|
|
94
|
+
|
|
95
|
+
return await changed_file_scope.resolve_command_scope({
|
|
96
|
+
command_arguments,
|
|
97
|
+
root,
|
|
98
|
+
inputs: lint_related_scope.scope_inputs(existsSync),
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
66
102
|
// The narrowing line is printed before either child starts, so a scoped run is never read as a
|
|
67
103
|
// whole one, and a fallback says which of the two it was rather than looking like a narrow run
|
|
68
104
|
// that found nothing.
|
|
@@ -72,11 +108,7 @@ async function scoped_exit_code(scope: ChangedFileScope, root: string): Promise<
|
|
|
72
108
|
// and the three states in which it is withheld, are `scoped-green.ts`.
|
|
73
109
|
async function run_related_lint(command_arguments: ReadonlyArray<string>): Promise<number> {
|
|
74
110
|
const root = await changed_file_scope.repository_root_or_cwd()
|
|
75
|
-
const scope = await
|
|
76
|
-
command_arguments,
|
|
77
|
-
root,
|
|
78
|
-
inputs: lint_related_scope.scope_inputs(existsSync),
|
|
79
|
-
})
|
|
111
|
+
const scope = await resolve_lint_scope(command_arguments, root)
|
|
80
112
|
|
|
81
113
|
changed_file_scope.report_unusable_arguments(
|
|
82
114
|
command_arguments,
|
|
@@ -15,7 +15,6 @@ interface Headings {
|
|
|
15
15
|
none: string
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
const JAPANESE_LANG_PREFIX = 'ja'
|
|
19
18
|
const JAPANESE_HEADINGS: Headings = {
|
|
20
19
|
recommended: '推奨:',
|
|
21
20
|
alternatives: '他の選択肢:',
|
|
@@ -31,7 +30,7 @@ const ENGLISH_HEADINGS: Headings = {
|
|
|
31
30
|
function headings(): Headings {
|
|
32
31
|
const { lang } = session_language.resolve_session_lang()
|
|
33
32
|
|
|
34
|
-
return
|
|
33
|
+
return session_language.is_japanese(lang) ? JAPANESE_HEADINGS : ENGLISH_HEADINGS
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
// An empty list is stated as none, so a confirmation with no other option says so rather than
|
|
@@ -20,14 +20,14 @@ const telegram_environment_schema = z.object({
|
|
|
20
20
|
// Sending `failure` (❌) there would say the merge failed, which is false and is
|
|
21
21
|
// the more expensive lie of the two; sending `completion` (✅) twice says nothing went wrong, which
|
|
22
22
|
// is the silence this type exists to end.
|
|
23
|
-
// **`
|
|
24
|
-
// merged alongside something that did not work;
|
|
25
|
-
//
|
|
26
|
-
// exactly that: not done, not broken, just
|
|
27
|
-
// **`stranded` is not `
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
23
|
+
// **`idle` is not `warning`**. `warning` names a run that *finished* and
|
|
24
|
+
// merged alongside something that did not work; an idle run is alive and has not finished — it has
|
|
25
|
+
// nothing left to dispatch and no child running, so what remains waits on a person. The 💤 icon says
|
|
26
|
+
// exactly that: not done, not broken, just waiting for a hand.
|
|
27
|
+
// **`stranded` is not `idle`**. An idle run still has a driver watching the
|
|
28
|
+
// backlog; a stranded one has none. The session that cut the budget handed it off and died, no
|
|
29
|
+
// successor claimed it, and no supervisor is watching, so nothing can take the next step at all. The
|
|
30
|
+
// 🚨 icon says a run needs a hand to keep running at all.
|
|
31
31
|
type TelegramTaskType =
|
|
32
32
|
| 'planning'
|
|
33
33
|
| 'completion'
|
|
@@ -35,7 +35,7 @@ type TelegramTaskType =
|
|
|
35
35
|
| 'warning'
|
|
36
36
|
| 'kickoff_retry'
|
|
37
37
|
| 'confirmation'
|
|
38
|
-
| '
|
|
38
|
+
| 'idle'
|
|
39
39
|
| 'stranded'
|
|
40
40
|
| 'progress'
|
|
41
41
|
|
|
@@ -68,7 +68,7 @@ const TASK_DEFINITIONS: Record<TelegramTaskType, TaskDefinition> = {
|
|
|
68
68
|
warning: { icon: '⚠️', label: 'Completed with a warning' },
|
|
69
69
|
kickoff_retry: { icon: '🔄', label: 'Kickoff retry' },
|
|
70
70
|
confirmation: { icon: '⏸️', label: 'Confirmation required' },
|
|
71
|
-
|
|
71
|
+
idle: { icon: '💤', label: 'Backlog run idle — nothing left to dispatch' },
|
|
72
72
|
stranded: { icon: '🚨', label: 'Run stranded — nobody is driving it' },
|
|
73
73
|
progress: { icon: '📊', label: 'Progress' },
|
|
74
74
|
}
|
|
@@ -389,25 +389,25 @@ async function confirm(input: ConfirmInput): Promise<boolean> {
|
|
|
389
389
|
)
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
-
interface
|
|
392
|
+
interface IdleInput {
|
|
393
393
|
body: string
|
|
394
394
|
recovery: string
|
|
395
395
|
}
|
|
396
396
|
|
|
397
397
|
/**
|
|
398
|
-
* Push the
|
|
399
|
-
* Off-screen is the whole point:
|
|
400
|
-
*
|
|
398
|
+
* Push the 💤 idle type — a backlog run with no child running and nothing left to dispatch.
|
|
399
|
+
* Off-screen is the whole point: what is left waits on a person, and the
|
|
400
|
+
* terminal shows that only to someone already watching.
|
|
401
401
|
*
|
|
402
402
|
* **`warn`'s shape exactly** — the repository looked up under the shared bound, the tolerant
|
|
403
|
-
* `send_or_report` so a gateway timeout at Telegram never fails the
|
|
403
|
+
* `send_or_report` so a gateway timeout at Telegram never fails the loop that is only reporting, and
|
|
404
404
|
* the caller's own `recovery` line. No `issue_title`: the header label already names what this is, and
|
|
405
405
|
* the body carries what is waiting, so a title line would only repeat the header.
|
|
406
406
|
*/
|
|
407
|
-
async function
|
|
407
|
+
async function idle(input: IdleInput): Promise<boolean> {
|
|
408
408
|
return await send_or_report(
|
|
409
409
|
{
|
|
410
|
-
task_type: '
|
|
410
|
+
task_type: 'idle',
|
|
411
411
|
repo_name: gh_spawn.get_repo_name_with_owner_within(REPO_LOOKUP_TIMEOUT_MS),
|
|
412
412
|
issue_title: undefined,
|
|
413
413
|
body: input.body,
|
|
@@ -425,11 +425,11 @@ interface StrandedInput {
|
|
|
425
425
|
|
|
426
426
|
/**
|
|
427
427
|
* Push the 🚨 stranded type — a run whose driver is gone and which nothing can advance.
|
|
428
|
-
* Off-screen is the whole point, as it is for `
|
|
428
|
+
* Off-screen is the whole point, as it is for `idle`: the state is
|
|
429
429
|
* invisible on the terminal because the session that would show it has died, so the person hears about
|
|
430
430
|
* it where they are not watching, rather than by asking.
|
|
431
431
|
*
|
|
432
|
-
* **`
|
|
432
|
+
* **`idle`'s shape exactly** — the repository looked up under the shared bound, the tolerant
|
|
433
433
|
* `send_or_report` so a Telegram timeout never fails the detector that is only reporting, and the
|
|
434
434
|
* caller's own `recovery` line naming the command that hands the run to a fresh supervisor. No
|
|
435
435
|
* `issue_title`: the header label already names what this is.
|
|
@@ -471,10 +471,10 @@ async function progress(body: string): Promise<boolean> {
|
|
|
471
471
|
|
|
472
472
|
const telegram_notify = {
|
|
473
473
|
confirm,
|
|
474
|
+
idle,
|
|
474
475
|
progress,
|
|
475
476
|
send,
|
|
476
477
|
send_or_report,
|
|
477
|
-
stalled,
|
|
478
478
|
stranded,
|
|
479
479
|
warn,
|
|
480
480
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { telegram_test } from './telegram-test'
|
|
4
|
+
|
|
5
|
+
// The `josh notify` entry, kept apart from `telegram-test.ts` because the stop hook and
|
|
6
|
+
// `run-stop-notify.ts` import that one: a bundle is one file, so a main guard there would fire for
|
|
7
|
+
// every command that carries it (joshuafolkken/kit#4186). The flags are read from `process.argv`.
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await telegram_test.run_cli()
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
1
|
import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
|
|
4
2
|
import { git_gh_repo } from '#scripts/gh/git-gh-repo'
|
|
5
3
|
import { github_issue_url, type IssueUrlTarget } from '#scripts/gh/github-issue-url'
|
|
@@ -112,6 +110,14 @@ async function resolve_context(values: CliValues): Promise<ResolvedContext> {
|
|
|
112
110
|
return { repo_name, issue_title }
|
|
113
111
|
}
|
|
114
112
|
|
|
113
|
+
// The send behind the command line, for a caller that already holds the values — the `Stop` hook's
|
|
114
|
+
// own confirmation (`stop-actions.ts`). It throws as `telegram_notify.send` does.
|
|
115
|
+
async function send_values(values: CliValues): Promise<void> {
|
|
116
|
+
const context = await resolve_context(values)
|
|
117
|
+
|
|
118
|
+
await telegram_notify.send(telegram_test_logic.build_input({ values, context }))
|
|
119
|
+
}
|
|
120
|
+
|
|
115
121
|
async function main(): Promise<void> {
|
|
116
122
|
josh_environment_file.load_environment_file()
|
|
117
123
|
const values = parse_cli_arguments()
|
|
@@ -122,10 +128,7 @@ async function main(): Promise<void> {
|
|
|
122
128
|
return
|
|
123
129
|
}
|
|
124
130
|
|
|
125
|
-
|
|
126
|
-
const input = telegram_test_logic.build_input({ values, context })
|
|
127
|
-
|
|
128
|
-
await telegram_notify.send(input)
|
|
131
|
+
await send_values(values)
|
|
129
132
|
}
|
|
130
133
|
|
|
131
134
|
// **A notification nobody received must not read as success**. This command
|
|
@@ -136,8 +139,8 @@ async function main(): Promise<void> {
|
|
|
136
139
|
// and exits non-zero. Both the message and the `cause` whose text `handle` also prints reach it
|
|
137
140
|
// already free of the bot token and the chat id — `telegram_notify` redacts each before throwing.
|
|
138
141
|
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
142
|
+
// The `josh notify` entry is `telegram-test-main.ts`, kept apart because other modules import this one
|
|
143
|
+
// (joshuafolkken/kit#4186).
|
|
141
144
|
async function run_cli(): Promise<void> {
|
|
142
145
|
try {
|
|
143
146
|
await main()
|
|
@@ -146,8 +149,6 @@ async function run_cli(): Promise<void> {
|
|
|
146
149
|
}
|
|
147
150
|
}
|
|
148
151
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const telegram_test = { fetch_repo_name, fetch_issue_title, resolve_context, run_cli }
|
|
152
|
+
const telegram_test = { fetch_repo_name, fetch_issue_title, resolve_context, run_cli, send_values }
|
|
152
153
|
|
|
153
154
|
export { telegram_test }
|
|
@@ -89,6 +89,18 @@ function is_ledger_path(file_path: string): boolean {
|
|
|
89
89
|
)
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
// The git pathspec of every path but the ledger — the same paths `is_ledger_path` answers, for a git
|
|
93
|
+
// command to leave out. `:/` and `top` anchor it at the repository root, so a command run from a
|
|
94
|
+
// subdirectory still covers the whole tree and still leaves the root's ledger alone.
|
|
95
|
+
const LEDGER_EXCLUSION_PATHSPEC: ReadonlyArray<string> = [
|
|
96
|
+
':/',
|
|
97
|
+
...LEDGER_DIRECTORIES.map((directory) => `:(top,exclude)${directory}`),
|
|
98
|
+
...LEGACY_OBSERVATION_LEDGER_PATHS.map((legacy) => `:(top,exclude)${legacy}`),
|
|
99
|
+
...LEGACY_OBSERVATION_LEDGER_PATHS.map(
|
|
100
|
+
(legacy) => `:(top,exclude,glob)${legacy}.*${MIGRATION_CLAIM_SUFFIX}`,
|
|
101
|
+
),
|
|
102
|
+
]
|
|
103
|
+
|
|
92
104
|
function is_ledger_line(line: string): boolean {
|
|
93
105
|
return is_ledger_path(status_path(line))
|
|
94
106
|
}
|
|
@@ -124,6 +136,7 @@ const observation_ledger = {
|
|
|
124
136
|
|
|
125
137
|
export {
|
|
126
138
|
LEDGER_DIRECTORIES,
|
|
139
|
+
LEDGER_EXCLUSION_PATHSPEC,
|
|
127
140
|
LEDGER_FILE_EXTENSION,
|
|
128
141
|
LEGACY_LEDGER_FILE,
|
|
129
142
|
LEGACY_OBSERVATION_LEDGER_DIRECTORY,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import type { OpenPull } from '#scripts/gh/git-gh-pr-auto-merge'
|
|
3
3
|
import { git_pr_checks } from '#scripts/gh/git-pr-checks'
|
|
4
|
+
import { git_pr_merge_checked } from '#scripts/gh/git-pr-merge-checked'
|
|
5
|
+
import { git_command } from '#scripts/git/git-command'
|
|
4
6
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
5
7
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
8
|
|
|
@@ -21,9 +23,10 @@ const MERGE_FAILED_REASON =
|
|
|
21
23
|
// **Best-effort, and the answer says which wait to use.** GraphQL — the only way to enable auto-merge
|
|
22
24
|
// — can be refused in a cloud session, and that loses the safety net rather
|
|
23
25
|
// than the flush: the in-process wait-and-merge still runs, exactly as before auto-merge existed.
|
|
26
|
+
// The checkout's head is the commit this flush just pushed, so that is the one auto-merge may land.
|
|
24
27
|
async function request_auto_merge(branch_name: string): Promise<boolean> {
|
|
25
28
|
try {
|
|
26
|
-
await git_gh_command.pr_enable_auto_merge(branch_name)
|
|
29
|
+
await git_gh_command.pr_enable_auto_merge(branch_name, await git_command.head_commit())
|
|
27
30
|
|
|
28
31
|
return true
|
|
29
32
|
} catch (error) {
|
|
@@ -37,8 +40,7 @@ async function request_auto_merge(branch_name: string): Promise<boolean> {
|
|
|
37
40
|
// the merge gate's wait would run out its budget on a pull request that is already merged.
|
|
38
41
|
async function wait_for_landing(branch_name: string, is_auto_merge: boolean): Promise<void> {
|
|
39
42
|
if (!is_auto_merge) {
|
|
40
|
-
await
|
|
41
|
-
await git_gh_command.pr_merge(branch_name)
|
|
43
|
+
await git_pr_merge_checked.merge_when_green(branch_name)
|
|
42
44
|
|
|
43
45
|
return
|
|
44
46
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { git_command } from '#scripts/git/git-command'
|
|
3
3
|
import { main_sync } from '#scripts/git/main-sync'
|
|
4
|
+
import { IGNORE_FOR_RELEASE_LABEL } from '#scripts/issue/issue-labels'
|
|
4
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
5
6
|
import { observation_ledger, OBSERVATION_LEDGER_DIRECTORY } from './observation-ledger'
|
|
6
7
|
import type { BrokenLine } from './observation-ledger-line'
|
|
@@ -258,7 +259,11 @@ async function push_and_open(branch_name: string): Promise<string> {
|
|
|
258
259
|
try {
|
|
259
260
|
await git_command.push()
|
|
260
261
|
|
|
261
|
-
return await git_gh_command.pr_create(
|
|
262
|
+
return await git_gh_command.pr_create(
|
|
263
|
+
COMMIT_MESSAGE,
|
|
264
|
+
pull_request_body(),
|
|
265
|
+
IGNORE_FOR_RELEASE_LABEL,
|
|
266
|
+
)
|
|
262
267
|
} catch (error) {
|
|
263
268
|
throw new Error(stranded_branch_message(branch_name, error_text.message_of(error)), {
|
|
264
269
|
cause: error,
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { readFileSync, writeFileSync } from 'node:fs'
|
|
12
12
|
import { fileURLToPath } from 'node:url'
|
|
13
13
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
14
|
+
import { file_reader } from '#scripts/lib/read-file'
|
|
14
15
|
import { overrides_snapshot_schema } from '#scripts/lib/schemas'
|
|
15
16
|
import { overrides_files } from './overrides-files'
|
|
16
17
|
import { overrides_check, type OverridesDiff } from './overrides-logic'
|
|
@@ -19,17 +20,13 @@ const ARGV_OFFSET = 2
|
|
|
19
20
|
const OPTIONS = { save: { type: 'boolean', default: false } } as const
|
|
20
21
|
const USAGE = cli_flags.usage_line(['--save'], 'overrides')
|
|
21
22
|
|
|
22
|
-
function is_file_not_found(error: unknown): boolean {
|
|
23
|
-
return error instanceof Error && 'code' in error && error.code === 'ENOENT'
|
|
24
|
-
}
|
|
25
|
-
|
|
26
23
|
function load_snapshot(): Record<string, string> {
|
|
27
24
|
try {
|
|
28
25
|
return overrides_snapshot_schema.parse(
|
|
29
26
|
JSON.parse(readFileSync(overrides_check.SNAPSHOT_PATH, 'utf8')),
|
|
30
27
|
)
|
|
31
28
|
} catch (error) {
|
|
32
|
-
if (
|
|
29
|
+
if (file_reader.is_absent(error)) {
|
|
33
30
|
console.error(`✖ Snapshot not found: ${overrides_check.SNAPSHOT_PATH}`)
|
|
34
31
|
console.error(' Run with --save first to create a snapshot.')
|
|
35
32
|
} else {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
1
2
|
import { file_reader } from '#scripts/lib/read-file'
|
|
2
3
|
import { overrides_check, type OverridesSources } from './overrides-logic'
|
|
3
4
|
|
|
@@ -5,7 +6,7 @@ import { overrides_check, type OverridesSources } from './overrides-logic'
|
|
|
5
6
|
// field at all — so a missing file reads as an empty document rather than aborting the check.
|
|
6
7
|
function read_current_sources(): OverridesSources {
|
|
7
8
|
return {
|
|
8
|
-
package_json: file_reader.read_file_or_empty(
|
|
9
|
+
package_json: file_reader.read_file_or_empty(PACKAGE_JSON),
|
|
9
10
|
workspace_yaml: file_reader.read_file_or_empty(overrides_check.WORKSPACE_YAML_PATH),
|
|
10
11
|
}
|
|
11
12
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
1
2
|
import { yaml_document } from '#scripts/lib/yaml-document'
|
|
2
3
|
import {
|
|
3
4
|
package_pnpm_schema,
|
|
@@ -68,7 +69,6 @@ function compare(snapshot: Record<string, string>, current: Record<string, strin
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
const SNAPSHOT_PATH = '.overrides-snapshot.json'
|
|
71
|
-
const PACKAGE_JSON_PATH = 'package.json'
|
|
72
72
|
const WORKSPACE_YAML_PATH = 'pnpm-workspace.yaml'
|
|
73
73
|
|
|
74
74
|
// Both source files are optional and either may be absent from a project entirely, so an empty
|
|
@@ -109,14 +109,12 @@ function count_entry(path: string, overrides: Record<string, string>): Array<str
|
|
|
109
109
|
function describe_sources(sources: OverridesSources): string {
|
|
110
110
|
const counts = [
|
|
111
111
|
...count_entry(WORKSPACE_YAML_PATH, read_overrides_from_workspace(sources.workspace_yaml)),
|
|
112
|
-
...count_entry(
|
|
112
|
+
...count_entry(PACKAGE_JSON, read_overrides_from_package(sources.package_json)).map(
|
|
113
113
|
(entry) => `${entry} (ignored by pnpm)`,
|
|
114
114
|
),
|
|
115
115
|
]
|
|
116
116
|
|
|
117
|
-
if (counts.length === 0) {
|
|
118
|
-
return `no overrides found in ${WORKSPACE_YAML_PATH} or ${PACKAGE_JSON_PATH}`
|
|
119
|
-
}
|
|
117
|
+
if (counts.length === 0) return `no overrides found in ${WORKSPACE_YAML_PATH} or ${PACKAGE_JSON}`
|
|
120
118
|
|
|
121
119
|
return counts.join(', ')
|
|
122
120
|
}
|
|
@@ -202,7 +200,6 @@ const overrides_check = {
|
|
|
202
200
|
list_excluded_package_names,
|
|
203
201
|
read_dependency_names,
|
|
204
202
|
build_update_command,
|
|
205
|
-
PACKAGE_JSON_PATH,
|
|
206
203
|
WORKSPACE_YAML_PATH,
|
|
207
204
|
SNAPSHOT_PATH,
|
|
208
205
|
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { mkdtempSync,
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
|
|
2
2
|
import os from 'node:os'
|
|
3
3
|
import path from 'node:path'
|
|
4
|
+
import { PACKAGE_JSON, package_manifest } from '#scripts/lib/package-manifest'
|
|
4
5
|
import { execaSync } from 'execa'
|
|
6
|
+
import { z } from 'zod'
|
|
5
7
|
|
|
6
8
|
const root = process.cwd()
|
|
7
9
|
const scratch = mkdtempSync(path.join(os.tmpdir(), 'kit-eslint-install-'))
|
|
8
|
-
const PACKAGE_JSON = 'package.json'
|
|
9
10
|
const IGNORE_SCRIPTS = '--ignore-scripts'
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
const version_map_schema = z.record(z.string(), z.string())
|
|
12
|
+
const manifest = package_manifest.read_manifest(
|
|
13
|
+
root,
|
|
14
|
+
z.object({ devDependencies: version_map_schema, peerDependencies: version_map_schema }),
|
|
15
|
+
)
|
|
14
16
|
const eslint_peers = Object.keys(manifest.peerDependencies).filter((name) =>
|
|
15
17
|
/^(?:@eslint\/|@stylistic\/|eslint|globals$|typescript)/u.test(name),
|
|
16
18
|
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
2
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
2
3
|
import { poll } from '#scripts/lib/poll'
|
|
3
4
|
import { GH_API_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
4
5
|
import { with_page_size } from '#scripts/version/version-remote'
|
|
@@ -63,13 +64,7 @@ function fetch_published_versions(versions_endpoint: string): Array<string> | un
|
|
|
63
64
|
})
|
|
64
65
|
if (stdout === undefined) return undefined
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
const parsed: unknown = JSON.parse(stdout)
|
|
68
|
-
|
|
69
|
-
return Array.isArray(parsed) ? parsed.filter((name) => typeof name === 'string') : undefined
|
|
70
|
-
} catch {
|
|
71
|
-
return undefined
|
|
72
|
-
}
|
|
67
|
+
return json_value.parse_array(stdout)?.filter((name) => typeof name === 'string')
|
|
73
68
|
}
|
|
74
69
|
|
|
75
70
|
// The knobs the wait exposes. Every one of them is injectable so the unit suite can drive the loop
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import type { RepoMap } from '#scripts/discovery/repo-map-logic'
|
|
4
|
-
import {
|
|
4
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
5
5
|
import { z } from 'zod'
|
|
6
6
|
|
|
7
7
|
// Deciding which repositories a published release should be carried into.
|
|
@@ -16,7 +16,6 @@ import { z } from 'zod'
|
|
|
16
16
|
// us rather than a roster, so a new consumer needs no edit here — and it covers a consumer that is
|
|
17
17
|
// not a published package at all, which a list of downstream package names cannot.
|
|
18
18
|
|
|
19
|
-
const MANIFEST_NAME = 'package.json'
|
|
20
19
|
const NODE_MODULES = 'node_modules'
|
|
21
20
|
|
|
22
21
|
// Why a candidate is not going to be processed, or that it is. `not_selected` is the one state set
|
|
@@ -64,14 +63,7 @@ function has_checkout(repository_path: string): boolean {
|
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
function read_manifest(repository_path: string): Manifest | undefined {
|
|
67
|
-
|
|
68
|
-
if (!existsSync(manifest_path)) return undefined
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
return json_value.parse_with(readFileSync(manifest_path, 'utf8'), manifest_schema)
|
|
72
|
-
} catch {
|
|
73
|
-
return undefined
|
|
74
|
-
}
|
|
66
|
+
return package_manifest.read_manifest_if_valid(repository_path, manifest_schema)
|
|
75
67
|
}
|
|
76
68
|
|
|
77
69
|
// The range a manifest declares for `package_name`, from either dependency field. Undefined when the
|
|
@@ -95,7 +87,7 @@ function installed_version(repository_path: string, package_name: string): strin
|
|
|
95
87
|
// the parent directory), which is an ordinary "not downstream" rather than damage.
|
|
96
88
|
function classify_manifest_absence(repository_path: string): TargetState | undefined {
|
|
97
89
|
if (!has_checkout(repository_path)) return 'missing_checkout'
|
|
98
|
-
if (!existsSync(
|
|
90
|
+
if (!existsSync(package_manifest.manifest_path(repository_path))) return 'not_downstream'
|
|
99
91
|
|
|
100
92
|
return undefined
|
|
101
93
|
}
|
|
@@ -12,10 +12,12 @@ import { file_reader } from '#scripts/lib/read-file'
|
|
|
12
12
|
const FROM_PATTERN = /\bfrom[ \t]*['"]([^'"\n]+)['"]/gu
|
|
13
13
|
// A side-effect import carries no `from`: `import './register'`.
|
|
14
14
|
const BARE_IMPORT_PATTERN = /^[ \t]*import[ \t]+['"]([^'"\n]+)['"]/gmu
|
|
15
|
-
// The subpath
|
|
16
|
-
// to `
|
|
17
|
-
const
|
|
18
|
-
|
|
15
|
+
// The subpath imports this package uses for cross-directory imports; `#scripts/x` resolves to
|
|
16
|
+
// `scripts/x` and `#tools/x` to `tools/x`. Relative specifiers resolve against the importer's directory.
|
|
17
|
+
const SUBPATH_DIRECTORIES: ReadonlyArray<readonly [string, string]> = [
|
|
18
|
+
['#scripts/', 'scripts'],
|
|
19
|
+
['#tools/', 'tools'],
|
|
20
|
+
]
|
|
19
21
|
const RELATIVE_PREFIX = '.'
|
|
20
22
|
// A specifier omits its extension, so a resolved base is tried against the real files these suffixes
|
|
21
23
|
// would produce — a sibling module or a directory's index, in the order a resolver would.
|
|
@@ -38,9 +40,9 @@ function parse_imports(source: string): ReadonlyArray<string> {
|
|
|
38
40
|
// Where a local specifier points before extension resolution, or `undefined` for a package import
|
|
39
41
|
// this graph does not follow.
|
|
40
42
|
function specifier_base(spec: string, importer: string, root: string): string | undefined {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
const subpath = SUBPATH_DIRECTORIES.find(([prefix]) => spec.startsWith(prefix))
|
|
44
|
+
|
|
45
|
+
if (subpath !== undefined) return path.resolve(root, subpath[1], spec.slice(subpath[0].length))
|
|
44
46
|
|
|
45
47
|
if (spec.startsWith(RELATIVE_PREFIX)) return path.resolve(path.dirname(importer), spec)
|
|
46
48
|
|
|
@@ -96,20 +96,31 @@ async function is_release_lost(source: RunSource, tag: string): Promise<boolean>
|
|
|
96
96
|
return run.status === 'completed' && (await is_release_over(source, tag))
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
async function publish_run(
|
|
100
|
+
source: RunSource,
|
|
101
|
+
workflow: string,
|
|
102
|
+
tag: string,
|
|
103
|
+
): Promise<Run | undefined> {
|
|
104
|
+
return await find_run(source, workflow, `Publish ${tag}`)
|
|
105
|
+
}
|
|
106
|
+
|
|
99
107
|
// A run not listed yet is pending too: the announcement that starts this release also starts the
|
|
100
108
|
// publication, so the release can ask before GitHub has queued that run.
|
|
109
|
+
function run_state(run: Run | undefined): PollState {
|
|
110
|
+
if (run?.status !== 'completed') return 'pending'
|
|
111
|
+
|
|
112
|
+
return run.conclusion === 'success' ? 'ready' : 'failed'
|
|
113
|
+
}
|
|
114
|
+
|
|
101
115
|
async function publication_state(
|
|
102
116
|
source: RunSource,
|
|
103
117
|
workflow: string,
|
|
104
118
|
tag: string,
|
|
105
119
|
): Promise<PollState> {
|
|
106
|
-
|
|
107
|
-
if (run?.status !== 'completed') return 'pending'
|
|
108
|
-
|
|
109
|
-
return run.conclusion === 'success' ? 'ready' : 'failed'
|
|
120
|
+
return run_state(await publish_run(source, workflow, tag))
|
|
110
121
|
}
|
|
111
122
|
|
|
112
|
-
const github_release_runs = { is_release_lost, publication_state }
|
|
123
|
+
const github_release_runs = { is_release_lost, publication_state, publish_run, run_state }
|
|
113
124
|
|
|
114
|
-
export type { PollState, RunSource }
|
|
125
|
+
export type { PollState, Run, RunSource }
|
|
115
126
|
export { github_release_runs }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { git_spawn } from '#scripts/git/git-spawn'
|
|
2
|
+
|
|
3
|
+
// **A release drops every `josh metrics` approval the default branch holds** (joshuafolkken/kit#4187).
|
|
4
|
+
// The release work tree is cut from `origin/<default>`, so every file it holds under the directory
|
|
5
|
+
// belongs to an issue that already merged. Such a file is read only to tell it apart from a branch's
|
|
6
|
+
// new one (`tools/metrics/metrics-ratchet.ts` → `fresh_approvals`): a branch's merge-base still holds
|
|
7
|
+
// it unchanged, and a branch that merges the release in loses it on both sides, so removing it changes
|
|
8
|
+
// no verdict. `--ignore-unmatch` makes a repository with no approvals a no-op.
|
|
9
|
+
|
|
10
|
+
const APPROVAL_DIRECTORY = '.josh/metrics-accepted'
|
|
11
|
+
|
|
12
|
+
async function prune(): Promise<void> {
|
|
13
|
+
await git_spawn.read(['rm', '-r', '-q', '--ignore-unmatch', '--', APPROVAL_DIRECTORY])
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const release_approval_prune = { APPROVAL_DIRECTORY, prune }
|
|
17
|
+
|
|
18
|
+
export { release_approval_prune }
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { git_command } from '#scripts/git/git-command'
|
|
2
2
|
import { json_value } from '#scripts/lib/json-value'
|
|
3
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
3
4
|
import { package_with_version_schema } from '#scripts/lib/schemas'
|
|
4
|
-
import { version_targets } from '#scripts/version/version-targets'
|
|
5
5
|
import { release_plan, type ReleasePlan, type VersionedCommit } from './release-plan'
|
|
6
6
|
|
|
7
7
|
// Reading main's history for the two numbers a release is made of: where the version last changed,
|
|
8
8
|
// and how many merges have landed since.
|
|
9
9
|
|
|
10
|
-
const { PACKAGE_JSON } = version_targets
|
|
11
|
-
|
|
12
10
|
// How far back the search for "the commit that last changed the version" goes, counted in commits
|
|
13
11
|
// that touched `package.json`. Once children stop bumping that file still
|
|
14
12
|
// changes for every dependency update, so the base can sit several entries down — but a repository
|