@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,83 @@
|
|
|
1
|
+
import { mkdtempSync, writeFileSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { capped_output } from '#scripts/document/capped-print'
|
|
4
|
+
import { capped_print_part } from '#scripts/document/capped-print-part'
|
|
5
|
+
import { document_section } from '#scripts/document/document-section'
|
|
6
|
+
import { document_section_cli } from '#scripts/document/document-section-cli'
|
|
7
|
+
import { PLATFORM_TEMP_ROOT } from '#scripts/josh/platform-temporary'
|
|
8
|
+
import { run_prep, type PrepParts } from '#scripts/run/run-prep'
|
|
9
|
+
import { run_step_section } from '#scripts/run/run-step-section'
|
|
10
|
+
|
|
11
|
+
// The `run:prep` bundle `run:entry` prints, kept under the Bash result cap (joshuafolkken/kit#5213).
|
|
12
|
+
// Past the cap the harness hands back a preview, and a lane child re-ran `run:entry` into a file to see
|
|
13
|
+
// the rest — two calls and two copies of the bundle in the context the implementation cut is measured on.
|
|
14
|
+
//
|
|
15
|
+
// **Over the budget, the whole bundle goes to one file and the issue section becomes its path.** The
|
|
16
|
+
// stage, the `entry` line, the `prep` summary and the short sections stay inline, so the run still
|
|
17
|
+
// branches on what it printed; the issue body and comments — the one unbounded section — are read from
|
|
18
|
+
// the file. A bundle still over the budget without them keeps only the summary and the path.
|
|
19
|
+
//
|
|
20
|
+
// **The file has `capped_print`'s shape** — a fresh directory per call holding one part — so the
|
|
21
|
+
// investigation guard already reads it as a session artifact, not as the Issue's subject.
|
|
22
|
+
//
|
|
23
|
+
// **The budget is `capped_output`'s, less what shares the same Bash result**: the split assessment's
|
|
24
|
+
// section `run:entry` prints after the bundle, and a second headroom for the stage line and the
|
|
25
|
+
// stderr the hold forwards before it.
|
|
26
|
+
|
|
27
|
+
const FILE_MODE = 0o600
|
|
28
|
+
const SECTION_SEPARATOR = '\n\n'
|
|
29
|
+
|
|
30
|
+
function byte_length(text: string): number {
|
|
31
|
+
return Buffer.byteLength(text, 'utf8')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function entry_section_length(root: string): number {
|
|
35
|
+
const found = run_step_section.GOVERNING_SECTIONS.get(run_step_section.ENTRY)
|
|
36
|
+
|
|
37
|
+
if (found === undefined) return 0
|
|
38
|
+
|
|
39
|
+
const file = document_section_cli.resolve_document(found.document, root)
|
|
40
|
+
const markdown = document_section.read_optional(file) ?? ''
|
|
41
|
+
|
|
42
|
+
return byte_length(document_section.section(markdown, found.heading)?.text ?? '')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function report_budget(root: string): number {
|
|
46
|
+
const shared = entry_section_length(root) + capped_output.HEADROOM_CHARS
|
|
47
|
+
|
|
48
|
+
return capped_output.output_budget(root) - shared
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function spill(whole: string): string {
|
|
52
|
+
const directory = mkdtempSync(path.join(PLATFORM_TEMP_ROOT, capped_print_part.DIRECTORY_PREFIX))
|
|
53
|
+
const file = path.join(directory, capped_print_part.part_name(0))
|
|
54
|
+
const size = byte_length(whole).toLocaleString('en-US')
|
|
55
|
+
|
|
56
|
+
writeFileSync(file, whole, { flag: 'wx', mode: FILE_MODE })
|
|
57
|
+
|
|
58
|
+
return `Over the Bash cap — the whole bundle (${size} B, the issue body and comments included) is written to ${file}; read it with the Read tool, once, not cat.`
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// `compose` turns a report into the text `run:entry` prints for it, so the measure is of what reaches
|
|
62
|
+
// the Bash result — the `entry` line and the cited links included — not of the report alone.
|
|
63
|
+
function fit(
|
|
64
|
+
parts: PrepParts,
|
|
65
|
+
compose: (report: string) => string,
|
|
66
|
+
root: string = process.cwd(),
|
|
67
|
+
): string {
|
|
68
|
+
const budget = report_budget(root)
|
|
69
|
+
const whole = run_prep.format_report(parts)
|
|
70
|
+
|
|
71
|
+
if (byte_length(compose(whole)) <= budget) return whole
|
|
72
|
+
|
|
73
|
+
const line = spill(whole)
|
|
74
|
+
const trimmed = run_prep.format_report({ ...parts, content_body: line })
|
|
75
|
+
|
|
76
|
+
if (byte_length(compose(trimmed)) <= budget) return trimmed
|
|
77
|
+
|
|
78
|
+
return [run_prep.summary(parts), line].join(SECTION_SEPARATOR)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const run_entry_spill = { fit, report_budget }
|
|
82
|
+
|
|
83
|
+
export { run_entry_spill }
|
|
@@ -23,6 +23,8 @@ interface StopNotice {
|
|
|
23
23
|
command: string
|
|
24
24
|
reason: string
|
|
25
25
|
should_release: boolean
|
|
26
|
+
// The choice the Telegram recommends where a rerun alone would stop the same way again.
|
|
27
|
+
recommended?: string
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
interface StopPorts {
|
|
@@ -79,7 +81,9 @@ async function notify_stop(notice: StopNotice, ports: StopPorts): Promise<void>
|
|
|
79
81
|
issue_title: `${notice.command} ${issue_cite.plain(notice.issue_number)} stopped`,
|
|
80
82
|
body: body_of(notice),
|
|
81
83
|
recovery: RECOVERY,
|
|
82
|
-
recommended:
|
|
84
|
+
recommended:
|
|
85
|
+
notice.recommended ??
|
|
86
|
+
`Run \`${notice.command} ${issue_cite.plain(notice.issue_number)}\` again in a fresh session`,
|
|
83
87
|
alternatives: [LATER_ALTERNATIVE],
|
|
84
88
|
})
|
|
85
89
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import type { BlockRead, BlockTrust } from '#scripts/issue/issue-read-cli'
|
|
3
|
+
import { issue_state } from '#scripts/issue/issue-state'
|
|
4
|
+
import type { StateRead } from '#scripts/issue/issue-state-cli'
|
|
5
|
+
|
|
6
|
+
// **An issue filed by an author without write access is not run on its own body**
|
|
7
|
+
// (joshuafolkken/kit#4663). `backlogrun` never offers one, but a person can still name it as
|
|
8
|
+
// `fullrun #N`, and its body would then reach the run as the specification. The run goes ahead only
|
|
9
|
+
// once a trusted person has planned it with `kickoff #N` — the `run:planned` label and a comment from
|
|
10
|
+
// an author with write access, the plan the run then follows instead of the body. Both, because the
|
|
11
|
+
// label alone is within triage access and a trusted comment alone may be an automated one.
|
|
12
|
+
//
|
|
13
|
+
// Decided from the reads `run:prep` already made, so the gate costs no further call. A read that
|
|
14
|
+
// failed is not judged here: `run:entry` already exits non-zero on it.
|
|
15
|
+
//
|
|
16
|
+
// **A trust read that failed stops as the failed read it is** (#4703) — a write-access lookup, the
|
|
17
|
+
// comment listing or the label read that answered nothing still stops the run, but naming an
|
|
18
|
+
// untrusted author there sends a person to plan an issue whose author may well be trusted.
|
|
19
|
+
|
|
20
|
+
const STOP_REASON =
|
|
21
|
+
'the issue author does not have write access, and no trusted `kickoff` plan is on the issue'
|
|
22
|
+
const UNREAD_REASON =
|
|
23
|
+
'the write-access lookup, the comment listing or the label read failed, so whether the issue may run on its body could not be read'
|
|
24
|
+
const UNREAD_REMEDY = 'Check `gh auth status` and the network, then run it again'
|
|
25
|
+
|
|
26
|
+
// What a stopped run prints, notifies and recommends.
|
|
27
|
+
interface TrustStop {
|
|
28
|
+
reason: string
|
|
29
|
+
report: string
|
|
30
|
+
recommended: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// The remedy, named with the issue: a trusted person's `kickoff` writes the plan the run will follow.
|
|
34
|
+
function recommended(issue_number: string): string {
|
|
35
|
+
return `Have a person with write access run \`kickoff ${issue_cite.plain(issue_number)}\`, then run it again`
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function untrusted_stop(issue_number: string): TrustStop {
|
|
39
|
+
const remedy = recommended(issue_number)
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
reason: STOP_REASON,
|
|
43
|
+
report: `(issue author not trusted — ${remedy})`,
|
|
44
|
+
recommended: remedy,
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const UNREAD_STOP: TrustStop = {
|
|
49
|
+
reason: UNREAD_REASON,
|
|
50
|
+
report: `(issue trust read failed — ${UNREAD_REMEDY})`,
|
|
51
|
+
recommended: UNREAD_REMEDY,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Not cleared, and the read that would have cleared it answered nothing — a label read that failed
|
|
55
|
+
// leaves the plan unknown unless the comment listing already ruled it out.
|
|
56
|
+
function is_unread(trust: BlockTrust, state: StateRead): boolean {
|
|
57
|
+
const { is_body_trusted, has_trusted_comment } = trust
|
|
58
|
+
|
|
59
|
+
if (is_body_trusted === undefined) return true
|
|
60
|
+
|
|
61
|
+
const can_be_planned = state.kind !== 'state' || issue_state.is_planned(state)
|
|
62
|
+
|
|
63
|
+
return can_be_planned && has_trusted_comment !== false
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// The plan is asked only of a body not already trusted — the state read is not needed otherwise.
|
|
67
|
+
function untrusted_body_stop(
|
|
68
|
+
trust: BlockTrust,
|
|
69
|
+
state: StateRead,
|
|
70
|
+
issue_number: string,
|
|
71
|
+
): TrustStop | undefined {
|
|
72
|
+
if (issue_state.is_planned(state) && trust.has_trusted_comment === true) return undefined
|
|
73
|
+
|
|
74
|
+
return is_unread(trust, state) ? UNREAD_STOP : untrusted_stop(issue_number)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// The stop an issue's trust calls for, or `undefined` when the run may go ahead.
|
|
78
|
+
function stop_of(
|
|
79
|
+
content: BlockRead,
|
|
80
|
+
state: StateRead,
|
|
81
|
+
issue_number: string,
|
|
82
|
+
): TrustStop | undefined {
|
|
83
|
+
if (content.kind !== 'ok' || content.trust.is_body_trusted === true) return undefined
|
|
84
|
+
|
|
85
|
+
return untrusted_body_stop(content.trust, state, issue_number)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const run_entry_trust = { STOP_REASON, UNREAD_REASON, stop_of }
|
|
89
|
+
|
|
90
|
+
export type { TrustStop }
|
|
91
|
+
export { run_entry_trust }
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// The wording of the baseline investigation's notes on the run's event stream (joshuafolkken/kit#4887):
|
|
2
|
+
// `lane-baseline.ts` writes the launch and a failure, the session it launches writes its result, and
|
|
3
|
+
// `lane-baseline.ts` reads them back so a merge count is investigated once. `run:board` shows each as a
|
|
4
|
+
// note, since none reads as an overrun note.
|
|
5
|
+
|
|
6
|
+
const MERGES_PATTERN = /^baseline @(?<merges>\d+) merges: (?<rest>.*)$/u
|
|
7
|
+
const STARTED_PREFIX = 'started — '
|
|
8
|
+
const FAILED_PREFIX = 'baseline investigation failed: '
|
|
9
|
+
|
|
10
|
+
type BaselineNote =
|
|
11
|
+
| { kind: 'started'; merges: number; outcome: string }
|
|
12
|
+
| { kind: 'ended'; merges: number; result: string }
|
|
13
|
+
| { kind: 'failed'; note: string }
|
|
14
|
+
|
|
15
|
+
function merges_text(merges: number, rest: string): string {
|
|
16
|
+
return `baseline @${String(merges)} merges: ${rest}`
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// The launch at the `merges`-th merge, and what became of it.
|
|
20
|
+
function started_text(merges: number, outcome: string): string {
|
|
21
|
+
return merges_text(merges, `${STARTED_PREFIX}${outcome}`)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// The session's result — the overrun investigation's vocabulary (`lane-overrun-prompt.ts`).
|
|
25
|
+
function ended_text(merges: number, result: string): string {
|
|
26
|
+
return merges_text(merges, result)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// A failure — reading the ledger, or the launch itself — names no merge count, so a later merge asks
|
|
30
|
+
// again.
|
|
31
|
+
function failed_text(note: string): string {
|
|
32
|
+
return `${FAILED_PREFIX}${note}`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function merges_note(merges: number, rest: string): BaselineNote {
|
|
36
|
+
if (rest.startsWith(STARTED_PREFIX)) {
|
|
37
|
+
return { kind: 'started', merges, outcome: rest.slice(STARTED_PREFIX.length) }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return { kind: 'ended', merges, result: rest }
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function parse(text: string): BaselineNote | undefined {
|
|
44
|
+
const note = text.slice(FAILED_PREFIX.length)
|
|
45
|
+
|
|
46
|
+
if (text.startsWith(FAILED_PREFIX)) return { kind: 'failed', note }
|
|
47
|
+
|
|
48
|
+
const groups = MERGES_PATTERN.exec(text)?.groups
|
|
49
|
+
|
|
50
|
+
return groups ? merges_note(Number(groups['merges']), groups['rest'] ?? '') : undefined
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const run_event_baseline = { ended_text, failed_text, parse, started_text }
|
|
54
|
+
|
|
55
|
+
export type { BaselineNote }
|
|
56
|
+
export { run_event_baseline }
|
|
@@ -39,10 +39,6 @@ const TEXT_INDEX = 2
|
|
|
39
39
|
const USAGE =
|
|
40
40
|
'Usage: josh run:event --append <kind> <text> | --from <position> | --follow <position> | --watch [<position>] | --last'
|
|
41
41
|
|
|
42
|
-
function now_iso(): string {
|
|
43
|
-
return new Date().toISOString()
|
|
44
|
-
}
|
|
45
|
-
|
|
46
42
|
function report_usage(): number {
|
|
47
43
|
process.stderr.write(`${USAGE}\n`)
|
|
48
44
|
|
|
@@ -54,7 +50,7 @@ async function run_append(kind: string, text: string): Promise<number> {
|
|
|
54
50
|
|
|
55
51
|
if (target === undefined) return report_usage()
|
|
56
52
|
|
|
57
|
-
const result =
|
|
53
|
+
const result = await run_event_stream_emit.append_at(target, kind, text, new Date())
|
|
58
54
|
|
|
59
55
|
if (!result.appended) {
|
|
60
56
|
process.stderr.write(`not a session-facing event kind: ${kind}\n`)
|
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
has_label_name,
|
|
7
7
|
} from '#scripts/issue/issue-labels'
|
|
8
8
|
|
|
9
|
-
// The text of a `filed` event: the Issue a run filed, its kind, its title,
|
|
10
|
-
// turned it up. `issue:file` writes it and `run:board` reads it
|
|
11
|
-
// two never spell it differently.
|
|
9
|
+
// The text of a `filed` event: the Issue a run filed, its kind, its title, whether a run's own session
|
|
10
|
+
// filed it, and the child whose work turned it up. `issue:file` writes it and `run:board` reads it
|
|
11
|
+
// back, both through this module, so the two never spell it differently.
|
|
12
12
|
|
|
13
13
|
// The classification labels a filing's kind is read from, in precedence order: a breaking change is
|
|
14
14
|
// named as one whatever else it is.
|
|
@@ -25,13 +25,22 @@ interface Filed {
|
|
|
25
25
|
title: string
|
|
26
26
|
// The lane child that was working when the Issue was filed, when the filing came from one.
|
|
27
27
|
found_during: string | undefined
|
|
28
|
+
// A run's own session filed it — the parent holding the run's hold or a lane child — rather than one
|
|
29
|
+
// outside the run sharing the repository's stream (joshuafolkken/kit#4099). An event written before
|
|
30
|
+
// the mark was recorded reads as filed outside.
|
|
31
|
+
is_run?: boolean | undefined
|
|
32
|
+
// A lane's overrun investigation filed it, not the child (joshuafolkken/kit#4880). An event written
|
|
33
|
+
// before the mark was recorded reads as the child's.
|
|
34
|
+
is_overrun?: boolean | undefined
|
|
28
35
|
}
|
|
29
36
|
|
|
30
37
|
// The kind slot is always written, `[<label>]` or `[]`, against the reference with no space: an event
|
|
31
38
|
// written before the kind always has the space there, so no title, whatever it opens with, reads as a
|
|
32
|
-
// kind.
|
|
39
|
+
// kind. The run's mark follows the kind slot, then the overrun's, again with no space.
|
|
40
|
+
const RUN_MARK = '[run]'
|
|
41
|
+
const OVERRUN_MARK = '[overrun]'
|
|
33
42
|
const TEXT_PATTERN = new RegExp(
|
|
34
|
-
String.raw`^(?<reference>\S*#\d+)(?:\[(?<kind>${KINDS.join('|')}|)\])? (?<title>.*?)(?: \(found during #(?<during>\d+)\))?$`,
|
|
43
|
+
String.raw`^(?<reference>\S*#\d+)(?:\[(?<kind>${KINDS.join('|')}|)\](?<run>\[run\])?(?<overrun>\[overrun\])?)? (?<title>.*?)(?: \(found during #(?<during>\d+)\))?$`,
|
|
35
44
|
'u',
|
|
36
45
|
)
|
|
37
46
|
|
|
@@ -41,7 +50,8 @@ function kind_of(labels: ReadonlyArray<string>): FiledKind | undefined {
|
|
|
41
50
|
}
|
|
42
51
|
|
|
43
52
|
function text_of(filed: Filed): string {
|
|
44
|
-
const
|
|
53
|
+
const marks = `${filed.is_run === true ? RUN_MARK : ''}${filed.is_overrun === true ? OVERRUN_MARK : ''}`
|
|
54
|
+
const kind = `[${filed.kind ?? ''}]${marks}`
|
|
45
55
|
const suffix =
|
|
46
56
|
filed.found_during === undefined
|
|
47
57
|
? ''
|
|
@@ -60,6 +70,8 @@ function parse(text: string): Filed | undefined {
|
|
|
60
70
|
kind: KINDS.find((kind) => kind === groups['kind']),
|
|
61
71
|
title: String(groups['title']),
|
|
62
72
|
found_during: groups['during'],
|
|
73
|
+
is_run: groups['run'] !== undefined,
|
|
74
|
+
is_overrun: groups['overrun'] !== undefined,
|
|
63
75
|
}
|
|
64
76
|
}
|
|
65
77
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MS_PER_MINUTE, MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
1
2
|
import type { StreamRead } from './run-event-stream'
|
|
2
3
|
|
|
3
4
|
// The follow read behind `josh run:event --follow` and `--watch`. A reader
|
|
@@ -24,10 +25,8 @@ import type { StreamRead } from './run-event-stream'
|
|
|
24
25
|
// The follow's quiet-tick cadence and how promptly it notices an arrival. The interval only bounds a
|
|
25
26
|
// wait that found nothing — an arrival returns within a tick of landing — so it can be as long as the
|
|
26
27
|
// heartbeat without making an arrival late, and the tick is a cheap `stat` of one file.
|
|
27
|
-
const MS_PER_SECOND = 1000
|
|
28
|
-
const SECONDS_PER_MINUTE = 60
|
|
29
28
|
const FOLLOW_INTERVAL_MINUTES = 20
|
|
30
|
-
const FOLLOW_INTERVAL_MS = FOLLOW_INTERVAL_MINUTES *
|
|
29
|
+
const FOLLOW_INTERVAL_MS = FOLLOW_INTERVAL_MINUTES * MS_PER_MINUTE
|
|
31
30
|
const FOLLOW_TICK_MS = MS_PER_SECOND
|
|
32
31
|
|
|
33
32
|
interface FollowPorts {
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
|
|
3
|
+
// The notes an overrun investigation leaves on the run's event stream (joshuafolkken/kit#4751): every
|
|
4
|
+
// merged lane's net time, at or under the threshold or over it, or why there is none
|
|
5
|
+
// (joshuafolkken/kit#4818); an overrun's start, naming the session's pid and start time; and its end —
|
|
6
|
+
// the session's result or the launch's failure. `lane-overrun.ts` writes them and `run:board` reads them
|
|
7
|
+
// back, both through this module, so the two never spell them differently.
|
|
8
|
+
|
|
9
|
+
// What a note says of the investigation of `issue`. `start` is the session's `process_identity` start
|
|
10
|
+
// token, which tells the session from a later process holding its pid; a launcher that could not read it
|
|
11
|
+
// leaves it off. A start note that launched no session is a failure with its minutes.
|
|
12
|
+
type OverrunNote =
|
|
13
|
+
| { kind: 'within'; issue: number; minutes: number }
|
|
14
|
+
| { kind: 'skipped'; issue: number; reason: string }
|
|
15
|
+
| {
|
|
16
|
+
kind: 'started'
|
|
17
|
+
issue: number
|
|
18
|
+
minutes: number
|
|
19
|
+
pid: number
|
|
20
|
+
start: string | undefined
|
|
21
|
+
longest: Longest | undefined
|
|
22
|
+
}
|
|
23
|
+
| { kind: 'ended'; issue: number; result: string }
|
|
24
|
+
| { kind: 'failed'; issue: number; minutes: number | undefined }
|
|
25
|
+
|
|
26
|
+
// The lane's longest stage in whole minutes (joshuafolkken/kit#4995, `lane-breakdown.ts`); a start note
|
|
27
|
+
// written before it was carried has none.
|
|
28
|
+
interface Longest {
|
|
29
|
+
name: string
|
|
30
|
+
minutes: number
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type Groups = Partial<Record<string, string>>
|
|
34
|
+
|
|
35
|
+
const WITHIN_PATTERN = /^#(?<issue>\d+) net: (?<minutes>\d+) min$/u
|
|
36
|
+
const SKIPPED_PATTERN = /^#(?<issue>\d+) overrun skipped: (?<reason>.+)$/u
|
|
37
|
+
const OVERRAN_PATTERN =
|
|
38
|
+
/^#(?<issue>\d+) overran: (?<minutes>\d+) min net(?:, longest (?<stage>.+?) (?<stage_minutes>\d+) min)? — (?<outcome>.*)$/u
|
|
39
|
+
const INVESTIGATING_PATTERN = /^investigating in pid (?<pid>\d+)(?: started (?<start>.+))?$/u
|
|
40
|
+
const ENDED_PATTERN = /^#(?<issue>\d+) overrun: (?<result>.*)$/u
|
|
41
|
+
const FAILED_PATTERN = /^#(?<issue>\d+) overrun investigation failed: /u
|
|
42
|
+
|
|
43
|
+
// Why an overrun was skipped with the switch off (joshuafolkken/kit#5044); the board draws it only
|
|
44
|
+
// once the switch is on, hiding every merged row's minutes and skip while it stays off
|
|
45
|
+
// (joshuafolkken/kit#5132, joshuafolkken/kit#5194).
|
|
46
|
+
const DISABLED_REASON = 'disabled (JOSH_LANE_INVESTIGATION is not on)'
|
|
47
|
+
// The result an investigation that filed records; the board shows the filings themselves.
|
|
48
|
+
const FILED_RESULT = 'filed'
|
|
49
|
+
const NONE_LEAD = 'none: '
|
|
50
|
+
// What a result ends with for the stages the investigation judged not reducible (joshuafolkken/kit#4995).
|
|
51
|
+
const NOT_REDUCIBLE_LEAD = '; not reducible: '
|
|
52
|
+
const RECURRED_PATTERN = /^recurred #(?<number>\d+)/u
|
|
53
|
+
// The result of an investigation that appended causes to open Issues, which file no new one
|
|
54
|
+
// (joshuafolkken/kit#4858); any it filed besides show as filings.
|
|
55
|
+
const FOLDED_LEAD = 'folded '
|
|
56
|
+
const FOLDED_SEPARATOR = ','
|
|
57
|
+
const FOLDED_PATTERN = /^folded (?<list>#\d+(?:,#\d+)*)/u
|
|
58
|
+
const NUMBER_PATTERN = /#(?<number>\d+)/gu
|
|
59
|
+
|
|
60
|
+
function started_text(issue: number, minutes: number, outcome: string, longest?: Longest): string {
|
|
61
|
+
const stage =
|
|
62
|
+
longest === undefined ? '' : `, longest ${longest.name} ${String(longest.minutes)} min`
|
|
63
|
+
|
|
64
|
+
return `${issue_cite.plain(issue)} overran: ${String(minutes)} min net${stage} — ${outcome}`
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function within_text(issue: number, minutes: number): string {
|
|
68
|
+
return `${issue_cite.plain(issue)} net: ${String(minutes)} min`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function skipped_text(issue: number, reason: string): string {
|
|
72
|
+
return `${issue_cite.plain(issue)} overrun skipped: ${reason}`
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// The start note's outcome for a launched session.
|
|
76
|
+
function investigating(pid: number, start: string | undefined): string {
|
|
77
|
+
const outcome = `investigating in pid ${String(pid)}`
|
|
78
|
+
|
|
79
|
+
return start === undefined ? outcome : `${outcome} started ${start}`
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function ended_text(issue: number, result: string): string {
|
|
83
|
+
return `${issue_cite.plain(issue)} overrun: ${result}`
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function failed_text(issue: number, note: string): string {
|
|
87
|
+
return `${issue_cite.plain(issue)} overrun investigation failed: ${note}`
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function none_result(reason: string): string {
|
|
91
|
+
return `${NONE_LEAD}${reason}`
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function recurred_result(issue: number | string): string {
|
|
95
|
+
return `recurred ${issue_cite.plain(issue)}`
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// The issue a `recurred #N` result commented on.
|
|
99
|
+
function recurred_of(result: string): number | undefined {
|
|
100
|
+
const number = RECURRED_PATTERN.exec(result)?.groups?.['number']
|
|
101
|
+
|
|
102
|
+
return number === undefined ? undefined : Number(number)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function folded_result(issues: ReadonlyArray<number | string>): string {
|
|
106
|
+
return `${FOLDED_LEAD}${issues.map((issue) => issue_cite.plain(issue)).join(FOLDED_SEPARATOR)}`
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// The Issues a `folded #A,#B` result appended to, else none; any text after the list is not read.
|
|
110
|
+
function folded_of(result: string): ReadonlyArray<number> {
|
|
111
|
+
const list = FOLDED_PATTERN.exec(result)?.groups?.['list'] ?? ''
|
|
112
|
+
|
|
113
|
+
return [...list.matchAll(NUMBER_PATTERN)].map((match) => Number(match.groups?.['number']))
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// The reason a `none: <reason>` result gives, else the result as it is — its stages not reducible left
|
|
117
|
+
// out.
|
|
118
|
+
function reason_of(result: string): string {
|
|
119
|
+
const [lead = ''] = result.split(NOT_REDUCIBLE_LEAD)
|
|
120
|
+
|
|
121
|
+
return lead.startsWith(NONE_LEAD) ? lead.slice(NONE_LEAD.length) : lead
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function longest_of(groups: Groups): Longest | undefined {
|
|
125
|
+
const name = groups['stage']
|
|
126
|
+
|
|
127
|
+
return name === undefined ? undefined : { name, minutes: Number(groups['stage_minutes']) }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function overran(groups: Groups): OverrunNote {
|
|
131
|
+
const issue = Number(groups['issue'])
|
|
132
|
+
const minutes = Number(groups['minutes'])
|
|
133
|
+
const launched = INVESTIGATING_PATTERN.exec(groups['outcome'] ?? '')?.groups
|
|
134
|
+
|
|
135
|
+
if (launched === undefined) return { kind: 'failed', issue, minutes }
|
|
136
|
+
|
|
137
|
+
const pid = Number(launched['pid'])
|
|
138
|
+
const longest = longest_of(groups)
|
|
139
|
+
|
|
140
|
+
return { kind: 'started', issue, minutes, pid, start: launched['start'], longest }
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function within(groups: Groups): OverrunNote {
|
|
144
|
+
return { kind: 'within', issue: Number(groups['issue']), minutes: Number(groups['minutes']) }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function skipped(groups: Groups): OverrunNote {
|
|
148
|
+
return { kind: 'skipped', issue: Number(groups['issue']), reason: groups['reason'] ?? '' }
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function failed(groups: Groups): OverrunNote {
|
|
152
|
+
return { kind: 'failed', issue: Number(groups['issue']), minutes: undefined }
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function ended(groups: Groups): OverrunNote {
|
|
156
|
+
return { kind: 'ended', issue: Number(groups['issue']), result: groups['result'] ?? '' }
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const READERS: ReadonlyArray<readonly [RegExp, (groups: Groups) => OverrunNote]> = [
|
|
160
|
+
[WITHIN_PATTERN, within],
|
|
161
|
+
[SKIPPED_PATTERN, skipped],
|
|
162
|
+
[OVERRAN_PATTERN, overran],
|
|
163
|
+
[FAILED_PATTERN, failed],
|
|
164
|
+
[ENDED_PATTERN, ended],
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
function parse(text: string): OverrunNote | undefined {
|
|
168
|
+
for (const [pattern, read] of READERS) {
|
|
169
|
+
const groups = pattern.exec(text)?.groups
|
|
170
|
+
|
|
171
|
+
if (groups !== undefined) return read(groups)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return undefined
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const run_event_overrun = {
|
|
178
|
+
DISABLED_REASON,
|
|
179
|
+
ended_text,
|
|
180
|
+
failed_text,
|
|
181
|
+
FILED_RESULT,
|
|
182
|
+
folded_of,
|
|
183
|
+
folded_result,
|
|
184
|
+
investigating,
|
|
185
|
+
none_result,
|
|
186
|
+
NOT_REDUCIBLE_LEAD,
|
|
187
|
+
parse,
|
|
188
|
+
reason_of,
|
|
189
|
+
recurred_of,
|
|
190
|
+
recurred_result,
|
|
191
|
+
skipped_text,
|
|
192
|
+
started_text,
|
|
193
|
+
within_text,
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export { run_event_overrun }
|
|
197
|
+
export type { Longest, OverrunNote }
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { figure_format } from '#scripts/lib/figure-format'
|
|
1
2
|
import type { EventKind, RunEvent } from './run-event-stream'
|
|
2
3
|
|
|
3
4
|
// One run event as the line a person reads in the watch pane. The pane is a script, not a session, so
|
|
@@ -10,8 +11,6 @@ import type { EventKind, RunEvent } from './run-event-stream'
|
|
|
10
11
|
|
|
11
12
|
const JA = 'ja'
|
|
12
13
|
const FIELD_SEPARATOR = ' · '
|
|
13
|
-
const CLOCK_WIDTH = 2
|
|
14
|
-
const CLOCK_PAD = '0'
|
|
15
14
|
|
|
16
15
|
interface KindLabel {
|
|
17
16
|
ja: string
|
|
@@ -26,6 +25,7 @@ const KIND_LABELS: Readonly<Record<EventKind, KindLabel>> = {
|
|
|
26
25
|
park: { ja: '保留', en: 'parked' },
|
|
27
26
|
split: { ja: '分割', en: 'split' },
|
|
28
27
|
outage: { ja: '障害', en: 'outage' },
|
|
28
|
+
'usage-limit': { ja: '利用上限', en: 'usage limit' },
|
|
29
29
|
cut: { ja: 'セッション交代', en: 'session cut' },
|
|
30
30
|
resume: { ja: '実装を再開', en: 'implementation resumed' },
|
|
31
31
|
restart: { ja: '止めて出し直し', en: 'restarted' },
|
|
@@ -41,6 +41,7 @@ const KIND_LABELS: Readonly<Record<EventKind, KindLabel>> = {
|
|
|
41
41
|
heartbeat: { ja: '生存確認', en: 'heartbeat' },
|
|
42
42
|
'ship-launch': { ja: '出荷を開始', en: 'ship launched' },
|
|
43
43
|
'ship-stop': { ja: '出荷が停止', en: 'ship stopped' },
|
|
44
|
+
'relaunch-failed': { ja: '再起動に失敗', en: 'relaunch failed' },
|
|
44
45
|
filed: { ja: '起票', en: 'filed' },
|
|
45
46
|
note: { ja: '意見', en: 'note' },
|
|
46
47
|
'lane-phase': { ja: 'レーンの段階', en: 'lane phase' },
|
|
@@ -48,6 +49,11 @@ const KIND_LABELS: Readonly<Record<EventKind, KindLabel>> = {
|
|
|
48
49
|
'lane-limit': { ja: 'レーン上限', en: 'lane limit' },
|
|
49
50
|
setup: { ja: '準備', en: 'setup' },
|
|
50
51
|
'pr-checks': { ja: 'PR のチェック', en: 'PR checks' },
|
|
52
|
+
'idle-notice': { ja: '待機の通知', en: 'idle notice' },
|
|
53
|
+
'lane-state': { ja: 'レーンの状態', en: 'lane state' },
|
|
54
|
+
'paused-notice': { ja: '一時停止の通知', en: 'paused notice' },
|
|
55
|
+
measured: { ja: '計測で完了', en: 'measured' },
|
|
56
|
+
sleep: { ja: 'ホストのスリープ', en: 'host sleep' },
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
const LABELS_BY_KIND: ReadonlyMap<string, KindLabel> = new Map(Object.entries(KIND_LABELS))
|
|
@@ -60,18 +66,12 @@ function label_of(kind: string, lang: string): string {
|
|
|
60
66
|
return lang === JA ? label.ja : label.en
|
|
61
67
|
}
|
|
62
68
|
|
|
63
|
-
function two_digits(value: number): string {
|
|
64
|
-
return String(value).padStart(CLOCK_WIDTH, CLOCK_PAD)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
69
|
// The local wall-clock `HH:MM` of the event, the reading a person watching a pane compares with the clock
|
|
68
70
|
// on their screen; an unparseable stamp is shown as written rather than as `NaN:NaN`.
|
|
69
71
|
function clock_of(at: string): string {
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
if (Number.isNaN(date.getTime())) return at
|
|
72
|
+
const ms = new Date(at).getTime()
|
|
73
73
|
|
|
74
|
-
return
|
|
74
|
+
return Number.isNaN(ms) ? at : figure_format.minute_of(ms)
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
function render(event: RunEvent, lang: string): string {
|
|
@@ -114,7 +114,7 @@ function is_own_ship_event(event: RunEvent, issue: string): boolean {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
// The issue an event's text names, the way every reader here — and `run:board` — keys an event to a child.
|
|
117
|
-
function issue_named(event: RunEvent): string | undefined {
|
|
117
|
+
function issue_named(event: Pick<RunEvent, 'text'>): string | undefined {
|
|
118
118
|
return ISSUE_REFERENCE.exec(event.text)?.[1]
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -169,7 +169,7 @@ function last_issue_event(
|
|
|
169
169
|
|
|
170
170
|
// A child's launch and the endings `run:merge` settles it with — the ones `run:board` stops drawing it
|
|
171
171
|
// running on. A park or a split already ran `run:merge`, so a child closed after one owes nothing; a
|
|
172
|
-
// withdrawal settles the child itself, its issue
|
|
172
|
+
// withdrawal settles the child itself, its issue left open for the next run.
|
|
173
173
|
const LAUNCH_OR_SETTLE_KINDS: ReadonlySet<string> = new Set([
|
|
174
174
|
KIND.CHILD_LAUNCH,
|
|
175
175
|
KIND.MERGE,
|