@joshuafolkken/kit 1.1514.0 → 1.2114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
5
|
+
import { issue_priority_raise, type RaiseResult } from './issue-priority-raise'
|
|
6
|
+
|
|
7
|
+
// `josh issue:priority <N>` — apply `priority:high` to an open issue whose body reached the high
|
|
8
|
+
// floor after filing, as a recurrence's appended cause-loss line does (joshuafolkken/kit#4960).
|
|
9
|
+
|
|
10
|
+
const SUCCESS_EXIT_CODE = 0
|
|
11
|
+
const FAILURE_EXIT_CODE = 1
|
|
12
|
+
const ARGV_OFFSET = 2
|
|
13
|
+
const USAGE = 'Usage: josh issue:priority <issue-number>'
|
|
14
|
+
|
|
15
|
+
const REPORTS: Readonly<Record<RaiseResult, string>> = {
|
|
16
|
+
raised: 'applied `priority:high` — its body reaches the high floor.',
|
|
17
|
+
labelled: 'already carries a priority label — left as it is.',
|
|
18
|
+
below: 'stays below the high floor — no label applied.',
|
|
19
|
+
unreadable: 'could not be read — no label applied.',
|
|
20
|
+
failed: 'reaches the high floor, but applying `priority:high` failed.',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const FAILURES: ReadonlySet<RaiseResult> = new Set(['unreadable', 'failed'])
|
|
24
|
+
|
|
25
|
+
function parse_number(argv: ReadonlyArray<string>): string | undefined {
|
|
26
|
+
const [first] = argv
|
|
27
|
+
|
|
28
|
+
if (first === undefined || argv.length !== 1) return undefined
|
|
29
|
+
|
|
30
|
+
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(first) ? first : undefined
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
34
|
+
const issue_number = parse_number(argv)
|
|
35
|
+
|
|
36
|
+
if (issue_number === undefined) {
|
|
37
|
+
console.error(USAGE)
|
|
38
|
+
|
|
39
|
+
return FAILURE_EXIT_CODE
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const result = await issue_priority_raise.raise(issue_number)
|
|
43
|
+
const line = `Issue ${session_cite.issue(issue_number)} ${REPORTS[result]}`
|
|
44
|
+
const is_failure = FAILURES.has(result)
|
|
45
|
+
|
|
46
|
+
if (is_failure) console.error(line)
|
|
47
|
+
else console.info(line)
|
|
48
|
+
|
|
49
|
+
return is_failure ? FAILURE_EXIT_CODE : SUCCESS_EXIT_CODE
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
53
|
+
process.exitCode = await run(argv)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const issue_priority_cli = { run }
|
|
57
|
+
|
|
58
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
59
|
+
|
|
60
|
+
export { issue_priority_cli }
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import { issue_label_schema } from '#scripts/git/git-schemas'
|
|
3
|
+
import { parse_json_object_or_undefined } from '#scripts/git/parse-json-array'
|
|
4
|
+
import { z } from 'zod'
|
|
5
|
+
import { PRIORITY_HIGH_LABEL } from './issue-labels'
|
|
6
|
+
import { issue_priority } from './issue-priority'
|
|
7
|
+
|
|
8
|
+
// joshuafolkken/kit#4960: an open Issue's body can reach the high floor after it was filed — a
|
|
9
|
+
// recurrence appends a cause-loss line to it — and the body edit applies no label. This re-reads the
|
|
10
|
+
// body and applies `priority:high` once its floor is high, as `josh issue:file` would have.
|
|
11
|
+
|
|
12
|
+
type RaiseResult = 'raised' | 'labelled' | 'below' | 'unreadable' | 'failed'
|
|
13
|
+
|
|
14
|
+
const read_schema = z.object({
|
|
15
|
+
labels: z.array(issue_label_schema).optional(),
|
|
16
|
+
body: z.string().nullish(),
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
interface LabelsAndBody {
|
|
20
|
+
labels: ReadonlyArray<string>
|
|
21
|
+
body: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function read_issue(issue_number: string): Promise<LabelsAndBody | undefined> {
|
|
25
|
+
const raw = await git_gh_command.issue_get_labels_and_body(issue_number)
|
|
26
|
+
const parsed = raw === undefined ? undefined : parse_json_object_or_undefined(raw, read_schema)
|
|
27
|
+
|
|
28
|
+
if (parsed === undefined) return undefined
|
|
29
|
+
|
|
30
|
+
return { labels: (parsed.labels ?? []).map((label) => label.name), body: parsed.body ?? '' }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// A priority label already on the issue wins, as a typed one does at filing.
|
|
34
|
+
function decision(read: LabelsAndBody): RaiseResult | undefined {
|
|
35
|
+
if (issue_priority.is_typed(read.labels)) return 'labelled'
|
|
36
|
+
|
|
37
|
+
return issue_priority.floor_of(read.body) === 'high' ? undefined : 'below'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function raise(issue_number: string): Promise<RaiseResult> {
|
|
41
|
+
const read = await read_issue(issue_number)
|
|
42
|
+
|
|
43
|
+
if (read === undefined) return 'unreadable'
|
|
44
|
+
const decided = decision(read)
|
|
45
|
+
|
|
46
|
+
if (decided !== undefined) return decided
|
|
47
|
+
const is_applied = await git_gh_command.issue_add_label(issue_number, PRIORITY_HIGH_LABEL)
|
|
48
|
+
|
|
49
|
+
return is_applied ? 'raised' : 'failed'
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const issue_priority_raise = { raise }
|
|
53
|
+
|
|
54
|
+
export type { RaiseResult }
|
|
55
|
+
export { issue_priority_raise }
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { has_label_name, PRIORITY_CRITICAL_LABEL, PRIORITY_HIGH_LABEL } from './issue-labels'
|
|
2
|
+
import { markdown_section } from './markdown-section'
|
|
3
|
+
|
|
4
|
+
// joshuafolkken/kit#4383: the priority `josh issue:file` applies, read from the body's one priority
|
|
5
|
+
// declaration under its background heading (`issue-template.md` holds the criteria). An urgent or high
|
|
6
|
+
// declaration must name its basis, so neither label is applied on a bare word. A security-finding or
|
|
7
|
+
// caused-park line sets a high floor (joshuafolkken/kit#4767), and so do cause-loss lines summing to
|
|
8
|
+
// `LOSS_HIGH_MINUTES` (joshuafolkken/kit#4960): each recurrence appends one, so their sum is time the
|
|
9
|
+
// cause lost for certain. A declaration below the floor is refused, and a body that declares none is
|
|
10
|
+
// filed at it. A run-time-shortening Issue's share of the median lane time sets neither a floor nor a
|
|
11
|
+
// refusal (joshuafolkken/kit#4928), and its causing-lane minutes, one lane's estimate, only rank it. A
|
|
12
|
+
// priority label the filer typed (`kickoff new critical`) wins: the body is then not judged at all.
|
|
13
|
+
|
|
14
|
+
type PriorityLevel = 'critical' | 'high' | 'normal'
|
|
15
|
+
|
|
16
|
+
interface LevelParser {
|
|
17
|
+
pattern: RegExp
|
|
18
|
+
level: PriorityLevel
|
|
19
|
+
accepts: (basis: string) => boolean
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// A background line that sets a floor or ranks, its well-formed shape, and the refusal for a malformed one.
|
|
23
|
+
interface FloorLine {
|
|
24
|
+
prefix: string
|
|
25
|
+
accepts: (line: string) => boolean
|
|
26
|
+
problem: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const BACKGROUND_HEADING = '## 背景'
|
|
30
|
+
const DECLARATION_PREFIX = '- 優先度:'
|
|
31
|
+
const NORMAL_LINE = '- 優先度: 通常'
|
|
32
|
+
const CRITICAL_PATTERN = /^- 優先度: 緊急((?<basis>.*))$/u
|
|
33
|
+
const HIGH_PATTERN = /^- 優先度: 高((?<basis>.*))$/u
|
|
34
|
+
// An interrupt-filing condition number (`wip-cap.md`); a reduction is no basis (joshuafolkken/kit#4928).
|
|
35
|
+
const CRITICAL_BASIS = /条件 ?[1-3]/u
|
|
36
|
+
const PLACEHOLDER = /^<.*>$/u
|
|
37
|
+
const LANE_PREFIX = '- 原因のレーン:'
|
|
38
|
+
// The minutes are the lane's net time (`josh lane:net`), the number its Issue.
|
|
39
|
+
const LANE_LINE = /^- 原因のレーン: (?<minutes>\d+(?:\.\d+)?) 分(#[1-9]\d*)$/u
|
|
40
|
+
// The minutes one cause of an overrun lost, ranked ahead of its causing lane's (joshuafolkken/kit#4861).
|
|
41
|
+
const CAUSE_PREFIX = '- 原因の損失:'
|
|
42
|
+
const CAUSE_LINE = /^- 原因の損失: (?<minutes>\d+(?:\.\d+)?) 分$/u
|
|
43
|
+
// The summed cause-loss minutes that set the high floor; provisional, tuned from use.
|
|
44
|
+
const LOSS_HIGH_MINUTES = 30
|
|
45
|
+
const SECURITY_PREFIX = '- セキュリティ:'
|
|
46
|
+
const PARK_PREFIX = '- 原因の park:'
|
|
47
|
+
const PARK_LINE = /^- 原因の park: #[1-9]\d*$/u
|
|
48
|
+
// Queues the Issue behind every undeclared one of its pool (joshuafolkken/kit#5310).
|
|
49
|
+
const ORDER_PREFIX = '- 実施順:'
|
|
50
|
+
const LAST_LINE = '- 実施順: 最後'
|
|
51
|
+
const LEVELS: ReadonlyArray<PriorityLevel> = ['normal', 'high', 'critical']
|
|
52
|
+
const RAISED_LEVELS: ReadonlySet<PriorityLevel> = new Set(['high', 'critical'])
|
|
53
|
+
const LABELS: Readonly<Record<PriorityLevel, string | undefined>> = {
|
|
54
|
+
critical: PRIORITY_CRITICAL_LABEL,
|
|
55
|
+
high: PRIORITY_HIGH_LABEL,
|
|
56
|
+
normal: undefined,
|
|
57
|
+
}
|
|
58
|
+
const DECLARATION_PROBLEM = `declare at most one priority under \`${BACKGROUND_HEADING}\`: \`- 優先度: 緊急(条件 <1-3>)\`, \`- 優先度: 高(<根拠>)\` or \`${NORMAL_LINE}\` — an urgent one names its condition, a high one its basis (\`issue-template.md\`)`
|
|
59
|
+
|
|
60
|
+
const LANE_PROBLEM = `state a causing lane under \`${BACKGROUND_HEADING}\` as \`${LANE_PREFIX} <分> 分(#<N>)\` — the lane's net minutes from \`josh lane:net <N>\` (\`issue-template.md\`)`
|
|
61
|
+
|
|
62
|
+
const CAUSE_PROBLEM = `state a cause's lost minutes under \`${BACKGROUND_HEADING}\` as \`${CAUSE_PREFIX} <分> 分\` (\`issue-template.md\`)`
|
|
63
|
+
|
|
64
|
+
const SECURITY_PROBLEM = `state a security finding under \`${BACKGROUND_HEADING}\` as \`${SECURITY_PREFIX} <迂回される gate・ガード・権限>\` (\`issue-template.md\`)`
|
|
65
|
+
|
|
66
|
+
const PARK_PROBLEM = `state a caused park under \`${BACKGROUND_HEADING}\` as \`${PARK_PREFIX} #<N>\` — the Issue the defect parked or whose run it stopped (\`issue-template.md\`)`
|
|
67
|
+
|
|
68
|
+
const LAST_PROBLEM = `\`${LAST_LINE}\` queues this Issue last, and an urgent or high priority runs it first — keep one of the two (\`issue-template.md\`)`
|
|
69
|
+
|
|
70
|
+
const HIGH_DECLARATION = '高(セキュリティ … / 原因の park … / 原因の損失 …)'
|
|
71
|
+
|
|
72
|
+
function unfenced_lines(body: string, heading: string): ReadonlyArray<string> {
|
|
73
|
+
const section = markdown_section.section_lines(body, heading).join('\n')
|
|
74
|
+
|
|
75
|
+
return markdown_section.unfenced_lines(section).map((line) => line.trim())
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function has_basis(basis: string): boolean {
|
|
79
|
+
const trimmed = basis.trim()
|
|
80
|
+
|
|
81
|
+
return trimmed.length > 0 && !PLACEHOLDER.test(trimmed)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function has_critical_basis(basis: string): boolean {
|
|
85
|
+
return CRITICAL_BASIS.test(basis)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const PARSERS: ReadonlyArray<LevelParser> = [
|
|
89
|
+
{ pattern: CRITICAL_PATTERN, level: 'critical', accepts: has_critical_basis },
|
|
90
|
+
{ pattern: HIGH_PATTERN, level: 'high', accepts: has_basis },
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
function parsed_level(parser: LevelParser, line: string): PriorityLevel | undefined {
|
|
94
|
+
const basis = parser.pattern.exec(line)?.groups?.['basis'] ?? ''
|
|
95
|
+
|
|
96
|
+
return parser.accepts(basis) ? parser.level : undefined
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// The level one declaration line states, or `undefined` when it is malformed or names no basis.
|
|
100
|
+
function level_of(line: string): PriorityLevel | undefined {
|
|
101
|
+
if (line === NORMAL_LINE) return 'normal'
|
|
102
|
+
const parser = PARSERS.find((entry) => entry.pattern.test(line))
|
|
103
|
+
|
|
104
|
+
return parser === undefined ? undefined : parsed_level(parser, line)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function background_lines(body: string, prefix: string): ReadonlyArray<string> {
|
|
108
|
+
return unfenced_lines(body, BACKGROUND_HEADING).filter((line) => line.startsWith(prefix))
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// `normal` when the body declares nothing, `undefined` when it declares more than one line or a bad one.
|
|
112
|
+
function declared_level(body: string): PriorityLevel | undefined {
|
|
113
|
+
const lines = background_lines(body, DECLARATION_PREFIX)
|
|
114
|
+
|
|
115
|
+
if (lines.length === 0) return 'normal'
|
|
116
|
+
|
|
117
|
+
return lines.length === 1 ? level_of(lines[0] ?? '') : undefined
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function is_lane_line(line: string): boolean {
|
|
121
|
+
return LANE_LINE.test(line)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function is_cause_line(line: string): boolean {
|
|
125
|
+
return CAUSE_LINE.test(line)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function is_security_line(line: string): boolean {
|
|
129
|
+
return has_basis(line.slice(SECURITY_PREFIX.length))
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function is_park_line(line: string): boolean {
|
|
133
|
+
return PARK_LINE.test(line)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Read for ranking, not a floor: one lane's estimate (joshuafolkken/kit#4960).
|
|
137
|
+
const LANE_RANK_LINE: FloorLine = {
|
|
138
|
+
prefix: LANE_PREFIX,
|
|
139
|
+
accepts: is_lane_line,
|
|
140
|
+
problem: LANE_PROBLEM,
|
|
141
|
+
}
|
|
142
|
+
// H and I of `issue-template.md`'s criteria: either line ranks the Issue high.
|
|
143
|
+
const HIGH_FLOOR_LINES: ReadonlyArray<FloorLine> = [
|
|
144
|
+
{ prefix: SECURITY_PREFIX, accepts: is_security_line, problem: SECURITY_PROBLEM },
|
|
145
|
+
{ prefix: PARK_PREFIX, accepts: is_park_line, problem: PARK_PROBLEM },
|
|
146
|
+
]
|
|
147
|
+
|
|
148
|
+
// Its sum ranks and sets the high floor; a malformed one would count as undeclared without a word.
|
|
149
|
+
const CAUSE_RANK_LINE: FloorLine = {
|
|
150
|
+
prefix: CAUSE_PREFIX,
|
|
151
|
+
accepts: is_cause_line,
|
|
152
|
+
problem: CAUSE_PROBLEM,
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// The refusal for the first floor or rank line written in the wrong shape, or `undefined`.
|
|
156
|
+
function malformed_problem(body: string): string | undefined {
|
|
157
|
+
return [LANE_RANK_LINE, CAUSE_RANK_LINE, ...HIGH_FLOOR_LINES].find((entry) =>
|
|
158
|
+
background_lines(body, entry.prefix).some((line) => !entry.accepts(line)),
|
|
159
|
+
)?.problem
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// The minutes each background line of `prefix` declares in `pattern`'s shape.
|
|
163
|
+
function declared_minutes(body: string, prefix: string, pattern: RegExp): ReadonlyArray<number> {
|
|
164
|
+
return background_lines(body, prefix)
|
|
165
|
+
.map((line) => Number(pattern.exec(line)?.groups?.['minutes']))
|
|
166
|
+
.filter((value) => Number.isFinite(value))
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// The cause-loss lines summed, as each recurrence appends one (joshuafolkken/kit#4928).
|
|
170
|
+
function cause_loss_minutes(body: string): number {
|
|
171
|
+
return declared_minutes(body, CAUSE_PREFIX, CAUSE_LINE).reduce((sum, value) => sum + value, 0)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function is_marked(body: string): boolean {
|
|
175
|
+
return HIGH_FLOOR_LINES.some((entry) => background_lines(body, entry.prefix).length > 0)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function has_loss_floor(body: string): boolean {
|
|
179
|
+
return cause_loss_minutes(body) >= LOSS_HIGH_MINUTES
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// The lowest level the Issue may declare: high when it marks a security finding or a caused park, or
|
|
183
|
+
// its cause lost `LOSS_HIGH_MINUTES` or more.
|
|
184
|
+
function floor_of(body: string): PriorityLevel {
|
|
185
|
+
return is_marked(body) || has_loss_floor(body) ? 'high' : 'normal'
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// What sets the body's high floor, named in the refusal of a declaration below it.
|
|
189
|
+
function floor_reason(body: string): string {
|
|
190
|
+
const loss = `the cause-loss lines' sum of ${String(cause_loss_minutes(body))} minutes (${String(LOSS_HIGH_MINUTES)} or more)`
|
|
191
|
+
const reasons = [
|
|
192
|
+
is_marked(body) ? 'the security finding or caused park' : undefined,
|
|
193
|
+
has_loss_floor(body) ? loss : undefined,
|
|
194
|
+
]
|
|
195
|
+
|
|
196
|
+
return reasons.filter((reason) => reason !== undefined).join(' and ')
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// The longest causing lane the body declares, in minutes; `0` when it declares none.
|
|
200
|
+
function lane_minutes(body = ''): number {
|
|
201
|
+
return Math.max(0, ...declared_minutes(body, LANE_PREFIX, LANE_LINE))
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// The minutes the body's cause lost, the rank backlog ordering reads: its cause-loss lines summed,
|
|
205
|
+
// else its causing lane, whose net time bounds the loss from above; `0` when it declares neither.
|
|
206
|
+
function lost_minutes(body = ''): number {
|
|
207
|
+
const cause = cause_loss_minutes(body)
|
|
208
|
+
|
|
209
|
+
return cause > 0 ? cause : lane_minutes(body)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// The level the Issue is filed at: its declaration, else its floor.
|
|
213
|
+
function filed_level(body: string): PriorityLevel | undefined {
|
|
214
|
+
return background_lines(body, DECLARATION_PREFIX).length === 0
|
|
215
|
+
? floor_of(body)
|
|
216
|
+
: declared_level(body)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function is_typed(labels: ReadonlyArray<string>): boolean {
|
|
220
|
+
return (
|
|
221
|
+
has_label_name(labels, PRIORITY_CRITICAL_LABEL) || has_label_name(labels, PRIORITY_HIGH_LABEL)
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function floor_problem(body: string, level: PriorityLevel): string | undefined {
|
|
226
|
+
const floor = floor_of(body)
|
|
227
|
+
|
|
228
|
+
if (LEVELS.indexOf(level) >= LEVELS.indexOf(floor)) return undefined
|
|
229
|
+
|
|
230
|
+
return `${floor_reason(body)} ranks this Issue \`${floor}\`, above its declared \`${level}\` — declare \`- 優先度: ${HIGH_DECLARATION}\`, or drop the declaration to file at the floor (\`issue-template.md\`)`
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Whether the body declares `LAST_LINE`; any other value is no declaration.
|
|
234
|
+
function is_last(body = ''): boolean {
|
|
235
|
+
return background_lines(body, ORDER_PREFIX).includes(LAST_LINE)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// The refusal for a body that queues itself last and is filed urgent or high as well, by its
|
|
239
|
+
// declaration or its floor, or `undefined`. `josh issue:lint` reads it, so `josh issue:file` does too.
|
|
240
|
+
function order_problem(body: string): string | undefined {
|
|
241
|
+
return is_last(body) && RAISED_LEVELS.has(filed_level(body) ?? 'normal')
|
|
242
|
+
? LAST_PROBLEM
|
|
243
|
+
: undefined
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Why the filing is refused for its priority, or `undefined`. `typed` is the `--label` list; a typed
|
|
247
|
+
// label is refused only beside a run-last line, as the body's own raise is `order_problem`'s.
|
|
248
|
+
function problem(body: string, typed: ReadonlyArray<string>): string | undefined {
|
|
249
|
+
if (is_typed(typed)) return is_last(body) ? LAST_PROBLEM : undefined
|
|
250
|
+
const level = filed_level(body)
|
|
251
|
+
|
|
252
|
+
if (level === undefined) return DECLARATION_PROBLEM
|
|
253
|
+
|
|
254
|
+
return malformed_problem(body) ?? floor_problem(body, level)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// The labels a new Issue is filed with — the filed level's label added unless one was typed.
|
|
258
|
+
function with_label(labels: ReadonlyArray<string>, body: string): ReadonlyArray<string> {
|
|
259
|
+
const label = LABELS[filed_level(body) ?? 'normal']
|
|
260
|
+
|
|
261
|
+
if (label === undefined || is_typed(labels)) return labels
|
|
262
|
+
|
|
263
|
+
return [...labels, label]
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const issue_priority = {
|
|
267
|
+
CAUSE_PREFIX,
|
|
268
|
+
LANE_PREFIX,
|
|
269
|
+
LOSS_HIGH_MINUTES,
|
|
270
|
+
declared_level,
|
|
271
|
+
floor_of,
|
|
272
|
+
is_last,
|
|
273
|
+
is_typed,
|
|
274
|
+
lane_minutes,
|
|
275
|
+
lost_minutes,
|
|
276
|
+
order_problem,
|
|
277
|
+
problem,
|
|
278
|
+
with_label,
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export type { PriorityLevel }
|
|
282
|
+
export { issue_priority }
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
BUG_LABEL,
|
|
3
3
|
has_label_name,
|
|
4
4
|
INTERRUPT_ROUTE_LABEL,
|
|
5
|
+
PRIORITY_CRITICAL_LABEL,
|
|
5
6
|
PRIORITY_HIGH_LABEL,
|
|
6
7
|
RUN_SOLO_LABEL,
|
|
7
8
|
} from './issue-labels'
|
|
@@ -9,16 +10,29 @@ import {
|
|
|
9
10
|
// The keys that decide which open issue is offered first, defined once for
|
|
10
11
|
// every ranking that asks: the `🗒 Next issues` display, the `auto-ok` pickup and `backlog:next`.
|
|
11
12
|
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
13
|
+
// First, an issue whose body declares it runs last (`issue_priority.is_last`) follows every
|
|
14
|
+
// undeclared one, so a wide-reach upgrade queues behind the rest of its pool (joshuafolkken/kit#5310);
|
|
15
|
+
// declared ones rank among themselves by the keys below.
|
|
16
|
+
//
|
|
17
|
+
// Then, in order: `priority:critical`, then `priority:high`, then a defect on the verification path (`bug` with `run:solo`, or
|
|
18
|
+
// `route:interrupt`), then the minutes its cause lost (`issue_priority.lost_minutes`: the body's
|
|
19
|
+
// cause-loss lines summed over its recurrences (joshuafolkken/kit#4928), else its causing-lane line,
|
|
20
|
+
// so causes of one lane are told apart (joshuafolkken/kit#4861); `0` when neither is declared, so an
|
|
21
|
+
// undeclared issue follows every declared one of its priority), then the minutes a week its declared
|
|
22
|
+
// speed-up saves (`expected_effect_lint.weekly_minutes`, on the same minute scale; `0` when undeclared,
|
|
23
|
+
// so a measured time-saver runs ahead of an unmeasured feature (joshuafolkken/kit#5302)), then how many
|
|
24
|
+
// other open issues wait on it. Below those, the caller's own order stands — the sort is stable, so recency and the defect-rate
|
|
25
|
+
// adjustment survive as the last key.
|
|
15
26
|
//
|
|
16
27
|
// **`run:solo` alone is not a key.** It means "runs alone", not "runs first": tidying that only touches
|
|
17
28
|
// the verification path carries it too, and a low-priority one is not owed a place ahead of the queue.
|
|
18
29
|
// Only a defect on that path is, because `backlogrun-lanes.md` holds a batch until it has merged.
|
|
19
30
|
|
|
20
31
|
interface RankRow {
|
|
32
|
+
is_last: boolean
|
|
21
33
|
labels: ReadonlyArray<string>
|
|
34
|
+
lost_minutes: number
|
|
35
|
+
gain_minutes: number
|
|
22
36
|
dependents: number
|
|
23
37
|
}
|
|
24
38
|
|
|
@@ -35,6 +49,10 @@ function flag(is_set: boolean): number {
|
|
|
35
49
|
return is_set ? 1 : 0
|
|
36
50
|
}
|
|
37
51
|
|
|
52
|
+
function is_critical(labels: ReadonlyArray<string>): boolean {
|
|
53
|
+
return has_label_name(labels, PRIORITY_CRITICAL_LABEL)
|
|
54
|
+
}
|
|
55
|
+
|
|
38
56
|
function is_priority(labels: ReadonlyArray<string>): boolean {
|
|
39
57
|
return has_label_name(labels, PRIORITY_HIGH_LABEL)
|
|
40
58
|
}
|
|
@@ -45,11 +63,16 @@ function is_verification_defect(labels: ReadonlyArray<string>): boolean {
|
|
|
45
63
|
return has_label_name(labels, BUG_LABEL) && has_label_name(labels, RUN_SOLO_LABEL)
|
|
46
64
|
}
|
|
47
65
|
|
|
48
|
-
// Negated so that the larger value sorts first under an ascending comparison
|
|
66
|
+
// Negated so that the larger value sorts first under an ascending comparison; `is_last` alone is not,
|
|
67
|
+
// so a declared row sorts last.
|
|
49
68
|
function keys_of(row: RankRow): ReadonlyArray<number> {
|
|
50
69
|
return [
|
|
70
|
+
flag(row.is_last),
|
|
71
|
+
-flag(is_critical(row.labels)),
|
|
51
72
|
-flag(is_priority(row.labels)),
|
|
52
73
|
-flag(is_verification_defect(row.labels)),
|
|
74
|
+
-row.lost_minutes,
|
|
75
|
+
-row.gain_minutes,
|
|
53
76
|
-row.dependents,
|
|
54
77
|
]
|
|
55
78
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
1
|
+
import { gh_author_association } from '#scripts/gh/gh-author-association'
|
|
3
2
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
4
3
|
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
5
4
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
@@ -27,13 +26,12 @@ import { issue_report_failures, type ReadFailureKind } from './issue-report-fail
|
|
|
27
26
|
// wins, and a comment nobody read cannot win anything.
|
|
28
27
|
|
|
29
28
|
const FAILURE_EXIT_CODE = 1
|
|
30
|
-
const ARGV_OFFSET = 2
|
|
31
29
|
const USAGE = 'Usage: josh issue:read <issue-number> [<issue-number> ...]'
|
|
32
30
|
const BLOCK_SEPARATOR = '\n\n---\n\n'
|
|
33
31
|
// The same bound `issue:state` puts on its batch read, for the same reason: every read is a `gh`
|
|
34
32
|
// process, and an unbounded fan-out is answered with secondary rate limiting rather than with issues.
|
|
35
33
|
const READ_CONCURRENCY = 8
|
|
36
|
-
const ISSUE_FIELDS =
|
|
34
|
+
const ISSUE_FIELDS = `title,state,body,${gh_author_association.AUTHOR_FIELDS}`
|
|
37
35
|
const FAILURE_TERMS = { success_kind: 'issue', misreading: 'the issue is empty' } as const
|
|
38
36
|
|
|
39
37
|
interface IssueContent {
|
|
@@ -46,8 +44,15 @@ type NumberResult = { kind: 'issue'; content: IssueContent } | { kind: ReadFailu
|
|
|
46
44
|
// The formatted block for one issue, or the failure kind — what `run:prep` bundles beside the state
|
|
47
45
|
// and the dependency-update scope. It reuses this file's read and the shared
|
|
48
46
|
// `format_issue` rather than reproducing either, so the two `gh` reads and the block shape stay
|
|
49
|
-
// single-sourced here.
|
|
50
|
-
|
|
47
|
+
// single-sourced here. `trust` carries what the read already decided about its authors, so
|
|
48
|
+
// `run:entry` gates an untrusted issue without a second read (joshuafolkken/kit#4663). `undefined` is
|
|
49
|
+
// a read that failed — a write-access lookup, or the comment listing — never an untrusted author (#4703).
|
|
50
|
+
interface BlockTrust {
|
|
51
|
+
is_body_trusted: boolean | undefined
|
|
52
|
+
has_trusted_comment: boolean | undefined
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type BlockRead = { kind: 'ok'; block: string; trust: BlockTrust } | { kind: ReadFailureKind }
|
|
51
56
|
|
|
52
57
|
interface IssueReport {
|
|
53
58
|
issue_number: string
|
|
@@ -78,11 +83,27 @@ async function read_issue(issue_number: string): Promise<NumberResult> {
|
|
|
78
83
|
|
|
79
84
|
if (read.kind !== 'read') return { kind: read.kind }
|
|
80
85
|
|
|
81
|
-
const fields = issue_read.parse_issue_fields(read.json)
|
|
86
|
+
const fields = await issue_read.parse_issue_fields(read.json)
|
|
82
87
|
|
|
83
88
|
if (fields === undefined) return { kind: 'unreadable' }
|
|
84
89
|
|
|
85
|
-
|
|
90
|
+
const comments = await issue_read.parse_comments(comments_json)
|
|
91
|
+
|
|
92
|
+
return { kind: 'issue', content: { fields, comments } }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// A trusted comment is an answer whatever else failed; without one, a listing or a lookup that failed
|
|
96
|
+
// leaves the question unanswered rather than answered no.
|
|
97
|
+
function has_trusted_comment(
|
|
98
|
+
comments: ReadonlyArray<IssueComment> | undefined,
|
|
99
|
+
): boolean | undefined {
|
|
100
|
+
if (comments?.some((comment) => comment.is_trusted === true) === true) return true
|
|
101
|
+
|
|
102
|
+
if (comments === undefined || comments.some((comment) => comment.is_trusted === undefined)) {
|
|
103
|
+
return undefined
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return false
|
|
86
107
|
}
|
|
87
108
|
|
|
88
109
|
// One issue's block for a caller that wants the text rather than the printing — `run:prep` composes it
|
|
@@ -94,8 +115,12 @@ async function read_block(issue_number: string): Promise<BlockRead> {
|
|
|
94
115
|
if (result.kind !== 'issue') return { kind: result.kind }
|
|
95
116
|
|
|
96
117
|
const { fields, comments } = result.content
|
|
118
|
+
const trust = {
|
|
119
|
+
is_body_trusted: fields.is_body_trusted,
|
|
120
|
+
has_trusted_comment: has_trusted_comment(comments),
|
|
121
|
+
}
|
|
97
122
|
|
|
98
|
-
return { kind: 'ok', block: issue_read.format_issue(issue_number, fields, comments) }
|
|
123
|
+
return { kind: 'ok', block: issue_read.format_issue(issue_number, fields, comments), trust }
|
|
99
124
|
}
|
|
100
125
|
|
|
101
126
|
async function read_all(issue_numbers: ReadonlyArray<string>): Promise<ReadonlyArray<IssueReport>> {
|
|
@@ -134,10 +159,6 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
134
159
|
return issue_report_failures.report_failures(reports, FAILURE_TERMS)
|
|
135
160
|
}
|
|
136
161
|
|
|
137
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
138
|
-
process.exitCode = await run(argv)
|
|
139
|
-
}
|
|
140
|
-
|
|
141
162
|
const issue_read_cli = {
|
|
142
163
|
USAGE,
|
|
143
164
|
parse_numbers,
|
|
@@ -145,7 +166,5 @@ const issue_read_cli = {
|
|
|
145
166
|
run,
|
|
146
167
|
}
|
|
147
168
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
export type { BlockRead }
|
|
169
|
+
export type { BlockRead, BlockTrust }
|
|
151
170
|
export { issue_read_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_read_cli } from './issue-read-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh issue:read` entry, kept apart from `issue-read-cli.ts` because other modules import that
|
|
6
|
+
// one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = await issue_read_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|