@joshuafolkken/kit 1.1471.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 +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- 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 +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- 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-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- 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 +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- 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 +6 -7
- 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 +54 -7
- 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 +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 +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 +69 -0
- 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 +137 -18
- 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 +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- 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 +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- 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 +31 -60
- 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 +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- 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 +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- 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 +65 -129
- 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-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- 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/gh/git-pr.ts +13 -1
- 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 +78 -0
- package/scripts/git/main-merge.ts +39 -14
- 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 +5 -16
- 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 +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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 +60 -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 +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +7 -13
- 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 +19 -25
- 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/markdown-section.ts +19 -5
- 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 +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +31 -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 +112 -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 +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- 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 +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- 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 +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- 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 +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- 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-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- 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 +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- 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 +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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 +14 -5
- 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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -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 +12 -11
- 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 +4 -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-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -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 +82 -16
- 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 +67 -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 +90 -3
- 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 +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -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 +76 -7
- 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/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- 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 +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- 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 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- 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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -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 +240 -61
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- 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 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- 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 +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -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 +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- 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 +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- 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 +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- 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-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- 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 +55 -6
- 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 +54 -21
- 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 +71 -137
- 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 +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- 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 +10 -3
- 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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- 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/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 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { lane_ledger, type HeldEntry, type LedgerEntry } from './lane-ledger'
|
|
2
|
+
import { lane_stage_stats } from './lane-stage-stats'
|
|
3
|
+
import { lane_stats, type StatsWindow } from './lane-stats'
|
|
4
|
+
|
|
5
|
+
// How long a free lane stayed empty, and why: the ledger's `held` entries of one period reduced to one
|
|
6
|
+
// row per reason, printed by `josh lane:stats` so the idle capacity a backlog stall episode reported
|
|
7
|
+
// is split by cause — an offer that started nothing apart from a driver waiting on its session
|
|
8
|
+
// (joshuafolkken/kit#3995).
|
|
9
|
+
//
|
|
10
|
+
// **A hold lasts until the next `held`, `released` or `dispatch` entry**: the driver writes one on every
|
|
11
|
+
// offered pass that started nothing, so consecutive entries tile the wait and the last one ends at the
|
|
12
|
+
// dispatch — or at the release a full pool or a finished run writes.
|
|
13
|
+
// A hold nothing followed is counted under `not ended`, kept out of the minutes, whose time has no end;
|
|
14
|
+
// one past `MAX_HOLD_MS` is a driver nobody restarted, read as ended at the cap.
|
|
15
|
+
|
|
16
|
+
const COLUMNS = [
|
|
17
|
+
'held by',
|
|
18
|
+
'total (min)',
|
|
19
|
+
'median (min)',
|
|
20
|
+
'max (min)',
|
|
21
|
+
'holds',
|
|
22
|
+
'not ended',
|
|
23
|
+
] as const
|
|
24
|
+
const MS_PER_HOUR = 3_600_000
|
|
25
|
+
const MAX_HOLD_MS = MS_PER_HOUR
|
|
26
|
+
const { NOT_MEASURED } = lane_stage_stats
|
|
27
|
+
// A period with no hold: the table still prints, so a reader sees zero holds rather than no table.
|
|
28
|
+
const NONE_ROW = ['none', NOT_MEASURED, NOT_MEASURED, NOT_MEASURED, '0', '0']
|
|
29
|
+
const { is_dispatch, is_number } = lane_stage_stats
|
|
30
|
+
|
|
31
|
+
interface Hold {
|
|
32
|
+
reason: string
|
|
33
|
+
wait_ms: number | undefined
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function is_held(entry: LedgerEntry): entry is HeldEntry {
|
|
37
|
+
return entry.kind === lane_ledger.KIND.HELD
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function is_hold_end(entry: LedgerEntry): boolean {
|
|
41
|
+
return is_held(entry) || is_dispatch(entry) || entry.kind === lane_ledger.KIND.RELEASED
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Every instant a hold can end at, parsed and sorted once: holds come once a minute, so re-reading the
|
|
45
|
+
// whole ledger per hold made a week's `lane:stats` take seconds.
|
|
46
|
+
function end_times(entries: ReadonlyArray<LedgerEntry>): Array<number> {
|
|
47
|
+
return entries
|
|
48
|
+
.filter((entry) => is_hold_end(entry))
|
|
49
|
+
.map((entry) => Date.parse(entry.at))
|
|
50
|
+
.filter((at) => Number.isFinite(at))
|
|
51
|
+
.toSorted((left, right) => left - right)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function wait_ms(held: HeldEntry, ends: ReadonlyArray<number>): number | undefined {
|
|
55
|
+
const from_ms = Date.parse(held.at)
|
|
56
|
+
const end_ms = ends.find((at) => at > from_ms)
|
|
57
|
+
|
|
58
|
+
return end_ms === undefined ? undefined : Math.min(end_ms - from_ms, MAX_HOLD_MS)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function holds_of(entries: ReadonlyArray<LedgerEntry>): Array<Hold> {
|
|
62
|
+
const ends = end_times(entries)
|
|
63
|
+
|
|
64
|
+
return entries
|
|
65
|
+
.filter(is_held)
|
|
66
|
+
.map((held) => ({ reason: held.reason, wait_ms: wait_ms(held, ends) }))
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function total(values: ReadonlyArray<number>): number {
|
|
70
|
+
return values.reduce((sum, value) => sum + value, 0)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function ended_of(holds: ReadonlyArray<Hold>, reason: string): Array<number> {
|
|
74
|
+
return holds
|
|
75
|
+
.filter((hold) => hold.reason === reason)
|
|
76
|
+
.map((hold) => hold.wait_ms)
|
|
77
|
+
.filter((value) => is_number(value))
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function reason_row(reason: string, holds: ReadonlyArray<Hold>): string {
|
|
81
|
+
const ended = ended_of(holds, reason)
|
|
82
|
+
const count = holds.filter((hold) => hold.reason === reason).length
|
|
83
|
+
|
|
84
|
+
return lane_stats.to_row([
|
|
85
|
+
reason,
|
|
86
|
+
lane_stage_stats.cell(ended.length === 0 ? undefined : total(ended)),
|
|
87
|
+
lane_stage_stats.cell(lane_stats.median(ended)),
|
|
88
|
+
lane_stage_stats.cell(lane_stats.peak(ended)),
|
|
89
|
+
String(count),
|
|
90
|
+
String(count - ended.length),
|
|
91
|
+
])
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// The reasons the period saw, the longest total first, so the cause worth removing next leads.
|
|
95
|
+
function reasons_of(holds: ReadonlyArray<Hold>): Array<string> {
|
|
96
|
+
const reasons = [...new Set(holds.map((hold) => hold.reason))]
|
|
97
|
+
|
|
98
|
+
return reasons.toSorted(
|
|
99
|
+
(left, right) => total(ended_of(holds, right)) - total(ended_of(holds, left)),
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// The period's table: `entries` is the whole ledger, filtered here to `window`.
|
|
104
|
+
function table(entries: ReadonlyArray<LedgerEntry>, window: StatsWindow): string {
|
|
105
|
+
const holds = holds_of(lane_stats.in_window(entries, window))
|
|
106
|
+
const rows = reasons_of(holds).map((reason) => reason_row(reason, holds))
|
|
107
|
+
|
|
108
|
+
return [
|
|
109
|
+
lane_stats.to_row(COLUMNS),
|
|
110
|
+
lane_stats.to_row(COLUMNS.map(() => '---')),
|
|
111
|
+
...(rows.length === 0 ? [lane_stats.to_row(NONE_ROW)] : rows),
|
|
112
|
+
].join('\n')
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function is_open_at(held: HeldEntry, now_ms: number): boolean {
|
|
116
|
+
return now_ms - Date.parse(held.at) < MAX_HOLD_MS
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// The reason of the hold still open at the ledger's end, or `undefined` where the last one has ended —
|
|
120
|
+
// or is past `MAX_HOLD_MS`, a driver killed while held that wrote no hand-back.
|
|
121
|
+
function open_reason(entries: ReadonlyArray<LedgerEntry>, now_ms: number): string | undefined {
|
|
122
|
+
const last = entries.findLast((entry) => is_hold_end(entry))
|
|
123
|
+
|
|
124
|
+
return last !== undefined && is_held(last) && is_open_at(last, now_ms) ? last.reason : undefined
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const lane_held_stats = { open_reason, table }
|
|
128
|
+
|
|
129
|
+
export { lane_held_stats }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs'
|
|
2
|
-
import
|
|
2
|
+
import { core_budget } from '#scripts/gate/core-budget'
|
|
3
3
|
import { buffered_process } from '#scripts/lib/buffered-process'
|
|
4
|
+
import { PACKAGE_JSON, package_manifest } from '#scripts/lib/package-manifest'
|
|
4
5
|
import { INSTALL_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
5
6
|
|
|
6
7
|
// Filling the lane, which is the other half of opening one.
|
|
@@ -25,16 +26,9 @@ import { INSTALL_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
|
25
26
|
// exactly the lock committed there. A lock the install would rather rewrite is a finding, not
|
|
26
27
|
// something to absorb silently into six parallel lanes.
|
|
27
28
|
const INSTALL_ARGUMENTS = ['install', '--frozen-lockfile']
|
|
28
|
-
// The manifest whose absence is the whole skip condition. A lane cut from a repository that has no
|
|
29
|
-
// `package.json` has nothing to install, so running `pnpm install` there could only fail on a
|
|
30
|
-
// manifest that was never there — which is exactly the fixture a cross-process lane test needs.
|
|
31
|
-
// The condition is strictly "the file does not exist": a manifest that is
|
|
32
|
-
// present but unreadable or broken still runs the install and still fails as before, so a genuinely
|
|
33
|
-
// broken repository is never passed silently.
|
|
34
|
-
const MANIFEST_FILE_NAME = 'package.json'
|
|
35
29
|
// The lane opens with no dependencies installed, and that is the reported state rather than a
|
|
36
30
|
// failure — there was nothing to install, so nothing failed.
|
|
37
|
-
const NO_MANIFEST_OUTPUT = `No ${
|
|
31
|
+
const NO_MANIFEST_OUTPUT = `No ${PACKAGE_JSON} in the lane, so the dependency install was skipped.`
|
|
38
32
|
|
|
39
33
|
interface InstallResult {
|
|
40
34
|
is_installed: boolean
|
|
@@ -50,7 +44,7 @@ interface InstallResult {
|
|
|
50
44
|
// `existsSync` answers only whether the path is there, never whether its contents parse, so a
|
|
51
45
|
// present-but-broken manifest falls through to the real install and fails there.
|
|
52
46
|
function has_manifest(directory: string): boolean {
|
|
53
|
-
return existsSync(
|
|
47
|
+
return existsSync(package_manifest.manifest_path(directory))
|
|
54
48
|
}
|
|
55
49
|
|
|
56
50
|
/**
|
|
@@ -68,10 +62,17 @@ function has_manifest(directory: string): boolean {
|
|
|
68
62
|
async function install_dependencies(directory: string): Promise<InstallResult> {
|
|
69
63
|
if (!has_manifest(directory)) return { is_installed: true, output: NO_MANIFEST_OUTPUT }
|
|
70
64
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
65
|
+
// The install claims its place in the core budget (joshuafolkken/kit#3944): a batch opens its lanes
|
|
66
|
+
// together, and each install ran beside the other lanes' gates off the ledger.
|
|
67
|
+
const result = await core_budget.with_command_reservation(
|
|
68
|
+
core_budget.CORE_WEIGHTS.install,
|
|
69
|
+
async () =>
|
|
70
|
+
await buffered_process.run_buffered_process(INSTALL_ARGUMENTS, {
|
|
71
|
+
cwd: directory,
|
|
72
|
+
timeout_ms: INSTALL_TIMEOUT_MS,
|
|
73
|
+
}),
|
|
74
|
+
{ memory_mb: core_budget.MEMORY_MB.install, command: 'lane install' },
|
|
75
|
+
)
|
|
75
76
|
|
|
76
77
|
return { is_installed: !buffered_process.is_process_failed(result), output: result.output }
|
|
77
78
|
}
|
|
@@ -79,4 +80,4 @@ async function install_dependencies(directory: string): Promise<InstallResult> {
|
|
|
79
80
|
const lane_install = { install_dependencies }
|
|
80
81
|
|
|
81
82
|
export type { InstallResult }
|
|
82
|
-
export { lane_install, INSTALL_ARGUMENTS,
|
|
83
|
+
export { lane_install, INSTALL_ARGUMENTS, NO_MANIFEST_OUTPUT }
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
1
|
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
2
|
import { josh_command } from '#scripts/josh/josh-run'
|
|
5
3
|
import { lane_registry, type LaneInfo } from '#scripts/lane/lane-registry'
|
|
@@ -21,7 +19,6 @@ import { execa } from 'execa'
|
|
|
21
19
|
// warning. Their explanations stream through to stderr; the child's pid is the one thing on stdout.
|
|
22
20
|
// A lane a park kept is the one `already-open` it steps past — `lane_directory` below.
|
|
23
21
|
|
|
24
|
-
const ARGV_OFFSET = 2
|
|
25
22
|
const SUCCESS_EXIT_CODE = 0
|
|
26
23
|
const FAILURE_EXIT_CODE = 1
|
|
27
24
|
const should_forward_stderr = true
|
|
@@ -171,13 +168,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
171
168
|
return await launch(context)
|
|
172
169
|
}
|
|
173
170
|
|
|
174
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
175
|
-
process.exitCode = await run(argv)
|
|
176
|
-
}
|
|
177
|
-
|
|
178
171
|
const lane_launch_cli = { launch_lane, read_context, run }
|
|
179
172
|
|
|
180
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
181
|
-
|
|
182
173
|
export type { LaunchContext, LaunchOutcome }
|
|
183
174
|
export { lane_launch_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { lane_launch_cli } from './lane-launch-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh lane:launch` entry, kept apart from `lane-launch-cli.ts` because other modules import that
|
|
6
|
+
// one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = await lane_launch_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
// The shape of each line `lane-ledger.ts` appends and reads back — one schema per entry kind.
|
|
4
|
+
|
|
5
|
+
const KIND = {
|
|
6
|
+
MERGE: 'merge',
|
|
7
|
+
GATE: 'gate',
|
|
8
|
+
LOAD: 'load',
|
|
9
|
+
DISPATCH: 'dispatch',
|
|
10
|
+
STAGE: 'stage',
|
|
11
|
+
STOP: 'stop',
|
|
12
|
+
OVERLAP: 'overlap',
|
|
13
|
+
HELD: 'held',
|
|
14
|
+
RELEASED: 'released',
|
|
15
|
+
ROUND_TWO: 'round-two',
|
|
16
|
+
OFFERABLE: 'offerable',
|
|
17
|
+
CORE_WAIT: 'core-wait',
|
|
18
|
+
UNIT_FILES: 'unit-files',
|
|
19
|
+
TEST_RELATED: 'test-related',
|
|
20
|
+
} as const
|
|
21
|
+
|
|
22
|
+
const merge_schema = z.object({ kind: z.literal(KIND.MERGE), at: z.string(), issue: z.number() })
|
|
23
|
+
const check_schema = z.object({
|
|
24
|
+
label: z.string(),
|
|
25
|
+
elapsed_ms: z.number(),
|
|
26
|
+
is_passed: z.boolean(),
|
|
27
|
+
is_reused: z.boolean().optional(),
|
|
28
|
+
// The CPU milliseconds the check's process tree spent, so a core weight can be re-measured from
|
|
29
|
+
// the ledger (joshuafolkken/kit#4362). Absent where the gate could not read it (off macOS).
|
|
30
|
+
cpu_ms: z.number().optional(),
|
|
31
|
+
// Why the unit leg ran the whole suite instead of the related tests — a stable kind, never the
|
|
32
|
+
// file it names (joshuafolkken/kit#4397). Absent when it narrowed, and on every other check.
|
|
33
|
+
fallback: z.string().optional(),
|
|
34
|
+
// The unit leg's since-green no-op: nothing moved, so it ran no test (joshuafolkken/kit#4457).
|
|
35
|
+
is_unmoved: z.boolean().optional(),
|
|
36
|
+
// The width the check asked the core budget for, the width it ran at and how long it waited, so a
|
|
37
|
+
// unit claim's wait for room is read per run (joshuafolkken/kit#4451). Absent on a check that
|
|
38
|
+
// claimed none — a reused one, or one inside another gate's claim.
|
|
39
|
+
claim: z.object({ requested: z.number(), granted: z.number(), waited_ms: z.number() }).optional(),
|
|
40
|
+
})
|
|
41
|
+
const gate_schema = z.object({
|
|
42
|
+
kind: z.literal(KIND.GATE),
|
|
43
|
+
at: z.string(),
|
|
44
|
+
elapsed_ms: z.number(),
|
|
45
|
+
is_passed: z.boolean(),
|
|
46
|
+
// The unit suite's own duration, present when this gate ran it — the one
|
|
47
|
+
// record of a full vitest run `josh metrics` reads, so the suite is never timed twice.
|
|
48
|
+
unit_ms: z.number().optional(),
|
|
49
|
+
// The whole cores busy outside this gate, beyond the machine's baseline, at its start or its end —
|
|
50
|
+
// whichever was higher. Absent when the machine could not be read.
|
|
51
|
+
external_cores: z.number().optional(),
|
|
52
|
+
// Each check's own duration and verdict, so `josh lane:stats` can name the check a slow gate waited
|
|
53
|
+
// on. A reused check started no process: its row says so, and its zero is no timing.
|
|
54
|
+
checks: z.array(check_schema).optional(),
|
|
55
|
+
// A gate that reused a green record for this tree and base and started no check: counted, never
|
|
56
|
+
// timed (joshuafolkken/kit#4397).
|
|
57
|
+
is_reused: z.boolean().optional(),
|
|
58
|
+
})
|
|
59
|
+
// `available_mb`, `swapped_mb` and `lanes` are optional because each read can fail on its own — a
|
|
60
|
+
// platform with no memory reading, a `git worktree` call that did not answer — and a sample is still
|
|
61
|
+
// worth its load. `swapped_mb` is `machine_capacity`'s counter, every page swapped since boot.
|
|
62
|
+
// Both memory fields were renamed with their meaning (joshuafolkken/kit#3593): an older row's
|
|
63
|
+
// `free_mb` / `swap_mb` are stripped on read, so the two measurements never share a column.
|
|
64
|
+
const process_kind_schema = z.object({
|
|
65
|
+
kind: z.string(),
|
|
66
|
+
cpu_percent: z.number(),
|
|
67
|
+
rss_mb: z.number(),
|
|
68
|
+
count: z.number(),
|
|
69
|
+
})
|
|
70
|
+
const load_schema = z.object({
|
|
71
|
+
kind: z.literal(KIND.LOAD),
|
|
72
|
+
at: z.string(),
|
|
73
|
+
load: z.number(),
|
|
74
|
+
available_mb: z.number().optional(),
|
|
75
|
+
swapped_mb: z.number().optional(),
|
|
76
|
+
lanes: z.number().optional(),
|
|
77
|
+
// The heaviest process kinds at the instant of the sample (`lane-process-load.ts`), so the load the
|
|
78
|
+
// core budget's ledger does not explain can be read back by what made it (joshuafolkken/kit#3874).
|
|
79
|
+
processes: z.array(process_kind_schema).optional(),
|
|
80
|
+
})
|
|
81
|
+
// A lane child started on `issue` — the instant its implementation is timed from.
|
|
82
|
+
const dispatch_schema = z.object({
|
|
83
|
+
kind: z.literal(KIND.DISPATCH),
|
|
84
|
+
at: z.string(),
|
|
85
|
+
issue: z.number(),
|
|
86
|
+
})
|
|
87
|
+
// One finished stage of a lane's run, passed or failed: `at` is its end and `elapsed_ms` its length, so
|
|
88
|
+
// its start is read from the two. `issue` is absent where the writer does not hold one — `followup`'s
|
|
89
|
+
// CI wait, which is timed on a path that fails before the issue is known.
|
|
90
|
+
const stage_schema = z.object({
|
|
91
|
+
kind: z.literal(KIND.STAGE),
|
|
92
|
+
at: z.string(),
|
|
93
|
+
stage: z.string(),
|
|
94
|
+
elapsed_ms: z.number(),
|
|
95
|
+
issue: z.number().optional(),
|
|
96
|
+
})
|
|
97
|
+
// A `josh ship` that stopped on `issue`: `reason` is the stage it stopped at, or `conflict` — the
|
|
98
|
+
// retrospective's stop reason — and `cause` why (`run-ship-stop-cause.ts`), absent on a stop recorded
|
|
99
|
+
// before it had one. `preconditions` names the kinds a preflight stop found unmet (`run-ship-preflight.ts`),
|
|
100
|
+
// with `pre-detach` where a lane child's fast checks went red beside them (joshuafolkken/kit#4478),
|
|
101
|
+
// absent on any other stop and on one recorded before it had them. `findings` names the
|
|
102
|
+
// `<category>:<severity>` of each finding that decided a review or round-2 stop — the blocking ones, else
|
|
103
|
+
// the fixed ones (joshuafolkken/kit#4426),
|
|
104
|
+
// absent where none decided the stop. How long it stayed stopped is derived from the next ship stage, not recorded, so a
|
|
105
|
+
// resumed ship never has to know the stop it ends.
|
|
106
|
+
const stop_schema = z.object({
|
|
107
|
+
kind: z.literal(KIND.STOP),
|
|
108
|
+
at: z.string(),
|
|
109
|
+
issue: z.number(),
|
|
110
|
+
reason: z.string(),
|
|
111
|
+
cause: z.string().optional(),
|
|
112
|
+
preconditions: z.array(z.string()).optional(),
|
|
113
|
+
findings: z.array(z.string()).optional(),
|
|
114
|
+
})
|
|
115
|
+
// A `josh ship` on `issue` whose actual change overlapped the open pull requests of `lanes` on `paths`
|
|
116
|
+
// before its sync: it waited `waited_ms` for their ships to end, and `is_cleared` is false where the
|
|
117
|
+
// wait ran out first (joshuafolkken/kit#3901).
|
|
118
|
+
const overlap_schema = z.object({
|
|
119
|
+
kind: z.literal(KIND.OVERLAP),
|
|
120
|
+
at: z.string(),
|
|
121
|
+
issue: z.number(),
|
|
122
|
+
lanes: z.array(z.number()),
|
|
123
|
+
paths: z.array(z.string()),
|
|
124
|
+
waited_ms: z.number(),
|
|
125
|
+
is_cleared: z.boolean(),
|
|
126
|
+
})
|
|
127
|
+
// A `backlog:drive` pass that left a free lane empty: `reason` is why — the offer verdict that started
|
|
128
|
+
// nothing, or the hand-back that stopped the driver. How long the lane stayed empty is derived from the
|
|
129
|
+
// next `held`, `released` or `dispatch` entry, the way a stop's wait is (joshuafolkken/kit#3995).
|
|
130
|
+
// `waiting` names the issues a `chain` / `gate` hold waited on (joshuafolkken/kit#4513).
|
|
131
|
+
const held_schema = z.object({
|
|
132
|
+
kind: z.literal(KIND.HELD),
|
|
133
|
+
at: z.string(),
|
|
134
|
+
reason: z.string(),
|
|
135
|
+
waiting: z.array(z.number()).optional(),
|
|
136
|
+
})
|
|
137
|
+
// The end of a hold no dispatch ended: every lane taken — one opened outside the driver included — or
|
|
138
|
+
// the run finished, so no free lane is owed a child any more.
|
|
139
|
+
const released_schema = z.object({ kind: z.literal(KIND.RELEASED), at: z.string() })
|
|
140
|
+
// One `review:round2` decision a `josh ship` acted on for `issue`: `verdict` and the stable reason
|
|
141
|
+
// `code` it fell under, so the period's skips and runs are counted by why (joshuafolkken/kit#4064).
|
|
142
|
+
const round_two_schema = z.object({
|
|
143
|
+
kind: z.literal(KIND.ROUND_TWO),
|
|
144
|
+
at: z.string(),
|
|
145
|
+
issue: z.number(),
|
|
146
|
+
verdict: z.string(),
|
|
147
|
+
code: z.string(),
|
|
148
|
+
})
|
|
149
|
+
// A stall detector observation, written only when it changes: whether offerable backlog work and a free
|
|
150
|
+
// lane coexisted, so a stall is aged from when both first held rather than from the last launch
|
|
151
|
+
// (joshuafolkken/kit#4349).
|
|
152
|
+
const offerable_schema = z.object({
|
|
153
|
+
kind: z.literal(KIND.OFFERABLE),
|
|
154
|
+
at: z.string(),
|
|
155
|
+
is_offerable: z.boolean(),
|
|
156
|
+
})
|
|
157
|
+
// One claim that waited `waited_ms` for the core budget before `command` could start — written by the
|
|
158
|
+
// command itself, so a wait inside a gate, a scoped check or a ship lands in one record. `issue` is the
|
|
159
|
+
// lane the claim ran in, absent outside a lane (joshuafolkken/kit#4382).
|
|
160
|
+
const core_wait_schema = z.object({
|
|
161
|
+
kind: z.literal(KIND.CORE_WAIT),
|
|
162
|
+
at: z.string(),
|
|
163
|
+
command: z.string(),
|
|
164
|
+
waited_ms: z.number(),
|
|
165
|
+
issue: z.number().optional(),
|
|
166
|
+
})
|
|
167
|
+
// One vitest run's slowest test files, each with its wall time from environment setup to its last
|
|
168
|
+
// test, so a unit run whose wall time far outran its CPU names the file it stalled on
|
|
169
|
+
// (joshuafolkken/kit#4451). Written by the run itself (`tools/test/unit-file-reporter.ts`).
|
|
170
|
+
const unit_file_schema = z.object({ file: z.string(), elapsed_ms: z.number() })
|
|
171
|
+
const unit_files_schema = z.object({
|
|
172
|
+
kind: z.literal(KIND.UNIT_FILES),
|
|
173
|
+
at: z.string(),
|
|
174
|
+
files: z.array(unit_file_schema),
|
|
175
|
+
})
|
|
176
|
+
// One `josh test:related` run (joshuafolkken/kit#4465): `scope` is `related`, `none` or the full-suite
|
|
177
|
+
// fallback kind; the four counts are its input — the change itself, what a main sync brought into it,
|
|
178
|
+
// what the change since the test-read map's tree joined to it and the map's readers — and `test_files`
|
|
179
|
+
// how many vitest ran, absent where none reported. `trigger_files` are the changed files that sent a
|
|
180
|
+
// full-suite run there, absent where none did and on rows written before it (joshuafolkken/kit#4510).
|
|
181
|
+
const test_related_schema = z.object({
|
|
182
|
+
kind: z.literal(KIND.TEST_RELATED),
|
|
183
|
+
at: z.string(),
|
|
184
|
+
scope: z.string(),
|
|
185
|
+
changed: z.number(),
|
|
186
|
+
synced: z.number(),
|
|
187
|
+
since_map: z.number(),
|
|
188
|
+
readers: z.number(),
|
|
189
|
+
test_files: z.number().optional(),
|
|
190
|
+
trigger_files: z.array(z.string()).optional(),
|
|
191
|
+
elapsed_ms: z.number(),
|
|
192
|
+
})
|
|
193
|
+
const entry_schema = z.discriminatedUnion('kind', [
|
|
194
|
+
merge_schema,
|
|
195
|
+
gate_schema,
|
|
196
|
+
load_schema,
|
|
197
|
+
dispatch_schema,
|
|
198
|
+
stage_schema,
|
|
199
|
+
stop_schema,
|
|
200
|
+
overlap_schema,
|
|
201
|
+
held_schema,
|
|
202
|
+
released_schema,
|
|
203
|
+
round_two_schema,
|
|
204
|
+
offerable_schema,
|
|
205
|
+
core_wait_schema,
|
|
206
|
+
unit_files_schema,
|
|
207
|
+
test_related_schema,
|
|
208
|
+
])
|
|
209
|
+
|
|
210
|
+
type LedgerEntry = z.infer<typeof entry_schema>
|
|
211
|
+
type MergeEntry = z.infer<typeof merge_schema>
|
|
212
|
+
type GateEntry = z.infer<typeof gate_schema>
|
|
213
|
+
type LoadEntry = z.infer<typeof load_schema>
|
|
214
|
+
type DispatchEntry = z.infer<typeof dispatch_schema>
|
|
215
|
+
type StageEntry = z.infer<typeof stage_schema>
|
|
216
|
+
type StopEntry = z.infer<typeof stop_schema>
|
|
217
|
+
type OverlapEntry = z.infer<typeof overlap_schema>
|
|
218
|
+
type HeldEntry = z.infer<typeof held_schema>
|
|
219
|
+
type RoundTwoEntry = z.infer<typeof round_two_schema>
|
|
220
|
+
type OfferableEntry = z.infer<typeof offerable_schema>
|
|
221
|
+
type CoreWaitEntry = z.infer<typeof core_wait_schema>
|
|
222
|
+
type CoreWaitRecord = Omit<CoreWaitEntry, 'kind' | 'at'>
|
|
223
|
+
type UnitFilesEntry = z.infer<typeof unit_files_schema>
|
|
224
|
+
type UnitFileRecord = z.infer<typeof unit_file_schema>
|
|
225
|
+
type TestRelatedEntry = z.infer<typeof test_related_schema>
|
|
226
|
+
type TestRelatedRecord = Omit<TestRelatedEntry, 'kind' | 'at'>
|
|
227
|
+
type RoundTwoRecord = Omit<RoundTwoEntry, 'kind' | 'at'>
|
|
228
|
+
// What a finished gate reports; the ledger stamps the kind and the time.
|
|
229
|
+
type GateRecord = Omit<GateEntry, 'kind' | 'at'>
|
|
230
|
+
type GateCheckRecord = z.infer<typeof check_schema>
|
|
231
|
+
type StageRecord = Omit<StageEntry, 'kind' | 'at'>
|
|
232
|
+
type StopRecord = Omit<StopEntry, 'kind' | 'at'>
|
|
233
|
+
type OverlapRecord = Omit<OverlapEntry, 'kind' | 'at'>
|
|
234
|
+
type HeldRecord = Omit<HeldEntry, 'kind' | 'at' | 'waiting'> & {
|
|
235
|
+
waiting?: ReadonlyArray<number> | undefined
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const lane_ledger_schema = { KIND, entry_schema }
|
|
239
|
+
|
|
240
|
+
export type {
|
|
241
|
+
CoreWaitEntry,
|
|
242
|
+
CoreWaitRecord,
|
|
243
|
+
DispatchEntry,
|
|
244
|
+
GateCheckRecord,
|
|
245
|
+
GateEntry,
|
|
246
|
+
GateRecord,
|
|
247
|
+
HeldEntry,
|
|
248
|
+
HeldRecord,
|
|
249
|
+
LedgerEntry,
|
|
250
|
+
LoadEntry,
|
|
251
|
+
MergeEntry,
|
|
252
|
+
OfferableEntry,
|
|
253
|
+
OverlapEntry,
|
|
254
|
+
OverlapRecord,
|
|
255
|
+
RoundTwoEntry,
|
|
256
|
+
RoundTwoRecord,
|
|
257
|
+
StageEntry,
|
|
258
|
+
StageRecord,
|
|
259
|
+
StopEntry,
|
|
260
|
+
StopRecord,
|
|
261
|
+
TestRelatedEntry,
|
|
262
|
+
TestRelatedRecord,
|
|
263
|
+
UnitFileRecord,
|
|
264
|
+
UnitFilesEntry,
|
|
265
|
+
}
|
|
266
|
+
export { lane_ledger_schema }
|