@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,30 @@
|
|
|
1
|
+
import { lane_net_read } from '#scripts/lane/lane-net-read'
|
|
2
|
+
import { issue_cite } from './issue-cite'
|
|
3
|
+
import { issue_priority } from './issue-priority'
|
|
4
|
+
|
|
5
|
+
// joshuafolkken/kit#5225: a refused `josh issue:file --found-during <N>` prints the causing-lane line
|
|
6
|
+
// filled from `josh lane:net <N>`, so the filer pastes it rather than running the command apart. Nothing
|
|
7
|
+
// is printed when the body already declares a causing lane, or the ledger holds no dispatch and merge of
|
|
8
|
+
// the lane yet.
|
|
9
|
+
|
|
10
|
+
async function lines_of(
|
|
11
|
+
found_during: string | undefined,
|
|
12
|
+
body: string,
|
|
13
|
+
): Promise<ReadonlyArray<string>> {
|
|
14
|
+
if (found_during === undefined || issue_priority.lane_minutes(body) > 0) return []
|
|
15
|
+
const minutes = await lane_net_read.net_minutes_of(Number(found_during))
|
|
16
|
+
|
|
17
|
+
if (minutes === undefined) return []
|
|
18
|
+
const line = `${issue_priority.LANE_PREFIX} ${String(minutes)} 分(${issue_cite.plain(found_during)})`
|
|
19
|
+
|
|
20
|
+
return [
|
|
21
|
+
`↳ the causing lane from \`josh lane:net ${found_during}\`, to paste under \`## 背景\` when it caused this Issue:`,
|
|
22
|
+
line,
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const issue_file_lane_hint = {
|
|
27
|
+
lines_of,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { issue_file_lane_hint }
|
|
@@ -7,19 +7,19 @@ import { issue_backlinks } from './issue-backlinks'
|
|
|
7
7
|
import { issue_classification } from './issue-classification'
|
|
8
8
|
import {
|
|
9
9
|
AUTO_OK_LABEL,
|
|
10
|
-
DEPTH_LABEL_ORDER,
|
|
11
10
|
FILING_ROUTE_LABELS,
|
|
12
11
|
has_label_name,
|
|
13
12
|
RUN_LANE_LABEL,
|
|
14
13
|
RUN_SOLO_LABEL,
|
|
15
14
|
} from './issue-labels'
|
|
15
|
+
import { issue_not_before_label } from './issue-not-before-label'
|
|
16
|
+
import { issue_priority } from './issue-priority'
|
|
16
17
|
import { markdown_section } from './markdown-section'
|
|
17
18
|
|
|
18
19
|
// The decisions behind `josh issue:file`, kept apart from the command that
|
|
19
20
|
// reads the network so each one is a pure answer a test can pin. The filing steps are the command's
|
|
20
21
|
// arguments: a label the filing owes is a required option rather than a line to remember.
|
|
21
22
|
|
|
22
|
-
const DEPTH_PREFIX = 'depth:'
|
|
23
23
|
const ROUTE_PREFIX = 'route:'
|
|
24
24
|
const LIST_SEPARATOR = ','
|
|
25
25
|
const WORD_SEPARATOR = /\s+/u
|
|
@@ -32,11 +32,14 @@ const DIGIT = /\d/u
|
|
|
32
32
|
interface FileArguments {
|
|
33
33
|
title: string
|
|
34
34
|
body_file: string
|
|
35
|
-
depth: string
|
|
36
35
|
route: string | undefined
|
|
37
36
|
labels: ReadonlyArray<string>
|
|
38
37
|
repo: string | undefined
|
|
39
38
|
distinct: ReadonlyArray<number>
|
|
39
|
+
// `--found-during <N>`: the work item the filing came from when it is not the checkout's own — a
|
|
40
|
+
// long lane the parent investigated, the Issue a prerequisite or an observation came out of. The
|
|
41
|
+
// filing cap counts per origin (`issue-file-cap.ts`); absent, the finder is read (`issue-file-fold.ts`).
|
|
42
|
+
found_during: string | undefined
|
|
40
43
|
// `--over-cap`: the run is blocked by this filing, so the WIP cap does not hold it (`issue-wip.ts`).
|
|
41
44
|
is_over_cap: boolean
|
|
42
45
|
// `--no-auto-ok`: the Issue needs a person's judgement, so `auto-ok` is not applied (`issue-auto-ok.ts`).
|
|
@@ -44,22 +47,26 @@ interface FileArguments {
|
|
|
44
47
|
// `--release`: the change reaches a consumer only once published, so the Issue is linked to the
|
|
45
48
|
// repository's release Issue as a blocker (`issue-release-cli.ts`).
|
|
46
49
|
is_release: boolean
|
|
50
|
+
// `--blocks-finder`: an interrupt the finder cannot go on without, so the finder is recorded as
|
|
51
|
+
// blocked by it (`issue-file-interrupt.ts`). An interrupt that blocks nobody omits it (`wip-cap.md`).
|
|
52
|
+
is_blocking_finder: boolean
|
|
47
53
|
}
|
|
48
54
|
|
|
49
55
|
const OPTIONS = {
|
|
50
56
|
'body-file': { type: 'string' },
|
|
51
|
-
depth: { type: 'string' },
|
|
52
57
|
route: { type: 'string' },
|
|
53
58
|
label: { type: 'string', multiple: true },
|
|
54
59
|
repo: { type: 'string' },
|
|
55
60
|
distinct: { type: 'string', multiple: true },
|
|
61
|
+
'found-during': { type: 'string' },
|
|
56
62
|
'over-cap': { type: 'boolean' },
|
|
57
63
|
'no-auto-ok': { type: 'boolean' },
|
|
58
64
|
release: { type: 'boolean' },
|
|
65
|
+
'blocks-finder': { type: 'boolean' },
|
|
59
66
|
} as const
|
|
60
67
|
|
|
61
|
-
// The label a `--
|
|
62
|
-
//
|
|
68
|
+
// The label a `--route` value names, or `undefined` when it names none — read against the route
|
|
69
|
+
// labels `issue-labels.ts` defines, so the command cannot apply a route nobody provisions.
|
|
63
70
|
function label_of(
|
|
64
71
|
prefix: string,
|
|
65
72
|
value: string | undefined,
|
|
@@ -97,18 +104,27 @@ function has_text(value: string | undefined): value is string {
|
|
|
97
104
|
return value !== undefined && value.trim() !== ''
|
|
98
105
|
}
|
|
99
106
|
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
function
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
107
|
+
// `--found-during 3423` or `#3423` → `'3423'`; `undefined` when absent, `false` when it names no single
|
|
108
|
+
// issue number, so a typo is refused rather than counted against no origin.
|
|
109
|
+
function found_during_of(value: string | undefined): string | undefined | false {
|
|
110
|
+
if (value === undefined) return undefined
|
|
111
|
+
const numbers = distinct_numbers([value])
|
|
112
|
+
|
|
113
|
+
return numbers?.length === 1 ? String(numbers[0]) : false
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
type Labelled = Pick<FileArguments, 'route' | 'distinct' | 'found_during'>
|
|
117
|
+
|
|
118
|
+
// The labelled half of the arguments, or `undefined` when a route, `--distinct` or `--found-during`
|
|
119
|
+
// entry is not one the command knows.
|
|
120
|
+
function labelled_of(values: ParsedValues): Labelled | undefined {
|
|
106
121
|
const route = route_of(values)
|
|
107
122
|
const distinct = distinct_numbers(values.distinct ?? [])
|
|
123
|
+
const found_during = found_during_of(values['found-during'])
|
|
108
124
|
|
|
109
|
-
if (route === false ||
|
|
125
|
+
if (route === false || distinct === undefined || found_during === false) return undefined
|
|
110
126
|
|
|
111
|
-
return {
|
|
127
|
+
return { route, distinct, found_during }
|
|
112
128
|
}
|
|
113
129
|
|
|
114
130
|
function arguments_of(values: ParsedValues, title: string | undefined): FileArguments | undefined {
|
|
@@ -126,6 +142,7 @@ function arguments_of(values: ParsedValues, title: string | undefined): FileArgu
|
|
|
126
142
|
is_over_cap: values['over-cap'] === true,
|
|
127
143
|
is_auto_ok_opted_out: values['no-auto-ok'] === true,
|
|
128
144
|
is_release: values.release === true,
|
|
145
|
+
is_blocking_finder: values['blocks-finder'] === true,
|
|
129
146
|
}
|
|
130
147
|
}
|
|
131
148
|
|
|
@@ -144,14 +161,19 @@ function is_undeclared_classification(label: string, body: string): boolean {
|
|
|
144
161
|
return is_classification && !has_label_name(issue_classification.required_labels(body), label)
|
|
145
162
|
}
|
|
146
163
|
|
|
147
|
-
// Every label the filing carries: the
|
|
164
|
+
// Every label the filing carries: the route when there is one, the classification labels
|
|
148
165
|
// the body declares (`issue_classification.labels_for`, which merges case-insensitively), then any
|
|
149
166
|
// extra `--label`, then `auto-ok` when the filing is judged in (`issue-auto-ok.ts`) and no `--label`
|
|
150
|
-
// already named it
|
|
167
|
+
// already named it, `not-before` while the body's start time is ahead (`issue-not-before-label.ts`), and
|
|
168
|
+
// the filed priority's label (the declaration, else its floor) unless a `--label` typed one (`issue-priority.ts`).
|
|
169
|
+
// One request applies them all, so no label is a separate step to forget.
|
|
151
170
|
function labels_of(args: FileArguments, body: string, is_auto_ok = false): ReadonlyArray<string> {
|
|
152
171
|
const extra = args.labels.filter((label) => !is_undeclared_classification(label, body))
|
|
153
|
-
const declared = [
|
|
154
|
-
const labels =
|
|
172
|
+
const declared = [...(args.route === undefined ? [] : [args.route]), ...extra]
|
|
173
|
+
const labels = issue_priority.with_label(
|
|
174
|
+
issue_not_before_label.with_label(issue_classification.labels_for(body, declared), body),
|
|
175
|
+
body,
|
|
176
|
+
)
|
|
155
177
|
|
|
156
178
|
if (!is_auto_ok || has_label_name(labels, AUTO_OK_LABEL)) return labels
|
|
157
179
|
|
|
@@ -168,7 +190,7 @@ function triage_problem(labels: ReadonlyArray<string>): string | undefined {
|
|
|
168
190
|
|
|
169
191
|
if (!is_owed) return undefined
|
|
170
192
|
|
|
171
|
-
return `an \`${AUTO_OK_LABEL}\` filing needs \`--label ${RUN_LANE_LABEL}\` or \`--label ${RUN_SOLO_LABEL}\` — \`${RUN_SOLO_LABEL}\` only for a defect in kit's own verification that makes unrelated PRs answer wrongly on main
|
|
193
|
+
return `an \`${AUTO_OK_LABEL}\` filing needs \`--label ${RUN_LANE_LABEL}\` or \`--label ${RUN_SOLO_LABEL}\` — \`${RUN_SOLO_LABEL}\` only for a defect in kit's own verification that makes unrelated PRs answer wrongly on main on every run (\`backlogrun-lanes.md\`), else \`${RUN_LANE_LABEL}\` — a flaky one takes \`${RUN_LANE_LABEL}\` and \`priority:critical\``
|
|
172
194
|
}
|
|
173
195
|
|
|
174
196
|
function is_same_repository(target: string, current: string): boolean {
|
|
@@ -221,12 +243,27 @@ function unacknowledged(
|
|
|
221
243
|
return candidates.filter((candidate) => !distinct.includes(candidate))
|
|
222
244
|
}
|
|
223
245
|
|
|
246
|
+
// The candidates the filing has already answered: its `--distinct` numbers and, filing into this
|
|
247
|
+
// repository, its `--found-during` origin. The work the finding turned up during is never its duplicate,
|
|
248
|
+
// though a body citing it makes the scout name it (joshuafolkken/kit#4762). The origin is an Issue here,
|
|
249
|
+
// so in another repository the same number is an unrelated Issue the scout may rightly hold.
|
|
250
|
+
function acknowledged(
|
|
251
|
+
args: Pick<FileArguments, 'distinct' | 'found_during'>,
|
|
252
|
+
target: string,
|
|
253
|
+
current: string,
|
|
254
|
+
): ReadonlyArray<number> {
|
|
255
|
+
if (args.found_during === undefined || !is_same_repository(target, current)) return args.distinct
|
|
256
|
+
|
|
257
|
+
return [...args.distinct, Number(args.found_during)]
|
|
258
|
+
}
|
|
259
|
+
|
|
224
260
|
const issue_file = {
|
|
225
261
|
parse,
|
|
226
262
|
labels_of,
|
|
227
263
|
origin_problem,
|
|
228
264
|
triage_problem,
|
|
229
265
|
unacknowledged,
|
|
266
|
+
acknowledged,
|
|
230
267
|
is_same_repository,
|
|
231
268
|
}
|
|
232
269
|
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { git_command } from '#scripts/git/git-command'
|
|
4
1
|
import { path_decision } from '#scripts/josh/path-decision'
|
|
5
2
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
6
3
|
import { split_assess, type SplitVerdict } from '#scripts/split/split-assess'
|
|
4
|
+
import { split_measure } from '#scripts/split/split-measure'
|
|
7
5
|
import { issue_fold, type FoldVerdict } from './issue-fold'
|
|
8
6
|
|
|
9
7
|
// `josh issue:fold "<title>" "<title>" …` — before a run files a second finding, answer whether the
|
|
@@ -15,7 +13,6 @@ import { issue_fold, type FoldVerdict } from './issue-fold'
|
|
|
15
13
|
// `--not-separable` when the findings are really one deliverable. The verdict logic is in
|
|
16
14
|
// `issue-fold.ts`; everything here is the invocation.
|
|
17
15
|
|
|
18
|
-
const ARGV_OFFSET = 2
|
|
19
16
|
const USAGE = 'Usage: josh issue:fold "<title>" "<title>" … [--not-separable] [--json]'
|
|
20
17
|
const JSON_KEY = 'fold'
|
|
21
18
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -58,7 +55,7 @@ function read_arguments(argv: ReadonlyArray<string>): FoldArguments | undefined
|
|
|
58
55
|
// rather than folding on no evidence. `issue:file` asks it too.
|
|
59
56
|
async function size_verdict(): Promise<SplitVerdict | undefined> {
|
|
60
57
|
try {
|
|
61
|
-
const measurement =
|
|
58
|
+
const measurement = await split_measure.read_branch()
|
|
62
59
|
|
|
63
60
|
return measurement.files === 0 ? undefined : measurement.verdict
|
|
64
61
|
} catch {
|
|
@@ -91,12 +88,6 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
91
88
|
return 0
|
|
92
89
|
}
|
|
93
90
|
|
|
94
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
95
|
-
process.exitCode = await run(argv)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
91
|
const issue_fold_cli = { REASONS, read_arguments, size_verdict, run }
|
|
99
92
|
|
|
100
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
101
|
-
|
|
102
93
|
export { issue_fold_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_fold_cli } from './issue-fold-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh issue:fold` entry, kept apart from `issue-fold-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_fold_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
// The workflow label names, defined once. The epic auto-close, the epic validator, the issue-prep
|
|
2
2
|
// labeler and the next-issues display all key on these exact strings, and a drifted copy would
|
|
3
3
|
// fail silently — an epic filtered on the wrong name is simply never closed or never excluded.
|
|
4
|
+
//
|
|
5
|
+
// **A new label is defined here and added to `REPOSITORY_LABELS`**, so `josh start` and `josh sync`
|
|
6
|
+
// create it; a label deliberately not provisioned goes into `EXEMPT_FROM_PROVISIONING` with its
|
|
7
|
+
// reason. Every other module imports the constant rather than spelling the name —
|
|
8
|
+
// `issue-label-scan.test.ts` fails on a `*_LABEL` constant missing from `ALL_LABELS`, on a label name
|
|
9
|
+
// spelled outside this module, and on a label call naming a label `ALL_LABELS` does not hold.
|
|
4
10
|
const EPIC_LABEL = 'epic'
|
|
5
11
|
const BUG_LABEL = 'bug'
|
|
6
12
|
const ENHANCEMENT_LABEL = 'enhancement'
|
|
@@ -15,6 +21,11 @@ const PLANNED_LABEL = 'run:planned'
|
|
|
15
21
|
// it: a parked child is why a run reports "nothing left that time will fix" rather than waiting
|
|
16
22
|
// forever.
|
|
17
23
|
const NEEDS_DECISION_LABEL = 'needs-decision'
|
|
24
|
+
// Parks a child the `backlogrun` driver could not finish mechanically — its session ended unfinished, or
|
|
25
|
+
// its ship hit the relaunch cap. **Not `needs-decision`**: nothing is asked of a person beyond fixing the
|
|
26
|
+
// cause and removing it, so the board and the idle report keep it out of the decisions they list. Parked
|
|
27
|
+
// all the same, so a child failing on one cause is not handed straight back until the cause is fixed.
|
|
28
|
+
const RUN_STALLED_LABEL = 'run:stalled'
|
|
18
29
|
// Marks an issue whose defect reaches the verification path, so it runs with nothing beside it.
|
|
19
30
|
// A run applies it from the verification-path enumeration in `backlogrun-lanes.md`;
|
|
20
31
|
// `backlog:next` enforces it (`backlog-solo.ts`), so the rule no longer rests on a judgement at
|
|
@@ -24,11 +35,15 @@ const RUN_SOLO_LABEL = 'run:solo'
|
|
|
24
35
|
// Without it an issue lacking `run:solo` could mean "judged parallel" or
|
|
25
36
|
// "never judged", and `backlog:next` withholds the second (`epic-triage.ts`).
|
|
26
37
|
const RUN_LANE_LABEL = 'run:lane'
|
|
27
|
-
// Puts an issue at the head of the backlog's ranking
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
38
|
+
// Puts an issue at the head of the backlog's ranking, below `priority:critical`. `issue:file` applies
|
|
39
|
+
// it from the body's priority declaration at its high level (`issue-priority.ts`), a person may apply it by
|
|
40
|
+
// hand, and **only a person removes it**: a run that could clear it could undo the person's ordering.
|
|
41
|
+
// Read by `issue-rank.ts`, the one place the ranking keys are decided.
|
|
31
42
|
const PRIORITY_HIGH_LABEL = 'priority:high'
|
|
43
|
+
// Ranks above `priority:high` — an urgent defect (one of the interrupt-filing conditions) or a lane
|
|
44
|
+
// speed-up worth at least a tenth of a merge's median lane time. Applied from the urgent declaration;
|
|
45
|
+
// it never interrupts a running lane, only takes the next free one. Only a person removes it.
|
|
46
|
+
const PRIORITY_CRITICAL_LABEL = 'priority:critical'
|
|
32
47
|
// Opts one issue outside any epic into unattended execution. **Only a
|
|
33
48
|
// person applies it.** `epicrun #<E>` approves the merges inside `#<E>`; this label is the only way
|
|
34
49
|
// a person extends that approval past the epic's edge, so a label an AI could apply to itself would
|
|
@@ -64,6 +79,13 @@ const NEEDS_HUMAN_REVIEW_LABEL = 'needs-human-review'
|
|
|
64
79
|
// takes it off, because taking it off asserts the work is *not* done, which is the same claim in
|
|
65
80
|
// reverse and is no more a run's to make.
|
|
66
81
|
const ALREADY_DONE_LABEL = 'already-done'
|
|
82
|
+
// The mark of a measurement-only Issue a run closed itself (`josh issue:measured`). No pull request
|
|
83
|
+
// closes such an Issue, so the merge reference a sweep reads is missing; this label is what tells the
|
|
84
|
+
// run's own close from a person's, so every sweep counts it as merged (`issue-merged.ts`).
|
|
85
|
+
const MEASURED_LABEL = 'measured'
|
|
86
|
+
// Rides beside `measured` when the measurement fell short of the expected effect it checked
|
|
87
|
+
// (`josh issue:measured --unmet`); `josh effect:audit` reads it as the mechanism to retire or shrink.
|
|
88
|
+
const MEASURED_UNMET_LABEL = 'measured:unmet'
|
|
67
89
|
// Marks the Issue that tracks a repository's next release. An Issue whose
|
|
68
90
|
// change reaches a consumer only once published is linked to it as a `blocked_by` blocker
|
|
69
91
|
// (`josh issue:release`), so "merged but not yet released" is visible in the backlog. A run applies
|
|
@@ -71,16 +93,28 @@ const ALREADY_DONE_LABEL = 'already-done'
|
|
|
71
93
|
// and only a person opts it into unattended execution.
|
|
72
94
|
const RELEASE_LABEL = 'release'
|
|
73
95
|
// A person's mark for work set aside for now; `issue-auto-ok.ts` reads it as an exclusion. Applied by
|
|
74
|
-
// hand
|
|
96
|
+
// hand, so it is provisioned: a person cannot apply a label the repository does not have.
|
|
75
97
|
const DEFERRED_LABEL = 'deferred'
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
|
|
98
|
+
// A copy of the body's start-time declaration while that time is still ahead (`issue-not-before.ts`), so a
|
|
99
|
+
// listing tells an issue that waits on the clock from one that can start. The body stays the source:
|
|
100
|
+
// `issue-not-before-label.ts` applies and removes it. Only `run:merge` reads it as a reason to wait,
|
|
101
|
+
// and only where the body itself could not be read (`run-merge-steps.ts`).
|
|
102
|
+
const NOT_BEFORE_LABEL = 'not-before'
|
|
103
|
+
|
|
104
|
+
// The labels that park an open issue: a run never starts or restarts it, and only a person lifts
|
|
105
|
+
// them — `needs-decision` waits for an answer, `run:stalled` for a mechanical cause to be fixed, and
|
|
106
|
+
// `already-done` for the close. The run that applied any of them committed nothing, so the checkout
|
|
107
|
+
// is clean. Held once because the merge, the board, the pool, the classification and the liveness
|
|
108
|
+
// read all ask "is this child parked", and a copy that missed a label would answer differently.
|
|
109
|
+
const PARKED_LABELS: ReadonlySet<string> = new Set([
|
|
110
|
+
NEEDS_DECISION_LABEL,
|
|
111
|
+
RUN_STALLED_LABEL,
|
|
112
|
+
ALREADY_DONE_LABEL,
|
|
113
|
+
])
|
|
79
114
|
|
|
80
|
-
// The
|
|
115
|
+
// The labels that mean an open issue must not be handed to a run as it stands: an `epic`
|
|
81
116
|
// tracks a batch and is never run directly (its children are), `in-progress` is already claimed by
|
|
82
|
-
// a running workflow, `
|
|
83
|
-
// person, and `already-done` names work that is already merged. Held here rather than in either
|
|
117
|
+
// a running workflow, and a parked issue (`PARKED_LABELS`) waits on a person. Held here rather than in either
|
|
84
118
|
// caller because both the next-issues display and the `auto-ok` pickup ask the same question, and
|
|
85
119
|
// two copies would answer it differently the first time one of them gained another label.
|
|
86
120
|
//
|
|
@@ -91,8 +125,7 @@ const REVIEW_ROUND2_SKIPPED_LABEL = 'review-round2-skipped'
|
|
|
91
125
|
const NOT_DIRECTLY_RUNNABLE_LABELS: ReadonlySet<string> = new Set([
|
|
92
126
|
EPIC_LABEL,
|
|
93
127
|
IN_PROGRESS_LABEL,
|
|
94
|
-
|
|
95
|
-
ALREADY_DONE_LABEL,
|
|
128
|
+
...PARKED_LABELS,
|
|
96
129
|
])
|
|
97
130
|
|
|
98
131
|
// Filing-route labels, applied at filing time so the backlog's composition — a review-cap
|
|
@@ -149,61 +182,6 @@ const FILING_ROUTE_LABELS: ReadonlyArray<{
|
|
|
149
182
|
},
|
|
150
183
|
]
|
|
151
184
|
|
|
152
|
-
// The depth of an issue's subject, recorded as a label at filing time.
|
|
153
|
-
//
|
|
154
|
-
// **The definition is not here.** `.claude/skills/workflow-commands/observation-filing.md` → "The depth test",
|
|
155
|
-
// is the single source: depth 0 is what a consumer of this package touches, depth 1 the run
|
|
156
|
-
// orchestration that executes an Issue, depth 2 what measures a run. These constants are the
|
|
157
|
-
// recording of that table, never a second copy of it — a label whose description restated the rule
|
|
158
|
-
// would be the clone `CLAUDE.md` prohibits, and the descriptions below therefore name the section
|
|
159
|
-
// rather than paraphrase it.
|
|
160
|
-
//
|
|
161
|
-
// **Why a label at all.** The share of open issues at depth 0 is a measured target, and without a
|
|
162
|
-
// recorded depth it could only be obtained by reading every open issue's body by hand — hand counts
|
|
163
|
-
// disagree on the denominator and are not comparable, which is the failure a recorded label removes.
|
|
164
|
-
//
|
|
165
|
-
// **The depth is read off the subject, so a run applies it.** Unlike `auto-ok` and
|
|
166
|
-
// `needs-human-review` this is not a person's judgement about authorization; it is the same reading
|
|
167
|
-
// `observation-filing.md` already asks a run to make before it files, and none of the three withholds or widens anything
|
|
168
|
-
// a run may do.
|
|
169
|
-
const DEPTH_0_LABEL = 'depth:0'
|
|
170
|
-
const DEPTH_1_LABEL = 'depth:1'
|
|
171
|
-
const DEPTH_2_LABEL = 'depth:2'
|
|
172
|
-
|
|
173
|
-
// Ordered shallowest first, which is what makes `depth_label_of` deterministic: an issue carrying
|
|
174
|
-
// more than one depth label counts as the **lowest** depth present, the one closest to the consumer.
|
|
175
|
-
// Without a fixed tie-break the same listing measured twice could answer differently.
|
|
176
|
-
const DEPTH_LABEL_ORDER: ReadonlyArray<string> = [DEPTH_0_LABEL, DEPTH_1_LABEL, DEPTH_2_LABEL]
|
|
177
|
-
|
|
178
|
-
// The metadata `gh api ... labels` needs, in the shape `FILING_ROUTE_LABELS` above uses and for the
|
|
179
|
-
// same reason: applying a label at issue-creation auto-creates it with a generated color and no
|
|
180
|
-
// description, so provisioning from here is what gives each one a stable color a reader can scan by.
|
|
181
|
-
// Green, amber and pale blue, so the consumer-facing depth is the one that stands out in a listing.
|
|
182
|
-
//
|
|
183
|
-
// **`josh issue:file` provisions them** through `repository_labels.ensure_labels` before its create
|
|
184
|
-
// call, so no document carries a creation command to keep in step.
|
|
185
|
-
const DEPTH_LABELS: ReadonlyArray<{
|
|
186
|
-
name: string
|
|
187
|
-
color: string
|
|
188
|
-
description: string
|
|
189
|
-
}> = [
|
|
190
|
-
{
|
|
191
|
-
name: DEPTH_0_LABEL,
|
|
192
|
-
color: '0e8a16',
|
|
193
|
-
description: 'Depth 0 — what a consumer of this package touches (observation-filing.md)',
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
name: DEPTH_1_LABEL,
|
|
197
|
-
color: 'fbc02d',
|
|
198
|
-
description: 'Depth 1 — the run orchestration that executes an Issue (observation-filing.md)',
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
name: DEPTH_2_LABEL,
|
|
202
|
-
color: 'c5def5',
|
|
203
|
-
description: 'Depth 2 — what measures a run (observation-filing.md)',
|
|
204
|
-
},
|
|
205
|
-
]
|
|
206
|
-
|
|
207
185
|
interface LabelDefinition {
|
|
208
186
|
name: string
|
|
209
187
|
color: string
|
|
@@ -234,6 +212,11 @@ const WORKFLOW_LABELS: ReadonlyArray<LabelDefinition> = [
|
|
|
234
212
|
color: '0e8a16',
|
|
235
213
|
description: 'Judged safe to run beside others in a backlogrun',
|
|
236
214
|
},
|
|
215
|
+
{
|
|
216
|
+
name: PRIORITY_CRITICAL_LABEL,
|
|
217
|
+
color: 'b60205',
|
|
218
|
+
description: 'Offered before priority:high in a backlogrun; only a person removes it',
|
|
219
|
+
},
|
|
237
220
|
{
|
|
238
221
|
name: PRIORITY_HIGH_LABEL,
|
|
239
222
|
color: 'e99695',
|
|
@@ -254,6 +237,12 @@ const WORKFLOW_LABELS: ReadonlyArray<LabelDefinition> = [
|
|
|
254
237
|
color: 'd93f0b',
|
|
255
238
|
description: 'Parked: needs a decision before it can run',
|
|
256
239
|
},
|
|
240
|
+
{
|
|
241
|
+
name: RUN_STALLED_LABEL,
|
|
242
|
+
color: 'e99d42',
|
|
243
|
+
description:
|
|
244
|
+
'Parked: the driver could not finish it mechanically — no decision; fix the cause and remove',
|
|
245
|
+
},
|
|
257
246
|
{
|
|
258
247
|
name: NEEDS_HUMAN_REVIEW_LABEL,
|
|
259
248
|
color: 'd93f0b',
|
|
@@ -265,13 +254,28 @@ const WORKFLOW_LABELS: ReadonlyArray<LabelDefinition> = [
|
|
|
265
254
|
description: 'Verified already merged — a person closes it',
|
|
266
255
|
},
|
|
267
256
|
{
|
|
268
|
-
name:
|
|
269
|
-
color: '
|
|
270
|
-
description: '
|
|
257
|
+
name: MEASURED_LABEL,
|
|
258
|
+
color: '6f42c1',
|
|
259
|
+
description: 'Measurement-only — a run recorded the result and closed it',
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
name: MEASURED_UNMET_LABEL,
|
|
263
|
+
color: '6f42c1',
|
|
264
|
+
description:
|
|
265
|
+
'The measurement fell short of the expected effect — retire or shrink the mechanism',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
name: DEFERRED_LABEL,
|
|
269
|
+
color: 'd4c5f9',
|
|
270
|
+
description: 'Set aside for now; never opted in to unattended execution',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
name: NOT_BEFORE_LABEL,
|
|
274
|
+
color: 'bfd4f2',
|
|
275
|
+
description: "Waiting: the body's 実施可能日 has not arrived yet",
|
|
271
276
|
},
|
|
272
277
|
{ name: BUG_LABEL, color: 'd73a4a', description: "Something isn't working" },
|
|
273
278
|
...FILING_ROUTE_LABELS,
|
|
274
|
-
...DEPTH_LABELS,
|
|
275
279
|
]
|
|
276
280
|
|
|
277
281
|
// The pull request release classifications `pr-classification.yml` requires exactly one of.
|
|
@@ -350,13 +354,14 @@ function has_label_name(labels: ReadonlyArray<string>, wanted: string): boolean
|
|
|
350
354
|
return label_name_of(labels, wanted) !== undefined
|
|
351
355
|
}
|
|
352
356
|
|
|
353
|
-
// The
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const names = new Set((labels ?? []).map((label) => label.name.toLowerCase()))
|
|
357
|
+
// The park label (`PARKED_LABELS`) label names carry, compared as `has_label_name` does.
|
|
358
|
+
function parked_label_of(labels: ReadonlyArray<string>): string | undefined {
|
|
359
|
+
return [...PARKED_LABELS].find((label) => has_label_name(labels, label))
|
|
360
|
+
}
|
|
358
361
|
|
|
359
|
-
|
|
362
|
+
// Whether label names carry any park label (`PARKED_LABELS`).
|
|
363
|
+
function has_parked_label(labels: ReadonlyArray<string>): boolean {
|
|
364
|
+
return parked_label_of(labels) !== undefined
|
|
360
365
|
}
|
|
361
366
|
|
|
362
367
|
// Every workflow label this package manages. The label-reference scan
|
|
@@ -372,21 +377,23 @@ const ALL_LABELS: ReadonlySet<string> = new Set([
|
|
|
372
377
|
IN_PROGRESS_LABEL,
|
|
373
378
|
PLANNED_LABEL,
|
|
374
379
|
NEEDS_DECISION_LABEL,
|
|
380
|
+
RUN_STALLED_LABEL,
|
|
375
381
|
AUTO_OK_LABEL,
|
|
376
382
|
NEEDS_HUMAN_REVIEW_LABEL,
|
|
377
383
|
ALREADY_DONE_LABEL,
|
|
384
|
+
MEASURED_LABEL,
|
|
385
|
+
MEASURED_UNMET_LABEL,
|
|
386
|
+
DEFERRED_LABEL,
|
|
387
|
+
PRIORITY_CRITICAL_LABEL,
|
|
378
388
|
PRIORITY_HIGH_LABEL,
|
|
379
389
|
RELEASE_LABEL,
|
|
390
|
+
NOT_BEFORE_LABEL,
|
|
380
391
|
INTERRUPT_ROUTE_LABEL,
|
|
381
392
|
REVIEW_CAP_ROUTE_LABEL,
|
|
382
|
-
REVIEW_ROUND2_SKIPPED_LABEL,
|
|
383
393
|
RUN_LANE_LABEL,
|
|
384
394
|
RUN_SOLO_LABEL,
|
|
385
395
|
SPLIT_ROUTE_LABEL,
|
|
386
396
|
TIER_A_ROUTE_LABEL,
|
|
387
|
-
DEPTH_0_LABEL,
|
|
388
|
-
DEPTH_1_LABEL,
|
|
389
|
-
DEPTH_2_LABEL,
|
|
390
397
|
BUGFIX_LABEL,
|
|
391
398
|
OTHER_CHANGE_LABEL,
|
|
392
399
|
IGNORE_FOR_RELEASE_LABEL,
|
|
@@ -406,36 +413,37 @@ export {
|
|
|
406
413
|
BUGFIX_LABEL,
|
|
407
414
|
BREAKING_CHANGE_LABEL,
|
|
408
415
|
DEFERRED_LABEL,
|
|
409
|
-
depth_label_of,
|
|
410
|
-
DEPTH_0_LABEL,
|
|
411
|
-
DEPTH_1_LABEL,
|
|
412
|
-
DEPTH_2_LABEL,
|
|
413
|
-
DEPTH_LABEL_ORDER,
|
|
414
|
-
DEPTH_LABELS,
|
|
415
416
|
ENHANCEMENT_LABEL,
|
|
416
417
|
EPIC_LABEL,
|
|
417
418
|
EXEMPT_FROM_PROVISIONING,
|
|
418
419
|
FILING_ROUTE_LABELS,
|
|
419
420
|
has_any_label,
|
|
420
421
|
has_label_name,
|
|
422
|
+
has_parked_label,
|
|
421
423
|
IGNORE_FOR_RELEASE_LABEL,
|
|
422
424
|
IN_PROGRESS_LABEL,
|
|
423
425
|
INTERRUPT_ROUTE_LABEL,
|
|
424
426
|
label_name_of,
|
|
427
|
+
MEASURED_LABEL,
|
|
428
|
+
MEASURED_UNMET_LABEL,
|
|
425
429
|
NEEDS_DECISION_LABEL,
|
|
426
430
|
NEEDS_HUMAN_REVIEW_LABEL,
|
|
431
|
+
NOT_BEFORE_LABEL,
|
|
427
432
|
NOT_DIRECTLY_RUNNABLE_LABELS,
|
|
428
433
|
OTHER_CHANGE_LABEL,
|
|
434
|
+
parked_label_of,
|
|
435
|
+
PARKED_LABELS,
|
|
429
436
|
PLANNED_LABEL,
|
|
437
|
+
PRIORITY_CRITICAL_LABEL,
|
|
430
438
|
PRIORITY_HIGH_LABEL,
|
|
431
439
|
RELEASE_CLASSIFICATION_LABELS,
|
|
432
440
|
RELEASE_CLASSIFICATION_NAMES,
|
|
433
441
|
RELEASE_LABEL,
|
|
434
442
|
REPOSITORY_LABELS,
|
|
435
443
|
REVIEW_CAP_ROUTE_LABEL,
|
|
436
|
-
REVIEW_ROUND2_SKIPPED_LABEL,
|
|
437
444
|
RUN_LANE_LABEL,
|
|
438
445
|
RUN_SOLO_LABEL,
|
|
446
|
+
RUN_STALLED_LABEL,
|
|
439
447
|
SPLIT_ROUTE_LABEL,
|
|
440
448
|
TIER_A_ROUTE_LABEL,
|
|
441
449
|
WORKFLOW_LABELS,
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
1
|
import { readFile } from 'node:fs/promises'
|
|
3
|
-
import {
|
|
2
|
+
import { aggregation_split } from './aggregation-split'
|
|
4
3
|
import { behavior_change_lint } from './behavior-change-lint'
|
|
5
4
|
import { expected_effect_lint } from './expected-effect-lint'
|
|
6
5
|
import { issue_classification } from './issue-classification'
|
|
7
6
|
import { issue_lint } from './issue-lint'
|
|
7
|
+
import { issue_not_before } from './issue-not-before'
|
|
8
|
+
import { issue_priority } from './issue-priority'
|
|
9
|
+
import { issue_template_section } from './issue-template-section'
|
|
10
|
+
import { measure_declaration } from './measure-declaration'
|
|
11
|
+
import { size_estimate } from './size-estimate'
|
|
8
12
|
|
|
9
13
|
// `josh issue:lint <path>` — read an Issue body from a file and print `ok`, or every template problem
|
|
10
14
|
// one per line, exiting non-zero. It reads a path rather than stdin so it can
|
|
11
15
|
// lint a body written to a file before the `gh api … issues` call that files it. A body that declares
|
|
12
16
|
// itself a behavior-change Issue is additionally held to the firing-point, baseline and reproduction
|
|
13
|
-
// rules, and one that declares a run-time-shortening aim to the expected-effect estimate.
|
|
17
|
+
// rules, and one that declares a run-time-shortening aim to the expected-effect estimate. Every
|
|
18
|
+
// non-epic body declares its size estimate; the guide it is judged against is `issue:file`'s check.
|
|
14
19
|
|
|
15
20
|
const SUCCESS_EXIT_CODE = 0
|
|
16
21
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -18,17 +23,37 @@ const OK_MESSAGE = 'ok'
|
|
|
18
23
|
const NO_LABELS = 'none'
|
|
19
24
|
const USAGE = 'Usage: josh issue:lint <path-to-issue-body>'
|
|
20
25
|
|
|
26
|
+
const MISSING_HEADING_PREFIX = 'missing heading: '
|
|
27
|
+
|
|
28
|
+
// A missing-heading problem followed by that section of the template, so the filer pastes it in rather
|
|
29
|
+
// than reopening `issue-template.md`; any other problem, or a heading the template lacks, is unchanged.
|
|
30
|
+
function with_template(problem: string): string {
|
|
31
|
+
if (!problem.startsWith(MISSING_HEADING_PREFIX)) return problem
|
|
32
|
+
const template = issue_template_section.section(problem.slice(MISSING_HEADING_PREFIX.length))
|
|
33
|
+
|
|
34
|
+
return template === undefined ? problem : `${problem}\n${template}`
|
|
35
|
+
}
|
|
36
|
+
|
|
21
37
|
// Every problem a body has: the four base template headings it lacks, then the behavior-change and
|
|
22
38
|
// expected-effect problems (each empty for an Issue that does not declare itself one).
|
|
23
39
|
function problems(body: string): ReadonlyArray<string> {
|
|
24
|
-
const missing = issue_lint
|
|
40
|
+
const missing = issue_lint
|
|
41
|
+
.missing_headings(body)
|
|
42
|
+
.map((heading) => `${MISSING_HEADING_PREFIX}${heading}`)
|
|
25
43
|
|
|
26
44
|
return [
|
|
27
45
|
...missing,
|
|
28
46
|
...behavior_change_lint.problems(body),
|
|
29
47
|
...expected_effect_lint.problems(body),
|
|
30
48
|
...issue_classification.problems(body),
|
|
49
|
+
...issue_not_before.problems(body),
|
|
50
|
+
...measure_declaration.problems(body),
|
|
51
|
+
...size_estimate.problems(body),
|
|
52
|
+
...aggregation_split.problems(body),
|
|
53
|
+
issue_priority.order_problem(body),
|
|
31
54
|
]
|
|
55
|
+
.filter((problem) => problem !== undefined)
|
|
56
|
+
.map((problem) => with_template(problem))
|
|
32
57
|
}
|
|
33
58
|
|
|
34
59
|
function report(found: ReadonlyArray<string>, body: string): number {
|
|
@@ -56,14 +81,6 @@ async function run(body_path: string | undefined): Promise<number> {
|
|
|
56
81
|
return report(problems(body), body)
|
|
57
82
|
}
|
|
58
83
|
|
|
59
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
60
|
-
process.exitCode = await run(argv[0])
|
|
61
|
-
}
|
|
62
|
-
|
|
63
84
|
const issue_lint_cli = { problems, run }
|
|
64
85
|
|
|
65
|
-
const ARGV_OFFSET = 2
|
|
66
|
-
|
|
67
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
68
|
-
|
|
69
86
|
export { issue_lint_cli }
|