@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
package/scripts/rules/gh-api.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { git_argv } from './git-argv'
|
|
2
|
+
|
|
1
3
|
// The one reading of a `gh api` segment shared by the rows of `delivered-rules.ts` that judge such a
|
|
2
4
|
// call by its spelling: the issue-body-read guard classifies read vs write,
|
|
3
5
|
// and the third-party-write guard needs the same classification plus the target `owner/repo`. Two
|
|
@@ -17,10 +19,39 @@ const GH_API_COMMAND = new RegExp(String.raw`^gh\s+${GH_FLAGS}api\s`, 'u')
|
|
|
17
19
|
// The method override, and the field flags that turn a bare `gh api` into a POST. **All four field
|
|
18
20
|
// spellings**, `-F` included — it is `--field`'s short form and reads as a different flag to a
|
|
19
21
|
// pattern that only knows `-f`. A body passed with `--input <file>` counts as a write too: it carries
|
|
20
|
-
// the fields inside the file.
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// the fields inside the file. A short flag also takes its value attached (`-XPUT`, `-fname=x`), as
|
|
23
|
+
// `gh` accepts.
|
|
24
|
+
//
|
|
25
|
+
// **Read off the argv at flag positions, not the joined line**: a flag spelled inside a field value
|
|
26
|
+
// (`-f 'note=a -X GET'`) is that field's value, and reading it as the method would class a POST a
|
|
27
|
+
// read (joshuafolkken/kit#4650).
|
|
28
|
+
const GH_COMMAND = 'gh'
|
|
29
|
+
const METHOD_FLAGS: ReadonlySet<string> = new Set(['-X', '--method'])
|
|
30
|
+
const ATTACHED_METHOD = /^(?:-X=?|--method=)([A-Za-z]+)$/u
|
|
31
|
+
const FIELD_FLAGS: ReadonlySet<string> = new Set(['-f', '-F', '--field', '--raw-field', '--input'])
|
|
32
|
+
const ATTACHED_FIELD = /^(?:-[fF].|--(?:raw-field|field|input)=)/u
|
|
33
|
+
const QUOTES = /['"]/gu
|
|
34
|
+
const FLAG_PREFIX = '-'
|
|
35
|
+
const NEXT = 1
|
|
23
36
|
const READ_METHOD = 'GET'
|
|
37
|
+
// `gh api`'s flags that take a value as the next word, beside the repository selector — skipped so
|
|
38
|
+
// `-X POST` or `-f body=…` is not read as the endpoint, and a value is not read as a flag.
|
|
39
|
+
const API_VALUE_TAKING_FLAGS: ReadonlySet<string> = new Set([
|
|
40
|
+
'-R',
|
|
41
|
+
'--repo',
|
|
42
|
+
...METHOD_FLAGS,
|
|
43
|
+
...FIELD_FLAGS,
|
|
44
|
+
'-H',
|
|
45
|
+
'--header',
|
|
46
|
+
'-q',
|
|
47
|
+
'--jq',
|
|
48
|
+
'-t',
|
|
49
|
+
'--template',
|
|
50
|
+
'--hostname',
|
|
51
|
+
'-p',
|
|
52
|
+
'--preview',
|
|
53
|
+
'--cache',
|
|
54
|
+
])
|
|
24
55
|
|
|
25
56
|
// `repos/<owner>/<repo>` from an api path, with both halves captured. The path may carry a leading
|
|
26
57
|
// slash, a query string, or further segments (`…/issues/5/comments`), so the owner and repo are taken
|
|
@@ -44,24 +75,111 @@ function is_gh_api(segment: string): boolean {
|
|
|
44
75
|
return GH_API_COMMAND.test(segment)
|
|
45
76
|
}
|
|
46
77
|
|
|
78
|
+
// Each flag of the call with the word after it — a word that is a value-taking flag's value is not
|
|
79
|
+
// a flag itself.
|
|
80
|
+
function flags_of(segment: string): Array<[string, string]> {
|
|
81
|
+
const words = git_argv.arguments_of(segment, GH_COMMAND) ?? []
|
|
82
|
+
|
|
83
|
+
return words
|
|
84
|
+
.map((word, index): [string, string] => [word, words[index + NEXT] ?? ''])
|
|
85
|
+
.filter(([word], index) => {
|
|
86
|
+
if (!word.startsWith(FLAG_PREFIX)) return false
|
|
87
|
+
|
|
88
|
+
return !API_VALUE_TAKING_FLAGS.has(words[index - NEXT] ?? '')
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function method_value(flag: string, next: string): string | undefined {
|
|
93
|
+
if (METHOD_FLAGS.has(flag)) return next.replaceAll(QUOTES, '')
|
|
94
|
+
|
|
95
|
+
return ATTACHED_METHOD.exec(flag)?.[1]
|
|
96
|
+
}
|
|
97
|
+
|
|
47
98
|
// A read is a `GET` — explicit via a method flag, or implicit when no field flag makes it a POST.
|
|
48
|
-
// The explicit `-X` / `--method` value, upper-cased, or `undefined` when the call names none
|
|
99
|
+
// The explicit `-X` / `--method` value, upper-cased, or `undefined` when the call names none; the
|
|
100
|
+
// last one wins, as it does in `gh`.
|
|
49
101
|
function method_of(segment: string): string | undefined {
|
|
50
|
-
|
|
102
|
+
const methods = flags_of(segment).map(([flag, next]) => method_value(flag, next))
|
|
103
|
+
|
|
104
|
+
return methods.findLast((method) => method !== undefined)?.toUpperCase()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function is_field_flag(flag: string): boolean {
|
|
108
|
+
return FIELD_FLAGS.has(flag) || ATTACHED_FIELD.test(flag)
|
|
51
109
|
}
|
|
52
110
|
|
|
53
111
|
function is_read(segment: string): boolean {
|
|
54
112
|
const method = method_of(segment)
|
|
55
113
|
|
|
56
|
-
if (method !== undefined) return method
|
|
114
|
+
if (method !== undefined) return method === READ_METHOD
|
|
57
115
|
|
|
58
|
-
return
|
|
116
|
+
return flags_of(segment).every(([flag]) => !is_field_flag(flag))
|
|
59
117
|
}
|
|
60
118
|
|
|
61
119
|
function is_write(segment: string): boolean {
|
|
62
120
|
return !is_read(segment)
|
|
63
121
|
}
|
|
64
122
|
|
|
123
|
+
// What one field flag sends: the value itself, or the file `gh` reads it from — `-F key=@<path>` and
|
|
124
|
+
// `--input <path>`, standard input (`-`) excepted. `-f` / `--raw-field` sends `@<path>` as text.
|
|
125
|
+
interface FieldSource {
|
|
126
|
+
kind: 'text' | 'file'
|
|
127
|
+
value: string
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const INPUT_FLAG = '--input'
|
|
131
|
+
const READS_FILE_FLAGS: ReadonlySet<string> = new Set(['-F', '--field'])
|
|
132
|
+
const ATTACHED_PARTS = /^(-[fF]|--(?:raw-field|field|input))=?(.+)$/u
|
|
133
|
+
const ATTACHED_FLAG_GROUP = 1
|
|
134
|
+
const ATTACHED_VALUE_GROUP = 2
|
|
135
|
+
const FILE_PREFIX = '@'
|
|
136
|
+
const STANDARD_INPUT = '-'
|
|
137
|
+
const FIELD_KEY_END = '='
|
|
138
|
+
|
|
139
|
+
// The flag and its value, attached (`-fname=x`, `--input=path`) or as the next word.
|
|
140
|
+
function field_parts(flag: string, next: string): [string, string] | undefined {
|
|
141
|
+
if (FIELD_FLAGS.has(flag)) return [flag, next]
|
|
142
|
+
|
|
143
|
+
const match = ATTACHED_PARTS.exec(flag)
|
|
144
|
+
|
|
145
|
+
if (match === null) return undefined
|
|
146
|
+
|
|
147
|
+
return [String(match[ATTACHED_FLAG_GROUP]), String(match[ATTACHED_VALUE_GROUP])]
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function field_value(value: string): string {
|
|
151
|
+
return value.slice(value.indexOf(FIELD_KEY_END) + NEXT)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// The path a field flag has `gh` read, or `undefined` when it sends its value as text.
|
|
155
|
+
function file_path(flag: string, value: string): string | undefined {
|
|
156
|
+
if (flag === INPUT_FLAG) return value
|
|
157
|
+
|
|
158
|
+
const sent = field_value(value)
|
|
159
|
+
|
|
160
|
+
if (!READS_FILE_FLAGS.has(flag) || !sent.startsWith(FILE_PREFIX)) return undefined
|
|
161
|
+
|
|
162
|
+
return sent.slice(FILE_PREFIX.length)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function field_source(flag: string, raw: string): FieldSource | undefined {
|
|
166
|
+
const value = raw.replaceAll(QUOTES, '')
|
|
167
|
+
const path = file_path(flag, value)
|
|
168
|
+
|
|
169
|
+
if (path === undefined) return { kind: 'text', value: field_value(value) }
|
|
170
|
+
|
|
171
|
+
return path === STANDARD_INPUT ? undefined : { kind: 'file', value: path }
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function field_sources(segment: string): Array<FieldSource> {
|
|
175
|
+
return flags_of(segment).flatMap(([flag, next]) => {
|
|
176
|
+
const parts = field_parts(flag, next)
|
|
177
|
+
const source = parts === undefined ? undefined : field_source(...parts)
|
|
178
|
+
|
|
179
|
+
return source === undefined ? [] : [source]
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
65
183
|
function repo_target(segment: string): RepoTarget | undefined {
|
|
66
184
|
const match = REPO_PATH.exec(segment)
|
|
67
185
|
|
|
@@ -75,7 +193,9 @@ function is_owner_placeholder(owner: string): boolean {
|
|
|
75
193
|
}
|
|
76
194
|
|
|
77
195
|
const gh_api = {
|
|
196
|
+
API_VALUE_TAKING_FLAGS,
|
|
78
197
|
GH_FLAGS,
|
|
198
|
+
field_sources,
|
|
79
199
|
is_gh_api,
|
|
80
200
|
is_owner_placeholder,
|
|
81
201
|
is_read,
|
|
@@ -84,4 +204,5 @@ const gh_api = {
|
|
|
84
204
|
repo_target,
|
|
85
205
|
}
|
|
86
206
|
|
|
207
|
+
export type { FieldSource }
|
|
87
208
|
export { gh_api }
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { direct_pr_create } from './direct-pr-create'
|
|
2
|
+
import { git_argv } from './git-argv'
|
|
3
|
+
|
|
4
|
+
// The `gh <group> <action> -R <owner>/<repo>` reading the third-party-write guard needs
|
|
5
|
+
// (joshuafolkken/kit#4659). `gh pr create -R other/x` and `gh issue comment -R other/x` write to the
|
|
6
|
+
// repository the selector names, so a guard that judged only `gh api`'s `repos/<owner>/` path let
|
|
7
|
+
// every such write through.
|
|
8
|
+
//
|
|
9
|
+
// **A write unless it is a known read.** The read actions are few and stable; the write actions are
|
|
10
|
+
// many and grow with `gh`. Listing the reads makes a new write subcommand refused by default instead
|
|
11
|
+
// of passed by default.
|
|
12
|
+
|
|
13
|
+
const GH_COMMAND = 'gh'
|
|
14
|
+
const API_GROUP = 'api'
|
|
15
|
+
const SELECTOR_FLAGS: ReadonlySet<string> = new Set(['-R', '--repo'])
|
|
16
|
+
const ATTACHED_SELECTOR = /^(?:-R=?|--repo=)(.+)$/u
|
|
17
|
+
const QUOTES = /['"]/gu
|
|
18
|
+
const NEXT = 1
|
|
19
|
+
// Groups that never write with a selector, whatever follows them.
|
|
20
|
+
const READ_GROUPS: ReadonlySet<string> = new Set(['browse', 'search', 'status'])
|
|
21
|
+
const READ_ACTIONS: ReadonlySet<string> = new Set([
|
|
22
|
+
'check',
|
|
23
|
+
'checkout',
|
|
24
|
+
'checks',
|
|
25
|
+
'clone',
|
|
26
|
+
'diff',
|
|
27
|
+
'download',
|
|
28
|
+
'get',
|
|
29
|
+
'list',
|
|
30
|
+
'status',
|
|
31
|
+
'verify',
|
|
32
|
+
'verify-asset',
|
|
33
|
+
'view',
|
|
34
|
+
'watch',
|
|
35
|
+
])
|
|
36
|
+
// `GH_REPO=<selector>` — inline before `gh`, or exported earlier in the line — selects the repository
|
|
37
|
+
// exactly as `-R` does.
|
|
38
|
+
const GH_REPO_ASSIGNMENT = /(?:^|\s)GH_REPO=(\S+)/gu
|
|
39
|
+
const SELECTOR_GROUP = 1
|
|
40
|
+
|
|
41
|
+
function selector_value(word: string, next: string | undefined): string | undefined {
|
|
42
|
+
if (SELECTOR_FLAGS.has(word)) return next
|
|
43
|
+
|
|
44
|
+
return ATTACHED_SELECTOR.exec(word)?.[1]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Every `-R` / `--repo` value the call carries, quotes stripped. Each is a repository `gh` may send
|
|
48
|
+
// the write to, so the caller judges all of them rather than guessing which one `gh` keeps.
|
|
49
|
+
function selectors_of(args: ReadonlyArray<string>): Array<string> {
|
|
50
|
+
return args
|
|
51
|
+
.map((word, index) => selector_value(word, args[index + NEXT]))
|
|
52
|
+
.filter((value) => value !== undefined)
|
|
53
|
+
.map((value) => value.replaceAll(QUOTES, ''))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function is_write_call(args: ReadonlyArray<string>): boolean {
|
|
57
|
+
const [group = '', action = ''] = direct_pr_create.positional_words(args, SELECTOR_FLAGS)
|
|
58
|
+
|
|
59
|
+
if (group === API_GROUP || READ_GROUPS.has(group)) return false
|
|
60
|
+
|
|
61
|
+
return !READ_ACTIONS.has(action)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Every `GH_REPO` value assigned in `segments` — the write's own segment and those before it.
|
|
65
|
+
function assigned_selectors(segments: ReadonlyArray<string>): Array<string> {
|
|
66
|
+
return segments
|
|
67
|
+
.flatMap((segment) => [...segment.matchAll(GH_REPO_ASSIGNMENT)])
|
|
68
|
+
.map((match) => (match[SELECTOR_GROUP] ?? '').replaceAll(QUOTES, ''))
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// The repository selectors of the `gh` write at `index` — its `-R` / `--repo` values and every
|
|
72
|
+
// `GH_REPO` assigned up to it — or none when the segment is not `gh`, is a `gh api` call (judged by
|
|
73
|
+
// its path), is a read, or names no selector.
|
|
74
|
+
function write_selectors(segments: ReadonlyArray<string>, index: number): Array<string> {
|
|
75
|
+
const args = git_argv.arguments_of(segments[index] ?? '', GH_COMMAND)
|
|
76
|
+
|
|
77
|
+
if (args === undefined || !is_write_call(args)) return []
|
|
78
|
+
|
|
79
|
+
return [...selectors_of(args), ...assigned_selectors(segments.slice(0, index + NEXT))]
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const gh_repo_selector = { write_selectors }
|
|
83
|
+
|
|
84
|
+
export { gh_repo_selector }
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
|
|
14
14
|
// The wrapper words that may stand in front of `git`, the same ones `run-tail-rule.ts` skips in front of
|
|
15
15
|
// `josh`: environment assignments, the package-manager launchers, `sudo`, `env`, and an opening
|
|
16
|
-
// subshell parenthesis. Left in, `sudo git push --force`,
|
|
17
|
-
// silently not a git command
|
|
16
|
+
// subshell parenthesis — plus `time` with its flags, read here only. Left in, `sudo git push --force`,
|
|
17
|
+
// `env git commit` and `(git push -f)` are silently not a git command, and
|
|
18
|
+
// `/usr/bin/time -p pnpm exec eslint .` is not an `eslint` run (joshuafolkken/kit#4356).
|
|
18
19
|
const ENV_ASSIGNMENT = /^[A-Za-z_]\w*=/u
|
|
19
20
|
const WRAPPER_WORDS: ReadonlySet<string> = new Set([
|
|
20
21
|
'pnpm',
|
|
@@ -24,7 +25,13 @@ const WRAPPER_WORDS: ReadonlySet<string> = new Set([
|
|
|
24
25
|
'sudo',
|
|
25
26
|
'command',
|
|
26
27
|
'env',
|
|
28
|
+
'time',
|
|
27
29
|
])
|
|
30
|
+
// The wrappers whose own flags stand between them and the program (`time -p`), skipped with them.
|
|
31
|
+
const FLAGGED_WRAPPERS: ReadonlySet<string> = new Set(['time'])
|
|
32
|
+
// Their flags that consume a separate following value (`time -o <file>`, `time -f <format>`), so the
|
|
33
|
+
// value is not read as the program.
|
|
34
|
+
const WRAPPER_VALUE_FLAGS: ReadonlySet<string> = new Set(['-o', '-f', '--output', '--format'])
|
|
28
35
|
const SUBSHELL_OPEN = '('
|
|
29
36
|
|
|
30
37
|
// The git global options that consume a **separate** following token as their value, so the parser
|
|
@@ -50,18 +57,50 @@ interface GitCall {
|
|
|
50
57
|
args: ReadonlyArray<string>
|
|
51
58
|
}
|
|
52
59
|
|
|
53
|
-
// Split on whitespace
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
const
|
|
60
|
+
// Split on whitespace outside quotes, keeping each quote in its word. A quoted span is one word, so
|
|
61
|
+
// `c='x; gh pr create'` is one environment assignment rather than an assignment followed by a `gh`
|
|
62
|
+
// call (joshuafolkken/kit#4091); a backslash-escaped character outside quotes opens no span, and a
|
|
63
|
+
// quote left unclosed is read as a plain character.
|
|
64
|
+
const WORD = /(?:\\.|'[^']*'|"(?:\\.|[^"\\])*"|\S)+/gsu
|
|
58
65
|
|
|
59
66
|
function words_of(segment: string): Array<string> {
|
|
60
|
-
return segment.
|
|
67
|
+
return segment.match(WORD) ?? []
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const PATH_SEPARATOR = '/'
|
|
71
|
+
|
|
72
|
+
// The program a word launches, read off the path's last component, so `/usr/bin/git` is `git`.
|
|
73
|
+
function program_name(word: string): string {
|
|
74
|
+
return word.slice(word.lastIndexOf(PATH_SEPARATOR) + NEXT)
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
function is_wrapper_token(word: string): boolean {
|
|
64
|
-
return
|
|
78
|
+
return (
|
|
79
|
+
word === SUBSHELL_OPEN || ENV_ASSIGNMENT.test(word) || WRAPPER_WORDS.has(program_name(word))
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// The words a flagged wrapper's flag spans, its value included; 0 when the word is not a flag.
|
|
84
|
+
function wrapper_flag_width(word = ''): number {
|
|
85
|
+
if (!word.startsWith(FLAG_PREFIX)) return 0
|
|
86
|
+
|
|
87
|
+
return WRAPPER_VALUE_FLAGS.has(word) ? AFTER_VALUE : NEXT
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// The index after the wrapper word at `index`, past its own flags when it is a flagged wrapper.
|
|
91
|
+
function after_wrapper_word(words: ReadonlyArray<string>, index: number): number {
|
|
92
|
+
let next = index + NEXT
|
|
93
|
+
|
|
94
|
+
if (!FLAGGED_WRAPPERS.has(program_name(words[index] ?? ''))) return next
|
|
95
|
+
|
|
96
|
+
let width = wrapper_flag_width(words[next])
|
|
97
|
+
|
|
98
|
+
while (width > 0) {
|
|
99
|
+
next += width
|
|
100
|
+
width = wrapper_flag_width(words[next])
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return next
|
|
65
104
|
}
|
|
66
105
|
|
|
67
106
|
// Skip the wrapper: environment assignments, a launcher word, and a leading subshell parenthesis. The
|
|
@@ -69,7 +108,9 @@ function is_wrapper_token(word: string): boolean {
|
|
|
69
108
|
function after_wrapper(words: ReadonlyArray<string>): number {
|
|
70
109
|
let index = 0
|
|
71
110
|
|
|
72
|
-
while (index < words.length && is_wrapper_token(words[index] ?? ''))
|
|
111
|
+
while (index < words.length && is_wrapper_token(words[index] ?? '')) {
|
|
112
|
+
index = after_wrapper_word(words, index)
|
|
113
|
+
}
|
|
73
114
|
|
|
74
115
|
return index
|
|
75
116
|
}
|
|
@@ -94,14 +135,30 @@ function after_globals(words: ReadonlyArray<string>, start: number): number {
|
|
|
94
135
|
return index
|
|
95
136
|
}
|
|
96
137
|
|
|
138
|
+
interface ProgramCall {
|
|
139
|
+
name: string
|
|
140
|
+
args: Array<string>
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// The program the segment launches once the wrapper is skipped, with the words after it, or
|
|
144
|
+
// `undefined` for a segment with no program word.
|
|
145
|
+
function program_of(segment: string): ProgramCall | undefined {
|
|
146
|
+
const words = words_of(segment)
|
|
147
|
+
const command_index = after_wrapper(words)
|
|
148
|
+
const word = words[command_index]
|
|
149
|
+
|
|
150
|
+
if (word === undefined) return undefined
|
|
151
|
+
|
|
152
|
+
return { name: program_name(word), args: words.slice(command_index + NEXT) }
|
|
153
|
+
}
|
|
154
|
+
|
|
97
155
|
// The words after `command` once the wrapper is skipped, or `undefined` when the segment does not
|
|
98
156
|
// invoke it. `gh` and `rm` are judged by the same wrapper cut as `git`, so
|
|
99
157
|
// `env gh pr close` and `sudo rm -rf` are read as the calls they are.
|
|
100
158
|
function arguments_of(segment: string, command: string): Array<string> | undefined {
|
|
101
|
-
const
|
|
102
|
-
const command_index = after_wrapper(words)
|
|
159
|
+
const call = program_of(segment)
|
|
103
160
|
|
|
104
|
-
return
|
|
161
|
+
return call?.name === command ? call.args : undefined
|
|
105
162
|
}
|
|
106
163
|
|
|
107
164
|
// The subcommand and the arguments after it, or `undefined` when the segment is not a git invocation.
|
|
@@ -135,6 +192,7 @@ function short_cluster_has(token: string, letters: string): boolean {
|
|
|
135
192
|
return false
|
|
136
193
|
}
|
|
137
194
|
|
|
138
|
-
const git_argv = { arguments_of, parse, short_cluster_has }
|
|
195
|
+
const git_argv = { arguments_of, parse, program_of, short_cluster_has }
|
|
139
196
|
|
|
140
197
|
export { git_argv }
|
|
198
|
+
export type { ProgramCall }
|
|
@@ -15,7 +15,7 @@ import { shell_segments } from './shell-segments'
|
|
|
15
15
|
//
|
|
16
16
|
// **It fires on every occurrence, not once per run.** A force push is destructive every time it is
|
|
17
17
|
// issued, so refused-once-and-free-after would put the second one back on the run's self-restraint —
|
|
18
|
-
// the disposition `run-tail-rule.ts`
|
|
18
|
+
// the disposition `run-tail-rule.ts` takes for the same reason.
|
|
19
19
|
|
|
20
20
|
// A force push. The long forms all open with `--force` (`--force`, `--force-with-lease[=ref]`,
|
|
21
21
|
// `--force-if-includes`); `-f` and any cluster carrying `f` are the short forms; a bare `--delete` and
|
|
@@ -24,6 +24,9 @@ import { shell_segments } from './shell-segments'
|
|
|
24
24
|
// deletes (`:branch`). Both open the refspec with a character the deny list cannot match as a literal.
|
|
25
25
|
const FORCE_LONG_PREFIX = '--force'
|
|
26
26
|
const DELETE_LONG = '--delete'
|
|
27
|
+
// `--mirror` force-updates every remote ref to the local set and deletes the rest; `--prune` deletes
|
|
28
|
+
// every remote branch with no local counterpart. Both are a delete with no refspec to read.
|
|
29
|
+
const DESTRUCTIVE_PUSH_LONG: ReadonlySet<string> = new Set([DELETE_LONG, '--mirror', '--prune'])
|
|
27
30
|
const PUSH_SHORT_LETTERS = 'fd'
|
|
28
31
|
const FORCE_OR_DELETE_REFSPEC = /^[+:]/u
|
|
29
32
|
|
|
@@ -31,7 +34,7 @@ function is_force_or_delete_push(args: ReadonlyArray<string>): boolean {
|
|
|
31
34
|
return args.some(
|
|
32
35
|
(argument) =>
|
|
33
36
|
argument.startsWith(FORCE_LONG_PREFIX) ||
|
|
34
|
-
argument
|
|
37
|
+
DESTRUCTIVE_PUSH_LONG.has(argument) ||
|
|
35
38
|
git_argv.short_cluster_has(argument, PUSH_SHORT_LETTERS) ||
|
|
36
39
|
FORCE_OR_DELETE_REFSPEC.test(argument),
|
|
37
40
|
)
|
|
@@ -66,7 +69,7 @@ function is_destructive_segment(segment: string): boolean {
|
|
|
66
69
|
// quoted inside another command's argument is read as the write it is not, exactly as every other
|
|
67
70
|
// trigger in this directory reads its own.
|
|
68
71
|
function is_force_or_delete(command: string): boolean {
|
|
69
|
-
return shell_segments.
|
|
72
|
+
return shell_segments.commands_of(command).some((segment) => is_destructive_segment(segment))
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
// The instruction in the shape a refusal can carry: what the command does and the one route left. The
|
|
@@ -81,12 +84,19 @@ const GIT_FORCE_REASON =
|
|
|
81
84
|
|
|
82
85
|
// The row itself, so `delivered-rules.ts` spreads one entry. `decide` returns true so it refuses every
|
|
83
86
|
// occurrence; it declares no `keeps` — not force-pushing is the absence of a call, not a call, so the
|
|
84
|
-
// row is reported unmeasured rather than scored on an act that does not exist
|
|
87
|
+
// row is reported unmeasured rather than scored on an act that does not exist.
|
|
85
88
|
const ROW = {
|
|
86
89
|
id: 'git-force',
|
|
87
90
|
is_trigger: bash_triggers.on_bash_command(is_force_or_delete),
|
|
88
91
|
reason: GIT_FORCE_REASON,
|
|
89
92
|
decide: (): boolean => true,
|
|
93
|
+
about: {
|
|
94
|
+
title: 'Force push / branch delete',
|
|
95
|
+
topic: '`operating-rules.md`',
|
|
96
|
+
fires:
|
|
97
|
+
'a `git push` / `git branch` read as force (`--force` / `-f` / `-uf` …) or delete (`--delete` / `-d` / `-D` / `:branch`) in any spelling. Every occurrence',
|
|
98
|
+
quiet: 'a plain `git push` / `git branch`',
|
|
99
|
+
},
|
|
90
100
|
}
|
|
91
101
|
|
|
92
102
|
const git_force = {
|
|
@@ -28,9 +28,8 @@ const NO_RUN = "the call must not run at all, or only on a person's word — ref
|
|
|
28
28
|
// The `Stop` rows that already run their step: each blocks only on the case the hook cannot finish.
|
|
29
29
|
const STOP_NOTIFY = 'the hook sends the notify itself; it blocks only when the send fails'
|
|
30
30
|
const HOLD_RELEASE = 'the hook releases the hold itself; it blocks only when that release fails'
|
|
31
|
-
const ISSUE_CITATION =
|
|
32
|
-
'the hook prints the citation lines itself; it blocks only on a number it cannot cite'
|
|
33
31
|
const FILING_OFFER = 'the filing needs a title and a body only the model can write'
|
|
32
|
+
const CONCISE_REPLY = 'the shorter reply is prose only the model can write'
|
|
34
33
|
|
|
35
34
|
function rewrite(): GuardRemedy {
|
|
36
35
|
return { remedy: 'rewrite', why: REWRITTEN }
|
|
@@ -45,26 +44,40 @@ const GUARD_REMEDIES: Readonly<Record<string, GuardRemedy>> = {
|
|
|
45
44
|
'piped-verification': rewrite(), // wrapped in `(set -o pipefail; …)`
|
|
46
45
|
'issue-comments': rewrite(), // the same Issue's comments read on the same line
|
|
47
46
|
'lane-background': rewrite(), // a lane child's `ship` run in the foreground (`pretool-guard.ts`)
|
|
47
|
+
'reviewer-foreground': rewrite(), // a lane child's `reviewer` given `run_in_background: false`
|
|
48
48
|
'file-body': judgment(ANOTHER_TOOL), // Edit or Write
|
|
49
|
+
'file-rewrite': judgment(ANOTHER_TOOL), // Edit
|
|
50
|
+
'sed-in-place': judgment(ANOTHER_TOOL), // Edit
|
|
49
51
|
'shell-body': judgment(
|
|
50
52
|
"which part of the body the shell was meant to expand is the author's, not the hook's",
|
|
51
53
|
),
|
|
52
54
|
'raw-field-body': judgment('the body moves to a file the call does not name'),
|
|
55
|
+
'credential-body': judgment(
|
|
56
|
+
'which text is the credential, and what replaces it, is the author’s',
|
|
57
|
+
),
|
|
53
58
|
'rule-body': judgment('a trigger-plus-pointer line is written, not derived'),
|
|
54
59
|
'direct-filing': judgment(ANOTHER_COMMAND),
|
|
60
|
+
'direct-issue-comment': judgment(ANOTHER_COMMAND),
|
|
61
|
+
'direct-issue-read': judgment(ANOTHER_COMMAND),
|
|
55
62
|
'direct-pr-create': judgment(ANOTHER_COMMAND),
|
|
63
|
+
'pr-merge': judgment(ANOTHER_COMMAND),
|
|
56
64
|
'josh-git-bare': judgment(ANOTHER_COMMAND),
|
|
57
65
|
'run-tail': judgment(ANOTHER_COMMAND),
|
|
58
66
|
'pre-gate-cut': judgment(ANOTHER_COMMAND),
|
|
59
67
|
'implementation-cut': judgment(ANOTHER_COMMAND),
|
|
68
|
+
'round-one-check-related': judgment(ANOTHER_COMMAND),
|
|
60
69
|
'early-heartbeat': judgment(ANOTHER_COMMAND),
|
|
61
70
|
'poll-loop': judgment(ANOTHER_COMMAND),
|
|
62
71
|
'lane-park': judgment(ANOTHER_COMMAND),
|
|
63
72
|
'lane-split-park': judgment(ANOTHER_COMMAND),
|
|
64
73
|
'lane-interactive-ask': judgment(ANOTHER_COMMAND),
|
|
65
74
|
'agent-model': judgment("which model fits the unit is the author's call"),
|
|
75
|
+
'investigator-foreground': judgment('which reads go beside the dispatch is the author’s call'),
|
|
66
76
|
'lane-carry-conflict': judgment(ANOTHER_COMMAND),
|
|
67
77
|
'lane-switch-main': judgment(ANOTHER_COMMAND),
|
|
78
|
+
'lane-direct-tool': rewrite(), // a one-command line behind `pnpm josh reserved-run <weight> --`
|
|
79
|
+
'lane-spilled-read': judgment(ANOTHER_COMMAND),
|
|
80
|
+
'timed-rerun': judgment(ANOTHER_COMMAND),
|
|
68
81
|
'oracle-consulted': judgment(ANOTHER_COMMAND),
|
|
69
82
|
'test-declared': judgment(ANOTHER_COMMAND),
|
|
70
83
|
batching: judgment(ANOTHER_COMMAND),
|
|
@@ -74,17 +87,17 @@ const GUARD_REMEDIES: Readonly<Record<string, GuardRemedy>> = {
|
|
|
74
87
|
'parent-cut': judgment(ANOTHER_COMMAND),
|
|
75
88
|
'issue-watch': judgment(ANOTHER_COMMAND),
|
|
76
89
|
'third-party-write': judgment(NO_RUN),
|
|
77
|
-
'filing-cap': judgment(NO_RUN),
|
|
78
90
|
'git-force': judgment(NO_RUN),
|
|
79
91
|
'worktree-mutation': judgment(NO_RUN),
|
|
80
92
|
'index-mutation': judgment(NO_RUN),
|
|
81
93
|
'destructive-command': judgment(NO_RUN),
|
|
94
|
+
'repo-admin': judgment(NO_RUN),
|
|
82
95
|
'protected-file': judgment(NO_RUN),
|
|
83
96
|
// The `Stop` rows: the hook judges a finished reply, so it has no call to rewrite.
|
|
84
97
|
'stop-notify': judgment(STOP_NOTIFY),
|
|
85
|
-
'issue-citation': judgment(ISSUE_CITATION),
|
|
86
98
|
'filing-offer': judgment(FILING_OFFER),
|
|
87
99
|
'hold-release': judgment(HOLD_RELEASE),
|
|
100
|
+
'concise-reply': judgment(CONCISE_REPLY),
|
|
88
101
|
}
|
|
89
102
|
|
|
90
103
|
// A row family shares one class: `oracle-consulted:pkg:scout` is an `oracle-consulted` row.
|
|
@@ -11,7 +11,7 @@ import { z } from 'zod'
|
|
|
11
11
|
// threshold crossing rather than once per run, that read can no longer be paid on every edit, so the
|
|
12
12
|
// verdict is cached beside the instant it was read and a burst of edits shares one read.
|
|
13
13
|
//
|
|
14
|
-
// **An in-memory memo cannot span two edits.** `pnpm josh
|
|
14
|
+
// **An in-memory memo cannot span two edits.** `pnpm josh pretool:guard` runs as a fresh process on each
|
|
15
15
|
// `PreToolUse`, so the cache is a per-checkout stamp rather than a module variable — the same handoff
|
|
16
16
|
// shape the refusal stamp itself uses.
|
|
17
17
|
//
|