@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,165 @@
|
|
|
1
|
+
// The exported names a diff edits, read from one file's `git diff -U0` and its new text
|
|
2
|
+
// (joshuafolkken/kit#4515). Pure: `review-untouched-readers.ts` reads the diff and searches each name.
|
|
3
|
+
//
|
|
4
|
+
// **A name is edited when a changed line falls inside its top-level declaration** — from the
|
|
5
|
+
// declaration's first line to the line before the next one. Only a name another module can reach is
|
|
6
|
+
// returned, spelled the way a reader writes it: a direct export as itself, a member of an exported
|
|
7
|
+
// namespace object (`export { issue_merged }`) as `issue_merged.read_merged`. The namespace object
|
|
8
|
+
// itself is skipped — a member added to it changes none of its readers.
|
|
9
|
+
//
|
|
10
|
+
// `declarations` and `exported_names` are also read by `prose-stale-scan.ts` over a diff's removed lines.
|
|
11
|
+
|
|
12
|
+
const HUNK_HEADER = /^@@ -\d+(?:,\d+)? \+(?<start>\d+)(?:,(?<count>\d+))? @@/u
|
|
13
|
+
const DECLARATION =
|
|
14
|
+
/^(?:export\s+)?(?:async\s+)?(?:function\*?|const|let|class|type|interface|enum)\s+(?<name>\w+)/u
|
|
15
|
+
const EXPORT_LIST = /^export\s+(?:type\s+)?\{(?<names>[^}]*)\}/gmu
|
|
16
|
+
const IDENTIFIER = /^(?:type\s+)?(?<name>\w+)/u
|
|
17
|
+
const DIRECT_EXPORT = /^export\s/u
|
|
18
|
+
const LIST_SEPARATOR = ','
|
|
19
|
+
// A blank line or a comment line — `//`, `/*`, or a block comment's ` *` continuation.
|
|
20
|
+
const PREAMBLE = /^(?:\s*$|\s*\/[/*]|\s+\*)/u
|
|
21
|
+
// From a 1-based line number to the index of the line above it.
|
|
22
|
+
const TWO = 2
|
|
23
|
+
|
|
24
|
+
interface Declaration {
|
|
25
|
+
name: string
|
|
26
|
+
line: number
|
|
27
|
+
is_exported: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface Edited {
|
|
31
|
+
// The spelling a reader uses — `name` or `namespace.member`.
|
|
32
|
+
target: string
|
|
33
|
+
line: number
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function to_range(start: number, count: number): Array<number> {
|
|
37
|
+
return Array.from({ length: count }, (_unused, offset) => start + offset)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// A pure deletion (`+c,0`) is placed on the line before it, which still lies inside the declaration
|
|
41
|
+
// it was cut from.
|
|
42
|
+
function hunk_lines(header: string): Array<number> {
|
|
43
|
+
const groups = HUNK_HEADER.exec(header)?.groups
|
|
44
|
+
|
|
45
|
+
if (groups === undefined) return []
|
|
46
|
+
|
|
47
|
+
const start = Number(groups['start'])
|
|
48
|
+
const count = groups['count'] === undefined ? 1 : Number(groups['count'])
|
|
49
|
+
|
|
50
|
+
return count === 0 ? [start] : to_range(start, count)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function changed_lines(diff: string): Array<number> {
|
|
54
|
+
return diff.split('\n').flatMap((line) => hunk_lines(line))
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function to_declaration(text: string, index: number): Declaration | undefined {
|
|
58
|
+
const name = DECLARATION.exec(text)?.groups?.['name']
|
|
59
|
+
|
|
60
|
+
if (name === undefined) return undefined
|
|
61
|
+
|
|
62
|
+
return { name, line: index + 1, is_exported: DIRECT_EXPORT.test(text) }
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function declarations(source: string): Array<Declaration> {
|
|
66
|
+
const found = source.split('\n').map((text, index) => to_declaration(text, index))
|
|
67
|
+
|
|
68
|
+
return found.filter((entry): entry is Declaration => entry !== undefined)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function first_identifier(entry: string): string | undefined {
|
|
72
|
+
return IDENTIFIER.exec(entry.trim())?.groups?.['name']
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function list_names(list: string): Array<string> {
|
|
76
|
+
const names = list.split(LIST_SEPARATOR).map((entry) => first_identifier(entry))
|
|
77
|
+
|
|
78
|
+
return names.filter((name): name is string => name !== undefined)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function exported_names(source: string): Set<string> {
|
|
82
|
+
const lists = [...source.matchAll(EXPORT_LIST)].map((match) => match.groups?.['names'] ?? '')
|
|
83
|
+
|
|
84
|
+
return new Set(lists.flatMap((list) => list_names(list)))
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// The members of `const <name> = { … }`, or `undefined` where `name` is not an object literal. `name`
|
|
88
|
+
// is a `\w+` match, so it carries no pattern syntax.
|
|
89
|
+
function namespace_members(source: string, name: string): Array<string> | undefined {
|
|
90
|
+
const literal = new RegExp(String.raw`^const\s+${name}\s*=\s*\{(?<body>[^}]*)\}`, 'mu')
|
|
91
|
+
const body = literal.exec(source)?.groups?.['body']
|
|
92
|
+
|
|
93
|
+
return body === undefined ? undefined : list_names(body)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function namespaces(source: string, exported: ReadonlySet<string>): Map<string, Array<string>> {
|
|
97
|
+
const entries = [...exported].map((name) => [name, namespace_members(source, name)] as const)
|
|
98
|
+
|
|
99
|
+
return new Map(
|
|
100
|
+
entries.filter((entry): entry is [string, Array<string>] => entry[1] !== undefined),
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// The line after a declaration's own text: the next declaration's line, moved back past the blank and
|
|
105
|
+
// comment lines that introduce it — a comment edited above `b` edits `b`, not the `a` before it.
|
|
106
|
+
function range_end(texts: ReadonlyArray<string>, next: number | undefined): number {
|
|
107
|
+
if (next === undefined) return Infinity
|
|
108
|
+
|
|
109
|
+
let end = next
|
|
110
|
+
|
|
111
|
+
while (end > 1 && PREAMBLE.test(texts[end - TWO] ?? '')) end -= 1
|
|
112
|
+
|
|
113
|
+
return end
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function touched(source: string, lines: ReadonlySet<number>): Array<Declaration> {
|
|
117
|
+
const found = declarations(source)
|
|
118
|
+
const texts = source.split('\n')
|
|
119
|
+
|
|
120
|
+
return found.filter((declaration, index) => {
|
|
121
|
+
const end = range_end(texts, found[index + 1]?.line)
|
|
122
|
+
|
|
123
|
+
return [...lines].some((line) => line >= declaration.line && line < end)
|
|
124
|
+
})
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function namespace_of(
|
|
128
|
+
name: string,
|
|
129
|
+
spaces: ReadonlyMap<string, ReadonlyArray<string>>,
|
|
130
|
+
): string | undefined {
|
|
131
|
+
return [...spaces].find(([, members]) => members.includes(name))?.[0]
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
interface ExportView {
|
|
135
|
+
exported: ReadonlySet<string>
|
|
136
|
+
spaces: ReadonlyMap<string, ReadonlyArray<string>>
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function target_of(declaration: Declaration, view: ExportView): string | undefined {
|
|
140
|
+
const { name } = declaration
|
|
141
|
+
|
|
142
|
+
if (view.spaces.has(name)) return undefined
|
|
143
|
+
if (declaration.is_exported || view.exported.has(name)) return name
|
|
144
|
+
|
|
145
|
+
const space = namespace_of(name, view.spaces)
|
|
146
|
+
|
|
147
|
+
return space === undefined ? undefined : `${space}.${name}`
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function edited(source: string, diff: string): Array<Edited> {
|
|
151
|
+
const exported = exported_names(source)
|
|
152
|
+
const view = { exported, spaces: namespaces(source, exported) }
|
|
153
|
+
const edited_declarations = touched(source, new Set(changed_lines(diff)))
|
|
154
|
+
const found_targets = edited_declarations.map((declaration) => ({
|
|
155
|
+
target: target_of(declaration, view),
|
|
156
|
+
line: declaration.line,
|
|
157
|
+
}))
|
|
158
|
+
|
|
159
|
+
return found_targets.filter((entry): entry is Edited => entry.target !== undefined)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const review_readers_scan = { changed_lines, declarations, edited, exported_names }
|
|
163
|
+
|
|
164
|
+
export type { Declaration, Edited }
|
|
165
|
+
export { review_readers_scan }
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
4
1
|
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
2
|
+
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
5
3
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
6
4
|
import { observation_ledger_home } from '#scripts/observations/observation-ledger-home'
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import type { StopFinding } from '#scripts/run/ship/run-ship-review'
|
|
6
|
+
import { review_comment_carry } from './review-comment-carry'
|
|
7
|
+
import { review_finding_ledger, type Finding, type LineKind } from './review-finding-ledger'
|
|
8
|
+
import { review_finding_text } from './review-finding-text'
|
|
9
|
+
import { review_interaction } from './review-interaction'
|
|
10
|
+
import { review_lane_handover } from './review-lane-handover'
|
|
9
11
|
import { review_record, type RecordVerdict } from './review-record'
|
|
12
|
+
import { review_record_code_round } from './review-record-code-round'
|
|
13
|
+
import { review_record_comment } from './review-record-comment'
|
|
14
|
+
import { review_record_interaction } from './review-record-interaction'
|
|
15
|
+
import type { ReuseAnswer } from './review-round-reuse'
|
|
16
|
+
import { review_stop_log } from './review-stop-log'
|
|
10
17
|
|
|
11
18
|
// `josh review:record --issue <N> [<category>:<severity>:<file> ...]` — the one write path for a
|
|
12
|
-
// `/code-review` round's findings. It appends a `- rf:` line per finding to
|
|
19
|
+
// `/code-review` round's findings. It appends a `- rb:` round boundary and a `- rf:` line per finding to
|
|
13
20
|
// the issue's own file of the observation ledger, which the run's commit carries like any other
|
|
14
|
-
// ledger change. **A call with no findings is a zero-finding round, and it still writes one line** — so the
|
|
21
|
+
// ledger change. **A call with no findings is a zero-finding round, and it still writes one `- rf:` line** — so the
|
|
15
22
|
// round that found nothing is recorded rather than mistaken for a round nobody reviewed.
|
|
16
23
|
//
|
|
17
24
|
// **`--comment` records a round that ran after the pull request opened**: the same lines go to the
|
|
@@ -22,25 +29,55 @@ import { review_record, type RecordVerdict } from './review-record'
|
|
|
22
29
|
//
|
|
23
30
|
// `josh review:record --check --issue <N>` is the read half `pnpm josh followup` runs before it
|
|
24
31
|
// merges: `ok` / `not-required` exit zero, `missing` exits non-zero so the
|
|
25
|
-
// merge is refused until the round is recorded. It mirrors `josh review:attest --check`.
|
|
32
|
+
// merge is refused until the round is recorded. It mirrors `josh review:attest --check`. A recorded
|
|
33
|
+
// code round adds whether the ship reuses it (`review-round-reuse.ts`); the exit code does not change.
|
|
34
|
+
//
|
|
35
|
+
// **`--interaction` records and checks the interaction review's pass instead** (`review-interaction.ts`):
|
|
36
|
+
// the same grammar under `- ri:`. It takes no `--comment` — the pass runs before the pull request, and
|
|
37
|
+
// a pass kept only on the issue would leave the merge gate reading it as missing.
|
|
38
|
+
//
|
|
39
|
+
// **A finding written with its reason — `<spec> — <sentence>` — also lands in the durable stop log**,
|
|
40
|
+
// marked fixed (joshuafolkken/kit#4817). The ledger keeps the spec alone, as it always has; the stop
|
|
41
|
+
// log is the one record that keeps a finding's location and reason, so a lane's own round reaches the
|
|
42
|
+
// next stop's fix and the next review (`review-prior-findings.ts`) the way a ship's round already does.
|
|
26
43
|
|
|
27
|
-
const ARGV_OFFSET = 2
|
|
28
44
|
const FAILURE_EXIT_CODE = 1
|
|
29
45
|
const USAGE =
|
|
30
|
-
'Usage: josh review:record --issue <N> [--comment] [<category>:<severity>:<file> ...] | josh review:record --check --issue <N>'
|
|
46
|
+
'Usage: josh review:record --issue <N> [--comment | --interaction] [[<disposition> ]<category>:<severity>:<file>[ — <reason>] ...] | josh review:record --check [--interaction] --issue <N>'
|
|
31
47
|
const FILE_HINT = ' <file>: the cited path, optionally with :line'
|
|
32
|
-
const
|
|
48
|
+
const DISPOSITION_HINT =
|
|
49
|
+
' <disposition>: optional — fixed | false-positive | filed:#<M> | deferred:#<M>; josh review:round2 skips only when every High/Medium is fixed or false-positive'
|
|
50
|
+
const REASON_HINT =
|
|
51
|
+
' <reason>: optional, one sentence on what was wrong, kept for the lane’s next review and fix — pass each finding with its reason as one single-quoted argument'
|
|
52
|
+
const RECORD_STAGE = 'review:record'
|
|
53
|
+
const CHECK_USAGE = 'Usage: josh review:record --check [--interaction] --issue <N>'
|
|
33
54
|
const RECORDED_LINE = 'Recorded: the review round for this issue is in the ledger.'
|
|
55
|
+
const REUSED_LINE =
|
|
56
|
+
'Reused: josh ship takes this round as its round 1 — the files this round covers hold still since the record. A default branch the ship’s sync merges in moves them only where it changed a file this round covers, and the ship then reviews round 1 again itself.'
|
|
57
|
+
const DELTA_LINE =
|
|
58
|
+
'Reused, delta to round 2: josh ship takes this round as its round 1 and does not review it again — every file moved since the record is one round 2 reads after the commit, or the ship’s own round 1 stopped on it.'
|
|
59
|
+
|
|
60
|
+
// The condition that re-runs round 1, and the path that met it, named rather than listed among every
|
|
61
|
+
// condition that could (joshuafolkken/kit#4941).
|
|
62
|
+
function review_again_line(cause = 'the reuse question gave no reason'): string {
|
|
63
|
+
return `Not reused: josh ship reviews round 1 again — ${cause}. Run \`pnpm josh run:review\` and the round-1 \`/code-review\` here (chain-rule.md step 0).`
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function reuse_line(answer: ReuseAnswer): string {
|
|
67
|
+
if (answer.reuse === 'again') return review_again_line(answer.cause)
|
|
68
|
+
|
|
69
|
+
return answer.reuse === 'delta' ? DELTA_LINE : REUSED_LINE
|
|
70
|
+
}
|
|
71
|
+
|
|
34
72
|
const NOT_REQUIRED_LINE =
|
|
35
73
|
'No review-finding ledger is kept in this checkout, so there is nothing to check.'
|
|
36
|
-
const
|
|
37
|
-
'
|
|
38
|
-
const CARRY_FAILED_LINE =
|
|
39
|
-
'Could not carry the closed issues’ comment rounds into the ledger; the next round retries:'
|
|
74
|
+
const LANE_CARRY_LINE =
|
|
75
|
+
'Not carrying the closed issues’ comment rounds: a lane child leaves them to `pnpm josh observations:flush`.'
|
|
40
76
|
const OPTIONS = {
|
|
41
77
|
issue: { type: 'string' },
|
|
42
78
|
check: { type: 'boolean' },
|
|
43
79
|
comment: { type: 'boolean' },
|
|
80
|
+
interaction: { type: 'boolean' },
|
|
44
81
|
} as const
|
|
45
82
|
|
|
46
83
|
interface Request {
|
|
@@ -51,6 +88,7 @@ interface Request {
|
|
|
51
88
|
interface Parsed {
|
|
52
89
|
check: boolean
|
|
53
90
|
comment: boolean
|
|
91
|
+
interaction: boolean
|
|
54
92
|
issue: string | undefined
|
|
55
93
|
positionals: ReadonlyArray<string>
|
|
56
94
|
}
|
|
@@ -77,15 +115,31 @@ function parse_finding(spec: string): Finding | undefined {
|
|
|
77
115
|
return to_finding(spec.slice(0, first), spec.slice(first + 1, second), spec.slice(second + 1))
|
|
78
116
|
}
|
|
79
117
|
|
|
80
|
-
|
|
118
|
+
interface Positional {
|
|
119
|
+
finding: Finding
|
|
120
|
+
description: string
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// A positional is `[<disposition> ]<spec>[ — <reason>]`; the disposition rides into the ledger line.
|
|
124
|
+
function parse_positional(positional: string): Positional | undefined {
|
|
125
|
+
const { spec: marked, description } = review_finding_text.split_description(positional)
|
|
126
|
+
const { disposition, spec } = review_finding_ledger.split_disposition(marked)
|
|
127
|
+
const finding = parse_finding(spec)
|
|
128
|
+
|
|
129
|
+
if (finding === undefined) return undefined
|
|
130
|
+
|
|
131
|
+
return { finding: disposition === undefined ? finding : { ...finding, disposition }, description }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function parse_findings(positionals: ReadonlyArray<string>): ReadonlyArray<Finding> | undefined {
|
|
81
135
|
const findings: Array<Finding> = []
|
|
82
136
|
|
|
83
|
-
for (const
|
|
84
|
-
const
|
|
137
|
+
for (const positional of positionals) {
|
|
138
|
+
const parsed = parse_positional(positional)
|
|
85
139
|
|
|
86
|
-
if (
|
|
140
|
+
if (parsed === undefined) return undefined
|
|
87
141
|
|
|
88
|
-
findings.push(finding)
|
|
142
|
+
findings.push(parsed.finding)
|
|
89
143
|
}
|
|
90
144
|
|
|
91
145
|
return findings
|
|
@@ -99,6 +153,7 @@ function parse_argv(argv: ReadonlyArray<string>): Parsed | undefined {
|
|
|
99
153
|
return {
|
|
100
154
|
check: parsed.values.check === true,
|
|
101
155
|
comment: parsed.values.comment === true,
|
|
156
|
+
interaction: parsed.values.interaction === true,
|
|
102
157
|
issue: parsed.values.issue,
|
|
103
158
|
positionals: parsed.positionals,
|
|
104
159
|
}
|
|
@@ -126,16 +181,22 @@ function usage_text(): string {
|
|
|
126
181
|
accepted_values('<category>', review_finding_ledger.CATEGORIES),
|
|
127
182
|
accepted_values('<severity>', review_finding_ledger.SEVERITIES),
|
|
128
183
|
FILE_HINT,
|
|
184
|
+
DISPOSITION_HINT,
|
|
185
|
+
REASON_HINT,
|
|
129
186
|
].join('\n')
|
|
130
187
|
}
|
|
131
188
|
|
|
132
|
-
function build_lines(
|
|
189
|
+
function build_lines(
|
|
190
|
+
request: Request,
|
|
191
|
+
date: string,
|
|
192
|
+
kind: LineKind = 'code',
|
|
193
|
+
): ReadonlyArray<string> {
|
|
133
194
|
if (request.findings.length === 0) {
|
|
134
|
-
return [review_finding_ledger.zero_round_line(date, request.issue)]
|
|
195
|
+
return [review_finding_ledger.zero_round_line(date, request.issue, kind)]
|
|
135
196
|
}
|
|
136
197
|
|
|
137
198
|
return request.findings.map((finding) =>
|
|
138
|
-
review_finding_ledger.finding_line(finding, date, request.issue),
|
|
199
|
+
review_finding_ledger.finding_line(finding, date, request.issue, kind),
|
|
139
200
|
)
|
|
140
201
|
}
|
|
141
202
|
|
|
@@ -143,80 +204,186 @@ function confirmation(count: number, ledger_path: string): string {
|
|
|
143
204
|
return `Recorded ${String(count)} review-finding line(s) in ${ledger_path}.`
|
|
144
205
|
}
|
|
145
206
|
|
|
146
|
-
|
|
147
|
-
|
|
207
|
+
type CheckStatus = RecordVerdict['status']
|
|
208
|
+
|
|
209
|
+
interface CheckMode {
|
|
210
|
+
status: (issue: number, root: string) => Promise<CheckStatus>
|
|
211
|
+
recorded: (issue: number) => Promise<string>
|
|
212
|
+
refusal: (issue: number) => string
|
|
213
|
+
not_required: string
|
|
148
214
|
}
|
|
149
215
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
216
|
+
// **A recorded code round also says whether `josh ship` reuses it** (joshuafolkken/kit#4763), from the
|
|
217
|
+
// ship's own predicate, in the ship's three outcomes (joshuafolkken/kit#4878): reused as it stands,
|
|
218
|
+
// reused with the moved files left to round 2, or reviewed again — so the lane runs it itself rather
|
|
219
|
+
// than reading "recorded" as "done".
|
|
220
|
+
async function code_recorded(issue: number): Promise<string> {
|
|
221
|
+
const answer = await review_lane_handover.answer_here(issue)
|
|
153
222
|
|
|
154
|
-
|
|
155
|
-
|
|
223
|
+
return [RECORDED_LINE, reuse_line(answer)].join('\n')
|
|
224
|
+
}
|
|
156
225
|
|
|
157
|
-
|
|
226
|
+
async function interaction_recorded(): Promise<string> {
|
|
227
|
+
return RECORDED_LINE
|
|
228
|
+
}
|
|
158
229
|
|
|
159
|
-
|
|
160
|
-
|
|
230
|
+
async function code_status(issue: number, root: string): Promise<CheckStatus> {
|
|
231
|
+
const verdict = await review_record.check(issue, root)
|
|
161
232
|
|
|
162
|
-
|
|
163
|
-
|
|
233
|
+
return verdict.status
|
|
234
|
+
}
|
|
164
235
|
|
|
165
|
-
|
|
236
|
+
// The two rounds a check reads, each with its own ledger line, refusal and quiet answer.
|
|
237
|
+
const CHECK_MODES: Record<LineKind, CheckMode> = {
|
|
238
|
+
code: {
|
|
239
|
+
status: code_status,
|
|
240
|
+
recorded: code_recorded,
|
|
241
|
+
refusal: review_record.refusal_message,
|
|
242
|
+
not_required: NOT_REQUIRED_LINE,
|
|
243
|
+
},
|
|
244
|
+
interaction: {
|
|
245
|
+
status: review_interaction.status,
|
|
246
|
+
recorded: interaction_recorded,
|
|
247
|
+
refusal: review_interaction.refusal_message,
|
|
248
|
+
not_required: review_record_interaction.NOT_REQUIRED_LINE,
|
|
249
|
+
},
|
|
250
|
+
}
|
|
166
251
|
|
|
167
|
-
|
|
252
|
+
function kind_of(parsed: Parsed): LineKind {
|
|
253
|
+
return parsed.interaction ? 'interaction' : 'code'
|
|
168
254
|
}
|
|
169
255
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
async function post_comment(issue: number, lines: ReadonlyArray<string>): Promise<number> {
|
|
173
|
-
try {
|
|
174
|
-
const url = await git_gh_issue_write.issue_comment(
|
|
175
|
-
String(issue),
|
|
176
|
-
review_comment_round.body_of(lines),
|
|
177
|
-
)
|
|
256
|
+
async function report_check(issue: number, mode: CheckMode, root: string): Promise<number> {
|
|
257
|
+
const status = await mode.status(issue, root)
|
|
178
258
|
|
|
179
|
-
|
|
259
|
+
if (status === 'missing') {
|
|
260
|
+
console.error(mode.refusal(issue))
|
|
180
261
|
|
|
181
|
-
return
|
|
182
|
-
}
|
|
183
|
-
|
|
262
|
+
return FAILURE_EXIT_CODE
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
console.info(status === 'ok' ? await mode.recorded(issue) : mode.not_required)
|
|
266
|
+
|
|
267
|
+
return 0
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
async function run_check(parsed: Parsed, root: string): Promise<number> {
|
|
271
|
+
const { issue } = parsed
|
|
272
|
+
|
|
273
|
+
if (issue === undefined || !issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue)) {
|
|
274
|
+
console.error(CHECK_USAGE)
|
|
184
275
|
|
|
185
276
|
return FAILURE_EXIT_CODE
|
|
186
277
|
}
|
|
278
|
+
|
|
279
|
+
return await report_check(Number(issue), CHECK_MODES[kind_of(parsed)], root)
|
|
187
280
|
}
|
|
188
281
|
|
|
189
|
-
// The closed issues' comment rounds ride this round's commit (`review-comment-round.ts`)
|
|
190
|
-
//
|
|
191
|
-
//
|
|
282
|
+
// The closed issues' comment rounds ride this round's commit (`review-comment-round.ts`) — **except in a
|
|
283
|
+
// lane child** (joshuafolkken/kit#5326): parallel lanes each wrote the same newly closed issue's file,
|
|
284
|
+
// so their ships waited on each other's overlap and their merges with main conflicted on it.
|
|
285
|
+
// `observations:flush` carries them for the lanes, on the default branch, in one pull request.
|
|
192
286
|
async function carry_comment_rounds(root: string): Promise<void> {
|
|
193
|
-
|
|
194
|
-
|
|
287
|
+
if (lane_child_marker.is_child_of(root)) {
|
|
288
|
+
console.info(LANE_CARRY_LINE)
|
|
195
289
|
|
|
196
|
-
|
|
197
|
-
} catch (error) {
|
|
198
|
-
console.warn(`${CARRY_FAILED_LINE} ${error instanceof Error ? error.message : String(error)}`)
|
|
290
|
+
return
|
|
199
291
|
}
|
|
292
|
+
|
|
293
|
+
await review_comment_carry.carry_reported(root)
|
|
200
294
|
}
|
|
201
295
|
|
|
202
296
|
// The round lands in its own issue's file, so two lanes recording at once
|
|
203
297
|
// write two files, and their pull requests never conflict on the ledger.
|
|
204
|
-
|
|
205
|
-
issue: number
|
|
206
|
-
lines: ReadonlyArray<string
|
|
207
|
-
root: string
|
|
208
|
-
|
|
298
|
+
interface AppendedRound {
|
|
299
|
+
issue: number
|
|
300
|
+
lines: ReadonlyArray<string>
|
|
301
|
+
root: string
|
|
302
|
+
kind: LineKind
|
|
303
|
+
findings: ReadonlyArray<Finding>
|
|
304
|
+
date: string
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// A code round opens with its boundary line (`review-finding-ledger.ts`), not counted as a finding line.
|
|
308
|
+
function ledger_lines({ issue, lines, kind, date }: AppendedRound): ReadonlyArray<string> {
|
|
309
|
+
if (kind === 'interaction') return lines
|
|
310
|
+
|
|
311
|
+
return [review_finding_ledger.round_line(date, issue), ...lines]
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// A code round goes on to what its tree means for the ship (`review-record-code-round.ts`).
|
|
315
|
+
async function append_round(round: AppendedRound): Promise<number> {
|
|
316
|
+
const { issue, lines, root, kind, findings } = round
|
|
209
317
|
const ledger_path = observation_ledger_home.issue_path(issue, root)
|
|
210
318
|
|
|
211
|
-
await observation_ledger_home.append(ledger_path,
|
|
319
|
+
await observation_ledger_home.append(ledger_path, ledger_lines(round))
|
|
212
320
|
console.info(confirmation(lines.length, ledger_path))
|
|
213
321
|
await carry_comment_rounds(root)
|
|
214
322
|
|
|
323
|
+
if (kind === 'code') await review_record_code_round.follow(issue, root, findings)
|
|
324
|
+
|
|
215
325
|
return 0
|
|
216
326
|
}
|
|
217
327
|
|
|
328
|
+
// A code round recorded after the push goes to the issue unasked (`review-record-comment.ts`).
|
|
329
|
+
async function write_round(
|
|
330
|
+
parsed: Parsed,
|
|
331
|
+
request: Request,
|
|
332
|
+
now: Date,
|
|
333
|
+
root: string,
|
|
334
|
+
): Promise<number> {
|
|
335
|
+
const kind = kind_of(parsed)
|
|
336
|
+
const date = observation_ledger_home.ledger_date(now)
|
|
337
|
+
const lines = build_lines(request, date, kind)
|
|
338
|
+
const { issue, findings } = request
|
|
339
|
+
|
|
340
|
+
if (parsed.comment) return await review_record_comment.post(issue, lines)
|
|
341
|
+
|
|
342
|
+
if (kind === 'code' && (await review_record_comment.is_after_push())) {
|
|
343
|
+
return await review_record_comment.post_after_push({ issue, lines, root, findings })
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
return await append_round({
|
|
347
|
+
issue: request.issue,
|
|
348
|
+
lines,
|
|
349
|
+
root,
|
|
350
|
+
kind,
|
|
351
|
+
findings: request.findings,
|
|
352
|
+
date,
|
|
353
|
+
})
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// The stop-log finding a positional carries, or `undefined` for one written without a reason.
|
|
357
|
+
function reason_of(positional: string): StopFinding | undefined {
|
|
358
|
+
const parsed = parse_positional(positional)
|
|
359
|
+
|
|
360
|
+
if (parsed === undefined || parsed.description.length === 0) return undefined
|
|
361
|
+
|
|
362
|
+
const { finding, description } = parsed
|
|
363
|
+
|
|
364
|
+
return {
|
|
365
|
+
kind: `${finding.category}:${finding.severity}`,
|
|
366
|
+
location: finding.file,
|
|
367
|
+
sentence: review_finding_text.first_sentence(description),
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
function is_reason(finding: StopFinding | undefined): finding is StopFinding {
|
|
372
|
+
return finding !== undefined
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// Recorded only once the round itself is, so the stop log never holds a round the ledger refused.
|
|
376
|
+
function record_reasons(issue: number, positionals: ReadonlyArray<string>): void {
|
|
377
|
+
review_stop_log.record({
|
|
378
|
+
issue,
|
|
379
|
+
stage: RECORD_STAGE,
|
|
380
|
+
findings: positionals.map((positional) => reason_of(positional)).filter(is_reason),
|
|
381
|
+
is_fixed: true,
|
|
382
|
+
})
|
|
383
|
+
}
|
|
384
|
+
|
|
218
385
|
async function run_record(parsed: Parsed, now: Date, root: string): Promise<number> {
|
|
219
|
-
const request = to_request(parsed)
|
|
386
|
+
const request = parsed.comment && parsed.interaction ? undefined : to_request(parsed)
|
|
220
387
|
|
|
221
388
|
if (request === undefined) {
|
|
222
389
|
console.error(usage_text())
|
|
@@ -224,11 +391,11 @@ async function run_record(parsed: Parsed, now: Date, root: string): Promise<numb
|
|
|
224
391
|
return FAILURE_EXIT_CODE
|
|
225
392
|
}
|
|
226
393
|
|
|
227
|
-
const
|
|
394
|
+
const code = await write_round(parsed, request, now, root)
|
|
228
395
|
|
|
229
|
-
if (
|
|
396
|
+
if (code === 0) record_reasons(request.issue, parsed.positionals)
|
|
230
397
|
|
|
231
|
-
return
|
|
398
|
+
return code
|
|
232
399
|
}
|
|
233
400
|
|
|
234
401
|
// **The default is the work tree the command runs in, a lane's inside a lane**.
|
|
@@ -247,23 +414,18 @@ async function run(
|
|
|
247
414
|
return FAILURE_EXIT_CODE
|
|
248
415
|
}
|
|
249
416
|
|
|
250
|
-
if (parsed.check) return await run_check(parsed
|
|
417
|
+
if (parsed.check) return await run_check(parsed, root)
|
|
251
418
|
|
|
252
419
|
return await run_record(parsed, now, root)
|
|
253
420
|
}
|
|
254
421
|
|
|
255
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
256
|
-
process.exitCode = await run(argv, new Date())
|
|
257
|
-
}
|
|
258
|
-
|
|
259
422
|
const review_record_cli = {
|
|
260
423
|
accepted_values,
|
|
261
424
|
build_lines,
|
|
262
425
|
parse_finding,
|
|
426
|
+
parse_positional,
|
|
263
427
|
run,
|
|
264
428
|
usage_text,
|
|
265
429
|
}
|
|
266
430
|
|
|
267
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
268
|
-
|
|
269
431
|
export { review_record_cli }
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { run_ship_detach } from '#scripts/run/ship/run-ship-detach'
|
|
2
|
+
import type { Finding } from './review-finding-ledger'
|
|
3
|
+
import { review_lane_handover } from './review-lane-handover'
|
|
4
|
+
import { review_record_interaction } from './review-record-interaction'
|
|
5
|
+
import { review_record_pinned } from './review-record-pinned'
|
|
6
|
+
import { review_reviewed_tree } from './review-reviewed-tree'
|
|
7
|
+
|
|
8
|
+
// What `josh review:record` does once a code round is on the ledger: it records the tree the verdict
|
|
9
|
+
// stands for, which `josh ship` reuses while the tree holds still (`review-reviewed-tree.ts`), names
|
|
10
|
+
// the ship next for a lane child (`review-lane-handover.ts`), names an interaction review its fixes
|
|
11
|
+
// made due (`review-record-interaction.ts`), reads a `josh run:review --join` the lane skipped, and
|
|
12
|
+
// starts `josh test:pinned` again on a tree its fixes moved (`review-record-pinned.ts`).
|
|
13
|
+
|
|
14
|
+
const HIGH_SEVERITY = 'high'
|
|
15
|
+
|
|
16
|
+
// The files whose finding the round could not have fixed in place — a High never is.
|
|
17
|
+
function unsettled_files(findings: ReadonlyArray<Finding>): ReadonlyArray<string> {
|
|
18
|
+
return findings
|
|
19
|
+
.filter((finding) => finding.severity === HIGH_SEVERITY)
|
|
20
|
+
.map((finding) => finding.file)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// A lane child's round the ship reuses names the ship next (joshuafolkken/kit#4850), read after the
|
|
24
|
+
// tree is stamped; the lines that follow name what is done before that ship.
|
|
25
|
+
async function report_handover(issue: number): Promise<boolean> {
|
|
26
|
+
const is_handed_over = await review_lane_handover.is_handed_over(issue)
|
|
27
|
+
|
|
28
|
+
if (is_handed_over) console.info(review_lane_handover.NEXT_STEP_LINE)
|
|
29
|
+
|
|
30
|
+
return is_handed_over
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Only a lane child's round the ship will reuse restarts the check: the ship's own rounds run under its
|
|
34
|
+
// supervisor, where nothing reads the answer and the check would hold cores the ship's gate waits on.
|
|
35
|
+
function is_restarted_here(is_handed_over: boolean): boolean {
|
|
36
|
+
return is_handed_over && !run_ship_detach.is_supervised()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function follow(
|
|
40
|
+
issue: number,
|
|
41
|
+
root: string,
|
|
42
|
+
findings: ReadonlyArray<Finding>,
|
|
43
|
+
): Promise<void> {
|
|
44
|
+
await review_reviewed_tree.record(unsettled_files(findings))
|
|
45
|
+
const is_handed_over = await report_handover(issue)
|
|
46
|
+
|
|
47
|
+
await review_record_interaction.report_due(issue, root)
|
|
48
|
+
if (!is_restarted_here(is_handed_over)) return
|
|
49
|
+
await review_record_pinned.read_skipped_join(root)
|
|
50
|
+
await review_record_pinned.restart_if_moved(root)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const review_record_code_round = { follow }
|
|
54
|
+
|
|
55
|
+
export { review_record_code_round }
|