@joshuafolkken/kit 1.1514.0 → 1.1784.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/settings.json +5 -5
- 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 +5 -5
- package/.claude/skills/workflow-commands/background-commands.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +10 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +17 -13
- package/.claude/skills/workflow-commands/backlogrun-park.md +14 -23
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +13 -7
- package/.claude/skills/workflow-commands/delegation.md +6 -5
- package/.claude/skills/workflow-commands/entry-sequence.md +9 -9
- package/.claude/skills/workflow-commands/followup.md +9 -31
- package/.claude/skills/workflow-commands/fullrun-steps.md +36 -45
- package/.claude/skills/workflow-commands/fullrun.md +2 -2
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +16 -12
- 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 +1 -1
- package/.claude/skills/workflow-commands/pre-gate-cut.md +13 -30
- package/.claude/skills/workflow-commands/prerequisite.md +10 -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 +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +13 -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 +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +120 -10
- package/.github/workflows/publish.yml +8 -1
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +3 -7
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +3 -7
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +79 -37
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-TNUMY6NL.js → chunk-PT5R6UJD.js} +4193 -1900
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-APUO6U4J.js → chunk-WR2KQAYZ.js} +1843 -440
- package/dist/hooks/{chunk-O6GDRNJB.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +5 -6
- package/dist/hooks/inputs.json +443 -317
- package/dist/hooks/pretool-guard.js +7 -25
- package/dist/hooks/session-lang.js +44 -51
- package/dist/hooks/stop-guard.js +7716 -2187
- package/dist/josh.js +6002 -3583
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +3 -1
- package/package.json +10 -48
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -7
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +33 -16
- package/prompts/collaboration-workflow/lane-instructions.md +1 -2
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +4 -6
- package/prompts/collaboration-workflow/output-bounds.md +2 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +5 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +2 -2
- 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 +14 -4
- package/prompts/collaboration-workflow/wip-cap.md +1 -1
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +41 -21
- package/prompts/testing-guide.md +8 -43
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +14 -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 +4 -3
- 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 +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +53 -6
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +30 -7
- 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 +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- 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 +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- 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/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/investigation-guard.ts +0 -8
- package/scripts/delegation/investigation-reads.ts +3 -4
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +8 -6
- 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/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 +31 -0
- 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 +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- 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-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-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +80 -98
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +37 -5
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-ledger.ts +32 -4
- package/scripts/gate/gate-plan.ts +41 -34
- package/scripts/gate/gate-report.ts +14 -2
- package/scripts/gate/gate-run-steps.ts +53 -8
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +27 -24
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-write.ts +67 -29
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -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 +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +2 -2
- package/scripts/git/main-merge.ts +25 -9
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- 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 +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +0 -8
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +30 -3
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +32 -19
- package/scripts/hooks/reserved-run.ts +67 -9
- package/scripts/hooks/run-hook.sh +13 -4
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +2 -21
- package/scripts/hooks/stop-guard.ts +13 -9
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -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/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -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 +34 -78
- 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/expected-effect-lint.ts +1 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +0 -9
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +12 -7
- 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 +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -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 +81 -90
- package/scripts/issue/issue-lint-cli.ts +2 -10
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -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 +111 -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.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- 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 +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- 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 +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +15 -43
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +4 -1
- 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 +157 -158
- 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 +111 -71
- 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 +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +103 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -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 +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-logic.ts +6 -13
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- 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 +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +62 -21
- package/scripts/lane/lane-child-invocation.ts +8 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +24 -3
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +92 -123
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-measure-cli.ts +57 -11
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -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 +24 -3
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +19 -5
- package/scripts/lane/lane-session-broker.ts +102 -21
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw.ts +50 -49
- 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/read-file.ts +3 -1
- 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/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.ts +265 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +279 -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 +62 -30
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- 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/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- 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 +18 -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 +6 -15
- package/scripts/report/report-format-reference.ts +2 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- 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/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +81 -15
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -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 +8 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +80 -2
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +7 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +4 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +9 -1
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +1 -1
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +1 -1
- package/scripts/rules/shell-segments.ts +35 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +3 -4
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- 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 +67 -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 +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -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 +82 -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 +116 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -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-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- 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 +151 -27
- package/scripts/run/board/run-board-reason.ts +235 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -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 +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -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 +207 -265
- 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 +2 -2
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +147 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +122 -107
- 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.ts +9 -4
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +6 -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 +34 -8
- 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 +183 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +62 -48
- 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 +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +33 -9
- package/scripts/run/merge/run-merge-steps.ts +120 -85
- package/scripts/run/merge/run-merge.ts +38 -37
- 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.ts +2 -1
- 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 +2 -2
- 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 +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step.ts +1 -1
- 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 +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +63 -140
- package/scripts/run/ship/run-ship-detach.ts +19 -8
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +18 -2
- package/scripts/run/ship/run-ship-overlap.ts +42 -5
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +81 -24
- package/scripts/run/ship/run-ship-preflight.ts +137 -32
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +107 -23
- package/scripts/run/ship/run-ship-review-steps.ts +105 -151
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +43 -6
- package/scripts/run/ship/run-ship.ts +30 -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-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- 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 +3 -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 +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- 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 +15 -0
- package/scripts/split/split-measure.ts +65 -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/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-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +42 -24
- package/scripts/test/unit-count-file.ts +37 -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 +61 -149
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- 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 +10 -1
- package/scripts/time-runtime/time-shell.ts +97 -10
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- 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/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -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 +4 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -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-CDY4NFQG.js +0 -15
- 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-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-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/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/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto'
|
|
2
|
-
import { mkdirSync, readFileSync,
|
|
2
|
+
import { mkdirSync, readFileSync, rmSync, unlinkSync } from 'node:fs'
|
|
3
3
|
import path from 'node:path'
|
|
4
4
|
import { setTimeout as sleep } from 'node:timers/promises'
|
|
5
5
|
import { git_common_directory } from '#scripts/git/git-common-directory'
|
|
6
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
6
7
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
8
|
+
import { atomic_write } from '#scripts/lib/atomic-write'
|
|
7
9
|
import { json_value } from '#scripts/lib/json-value'
|
|
10
|
+
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
11
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
8
12
|
import { z } from 'zod'
|
|
9
13
|
import { lane_broker_server, type BrokerServer } from './lane-broker-server'
|
|
10
14
|
import type { LaneInfo } from './lane-registry'
|
|
@@ -28,11 +32,23 @@ const POLL_MS = 100
|
|
|
28
32
|
const LEGACY_HEARTBEAT_MS = 500
|
|
29
33
|
const LEGACY_HEARTBEAT_LIMIT_MS = 3000
|
|
30
34
|
const MINUTE_MS = 60_000
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
// **A relaunch is answered once the session has started, a review once it has finished**: waiting out a
|
|
36
|
+
// review's limit on a relaunch left the stopped lane idle for half an hour (joshuafolkken/kit#4344).
|
|
37
|
+
const REQUEST_LIMIT_MINUTES: Readonly<Record<BrokerAction['kind'], number>> = {
|
|
38
|
+
review: 30,
|
|
39
|
+
relaunch: 2,
|
|
40
|
+
}
|
|
33
41
|
const request_schema = z
|
|
34
42
|
.object({ session: z.uuid(), nonce: z.uuid(), action: lane_session_action.action_schema })
|
|
35
43
|
.strict()
|
|
44
|
+
// **A request this broker cannot read is still answered**: the supervisor reloads on new code only at
|
|
45
|
+
// its next pass boundary (`run-wake-code.ts`), so until then a lane's ship can run a newer main than
|
|
46
|
+
// the broker's, and a field the ship added made the request unreadable and
|
|
47
|
+
// the ship waited out the whole limit on a server that had dropped it (joshuafolkken/kit#4230).
|
|
48
|
+
// **The reason names the fields the schema refused**: a guess at the supervisor's age hid a field the
|
|
49
|
+
// broker's schema had never learned even on one main (joshuafolkken/kit#4489).
|
|
50
|
+
const envelope_schema = z.looseObject({ session: z.uuid(), nonce: z.uuid() })
|
|
51
|
+
const UNREADABLE_REASON = 'the broker could not read the request'
|
|
36
52
|
const response_schema = z
|
|
37
53
|
.object({
|
|
38
54
|
session: z.uuid(),
|
|
@@ -44,7 +60,7 @@ const response_schema = z
|
|
|
44
60
|
// **A failure's reason sits beside the response, never in it**: a ship branched before the reason parses
|
|
45
61
|
// the response strictly, so a new field would read as no server (joshuafolkken/kit#3974).
|
|
46
62
|
const reason_schema = z.object({ nonce: z.string(), reason: z.string() }).strict()
|
|
47
|
-
type
|
|
63
|
+
type BrokerEnvelope = z.infer<typeof envelope_schema>
|
|
48
64
|
type BrokerResponse = z.infer<typeof response_schema>
|
|
49
65
|
|
|
50
66
|
const { failure } = lane_session_action
|
|
@@ -73,19 +89,56 @@ function read_record<T>(target: string, schema: z.ZodType<T>): T | undefined {
|
|
|
73
89
|
}
|
|
74
90
|
|
|
75
91
|
function write_record(target: string, body: BrokerResponse | z.infer<typeof reason_schema>): void {
|
|
76
|
-
|
|
92
|
+
atomic_write.replace_file(target, JSON.stringify(body))
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function refused_field(issue: z.core.$ZodIssue): ReadonlyArray<string> {
|
|
96
|
+
const at = issue.path.map(String)
|
|
97
|
+
|
|
98
|
+
if (issue.code !== 'unrecognized_keys') return [`${at.join('.')}: ${issue.message}`]
|
|
99
|
+
|
|
100
|
+
return issue.keys.map((key) => `unrecognized key: ${[...at, key].join('.')}`)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function unreadable(error: z.ZodError): BrokerAnswer {
|
|
104
|
+
const fields = error.issues.flatMap((issue) => refused_field(issue))
|
|
105
|
+
|
|
106
|
+
return failure(`${UNREADABLE_REASON} — ${fields.join('; ')}`)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async function answer_request(lane: LaneInfo, received: BrokerEnvelope): Promise<BrokerAnswer> {
|
|
110
|
+
const parsed = request_schema.safeParse(received)
|
|
111
|
+
|
|
112
|
+
return parsed.success
|
|
113
|
+
? await lane_session_action.answer(lane, parsed.data.action)
|
|
114
|
+
: unreadable(parsed.error)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// The requests this process's servers are answering now — what the supervisor's reload waits out
|
|
118
|
+
// (`run-wake-cli.ts`), since closing a server mid-review fails that review.
|
|
119
|
+
const answering = { count: 0 }
|
|
77
120
|
|
|
78
|
-
|
|
79
|
-
|
|
121
|
+
function is_answering(): boolean {
|
|
122
|
+
return answering.count > 0
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async function answer_counted(lane: LaneInfo, received: BrokerEnvelope): Promise<BrokerAnswer> {
|
|
126
|
+
answering.count += 1
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
return await answer_request(lane, received)
|
|
130
|
+
} finally {
|
|
131
|
+
answering.count -= 1
|
|
132
|
+
}
|
|
80
133
|
}
|
|
81
134
|
|
|
82
135
|
async function process_request(
|
|
83
136
|
lane: LaneInfo,
|
|
84
137
|
response: string,
|
|
85
|
-
received:
|
|
138
|
+
received: BrokerEnvelope,
|
|
86
139
|
state: { current: BrokerResponse },
|
|
87
140
|
): Promise<void> {
|
|
88
|
-
const answer = await
|
|
141
|
+
const answer = await answer_counted(lane, received)
|
|
89
142
|
const { session, nonce } = received
|
|
90
143
|
|
|
91
144
|
if (!answer.is_success) write_record(reason_path(response), { nonce, reason: answer.reason })
|
|
@@ -103,7 +156,7 @@ async function serve(
|
|
|
103
156
|
const target = request_path(lane.directory, lane.issue)
|
|
104
157
|
|
|
105
158
|
while (state.is_running) {
|
|
106
|
-
const received = read_record(target,
|
|
159
|
+
const received = read_record(target, envelope_schema)
|
|
107
160
|
|
|
108
161
|
if (received?.session === session && received.nonce !== last_nonce) {
|
|
109
162
|
last_nonce = received.nonce
|
|
@@ -233,8 +286,10 @@ async function wait_response(
|
|
|
233
286
|
target: string,
|
|
234
287
|
session: string,
|
|
235
288
|
nonce: string,
|
|
289
|
+
kind: BrokerAction['kind'],
|
|
236
290
|
): Promise<BrokerAnswer> {
|
|
237
|
-
const
|
|
291
|
+
const limit_minutes = REQUEST_LIMIT_MINUTES[kind]
|
|
292
|
+
const deadline = Date.now() + limit_minutes * MINUTE_MS
|
|
238
293
|
|
|
239
294
|
while (Date.now() < deadline) {
|
|
240
295
|
const verdict = response_verdict(target, session, nonce)
|
|
@@ -244,7 +299,7 @@ async function wait_response(
|
|
|
244
299
|
await sleep(POLL_MS)
|
|
245
300
|
}
|
|
246
301
|
|
|
247
|
-
return failure(`the broker gave no answer within ${String(
|
|
302
|
+
return failure(`the broker gave no answer within ${String(limit_minutes)} minutes`)
|
|
248
303
|
}
|
|
249
304
|
|
|
250
305
|
function live_response(target: string): BrokerResponse | undefined {
|
|
@@ -255,12 +310,18 @@ function live_response(target: string): BrokerResponse | undefined {
|
|
|
255
310
|
: undefined
|
|
256
311
|
}
|
|
257
312
|
|
|
313
|
+
// The session of the server answering for this lane now, or `undefined` while none does. A new session
|
|
314
|
+
// means the server that held the lane before has ended.
|
|
315
|
+
function serving_session(directory: string, issue: string): string | undefined {
|
|
316
|
+
const target = response_path(directory, issue)
|
|
317
|
+
|
|
318
|
+
return target === undefined ? undefined : live_response(target)?.session
|
|
319
|
+
}
|
|
320
|
+
|
|
258
321
|
// Whether a server answers for this lane now — what a Claude lane's ship asks before it hands a session
|
|
259
322
|
// over rather than starting the session itself.
|
|
260
323
|
function is_serving(directory: string, issue: string): boolean {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
return target !== undefined && live_response(target) !== undefined
|
|
324
|
+
return serving_session(directory, issue) !== undefined
|
|
264
325
|
}
|
|
265
326
|
|
|
266
327
|
// **A request nobody waits for any more is taken back**: a server busy with an earlier request reads the
|
|
@@ -270,11 +331,17 @@ function withdraw(pending: string, nonce: string): void {
|
|
|
270
331
|
if (read_record(pending, request_schema)?.nonce === nonce) stamp_file.remove_stamp(pending)
|
|
271
332
|
}
|
|
272
333
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
334
|
+
// A failure is put on the run's stream as well as the ship's output, so a broker that cannot serve the
|
|
335
|
+
// lane is seen from `run:board` rather than only from the ship log (joshuafolkken/kit#4230).
|
|
336
|
+
async function record_failure(issue: string, answer: BrokerAnswer): Promise<void> {
|
|
337
|
+
if (answer.is_success) return
|
|
338
|
+
|
|
339
|
+
const text = `${issue_cite.plain(issue)} lane broker: ${answer.reason}`
|
|
340
|
+
|
|
341
|
+
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.NOTE, text)
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
async function send(directory: string, issue: string, action: BrokerAction): Promise<BrokerAnswer> {
|
|
278
345
|
const target = response_path(directory, issue)
|
|
279
346
|
const response = target === undefined ? undefined : live_response(target)
|
|
280
347
|
|
|
@@ -285,19 +352,33 @@ async function request(
|
|
|
285
352
|
const pending = request_path(directory, issue)
|
|
286
353
|
|
|
287
354
|
stamp_file.replace_stamp(pending, body)
|
|
288
|
-
const answer = await wait_response(target, response.session, nonce)
|
|
355
|
+
const answer = await wait_response(target, response.session, nonce, action.kind)
|
|
289
356
|
|
|
290
357
|
withdraw(pending, nonce)
|
|
291
358
|
|
|
292
359
|
return answer
|
|
293
360
|
}
|
|
294
361
|
|
|
362
|
+
async function request(
|
|
363
|
+
directory: string,
|
|
364
|
+
issue: string,
|
|
365
|
+
action: BrokerAction,
|
|
366
|
+
): Promise<BrokerAnswer> {
|
|
367
|
+
const answer = await send(directory, issue, action)
|
|
368
|
+
|
|
369
|
+
await record_failure(issue, answer)
|
|
370
|
+
|
|
371
|
+
return answer
|
|
372
|
+
}
|
|
373
|
+
|
|
295
374
|
const lane_session_broker = {
|
|
375
|
+
is_answering,
|
|
296
376
|
is_serving,
|
|
297
377
|
request,
|
|
298
378
|
request_path,
|
|
299
379
|
response_path,
|
|
300
380
|
review_paths: lane_session_action.review_paths,
|
|
381
|
+
serving_session,
|
|
301
382
|
with_server,
|
|
302
383
|
}
|
|
303
384
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PROCESS_ALIVE,
|
|
3
|
+
PROCESS_NONE,
|
|
4
|
+
PROCESS_UNKNOWN,
|
|
5
|
+
type ProcessTrace,
|
|
6
|
+
} from '#scripts/run/run-liveness'
|
|
7
|
+
import { lane_child_invocation } from './lane-child-invocation'
|
|
8
|
+
import { lane_handoff } from './lane-handoff'
|
|
9
|
+
import { lane_process_table, type ProcessTable, type TableRead } from './lane-process-table'
|
|
10
|
+
import type { TreeProbes } from './lane-reap'
|
|
11
|
+
|
|
12
|
+
// `lane_await.process_trace_default` answered for many lanes from one process snapshot
|
|
13
|
+
// (joshuafolkken/kit#4245). That probe starts a synchronous `pgrep` per lane and reads the ship record's
|
|
14
|
+
// start time through another `ps`, so a reader asking about every lane each few seconds — `run:board`,
|
|
15
|
+
// the backlogrun drive — blocked its event loop for as long as the lanes took between them.
|
|
16
|
+
//
|
|
17
|
+
// **The answers are the probe's own.** A command line matching the lane's pattern, or a detached ship
|
|
18
|
+
// still running for it, is `alive`; a snapshot that matched neither is `none`; a snapshot that could not
|
|
19
|
+
// be read is `unknown`, as an unanswered `pgrep` is. The ship record is read only for a lane no process
|
|
20
|
+
// matched, which is the only lane its answer can change.
|
|
21
|
+
|
|
22
|
+
type TraceRead = (issue: string) => ProcessTrace
|
|
23
|
+
|
|
24
|
+
function is_matched(probes: TreeProbes, issue: string): boolean {
|
|
25
|
+
return probes.matching(lane_child_invocation.process_pattern(issue)).length > 0
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Each of `issues` traced from `rows`, the snapshot `undefined` where it could not be read. */
|
|
29
|
+
async function traces_of(
|
|
30
|
+
issues: ReadonlyArray<string>,
|
|
31
|
+
rows: ProcessTable | undefined,
|
|
32
|
+
): Promise<TraceRead> {
|
|
33
|
+
if (rows === undefined) return () => PROCESS_UNKNOWN
|
|
34
|
+
|
|
35
|
+
const probes = lane_process_table.probes_of(rows)
|
|
36
|
+
const unmatched = issues.filter((issue) => !is_matched(probes, issue))
|
|
37
|
+
const is_shipping =
|
|
38
|
+
unmatched.length === 0
|
|
39
|
+
? (): boolean => false
|
|
40
|
+
: await lane_handoff.ship_reader(lane_process_table.start_reader(rows))
|
|
41
|
+
const idle = new Set(unmatched.filter((issue) => !is_shipping(issue)))
|
|
42
|
+
|
|
43
|
+
return (issue) => (idle.has(issue) ? PROCESS_NONE : PROCESS_ALIVE)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function never_merge_waiting(): boolean {
|
|
47
|
+
return false
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Whether each of `issues` has a detached ship waiting on its merge (`lane_handoff.merge_wait_reader`),
|
|
52
|
+
* read from `rows`. The record is read only where the snapshot shows that lane's ship supervisor, so a
|
|
53
|
+
* count with no ship running starts no process (joshuafolkken/kit#4466).
|
|
54
|
+
*/
|
|
55
|
+
async function merge_waits_of(
|
|
56
|
+
issues: ReadonlyArray<string>,
|
|
57
|
+
rows: ProcessTable | undefined,
|
|
58
|
+
): Promise<(issue: string) => boolean> {
|
|
59
|
+
if (rows === undefined) return never_merge_waiting
|
|
60
|
+
|
|
61
|
+
const probes = lane_process_table.probes_of(rows)
|
|
62
|
+
const shipping = issues.filter(
|
|
63
|
+
(issue) => probes.matching(lane_child_invocation.ship_pattern(issue)).length > 0,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
if (shipping.length === 0) return never_merge_waiting
|
|
67
|
+
|
|
68
|
+
return await lane_handoff.merge_wait_reader(lane_process_table.start_reader(rows))
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** How many of `issues` have a detached ship in this checkout waiting on its merge, from a fresh snapshot. */
|
|
72
|
+
async function count_merge_waiting(
|
|
73
|
+
issues: ReadonlyArray<string>,
|
|
74
|
+
table: TableRead = lane_process_table.read_table,
|
|
75
|
+
): Promise<number> {
|
|
76
|
+
const is_waiting = await merge_waits_of(issues, await table())
|
|
77
|
+
|
|
78
|
+
return issues.filter((issue) => is_waiting(issue)).length
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const lane_snapshot_trace = { count_merge_waiting, merge_waits_of, traces_of }
|
|
82
|
+
|
|
83
|
+
export { lane_snapshot_trace }
|
|
84
|
+
export type { TraceRead }
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// The spans an issue's starts open and its ends close, shared by `josh lane:stats`' gaps
|
|
2
|
+
// (`lane-gap-stats.ts`) and `run:board`'s in-lane time (`run-board-lane-time.ts`)
|
|
3
|
+
// (joshuafolkken/kit#4463).
|
|
4
|
+
|
|
5
|
+
// One instant an issue's wait can end at. `issue` is absent on a stage whose writer held none.
|
|
6
|
+
interface IssueAt {
|
|
7
|
+
issue: number | undefined
|
|
8
|
+
at_ms: number
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface IssuePair {
|
|
12
|
+
starts: ReadonlyArray<IssueAt>
|
|
13
|
+
bounds: ReadonlyArray<IssueAt>
|
|
14
|
+
ends: ReadonlyArray<IssueAt>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface Span {
|
|
18
|
+
from_ms: number
|
|
19
|
+
end_ms: number | undefined
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// The issue's next start of any kind closes the window: an end after it belongs to that later start,
|
|
23
|
+
// so a start never ended stays not ended rather than borrowing a later run's end.
|
|
24
|
+
function next_start_ms(
|
|
25
|
+
starts: ReadonlyArray<IssueAt>,
|
|
26
|
+
issue: number | undefined,
|
|
27
|
+
from_ms: number,
|
|
28
|
+
): number {
|
|
29
|
+
const later = starts.filter((other) => other.issue === issue && other.at_ms > from_ms)
|
|
30
|
+
|
|
31
|
+
return Math.min(...later.map((other) => other.at_ms))
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Each start until the first end of its own issue, before that issue's next start in `bounds`.
|
|
35
|
+
function issue_spans(pair: IssuePair): Array<Span> {
|
|
36
|
+
return pair.starts.map((start) => {
|
|
37
|
+
const until_ms = next_start_ms(pair.bounds, start.issue, start.at_ms)
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
from_ms: start.at_ms,
|
|
41
|
+
end_ms: pair.ends.find(
|
|
42
|
+
(end) => end.issue === start.issue && end.at_ms >= start.at_ms && end.at_ms < until_ms,
|
|
43
|
+
)?.at_ms,
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const lane_spans = { issue_spans }
|
|
49
|
+
|
|
50
|
+
export { lane_spans }
|
|
51
|
+
export type { IssueAt, IssuePair, Span }
|
|
@@ -89,8 +89,11 @@ const LIVE_PROBES: SpentProbes = {
|
|
|
89
89
|
unpushed_commits: read_unpushed_commits,
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
// The one probe the in-use readings take, so a reader holding a process snapshot passes its own.
|
|
93
|
+
type TraceProbes = Pick<SpentProbes, 'process_trace'>
|
|
94
|
+
|
|
92
95
|
// A stranded lane has no work tree for a child to be in, so it is never in use.
|
|
93
|
-
function trace_of(lane: LaneInfo, probes:
|
|
96
|
+
function trace_of(lane: LaneInfo, probes: TraceProbes): ProcessTrace {
|
|
94
97
|
return lane.is_stranded ? PROCESS_NONE : probes.process_trace(lane.issue)
|
|
95
98
|
}
|
|
96
99
|
|
|
@@ -178,7 +181,7 @@ function issues_traced(traced: ReadonlyArray<TracedLane>, trace: ProcessTrace):
|
|
|
178
181
|
return traced.filter(([, answer]) => answer === trace).map(([issue]) => issue)
|
|
179
182
|
}
|
|
180
183
|
|
|
181
|
-
function traced_of(lanes: ReadonlyArray<LaneInfo>, probes:
|
|
184
|
+
function traced_of(lanes: ReadonlyArray<LaneInfo>, probes: TraceProbes): Array<TracedLane> {
|
|
182
185
|
return lanes.map((lane): TracedLane => [lane.issue, trace_of(lane, probes)])
|
|
183
186
|
}
|
|
184
187
|
|
|
@@ -195,7 +198,7 @@ async function lanes_in_use(probes: SpentProbes = LIVE_PROBES): Promise<LaneUse>
|
|
|
195
198
|
/** The lanes no child is working in, read as such — never one whose probe did not answer. */
|
|
196
199
|
function idle_lanes(
|
|
197
200
|
lanes: ReadonlyArray<LaneInfo>,
|
|
198
|
-
probes:
|
|
201
|
+
probes: TraceProbes = LIVE_PROBES,
|
|
199
202
|
): Array<string> {
|
|
200
203
|
return issues_traced(traced_of(lanes, probes), PROCESS_NONE)
|
|
201
204
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MS_PER_MINUTE } from '#scripts/lib/timeouts'
|
|
1
2
|
import { run_ship_stage } from '#scripts/run/ship/run-ship-stage'
|
|
2
3
|
import { lane_ledger, type DispatchEntry, type LedgerEntry, type StageEntry } from './lane-ledger'
|
|
3
4
|
import { lane_stats, type StatsWindow } from './lane-stats'
|
|
@@ -14,9 +15,10 @@ import { lane_stats, type StatsWindow } from './lane-stats'
|
|
|
14
15
|
// dispatched, and a ship resumed after a fix cannot record the implementation twice.
|
|
15
16
|
//
|
|
16
17
|
// **`ci-wait` is `followup`'s own lap, inside the `followup` stage** — a row of its own so the wait for
|
|
17
|
-
// CI reads beside `review`, the round-one review it would overlap.
|
|
18
|
+
// CI reads beside `review`, the round-one review it would overlap. `coderabbit-wait` and
|
|
19
|
+
// `coderabbit-rate-limit` follow it: how much of `followup`'s waiting CodeRabbit was still running or
|
|
20
|
+
// rate-limited, a row recorded only by a run that saw it.
|
|
18
21
|
|
|
19
|
-
const MS_PER_MINUTE = 60_000
|
|
20
22
|
const DECIMALS = 1
|
|
21
23
|
const NOT_MEASURED = 'not measured'
|
|
22
24
|
const IMPLEMENT = 'implement'
|
|
@@ -25,6 +27,7 @@ const { STAGE } = run_ship_stage
|
|
|
25
27
|
const STAGES = [
|
|
26
28
|
IMPLEMENT,
|
|
27
29
|
STAGE.PREFLIGHT,
|
|
30
|
+
lane_ledger.PRE_DETACH_STAGE,
|
|
28
31
|
STAGE.REVIEW,
|
|
29
32
|
STAGE.SYNC,
|
|
30
33
|
STAGE.GATE,
|
|
@@ -32,6 +35,8 @@ const STAGES = [
|
|
|
32
35
|
STAGE.ROUND_TWO,
|
|
33
36
|
STAGE.FOLLOWUP,
|
|
34
37
|
lane_ledger.CI_WAIT_STAGE,
|
|
38
|
+
lane_ledger.CODERABBIT_WAIT_STAGE,
|
|
39
|
+
lane_ledger.CODERABBIT_RATE_LIMIT_STAGE,
|
|
35
40
|
STAGE.REPORT,
|
|
36
41
|
] as const
|
|
37
42
|
|