@joshuafolkken/kit 1.1514.0 → 1.2114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { lane_ledger_kind } from './lane-ledger-kind'
|
|
3
|
+
import { lane_ledger_schema_ship } from './lane-ledger-schema-ship'
|
|
4
|
+
|
|
5
|
+
// The shape of each line `lane-ledger.ts` appends and reads back — one schema per entry kind.
|
|
6
|
+
|
|
7
|
+
const { KIND } = lane_ledger_kind
|
|
8
|
+
const { ship_lap_schema, stop_schema, unplanned_notice_schema } = lane_ledger_schema_ship
|
|
9
|
+
|
|
10
|
+
const merge_schema = z.object({ kind: z.literal(KIND.MERGE), at: z.string(), issue: z.number() })
|
|
11
|
+
const check_schema = z.object({
|
|
12
|
+
label: z.string(),
|
|
13
|
+
elapsed_ms: z.number(),
|
|
14
|
+
is_passed: z.boolean(),
|
|
15
|
+
is_reused: z.boolean().optional(),
|
|
16
|
+
// The CPU milliseconds the check's process tree spent, so a core weight can be re-measured from
|
|
17
|
+
// the ledger (joshuafolkken/kit#4362). Absent where the gate could not read it (off macOS).
|
|
18
|
+
cpu_ms: z.number().optional(),
|
|
19
|
+
// Why the unit leg ran the whole suite instead of the related tests — a stable kind, never the
|
|
20
|
+
// file it names (joshuafolkken/kit#4397). Absent when it narrowed, and on every other check.
|
|
21
|
+
fallback: z.string().optional(),
|
|
22
|
+
// The unit leg's since-green no-op: nothing moved, so it ran no test (joshuafolkken/kit#4457).
|
|
23
|
+
is_unmoved: z.boolean().optional(),
|
|
24
|
+
// The width the check asked the core budget for, the width it ran at and how long it waited, so a
|
|
25
|
+
// unit claim's wait for room is read per run (joshuafolkken/kit#4451). Absent on a check that
|
|
26
|
+
// claimed none — a reused one, or one inside another gate's claim.
|
|
27
|
+
claim: z.object({ requested: z.number(), granted: z.number(), waited_ms: z.number() }).optional(),
|
|
28
|
+
})
|
|
29
|
+
const gate_schema = z.object({
|
|
30
|
+
kind: z.literal(KIND.GATE),
|
|
31
|
+
at: z.string(),
|
|
32
|
+
elapsed_ms: z.number(),
|
|
33
|
+
is_passed: z.boolean(),
|
|
34
|
+
// The unit suite's own duration, present when this gate ran it — the one
|
|
35
|
+
// record of a full vitest run `josh metrics` reads, so the suite is never timed twice.
|
|
36
|
+
unit_ms: z.number().optional(),
|
|
37
|
+
// The whole cores busy outside this gate, beyond the machine's baseline, at its start or its end —
|
|
38
|
+
// whichever was higher. Absent when the machine could not be read.
|
|
39
|
+
external_cores: z.number().optional(),
|
|
40
|
+
// Each check's own duration and verdict, so `josh lane:stats` can name the check a slow gate waited
|
|
41
|
+
// on. A reused check started no process: its row says so, and its zero is no timing.
|
|
42
|
+
checks: z.array(check_schema).optional(),
|
|
43
|
+
// A gate that reused a green record for this tree and base and started no check: counted, never
|
|
44
|
+
// timed (joshuafolkken/kit#4397).
|
|
45
|
+
is_reused: z.boolean().optional(),
|
|
46
|
+
// The lane the gate ran in, so `josh lane:breakdown` puts its checks under the lane's ship gate;
|
|
47
|
+
// absent outside a lane and on a row written before it (joshuafolkken/kit#5319).
|
|
48
|
+
issue: z.number().optional(),
|
|
49
|
+
})
|
|
50
|
+
// `available_mb`, `swapped_mb` and `lanes` are optional because each read can fail on its own — a
|
|
51
|
+
// platform with no memory reading, a `git worktree` call that did not answer — and a sample is still
|
|
52
|
+
// worth its load. `swapped_mb` is `machine_capacity`'s counter, every page swapped since boot.
|
|
53
|
+
// Both memory fields were renamed with their meaning (joshuafolkken/kit#3593): an older row's
|
|
54
|
+
// `free_mb` / `swap_mb` are stripped on read, so the two measurements never share a column.
|
|
55
|
+
const process_kind_schema = z.object({
|
|
56
|
+
kind: z.string(),
|
|
57
|
+
cpu_percent: z.number(),
|
|
58
|
+
rss_mb: z.number(),
|
|
59
|
+
count: z.number(),
|
|
60
|
+
})
|
|
61
|
+
const load_schema = z.object({
|
|
62
|
+
kind: z.literal(KIND.LOAD),
|
|
63
|
+
at: z.string(),
|
|
64
|
+
load: z.number(),
|
|
65
|
+
available_mb: z.number().optional(),
|
|
66
|
+
swapped_mb: z.number().optional(),
|
|
67
|
+
lanes: z.number().optional(),
|
|
68
|
+
// The heaviest process kinds at the instant of the sample (`lane-process-load.ts`), so the load the
|
|
69
|
+
// core budget's ledger does not explain can be read back by what made it (joshuafolkken/kit#3874).
|
|
70
|
+
processes: z.array(process_kind_schema).optional(),
|
|
71
|
+
})
|
|
72
|
+
// A lane child started on `issue` — the instant its implementation is timed from.
|
|
73
|
+
const dispatch_schema = z.object({
|
|
74
|
+
kind: z.literal(KIND.DISPATCH),
|
|
75
|
+
at: z.string(),
|
|
76
|
+
issue: z.number(),
|
|
77
|
+
})
|
|
78
|
+
// One finished stage of a lane's run, passed or failed: `at` is its end and `elapsed_ms` its length, so
|
|
79
|
+
// its start is read from the two. `issue` is absent where the writer does not hold one — `followup`'s
|
|
80
|
+
// CI wait where the run did not know its issue. On that `ci-wait` row,
|
|
81
|
+
// `check_ms` is each check seen pending and then settled, by the time it settled into the wait, and
|
|
82
|
+
// `last_check` the one that settled last — the wait's critical path (joshuafolkken/kit#5295).
|
|
83
|
+
const stage_schema = z.object({
|
|
84
|
+
kind: z.literal(KIND.STAGE),
|
|
85
|
+
at: z.string(),
|
|
86
|
+
stage: z.string(),
|
|
87
|
+
elapsed_ms: z.number(),
|
|
88
|
+
issue: z.number().optional(),
|
|
89
|
+
last_check: z.string().optional(),
|
|
90
|
+
check_ms: z.record(z.string(), z.number()).optional(),
|
|
91
|
+
})
|
|
92
|
+
// A `josh ship` on `issue` whose actual change overlapped the open pull requests of `lanes` on `paths`
|
|
93
|
+
// before its sync: it waited `waited_ms` for their ships to end, and `is_cleared` is false where the
|
|
94
|
+
// wait ran out first (joshuafolkken/kit#3901).
|
|
95
|
+
const overlap_schema = z.object({
|
|
96
|
+
kind: z.literal(KIND.OVERLAP),
|
|
97
|
+
at: z.string(),
|
|
98
|
+
issue: z.number(),
|
|
99
|
+
lanes: z.array(z.number()),
|
|
100
|
+
paths: z.array(z.string()),
|
|
101
|
+
waited_ms: z.number(),
|
|
102
|
+
is_cleared: z.boolean(),
|
|
103
|
+
})
|
|
104
|
+
// A `backlog:drive` pass that left a free lane empty: `reason` is why — the offer verdict that started
|
|
105
|
+
// nothing, or the hand-back that stopped the driver. How long the lane stayed empty is derived from the
|
|
106
|
+
// next `held`, `released` or `dispatch` entry, the way a stop's wait is (joshuafolkken/kit#3995).
|
|
107
|
+
// `waiting` names the issues a `chain` / `gate` hold waited on (joshuafolkken/kit#4513).
|
|
108
|
+
const held_schema = z.object({
|
|
109
|
+
kind: z.literal(KIND.HELD),
|
|
110
|
+
at: z.string(),
|
|
111
|
+
reason: z.string(),
|
|
112
|
+
waiting: z.array(z.number()).optional(),
|
|
113
|
+
})
|
|
114
|
+
// The end of a hold no dispatch ended: every lane taken — one opened outside the driver included — or
|
|
115
|
+
// the run finished, so no free lane is owed a child any more.
|
|
116
|
+
const released_schema = z.object({ kind: z.literal(KIND.RELEASED), at: z.string() })
|
|
117
|
+
// A `lane:pause` (`paused`) or `lane:resume` (`running`) of `issue`'s lane, so a measurement reads the
|
|
118
|
+
// time its processes stood stopped (joshuafolkken/kit#5168) — the lane state file keeps only the last.
|
|
119
|
+
const lane_state_schema = z.object({
|
|
120
|
+
kind: z.literal(KIND.LANE_STATE),
|
|
121
|
+
at: z.string(),
|
|
122
|
+
issue: z.number(),
|
|
123
|
+
state: z.enum(['paused', 'running']),
|
|
124
|
+
})
|
|
125
|
+
// The round 1 a `josh ship` acted on for `issue`: `verdict` is the reviewer's — `clean`, `fixed`,
|
|
126
|
+
// `blocking` — or `reused` where a round recorded before the ship still described the tree, so the
|
|
127
|
+
// period's ship-time rounds that passed with no fix are counted (joshuafolkken/kit#4620).
|
|
128
|
+
const round_one_schema = z.object({
|
|
129
|
+
kind: z.literal(KIND.ROUND_ONE),
|
|
130
|
+
at: z.string(),
|
|
131
|
+
issue: z.number(),
|
|
132
|
+
verdict: z.string(),
|
|
133
|
+
})
|
|
134
|
+
// One `review:round2` decision a `josh ship` acted on for `issue`: `verdict` and the stable reason
|
|
135
|
+
// `code` it fell under, so the period's skips and runs are counted by why (joshuafolkken/kit#4064).
|
|
136
|
+
const round_two_schema = z.object({
|
|
137
|
+
kind: z.literal(KIND.ROUND_TWO),
|
|
138
|
+
at: z.string(),
|
|
139
|
+
issue: z.number(),
|
|
140
|
+
verdict: z.string(),
|
|
141
|
+
code: z.string(),
|
|
142
|
+
})
|
|
143
|
+
// A stall detector observation, written only when it changes: whether offerable backlog work and a free
|
|
144
|
+
// lane coexisted, so a stall is aged from when both first held rather than from the last launch
|
|
145
|
+
// (joshuafolkken/kit#4349).
|
|
146
|
+
const offerable_schema = z.object({
|
|
147
|
+
kind: z.literal(KIND.OFFERABLE),
|
|
148
|
+
at: z.string(),
|
|
149
|
+
is_offerable: z.boolean(),
|
|
150
|
+
})
|
|
151
|
+
// One claim that waited `waited_ms` for the core budget before `command` could start — written by the
|
|
152
|
+
// command itself, so a wait inside a gate, a scoped check or a ship lands in one record. `issue` is the
|
|
153
|
+
// lane the claim ran in, absent outside a lane (joshuafolkken/kit#4382).
|
|
154
|
+
const core_wait_schema = z.object({
|
|
155
|
+
kind: z.literal(KIND.CORE_WAIT),
|
|
156
|
+
at: z.string(),
|
|
157
|
+
command: z.string(),
|
|
158
|
+
waited_ms: z.number(),
|
|
159
|
+
issue: z.number().optional(),
|
|
160
|
+
})
|
|
161
|
+
// One vitest run's slowest test files, each with its wall time from environment setup to its last
|
|
162
|
+
// test, so a unit run whose wall time far outran its CPU names the file it stalled on
|
|
163
|
+
// (joshuafolkken/kit#4451). Written by the run itself (`tools/test/unit-file-reporter.ts`).
|
|
164
|
+
const unit_file_schema = z.object({ file: z.string(), elapsed_ms: z.number() })
|
|
165
|
+
const unit_files_schema = z.object({
|
|
166
|
+
kind: z.literal(KIND.UNIT_FILES),
|
|
167
|
+
at: z.string(),
|
|
168
|
+
files: z.array(unit_file_schema),
|
|
169
|
+
})
|
|
170
|
+
// One `josh test:related` run (joshuafolkken/kit#4465): `scope` is `related`, `none` or the full-suite
|
|
171
|
+
// fallback kind; the four counts are its input — the change itself, what a main sync brought into it,
|
|
172
|
+
// what the change since the test-read map's tree joined to it and the map's readers — and `test_files`
|
|
173
|
+
// how many vitest ran, absent where none reported. `trigger_files` are the changed files that sent a
|
|
174
|
+
// full-suite run there, absent where none did and on rows written before it (joshuafolkken/kit#4510).
|
|
175
|
+
const test_related_schema = z.object({
|
|
176
|
+
kind: z.literal(KIND.TEST_RELATED),
|
|
177
|
+
at: z.string(),
|
|
178
|
+
scope: z.string(),
|
|
179
|
+
changed: z.number(),
|
|
180
|
+
synced: z.number(),
|
|
181
|
+
since_map: z.number(),
|
|
182
|
+
readers: z.number(),
|
|
183
|
+
test_files: z.number().optional(),
|
|
184
|
+
trigger_files: z.array(z.string()).optional(),
|
|
185
|
+
elapsed_ms: z.number(),
|
|
186
|
+
})
|
|
187
|
+
// One `josh test:pinned` run that probed (joshuafolkken/kit#5078): `held` hunks the verdict cache
|
|
188
|
+
// answered, and each probed hunk's `file`, the test files it ran (`tests`, absent where vitest wrote no
|
|
189
|
+
// report) and its wall time. `issue` is the lane it ran in, absent outside a lane. `rewired` counts the
|
|
190
|
+
// hunks not probed as an import moved under a new name (joshuafolkken/kit#5235), absent on older rows.
|
|
191
|
+
// `origin` is what started the run, and `discarded` marks a `run:review` background run stopped before
|
|
192
|
+
// its answer, written by the stop with its wall time so far (joshuafolkken/kit#5262); both absent on
|
|
193
|
+
// older rows.
|
|
194
|
+
const pinned_origin_schema = z.enum(['run-review', 'pre-detach', 'manual'])
|
|
195
|
+
const test_pinned_probe_schema = z.object({
|
|
196
|
+
file: z.string(),
|
|
197
|
+
tests: z.number().optional(),
|
|
198
|
+
elapsed_ms: z.number(),
|
|
199
|
+
})
|
|
200
|
+
const test_pinned_schema = z.object({
|
|
201
|
+
kind: z.literal(KIND.TEST_PINNED),
|
|
202
|
+
at: z.string(),
|
|
203
|
+
issue: z.number().optional(),
|
|
204
|
+
held: z.number(),
|
|
205
|
+
rewired: z.number().optional(),
|
|
206
|
+
probes: z.array(test_pinned_probe_schema),
|
|
207
|
+
elapsed_ms: z.number(),
|
|
208
|
+
origin: pinned_origin_schema.optional(),
|
|
209
|
+
discarded: z.boolean().optional(),
|
|
210
|
+
})
|
|
211
|
+
// The split notice shown to the lane of `issue`, with the measured diff it fired on — written once per
|
|
212
|
+
// Issue, by whichever of `josh lint:related`, `test:related` or `main:merge` showed it first
|
|
213
|
+
// (joshuafolkken/kit#4695).
|
|
214
|
+
const split_notice_schema = z.object({
|
|
215
|
+
kind: z.literal(KIND.SPLIT_NOTICE),
|
|
216
|
+
at: z.string(),
|
|
217
|
+
issue: z.number(),
|
|
218
|
+
files: z.number(),
|
|
219
|
+
lines: z.number(),
|
|
220
|
+
})
|
|
221
|
+
// One `josh issue:file --route split` filed from the lane of `issue`; `child` is its reference.
|
|
222
|
+
const split_filed_schema = z.object({
|
|
223
|
+
kind: z.literal(KIND.SPLIT_FILED),
|
|
224
|
+
at: z.string(),
|
|
225
|
+
issue: z.number(),
|
|
226
|
+
child: z.string(),
|
|
227
|
+
})
|
|
228
|
+
// A pre-push hook that could not reuse the green gate record and ran the `whole` or the `related`
|
|
229
|
+
// suite: `reason` is the miss's kind (`hook_gate_reuse.miss_kind`), never its sentence (joshuafolkken/kit#5234).
|
|
230
|
+
const push_miss_schema = z.object({
|
|
231
|
+
kind: z.literal(KIND.PUSH_MISS),
|
|
232
|
+
at: z.string(),
|
|
233
|
+
scope: z.enum(['whole', 'related']),
|
|
234
|
+
reason: z.string(),
|
|
235
|
+
})
|
|
236
|
+
const entry_schema = z.discriminatedUnion('kind', [
|
|
237
|
+
merge_schema,
|
|
238
|
+
gate_schema,
|
|
239
|
+
load_schema,
|
|
240
|
+
dispatch_schema,
|
|
241
|
+
stage_schema,
|
|
242
|
+
stop_schema,
|
|
243
|
+
overlap_schema,
|
|
244
|
+
held_schema,
|
|
245
|
+
released_schema,
|
|
246
|
+
round_one_schema,
|
|
247
|
+
round_two_schema,
|
|
248
|
+
offerable_schema,
|
|
249
|
+
core_wait_schema,
|
|
250
|
+
unit_files_schema,
|
|
251
|
+
test_related_schema,
|
|
252
|
+
test_pinned_schema,
|
|
253
|
+
split_notice_schema,
|
|
254
|
+
split_filed_schema,
|
|
255
|
+
unplanned_notice_schema,
|
|
256
|
+
lane_state_schema,
|
|
257
|
+
push_miss_schema,
|
|
258
|
+
ship_lap_schema,
|
|
259
|
+
])
|
|
260
|
+
|
|
261
|
+
type LedgerEntry = z.infer<typeof entry_schema>
|
|
262
|
+
type MergeEntry = z.infer<typeof merge_schema>
|
|
263
|
+
type GateEntry = z.infer<typeof gate_schema>
|
|
264
|
+
type LoadEntry = z.infer<typeof load_schema>
|
|
265
|
+
type DispatchEntry = z.infer<typeof dispatch_schema>
|
|
266
|
+
type StageEntry = z.infer<typeof stage_schema>
|
|
267
|
+
type StopEntry = z.infer<typeof stop_schema>
|
|
268
|
+
type OverlapEntry = z.infer<typeof overlap_schema>
|
|
269
|
+
type HeldEntry = z.infer<typeof held_schema>
|
|
270
|
+
type RoundOneEntry = z.infer<typeof round_one_schema>
|
|
271
|
+
type RoundTwoEntry = z.infer<typeof round_two_schema>
|
|
272
|
+
type OfferableEntry = z.infer<typeof offerable_schema>
|
|
273
|
+
type CoreWaitEntry = z.infer<typeof core_wait_schema>
|
|
274
|
+
type CoreWaitRecord = Omit<CoreWaitEntry, 'kind' | 'at'>
|
|
275
|
+
type UnitFilesEntry = z.infer<typeof unit_files_schema>
|
|
276
|
+
type UnitFileRecord = z.infer<typeof unit_file_schema>
|
|
277
|
+
type TestRelatedEntry = z.infer<typeof test_related_schema>
|
|
278
|
+
type TestRelatedRecord = Omit<TestRelatedEntry, 'kind' | 'at'>
|
|
279
|
+
type TestPinnedEntry = z.infer<typeof test_pinned_schema>
|
|
280
|
+
type TestPinnedRecord = Omit<TestPinnedEntry, 'kind' | 'at'>
|
|
281
|
+
type SplitNoticeEntry = z.infer<typeof split_notice_schema>
|
|
282
|
+
type SplitNoticeRecord = Omit<SplitNoticeEntry, 'kind' | 'at'>
|
|
283
|
+
type SplitFiledEntry = z.infer<typeof split_filed_schema>
|
|
284
|
+
type SplitFiledRecord = Omit<SplitFiledEntry, 'kind' | 'at'>
|
|
285
|
+
type UnplannedNoticeEntry = z.infer<typeof unplanned_notice_schema>
|
|
286
|
+
type UnplannedNoticeRecord = Omit<UnplannedNoticeEntry, 'kind' | 'at'>
|
|
287
|
+
type LaneStateChangeEntry = z.infer<typeof lane_state_schema>
|
|
288
|
+
type LaneStateChangeRecord = Omit<LaneStateChangeEntry, 'kind' | 'at'>
|
|
289
|
+
type PushMissEntry = z.infer<typeof push_miss_schema>
|
|
290
|
+
type PushMissRecord = Omit<PushMissEntry, 'kind' | 'at'>
|
|
291
|
+
type ShipLapEntry = z.infer<typeof ship_lap_schema>
|
|
292
|
+
type ShipLapRecord = Omit<ShipLapEntry, 'kind' | 'at'>
|
|
293
|
+
type RoundOneRecord = Omit<RoundOneEntry, 'kind' | 'at'>
|
|
294
|
+
type RoundTwoRecord = Omit<RoundTwoEntry, 'kind' | 'at'>
|
|
295
|
+
// What a finished gate reports; the ledger stamps the kind and the time.
|
|
296
|
+
type GateRecord = Omit<GateEntry, 'kind' | 'at'>
|
|
297
|
+
type GateCheckRecord = z.infer<typeof check_schema>
|
|
298
|
+
type StageRecord = Omit<StageEntry, 'kind' | 'at'>
|
|
299
|
+
type StopRecord = Omit<StopEntry, 'kind' | 'at'>
|
|
300
|
+
type OverlapRecord = Omit<OverlapEntry, 'kind' | 'at'>
|
|
301
|
+
type HeldRecord = Omit<HeldEntry, 'kind' | 'at' | 'waiting'> & {
|
|
302
|
+
waiting?: ReadonlyArray<number> | undefined
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const lane_ledger_schema = { KIND, entry_schema, pinned_origin_schema }
|
|
306
|
+
|
|
307
|
+
export type {
|
|
308
|
+
CoreWaitEntry,
|
|
309
|
+
CoreWaitRecord,
|
|
310
|
+
DispatchEntry,
|
|
311
|
+
GateCheckRecord,
|
|
312
|
+
GateEntry,
|
|
313
|
+
GateRecord,
|
|
314
|
+
HeldEntry,
|
|
315
|
+
HeldRecord,
|
|
316
|
+
LaneStateChangeEntry,
|
|
317
|
+
LaneStateChangeRecord,
|
|
318
|
+
LedgerEntry,
|
|
319
|
+
LoadEntry,
|
|
320
|
+
MergeEntry,
|
|
321
|
+
OfferableEntry,
|
|
322
|
+
OverlapEntry,
|
|
323
|
+
OverlapRecord,
|
|
324
|
+
PushMissEntry,
|
|
325
|
+
PushMissRecord,
|
|
326
|
+
RoundOneEntry,
|
|
327
|
+
RoundOneRecord,
|
|
328
|
+
RoundTwoEntry,
|
|
329
|
+
RoundTwoRecord,
|
|
330
|
+
ShipLapEntry,
|
|
331
|
+
ShipLapRecord,
|
|
332
|
+
SplitFiledEntry,
|
|
333
|
+
SplitFiledRecord,
|
|
334
|
+
SplitNoticeEntry,
|
|
335
|
+
SplitNoticeRecord,
|
|
336
|
+
StageEntry,
|
|
337
|
+
StageRecord,
|
|
338
|
+
StopEntry,
|
|
339
|
+
StopRecord,
|
|
340
|
+
TestPinnedEntry,
|
|
341
|
+
TestPinnedRecord,
|
|
342
|
+
TestRelatedEntry,
|
|
343
|
+
TestRelatedRecord,
|
|
344
|
+
UnitFileRecord,
|
|
345
|
+
UnitFilesEntry,
|
|
346
|
+
UnplannedNoticeEntry,
|
|
347
|
+
UnplannedNoticeRecord,
|
|
348
|
+
}
|
|
349
|
+
export { lane_ledger_schema }
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { closeSync, constants, openSync, writeSync } from 'node:fs'
|
|
2
|
+
import { durable_state } from '#scripts/josh/durable-state'
|
|
3
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
4
|
+
import { run_carry } from '#scripts/run/carry/run-carry'
|
|
5
|
+
import {
|
|
6
|
+
lane_ledger_schema,
|
|
7
|
+
type CoreWaitRecord,
|
|
8
|
+
type GateRecord,
|
|
9
|
+
type HeldRecord,
|
|
10
|
+
type LaneStateChangeRecord,
|
|
11
|
+
type LedgerEntry,
|
|
12
|
+
type OverlapRecord,
|
|
13
|
+
type PushMissRecord,
|
|
14
|
+
type RoundOneRecord,
|
|
15
|
+
type RoundTwoRecord,
|
|
16
|
+
type ShipLapRecord,
|
|
17
|
+
type SplitFiledRecord,
|
|
18
|
+
type SplitNoticeRecord,
|
|
19
|
+
type StageRecord,
|
|
20
|
+
type StopRecord,
|
|
21
|
+
type TestPinnedRecord,
|
|
22
|
+
type TestRelatedRecord,
|
|
23
|
+
type UnitFileRecord,
|
|
24
|
+
type UnplannedNoticeRecord,
|
|
25
|
+
} from './lane-ledger-schema'
|
|
26
|
+
|
|
27
|
+
// The measurement ledger the lane limit is tuned against: one JSON line per
|
|
28
|
+
// lane merge, per finished `josh gate`, per machine-load sample, per lane dispatch, per finished
|
|
29
|
+
// `josh ship` stage, per stopped `josh ship`, per round-2 decision, per core-budget wait and per
|
|
30
|
+
// `josh test:related` run, read back by `josh lane:stats` through `lane-ledger.ts`. Each line's shape
|
|
31
|
+
// is `lane-ledger-schema.ts`.
|
|
32
|
+
//
|
|
33
|
+
// **The writers' leaf, apart from the reader** (joshuafolkken/kit#5202). The gate, `followup`, `josh
|
|
34
|
+
// ship`, the dispatch and the backlog driver write here, and dozens of suites import them; the reading
|
|
35
|
+
// and the measurement modules built on it import `lane-ledger.ts`, so a change there no longer reaches
|
|
36
|
+
// every suite a writer sits under.
|
|
37
|
+
//
|
|
38
|
+
// **Its own file rather than the run's event stream.** The stream is capped at 500 events and is
|
|
39
|
+
// rewritten whole on every append, which is right for "where is the run" and wrong for a measurement
|
|
40
|
+
// that spans days of one-a-minute load samples. This file is only ever appended to, so concurrent lanes
|
|
41
|
+
// never lose each other's lines to a read-modify-write race.
|
|
42
|
+
//
|
|
43
|
+
// **Keyed on the common git directory, the event stream's key**, so a lane child's gate, the parent's
|
|
44
|
+
// merge and the sampler all land in one ledger per repository. It is a durable record
|
|
45
|
+
// (`durable-state.ts`), so a period runs across a reboot.
|
|
46
|
+
|
|
47
|
+
const LEDGER_PREFIX = durable_state.PREFIX.LANE_LEDGER
|
|
48
|
+
const LEDGER_SUFFIX = '.jsonl'
|
|
49
|
+
const LINE_SEPARATOR = '\n'
|
|
50
|
+
// `followup`'s wait for CI — a stage of a lane's run that no `josh ship` stage is the whole of.
|
|
51
|
+
const CI_WAIT_STAGE = 'ci-wait'
|
|
52
|
+
// The part of `followup`'s waits CodeRabbit spent running or rate-limited, and the rate-limited part
|
|
53
|
+
// alone (joshuafolkken/kit#4574).
|
|
54
|
+
const CODERABBIT_WAIT_STAGE = 'coderabbit-wait'
|
|
55
|
+
const CODERABBIT_RATE_LIMIT_STAGE = 'coderabbit-rate-limit'
|
|
56
|
+
// The rate-limit window `followup` waited out before posting its one `@coderabbitai review`
|
|
57
|
+
// (joshuafolkken/kit#5289).
|
|
58
|
+
const CODERABBIT_RETRIGGER_STAGE = 'coderabbit-retriggered'
|
|
59
|
+
// A detached `josh ship`'s fast checks in the agent's own turn — not a resumable ship stage, since the
|
|
60
|
+
// supervised gate runs them again (joshuafolkken/kit#4382).
|
|
61
|
+
const PRE_DETACH_STAGE = 'pre-detach'
|
|
62
|
+
// A ship's round 1 that reused a recorded review instead of running one (joshuafolkken/kit#4620).
|
|
63
|
+
const ROUND_ONE_REUSED = 'reused'
|
|
64
|
+
const LEDGER_FILE_MODE = 0o600
|
|
65
|
+
// The flags `detached-launch.ts` appends its log with, for the same deterministic shared-temp path.
|
|
66
|
+
const { O_APPEND, O_CREAT, O_NOFOLLOW, O_WRONLY } = constants
|
|
67
|
+
// eslint-disable-next-line no-bitwise -- POSIX open flags are a bit field; `||` here would be a bug
|
|
68
|
+
const APPEND_FLAGS = O_WRONLY | O_APPEND | O_CREAT | O_NOFOLLOW
|
|
69
|
+
|
|
70
|
+
const { KIND } = lane_ledger_schema
|
|
71
|
+
|
|
72
|
+
function target_of(repository: string): string {
|
|
73
|
+
return durable_state.path(LEDGER_PREFIX, repository, LEDGER_SUFFIX)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// The ledger of the repository this checkout belongs to, or `undefined` outside one. `git rev-parse`
|
|
77
|
+
// rejects outside a repository, and `josh gate` resolves this before it runs a check, so the rejection
|
|
78
|
+
// is read as "no ledger" rather than allowed to fail the gate it would only have measured.
|
|
79
|
+
//
|
|
80
|
+
// **A test run has no ledger either.** The writers sit on paths dozens of suites exercise — a ship
|
|
81
|
+
// stage, a dispatch, a `followup` — and one suite that forgot to mock this module would append its
|
|
82
|
+
// fixture durations to the real measurement; a test that writes passes its own path instead.
|
|
83
|
+
async function target(): Promise<string | undefined> {
|
|
84
|
+
if (process.env['VITEST'] !== undefined) return undefined
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
const repository = await run_carry.repository_directory()
|
|
88
|
+
|
|
89
|
+
return repository === undefined ? undefined : target_of(repository)
|
|
90
|
+
} catch {
|
|
91
|
+
return undefined
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// **Append, never rewrite** — `O_APPEND` keeps each short line whole across concurrent writers, and
|
|
96
|
+
// `O_NOFOLLOW` plus `stamp_file`'s ownership test keep a planted link or another account's file from
|
|
97
|
+
// receiving it. Any JSON-lines log takes it — the durable review stop log too (joshuafolkken/kit#4519).
|
|
98
|
+
function append(path: string, entry: object): void {
|
|
99
|
+
const descriptor = openSync(path, APPEND_FLAGS, LEDGER_FILE_MODE)
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
if (stamp_file.is_own_regular_file(path)) {
|
|
103
|
+
writeSync(descriptor, `${JSON.stringify(entry)}${LINE_SEPARATOR}`)
|
|
104
|
+
}
|
|
105
|
+
} finally {
|
|
106
|
+
closeSync(descriptor)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Best-effort: a measurement must never fail the gate or the merge it measures, so every error — no
|
|
111
|
+
// repository, an unwritable temp root — is dropped.
|
|
112
|
+
async function record(entry: LedgerEntry, path?: string): Promise<void> {
|
|
113
|
+
try {
|
|
114
|
+
const destination = path ?? (await target())
|
|
115
|
+
|
|
116
|
+
if (destination !== undefined) append(destination, entry)
|
|
117
|
+
} catch {
|
|
118
|
+
// Reporting is best-effort: a failed append is dropped rather than raised into the caller's work.
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function now_iso(): string {
|
|
123
|
+
return new Date().toISOString()
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// One finished `josh gate`, whether it passed or not — a failing gate cost the lane its time as well.
|
|
127
|
+
async function record_gate(path: string, gate: GateRecord): Promise<void> {
|
|
128
|
+
await record({ kind: KIND.GATE, at: now_iso(), ...gate }, path)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
async function record_merge(issue: number, at: Date = new Date()): Promise<void> {
|
|
132
|
+
await record({ kind: KIND.MERGE, at: at.toISOString(), issue })
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function record_dispatch(issue: number, path?: string): Promise<void> {
|
|
136
|
+
await record({ kind: KIND.DISPATCH, at: now_iso(), issue }, path)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async function record_stage(stage: StageRecord, path?: string): Promise<void> {
|
|
140
|
+
await record({ kind: KIND.STAGE, at: now_iso(), ...stage }, path)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async function record_stop(stop: StopRecord, path?: string): Promise<void> {
|
|
144
|
+
await record({ kind: KIND.STOP, at: now_iso(), ...stop }, path)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async function record_overlap(overlap: OverlapRecord, path?: string): Promise<void> {
|
|
148
|
+
await record({ kind: KIND.OVERLAP, at: now_iso(), ...overlap }, path)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// `waiting` is written only when the offer named issues, so a hold that waited on none stays one short line.
|
|
152
|
+
async function record_held(held: HeldRecord, path?: string): Promise<void> {
|
|
153
|
+
const waiting = held.waiting ?? []
|
|
154
|
+
const named = waiting.length > 0 ? { waiting: [...waiting] } : {}
|
|
155
|
+
|
|
156
|
+
await record({ kind: KIND.HELD, at: now_iso(), reason: held.reason, ...named }, path)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async function record_released(path?: string): Promise<void> {
|
|
160
|
+
await record({ kind: KIND.RELEASED, at: now_iso() }, path)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
async function record_lane_state(change: LaneStateChangeRecord, path?: string): Promise<void> {
|
|
164
|
+
await record({ kind: KIND.LANE_STATE, at: now_iso(), ...change }, path)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
async function record_offerable(is_offerable: boolean, path?: string): Promise<void> {
|
|
168
|
+
await record({ kind: KIND.OFFERABLE, at: now_iso(), is_offerable }, path)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async function record_round_one(round_one: RoundOneRecord, path?: string): Promise<void> {
|
|
172
|
+
await record({ kind: KIND.ROUND_ONE, at: now_iso(), ...round_one }, path)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
async function record_round_two(round_two: RoundTwoRecord, path?: string): Promise<void> {
|
|
176
|
+
await record({ kind: KIND.ROUND_TWO, at: now_iso(), ...round_two }, path)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async function record_core_wait(wait: CoreWaitRecord, path?: string): Promise<void> {
|
|
180
|
+
await record({ kind: KIND.CORE_WAIT, at: now_iso(), ...wait }, path)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function record_unit_files(
|
|
184
|
+
files: ReadonlyArray<UnitFileRecord>,
|
|
185
|
+
path?: string,
|
|
186
|
+
): Promise<void> {
|
|
187
|
+
await record({ kind: KIND.UNIT_FILES, at: now_iso(), files: [...files] }, path)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
async function record_test_related(run: TestRelatedRecord, path?: string): Promise<void> {
|
|
191
|
+
await record({ kind: KIND.TEST_RELATED, at: now_iso(), ...run }, path)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
async function record_test_pinned(run: TestPinnedRecord, path?: string): Promise<void> {
|
|
195
|
+
await record({ kind: KIND.TEST_PINNED, at: now_iso(), ...run }, path)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async function record_split_notice(notice: SplitNoticeRecord, path?: string): Promise<void> {
|
|
199
|
+
await record({ kind: KIND.SPLIT_NOTICE, at: now_iso(), ...notice }, path)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async function record_split_filed(filed: SplitFiledRecord, path?: string): Promise<void> {
|
|
203
|
+
await record({ kind: KIND.SPLIT_FILED, at: now_iso(), ...filed }, path)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
async function record_push_miss(miss: PushMissRecord, path?: string): Promise<void> {
|
|
207
|
+
await record({ kind: KIND.PUSH_MISS, at: now_iso(), ...miss }, path)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async function record_ship_lap(lap: ShipLapRecord, path?: string): Promise<void> {
|
|
211
|
+
await record({ kind: KIND.SHIP_LAP, at: now_iso(), ...lap }, path)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
async function record_unplanned_notice(
|
|
215
|
+
notice: UnplannedNoticeRecord,
|
|
216
|
+
path?: string,
|
|
217
|
+
): Promise<void> {
|
|
218
|
+
await record({ kind: KIND.UNPLANNED_NOTICE, at: now_iso(), ...notice }, path)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const lane_ledger_write = {
|
|
222
|
+
CI_WAIT_STAGE,
|
|
223
|
+
CODERABBIT_RATE_LIMIT_STAGE,
|
|
224
|
+
CODERABBIT_RETRIGGER_STAGE,
|
|
225
|
+
CODERABBIT_WAIT_STAGE,
|
|
226
|
+
KIND,
|
|
227
|
+
LINE_SEPARATOR,
|
|
228
|
+
PRE_DETACH_STAGE,
|
|
229
|
+
ROUND_ONE_REUSED,
|
|
230
|
+
append,
|
|
231
|
+
record,
|
|
232
|
+
record_core_wait,
|
|
233
|
+
record_dispatch,
|
|
234
|
+
record_gate,
|
|
235
|
+
record_held,
|
|
236
|
+
record_lane_state,
|
|
237
|
+
record_released,
|
|
238
|
+
record_merge,
|
|
239
|
+
record_overlap,
|
|
240
|
+
record_offerable,
|
|
241
|
+
record_push_miss,
|
|
242
|
+
record_round_one,
|
|
243
|
+
record_round_two,
|
|
244
|
+
record_ship_lap,
|
|
245
|
+
record_split_filed,
|
|
246
|
+
record_split_notice,
|
|
247
|
+
record_stage,
|
|
248
|
+
record_stop,
|
|
249
|
+
record_test_pinned,
|
|
250
|
+
record_test_related,
|
|
251
|
+
record_unit_files,
|
|
252
|
+
record_unplanned_notice,
|
|
253
|
+
target,
|
|
254
|
+
target_of,
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export { lane_ledger_write }
|