@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,6 +1,7 @@
|
|
|
1
1
|
import { styleText } from 'node:util'
|
|
2
|
-
import { backlog_budget } from '#scripts/backlog/backlog-budget'
|
|
3
2
|
import type { BudgetWait } from '#scripts/gate/core-wait'
|
|
3
|
+
import { MS_PER_MINUTE } from '#scripts/lib/timeouts'
|
|
4
|
+
import { run_board_estimate } from './run-board-estimate'
|
|
4
5
|
import { run_board_fit } from './run-board-fit'
|
|
5
6
|
import { run_board_fresh } from './run-board-fresh'
|
|
6
7
|
import { run_board_labels } from './run-board-labels'
|
|
@@ -8,14 +9,18 @@ import { run_board_layout, type BoardLayout, type BoardRow } from './run-board-l
|
|
|
8
9
|
import { run_board_machine, type MachineGauges } from './run-board-machine'
|
|
9
10
|
import { run_board_now, type NowLine } from './run-board-now'
|
|
10
11
|
import type { SessionOperations } from './run-board-operation-read'
|
|
12
|
+
import { run_board_priority } from './run-board-priority'
|
|
13
|
+
import type { ProcessGroups } from './run-board-process-groups'
|
|
11
14
|
import { run_board_render_slot } from './run-board-render-slot'
|
|
15
|
+
import { run_board_render_title } from './run-board-render-title'
|
|
12
16
|
import type { RunActivity } from './run-board-status'
|
|
13
|
-
import type { LaneUsages } from './run-board-usage'
|
|
17
|
+
import type { LaneUsages, UsageScale } from './run-board-usage'
|
|
14
18
|
import type { UsualTimes } from './run-board-usual'
|
|
15
19
|
|
|
16
20
|
// The top of `run:board`: whether the run is moving, how long it has run, how fresh its last event is,
|
|
17
21
|
// and how far through the plan it is. Every time comes from a record (the carry's start, the stream's
|
|
18
|
-
// events); nothing here guesses one
|
|
22
|
+
// events); nothing here guesses one, but the estimated finish after the progress bar, which is drawn `~`
|
|
23
|
+
// as the estimate it is (`run-board-estimate.ts`). Two lines of symbols rather than sentences: the `⏰` that moves
|
|
19
24
|
// every second is the proof the board is live, so no `updated` line is drawn. **Always three lines,
|
|
20
25
|
// the first two in three columns**: the run's mark and name over its repository's, the run's age over
|
|
21
26
|
// the `💓`, then the progress over the machine the run is on — so the first line reads as how far the
|
|
@@ -28,6 +33,9 @@ import type { UsualTimes } from './run-board-usual'
|
|
|
28
33
|
|
|
29
34
|
const { HEADER_ICONS, STATE_ICONS, WORDS, bar_of, minute_of, span_of } = run_board_labels
|
|
30
35
|
const { cell_of } = run_board_render_slot
|
|
36
|
+
const { title_of } = run_board_render_title
|
|
37
|
+
// The columns a failed read's reason is cut to, so the header keeps its line.
|
|
38
|
+
const REASON_LIMIT = 40
|
|
31
39
|
const { padded } = run_board_fresh
|
|
32
40
|
const aged_fresh = run_board_fresh.aged
|
|
33
41
|
const UNKNOWN = '-'
|
|
@@ -37,7 +45,7 @@ const { GAP, PERCENT_WIDTH } = run_board_machine
|
|
|
37
45
|
// A running run whose newest event is older than this is drawn as stale, so a hang stands out; past
|
|
38
46
|
// twice that it is drawn as alarming.
|
|
39
47
|
const STALE_MINUTES = 15
|
|
40
|
-
const STALE_MS = STALE_MINUTES *
|
|
48
|
+
const STALE_MS = STALE_MINUTES * MS_PER_MINUTE
|
|
41
49
|
const ALARM_FACTOR = 2
|
|
42
50
|
const ALARM_MS = STALE_MS * ALARM_FACTOR
|
|
43
51
|
const RUN_NAME = 'backlogrun'
|
|
@@ -47,6 +55,14 @@ const RUN_NAME = 'backlogrun'
|
|
|
47
55
|
// means nothing.
|
|
48
56
|
type BoardForm = 'screen' | 'chat'
|
|
49
57
|
|
|
58
|
+
// What the lane cells and the processes section are drawn from, and the machine a gauge's width
|
|
59
|
+
// stands for.
|
|
60
|
+
interface BoardUsage {
|
|
61
|
+
lanes: LaneUsages
|
|
62
|
+
processes: ProcessGroups
|
|
63
|
+
scale: UsageScale
|
|
64
|
+
}
|
|
65
|
+
|
|
50
66
|
interface BoardHeader {
|
|
51
67
|
now_ms: number
|
|
52
68
|
started_ms: number
|
|
@@ -60,16 +76,22 @@ interface BoardHeader {
|
|
|
60
76
|
baseline_total: number | undefined
|
|
61
77
|
plan_fetched_ms: number | undefined
|
|
62
78
|
plan_failed_ms: number | undefined
|
|
79
|
+
// When the reads off this machine last failed (`run-board-gather-thread.ts`); none once they answer.
|
|
80
|
+
read_failed_ms?: number | undefined
|
|
81
|
+
// Why they failed, drawn beside the failure.
|
|
82
|
+
read_error?: string | undefined
|
|
63
83
|
// Whether a plan read is in flight.
|
|
64
84
|
is_plan_loading: boolean
|
|
65
85
|
// The machine's gauges, `undefined` before the first sample.
|
|
66
86
|
machine: MachineGauges | undefined
|
|
67
|
-
// Each running lane's
|
|
68
|
-
usages?:
|
|
87
|
+
// Each running lane's and each process group's usage, `undefined` where none could be read.
|
|
88
|
+
usages?: BoardUsage | undefined
|
|
69
89
|
// The claims waiting in the machine-wide core budget (`run-board-render-waits.ts`).
|
|
70
90
|
budget_waits?: ReadonlyArray<BudgetWait> | undefined
|
|
71
91
|
// How long each phase usually takes; a running row's phase time is colored against it.
|
|
72
92
|
usual?: UsualTimes | undefined
|
|
93
|
+
// How many lanes the run may hold at once, which the estimated finish stacks the waiting children on.
|
|
94
|
+
lane_limit?: number | undefined
|
|
73
95
|
// The spinner's frame a running run and a running row turn, `undefined` where the output is not a
|
|
74
96
|
// terminal and they draw their still icons.
|
|
75
97
|
spinner: string | undefined
|
|
@@ -126,7 +148,9 @@ function quiet_mark(header: BoardHeader): RunMark {
|
|
|
126
148
|
|
|
127
149
|
if (header.activity.setup !== undefined) return 'setup'
|
|
128
150
|
|
|
129
|
-
return layout?.
|
|
151
|
+
return layout?.queued.length === 0 && run_board_layout.people_of(layout).length > 0
|
|
152
|
+
? 'human'
|
|
153
|
+
: 'idle'
|
|
130
154
|
}
|
|
131
155
|
|
|
132
156
|
// The run's state, each state overriding the ones below it.
|
|
@@ -250,13 +274,13 @@ function time_parts(header: BoardHeader, mark: RunMark, now: NowLine | undefined
|
|
|
250
274
|
]
|
|
251
275
|
}
|
|
252
276
|
|
|
253
|
-
// A
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
277
|
+
// A read is said only when it failed — the board otherwise keeps quiet about a routine read — and why,
|
|
278
|
+
// where that is known, cut so it never pushes the line past its pane.
|
|
279
|
+
function warning_of(word: string, failed: number | undefined, reason?: string): string | undefined {
|
|
257
280
|
if (failed === undefined) return undefined
|
|
281
|
+
const why = reason === undefined || reason === '' ? '' : ` ${title_of(reason, REASON_LIMIT)}`
|
|
258
282
|
|
|
259
|
-
return styleText('yellow',
|
|
283
|
+
return styleText('yellow', `${HEADER_ICONS.warning} ${word} ${minute_of(failed)}${why}`)
|
|
260
284
|
}
|
|
261
285
|
|
|
262
286
|
// A plan read in flight turns the spinner after ⏳ and says nothing more; a
|
|
@@ -307,20 +331,39 @@ function tally_part(counts: BoardCounts, header: BoardHeader): string {
|
|
|
307
331
|
return `${STATE_ICONS.merged} ${tally} ${bar}`
|
|
308
332
|
}
|
|
309
333
|
|
|
310
|
-
|
|
334
|
+
// The estimated finish after the bar (`run-board-estimate.ts`), once the plan says what is left to run.
|
|
335
|
+
// A stopped run advances nothing, so an estimate would count down to a finish that never comes.
|
|
336
|
+
function estimate_part(header: BoardHeader): string | undefined {
|
|
337
|
+
const is_moving = is_plan_read(header) && !header.activity.is_stopped
|
|
338
|
+
|
|
339
|
+
return is_moving ? run_board_estimate.part_of(header) : undefined
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// The ⏳ count with the priorities among it (joshuafolkken/kit#4383).
|
|
343
|
+
function waiting_of(counts: BoardCounts, header: BoardHeader): string {
|
|
344
|
+
return `${String(counts.remaining)}${run_board_priority.tally_of(layout_of(header))}`
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function progress_parts(counts: BoardCounts, header: BoardHeader): Array<string | undefined> {
|
|
311
348
|
const is_read = is_plan_read(header)
|
|
312
349
|
|
|
313
350
|
return [
|
|
314
351
|
`${tally_part(counts, header)}${is_read ? plus_of(counts, header) : ''}`,
|
|
352
|
+
estimate_part(header),
|
|
315
353
|
`${STATE_ICONS.running} ${String(counts.running)}`,
|
|
316
|
-
`${STATE_ICONS.waiting} ${is_read ?
|
|
354
|
+
`${STATE_ICONS.waiting} ${is_read ? waiting_of(counts, header) : UNKNOWN}`,
|
|
317
355
|
`${STATE_ICONS.parked} ${String(counts.parked)}`,
|
|
318
356
|
]
|
|
319
357
|
}
|
|
320
358
|
|
|
321
|
-
// The run's progress, then what its
|
|
359
|
+
// The run's progress, then what its reads are doing.
|
|
322
360
|
function progress_part(counts: BoardCounts, header: BoardHeader): string {
|
|
323
|
-
const parts = [
|
|
361
|
+
const parts = [
|
|
362
|
+
...progress_parts(counts, header),
|
|
363
|
+
loading_part(header),
|
|
364
|
+
warning_of(WORDS.plan, header.plan_failed_ms),
|
|
365
|
+
warning_of(WORDS.read, header.read_failed_ms, header.read_error),
|
|
366
|
+
]
|
|
324
367
|
|
|
325
368
|
return parts.filter((part) => part !== undefined).join(GAP)
|
|
326
369
|
}
|
|
@@ -342,7 +385,7 @@ function now_line(counts: BoardCounts, header: BoardHeader): NowLine | undefined
|
|
|
342
385
|
children: running_issues(layout_of(header)),
|
|
343
386
|
running: counts.running,
|
|
344
387
|
waiting: is_plan_read(header) ? counts.remaining : undefined,
|
|
345
|
-
people: layout_of(header).
|
|
388
|
+
people: run_board_layout.people_of(layout_of(header)).length,
|
|
346
389
|
})
|
|
347
390
|
}
|
|
348
391
|
|
|
@@ -375,7 +418,7 @@ function column_of(cells: ReadonlyArray<string>): Array<string> {
|
|
|
375
418
|
}
|
|
376
419
|
|
|
377
420
|
// The run's name, age and progress, then its repository, heartbeat and machine under them, then what
|
|
378
|
-
// it is doing now — its time under theirs, its kind's icon under the
|
|
421
|
+
// it is doing now — its time under theirs, its kind's icon under the `💪`, the name's column left blank
|
|
379
422
|
// and no label — in every state the board can be in. A stream with no event yet leaves it blank.
|
|
380
423
|
function header_lines(header: BoardHeader): Array<string> {
|
|
381
424
|
const counts = counts_of(layout_of(header))
|
|
@@ -397,7 +440,26 @@ function now_legend(header: BoardHeader): string | undefined {
|
|
|
397
440
|
return now?.legend === undefined ? undefined : `${now.icon} ${now.legend}`
|
|
398
441
|
}
|
|
399
442
|
|
|
400
|
-
|
|
443
|
+
// The estimated finish as the legend names it, on a frame that draws it alone.
|
|
444
|
+
function estimate_legend(header: BoardHeader): string | undefined {
|
|
445
|
+
return estimate_part(header) === undefined ? undefined : run_board_estimate.LEGEND
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// The third line's icon, so the legend names the phase it draws.
|
|
449
|
+
function now_icon(header: BoardHeader): string | undefined {
|
|
450
|
+
return now_line(counts_of(layout_of(header)), header)?.icon
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
const run_board_header = {
|
|
454
|
+
aged,
|
|
455
|
+
counts_of,
|
|
456
|
+
estimate_legend,
|
|
457
|
+
header_lines,
|
|
458
|
+
is_plan_read,
|
|
459
|
+
now_icon,
|
|
460
|
+
now_legend,
|
|
461
|
+
warning_of,
|
|
462
|
+
}
|
|
401
463
|
|
|
402
464
|
export { run_board_header }
|
|
403
|
-
export type { BoardCounts, BoardForm, BoardHeader }
|
|
465
|
+
export type { BoardCounts, BoardForm, BoardHeader, BoardUsage }
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SectionKey } from './run-board-fit'
|
|
2
|
+
import { run_board_fold } from './run-board-fold'
|
|
3
|
+
|
|
4
|
+
// The keys a live `run:board` reads: one per section, folding it or unfolding it (`run-board-fold.ts`).
|
|
5
|
+
// The terminal is put in raw mode so a key arrives without Enter, which also stops it from turning
|
|
6
|
+
// Ctrl-C into SIGINT — so Ctrl-C is read as a key and quits, and leaving puts the terminal back.
|
|
7
|
+
|
|
8
|
+
const CTRL_C = '\u{3}'
|
|
9
|
+
|
|
10
|
+
// The keyboard as the board uses it; `interrupt` is what Ctrl-C does once raw mode reads it as a key.
|
|
11
|
+
interface KeyInput {
|
|
12
|
+
is_tty: boolean
|
|
13
|
+
raw: (is_raw: boolean) => void
|
|
14
|
+
listen: (on_data: (chunk: string) => void) => void
|
|
15
|
+
close: () => void
|
|
16
|
+
interrupt: () => void
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// The sections folded so far, read at every redraw — none where no key can be read — and what puts the
|
|
20
|
+
// terminal back.
|
|
21
|
+
interface KeyReading {
|
|
22
|
+
folded: (() => ReadonlySet<SectionKey>) | undefined
|
|
23
|
+
stop?: (() => void) | undefined
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// What a chunk of keys leaves folded, each key in the order typed.
|
|
27
|
+
function folded_by(folded: ReadonlySet<SectionKey>, chunk: string): ReadonlySet<SectionKey> {
|
|
28
|
+
let next = folded
|
|
29
|
+
|
|
30
|
+
for (const key of chunk) next = run_board_fold.toggled(next, key)
|
|
31
|
+
|
|
32
|
+
return next
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function read_keys(input: KeyInput | undefined): KeyReading {
|
|
36
|
+
if (input?.is_tty !== true) return { folded: undefined }
|
|
37
|
+
|
|
38
|
+
let folded: ReadonlySet<SectionKey> = new Set()
|
|
39
|
+
|
|
40
|
+
input.raw(true)
|
|
41
|
+
input.listen((chunk) => {
|
|
42
|
+
if (chunk.includes(CTRL_C)) input.interrupt()
|
|
43
|
+
else folded = folded_by(folded, chunk)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
folded: () => folded,
|
|
48
|
+
stop: () => {
|
|
49
|
+
input.raw(false)
|
|
50
|
+
input.close()
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const run_board_keys = { CTRL_C, read_keys }
|
|
56
|
+
|
|
57
|
+
export { run_board_keys }
|
|
58
|
+
export type { KeyInput, KeyReading }
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
BUGFIX_LABEL,
|
|
5
5
|
ENHANCEMENT_LABEL,
|
|
6
6
|
has_label_name,
|
|
7
|
+
PRIORITY_CRITICAL_LABEL,
|
|
8
|
+
PRIORITY_HIGH_LABEL,
|
|
7
9
|
} from '#scripts/issue/issue-labels'
|
|
8
10
|
import type { FiledKind } from '#scripts/run/event/run-event-filed'
|
|
9
11
|
|
|
@@ -12,12 +14,9 @@ import type { FiledKind } from '#scripts/run/event/run-event-filed'
|
|
|
12
14
|
// there. An issue with labels from several takes the first, as the release notes do; one with none is
|
|
13
15
|
// an Other Change and draws no kind.
|
|
14
16
|
|
|
15
|
-
const SEMVER_MAJOR_LABEL = 'Semver-Major'
|
|
16
|
-
const SEMVER_MINOR_LABEL = 'Semver-Minor'
|
|
17
|
-
|
|
18
17
|
const RELEASE_KINDS: ReadonlyArray<readonly [FiledKind, ReadonlyArray<string>]> = [
|
|
19
|
-
['breaking-change', [BREAKING_CHANGE_LABEL
|
|
20
|
-
['enhancement', [ENHANCEMENT_LABEL
|
|
18
|
+
['breaking-change', [BREAKING_CHANGE_LABEL]],
|
|
19
|
+
['enhancement', [ENHANCEMENT_LABEL]],
|
|
21
20
|
['bug', [BUGFIX_LABEL, BUG_LABEL]],
|
|
22
21
|
]
|
|
23
22
|
|
|
@@ -30,6 +29,21 @@ function kind_of(labels: ReadonlyArray<string> | undefined): FiledKind | undefin
|
|
|
30
29
|
return RELEASE_KINDS.find(([, names]) => names.some((name) => has_label_name(labels, name)))?.[0]
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
|
|
32
|
+
// The priority a row is drawn with (joshuafolkken/kit#4383): critical over high, none for the rest.
|
|
33
|
+
type BoardPriority = 'critical' | 'high'
|
|
34
|
+
|
|
35
|
+
const PRIORITIES: ReadonlyArray<readonly [BoardPriority, string]> = [
|
|
36
|
+
['critical', PRIORITY_CRITICAL_LABEL],
|
|
37
|
+
['high', PRIORITY_HIGH_LABEL],
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
function priority_of(labels: ReadonlyArray<string> | undefined): BoardPriority | undefined {
|
|
41
|
+
if (labels === undefined) return undefined
|
|
42
|
+
|
|
43
|
+
return PRIORITIES.find(([, name]) => has_label_name(labels, name))?.[0]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const run_board_kind = { KIND_ORDER, kind_of, priority_of }
|
|
34
47
|
|
|
48
|
+
export type { BoardPriority }
|
|
35
49
|
export { run_board_kind }
|
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import { WriteStream } from 'node:tty'
|
|
2
2
|
import { styleText } from 'node:util'
|
|
3
|
+
import { figure_format } from '#scripts/lib/figure-format'
|
|
3
4
|
import type { FiledKind } from '#scripts/run/event/run-event-filed'
|
|
4
5
|
import { run_event_setup } from '#scripts/run/event/run-event-setup'
|
|
5
6
|
import cli_spinners from 'cli-spinners'
|
|
7
|
+
import { run_board_length } from './run-board-length'
|
|
6
8
|
import type { BoardNote } from './run-board-notes'
|
|
7
9
|
import type { Phase } from './run-board-phase'
|
|
8
10
|
import type { ItemState } from './run-board-status'
|
|
9
11
|
|
|
10
12
|
// The words and the clock `run:board` draws with. A moment on the board is a local clock, `HH:MM`
|
|
11
|
-
// where a person reads it to the minute;
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
const CLOCK_WIDTH = 2
|
|
16
|
-
const CLOCK_PAD = '0'
|
|
17
|
-
const MS_PER_SECOND = 1000
|
|
18
|
-
const SECONDS_PER_MINUTE = 60
|
|
19
|
-
const MINUTES_PER_HOUR = 60
|
|
13
|
+
// where a person reads it to the minute; every length — how long the run, a row, a phase or the
|
|
14
|
+
// heartbeat has run — is degree-minute-second style (`1°15′57″`), so `:` is a time of day alone and
|
|
15
|
+
// the board never reads a length as a moment.
|
|
16
|
+
|
|
20
17
|
// Every gauge is this wide — the plan, the machine and a row's phase.
|
|
21
18
|
const BAR_WIDTH = 10
|
|
22
19
|
// A centered square done and a thin line left: the shapes alone tell the two apart where no color is
|
|
@@ -40,15 +37,43 @@ const DEFAULT_FOREGROUND = `${ESC}[39m`
|
|
|
40
37
|
const WORDS = {
|
|
41
38
|
no_run: 'no run',
|
|
42
39
|
plan: 'plan',
|
|
40
|
+
// The reads off this machine — the run's stream, its lanes and the gauges — that last failed.
|
|
41
|
+
read: 'read',
|
|
43
42
|
merged: 'merged',
|
|
44
43
|
parked: 'parked',
|
|
45
44
|
done: 'done',
|
|
46
45
|
withdrawn: 'withdrawn',
|
|
47
46
|
in_progress: 'running',
|
|
48
47
|
stopped: 'stopped',
|
|
48
|
+
paused: 'paused',
|
|
49
|
+
earlier: 'earlier run',
|
|
50
|
+
unknown: 'lane state unknown',
|
|
49
51
|
waiting: 'waiting',
|
|
52
|
+
queued: 'queued',
|
|
53
|
+
not_before: 'not before',
|
|
50
54
|
decision: 'decision',
|
|
51
55
|
waits: 'waits on',
|
|
56
|
+
// What a waiting row waits on, where the legend names its icon.
|
|
57
|
+
opening: 'opening lane',
|
|
58
|
+
installing: 'installing',
|
|
59
|
+
dispatching: 'dispatching',
|
|
60
|
+
lane: 'free lane',
|
|
61
|
+
path: 'path held',
|
|
62
|
+
named: 'named order',
|
|
63
|
+
held: 'held by triage',
|
|
64
|
+
headroom: 'memory headroom',
|
|
65
|
+
untriaged: 'untriaged',
|
|
66
|
+
solo: 'runs alone',
|
|
67
|
+
solo_ahead: 'behind solo',
|
|
68
|
+
solo_running: 'solo running',
|
|
69
|
+
// A blocker this run will not finish, which a person has to move (joshuafolkken/kit#4292).
|
|
70
|
+
on_human: 'needs a person',
|
|
71
|
+
// A lane held back by the machine-wide core budget, and why.
|
|
72
|
+
held_check: 'held',
|
|
73
|
+
memory: 'waits for memory',
|
|
74
|
+
cores: 'waits for CPU',
|
|
75
|
+
// How long a lane has run, which the lanes rule's ⏰ stands over.
|
|
76
|
+
elapsed: 'elapsed',
|
|
52
77
|
investigate: 'investigate',
|
|
53
78
|
implement: 'implement',
|
|
54
79
|
ship: 'ship',
|
|
@@ -60,9 +85,10 @@ const WORDS = {
|
|
|
60
85
|
followup: 'followup',
|
|
61
86
|
report: 'report',
|
|
62
87
|
failed: 'failed',
|
|
63
|
-
notes: 'findings
|
|
88
|
+
notes: 'findings',
|
|
64
89
|
more: 'more',
|
|
65
90
|
filed: 'filed',
|
|
91
|
+
filed_run: 'filed this run',
|
|
66
92
|
breaking: 'breaking',
|
|
67
93
|
feature: 'feature',
|
|
68
94
|
fix: 'fix',
|
|
@@ -75,6 +101,7 @@ const WORDS = {
|
|
|
75
101
|
on_person: 'waiting on a person',
|
|
76
102
|
operation: 'operation',
|
|
77
103
|
ended: 'ended',
|
|
104
|
+
estimate: 'estimated finish',
|
|
78
105
|
// The session a stopped run waits in, and what closing the board leaves.
|
|
79
106
|
resume: 'stopped — resume with',
|
|
80
107
|
keeps_running: 'Closing this screen leaves the run going · reopen with `pnpm josh backlogrun`',
|
|
@@ -105,12 +132,21 @@ const STATE_ICONS: Readonly<Record<ItemState, string>> = {
|
|
|
105
132
|
waiting: '⏳',
|
|
106
133
|
human: '🙋',
|
|
107
134
|
stopped: '🛑',
|
|
135
|
+
paused: '🧊',
|
|
108
136
|
withdrawn: '🚫',
|
|
137
|
+
unknown: '❔',
|
|
109
138
|
}
|
|
110
139
|
|
|
111
140
|
// The blocking edge, chosen on the same rule: ⛓ is a text symbol.
|
|
112
141
|
const WAITS_ICON = '🔗'
|
|
113
142
|
|
|
143
|
+
// A waiting row that waits on the start time its body declares rather than on a blocker
|
|
144
|
+
// (joshuafolkken/kit#4079), chosen on the same rule: 🗓 is a text symbol.
|
|
145
|
+
const NOT_BEFORE_ICON = '📅'
|
|
146
|
+
|
|
147
|
+
// The lanes section's rule, and a waiting row that waits on a free lane.
|
|
148
|
+
const LANES_ICON = '🧵'
|
|
149
|
+
|
|
114
150
|
// A running row's phases as icons, chosen on the same rule; the row draws every phase it has passed,
|
|
115
151
|
// so the rightmost icon is what it is doing now. Each of `josh ship`'s stages has its own; ⚓ rather
|
|
116
152
|
// than 🔁, which reads as a retry.
|
|
@@ -149,6 +185,9 @@ const PHASE_WORDS: Readonly<Record<Phase, keyof Words>> = {
|
|
|
149
185
|
// phase and state icon, so the legend names them and a row needs no word. 🆕 is a filed issue whose
|
|
150
186
|
// kind is none of `FILED_KIND_ICONS`.
|
|
151
187
|
const NOTES_ICON = '📌'
|
|
188
|
+
// A plan row the run filed leads its title with it, in place of a findings line naming it again
|
|
189
|
+
// (joshuafolkken/kit#4099).
|
|
190
|
+
const FILED_RUN_MARK = '✚'
|
|
152
191
|
const NOTE_ICONS: Readonly<Record<BoardNote['kind'], string>> = {
|
|
153
192
|
filed: '🆕',
|
|
154
193
|
park: STATE_ICONS.parked,
|
|
@@ -171,25 +210,32 @@ const KIND_WORDS: Readonly<Record<FiledKind, keyof Words>> = {
|
|
|
171
210
|
bug: 'fix',
|
|
172
211
|
}
|
|
173
212
|
|
|
174
|
-
// The header's gauges and marks. ⚡
|
|
175
|
-
//
|
|
176
|
-
// would stand a column off.
|
|
213
|
+
// The header's gauges and marks. 💪 for the CPU: ⚡ is drawn too thin to see, a 🔥 beside a gauge
|
|
214
|
+
// drawn green reads as an alarm, and 💻 is hard to tell from 💾. ⏰ rather than ⏱, a text symbol
|
|
215
|
+
// some terminals draw one column wide: under it the 💓's digits would stand a column off.
|
|
177
216
|
const HEADER_ICONS = {
|
|
178
|
-
cpu: '
|
|
217
|
+
cpu: '💪',
|
|
179
218
|
memory: '🧠',
|
|
180
219
|
swap: '💾',
|
|
181
220
|
ended: '🔚',
|
|
182
221
|
loading: '⏳',
|
|
183
222
|
elapsed: '⏰',
|
|
184
223
|
heartbeat: '💓',
|
|
224
|
+
// A failed plan read: ❗ rather than ⚠, a text symbol drawn two columns wide over the blank after it.
|
|
225
|
+
warning: '❗',
|
|
226
|
+
// The estimated finish: 🎯 rather than 🏁, a done row's state icon, so the legend names each once
|
|
227
|
+
// (joshuafolkken/kit#4538).
|
|
228
|
+
estimate: '🎯',
|
|
185
229
|
} as const
|
|
186
230
|
|
|
187
|
-
// The kind of what the header's third line says, under the
|
|
231
|
+
// The kind of what the header's third line says, under the `💪` (joshuafolkken/kit#3767): a call a
|
|
188
232
|
// session made, the run watching its pool, the run ended, or each of the run's own stages, keyed by the
|
|
189
233
|
// stage's words before any issue. A child's event draws its row's phase icon instead. The run ended
|
|
190
234
|
// draws the header's own end mark — 🏁 is already a done row's state icon.
|
|
191
235
|
const NOW_ICONS = { operation: '🔧', watching: '🔭', ended: HEADER_ICONS.ended } as const
|
|
192
236
|
const { STAGE, LANE_STAGE } = run_event_setup
|
|
237
|
+
// The stages a lane's launch passes, which a queued row waiting on its lane leads with too.
|
|
238
|
+
const LANE_STAGE_ICONS = { opening: '🚪', installing: '📥', dispatching: '📤' } as const
|
|
193
239
|
const STAGE_ICONS: Readonly<Partial<Record<string, string>>> = {
|
|
194
240
|
[STAGE.STARTING]: '🚀',
|
|
195
241
|
[STAGE.PLANNING]: '📝',
|
|
@@ -197,11 +243,50 @@ const STAGE_ICONS: Readonly<Partial<Record<string, string>>> = {
|
|
|
197
243
|
[STAGE.JUDGING]: '🤔',
|
|
198
244
|
[STAGE.SESSION]: '💭',
|
|
199
245
|
[STAGE.NO_CHILD]: '🚫',
|
|
200
|
-
[LANE_STAGE.OPENING]:
|
|
201
|
-
[LANE_STAGE.INSTALLING]:
|
|
202
|
-
[LANE_STAGE.DISPATCHING]:
|
|
246
|
+
[LANE_STAGE.OPENING]: LANE_STAGE_ICONS.opening,
|
|
247
|
+
[LANE_STAGE.INSTALLING]: LANE_STAGE_ICONS.installing,
|
|
248
|
+
[LANE_STAGE.DISPATCHING]: LANE_STAGE_ICONS.dispatching,
|
|
203
249
|
}
|
|
204
250
|
|
|
251
|
+
// What a queued or waiting row leads with (joshuafolkken/kit#4288), in place of ⏳: 📂 a path a
|
|
252
|
+
// running issue holds, 📋 the declared order, ✋ a pool held for a judgment, ❓ an issue nobody has
|
|
253
|
+
// judged, 🧍 a `run:solo` issue waiting for the running lanes, 🙅 a row behind it (#4294; 🚧 is a
|
|
254
|
+
// held check's) and 🔒 a row a running `run:solo` issue holds (#4391), chosen on the same rule as
|
|
255
|
+
// every row icon. The rest are the board's own, shared rather than copied.
|
|
256
|
+
const WAIT_ICONS = {
|
|
257
|
+
path: '📂',
|
|
258
|
+
named: '📋',
|
|
259
|
+
held: '✋',
|
|
260
|
+
untriaged: '❓',
|
|
261
|
+
solo: '🧍',
|
|
262
|
+
solo_ahead: '🙅',
|
|
263
|
+
solo_running: '🔒',
|
|
264
|
+
lane: LANES_ICON,
|
|
265
|
+
memory: HEADER_ICONS.memory,
|
|
266
|
+
blocker: WAITS_ICON,
|
|
267
|
+
not_before: NOT_BEFORE_ICON,
|
|
268
|
+
} as const
|
|
269
|
+
|
|
270
|
+
// The legend's word for each icon a waiting row can lead with — a lane's stage among them. 📝, the
|
|
271
|
+
// planning a row waits on, is the plan phase's icon, which the legend names already.
|
|
272
|
+
const WAIT_WORDS: ReadonlyArray<readonly [icon: string, word: keyof Words]> = [
|
|
273
|
+
[LANE_STAGE_ICONS.opening, 'opening'],
|
|
274
|
+
[LANE_STAGE_ICONS.installing, 'installing'],
|
|
275
|
+
[LANE_STAGE_ICONS.dispatching, 'dispatching'],
|
|
276
|
+
[WAIT_ICONS.lane, 'lane'],
|
|
277
|
+
[WAIT_ICONS.path, 'path'],
|
|
278
|
+
[WAIT_ICONS.named, 'named'],
|
|
279
|
+
[WAIT_ICONS.held, 'held'],
|
|
280
|
+
[WAIT_ICONS.solo, 'solo'],
|
|
281
|
+
[WAIT_ICONS.solo_ahead, 'solo_ahead'],
|
|
282
|
+
[WAIT_ICONS.solo_running, 'solo_running'],
|
|
283
|
+
[WAIT_ICONS.memory, 'headroom'],
|
|
284
|
+
[WAIT_ICONS.untriaged, 'untriaged'],
|
|
285
|
+
[WAIT_ICONS.blocker, 'waits'],
|
|
286
|
+
[STATE_ICONS.human, 'on_human'],
|
|
287
|
+
[WAIT_ICONS.not_before, 'not_before'],
|
|
288
|
+
]
|
|
289
|
+
|
|
205
290
|
// **The machine gauges' three colors, decided here alone**: Activity Monitor's green, yellow and red
|
|
206
291
|
// in the system's dark-mode values. A palette's `green` draws blue and its `red` orange in a VSCode
|
|
207
292
|
// terminal, so the normal gauge would read as the cyan plan bar and the busy one as yellow.
|
|
@@ -211,60 +296,16 @@ const GAUGE_SHADES = {
|
|
|
211
296
|
red: { rgb: '255;69;58', named: 'red' },
|
|
212
297
|
} as const satisfies Readonly<Record<string, Shade>>
|
|
213
298
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// The local wall-clock `HH:MM:SS` of a moment.
|
|
219
|
-
function clock_of(ms: number): string {
|
|
220
|
-
const date = new Date(ms)
|
|
299
|
+
const { two_digits, clock_of, minute_of } = figure_format
|
|
300
|
+
const { minute_span_of, span_of } = run_board_length
|
|
221
301
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// The local wall-clock `HH:MM` of a moment, for one a person reads to the minute — when a run ended, or
|
|
228
|
-
// when a finding was filed.
|
|
229
|
-
function minute_of(ms: number): string {
|
|
302
|
+
// The local `MM-DD HH:MM` of a moment, for one that may fall on another day — when a waiting row may
|
|
303
|
+
// start, in the condition column it is the widest value of (joshuafolkken/kit#4288).
|
|
304
|
+
function day_minute_of(ms: number): string {
|
|
230
305
|
const date = new Date(ms)
|
|
306
|
+
const day = [date.getMonth() + 1, date.getDate()].map((value) => two_digits(value))
|
|
231
307
|
|
|
232
|
-
return
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// How long a row's child has run, as `MM:SS` whose minutes never carry into hours (`61:05`), so every
|
|
236
|
-
// row reads one short column; a negative span reads as zero.
|
|
237
|
-
function elapsed_of(ms: number): string {
|
|
238
|
-
const seconds = Math.floor(Math.max(0, ms) / MS_PER_SECOND)
|
|
239
|
-
const minutes = Math.floor(seconds / SECONDS_PER_MINUTE)
|
|
240
|
-
|
|
241
|
-
return `${two_digits(minutes)}:${two_digits(seconds % SECONDS_PER_MINUTE)}`
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// A length as its hours, and its minutes and seconds within the hour; a negative span reads as zero.
|
|
245
|
-
function span_fields(ms: number): [hours: number, minutes: number, seconds: number] {
|
|
246
|
-
const seconds = Math.floor(Math.max(0, ms) / MS_PER_SECOND)
|
|
247
|
-
const minutes = Math.floor(seconds / SECONDS_PER_MINUTE)
|
|
248
|
-
const hours = Math.floor(minutes / MINUTES_PER_HOUR)
|
|
249
|
-
|
|
250
|
-
return [hours, minutes % MINUTES_PER_HOUR, seconds % SECONDS_PER_MINUTE]
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// How long the run has run or its stream has been silent, as `H:MM:SS` with the hours not padded; a negative
|
|
254
|
-
// span reads as zero. Always three fields, so a run under an hour (`0:03:25`) never reads as a time.
|
|
255
|
-
function span_of(ms: number): string {
|
|
256
|
-
const [hours, ...tail] = span_fields(ms)
|
|
257
|
-
|
|
258
|
-
return [String(hours), ...tail.map((value) => two_digits(value))].join(':')
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// How long the run has stood at its stage, as `M:SS` with the minutes not padded, and as `span_of`'s
|
|
262
|
-
// `H:MM:SS` from an hour on. It stands beside the stage's words, never in the header's time column, so
|
|
263
|
-
// its one separator is not read there as a time of day.
|
|
264
|
-
function stage_span_of(ms: number): string {
|
|
265
|
-
const [hours, minutes, seconds] = span_fields(ms)
|
|
266
|
-
|
|
267
|
-
return hours === 0 ? `${String(minutes)}:${two_digits(seconds)}` : span_of(ms)
|
|
308
|
+
return `${day.join('-')} ${minute_of(ms)}`
|
|
268
309
|
}
|
|
269
310
|
|
|
270
311
|
function is_shade(color: Paint): color is Shade {
|
|
@@ -317,6 +358,7 @@ function spinner_of(now_ms: number): string {
|
|
|
317
358
|
|
|
318
359
|
const run_board_labels = {
|
|
319
360
|
FILED_KIND_ICONS,
|
|
361
|
+
FILED_RUN_MARK,
|
|
320
362
|
GAUGE_SHADES,
|
|
321
363
|
HEADER_ICONS,
|
|
322
364
|
KIND_BLANK,
|
|
@@ -332,13 +374,16 @@ const run_board_labels = {
|
|
|
332
374
|
WAITS_ICON,
|
|
333
375
|
WORDS,
|
|
334
376
|
bar_of,
|
|
377
|
+
LANES_ICON,
|
|
378
|
+
WAIT_ICONS,
|
|
379
|
+
WAIT_WORDS,
|
|
335
380
|
clock_of,
|
|
336
|
-
|
|
381
|
+
day_minute_of,
|
|
337
382
|
minute_of,
|
|
383
|
+
minute_span_of,
|
|
338
384
|
painted,
|
|
339
385
|
span_of,
|
|
340
386
|
spinner_of,
|
|
341
|
-
stage_span_of,
|
|
342
387
|
}
|
|
343
388
|
|
|
344
389
|
export { run_board_labels }
|