@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,102 @@
|
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
3
|
+
import { cli_body } from '#scripts/josh/cli-body'
|
|
4
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
5
|
+
import { error_text } from '#scripts/lib/error-message'
|
|
6
|
+
import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
7
|
+
|
|
8
|
+
// The shape every evidence exit shares — `josh issue:already-done` and `josh issue:measured`: the
|
|
9
|
+
// evidence comment, the exit's own finishing write, then the `run:release`, in that order.
|
|
10
|
+
//
|
|
11
|
+
// **The order is the point.** The finishing write without the comment is an uncited claim, so the
|
|
12
|
+
// comment goes first and each step runs only once the one before it landed — a failure stops there
|
|
13
|
+
// and names the step.
|
|
14
|
+
|
|
15
|
+
const FAILURE_EXIT_CODE = 1
|
|
16
|
+
const EVIDENCE_FILE_FLAG = '--evidence-file'
|
|
17
|
+
const OPTIONS = { 'evidence-file': { type: 'string' } } as const
|
|
18
|
+
|
|
19
|
+
interface EvidenceRequest {
|
|
20
|
+
issue_number: string
|
|
21
|
+
evidence: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// `admit`, when given, runs once the request parsed and before the first write: an exit that does not
|
|
25
|
+
// fit the Issue refuses there, with nothing written.
|
|
26
|
+
interface EvidenceExit {
|
|
27
|
+
command: string
|
|
28
|
+
finish: (issue_number: string) => Promise<boolean>
|
|
29
|
+
admit?: (issue_number: string) => Promise<boolean>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// An evidence file that is empty or whitespace only is refused before anything is written: a comment
|
|
33
|
+
// with no citations is not the finding an exit is for. The throw carries the reason to `run`.
|
|
34
|
+
function parse_request(argv: ReadonlyArray<string>): EvidenceRequest | undefined {
|
|
35
|
+
const parsed = cli_flags.arguments_of(argv, OPTIONS)
|
|
36
|
+
if (parsed === undefined) return undefined
|
|
37
|
+
const issue_number = issue_number_shape.single_of(parsed.positionals)
|
|
38
|
+
const file_path = parsed.values['evidence-file']
|
|
39
|
+
if (issue_number === undefined || file_path === undefined) return undefined
|
|
40
|
+
const evidence = cli_body.read_file_or_stdin(file_path).trim()
|
|
41
|
+
if (evidence.length === 0) throw new Error(`Evidence file is empty: ${file_path}`)
|
|
42
|
+
|
|
43
|
+
return { issue_number, evidence }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// A file-read failure or an empty file is an `Error` naming the path, printed as-is; every other
|
|
47
|
+
// refusal is `undefined`, which the usage line explains.
|
|
48
|
+
function resolve_request(
|
|
49
|
+
argv: ReadonlyArray<string>,
|
|
50
|
+
command: string,
|
|
51
|
+
): EvidenceRequest | undefined {
|
|
52
|
+
try {
|
|
53
|
+
const request = parse_request(argv)
|
|
54
|
+
|
|
55
|
+
if (request === undefined) {
|
|
56
|
+
console.error(`Usage: josh ${command} <issue-number> ${EVIDENCE_FILE_FLAG} <path>`)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return request
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error(error_text.message_of(error))
|
|
62
|
+
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function post_evidence(request: EvidenceRequest): Promise<boolean> {
|
|
68
|
+
try {
|
|
69
|
+
console.info(await git_gh_command.issue_comment(request.issue_number, request.evidence))
|
|
70
|
+
|
|
71
|
+
return true
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.error(`Evidence comment not posted: ${error_text.message_of(error)}`)
|
|
74
|
+
|
|
75
|
+
return false
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Each write runs only once the one before it landed: `&&` stops at the first that did not.
|
|
80
|
+
async function write_exit(request: EvidenceRequest, exit: EvidenceExit): Promise<boolean> {
|
|
81
|
+
return (await post_evidence(request)) && (await exit.finish(request.issue_number))
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async function is_admitted(request: EvidenceRequest, exit: EvidenceExit): Promise<boolean> {
|
|
85
|
+
return exit.admit === undefined || (await exit.admit(request.issue_number))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async function run(argv: ReadonlyArray<string>, exit: EvidenceExit): Promise<number> {
|
|
89
|
+
const request = resolve_request(argv, exit.command)
|
|
90
|
+
if (request === undefined || !(await is_admitted(request, exit))) return FAILURE_EXIT_CODE
|
|
91
|
+
|
|
92
|
+
return (await write_exit(request, exit))
|
|
93
|
+
? await run_hold_cli.run(['--release', request.issue_number])
|
|
94
|
+
: FAILURE_EXIT_CODE
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// The writes alone, for evidence composed in process — `backlog:drive`'s measured close
|
|
98
|
+
// (`backlog-measure-close.ts`), which holds no tree of the issue's, so there is nothing to release.
|
|
99
|
+
const issue_evidence_exit = { run, write: write_exit }
|
|
100
|
+
|
|
101
|
+
export type { EvidenceExit, EvidenceRequest }
|
|
102
|
+
export { issue_evidence_exit }
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { run_hold_member } from '#scripts/run/hold/run-hold-member'
|
|
2
|
+
import { issue_file_fold } from './issue-file-fold'
|
|
3
|
+
import { session_cite } from './session-cite'
|
|
4
|
+
|
|
5
|
+
// The automatic-filing cap, asked by `josh issue:file` itself as the fold and the WIP cap are.
|
|
6
|
+
//
|
|
7
|
+
// **Ten filings per originating work item, refused at the eleventh** (joshuafolkken/kit#4750). The
|
|
8
|
+
// origin is the fold's finder — the `--found-during` the filing names, else the lane child's mark, else
|
|
9
|
+
// the Issue the checkout's branch names — so a lane's filings, a long lane the parent investigated and
|
|
10
|
+
// the Issue a prerequisite came out of are each their own count. The count is the origin's `filed`
|
|
11
|
+
// events on the repository's event stream, read whole, so it outlives a session cut; a transcript tail
|
|
12
|
+
// counted every origin a long session touched against one ceiling and forgot each filing once it
|
|
13
|
+
// scrolled out (joshuafolkken/kit#2119).
|
|
14
|
+
//
|
|
15
|
+
// **Only a run's filings are automatic**: the cap holds in a run's session — a lane child or the
|
|
16
|
+
// hold's owner — and counts the filings marked as a run's, so a person filing from their own session
|
|
17
|
+
// is the further Issue the refusal leaves to them. **A filing with no origin counts against the
|
|
18
|
+
// invocation running** — the carry record's scope the fold reads for it too — so a retrospective's or a
|
|
19
|
+
// parent's own filings share one count per run. **A failed filing never counts**: `issue:file` appends
|
|
20
|
+
// its `filed` event only once the Issue exists.
|
|
21
|
+
|
|
22
|
+
const FILING_CAP = 10
|
|
23
|
+
|
|
24
|
+
// How many Issues the origin has already filed from a run.
|
|
25
|
+
async function prior_count(origin: string | undefined): Promise<number> {
|
|
26
|
+
const events = await issue_file_fold.events_of(origin)
|
|
27
|
+
|
|
28
|
+
return issue_file_fold.finder_filings(events, origin).filter((filed) => filed.is_run === true)
|
|
29
|
+
.length
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function owner_of(origin: string | undefined): string {
|
|
33
|
+
return origin === undefined ? 'this run (no originating Issue)' : session_cite.issue(origin)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function reason_of(origin: string | undefined): string {
|
|
37
|
+
return (
|
|
38
|
+
`✖ filing cap: ${owner_of(origin)} has already filed ${String(FILING_CAP)} Issues, the ceiling ` +
|
|
39
|
+
"per originating work item. Stop filing and report; a further Issue is a person's to file from " +
|
|
40
|
+
'their own session (`.claude/skills/workflow-commands/prerequisite.md`).'
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Whether the filing may go on: `false`, with the reason printed, once a run's filing finds its
|
|
45
|
+
// origin's count at the cap — this filing would be the eleventh.
|
|
46
|
+
async function is_cap_clear(named: string | undefined): Promise<boolean> {
|
|
47
|
+
if (!(await run_hold_member.is_run_member())) return true
|
|
48
|
+
const origin = await issue_file_fold.finder(named)
|
|
49
|
+
|
|
50
|
+
if ((await prior_count(origin)) < FILING_CAP) return true
|
|
51
|
+
console.error(reason_of(origin))
|
|
52
|
+
|
|
53
|
+
return false
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const issue_file_cap = { FILING_CAP, is_cap_clear, reason_of }
|
|
57
|
+
|
|
58
|
+
export { issue_file_cap }
|
|
@@ -8,40 +8,56 @@ import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
|
8
8
|
import { git_gh_issue_list, MAX_SCANNED } from '#scripts/gh/git-gh-issue-list'
|
|
9
9
|
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
10
10
|
import { github_issue_url } from '#scripts/gh/github-issue-url'
|
|
11
|
+
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
11
12
|
import { error_text } from '#scripts/lib/error-message'
|
|
12
13
|
import type { PollOptions } from '#scripts/lib/poll'
|
|
13
14
|
import { repository_labels } from '#scripts/repo/repository-labels'
|
|
14
15
|
import { run_event_filed } from '#scripts/run/event/run-event-filed'
|
|
15
16
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
16
17
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
18
|
+
import { run_hold_member } from '#scripts/run/hold/run-hold-member'
|
|
19
|
+
import { split_resolution } from '#scripts/split/split-resolution'
|
|
17
20
|
import { issue_auto_ok } from './issue-auto-ok'
|
|
18
21
|
import { issue_cite } from './issue-cite'
|
|
19
22
|
import { issue_file, type FileArguments } from './issue-file'
|
|
23
|
+
import { issue_file_cap } from './issue-file-cap'
|
|
24
|
+
import { issue_file_deferral } from './issue-file-deferral'
|
|
20
25
|
import { issue_file_fold } from './issue-file-fold'
|
|
26
|
+
import { issue_file_interrupt } from './issue-file-interrupt'
|
|
27
|
+
import { issue_file_lane_hint } from './issue-file-lane-hint'
|
|
21
28
|
import { issue_lint_cli } from './issue-lint-cli'
|
|
29
|
+
import { issue_priority } from './issue-priority'
|
|
22
30
|
import { issue_release_cli } from './issue-release-cli'
|
|
31
|
+
import { issue_sample_required } from './issue-sample-required'
|
|
32
|
+
import { issue_sample_source } from './issue-sample-source'
|
|
23
33
|
import { issue_scout_cli } from './issue-scout-cli'
|
|
24
34
|
import { issue_wip } from './issue-wip'
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
35
|
+
import { size_estimate } from './size-estimate'
|
|
36
|
+
|
|
37
|
+
// `josh issue:file "<title>" --body-file <path> [--route <route>] [--label <name>]…
|
|
38
|
+
// [--repo <owner/repo>] [--distinct <N,…>] [--found-during <N>] [--over-cap] [--no-auto-ok]
|
|
39
|
+
// [--release] [--blocks-finder]` — file an Issue with every filing step run: the third-party refusal,
|
|
40
|
+
// the filing cap per origin and the fold question against the run's earlier filings, each ending the
|
|
41
|
+
// filing on its own; then, each tier printing every refusal of its own at once, the local checks —
|
|
42
|
+
// the body lint, the size estimate against the split guide, the start condition a measurement
|
|
43
|
+
// follow-up owes, the `## Origin` check for another repository, the `auto-ok` decision with the run
|
|
44
|
+
// label it owes; once those pass, the start condition read as a pull request and the WIP cap count;
|
|
45
|
+
// once those pass, the duplicate scout; then the missing workflow labels created, the create call
|
|
46
|
+
// carrying every label, a blocking interrupt's finder recorded as blocked by it, the release link on
|
|
47
|
+
// `--release`, and `epic:bundle`.
|
|
34
48
|
// A direct `gh api …/issues` filing is refused by the `direct-filing` delivered rule and pointed here.
|
|
35
49
|
|
|
36
50
|
const SUCCESS_EXIT_CODE = 0
|
|
37
51
|
const FAILURE_EXIT_CODE = 1
|
|
38
52
|
const ARGV_OFFSET = 2
|
|
39
53
|
const USAGE =
|
|
40
|
-
'Usage: josh issue:file "<title>" --body-file <path>
|
|
54
|
+
'Usage: josh issue:file "<title>" --body-file <path> [--route <tier-a|split|interrupt|review-cap>] [--label <name>]… [--repo <owner/repo>] [--distinct <N,…>] [--found-during <N>] [--over-cap] [--no-auto-ok] [--release] [--blocks-finder]'
|
|
41
55
|
const UNKNOWN_REPO_MESSAGE =
|
|
42
56
|
'Could not read this repository from `git remote`, so the filing has no repository to compare against — check `gh auth status`.'
|
|
43
57
|
const THIRD_PARTY_MESSAGE =
|
|
44
58
|
'✖ third-party target: a tracker we do not own is Tier C — draft the Issue for a person to post instead (`CLAUDE.md` → "Third-party repositories are Tier C").'
|
|
59
|
+
const UNKNOWN_PARTY_MESSAGE =
|
|
60
|
+
'✖ unknown party: the owner of this session or of the target could not be read (`git remote` / `--repo`), so the target is not known to be ours — check `pnpm josh repo:party`.'
|
|
45
61
|
// `GH_REPO` is the variable `gh` reads `{owner}/{repo}` from, so setting it points every listing the
|
|
46
62
|
// scout and `epic:bundle` make at the target repository rather than at this checkout.
|
|
47
63
|
const GH_REPO_VARIABLE = 'GH_REPO'
|
|
@@ -64,19 +80,24 @@ async function read_body(path: string): Promise<string | undefined> {
|
|
|
64
80
|
}
|
|
65
81
|
}
|
|
66
82
|
|
|
67
|
-
|
|
83
|
+
// An owner that cannot be read is refused like a third party — stricter than the `third-party-write`
|
|
84
|
+
// hook, which stays silent on `unknown`: a filing is admitted only when the target is known to be ours.
|
|
85
|
+
function party_refusal(target: string): string | undefined {
|
|
68
86
|
const party = repo_party.classify(repo_party.current_owner(), repo_party.target_owner(target))
|
|
69
87
|
|
|
70
|
-
|
|
88
|
+
if (party === repo_party.FIRST_PARTY) return undefined
|
|
89
|
+
|
|
90
|
+
return party === repo_party.THIRD_PARTY ? THIRD_PARTY_MESSAGE : UNKNOWN_PARTY_MESSAGE
|
|
71
91
|
}
|
|
72
92
|
|
|
73
|
-
// Every refusal the
|
|
74
|
-
// the filing may go on to the scout.
|
|
93
|
+
// Every refusal the body and the arguments carry, read locally — `[]` when the body is admitted.
|
|
75
94
|
function refusals_of(filing: Filing): ReadonlyArray<string> {
|
|
76
|
-
if (is_third_party(filing.target)) return [THIRD_PARTY_MESSAGE]
|
|
77
95
|
const problems = [
|
|
78
96
|
...issue_lint_cli.problems(filing.body),
|
|
97
|
+
size_estimate.guide_problem(filing.body, filing.args.route),
|
|
98
|
+
issue_sample_required.problem(filing.body),
|
|
79
99
|
issue_auto_ok.declaration_problem(filing.body),
|
|
100
|
+
issue_priority.problem(filing.body, filing.args.labels),
|
|
80
101
|
issue_file.origin_problem(filing.body, filing.target, filing.current),
|
|
81
102
|
]
|
|
82
103
|
|
|
@@ -138,7 +159,8 @@ async function is_scout_clear(filing: Filing): Promise<boolean> {
|
|
|
138
159
|
|
|
139
160
|
if (outcome === undefined) return false
|
|
140
161
|
console.info(outcome.report)
|
|
141
|
-
const
|
|
162
|
+
const answered = issue_file.acknowledged(filing.args, filing.target, filing.current)
|
|
163
|
+
const open = issue_file.unacknowledged(outcome.candidates, answered)
|
|
142
164
|
|
|
143
165
|
if (open.length > 0) console.error(unacknowledged_message(open))
|
|
144
166
|
|
|
@@ -146,8 +168,8 @@ async function is_scout_clear(filing: Filing): Promise<boolean> {
|
|
|
146
168
|
}
|
|
147
169
|
|
|
148
170
|
// Every label the create call carries, or `undefined` when an `auto-ok` filing names neither run label.
|
|
149
|
-
//
|
|
150
|
-
//
|
|
171
|
+
// The decision reads the labels the body's declarations add, so a declared breaking change is excluded
|
|
172
|
+
// like its label.
|
|
151
173
|
function labels_of(filing: Filing): ReadonlyArray<string> | undefined {
|
|
152
174
|
const auto_ok = issue_auto_ok.decide({
|
|
153
175
|
is_opted_out: filing.args.is_auto_ok_opted_out,
|
|
@@ -223,26 +245,70 @@ async function place(url: string, target: string): Promise<void> {
|
|
|
223
245
|
}
|
|
224
246
|
|
|
225
247
|
// Every filing lands on the run's event stream: this is the one filing path, so
|
|
226
|
-
// one append here reaches `run:board` from every route. A filing outside a run lands too
|
|
227
|
-
//
|
|
248
|
+
// one append here reaches `run:board` from every route. A filing outside a run lands too, unmarked as
|
|
249
|
+
// the run's (`run_hold_member`), and the board counts only the marked ones; a lane's overrun
|
|
250
|
+
// investigation marks its own, which the board draws after 🔍; the append is best-effort, as every emit is.
|
|
251
|
+
async function emit_filed(
|
|
252
|
+
reference: string,
|
|
253
|
+
filing: Filing,
|
|
254
|
+
labels: ReadonlyArray<string>,
|
|
255
|
+
found_during: string | undefined,
|
|
256
|
+
): Promise<void> {
|
|
257
|
+
const kind = run_event_filed.kind_of(labels)
|
|
258
|
+
const is_run = await run_hold_member.is_run_member()
|
|
259
|
+
const is_overrun = lane_child_marker.is_overrun()
|
|
260
|
+
const { title } = filing.args
|
|
261
|
+
const text = run_event_filed.text_of({ reference, kind, title, found_during, is_run, is_overrun })
|
|
262
|
+
|
|
263
|
+
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.FILED, text)
|
|
264
|
+
}
|
|
265
|
+
|
|
228
266
|
async function record(url: string, filing: Filing, labels: ReadonlyArray<string>): Promise<void> {
|
|
229
267
|
const number = String(issue_number_of(url))
|
|
230
268
|
const reference = issue_cite.plain(
|
|
231
269
|
number,
|
|
232
270
|
issue_file_fold.reference_prefix(filing.target, filing.current),
|
|
233
271
|
)
|
|
234
|
-
const found_during = await issue_file_fold.finder()
|
|
235
|
-
const kind = run_event_filed.kind_of(labels)
|
|
236
|
-
const text = run_event_filed.text_of({ reference, kind, title: filing.args.title, found_during })
|
|
272
|
+
const found_during = await issue_file_fold.finder(filing.args.found_during)
|
|
237
273
|
|
|
238
|
-
await
|
|
274
|
+
await emit_filed(reference, filing, labels, found_during)
|
|
275
|
+
await issue_file_deferral.note_finder({
|
|
276
|
+
found_during: filing.args.found_during,
|
|
277
|
+
reference,
|
|
278
|
+
title: filing.args.title,
|
|
279
|
+
current: filing.current,
|
|
280
|
+
})
|
|
281
|
+
await split_resolution.record_child({ route: filing.args.route, found_during, child: reference })
|
|
282
|
+
await issue_file_interrupt.block_finder({
|
|
283
|
+
route: filing.args.route,
|
|
284
|
+
is_blocking_finder: filing.args.is_blocking_finder,
|
|
285
|
+
found_during,
|
|
286
|
+
blocker: issue_number_of(url),
|
|
287
|
+
is_here: issue_file.is_same_repository(filing.target, filing.current),
|
|
288
|
+
})
|
|
239
289
|
}
|
|
240
290
|
|
|
241
|
-
function is_admitted(filing: Filing): boolean {
|
|
291
|
+
async function is_admitted(filing: Filing): Promise<boolean> {
|
|
242
292
|
const refusals = refusals_of(filing)
|
|
243
293
|
|
|
244
294
|
if (refusals.length === 0) return true
|
|
245
|
-
|
|
295
|
+
const hint = await issue_file_lane_hint.lines_of(filing.args.found_during, filing.body)
|
|
296
|
+
|
|
297
|
+
console.error([...refusals, ...hint].join('\n'))
|
|
298
|
+
|
|
299
|
+
return false
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// The start condition's citation read against GitHub.
|
|
303
|
+
async function is_source_clear(filing: Filing): Promise<boolean> {
|
|
304
|
+
const is_here = issue_file.is_same_repository(filing.target, filing.current)
|
|
305
|
+
const problem = await issue_sample_source.problem(
|
|
306
|
+
filing.body,
|
|
307
|
+
is_here ? undefined : filing.target,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
if (problem === undefined) return true
|
|
311
|
+
console.error(`✖ ${problem}`)
|
|
246
312
|
|
|
247
313
|
return false
|
|
248
314
|
}
|
|
@@ -259,23 +325,46 @@ async function send(filing: Filing, labels: ReadonlyArray<string>): Promise<numb
|
|
|
259
325
|
return SUCCESS_EXIT_CODE
|
|
260
326
|
}
|
|
261
327
|
|
|
262
|
-
// The holds that
|
|
263
|
-
// stream
|
|
264
|
-
async function
|
|
328
|
+
// The holds that end the filing whatever the body says, read first: the filing cap reads the local
|
|
329
|
+
// event stream, the fold the stream and diff.
|
|
330
|
+
async function is_run_clear(filing: Filing): Promise<boolean> {
|
|
265
331
|
const prefix = issue_file_fold.reference_prefix(filing.target, filing.current)
|
|
266
332
|
|
|
267
|
-
|
|
333
|
+
return (
|
|
334
|
+
(await issue_file_cap.is_cap_clear(filing.args.found_during)) &&
|
|
335
|
+
(await issue_file_fold.is_fold_clear(prefix, filing.args))
|
|
336
|
+
)
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Every step the caller answers from the body and the arguments, cheapest first, each tier's refusals
|
|
340
|
+
// printed at once and fixed in one reissue: the local checks (the body's own refusals and the run
|
|
341
|
+
// label) before anything asks GitHub, then the start condition's citation and the WIP count, then the
|
|
342
|
+
// duplicate scout's search, run only once nothing else refuses. The labels, or `undefined` when any refused.
|
|
343
|
+
async function labels_in_one_pass(filing: Filing): Promise<ReadonlyArray<string> | undefined> {
|
|
344
|
+
const is_body_clear = await is_admitted(filing)
|
|
345
|
+
const labels = labels_of(filing)
|
|
346
|
+
|
|
347
|
+
if (!is_body_clear || labels === undefined) return undefined
|
|
348
|
+
const verdicts = [await is_source_clear(filing), await is_wip_clear(filing)]
|
|
349
|
+
|
|
350
|
+
if (!verdicts.every(Boolean)) return undefined
|
|
268
351
|
|
|
269
|
-
return (await
|
|
352
|
+
return (await is_scout_clear(filing)) ? labels : undefined
|
|
270
353
|
}
|
|
271
354
|
|
|
272
355
|
async function file(filing: Filing): Promise<number> {
|
|
273
|
-
|
|
274
|
-
|
|
356
|
+
const party_problem = party_refusal(filing.target)
|
|
357
|
+
|
|
358
|
+
if (party_problem !== undefined) {
|
|
359
|
+
console.error(party_problem)
|
|
275
360
|
|
|
276
|
-
|
|
361
|
+
return FAILURE_EXIT_CODE
|
|
362
|
+
}
|
|
277
363
|
|
|
278
|
-
|
|
364
|
+
if (!(await is_run_clear(filing))) return FAILURE_EXIT_CODE
|
|
365
|
+
const labels = await labels_in_one_pass(filing)
|
|
366
|
+
|
|
367
|
+
return labels === undefined ? FAILURE_EXIT_CODE : await send(filing, labels)
|
|
279
368
|
}
|
|
280
369
|
|
|
281
370
|
async function filing_of(args: FileArguments): Promise<Filing | string> {
|
|
@@ -314,7 +403,13 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
314
403
|
process.exitCode = await run(argv)
|
|
315
404
|
}
|
|
316
405
|
|
|
317
|
-
const issue_file_cli = {
|
|
406
|
+
const issue_file_cli = {
|
|
407
|
+
FRESH_ISSUE_POLL,
|
|
408
|
+
THIRD_PARTY_MESSAGE,
|
|
409
|
+
UNKNOWN_PARTY_MESSAGE,
|
|
410
|
+
record,
|
|
411
|
+
run,
|
|
412
|
+
}
|
|
318
413
|
|
|
319
414
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
320
415
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
2
|
+
import { shell_quote } from '#scripts/lib/shell-quote'
|
|
3
|
+
import { session_cite } from './session-cite'
|
|
4
|
+
|
|
5
|
+
// What `josh issue:file --found-during <N>` leaves on #N: one comment, `NOTE_PREFIX <filed> <title>`, so
|
|
6
|
+
// the deferral is read wherever #N is read. The run event alone reached neither `issue:read <N>` nor the
|
|
7
|
+
// ship reviewer's brief, so the reviewer raised the deferred gap again as a Medium and the ship
|
|
8
|
+
// stopped on scope the lane had already filed away (joshuafolkken/kit#4821). `review-rubric.md` →
|
|
9
|
+
// "Stop conditions" is the rule that reads the note.
|
|
10
|
+
//
|
|
11
|
+
// Only a finder the filing names is noted — a finder inferred from the lane mark or the branch is the
|
|
12
|
+
// run's, not a declared deferral. The finder is an Issue in this repository, so the comment is posted
|
|
13
|
+
// to `current` even when `GH_REPO` points the filing's listings at another target. The Issue already
|
|
14
|
+
// exists, so a failed comment is reported rather than failed, for the reason `issue-file-cli.ts` →
|
|
15
|
+
// `place` gives.
|
|
16
|
+
|
|
17
|
+
const NOTE_PREFIX = '先送り:'
|
|
18
|
+
|
|
19
|
+
interface Deferral {
|
|
20
|
+
found_during: string | undefined
|
|
21
|
+
reference: string
|
|
22
|
+
title: string
|
|
23
|
+
current: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function note_of(deferral: Deferral): string {
|
|
27
|
+
return `${NOTE_PREFIX} ${deferral.reference} ${deferral.title}`
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function failure_line(finder: number, note: string): string {
|
|
31
|
+
const rerun = `pnpm josh issue:comment ${String(finder)} --body ${shell_quote.single_quoted(note)}`
|
|
32
|
+
|
|
33
|
+
return `⚠ the deferral note did not reach ${session_cite.issue(finder)} — run \`${rerun}\`.`
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function note_finder(deferral: Deferral): Promise<void> {
|
|
37
|
+
const finder = Number(deferral.found_during)
|
|
38
|
+
|
|
39
|
+
if (!Number.isSafeInteger(finder) || finder <= 0) return
|
|
40
|
+
const note = note_of(deferral)
|
|
41
|
+
const is_noted = await git_gh_issue_write.issue_try_comment(
|
|
42
|
+
String(finder),
|
|
43
|
+
note,
|
|
44
|
+
deferral.current,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
if (!is_noted) console.error(failure_line(finder, note))
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const issue_file_deferral = { NOTE_PREFIX, note_finder }
|
|
51
|
+
|
|
52
|
+
export { issue_file_deferral }
|
|
@@ -28,6 +28,7 @@ const CLOSED_STATE = 'CLOSED'
|
|
|
28
28
|
interface FoldArguments {
|
|
29
29
|
route: string | undefined
|
|
30
30
|
distinct: ReadonlyArray<number>
|
|
31
|
+
found_during: string | undefined
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
function number_of(reference: string): number {
|
|
@@ -55,10 +56,12 @@ async function branch_issue(): Promise<number | undefined> {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
// Whose work turned the finding up: the
|
|
59
|
-
// so a person's `fullrun` on `3423-x` is one finder across
|
|
60
|
-
// checkout on no Issue's branch — a `backlogrun` parent on
|
|
61
|
-
|
|
59
|
+
// Whose work turned the finding up: the `--found-during` the filing named, else the lane child's mark,
|
|
60
|
+
// else the Issue the checkout's branch names, so a person's `fullrun` on `3423-x` is one finder across
|
|
61
|
+
// its filings just as a lane child is. A checkout on no Issue's branch — a `backlogrun` parent on
|
|
62
|
+
// `main` — has none unless the filing names one.
|
|
63
|
+
async function finder(named?: string): Promise<string | undefined> {
|
|
64
|
+
if (named !== undefined) return named
|
|
62
65
|
const marked = lane_child_marker.marked_issue()
|
|
63
66
|
|
|
64
67
|
if (marked !== undefined) return marked
|
|
@@ -76,6 +79,17 @@ async function events_of(found_during: string | undefined): Promise<ReadonlyArra
|
|
|
76
79
|
return await run_event_stream_emit.all_events()
|
|
77
80
|
}
|
|
78
81
|
|
|
82
|
+
// The finder's filings on the events, in every repository.
|
|
83
|
+
function finder_filings(
|
|
84
|
+
events: ReadonlyArray<RunEvent>,
|
|
85
|
+
found_during: string | undefined,
|
|
86
|
+
): ReadonlyArray<Filed> {
|
|
87
|
+
return events
|
|
88
|
+
.filter((event) => event.kind === run_event_stream.EVENT_KIND.FILED)
|
|
89
|
+
.flatMap((event) => run_event_filed.parse(event.text) ?? [])
|
|
90
|
+
.filter((filed) => filed.found_during === found_during)
|
|
91
|
+
}
|
|
92
|
+
|
|
79
93
|
// This run's earlier filings by the same finder — so a parallel lane's filing is never what this one
|
|
80
94
|
// folds into — in the repository this filing targets. One the caller named in `--distinct` has been
|
|
81
95
|
// declared a separate deliverable and is left out, the same declaration the scout's candidates take.
|
|
@@ -85,10 +99,8 @@ function prior_filings(
|
|
|
85
99
|
prefix: string,
|
|
86
100
|
distinct: ReadonlyArray<number>,
|
|
87
101
|
): ReadonlyArray<Filed> {
|
|
88
|
-
return events
|
|
89
|
-
.filter((
|
|
90
|
-
.flatMap((event) => run_event_filed.parse(event.text) ?? [])
|
|
91
|
-
.filter((filed) => filed.found_during === found_during && prefix_of(filed.reference) === prefix)
|
|
102
|
+
return finder_filings(events, found_during)
|
|
103
|
+
.filter((filed) => prefix_of(filed.reference) === prefix)
|
|
92
104
|
.filter((filed) => !distinct.includes(number_of(filed.reference)))
|
|
93
105
|
}
|
|
94
106
|
|
|
@@ -136,7 +148,7 @@ function held_message(priors: ReadonlyArray<Filed>): string {
|
|
|
136
148
|
// exempt, as it is from the WIP cap: the split assessment already decided it is a separate deliverable.
|
|
137
149
|
async function is_fold_clear(prefix: string, args: FoldArguments): Promise<boolean> {
|
|
138
150
|
if (args.route === SPLIT_ROUTE_LABEL) return true
|
|
139
|
-
const found_during = await finder()
|
|
151
|
+
const found_during = await finder(args.found_during)
|
|
140
152
|
const filings = prior_filings(await events_of(found_during), found_during, prefix, args.distinct)
|
|
141
153
|
const priors = await open_filings(filings, prefix)
|
|
142
154
|
|
|
@@ -150,6 +162,13 @@ async function is_fold_clear(prefix: string, args: FoldArguments): Promise<boole
|
|
|
150
162
|
return verdict !== issue_fold.FOLD
|
|
151
163
|
}
|
|
152
164
|
|
|
153
|
-
const issue_file_fold = {
|
|
165
|
+
const issue_file_fold = {
|
|
166
|
+
events_of,
|
|
167
|
+
finder,
|
|
168
|
+
finder_filings,
|
|
169
|
+
is_fold_clear,
|
|
170
|
+
prior_filings,
|
|
171
|
+
reference_prefix,
|
|
172
|
+
}
|
|
154
173
|
|
|
155
174
|
export { issue_file_fold }
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { epic_relations } from '#scripts/epic/epic-relations'
|
|
2
|
+
import { git_gh_api_path } from '#scripts/gh/git-gh-api-path'
|
|
3
|
+
import { INTERRUPT_ROUTE_LABEL } from './issue-labels'
|
|
4
|
+
import { session_cite } from './session-cite'
|
|
5
|
+
|
|
6
|
+
// What `josh issue:file` just filed on `--route interrupt --blocks-finder`: the Issue whose work turned
|
|
7
|
+
// the defect up is recorded as blocked by it, in the same command as the filing — so a session that
|
|
8
|
+
// dies after the filing still leaves the dispatch a relation that keeps the finder back until the
|
|
9
|
+
// interrupt lands (`upstream-interrupt.md` → the run-machinery case). An interrupt that blocks nobody
|
|
10
|
+
// (`wip-cap.md` → the three conditions) omits the flag, since a relation there is a false dependency.
|
|
11
|
+
// Written through the relation path epic creation and `epic --add` use, and only for a filing in this
|
|
12
|
+
// repository: the relation write resolves both numbers here.
|
|
13
|
+
//
|
|
14
|
+
// The Issue already exists, so a failed write is reported rather than failed, for the reason
|
|
15
|
+
// `issue-file-cli.ts` → `place` gives.
|
|
16
|
+
|
|
17
|
+
interface InterruptFiling {
|
|
18
|
+
route: string | undefined
|
|
19
|
+
is_blocking_finder: boolean
|
|
20
|
+
found_during: string | undefined
|
|
21
|
+
blocker: number
|
|
22
|
+
is_here: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function is_issue_number(value: number): boolean {
|
|
26
|
+
return Number.isSafeInteger(value) && value > 0
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function finder_of(filing: InterruptFiling): number | undefined {
|
|
30
|
+
if (filing.route !== INTERRUPT_ROUTE_LABEL || !filing.is_here) return undefined
|
|
31
|
+
const finder = Number(filing.found_during)
|
|
32
|
+
|
|
33
|
+
return is_issue_number(finder) ? finder : undefined
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// An explicit `--blocks-finder` that records nothing is said, so the caller does not read the
|
|
37
|
+
// silence as a recorded relation and leave the finder dispatchable.
|
|
38
|
+
function ignored_line(filing: InterruptFiling): string {
|
|
39
|
+
const reason =
|
|
40
|
+
filing.route === INTERRUPT_ROUTE_LABEL
|
|
41
|
+
? 'no finder and filed Issue pair in this repository was read'
|
|
42
|
+
: 'it applies to `--route interrupt` only'
|
|
43
|
+
|
|
44
|
+
return `⚠ --blocks-finder recorded nothing: ${reason}.`
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// The re-run writes the one relation and nothing else — no epic placement and no chain splice, which
|
|
48
|
+
// would record dependencies the interrupt does not have.
|
|
49
|
+
function failure_line(blocked: number, blocker: number): string {
|
|
50
|
+
const path = git_gh_api_path.blocked_by_api_path(String(blocked))
|
|
51
|
+
const id = `$(gh api ${git_gh_api_path.issue_api_path(String(blocker))} --jq .id)`
|
|
52
|
+
const cited = `${session_cite.issue(blocked)} could not be recorded as blocked by ${session_cite.issue(blocker)}`
|
|
53
|
+
|
|
54
|
+
return `⚠ ${cited} — run \`gh api ${path} -F issue_id=${id}\`.`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function record(blocked: number, blocker: number): Promise<void> {
|
|
58
|
+
const links = [{ blocked, blocker }]
|
|
59
|
+
const failures = await epic_relations.apply_relations(links, 'record')
|
|
60
|
+
|
|
61
|
+
if (failures === 0) {
|
|
62
|
+
console.info(epic_relations.format_relation_report({ links, failures, action: 'record' }))
|
|
63
|
+
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
console.error(failure_line(blocked, blocker))
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async function block_finder(filing: InterruptFiling): Promise<void> {
|
|
71
|
+
if (!filing.is_blocking_finder) return
|
|
72
|
+
const blocked = finder_of(filing)
|
|
73
|
+
|
|
74
|
+
if (blocked === undefined || !is_issue_number(filing.blocker)) {
|
|
75
|
+
console.warn(ignored_line(filing))
|
|
76
|
+
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
await record(blocked, filing.blocker)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const issue_file_interrupt = { block_finder }
|
|
84
|
+
|
|
85
|
+
export { issue_file_interrupt }
|