@joshuafolkken/kit 1.1514.0 → 1.2114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { get_exit_code } from '#scripts/git/git-execa-error'
|
|
2
|
+
import { git_spawn } from '#scripts/git/git-spawn'
|
|
3
|
+
|
|
4
|
+
// One fixed-string `git grep -n` over a pathspec, read back as `file:line` hits with a short excerpt.
|
|
5
|
+
// `run:prep`'s code locations and `plan:consumers` both search a name this way, so the parse and the
|
|
6
|
+
// no-match-versus-failure reading live here rather than in each.
|
|
7
|
+
|
|
8
|
+
const GREP_LINE = /^(?<path>[^:]+):(?<line>\d+):(?<text>.*)$/u
|
|
9
|
+
const MAX_EXCERPT_LENGTH = 80
|
|
10
|
+
const ELLIPSIS = '…'
|
|
11
|
+
// `git grep` exits 1 for no match; any other exit is a search that never ran.
|
|
12
|
+
const GREP_NO_MATCH_EXIT = 1
|
|
13
|
+
|
|
14
|
+
interface Hit {
|
|
15
|
+
path: string
|
|
16
|
+
line: string
|
|
17
|
+
excerpt: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface GrepResult {
|
|
21
|
+
hits: ReadonlyArray<Hit>
|
|
22
|
+
has_failed: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function shorten(text: string): string {
|
|
26
|
+
const trimmed = text.trim()
|
|
27
|
+
|
|
28
|
+
if (trimmed.length <= MAX_EXCERPT_LENGTH) return trimmed
|
|
29
|
+
|
|
30
|
+
return `${trimmed.slice(0, MAX_EXCERPT_LENGTH)}${ELLIPSIS}`
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// `git grep -n` prints `path:line:text`; the text may itself hold colons, so only the first two split.
|
|
34
|
+
function to_hit(output_line: string): Hit | undefined {
|
|
35
|
+
const groups = GREP_LINE.exec(output_line)?.groups
|
|
36
|
+
|
|
37
|
+
if (groups === undefined) return undefined
|
|
38
|
+
|
|
39
|
+
// All three groups are non-optional in `GREP_LINE`, so a match always carries each of them.
|
|
40
|
+
const { path, line, text } = groups as Record<'line' | 'path' | 'text', string>
|
|
41
|
+
|
|
42
|
+
return { path, line, excerpt: shorten(text) }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function parse(stdout: string): Array<Hit> {
|
|
46
|
+
const hits = stdout.split('\n').map((line) => to_hit(line))
|
|
47
|
+
|
|
48
|
+
return hits.filter((hit): hit is Hit => hit !== undefined)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// `git grep` exits 1 when nothing matches, which `git_spawn.read` raises. Only that is "no match": a
|
|
52
|
+
// git without `grep -m` (older than 2.38) exits 129, and naming every target absent then would send
|
|
53
|
+
// the reader away from code that is there. `root` searches that checkout rather than the working
|
|
54
|
+
// directory's.
|
|
55
|
+
async function search(
|
|
56
|
+
target: string,
|
|
57
|
+
flags: ReadonlyArray<string>,
|
|
58
|
+
pathspecs: ReadonlyArray<string>,
|
|
59
|
+
root?: string,
|
|
60
|
+
): Promise<GrepResult> {
|
|
61
|
+
const location = root === undefined ? [] : ['-C', root]
|
|
62
|
+
const grep_arguments = [
|
|
63
|
+
...location,
|
|
64
|
+
'grep',
|
|
65
|
+
'-n',
|
|
66
|
+
'-I',
|
|
67
|
+
'-F',
|
|
68
|
+
...flags,
|
|
69
|
+
'-e',
|
|
70
|
+
target,
|
|
71
|
+
'--',
|
|
72
|
+
...pathspecs,
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
return { hits: parse(await git_spawn.read(grep_arguments)), has_failed: false }
|
|
77
|
+
} catch (error) {
|
|
78
|
+
return { hits: [], has_failed: get_exit_code(error) !== GREP_NO_MATCH_EXIT }
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const git_grep_hits = { parse, search }
|
|
83
|
+
|
|
84
|
+
export type { GrepResult, Hit }
|
|
85
|
+
export { git_grep_hits }
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
//
|
|
10
10
|
// The list is single-sourced here because it has three consumers that must not drift apart: the
|
|
11
11
|
// probes that clear it, the fixture that clears it, and the unit-suite guard that refuses a write
|
|
12
|
-
// while any of it is set (`
|
|
12
|
+
// while any of it is set (`tools/test/test-repository-guard.ts`).
|
|
13
13
|
//
|
|
14
14
|
// **Only the variables that redirect where git writes are listed.** `GIT_PREFIX`, `GIT_EDITOR` and
|
|
15
15
|
// the `GIT_CONFIG_*` family are exported to hooks too and are deliberately absent: clearing them
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { git_spawn_sync } from './git-spawn-sync'
|
|
4
|
+
|
|
5
|
+
// The paths merging another branch into this working tree would stop on, read without touching any
|
|
6
|
+
// index or ref (joshuafolkken/kit#4348). **The working tree, not `HEAD`, is ours**: `josh ship` asks
|
|
7
|
+
// before its commit, so the change it is about to ship is still uncommitted. Each path is merged on
|
|
8
|
+
// its own, as `merge-tree` would merge its content: a side left as the merge base had it, or both
|
|
9
|
+
// sides alike, merges cleanly; a side that deleted or added what the other changed differently
|
|
10
|
+
// conflicts; otherwise `git merge-file` decides. Only blob ids are compared, so no content is read.
|
|
11
|
+
|
|
12
|
+
const CLEAN_EXIT_CODE = 0
|
|
13
|
+
const HEAD = 'HEAD'
|
|
14
|
+
|
|
15
|
+
interface Sides {
|
|
16
|
+
base: string | undefined
|
|
17
|
+
ours: string | undefined
|
|
18
|
+
theirs: string | undefined
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface Commits {
|
|
22
|
+
base: string
|
|
23
|
+
theirs: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function blob_id(revision: string, file_path: string, cwd: string): string | undefined {
|
|
27
|
+
return git_spawn_sync.read(['rev-parse', '--verify', '--quiet', `${revision}:${file_path}`], {
|
|
28
|
+
cwd,
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Written to the object store so `merge-file --object-id` can read it; no index or ref moves.
|
|
33
|
+
function working_blob_id(file_path: string, cwd: string): string | undefined {
|
|
34
|
+
if (!existsSync(path.join(cwd, file_path))) return undefined
|
|
35
|
+
|
|
36
|
+
return git_spawn_sync.read(['hash-object', '-w', '--', file_path], { cwd })
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function is_one_sided(sides: Sides): boolean {
|
|
40
|
+
return sides.ours === sides.theirs || sides.ours === sides.base || sides.theirs === sides.base
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function is_complete(sides: Sides): sides is Record<keyof Sides, string> {
|
|
44
|
+
return sides.base !== undefined && sides.ours !== undefined && sides.theirs !== undefined
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function is_merged(sides: Sides, cwd: string): boolean {
|
|
48
|
+
if (is_one_sided(sides)) return true
|
|
49
|
+
if (!is_complete(sides)) return false
|
|
50
|
+
|
|
51
|
+
const { base, ours, theirs } = sides
|
|
52
|
+
const result = git_spawn_sync.run(['merge-file', '-p', '--object-id', ours, base, theirs], {
|
|
53
|
+
cwd,
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
return result.exit_code === CLEAN_EXIT_CODE
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function sides_of(file_path: string, commits: Commits, cwd: string): Sides {
|
|
60
|
+
return {
|
|
61
|
+
base: blob_id(commits.base, file_path, cwd),
|
|
62
|
+
ours: working_blob_id(file_path, cwd),
|
|
63
|
+
theirs: blob_id(commits.theirs, file_path, cwd),
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Of `paths` (relative to `cwd`, the working tree's root), the ones merging `theirs` would stop on;
|
|
68
|
+
// `undefined` where the merge base with `theirs` could not be read.
|
|
69
|
+
function working_tree_conflicts(
|
|
70
|
+
theirs: string,
|
|
71
|
+
paths: ReadonlyArray<string>,
|
|
72
|
+
cwd: string,
|
|
73
|
+
): ReadonlyArray<string> | undefined {
|
|
74
|
+
const base = git_spawn_sync.read(['merge-base', HEAD, theirs], { cwd })
|
|
75
|
+
|
|
76
|
+
if (base === undefined) return undefined
|
|
77
|
+
|
|
78
|
+
return paths.filter((file_path) => !is_merged(sides_of(file_path, { base, theirs }, cwd), cwd))
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const git_merge_conflicts = { working_tree_conflicts }
|
|
82
|
+
|
|
83
|
+
export { git_merge_conflicts }
|
|
@@ -13,6 +13,19 @@ import { git_issue, type IssueInfo } from './git-issue'
|
|
|
13
13
|
// anything changes, and all of them are reported at once.** No rule is new: each
|
|
14
14
|
// answer comes from the function the later stage refuses with, so the two cannot drift apart.
|
|
15
15
|
|
|
16
|
+
// Which precondition a problem leaves unmet, so a stopped `josh ship` records the kind beside the text
|
|
17
|
+
// (joshuafolkken/kit#4166).
|
|
18
|
+
const PRECONDITION = {
|
|
19
|
+
ISSUE: 'issue',
|
|
20
|
+
BRANCH: 'branch',
|
|
21
|
+
CLASSIFICATION: 'classification',
|
|
22
|
+
} as const
|
|
23
|
+
|
|
24
|
+
interface Unmet {
|
|
25
|
+
kind: string
|
|
26
|
+
problem: string
|
|
27
|
+
}
|
|
28
|
+
|
|
16
29
|
interface PreflightInput {
|
|
17
30
|
cli_input: string | undefined
|
|
18
31
|
will_open_pr: boolean
|
|
@@ -26,14 +39,20 @@ interface Target {
|
|
|
26
39
|
|
|
27
40
|
interface Resolution {
|
|
28
41
|
target: Target | undefined
|
|
29
|
-
problems: Array<
|
|
42
|
+
problems: Array<Unmet>
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function unmet(kind: string, problem: string): Unmet {
|
|
46
|
+
return { kind, problem }
|
|
30
47
|
}
|
|
31
48
|
|
|
32
49
|
function resolve_from_branch(current_branch: string): Resolution {
|
|
33
50
|
const number = git_issue.branch_number(current_branch)
|
|
34
51
|
|
|
35
52
|
if (number === undefined) {
|
|
36
|
-
|
|
53
|
+
const problem = unmet(PRECONDITION.ISSUE, git_issue.branch_derivation_error(current_branch))
|
|
54
|
+
|
|
55
|
+
return { target: undefined, problems: [problem] }
|
|
37
56
|
}
|
|
38
57
|
|
|
39
58
|
return { target: { number, branch_name: current_branch }, problems: [] }
|
|
@@ -55,7 +74,10 @@ function resolve_parsed(
|
|
|
55
74
|
return {
|
|
56
75
|
target,
|
|
57
76
|
problems: [
|
|
58
|
-
|
|
77
|
+
unmet(
|
|
78
|
+
PRECONDITION.BRANCH,
|
|
79
|
+
`Branch mismatch: on "${current_branch}", but the title resolves to "${parsed.branch_name}".`,
|
|
80
|
+
),
|
|
59
81
|
],
|
|
60
82
|
}
|
|
61
83
|
}
|
|
@@ -68,7 +90,10 @@ function resolve_from_title(
|
|
|
68
90
|
try {
|
|
69
91
|
return resolve_parsed(git_issue.parse(cli_input), current_branch, default_branch)
|
|
70
92
|
} catch (error) {
|
|
71
|
-
return {
|
|
93
|
+
return {
|
|
94
|
+
target: undefined,
|
|
95
|
+
problems: [unmet(PRECONDITION.ISSUE, error_text.message_of(error))],
|
|
96
|
+
}
|
|
72
97
|
}
|
|
73
98
|
}
|
|
74
99
|
|
|
@@ -80,13 +105,13 @@ async function resolve_target(cli_input: string | undefined): Promise<Resolution
|
|
|
80
105
|
return resolve_from_title(cli_input, current_branch, await git_command.get_default_branch())
|
|
81
106
|
}
|
|
82
107
|
|
|
83
|
-
async function classification_problems(target: Target): Promise<Array<
|
|
108
|
+
async function classification_problems(target: Target): Promise<Array<Unmet>> {
|
|
84
109
|
try {
|
|
85
110
|
await git_pr.release_classification(target.number, target.branch_name)
|
|
86
111
|
|
|
87
112
|
return []
|
|
88
113
|
} catch (error) {
|
|
89
|
-
return [error_text.message_of(error)]
|
|
114
|
+
return [unmet(PRECONDITION.CLASSIFICATION, error_text.message_of(error))]
|
|
90
115
|
}
|
|
91
116
|
}
|
|
92
117
|
|
|
@@ -106,8 +131,8 @@ async function announce_evidence(branch_name: string): Promise<void> {
|
|
|
106
131
|
)
|
|
107
132
|
}
|
|
108
133
|
|
|
109
|
-
function refusal(problems: ReadonlyArray<
|
|
110
|
-
const lines = problems.map((problem) => ` - ${problem}`)
|
|
134
|
+
function refusal(problems: ReadonlyArray<Unmet>): Error {
|
|
135
|
+
const lines = problems.map(({ problem }) => ` - ${problem}`)
|
|
111
136
|
|
|
112
137
|
return new Error(
|
|
113
138
|
[
|
|
@@ -119,7 +144,7 @@ function refusal(problems: ReadonlyArray<string>): Error {
|
|
|
119
144
|
|
|
120
145
|
interface PreflightAnswer {
|
|
121
146
|
pr_target: Target | undefined
|
|
122
|
-
problems: Array<
|
|
147
|
+
problems: Array<Unmet>
|
|
123
148
|
}
|
|
124
149
|
|
|
125
150
|
async function answer(input: PreflightInput): Promise<PreflightAnswer> {
|
|
@@ -131,9 +156,9 @@ async function answer(input: PreflightInput): Promise<PreflightAnswer> {
|
|
|
131
156
|
return { pr_target, problems: [...problems, ...pr_problems] }
|
|
132
157
|
}
|
|
133
158
|
|
|
134
|
-
// The unmet preconditions as a list, so `josh ship` can ask them before its
|
|
159
|
+
// The unmet preconditions as a list, each with its kind, so `josh ship` can ask them before its
|
|
135
160
|
// review and gate start instead of meeting the refusal at the commit stage.
|
|
136
|
-
async function problems_of(input: PreflightInput): Promise<Array<
|
|
161
|
+
async function problems_of(input: PreflightInput): Promise<Array<Unmet>> {
|
|
137
162
|
const { problems } = await answer(input)
|
|
138
163
|
|
|
139
164
|
return problems
|
|
@@ -149,5 +174,5 @@ async function check(input: PreflightInput): Promise<void> {
|
|
|
149
174
|
|
|
150
175
|
const git_preflight = { check, problems_of }
|
|
151
176
|
|
|
152
|
-
export type { PreflightInput }
|
|
177
|
+
export type { PreflightInput, Unmet }
|
|
153
178
|
export { git_preflight }
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
1
2
|
import { execa } from 'execa'
|
|
2
3
|
import { git_utilities } from './constants'
|
|
3
4
|
import {
|
|
@@ -8,8 +9,6 @@ import {
|
|
|
8
9
|
} from './git-execa-error'
|
|
9
10
|
import { git_ssh_keepalive } from './git-ssh-keepalive'
|
|
10
11
|
|
|
11
|
-
const MS_PER_SECOND = 1000
|
|
12
|
-
|
|
13
12
|
// The budget for one `git push`, and the reason a push can no longer wait without end.
|
|
14
13
|
// Measured on PR #1244: the commit itself took 0.6 seconds and the push
|
|
15
14
|
// then sat silent for 8 minutes 13 seconds before it was found by hand and killed — about 9 minutes
|
|
@@ -2,21 +2,28 @@ import { z } from 'zod'
|
|
|
2
2
|
|
|
3
3
|
const package_name_schema = z.object({ name: z.string().min(1) })
|
|
4
4
|
|
|
5
|
+
// REST answers `null` for a field it has no value for yet — a running check run's `conclusion` above
|
|
6
|
+
// all — and one rejected element fails the whole snapshot, which then reads as an empty rollup until
|
|
7
|
+
// the last check completes (joshuafolkken/kit#4351). Every string field is `nullish` for that reason.
|
|
5
8
|
const rollup_item_schema = z.looseObject({
|
|
6
9
|
// eslint-disable-next-line @typescript-eslint/naming-convention -- GraphQL field name from GitHub API
|
|
7
|
-
__typename: z.string().
|
|
8
|
-
state: z.string().
|
|
9
|
-
status: z.string().
|
|
10
|
-
conclusion: z.string().
|
|
11
|
-
name: z.string().
|
|
12
|
-
context: z.string().
|
|
10
|
+
__typename: z.string().nullish(),
|
|
11
|
+
state: z.string().nullish(),
|
|
12
|
+
status: z.string().nullish(),
|
|
13
|
+
conclusion: z.string().nullish(),
|
|
14
|
+
name: z.string().nullish(),
|
|
15
|
+
context: z.string().nullish(),
|
|
13
16
|
description: z.string().nullish(),
|
|
14
17
|
})
|
|
15
18
|
|
|
16
19
|
const pr_raw_schema = z.object({
|
|
17
20
|
statusCheckRollup: z.array(rollup_item_schema).optional(),
|
|
21
|
+
// The base branch's required status check contexts, read from its rules — empty where none are
|
|
22
|
+
// set or they could not be read (`git-gh-branch-rules.ts`).
|
|
23
|
+
requiredContexts: z.array(z.string()).optional(),
|
|
18
24
|
mergeStateStatus: z.string().optional(),
|
|
19
25
|
reviewDecision: z.string().optional(),
|
|
26
|
+
headRefOid: z.string().optional(),
|
|
20
27
|
})
|
|
21
28
|
|
|
22
29
|
const pull_comment_schema = z.object({
|
|
@@ -29,6 +36,7 @@ const ai_review_pull_comment_schema = z.object({
|
|
|
29
36
|
body: z.string().optional(),
|
|
30
37
|
url: z.string().optional(),
|
|
31
38
|
author: z.object({ login: z.string().optional() }).optional(),
|
|
39
|
+
updatedAt: z.string().optional(),
|
|
32
40
|
})
|
|
33
41
|
|
|
34
42
|
const pr_info_schema = z.object({
|
|
@@ -40,6 +48,8 @@ const pr_info_schema = z.object({
|
|
|
40
48
|
const epic_issue_schema = z.object({
|
|
41
49
|
number: z.number(),
|
|
42
50
|
body: z.string().optional(),
|
|
51
|
+
// REST answers null for an issue never closed and `reopened` for one a person reopened.
|
|
52
|
+
stateReason: z.string().nullish(),
|
|
43
53
|
})
|
|
44
54
|
|
|
45
55
|
// One blocker as `gh` reports it inside the `blockedBy` connection. `state` comes back with the
|
|
@@ -99,6 +109,7 @@ const rest_comment_schema = z.looseObject({
|
|
|
99
109
|
body: z.string().nullish(),
|
|
100
110
|
html_url: z.string().optional(),
|
|
101
111
|
user: z.looseObject({ login: z.string().optional() }).nullish(),
|
|
112
|
+
updated_at: z.string().optional(),
|
|
102
113
|
})
|
|
103
114
|
|
|
104
115
|
// The `number,state,labels,body` read, for the epic check and the `--add` closed-epic refusal.
|
|
@@ -128,6 +139,12 @@ const epic_subject_schema = z.object({
|
|
|
128
139
|
// So `blockedBy` is optional for the reason it is absent in practice — the display and the busy
|
|
129
140
|
// check never ask for it, and a field that was not asked for is left out of the mapped row rather
|
|
130
141
|
// than filled in.
|
|
142
|
+
// Who wrote an issue, as REST names it — read through `gh_author_association.author_of`.
|
|
143
|
+
const author_fields_schema = {
|
|
144
|
+
author_association: z.string().nullish(),
|
|
145
|
+
user: z.looseObject({ login: z.string() }).nullish(),
|
|
146
|
+
}
|
|
147
|
+
|
|
131
148
|
const open_issue_schema = z.object({
|
|
132
149
|
number: z.number(),
|
|
133
150
|
title: z.string(),
|
|
@@ -136,14 +153,20 @@ const open_issue_schema = z.object({
|
|
|
136
153
|
blockedBy: blocked_by_schema,
|
|
137
154
|
// Present only on the pickup listing, which reads it for the paths each issue declares.
|
|
138
155
|
body: z.string().optional(),
|
|
156
|
+
...author_fields_schema,
|
|
157
|
+
// Assembled by the pickup from the author above, never read off the listing: whether the author
|
|
158
|
+
// has write access. Absent on every other listing.
|
|
159
|
+
author_trusted: z.boolean().optional(),
|
|
139
160
|
})
|
|
140
161
|
|
|
141
162
|
type RollupItemData = z.infer<typeof rollup_item_schema>
|
|
142
163
|
type EpicChildData = z.infer<typeof epic_child_schema>
|
|
164
|
+
type EpicIssueData = z.infer<typeof epic_issue_schema>
|
|
143
165
|
type OpenIssueData = z.infer<typeof open_issue_schema>
|
|
144
166
|
type RestCommentData = z.infer<typeof rest_comment_schema>
|
|
145
167
|
|
|
146
168
|
export {
|
|
169
|
+
author_fields_schema,
|
|
147
170
|
package_name_schema,
|
|
148
171
|
rollup_item_schema,
|
|
149
172
|
pr_raw_schema,
|
|
@@ -159,4 +182,4 @@ export {
|
|
|
159
182
|
blocking_issue_schema,
|
|
160
183
|
blocked_by_schema,
|
|
161
184
|
}
|
|
162
|
-
export type { RollupItemData, EpicChildData, OpenIssueData, RestCommentData }
|
|
185
|
+
export type { RollupItemData, EpicChildData, EpicIssueData, OpenIssueData, RestCommentData }
|
package/scripts/git/git-spawn.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GIT_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
1
|
+
import { GIT_TIMEOUT_MS, MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
2
2
|
import { execa } from 'execa'
|
|
3
3
|
import { git_utilities } from './constants'
|
|
4
4
|
import {
|
|
@@ -47,7 +47,6 @@ async function read(
|
|
|
47
47
|
// still takes this one. The push's budget is reused rather than a second number chosen: both transfer
|
|
48
48
|
// objects over the same transport, and that one is already read off what a healthy transfer costs here.
|
|
49
49
|
const REMOTE_TIMEOUT_MS = PUSH_TIMEOUT_MS
|
|
50
|
-
const MS_PER_SECOND = 1000
|
|
51
50
|
|
|
52
51
|
// A budget kill is reported as a timeout, never as whatever the killed process printed first, and
|
|
53
52
|
// `cause` carries the same `TIMEOUT_EXIT_CODE` a timed-out push does. Unlike the push it is not
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { animation_helpers, type AnimationOptions } from '#scripts/lib/animation-helpers'
|
|
2
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
2
3
|
import { REQUIRED_STATUS_LENGTH, STAGED_STATUS_INDEX, UNTRACKED_FILE_PREFIX } from './constants'
|
|
3
4
|
import { git_command } from './git-command'
|
|
4
5
|
|
|
5
6
|
const WARNING_ICON = '🔔'
|
|
6
|
-
const PACKAGE_JSON_FILE = 'package.json'
|
|
7
7
|
const STATUS_PREFIX_LENGTH = 2
|
|
8
8
|
const VERSION_NOT_UPDATED = 'Not updated'
|
|
9
9
|
|
|
@@ -62,7 +62,7 @@ function is_package_json_staged(status_output: string): boolean {
|
|
|
62
62
|
|
|
63
63
|
const filename = extract_filename(line)
|
|
64
64
|
|
|
65
|
-
return filename ===
|
|
65
|
+
return filename === PACKAGE_JSON
|
|
66
66
|
})
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -148,7 +148,7 @@ async function check_package_json_version(): Promise<boolean> {
|
|
|
148
148
|
return await animation_helpers.execute_with_animation(
|
|
149
149
|
'Checking if package.json version is updated...',
|
|
150
150
|
async () => {
|
|
151
|
-
const diff_output: string = await git_command.diff_cached(
|
|
151
|
+
const diff_output: string = await git_command.diff_cached(PACKAGE_JSON)
|
|
152
152
|
|
|
153
153
|
return is_version_updated_in_diff(diff_output)
|
|
154
154
|
},
|
|
@@ -166,7 +166,7 @@ async function check_branch_version(): Promise<boolean> {
|
|
|
166
166
|
return await animation_helpers.execute_with_animation(
|
|
167
167
|
'Checking if version is already updated on this branch...',
|
|
168
168
|
async () => {
|
|
169
|
-
const diff_output: string = await git_command.diff_main(
|
|
169
|
+
const diff_output: string = await git_command.diff_main(PACKAGE_JSON)
|
|
170
170
|
|
|
171
171
|
return is_version_updated_in_diff(diff_output)
|
|
172
172
|
},
|
|
@@ -19,6 +19,7 @@ import { repository_lock } from './repository-lock'
|
|
|
19
19
|
// `lane-start-point.ts` and `release-publish.ts` both act on — so this module stops at "what git
|
|
20
20
|
// printed" and the meaning of it is decided there.
|
|
21
21
|
const WORKTREE = 'worktree'
|
|
22
|
+
const ORIGIN = 'origin'
|
|
22
23
|
|
|
23
24
|
// **Every call that writes `.git/worktrees/` runs under one repository-wide lock**.
|
|
24
25
|
// `git worktree add` is not safe against itself: while one add is still
|
|
@@ -87,6 +88,17 @@ async function worktree_add(
|
|
|
87
88
|
return await locked([WORKTREE, ...flags, directory, start_point ?? branch_name], SUITE_TIMEOUT_MS)
|
|
88
89
|
}
|
|
89
90
|
|
|
91
|
+
// **A lane's upstream is written when it is opened, not by its first push**
|
|
92
|
+
// (joshuafolkken/kit#4653). A Codex lane's sandbox cannot write the common directory's `config`, so the
|
|
93
|
+
// `--set-upstream` its push falls back to records nothing, and every later reader of `@{upstream}`
|
|
94
|
+
// would take the pushed lane for an unpushed one. Pointing it at the lane's own name on `origin` keeps
|
|
95
|
+
// a bare `git push` working before the remote branch exists. Under the work-tree lock, since two lanes
|
|
96
|
+
// opened at once would otherwise race on `config.lock`.
|
|
97
|
+
async function set_upstream(branch_name: string): Promise<void> {
|
|
98
|
+
await locked(['config', `branch.${branch_name}.remote`, ORIGIN])
|
|
99
|
+
await locked(['config', `branch.${branch_name}.merge`, `refs/heads/${branch_name}`])
|
|
100
|
+
}
|
|
101
|
+
|
|
90
102
|
// A throwaway tree at one commit, on no branch — `josh test:red` checks the merge-base out here, so
|
|
91
103
|
// the pre-fix tree is built without creating a branch or touching the caller's tree and index.
|
|
92
104
|
async function worktree_add_detached(directory: string, commit: string): Promise<string> {
|
|
@@ -139,6 +151,7 @@ async function branch_delete(branch_name: string): Promise<string> {
|
|
|
139
151
|
const git_worktree = {
|
|
140
152
|
branch_delete,
|
|
141
153
|
ls_remote_branch,
|
|
154
|
+
set_upstream,
|
|
142
155
|
worktree_add,
|
|
143
156
|
worktree_add_detached,
|
|
144
157
|
worktree_list,
|
|
@@ -7,7 +7,10 @@ import { git_spawn } from './git-spawn'
|
|
|
7
7
|
// **A branch is removed only when all three hold** — its upstream is gone, it is merged into the
|
|
8
8
|
// default branch, and no work tree has it checked out. Gone alone is not enough: a branch whose remote
|
|
9
9
|
// was deleted by hand before its work merged still holds the only copy of it. A branch with no
|
|
10
|
-
// upstream at all is never gone, so a local-only branch stays.
|
|
10
|
+
// upstream at all is never gone, so a local-only branch stays. A lane branch has its upstream from the
|
|
11
|
+
// moment it opens (`lane-open.ts`), so an unpushed lane reads `[gone]`: the merge test keeps one with
|
|
12
|
+
// commits of its own, and one with none — merged already — is kept by its work tree, then deleted with
|
|
13
|
+
// nothing lost once the tree is gone.
|
|
11
14
|
//
|
|
12
15
|
// **One `for-each-ref` read carries the work-tree answer too** — `%(worktreepath)` is git's own
|
|
13
16
|
// record of which tree holds the branch, so no `git worktree list` parse is repeated here.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// The resolution of a merge that stopped on `document-byte-budget.ts`'s ceiling rows
|
|
2
|
+
// (joshuafolkken/kit#4976). Two lanes that grow the same page each raise that page's ceiling and add a
|
|
3
|
+
// comment naming their Issue, so the later merge stops on the same row from both sides.
|
|
4
|
+
//
|
|
5
|
+
// **Only a hunk made of ceiling rows and their comments is resolved**: each side is comment lines
|
|
6
|
+
// followed by at most one ceiling row, both rows name the same page, and the result keeps every
|
|
7
|
+
// comment from both sides and the larger ceiling. A hunk holding only comments is resolved only when
|
|
8
|
+
// the row it annotates follows it. Any other hunk — the table's structure, another function — throws,
|
|
9
|
+
// so the merge stays the `conflict` it was. The merged page's size is still checked against the kept
|
|
10
|
+
// ceiling by `document-byte-budget.test.ts`.
|
|
11
|
+
|
|
12
|
+
const BUDGET_TABLE_PATH = 'scripts/document/document-byte-budget.ts'
|
|
13
|
+
const CEILING_ROW = /^\t\{ path: '(?<path>[^']+)', bytes: (?<bytes>[\d_]+) \},$/u
|
|
14
|
+
const COMMENT_PREFIX = '\t// '
|
|
15
|
+
const CONFLICT_MARKER = /^(?:<{7}|={7}|>{7}|\|{7})/mu
|
|
16
|
+
// A diff3 base section, dropped before the hunks are read: the resolution needs only the two sides.
|
|
17
|
+
const BASE_SECTION = /^\|{7} .*\n(?:.*\n)*?(?=={7}\n)/gmu
|
|
18
|
+
// One conflict hunk; the line after it is captured without being consumed.
|
|
19
|
+
const HUNK = /^<{7} .*\n(?<ours>(?:.*\n)*?)={7}\n(?<theirs>(?:.*\n)*?)>{7} .*\n(?=(?<after>.*))/gmu
|
|
20
|
+
|
|
21
|
+
interface Side {
|
|
22
|
+
comments: ReadonlyArray<string>
|
|
23
|
+
row: string | undefined
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function side_of(text: string): Side {
|
|
27
|
+
const lines = text.split('\n').slice(0, -1)
|
|
28
|
+
const last = lines.at(-1) ?? ''
|
|
29
|
+
const row = CEILING_ROW.test(last) ? last : undefined
|
|
30
|
+
const comments = row === undefined ? lines : lines.slice(0, -1)
|
|
31
|
+
|
|
32
|
+
if (comments.some((line) => !line.startsWith(COMMENT_PREFIX))) {
|
|
33
|
+
throw new Error(`${BUDGET_TABLE_PATH}: a conflict outside the ceiling rows`)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return { comments, row }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function ceiling_of(row: string): { path: string; bytes: number } {
|
|
40
|
+
const groups: Partial<Record<'path' | 'bytes', string>> = CEILING_ROW.exec(row)?.groups ?? {}
|
|
41
|
+
|
|
42
|
+
return { path: groups.path ?? '', bytes: Number(groups.bytes?.replaceAll('_', '')) }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function larger_row(ours: string, theirs: string): string {
|
|
46
|
+
const [mine, other] = [ceiling_of(ours), ceiling_of(theirs)]
|
|
47
|
+
|
|
48
|
+
if (mine.path !== other.path) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
`${BUDGET_TABLE_PATH}: rows of two pages conflict (${mine.path}, ${other.path})`,
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return mine.bytes >= other.bytes ? ours : theirs
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function rows_of(ours: Side, theirs: Side, after: string): ReadonlyArray<string> {
|
|
58
|
+
if (ours.row !== undefined && theirs.row !== undefined) return [larger_row(ours.row, theirs.row)]
|
|
59
|
+
// Equal here only when both are undefined: a hunk of comments alone, kept only above a row.
|
|
60
|
+
if (ours.row === theirs.row && CEILING_ROW.test(after)) return []
|
|
61
|
+
|
|
62
|
+
throw new Error(`${BUDGET_TABLE_PATH}: a ceiling row changed on one side only`)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function merge_hunk(ours: string, theirs: string, after: string): string {
|
|
66
|
+
const [mine, other] = [side_of(ours), side_of(theirs)]
|
|
67
|
+
const comments = [...new Set([...mine.comments, ...other.comments])]
|
|
68
|
+
|
|
69
|
+
return [...comments, ...rows_of(mine, other, after)].map((line) => `${line}\n`).join('')
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// The file with every hunk resolved; throws when any hunk is not a ceiling-row conflict.
|
|
73
|
+
function resolve(content: string): string {
|
|
74
|
+
const resolved = content
|
|
75
|
+
.replaceAll(BASE_SECTION, '')
|
|
76
|
+
.replaceAll(HUNK, (_hunk: string, ours: string, theirs: string, after: string) =>
|
|
77
|
+
merge_hunk(ours, theirs, after),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
if (resolved === content || CONFLICT_MARKER.test(resolved)) {
|
|
81
|
+
throw new Error(`${BUDGET_TABLE_PATH}: a conflict left unresolved`)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return resolved
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const main_merge_budget_conflict = { BUDGET_TABLE_PATH, resolve }
|
|
88
|
+
|
|
89
|
+
export { main_merge_budget_conflict }
|