@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
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
import { investigation_reads } from '#scripts/delegation/investigation-reads'
|
|
2
|
+
import { will_refuse as will_batch_refuse } from '#scripts/hooks/batch-guard'
|
|
2
3
|
import { hook_decision, type GuardRun, type TranscriptGuardSpec } from '#scripts/josh/hook-decision'
|
|
3
|
-
import { lane_guard_policy } from '#scripts/lane/lane-guard-policy'
|
|
4
4
|
import { time_batch_guard, type GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
5
5
|
import { agent_model } from './agent-model'
|
|
6
6
|
import { bash_triggers } from './bash-triggers'
|
|
7
|
+
import { concise_reply } from './concise-reply'
|
|
8
|
+
import { credential_body } from './credential-body'
|
|
7
9
|
import { direct_filing } from './direct-filing'
|
|
10
|
+
import { direct_issue_comment } from './direct-issue-comment'
|
|
11
|
+
import { direct_issue_read } from './direct-issue-read'
|
|
8
12
|
import { early_heartbeat } from './early-heartbeat'
|
|
9
|
-
import {
|
|
10
|
-
import { filing_cap } from './filing-cap'
|
|
13
|
+
import { file_edit_rows } from './file-edit-rows'
|
|
11
14
|
import { git_force } from './git-force'
|
|
12
15
|
import { implementation_cut } from './implementation-cut'
|
|
16
|
+
import { investigator_foreground } from './investigator-foreground'
|
|
13
17
|
import { issue_comments } from './issue-comments'
|
|
14
18
|
import { josh_git_bare } from './josh-git-bare'
|
|
15
19
|
import { lane_background } from './lane-background'
|
|
16
20
|
import { lane_carry_conflict } from './lane-carry-conflict'
|
|
21
|
+
import { lane_direct_tool } from './lane-direct-tool'
|
|
17
22
|
import { lane_interactive_ask } from './lane-interactive-ask'
|
|
18
23
|
import { lane_park } from './lane-park'
|
|
24
|
+
import { lane_spilled_read } from './lane-spilled-read'
|
|
19
25
|
import { lane_split_park } from './lane-split-park'
|
|
20
26
|
import { lane_switch_main } from './lane-switch-main'
|
|
21
27
|
import { oracle_consulted } from './oracle-consulted'
|
|
@@ -24,11 +30,14 @@ import { piped_verification } from './piped-verification'
|
|
|
24
30
|
import { poll_loop } from './poll-loop'
|
|
25
31
|
import { pre_gate_cut } from './pre-gate-cut'
|
|
26
32
|
import { raw_field_body } from './raw-field-body'
|
|
33
|
+
import { reviewer_foreground } from './reviewer-foreground'
|
|
34
|
+
import { round_one_check_related } from './round-one-check-related'
|
|
27
35
|
import { rule_body_guard } from './rule-body-guard'
|
|
28
36
|
import { run_tail_rule } from './run-tail-rule'
|
|
29
37
|
import { shell_body_trigger } from './shell-body-trigger'
|
|
30
38
|
import { test_declared_commit } from './test-declared-commit'
|
|
31
39
|
import { third_party_write } from './third-party-write'
|
|
40
|
+
import { timed_rerun } from './timed-rerun'
|
|
32
41
|
import { worktree_guard } from './worktree-guard'
|
|
33
42
|
|
|
34
43
|
// The rules delivered by a `PreToolUse` refusal at the moment they bind, rather than carried resident
|
|
@@ -50,15 +59,32 @@ type CallTest = (
|
|
|
50
59
|
// The tail is read lazily: most calls no rewrite applies to never need it.
|
|
51
60
|
type CallRewrite = (call: GuardedCall, tail: () => string) => Record<string, unknown> | undefined
|
|
52
61
|
|
|
62
|
+
// The human-readable side `pnpm josh rule:list` renders, carried on the row so a rule is one entry.
|
|
63
|
+
interface RuleAbout {
|
|
64
|
+
title: string
|
|
65
|
+
// The single source of the rule's procedure.
|
|
66
|
+
topic: string
|
|
67
|
+
fires: string
|
|
68
|
+
// The silent turn — it matches the state in which the rule is already kept.
|
|
69
|
+
quiet: string
|
|
70
|
+
// The hook command that delivers it; absent reads as `PRETOOL_GUARD`.
|
|
71
|
+
entry?: string
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Every row here — batching and investigation included — is delivered by the one `PreToolUse`
|
|
75
|
+
// process (`scripts/hooks/pretool-guard.ts`).
|
|
76
|
+
const PRETOOL_GUARD = 'pnpm josh pretool:guard'
|
|
77
|
+
|
|
53
78
|
// `id` keys the rule's own refusal record, so one rule firing never spends another's budget.
|
|
54
79
|
interface DeliveredRule {
|
|
55
80
|
id: string
|
|
56
81
|
is_trigger: (call: GuardedCall) => boolean
|
|
57
82
|
// The only text that reaches the model: the instruction and the pointer.
|
|
58
83
|
reason: string
|
|
84
|
+
about: RuleAbout
|
|
59
85
|
// A stand-down when an earlier act on the tail already satisfied the rule; checked first, so a
|
|
60
|
-
// satisfied call spends no record.
|
|
61
|
-
already_satisfied?: (tail: string, call: GuardedCall) => boolean
|
|
86
|
+
// satisfied call spends no record. `run` names the session, for a stand-down that outlives the tail.
|
|
87
|
+
already_satisfied?: (tail: string, call: GuardedCall, run: GuardRun) => boolean
|
|
62
88
|
// For a rule that binds on every occurrence instead of once per run. `at_ms` is this row's own last
|
|
63
89
|
// refusal, so an immediate reissue can be let through.
|
|
64
90
|
decide?: (call: GuardedCall, run: GuardRun, can_record: boolean, at_ms: number) => boolean
|
|
@@ -76,9 +102,12 @@ interface DeliveredRule {
|
|
|
76
102
|
// Openings the reason had before it was reworded, so `rule-value.ts` still credits a refusal
|
|
77
103
|
// delivered with the old text while those transcripts remain in its window.
|
|
78
104
|
former_reasons?: ReadonlyArray<string>
|
|
105
|
+
// The reasons a Stop hook sends a turn back with on this row's behalf, so `rule-value.ts` counts
|
|
106
|
+
// that block as this row's refusal.
|
|
107
|
+
stop_reasons?: ReadonlyArray<string>
|
|
79
108
|
}
|
|
80
109
|
|
|
81
|
-
// Scored but possibly delivered by its own
|
|
110
|
+
// Scored but possibly delivered by its own guard inside `pretool-guard.ts` (batching, investigation) — joining `DELIVERED_RULES`
|
|
82
111
|
// would refuse one violation twice — so `is_trigger` is optional here.
|
|
83
112
|
type MeasuredRule = Omit<DeliveredRule, 'is_trigger'> & {
|
|
84
113
|
is_trigger?: DeliveredRule['is_trigger']
|
|
@@ -95,10 +124,17 @@ const { SHELL_BODY_REASON, carries_a_body, is_shell_evaluated_body, keeps_body_s
|
|
|
95
124
|
const DELIVERED_RULES: ReadonlyArray<DeliveredRule> = [
|
|
96
125
|
// First: a third-party write is stopped before the first-party filing rows count anything.
|
|
97
126
|
third_party_write.ROW,
|
|
98
|
-
//
|
|
99
|
-
//
|
|
127
|
+
// Before every first-party row: a credential is refused whatever the call's other faults, and the
|
|
128
|
+
// commands those rows point at run the same scan in-process.
|
|
129
|
+
credential_body.ROW,
|
|
130
|
+
// The direct call only. The filing cap, the WIP cap and the fold question are `issue:file`'s own
|
|
131
|
+
// steps, so no row gates them.
|
|
100
132
|
direct_filing.ROW,
|
|
101
|
-
|
|
133
|
+
// Before the body rows: a comment posted by hand is refused whatever its body, and the command it
|
|
134
|
+
// points at takes the body by path, so the body rows have nothing left to say.
|
|
135
|
+
direct_issue_comment.ROW,
|
|
136
|
+
// Before `issue-comments`, whose rewrite would add the unfiltered comments to the same read.
|
|
137
|
+
direct_issue_read.ROW,
|
|
102
138
|
issue_comments.ROW,
|
|
103
139
|
{
|
|
104
140
|
id: 'shell-body',
|
|
@@ -106,8 +142,17 @@ const DELIVERED_RULES: ReadonlyArray<DeliveredRule> = [
|
|
|
106
142
|
reason: SHELL_BODY_REASON,
|
|
107
143
|
keeps: on_bash_command(keeps_body_safe),
|
|
108
144
|
reaches: on_bash_command(carries_a_body),
|
|
145
|
+
about: {
|
|
146
|
+
title: 'No body on the shell',
|
|
147
|
+
topic: '`shell-body.md`',
|
|
148
|
+
fires:
|
|
149
|
+
'a double-quoted body value (`-f body="…"` / `-f "body=…"` / `--body "…"` / `--notify-message "…"`) carrying a backtick or `$`',
|
|
150
|
+
quiet: 'the shell does not evaluate the body',
|
|
151
|
+
},
|
|
109
152
|
},
|
|
110
153
|
raw_field_body.ROW,
|
|
154
|
+
// Before `piped-verification`, whose rewrite would run under `pipefail` a check that must not run.
|
|
155
|
+
round_one_check_related.ROW,
|
|
111
156
|
{
|
|
112
157
|
id: 'piped-verification',
|
|
113
158
|
is_trigger: on_bash_command(piped_verification.is_masked_verification),
|
|
@@ -117,6 +162,13 @@ const DELIVERED_RULES: ReadonlyArray<DeliveredRule> = [
|
|
|
117
162
|
// A masking whose filter reads to the end is rewritten under `pipefail`, never refused.
|
|
118
163
|
rewrite: piped_verification.pipefail_input,
|
|
119
164
|
rewrite_note: piped_verification.PIPEFAIL_NOTE,
|
|
165
|
+
about: {
|
|
166
|
+
title: 'Piped verification',
|
|
167
|
+
topic: '`output-bounds.md`',
|
|
168
|
+
fires:
|
|
169
|
+
'a pass/fail josh check (`gate` / `check*` / `lint*` / `cspell*` / `test*` / `eval` / `overrides` / `ranges`) in front of a pipe — rewritten under `set -o pipefail` when every filter reads to the end (`tail`, a full-reading `grep`, `cut`, `sort`, `uniq`, `wc`, `tee`, an `awk` / `sed` that cannot exit early and carries no `<` / `>` / `&`), refused otherwise',
|
|
170
|
+
quiet: 'the exit code reaches the caller — a failure reads as a failure',
|
|
171
|
+
},
|
|
120
172
|
},
|
|
121
173
|
{
|
|
122
174
|
id: 'early-heartbeat',
|
|
@@ -125,6 +177,14 @@ const DELIVERED_RULES: ReadonlyArray<DeliveredRule> = [
|
|
|
125
177
|
decide: early_heartbeat.decide,
|
|
126
178
|
keeps: on_bash_command(early_heartbeat.is_progress_watch),
|
|
127
179
|
reaches: on_bash_command(early_heartbeat.waits_for_progress),
|
|
180
|
+
about: {
|
|
181
|
+
title: 'Early progress report',
|
|
182
|
+
topic:
|
|
183
|
+
'`.claude/skills/workflow-commands/progress-watcher.md` → "Progress while the run is quiet"',
|
|
184
|
+
fires:
|
|
185
|
+
'a `Bash` whose only purpose is waiting (`sleep` alone, or `echo` / `:` / `date`) while a timer is live or before the interval. Every occurrence',
|
|
186
|
+
quiet: 'no hand-made wait timer — `run:progress` holds the one clock',
|
|
187
|
+
},
|
|
128
188
|
},
|
|
129
189
|
// Before `run-tail`: whether to commit at all is decided before how to push.
|
|
130
190
|
test_declared_commit.ROW,
|
|
@@ -138,6 +198,13 @@ const DELIVERED_RULES: ReadonlyArray<DeliveredRule> = [
|
|
|
138
198
|
decide: run_tail_rule.decide,
|
|
139
199
|
keeps: run_tail_rule.is_backgrounded_push_step,
|
|
140
200
|
reaches: run_tail_rule.is_push_step_call,
|
|
201
|
+
about: {
|
|
202
|
+
title: 'Idle run tail',
|
|
203
|
+
topic: '`.claude/skills/workflow-commands/background-commands.md`',
|
|
204
|
+
fires:
|
|
205
|
+
'`pnpm josh git -y` (`josh g`, `--yes` alike) issued in the **foreground**. Every occurrence',
|
|
206
|
+
quiet: 'issued in the background — its completion resumes the run',
|
|
207
|
+
},
|
|
141
208
|
},
|
|
142
209
|
// Reads the lane name and the cut record. Once per run, not `decide`: taking the cut ends the
|
|
143
210
|
// process, and the verdicts that leave a run at the gate all need the reissue through. `reaches`
|
|
@@ -149,26 +216,43 @@ const DELIVERED_RULES: ReadonlyArray<DeliveredRule> = [
|
|
|
149
216
|
reason: pre_gate_cut.PRE_GATE_CUT_REASON,
|
|
150
217
|
keeps: on_bash_command(pre_gate_cut.takes_the_cut),
|
|
151
218
|
reaches: pre_gate_cut.reaches_the_pre_gate_boundary,
|
|
219
|
+
about: {
|
|
220
|
+
title: 'The cut before the gate',
|
|
221
|
+
topic: '`.claude/skills/workflow-commands/pre-gate-cut.md`',
|
|
222
|
+
fires:
|
|
223
|
+
'`pnpm josh gate` (`josh ga`) in a lane work tree whose `JOSH_LANE_CHILD` names the Issue and has no cut record',
|
|
224
|
+
quiet: 'outside a lane, no marker (a person in the lane), or already cut',
|
|
225
|
+
},
|
|
152
226
|
},
|
|
153
227
|
// A split child's park is refused before `lane-park` sees it.
|
|
154
228
|
lane_split_park.ROW,
|
|
155
229
|
lane_park.ROW,
|
|
156
230
|
lane_interactive_ask.ROW,
|
|
157
231
|
agent_model.ROW,
|
|
232
|
+
investigator_foreground.ROW,
|
|
233
|
+
reviewer_foreground.ROW,
|
|
158
234
|
lane_carry_conflict.ROW,
|
|
159
235
|
lane_switch_main.ROW,
|
|
236
|
+
// Before `lane-direct-tool`, its one overlap (a timed tool in a lane): the record is the right first
|
|
237
|
+
// act, and `lane-direct-tool` delivers on the reissue of a `time`-prefixed tool.
|
|
238
|
+
timed_rerun.ROW,
|
|
239
|
+
lane_direct_tool.ROW,
|
|
240
|
+
lane_spilled_read.ROW,
|
|
160
241
|
// Disjoint from `run-tail` by the `-y` flag.
|
|
161
242
|
josh_git_bare.ROW,
|
|
162
243
|
// The Bash-string gaps the deny glob cannot express, read by argv; `delivered-rules-bash.test.ts`
|
|
163
244
|
// pins that no two rows claim one command.
|
|
164
245
|
git_force.ROW,
|
|
165
246
|
worktree_guard.ROW,
|
|
166
|
-
|
|
247
|
+
...file_edit_rows.SHELL_ROWS,
|
|
167
248
|
...permission_guards.ROWS,
|
|
168
249
|
poll_loop.ROW,
|
|
169
250
|
// Before `rule-body`, its one overlap: the cut is the right first act, and `rule-body` delivers on
|
|
170
251
|
// the reissue in the fresh process.
|
|
171
252
|
implementation_cut.ROW,
|
|
253
|
+
// Before `rule-body`, its one overlap (a whole-file `Write` of a rule document): the right tool is
|
|
254
|
+
// chosen before the placement questions are asked of its text.
|
|
255
|
+
file_edit_rows.REWRITE_ROW,
|
|
172
256
|
rule_body_guard.ROW,
|
|
173
257
|
...oracle_consulted.ROWS,
|
|
174
258
|
]
|
|
@@ -186,6 +270,13 @@ const BATCHING_RULE: MeasuredRule = {
|
|
|
186
270
|
reason: time_batch_guard.REASON,
|
|
187
271
|
keeps: batches_the_turn,
|
|
188
272
|
reaches: time_batch_guard.is_guarded_call,
|
|
273
|
+
about: {
|
|
274
|
+
title: 'Turn batching',
|
|
275
|
+
topic: '`turn-batching.md`',
|
|
276
|
+
fires:
|
|
277
|
+
'the `Bash` / `Edit` / `Read` after three single-call turns in a row; fires **again** every three more such turns',
|
|
278
|
+
quiet: 'calls per round trip above the floor',
|
|
279
|
+
},
|
|
189
280
|
}
|
|
190
281
|
|
|
191
282
|
// No `is_trigger`, as for batching. No `keeps`: any dispatch would read as compliance, so it is left
|
|
@@ -194,12 +285,21 @@ const INVESTIGATION_RULE: MeasuredRule = {
|
|
|
194
285
|
id: 'investigation',
|
|
195
286
|
reason: investigation_reads.REASON,
|
|
196
287
|
reaches: investigation_reads.is_refusable_call,
|
|
288
|
+
about: {
|
|
289
|
+
title: 'Investigation delegation threshold',
|
|
290
|
+
topic: '`delegation.md`',
|
|
291
|
+
fires:
|
|
292
|
+
'the `Read` / `Bash` that makes the third read of a file the run will not edit; fires **again** once reads pile up to the threshold again',
|
|
293
|
+
quiet: 'reads under the threshold — nothing to delegate yet',
|
|
294
|
+
},
|
|
197
295
|
}
|
|
198
296
|
|
|
199
297
|
const MEASURED_RULES: ReadonlyArray<MeasuredRule> = [
|
|
200
298
|
...DELIVERED_RULES,
|
|
201
299
|
BATCHING_RULE,
|
|
202
300
|
INVESTIGATION_RULE,
|
|
301
|
+
// Delivered by `stop:guard`; listed here so `rule:value` counts its refusals.
|
|
302
|
+
concise_reply.ROW,
|
|
203
303
|
]
|
|
204
304
|
|
|
205
305
|
// Once per run, so a run that obeyed is never wedged. A call the batching guard may refuse is stepped
|
|
@@ -213,14 +313,11 @@ const BATCH_REFUSAL_WINDOW_MS = 10_000
|
|
|
213
313
|
|
|
214
314
|
// Asked with its real record, not `NEVER_MS`: that guard never refuses one sequence twice.
|
|
215
315
|
function will_batch_guard_refuse(tail: string, call: GuardedCall, run: GuardRun): boolean {
|
|
216
|
-
// In a lane child the batching guard only notices, so there is nothing to stand aside for.
|
|
217
|
-
if (lane_guard_policy.mode_here('batching') !== 'refuse') return false
|
|
218
|
-
|
|
219
316
|
const refused_at_ms = BATCH_STAMP.last_ms(BATCH_STAMP.path(run.transcript))
|
|
220
317
|
|
|
221
318
|
if (run.now_ms - refused_at_ms < BATCH_REFUSAL_WINDOW_MS) return true
|
|
222
319
|
|
|
223
|
-
return
|
|
320
|
+
return will_batch_refuse(tail, call, run)
|
|
224
321
|
}
|
|
225
322
|
|
|
226
323
|
function is_first_delivery(
|
|
@@ -246,7 +343,7 @@ function delivery_decision(rule: DeliveredRule): TranscriptGuardSpec['should_blo
|
|
|
246
343
|
delivered_at_ms: number,
|
|
247
344
|
run: GuardRun,
|
|
248
345
|
): boolean {
|
|
249
|
-
if (already_satisfied?.(tail, call) === true) return false
|
|
346
|
+
if (already_satisfied?.(tail, call, run) === true) return false
|
|
250
347
|
if (decide === undefined) return true
|
|
251
348
|
|
|
252
349
|
return decide(call, run, !will_batch_guard_refuse(tail, call, run), delivered_at_ms)
|
|
@@ -289,9 +386,8 @@ function is_enabled(): boolean {
|
|
|
289
386
|
const delivered_rules = {
|
|
290
387
|
DELIVERED_RULES,
|
|
291
388
|
EARLY_HEARTBEAT_REASON: early_heartbeat.EARLY_HEARTBEAT_REASON,
|
|
292
|
-
FILE_BODY_REASON:
|
|
389
|
+
FILE_BODY_REASON: file_edit_rows.FILE_BODY_REASON,
|
|
293
390
|
DIRECT_FILING_REASON: direct_filing.DIRECT_FILING_REASON,
|
|
294
|
-
FILING_CAP_REASON: filing_cap.FILING_CAP_REASON,
|
|
295
391
|
GIT_FORCE_REASON: git_force.GIT_FORCE_REASON,
|
|
296
392
|
ISSUE_COMMENTS_REASON: issue_comments.ISSUE_COMMENTS_REASON,
|
|
297
393
|
LANE_INTERACTIVE_ASK_REASON: lane_interactive_ask.LANE_INTERACTIVE_ASK_REASON,
|
|
@@ -300,6 +396,7 @@ const delivered_rules = {
|
|
|
300
396
|
PIPED_VERIFICATION_REASON: piped_verification.PIPED_VERIFICATION_REASON,
|
|
301
397
|
POLL_LOOP_REASON: poll_loop.POLL_LOOP_REASON,
|
|
302
398
|
PRE_GATE_CUT_REASON: pre_gate_cut.PRE_GATE_CUT_REASON,
|
|
399
|
+
PRETOOL_GUARD,
|
|
303
400
|
RAW_FIELD_BODY_REASON: raw_field_body.RAW_FIELD_BODY_REASON,
|
|
304
401
|
RUN_TAIL_REASON: run_tail_rule.RUN_TAIL_REASON,
|
|
305
402
|
SHELL_BODY_REASON,
|
|
@@ -313,5 +410,5 @@ const delivered_rules = {
|
|
|
313
410
|
is_issue_filing,
|
|
314
411
|
}
|
|
315
412
|
|
|
316
|
-
export type { CallRewrite, DeliveredRule, MeasuredRule }
|
|
413
|
+
export type { CallRewrite, DeliveredRule, MeasuredRule, RuleAbout }
|
|
317
414
|
export { delivered_rules }
|
|
@@ -39,24 +39,16 @@ function is_recursive_forced_rm(segment: string): boolean {
|
|
|
39
39
|
const GH_COMMAND = 'gh'
|
|
40
40
|
const REPO_GROUP = 'repo'
|
|
41
41
|
const REPO_REMOVALS: ReadonlySet<string> = new Set(['delete', 'archive'])
|
|
42
|
-
const REPO_EDIT = 'edit'
|
|
43
|
-
const VISIBILITY_FLAG = '--visibility'
|
|
44
42
|
const PR_GROUP = 'pr'
|
|
45
43
|
const PR_CLOSE = 'close'
|
|
46
44
|
|
|
47
|
-
// `gh repo delete` / `archive
|
|
48
|
-
function is_destructive_repo_action(action: string, args: ReadonlyArray<string>): boolean {
|
|
49
|
-
if (REPO_REMOVALS.has(action)) return true
|
|
50
|
-
|
|
51
|
-
return action === REPO_EDIT && args.some((argument) => argument.startsWith(VISIBILITY_FLAG))
|
|
52
|
-
}
|
|
53
|
-
|
|
45
|
+
// `gh repo delete` / `archive`; a `gh repo edit` (`--visibility` included) is `repo-admin.ts`'s.
|
|
54
46
|
function is_destructive_gh_command(args: ReadonlyArray<string>): boolean {
|
|
55
47
|
const [group, action = ''] = args
|
|
56
48
|
|
|
57
49
|
if (group === PR_GROUP) return action === PR_CLOSE
|
|
58
50
|
|
|
59
|
-
return group === REPO_GROUP &&
|
|
51
|
+
return group === REPO_GROUP && REPO_REMOVALS.has(action)
|
|
60
52
|
}
|
|
61
53
|
|
|
62
54
|
const DELETE_METHOD = 'DELETE'
|
|
@@ -93,11 +85,11 @@ function is_destructive_segment(segment: string): boolean {
|
|
|
93
85
|
}
|
|
94
86
|
|
|
95
87
|
function is_destructive_command(command: string): boolean {
|
|
96
|
-
return shell_segments.
|
|
88
|
+
return shell_segments.commands_of(command).some((segment) => is_destructive_segment(segment))
|
|
97
89
|
}
|
|
98
90
|
|
|
99
91
|
const DESTRUCTIVE_COMMAND_REASON =
|
|
100
|
-
'⛔ destructive command: a recursive forced `rm`, a `gh repo delete` / `archive
|
|
92
|
+
'⛔ destructive command: a recursive forced `rm`, a `gh repo delete` / `archive`, ' +
|
|
101
93
|
'`gh pr close` or a `gh api -X DELETE` cannot be undone, which is Tier C. Remove one path at a ' +
|
|
102
94
|
'time without `-f`, or ask the user to run it. It fires on every occurrence ' +
|
|
103
95
|
'(`prompts/collaboration-workflow/operating-rules.md`).'
|
|
@@ -109,6 +101,13 @@ const ROW = {
|
|
|
109
101
|
decide: (): boolean => true,
|
|
110
102
|
// The opening the reason carried before it was cut to the action and the next command.
|
|
111
103
|
former_reasons: ['⛔ destructive command: a recursive forced `rm` (`rm -rf`'],
|
|
104
|
+
about: {
|
|
105
|
+
title: 'Destructive command',
|
|
106
|
+
topic: '`operating-rules.md`',
|
|
107
|
+
fires:
|
|
108
|
+
'`rm -rf` (any spelling), `gh repo delete` / `archive`, `gh pr close`, `gh api -X DELETE`. Every occurrence',
|
|
109
|
+
quiet: "`gh issue close` or removing an Issue label — the workflow's own steps",
|
|
110
|
+
},
|
|
112
111
|
}
|
|
113
112
|
|
|
114
113
|
const destructive_command = { DESTRUCTIVE_COMMAND_REASON, ROW, is_destructive_command }
|
|
@@ -8,8 +8,8 @@ import { bash_triggers } from './bash-triggers'
|
|
|
8
8
|
// pointed there.
|
|
9
9
|
|
|
10
10
|
const DIRECT_FILING_REASON =
|
|
11
|
-
'⛔ direct filing: an Issue is filed with `pnpm josh issue:file "<title>" --body-file <path
|
|
12
|
-
'
|
|
11
|
+
'⛔ direct filing: an Issue is filed with `pnpm josh issue:file "<title>" --body-file <path>`, ' +
|
|
12
|
+
'never with `gh api …/issues` or `gh issue create` — it runs the scout, the lint, ' +
|
|
13
13
|
'the labels and `epic:bundle` itself. It fires on every occurrence (`docs/josh-commands-backlog.md` ' +
|
|
14
14
|
'→ "`josh issue:file`").'
|
|
15
15
|
|
|
@@ -27,6 +27,14 @@ const ROW = {
|
|
|
27
27
|
decide: (): boolean => true,
|
|
28
28
|
keeps: bash_triggers.on_bash_command(bash_triggers.is_issue_filing),
|
|
29
29
|
reaches: bash_triggers.on_bash_command(is_any_filing),
|
|
30
|
+
about: {
|
|
31
|
+
title: 'Direct filing',
|
|
32
|
+
topic: '`docs/josh-commands-backlog.md` → `josh issue:file`',
|
|
33
|
+
fires:
|
|
34
|
+
'a `Bash` that creates an Issue outside `josh issue:file` (`gh issue create`, or a POST with `title` to `…/issues`); the refusal hands over the `pnpm josh issue:file` form. Every occurrence',
|
|
35
|
+
quiet:
|
|
36
|
+
'filing through `pnpm josh issue:file` — the duplicate scan, the body check and `epic:bundle` all run',
|
|
37
|
+
},
|
|
30
38
|
}
|
|
31
39
|
|
|
32
40
|
const direct_filing = { DIRECT_FILING_REASON, ROW }
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type { RepoIdentity } from '#scripts/discovery/repo-origin'
|
|
2
|
+
import { repo_party } from '#scripts/discovery/repo-party'
|
|
3
|
+
import { bash_triggers } from './bash-triggers'
|
|
4
|
+
import { direct_pr_create } from './direct-pr-create'
|
|
5
|
+
import { gh_api } from './gh-api'
|
|
6
|
+
import { git_argv } from './git-argv'
|
|
7
|
+
import { shell_segments } from './shell-segments'
|
|
8
|
+
|
|
9
|
+
// The `direct-issue-comment` row of `delivered-rules.ts`. A run's own comment has to carry
|
|
10
|
+
// `RUN_MARKER`, or `issue-watch-diff.ts` reads it as a person's update: the run's review then reads as
|
|
11
|
+
// briefed before the issue changed, and `josh followup` refuses the merge (joshuafolkken/kit#4221).
|
|
12
|
+
// `pnpm josh issue:comment` is the one path that writes the marker, so a hand-built `gh issue comment`
|
|
13
|
+
// or `gh api` write to `…/issues/<N>/comments` is refused and pointed there. It reads the argv through
|
|
14
|
+
// `direct-pr-create.ts`'s cut, so a quoted mention is not a call and `bash -c '…'` still is.
|
|
15
|
+
//
|
|
16
|
+
// **Only the checkout's own repository**: `issue:comment` posts there and nowhere else, so the row
|
|
17
|
+
// claims the spellings that target it — the `{owner}` placeholder, the checkout's own `owner/repo`
|
|
18
|
+
// spelled out (the one repository the placeholders can expand to, `repo_party.current_repository`, the
|
|
19
|
+
// candidate set `third-party-write` reads; joshuafolkken/kit#4737), and `gh issue comment` with no
|
|
20
|
+
// repository selector. A comment to another repository named outright is left to `third-party-write`,
|
|
21
|
+
// and so is every spelled-out one where the placeholders could expand to more than one repository.
|
|
22
|
+
//
|
|
23
|
+
// **It fires on every occurrence**, for the reason `git-force.ts` does.
|
|
24
|
+
|
|
25
|
+
const ISSUE_GROUP = 'issue'
|
|
26
|
+
const COMMENT_ACTION = 'comment'
|
|
27
|
+
const API_SUBCOMMAND = 'api'
|
|
28
|
+
const REPO_SELECTOR = /^(?:-R|--repo)(?:=|$)/u
|
|
29
|
+
// One issue's (or pull request's — REST serves both as issues) comment collection. Anchored on the
|
|
30
|
+
// whole endpoint argument, so `…/issues/comments/<id>` and a listing elsewhere are not read as it. The
|
|
31
|
+
// number is any one segment, so `issues/$N/comments` is seen as well.
|
|
32
|
+
const SEGMENT = String.raw`[^/\s'"]+`
|
|
33
|
+
const QUOTE = `['"]?`
|
|
34
|
+
const API_ORIGIN = String.raw`(?:https://api\.github\.com)?/?`
|
|
35
|
+
const COMMENTS_PATH = new RegExp(
|
|
36
|
+
`^${QUOTE}${API_ORIGIN}repos/${SEGMENT}/${SEGMENT}/issues/${SEGMENT}/comments/?${QUOTE}$`,
|
|
37
|
+
'u',
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
function is_comment_cli_call(args: ReadonlyArray<string>): boolean {
|
|
41
|
+
if (args.some((argument) => REPO_SELECTOR.test(argument))) return false
|
|
42
|
+
|
|
43
|
+
const [group, action] = direct_pr_create.positional_words(
|
|
44
|
+
args,
|
|
45
|
+
direct_pr_create.VALUE_TAKING_FLAGS,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
return group === ISSUE_GROUP && action === COMMENT_ACTION
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
type ResolveOwnRepository = () => RepoIdentity | undefined
|
|
52
|
+
|
|
53
|
+
// The checkout's own repository is read only for an owner spelled out, so a placeholder write and
|
|
54
|
+
// every other command pay nothing for the config read.
|
|
55
|
+
function is_own_comments_endpoint(endpoint: string, resolve_own: ResolveOwnRepository): boolean {
|
|
56
|
+
const target = gh_api.repo_target(endpoint)
|
|
57
|
+
|
|
58
|
+
if (target === undefined || !COMMENTS_PATH.test(endpoint)) return false
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
gh_api.is_owner_placeholder(target.owner) || repo_party.is_own_repository(target, resolve_own())
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function is_comment_api_call(
|
|
66
|
+
args: ReadonlyArray<string>,
|
|
67
|
+
resolve_own: ResolveOwnRepository,
|
|
68
|
+
): boolean {
|
|
69
|
+
const call = [direct_pr_create.GH_COMMAND, ...args].join(' ')
|
|
70
|
+
|
|
71
|
+
if (!gh_api.is_gh_api(call) || !gh_api.is_write(call)) return false
|
|
72
|
+
|
|
73
|
+
const [subcommand, endpoint = ''] = direct_pr_create.positional_words(
|
|
74
|
+
args,
|
|
75
|
+
direct_pr_create.API_VALUE_TAKING_FLAGS,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return subcommand === API_SUBCOMMAND && is_own_comments_endpoint(endpoint, resolve_own)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function is_comment_segment(segment: string, resolve_own: ResolveOwnRepository): boolean {
|
|
82
|
+
const args = git_argv.arguments_of(segment, direct_pr_create.GH_COMMAND)
|
|
83
|
+
|
|
84
|
+
if (args === undefined || direct_pr_create.is_help_call(args)) return false
|
|
85
|
+
|
|
86
|
+
return is_comment_cli_call(args) || is_comment_api_call(args, resolve_own)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// `resolve_own` is injected so the suite fixes the checkout's repository without reading the real one.
|
|
90
|
+
function is_direct_issue_comment(
|
|
91
|
+
command: string,
|
|
92
|
+
resolve_own: ResolveOwnRepository = repo_party.current_repository,
|
|
93
|
+
): boolean {
|
|
94
|
+
return direct_pr_create.has_run_segment(command, (segment) =>
|
|
95
|
+
is_comment_segment(segment, resolve_own),
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// `pnpm josh issue:comment` — the act that keeps the rule, segment-wise so a spelling quoted inside
|
|
100
|
+
// another command's body is not read as one.
|
|
101
|
+
const COMMENT_NAMES: ReadonlySet<string> = new Set(['issue:comment'])
|
|
102
|
+
|
|
103
|
+
function is_josh_comment(command: string): boolean {
|
|
104
|
+
return shell_segments
|
|
105
|
+
.segments_of(command)
|
|
106
|
+
.some((segment) => shell_segments.is_josh_command(segment, COMMENT_NAMES))
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function is_any_comment(command: string): boolean {
|
|
110
|
+
return is_direct_issue_comment(command) || is_josh_comment(command)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const DIRECT_ISSUE_COMMENT_REASON =
|
|
114
|
+
'⛔ direct issue comment: `gh issue comment` (or a `gh api` write to `…/issues/<N>/comments`) posts ' +
|
|
115
|
+
'without the run marker, so the run reads its own comment as a person updating the issue — the ' +
|
|
116
|
+
'review goes stale and `pnpm josh followup` refuses the merge. Post with ' +
|
|
117
|
+
'`pnpm josh issue:comment <N> --body-file <path>` instead (`shell-body.md`). ' +
|
|
118
|
+
'**This rule fires on every occurrence, not once per run.**'
|
|
119
|
+
|
|
120
|
+
const ROW = {
|
|
121
|
+
id: 'direct-issue-comment',
|
|
122
|
+
is_trigger: bash_triggers.on_bash_command(is_direct_issue_comment),
|
|
123
|
+
reason: DIRECT_ISSUE_COMMENT_REASON,
|
|
124
|
+
decide: (): boolean => true,
|
|
125
|
+
keeps: bash_triggers.on_bash_command(is_josh_comment),
|
|
126
|
+
reaches: bash_triggers.on_bash_command(is_any_comment),
|
|
127
|
+
about: {
|
|
128
|
+
title: 'Direct issue comment',
|
|
129
|
+
topic: '`shell-body.md`',
|
|
130
|
+
fires:
|
|
131
|
+
"a comment to the checkout's own repository outside `josh issue:comment` (`gh issue comment` with no `--repo`, or a `gh api` write to `repos/<owner>/<r>/issues/<N>/comments` whose owner is the `{owner}` placeholder or the checkout's own `owner/repo` spelled out); it points at `pnpm josh issue:comment`. Every occurrence",
|
|
132
|
+
quiet:
|
|
133
|
+
'`pnpm josh issue:comment`, or reading the comments — the path that writes the run marker',
|
|
134
|
+
},
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const direct_issue_comment = { DIRECT_ISSUE_COMMENT_REASON, ROW, is_direct_issue_comment }
|
|
138
|
+
|
|
139
|
+
export { direct_issue_comment }
|