@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
|
@@ -1,228 +1,15 @@
|
|
|
1
|
-
import { closeSync, constants, openSync, writeSync } from 'node:fs'
|
|
2
1
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
2
|
import { json_value } from '#scripts/lib/json-value'
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { stamped_memo } from '#scripts/lib/stamped-memo'
|
|
4
|
+
import { lane_ledger_schema, type LedgerEntry } from './lane-ledger-schema'
|
|
5
|
+
import { lane_ledger_write } from './lane-ledger-write'
|
|
6
6
|
|
|
7
|
-
// The measurement ledger
|
|
8
|
-
// lane
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// **Its own file rather than the run's event stream.** The stream is capped at 500 events and is
|
|
12
|
-
// rewritten whole on every append, which is right for "where is the run" and wrong for a measurement
|
|
13
|
-
// that spans days of one-a-minute load samples. This file is only ever appended to, so concurrent lanes
|
|
14
|
-
// never lose each other's lines to a read-modify-write race.
|
|
15
|
-
//
|
|
16
|
-
// **Keyed on the common git directory, the event stream's key**, so a lane child's gate, the parent's
|
|
17
|
-
// merge and the sampler all land in one ledger per repository. It sits in the temp root beside every
|
|
18
|
-
// other josh record; a reboot clears it, which is why `docs/maintainers/lane-limit-measurement.md`
|
|
19
|
-
// closes a period with `josh lane:stats` before one.
|
|
7
|
+
// The measurement ledger read back: every line `lane-ledger-write.ts` appended, for `josh lane:stats`,
|
|
8
|
+
// `lane:breakdown`, `run:board` and the other measurements. The writers import that leaf, never this
|
|
9
|
+
// module, so a change to the reading reaches only the suites that read (joshuafolkken/kit#5202).
|
|
20
10
|
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const LINE_SEPARATOR = '\n'
|
|
24
|
-
// `followup`'s wait for CI — a stage of a lane's run that no `josh ship` stage is the whole of.
|
|
25
|
-
const CI_WAIT_STAGE = 'ci-wait'
|
|
26
|
-
const LEDGER_FILE_MODE = 0o600
|
|
27
|
-
// The flags `detached-launch.ts` appends its log with, for the same deterministic shared-temp path.
|
|
28
|
-
const { O_APPEND, O_CREAT, O_NOFOLLOW, O_WRONLY } = constants
|
|
29
|
-
// eslint-disable-next-line no-bitwise -- POSIX open flags are a bit field; `||` here would be a bug
|
|
30
|
-
const APPEND_FLAGS = O_WRONLY | O_APPEND | O_CREAT | O_NOFOLLOW
|
|
31
|
-
|
|
32
|
-
const KIND = {
|
|
33
|
-
MERGE: 'merge',
|
|
34
|
-
GATE: 'gate',
|
|
35
|
-
LOAD: 'load',
|
|
36
|
-
DISPATCH: 'dispatch',
|
|
37
|
-
STAGE: 'stage',
|
|
38
|
-
STOP: 'stop',
|
|
39
|
-
OVERLAP: 'overlap',
|
|
40
|
-
} as const
|
|
41
|
-
|
|
42
|
-
const merge_schema = z.object({ kind: z.literal(KIND.MERGE), at: z.string(), issue: z.number() })
|
|
43
|
-
const check_schema = z.object({
|
|
44
|
-
label: z.string(),
|
|
45
|
-
elapsed_ms: z.number(),
|
|
46
|
-
is_passed: z.boolean(),
|
|
47
|
-
is_reused: z.boolean().optional(),
|
|
48
|
-
})
|
|
49
|
-
const gate_schema = z.object({
|
|
50
|
-
kind: z.literal(KIND.GATE),
|
|
51
|
-
at: z.string(),
|
|
52
|
-
elapsed_ms: z.number(),
|
|
53
|
-
is_passed: z.boolean(),
|
|
54
|
-
// The unit suite's own duration, present when this gate ran it — the one
|
|
55
|
-
// record of a full vitest run `josh metrics` reads, so the suite is never timed twice.
|
|
56
|
-
unit_ms: z.number().optional(),
|
|
57
|
-
// The whole cores busy outside this gate, beyond the machine's baseline, at its start or its end —
|
|
58
|
-
// whichever was higher. Absent when the machine could not be read.
|
|
59
|
-
external_cores: z.number().optional(),
|
|
60
|
-
// Each check's own duration and verdict, so `josh lane:stats` can name the check a slow gate waited
|
|
61
|
-
// on. A reused check started no process: its row says so, and its zero is no timing.
|
|
62
|
-
checks: z.array(check_schema).optional(),
|
|
63
|
-
})
|
|
64
|
-
// `available_mb`, `swapped_mb` and `lanes` are optional because each read can fail on its own — a
|
|
65
|
-
// platform with no memory reading, a `git worktree` call that did not answer — and a sample is still
|
|
66
|
-
// worth its load. `swapped_mb` is `machine_capacity`'s counter, every page swapped since boot.
|
|
67
|
-
// Both memory fields were renamed with their meaning (joshuafolkken/kit#3593): an older row's
|
|
68
|
-
// `free_mb` / `swap_mb` are stripped on read, so the two measurements never share a column.
|
|
69
|
-
const process_kind_schema = z.object({
|
|
70
|
-
kind: z.string(),
|
|
71
|
-
cpu_percent: z.number(),
|
|
72
|
-
rss_mb: z.number(),
|
|
73
|
-
count: z.number(),
|
|
74
|
-
})
|
|
75
|
-
const load_schema = z.object({
|
|
76
|
-
kind: z.literal(KIND.LOAD),
|
|
77
|
-
at: z.string(),
|
|
78
|
-
load: z.number(),
|
|
79
|
-
available_mb: z.number().optional(),
|
|
80
|
-
swapped_mb: z.number().optional(),
|
|
81
|
-
lanes: z.number().optional(),
|
|
82
|
-
// The heaviest process kinds at the instant of the sample (`lane-process-load.ts`), so the load the
|
|
83
|
-
// core budget's ledger does not explain can be read back by what made it (joshuafolkken/kit#3874).
|
|
84
|
-
processes: z.array(process_kind_schema).optional(),
|
|
85
|
-
})
|
|
86
|
-
// A lane child started on `issue` — the instant its implementation is timed from.
|
|
87
|
-
const dispatch_schema = z.object({
|
|
88
|
-
kind: z.literal(KIND.DISPATCH),
|
|
89
|
-
at: z.string(),
|
|
90
|
-
issue: z.number(),
|
|
91
|
-
})
|
|
92
|
-
// One finished stage of a lane's run, passed or failed: `at` is its end and `elapsed_ms` its length, so
|
|
93
|
-
// its start is read from the two. `issue` is absent where the writer does not hold one — `followup`'s
|
|
94
|
-
// CI wait, which is timed on a path that fails before the issue is known.
|
|
95
|
-
const stage_schema = z.object({
|
|
96
|
-
kind: z.literal(KIND.STAGE),
|
|
97
|
-
at: z.string(),
|
|
98
|
-
stage: z.string(),
|
|
99
|
-
elapsed_ms: z.number(),
|
|
100
|
-
issue: z.number().optional(),
|
|
101
|
-
})
|
|
102
|
-
// A `josh ship` that stopped on `issue`: `reason` is the stage it stopped at, or `conflict` — the
|
|
103
|
-
// retrospective's stop reason. How long it stayed stopped is derived from the next ship stage, not
|
|
104
|
-
// recorded, so a resumed ship never has to know the stop it ends.
|
|
105
|
-
const stop_schema = z.object({
|
|
106
|
-
kind: z.literal(KIND.STOP),
|
|
107
|
-
at: z.string(),
|
|
108
|
-
issue: z.number(),
|
|
109
|
-
reason: z.string(),
|
|
110
|
-
})
|
|
111
|
-
// A `josh ship` on `issue` whose actual change overlapped the open pull requests of `lanes` on `paths`
|
|
112
|
-
// before its sync: it waited `waited_ms` for their ships to end, and `is_cleared` is false where the
|
|
113
|
-
// wait ran out first (joshuafolkken/kit#3901).
|
|
114
|
-
const overlap_schema = z.object({
|
|
115
|
-
kind: z.literal(KIND.OVERLAP),
|
|
116
|
-
at: z.string(),
|
|
117
|
-
issue: z.number(),
|
|
118
|
-
lanes: z.array(z.number()),
|
|
119
|
-
paths: z.array(z.string()),
|
|
120
|
-
waited_ms: z.number(),
|
|
121
|
-
is_cleared: z.boolean(),
|
|
122
|
-
})
|
|
123
|
-
const entry_schema = z.discriminatedUnion('kind', [
|
|
124
|
-
merge_schema,
|
|
125
|
-
gate_schema,
|
|
126
|
-
load_schema,
|
|
127
|
-
dispatch_schema,
|
|
128
|
-
stage_schema,
|
|
129
|
-
stop_schema,
|
|
130
|
-
overlap_schema,
|
|
131
|
-
])
|
|
132
|
-
|
|
133
|
-
type LedgerEntry = z.infer<typeof entry_schema>
|
|
134
|
-
type MergeEntry = z.infer<typeof merge_schema>
|
|
135
|
-
type GateEntry = z.infer<typeof gate_schema>
|
|
136
|
-
type LoadEntry = z.infer<typeof load_schema>
|
|
137
|
-
type DispatchEntry = z.infer<typeof dispatch_schema>
|
|
138
|
-
type StageEntry = z.infer<typeof stage_schema>
|
|
139
|
-
type StopEntry = z.infer<typeof stop_schema>
|
|
140
|
-
type OverlapEntry = z.infer<typeof overlap_schema>
|
|
141
|
-
// What a finished gate reports; the ledger stamps the kind and the time.
|
|
142
|
-
type GateRecord = Omit<GateEntry, 'kind' | 'at'>
|
|
143
|
-
type GateCheckRecord = z.infer<typeof check_schema>
|
|
144
|
-
type StageRecord = Omit<StageEntry, 'kind' | 'at'>
|
|
145
|
-
type StopRecord = Omit<StopEntry, 'kind' | 'at'>
|
|
146
|
-
type OverlapRecord = Omit<OverlapEntry, 'kind' | 'at'>
|
|
147
|
-
|
|
148
|
-
function target_of(repository: string): string {
|
|
149
|
-
return stamp_file.stamp_path(LEDGER_PREFIX, repository, LEDGER_SUFFIX)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// The ledger of the repository this checkout belongs to, or `undefined` outside one. `git rev-parse`
|
|
153
|
-
// rejects outside a repository, and `josh gate` resolves this before it runs a check, so the rejection
|
|
154
|
-
// is read as "no ledger" rather than allowed to fail the gate it would only have measured.
|
|
155
|
-
//
|
|
156
|
-
// **A test run has no ledger either.** The writers sit on paths dozens of suites exercise — a ship
|
|
157
|
-
// stage, a dispatch, a `followup` — and one suite that forgot to mock this module would append its
|
|
158
|
-
// fixture durations to the real measurement; a test that writes passes its own path instead.
|
|
159
|
-
async function target(): Promise<string | undefined> {
|
|
160
|
-
if (process.env['VITEST'] !== undefined) return undefined
|
|
161
|
-
|
|
162
|
-
try {
|
|
163
|
-
const repository = await run_carry.repository_directory()
|
|
164
|
-
|
|
165
|
-
return repository === undefined ? undefined : target_of(repository)
|
|
166
|
-
} catch {
|
|
167
|
-
return undefined
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// **Append, never rewrite** — `O_APPEND` keeps each short line whole across concurrent writers, and
|
|
172
|
-
// `O_NOFOLLOW` plus `stamp_file`'s ownership test keep a planted link or another account's file from
|
|
173
|
-
// receiving it.
|
|
174
|
-
function append(path: string, entry: LedgerEntry): void {
|
|
175
|
-
const descriptor = openSync(path, APPEND_FLAGS, LEDGER_FILE_MODE)
|
|
176
|
-
|
|
177
|
-
try {
|
|
178
|
-
if (stamp_file.is_own_regular_file(path)) {
|
|
179
|
-
writeSync(descriptor, `${JSON.stringify(entry)}${LINE_SEPARATOR}`)
|
|
180
|
-
}
|
|
181
|
-
} finally {
|
|
182
|
-
closeSync(descriptor)
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Best-effort: a measurement must never fail the gate or the merge it measures, so every error — no
|
|
187
|
-
// repository, an unwritable temp root — is dropped.
|
|
188
|
-
async function record(entry: LedgerEntry, path?: string): Promise<void> {
|
|
189
|
-
try {
|
|
190
|
-
const destination = path ?? (await target())
|
|
191
|
-
|
|
192
|
-
if (destination !== undefined) append(destination, entry)
|
|
193
|
-
} catch {
|
|
194
|
-
// Reporting is best-effort: a failed append is dropped rather than raised into the caller's work.
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function now_iso(): string {
|
|
199
|
-
return new Date().toISOString()
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// One finished `josh gate`, whether it passed or not — a failing gate cost the lane its time as well.
|
|
203
|
-
async function record_gate(path: string, gate: GateRecord): Promise<void> {
|
|
204
|
-
await record({ kind: KIND.GATE, at: now_iso(), ...gate }, path)
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
async function record_merge(issue: number): Promise<void> {
|
|
208
|
-
await record({ kind: KIND.MERGE, at: now_iso(), issue })
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
async function record_dispatch(issue: number, path?: string): Promise<void> {
|
|
212
|
-
await record({ kind: KIND.DISPATCH, at: now_iso(), issue }, path)
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
async function record_stage(stage: StageRecord, path?: string): Promise<void> {
|
|
216
|
-
await record({ kind: KIND.STAGE, at: now_iso(), ...stage }, path)
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
async function record_stop(stop: StopRecord, path?: string): Promise<void> {
|
|
220
|
-
await record({ kind: KIND.STOP, at: now_iso(), ...stop }, path)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
async function record_overlap(overlap: OverlapRecord, path?: string): Promise<void> {
|
|
224
|
-
await record({ kind: KIND.OVERLAP, at: now_iso(), ...overlap }, path)
|
|
225
|
-
}
|
|
11
|
+
const { entry_schema } = lane_ledger_schema
|
|
12
|
+
const { LINE_SEPARATOR } = lane_ledger_write
|
|
226
13
|
|
|
227
14
|
function parse_line(line: string): LedgerEntry | undefined {
|
|
228
15
|
return entry_schema.safeParse(json_value.parse_or_undefined(line)).data
|
|
@@ -232,9 +19,7 @@ function is_present(entry: LedgerEntry | undefined): entry is LedgerEntry {
|
|
|
232
19
|
return entry !== undefined
|
|
233
20
|
}
|
|
234
21
|
|
|
235
|
-
|
|
236
|
-
// whole ledger unreadable, and an absent or unowned file is an empty ledger.
|
|
237
|
-
function read_entries(path: string): ReadonlyArray<LedgerEntry> {
|
|
22
|
+
function parse_entries(path: string): ReadonlyArray<LedgerEntry> {
|
|
238
23
|
const raw = stamp_file.read_stamp_text(path)
|
|
239
24
|
|
|
240
25
|
if (raw === undefined) return []
|
|
@@ -245,32 +30,70 @@ function read_entries(path: string): ReadonlyArray<LedgerEntry> {
|
|
|
245
30
|
.filter(is_present)
|
|
246
31
|
}
|
|
247
32
|
|
|
33
|
+
// Each ledger's entries, parsed again only once the file itself has changed (joshuafolkken/kit#4263).
|
|
34
|
+
const parsed_ledgers = stamped_memo.create<ReadonlyArray<LedgerEntry>>()
|
|
35
|
+
|
|
36
|
+
// Every entry, oldest first. A malformed line — a write cut short — is skipped rather than making the
|
|
37
|
+
// whole ledger unreadable, and an absent or unowned file is an empty ledger.
|
|
38
|
+
function read_entries(path: string): ReadonlyArray<LedgerEntry> {
|
|
39
|
+
return parsed_ledgers.of(path, stamped_memo.file_stamp(path), () => parse_entries(path))
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// The names a reader looks entries up by and the ledger it reads, the writer's own.
|
|
43
|
+
const {
|
|
44
|
+
CI_WAIT_STAGE,
|
|
45
|
+
CODERABBIT_RATE_LIMIT_STAGE,
|
|
46
|
+
CODERABBIT_RETRIGGER_STAGE,
|
|
47
|
+
CODERABBIT_WAIT_STAGE,
|
|
48
|
+
KIND,
|
|
49
|
+
PRE_DETACH_STAGE,
|
|
50
|
+
ROUND_ONE_REUSED,
|
|
51
|
+
target,
|
|
52
|
+
target_of,
|
|
53
|
+
} = lane_ledger_write
|
|
54
|
+
|
|
248
55
|
const lane_ledger = {
|
|
249
56
|
CI_WAIT_STAGE,
|
|
57
|
+
CODERABBIT_RATE_LIMIT_STAGE,
|
|
58
|
+
CODERABBIT_RETRIGGER_STAGE,
|
|
59
|
+
CODERABBIT_WAIT_STAGE,
|
|
250
60
|
KIND,
|
|
251
|
-
|
|
61
|
+
PRE_DETACH_STAGE,
|
|
62
|
+
ROUND_ONE_REUSED,
|
|
252
63
|
read_entries,
|
|
253
|
-
record,
|
|
254
|
-
record_dispatch,
|
|
255
|
-
record_gate,
|
|
256
|
-
record_merge,
|
|
257
|
-
record_overlap,
|
|
258
|
-
record_stage,
|
|
259
|
-
record_stop,
|
|
260
64
|
target,
|
|
261
65
|
target_of,
|
|
262
66
|
}
|
|
263
67
|
|
|
264
68
|
export type {
|
|
69
|
+
CoreWaitEntry,
|
|
70
|
+
CoreWaitRecord,
|
|
265
71
|
DispatchEntry,
|
|
266
72
|
GateCheckRecord,
|
|
267
73
|
GateEntry,
|
|
74
|
+
HeldEntry,
|
|
75
|
+
LaneStateChangeEntry,
|
|
268
76
|
LedgerEntry,
|
|
269
77
|
LoadEntry,
|
|
270
78
|
MergeEntry,
|
|
79
|
+
OfferableEntry,
|
|
271
80
|
OverlapEntry,
|
|
272
81
|
OverlapRecord,
|
|
82
|
+
PushMissEntry,
|
|
83
|
+
RoundOneEntry,
|
|
84
|
+
RoundTwoEntry,
|
|
85
|
+
ShipLapEntry,
|
|
86
|
+
SplitFiledEntry,
|
|
87
|
+
SplitNoticeEntry,
|
|
273
88
|
StageEntry,
|
|
274
89
|
StopEntry,
|
|
275
|
-
|
|
90
|
+
StopRecord,
|
|
91
|
+
TestPinnedEntry,
|
|
92
|
+
TestPinnedRecord,
|
|
93
|
+
TestRelatedEntry,
|
|
94
|
+
TestRelatedRecord,
|
|
95
|
+
UnitFileRecord,
|
|
96
|
+
UnitFilesEntry,
|
|
97
|
+
UnplannedNoticeEntry,
|
|
98
|
+
} from './lane-ledger-schema'
|
|
276
99
|
export { lane_ledger }
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { backlog_ready, type LaneUse } from '#scripts/backlog/backlog-ready'
|
|
4
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
4
5
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
5
6
|
import { lane_capacity, type LimitChoice } from './lane-capacity'
|
|
6
7
|
import { lane_limit_override } from './lane-limit-override'
|
|
8
|
+
import { lane_state } from './lane-state'
|
|
7
9
|
|
|
8
10
|
// `josh lane:limit [<limit>] [--reset]` — change a live `backlogrun`'s lane limit without stopping it.
|
|
9
11
|
// A running parent keeps the environment it started with, so `JOSH_LANE_LIMIT`
|
|
@@ -96,12 +98,21 @@ function limit_text(limit: number): string {
|
|
|
96
98
|
: `${String(seated)} (${String(limit)} capped at the seats)`
|
|
97
99
|
}
|
|
98
100
|
|
|
101
|
+
// The lanes with no state record, counted in use since their state is unknown.
|
|
102
|
+
function unknown_text(unknown: ReadonlyArray<string>): string {
|
|
103
|
+
if (unknown.length === 0) return ''
|
|
104
|
+
|
|
105
|
+
const issues = unknown.map((issue) => session_cite.issue(issue)).join(' ')
|
|
106
|
+
|
|
107
|
+
return ` · ${issues}: ${lane_state.NO_STATE_HINT}`
|
|
108
|
+
}
|
|
109
|
+
|
|
99
110
|
function status_line(status: LimitStatus): string {
|
|
100
111
|
const source = status.override === undefined ? lane_capacity.LANE_LIMIT_KEY : OVERRIDE_SOURCE
|
|
101
112
|
const { occupied, seated } = status.use
|
|
102
113
|
const free = lane_capacity.free_lanes(status.limit, occupied, seated)
|
|
103
114
|
|
|
104
|
-
return `lane limit ${limit_text(status.limit)} (${source}) · in use ${String(occupied)} · free ${String(free)}`
|
|
115
|
+
return `lane limit ${limit_text(status.limit)} (${source}) · in use ${String(occupied)} · free ${String(free)}${unknown_text(status.use.unknown)}`
|
|
105
116
|
}
|
|
106
117
|
|
|
107
118
|
async function show(ports: LimitPorts): Promise<number> {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadavg } from 'node:os'
|
|
2
2
|
import { machine_capacity } from '#scripts/gate/machine-capacity'
|
|
3
3
|
import { lane_await } from './lane-await'
|
|
4
|
-
import type { LoadEntry } from './lane-ledger'
|
|
4
|
+
import type { LoadEntry } from './lane-ledger-schema'
|
|
5
5
|
import { lane_process_load } from './lane-process-load'
|
|
6
6
|
import { lane_registry, type LaneInfo } from './lane-registry'
|
|
7
7
|
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { setInterval as every } from 'node:timers/promises'
|
|
3
3
|
import { fileURLToPath } from 'node:url'
|
|
4
|
+
import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
|
|
5
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
6
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
4
7
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
8
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
5
9
|
import { lane_capacity } from './lane-capacity'
|
|
6
|
-
import {
|
|
7
|
-
import { lane_ledger } from './lane-ledger'
|
|
8
|
-
import { lane_process_stats } from './lane-process-stats'
|
|
10
|
+
import { lane_net_read } from './lane-net-read'
|
|
9
11
|
import { lane_sampler, type MeasureContext } from './lane-sampler'
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
import { lane_stats, type StatsWindow } from './lane-stats'
|
|
13
|
+
import { lane_stats_tables, type PeriodRecords } from './lane-stats-tables'
|
|
14
|
+
import { lane_transcript_stats } from './lane-transcript-stats'
|
|
15
|
+
import { lane_value } from './lane-value'
|
|
16
|
+
import { lane_value_cell, type CellAddress } from './lane-value-cell'
|
|
17
|
+
|
|
18
|
+
// `josh lane:sample` / `josh lane:stats` — the lane-limit measurement; `josh lane:value` and
|
|
19
|
+
// `josh lane:net` print one measurement each.
|
|
15
20
|
//
|
|
16
21
|
// `lane:sample` appends one machine-load sample to the ledger, or one every `--every <seconds>` until it
|
|
17
22
|
// is stopped; `lane:stats` reduces a period of the ledger to the one table row #3347 records per lane
|
|
@@ -23,16 +28,30 @@ import { lane_stop_stats } from './lane-stop-stats'
|
|
|
23
28
|
|
|
24
29
|
const ARGV_OFFSET = 2
|
|
25
30
|
const FAILURE_EXIT_CODE = 1
|
|
26
|
-
const MS_PER_SECOND = 1000
|
|
27
31
|
const SAMPLE_VERB = 'sample'
|
|
28
32
|
const STATS_VERB = 'stats'
|
|
33
|
+
const VALUE_VERB = 'value'
|
|
34
|
+
const NET_VERB = 'net'
|
|
35
|
+
// `lane:value cell` reads one `lane:stats` table cell rather than a named metric (joshuafolkken/kit#5144).
|
|
36
|
+
const CELL_METRIC = 'cell'
|
|
37
|
+
// A value keeps two decimals: seconds, minutes and per-lane counts read at that grain.
|
|
38
|
+
const VALUE_DIGITS = 2
|
|
29
39
|
const USAGE = [
|
|
30
40
|
'Usage: josh lane:sample [--every <seconds>]',
|
|
31
41
|
' josh lane:stats --period <days> [--limit <lane-limit>]',
|
|
42
|
+
` josh lane:value <${lane_value.NAMES.join('|')}> --since <instant>`,
|
|
43
|
+
` josh lane:value ${CELL_METRIC} --table <title> --row <label> --column <header> --since <instant>`,
|
|
44
|
+
' josh lane:net <issue>',
|
|
32
45
|
].join('\n')
|
|
33
46
|
|
|
34
47
|
const SAMPLE_OPTIONS = { every: { type: 'string' } } as const
|
|
35
48
|
const STATS_OPTIONS = { period: { type: 'string' }, limit: { type: 'string' } } as const
|
|
49
|
+
const VALUE_OPTIONS = {
|
|
50
|
+
since: { type: 'string' },
|
|
51
|
+
table: { type: 'string' },
|
|
52
|
+
row: { type: 'string' },
|
|
53
|
+
column: { type: 'string' },
|
|
54
|
+
} as const
|
|
36
55
|
|
|
37
56
|
function refuse(): number {
|
|
38
57
|
console.error(USAGE)
|
|
@@ -94,12 +113,25 @@ async function limit_label(given: string | undefined): Promise<string> {
|
|
|
94
113
|
return choice.kind === 'limit' ? String(choice.limit) : lane_stats.MISSING
|
|
95
114
|
}
|
|
96
115
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
)
|
|
100
|
-
|
|
116
|
+
// Every lane's transcript directory under this checkout's lane root, read from a lane or the main checkout.
|
|
117
|
+
function transcript_directories(context: MeasureContext): ReadonlyArray<string> {
|
|
118
|
+
if (context.transcript_directories !== undefined) return context.transcript_directories
|
|
119
|
+
|
|
120
|
+
const main_cwd = cost_transcript.session_cwd(process.cwd())
|
|
101
121
|
|
|
102
|
-
return
|
|
122
|
+
return cost_transcript.lane_transcript_directories(main_cwd, cost_transcript.home_directory())
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// The whole ledger, every run event and the window's lane calls — what the `lane:stats` tables read.
|
|
126
|
+
async function period_records(
|
|
127
|
+
context: MeasureContext,
|
|
128
|
+
window: StatsWindow,
|
|
129
|
+
): Promise<PeriodRecords> {
|
|
130
|
+
return {
|
|
131
|
+
entries: await lane_net_read.read_ledger(context),
|
|
132
|
+
events: await lane_net_read.read_events(context),
|
|
133
|
+
calls: lane_transcript_stats.read_calls(transcript_directories(context), window),
|
|
134
|
+
}
|
|
103
135
|
}
|
|
104
136
|
|
|
105
137
|
async function stats_command(
|
|
@@ -113,28 +145,159 @@ async function stats_command(
|
|
|
113
145
|
|
|
114
146
|
const window = lane_stats.window_of(period_days, context.now_ms ?? Date.now())
|
|
115
147
|
const label = { limit: await limit_label(values.limit), period_days }
|
|
116
|
-
const
|
|
117
|
-
const row = lane_stats.row(entries, window, label)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
`${lane_stats.header()}\n${row}`,
|
|
122
|
-
lane_stage_stats.table(entries, window),
|
|
123
|
-
lane_stop_stats.table(entries, window),
|
|
124
|
-
lane_process_stats.table(entries, window),
|
|
125
|
-
lane_check_stats.table(entries, window),
|
|
126
|
-
].join('\n\n'),
|
|
127
|
-
)
|
|
148
|
+
const records = await period_records(context, window)
|
|
149
|
+
const row = lane_stats.row(records.entries, window, label)
|
|
150
|
+
const tables = lane_stats_tables.tables_of(records, window)
|
|
151
|
+
|
|
152
|
+
console.info([`${lane_stats.header()}\n${row}`, ...tables].join('\n\n'))
|
|
128
153
|
|
|
129
154
|
return 0
|
|
130
155
|
}
|
|
131
156
|
|
|
132
|
-
|
|
133
|
-
|
|
157
|
+
interface ValueRequest {
|
|
158
|
+
metric: string
|
|
159
|
+
since_ms: number
|
|
160
|
+
address?: CellAddress
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
interface AddressFlags {
|
|
164
|
+
table?: string | undefined
|
|
165
|
+
row?: string | undefined
|
|
166
|
+
column?: string | undefined
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function since_of(text = ''): number | undefined {
|
|
170
|
+
const since_ms = Date.parse(text)
|
|
171
|
+
|
|
172
|
+
return Number.isNaN(since_ms) ? undefined : since_ms
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function is_known(name: string): boolean {
|
|
176
|
+
return name === CELL_METRIC || lane_value.is_metric(name)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function metric_of(positionals: ReadonlyArray<string>): string | undefined {
|
|
180
|
+
const [name] = positionals
|
|
181
|
+
|
|
182
|
+
return name !== undefined && positionals.length === 1 && is_known(name) ? name : undefined
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function address_of({ table, row, column }: AddressFlags): CellAddress | undefined {
|
|
186
|
+
return table === undefined || row === undefined || column === undefined
|
|
187
|
+
? undefined
|
|
188
|
+
: { table, row, column }
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function request_of(
|
|
192
|
+
metric: string | undefined,
|
|
193
|
+
since_ms: number | undefined,
|
|
194
|
+
): ValueRequest | undefined {
|
|
195
|
+
return metric === undefined || since_ms === undefined ? undefined : { metric, since_ms }
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// One known metric and a readable `--since` instant — `cell` with its whole address — or `undefined`
|
|
199
|
+
// for a refusal.
|
|
200
|
+
function value_request(rest: ReadonlyArray<string>): ValueRequest | undefined {
|
|
201
|
+
const parsed = cli_flags.arguments_of(rest, VALUE_OPTIONS)
|
|
202
|
+
|
|
203
|
+
if (parsed === undefined) return undefined
|
|
204
|
+
|
|
205
|
+
const request = request_of(metric_of(parsed.positionals), since_of(parsed.values.since))
|
|
206
|
+
|
|
207
|
+
if (request?.metric !== CELL_METRIC) return request
|
|
208
|
+
|
|
209
|
+
const address = address_of(parsed.values)
|
|
210
|
+
|
|
211
|
+
return address === undefined ? undefined : { ...request, address }
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// The value alone on its line, so a measurement declaration reads it as the output's last line; a
|
|
215
|
+
// period with no sample prints nothing there and fails, which the drive reads as unreadable.
|
|
216
|
+
function print_value(request: ValueRequest, measured: number | undefined): number {
|
|
217
|
+
if (measured === undefined) {
|
|
218
|
+
const since = new Date(request.since_ms).toISOString()
|
|
219
|
+
|
|
220
|
+
const missing = request.address === undefined ? 'no sample' : 'no single numeric cell'
|
|
221
|
+
|
|
222
|
+
console.error(`josh lane:value ${request.metric}: ${missing} since ${since}`)
|
|
134
223
|
|
|
135
|
-
|
|
224
|
+
return FAILURE_EXIT_CODE
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
console.info(measured.toFixed(VALUE_DIGITS))
|
|
228
|
+
|
|
229
|
+
return 0
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// The addressed cell of the tables `lane:stats` would print for `window`.
|
|
233
|
+
async function cell_value(
|
|
234
|
+
address: CellAddress,
|
|
235
|
+
window: StatsWindow,
|
|
236
|
+
context: MeasureContext,
|
|
237
|
+
): Promise<number | undefined> {
|
|
238
|
+
const tables = lane_stats_tables.tables_of(await period_records(context, window), window)
|
|
239
|
+
|
|
240
|
+
return lane_value_cell.value(tables, address)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
async function value_command(
|
|
244
|
+
rest: ReadonlyArray<string>,
|
|
245
|
+
context: MeasureContext,
|
|
246
|
+
): Promise<number> {
|
|
247
|
+
const request = value_request(rest)
|
|
248
|
+
|
|
249
|
+
if (request === undefined) return refuse()
|
|
250
|
+
|
|
251
|
+
const window = { since_ms: request.since_ms, until_ms: context.now_ms ?? Date.now() }
|
|
252
|
+
|
|
253
|
+
if (request.address !== undefined) {
|
|
254
|
+
return print_value(request, await cell_value(request.address, window, context))
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const records = {
|
|
258
|
+
entries: await lane_net_read.read_ledger(context),
|
|
259
|
+
calls: lane_transcript_stats.read_calls(transcript_directories(context), window),
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return print_value(request, lane_value.value(request.metric, records, window))
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// The lane's net minutes, whole, alone on the line a causing-lane declaration copies
|
|
266
|
+
// (`lane-net-time.ts`); a lane the ledger holds no dispatch and merge of fails.
|
|
267
|
+
async function net_command(rest: ReadonlyArray<string>, context: MeasureContext): Promise<number> {
|
|
268
|
+
const [issue = ''] = rest
|
|
269
|
+
|
|
270
|
+
if (rest.length !== 1 || !issue_number_shape.is_issue_number(issue)) return refuse()
|
|
271
|
+
|
|
272
|
+
const net = await lane_net_read.net_minutes_of(Number(issue), context)
|
|
273
|
+
|
|
274
|
+
if (net === undefined) {
|
|
275
|
+
console.error(
|
|
276
|
+
`josh lane:net ${issue}: the ledger holds no dispatch and merge of ${session_cite.issue(issue)}`,
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
return FAILURE_EXIT_CODE
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
console.info(String(net))
|
|
283
|
+
|
|
284
|
+
return 0
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
type VerbCommand = (rest: ReadonlyArray<string>, context: MeasureContext) => Promise<number>
|
|
288
|
+
|
|
289
|
+
const VERBS: Readonly<Record<string, VerbCommand>> = {
|
|
290
|
+
[SAMPLE_VERB]: sample_command,
|
|
291
|
+
[STATS_VERB]: stats_command,
|
|
292
|
+
[VALUE_VERB]: value_command,
|
|
293
|
+
[NET_VERB]: net_command,
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
async function run(argv: ReadonlyArray<string>, context: MeasureContext = {}): Promise<number> {
|
|
297
|
+
const [verb = '', ...rest] = argv
|
|
298
|
+
const command = Object.hasOwn(VERBS, verb) ? VERBS[verb] : undefined
|
|
136
299
|
|
|
137
|
-
return
|
|
300
|
+
return command === undefined ? refuse() : await command(rest, context)
|
|
138
301
|
}
|
|
139
302
|
|
|
140
303
|
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
2
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
3
|
+
import { lane_ledger } from './lane-ledger'
|
|
4
|
+
import { lane_net_time } from './lane-net-time'
|
|
5
|
+
import type { MeasureContext } from './lane-sampler'
|
|
6
|
+
|
|
7
|
+
// The ledger and the event stream the lane measurements read, and the one lane's net minutes read from
|
|
8
|
+
// them — `josh lane:net` and the causing-lane line `josh issue:file --found-during` prints
|
|
9
|
+
// (joshuafolkken/kit#5225) share it.
|
|
10
|
+
|
|
11
|
+
type ReadContext = Pick<MeasureContext, 'ledger_path' | 'events_path'>
|
|
12
|
+
|
|
13
|
+
async function read_ledger(
|
|
14
|
+
context: ReadContext,
|
|
15
|
+
): Promise<ReturnType<typeof lane_ledger.read_entries>> {
|
|
16
|
+
const path = context.ledger_path ?? (await lane_ledger.target())
|
|
17
|
+
|
|
18
|
+
return path === undefined ? [] : lane_ledger.read_entries(path)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// The run's event stream, read for the parks that end a stop's wait.
|
|
22
|
+
async function read_events(context: ReadContext): Promise<ReadonlyArray<RunEvent>> {
|
|
23
|
+
if (context.events_path !== undefined) return run_event_stream.read_events(context.events_path)
|
|
24
|
+
|
|
25
|
+
return await run_event_stream_emit.all_events()
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// The lane's net minutes, whole; `undefined` when the ledger holds no dispatch and merge of it.
|
|
29
|
+
async function net_minutes_of(
|
|
30
|
+
issue: number,
|
|
31
|
+
context: ReadContext = {},
|
|
32
|
+
): Promise<number | undefined> {
|
|
33
|
+
const events = await read_events(context)
|
|
34
|
+
|
|
35
|
+
return lane_net_time.net_minutes(await read_ledger(context), events, issue)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const lane_net_read = {
|
|
39
|
+
net_minutes_of,
|
|
40
|
+
read_events,
|
|
41
|
+
read_ledger,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { lane_net_read }
|