@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
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { BoardHeader } from './run-board-header'
|
|
2
|
+
import { run_board_labels } from './run-board-labels'
|
|
3
|
+
import { run_board_layout } from './run-board-layout'
|
|
4
|
+
import type { Link } from './run-board-link'
|
|
5
|
+
import type { BoardNote } from './run-board-notes'
|
|
6
|
+
import { run_board_render_drawn } from './run-board-render-drawn'
|
|
7
|
+
import { run_board_render_icon } from './run-board-render-icon'
|
|
8
|
+
import { run_board_render_legend } from './run-board-render-legend'
|
|
9
|
+
import { run_board_render_thanks } from './run-board-render-thanks'
|
|
10
|
+
import { run_board_render_waits } from './run-board-render-waits'
|
|
11
|
+
import type { Thanks } from './run-board-thanks-csv'
|
|
12
|
+
|
|
13
|
+
// The lines around a frame's rows that no row draws — pure: the command a stopped run resumes from
|
|
14
|
+
// under the header, and the reviewers thanked, the stray waits and the legend at the foot.
|
|
15
|
+
|
|
16
|
+
const { STATE_ICONS, WORDS } = run_board_labels
|
|
17
|
+
const GAP = ' '
|
|
18
|
+
|
|
19
|
+
// The command that resumes a stopped run's session, under the header where the person looks first.
|
|
20
|
+
function resume_lines(resume: string | undefined): Array<string> {
|
|
21
|
+
if (resume === undefined) return []
|
|
22
|
+
|
|
23
|
+
return ['', `${STATE_ICONS.human} ${WORDS.resume}${GAP}claude --resume ${resume}`]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// No legend is drawn before a plan is read, nor where the frame draws nothing it would name.
|
|
27
|
+
function legend_of(header: BoardHeader, notes: ReadonlyArray<BoardNote>): Array<string> {
|
|
28
|
+
const { layout } = header
|
|
29
|
+
|
|
30
|
+
if (layout === undefined) return []
|
|
31
|
+
|
|
32
|
+
const rows = run_board_layout.drawn_rows(layout)
|
|
33
|
+
const leads = new Set(rows.map((row) => run_board_render_icon.state_icon(row)))
|
|
34
|
+
const drawn = run_board_render_drawn.drawn_of(header, rows, leads)
|
|
35
|
+
|
|
36
|
+
return run_board_render_legend.legend_of(rows, drawn, notes)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The waits no lane row owns, right before the legend (joshuafolkken/kit#4052), and the legend.
|
|
40
|
+
function legend_lines(header: BoardHeader, notes: ReadonlyArray<BoardNote>): Array<string> {
|
|
41
|
+
const lines = [...run_board_render_waits.stray_lines(header), ...legend_of(header, notes)]
|
|
42
|
+
|
|
43
|
+
return lines.length === 0 ? [] : ['', ...lines]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Names with no link where no terminal opens one: a frame with no `link` draws them plain.
|
|
47
|
+
function thanks_part(
|
|
48
|
+
thanks: Thanks | undefined,
|
|
49
|
+
link: Link | undefined,
|
|
50
|
+
columns: number | undefined,
|
|
51
|
+
): Array<string> {
|
|
52
|
+
const linked = link ?? ((text: string): string => text)
|
|
53
|
+
|
|
54
|
+
return run_board_render_thanks.thanks_lines(thanks ?? [], linked, columns)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const run_board_render_foot = { legend_lines, resume_lines, thanks_part }
|
|
58
|
+
|
|
59
|
+
export { run_board_render_foot }
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { run_board_earlier } from './run-board-earlier'
|
|
2
|
+
import { run_board_labels } from './run-board-labels'
|
|
3
|
+
import type { BoardRow } from './run-board-layout'
|
|
4
|
+
|
|
5
|
+
// The icon a `run:board` row leads with: its state's, or its phase's while it runs. A held lane keeps
|
|
6
|
+
// it, 🚧 standing in the progress column before it (joshuafolkken/kit#4292).
|
|
7
|
+
|
|
8
|
+
const { PHASE_ICONS, STATE_ICONS } = run_board_labels
|
|
9
|
+
const { EARLIER_ICON } = run_board_earlier
|
|
10
|
+
|
|
11
|
+
// A row that says what it waits on leads with that wait's icon in place of its state's
|
|
12
|
+
// (joshuafolkken/kit#4288).
|
|
13
|
+
function state_lead(row: BoardRow): string {
|
|
14
|
+
return row.reason?.icon ?? STATE_ICONS[row.state]
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// A running row leads with the icon of the phase it is in now — the last its track reached — and
|
|
18
|
+
// with 🔄 while it has reached none yet; an earlier run's running lane leads with 🧳 in its place.
|
|
19
|
+
function running_lead(row: BoardRow): string {
|
|
20
|
+
const current = row.status?.track?.at(-1)
|
|
21
|
+
|
|
22
|
+
return current === undefined ? state_lead(row) : PHASE_ICONS[current]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function state_icon(row: BoardRow): string {
|
|
26
|
+
if (row.state !== 'running') return state_lead(row)
|
|
27
|
+
|
|
28
|
+
return row.is_earlier === true ? EARLIER_ICON : running_lead(row)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const run_board_render_icon = {
|
|
32
|
+
state_icon,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { run_board_render_icon }
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { run_board_earlier } from './run-board-earlier'
|
|
2
|
+
import { run_board_fit, type PlanLine, type PlanSection } from './run-board-fit'
|
|
3
|
+
import type { BoardHeader } from './run-board-header'
|
|
4
|
+
import { run_board_labels } from './run-board-labels'
|
|
5
|
+
import type { BoardRow } from './run-board-layout'
|
|
6
|
+
import { run_board_render_lead } from './run-board-render-lead'
|
|
7
|
+
import { run_board_render_section, type RuleColumn } from './run-board-render-section'
|
|
8
|
+
import type { LaneUsages, UsageFigure, UsageScale } from './run-board-usage'
|
|
9
|
+
import { run_board_usage_text, type CellLimits } from './run-board-usage-text'
|
|
10
|
+
|
|
11
|
+
// The run's own rows' CPU, MEM and CMPRS cells, right after each row's lead and before its number,
|
|
12
|
+
// under a rule whose labels stand over them and over the run's time: `── 🧵 lanes ── ⏰ ── 💪 CPU ─
|
|
13
|
+
// 🧠 MEM ─ 🤏 CMPRS ───`. The cells start at `USAGE_START`, as the processes rows' do, so the two
|
|
14
|
+
// sections' figures stand in one column (joshuafolkken/kit#4292). A running row draws its lane's
|
|
15
|
+
// figures; every other row blanks of the same width, so every number and title after them starts in
|
|
16
|
+
// one column. Drawn with gauges on a terminal and as figures alone anywhere else.
|
|
17
|
+
|
|
18
|
+
const { HEADER_ICONS } = run_board_labels
|
|
19
|
+
const { cell_widths, cells_of, lane_limits } = run_board_usage_text
|
|
20
|
+
const { columns_rule } = run_board_render_section
|
|
21
|
+
const { ELAPSED_START, USAGE_START } = run_board_render_lead
|
|
22
|
+
const { width_of } = run_board_fit
|
|
23
|
+
const GAUGE = 5
|
|
24
|
+
const CELL_GAP = ' '
|
|
25
|
+
// What a column needs past its label so the next label still has a rule before it: ` ─`.
|
|
26
|
+
const LABEL_TAIL = 2
|
|
27
|
+
// Icons Unicode draws as emoji by default, which `string-width` counts two columns wide as a
|
|
28
|
+
// terminal draws them: 🛤 and 🗜, text symbols drawn as emoji, overlapped the blank after them.
|
|
29
|
+
const LANES_LABEL = `${run_board_labels.LANES_ICON} lanes`
|
|
30
|
+
const COLUMN_LABELS = [`${HEADER_ICONS.cpu} CPU`, `${HEADER_ICONS.memory} MEM`, '🤏 CMPRS']
|
|
31
|
+
|
|
32
|
+
// What one frame's lane cells are drawn with.
|
|
33
|
+
interface LaneCells {
|
|
34
|
+
usages: LaneUsages
|
|
35
|
+
scale: UsageScale
|
|
36
|
+
// Where each live row's gauges are full — its share of the header's yellow thresholds, counted once a
|
|
37
|
+
// frame.
|
|
38
|
+
limits: CellLimits
|
|
39
|
+
gauge: number
|
|
40
|
+
// The widest row number of the section, so the kind icon and title after it start in one column.
|
|
41
|
+
number_width: number
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// The gauge drawn after each figure — none where the frame is not drawn on a terminal, which draws no
|
|
45
|
+
// spinner.
|
|
46
|
+
function gauge_of(header: BoardHeader): number {
|
|
47
|
+
return header.spinner === undefined ? 0 : GAUGE
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Each column's width: its cell's, widened where its label is wider.
|
|
51
|
+
function column_widths(gauge: number): Array<number> {
|
|
52
|
+
return cell_widths(gauge).map((width, index) =>
|
|
53
|
+
Math.max(width, width_of(COLUMN_LABELS[index] ?? '') + LABEL_TAIL),
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// A figure's cells, each right-aligned in its column — full at `limits` where a lane row passes its
|
|
58
|
+
// share, at the whole machine where not.
|
|
59
|
+
function column_cells(
|
|
60
|
+
figure: UsageFigure | undefined,
|
|
61
|
+
scale: UsageScale,
|
|
62
|
+
gauge: number,
|
|
63
|
+
limits?: CellLimits,
|
|
64
|
+
): string {
|
|
65
|
+
const widths = column_widths(gauge)
|
|
66
|
+
const cells = cells_of(figure, scale, gauge, limits).map(
|
|
67
|
+
(cell, index) => `${' '.repeat(Math.max(0, (widths[index] ?? 0) - width_of(cell)))}${cell}`,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
return cells.join(CELL_GAP)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// `undefined` where the frame read no usage, which draws no cells.
|
|
74
|
+
function lane_cells_of(header: BoardHeader, rows: ReadonlyArray<BoardRow>): LaneCells | undefined {
|
|
75
|
+
const { usages } = header
|
|
76
|
+
|
|
77
|
+
if (usages === undefined) return undefined
|
|
78
|
+
|
|
79
|
+
const running = rows.filter((row) => run_board_earlier.is_live(row)).length
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
usages: usages.lanes,
|
|
83
|
+
scale: usages.scale,
|
|
84
|
+
limits: lane_limits(running),
|
|
85
|
+
gauge: gauge_of(header),
|
|
86
|
+
number_width: Math.max(0, ...rows.map((row) => String(row.number).length)),
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// A row's number as linked — where cells are drawn, after them and padded to the section's widest.
|
|
91
|
+
function number_text(
|
|
92
|
+
row: BoardRow,
|
|
93
|
+
cells: LaneCells | undefined,
|
|
94
|
+
link: (text: string) => string,
|
|
95
|
+
): string {
|
|
96
|
+
const number = String(row.number)
|
|
97
|
+
|
|
98
|
+
if (cells === undefined) return link(number)
|
|
99
|
+
|
|
100
|
+
const figure = run_board_earlier.is_live(row) ? cells.usages.get(row.number) : undefined
|
|
101
|
+
const drawn = column_cells(figure, cells.scale, cells.gauge, cells.limits)
|
|
102
|
+
|
|
103
|
+
return `${drawn} ${link(number)}${' '.repeat(cells.number_width - number.length)}`
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Each column's label, placed at the column its cells start at, the first at `first`.
|
|
107
|
+
function label_columns(first: number, gauge: number): Array<RuleColumn> {
|
|
108
|
+
let start = first
|
|
109
|
+
|
|
110
|
+
return column_widths(gauge).map((width, index) => {
|
|
111
|
+
const column = { label: COLUMN_LABELS[index] ?? '', start }
|
|
112
|
+
|
|
113
|
+
start += width + CELL_GAP.length
|
|
114
|
+
|
|
115
|
+
return column
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// The run's own rows under the lanes rule, ⏰ over the run's time and the usage labels over their
|
|
120
|
+
// cells where they are drawn.
|
|
121
|
+
function lanes_section(
|
|
122
|
+
lines: ReadonlyArray<PlanLine>,
|
|
123
|
+
cells: LaneCells | undefined,
|
|
124
|
+
): Array<PlanSection> {
|
|
125
|
+
if (lines.length === 0) return []
|
|
126
|
+
|
|
127
|
+
const elapsed = { label: HEADER_ICONS.elapsed, start: ELAPSED_START }
|
|
128
|
+
const usage = cells === undefined ? [] : label_columns(USAGE_START, cells.gauge)
|
|
129
|
+
const rule = columns_rule(LANES_LABEL, [elapsed, ...usage])
|
|
130
|
+
|
|
131
|
+
return [{ head: ['', rule], lines, label: LANES_LABEL, key: 'lanes' }]
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const run_board_render_lanes = {
|
|
135
|
+
COLUMN_LABELS,
|
|
136
|
+
LANES_LABEL,
|
|
137
|
+
column_cells,
|
|
138
|
+
label_columns,
|
|
139
|
+
lane_cells_of,
|
|
140
|
+
lanes_section,
|
|
141
|
+
number_text,
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export { run_board_render_lanes }
|
|
145
|
+
export type { LaneCells }
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { run_board_earlier } from './run-board-earlier'
|
|
2
|
+
import { run_board_fresh } from './run-board-fresh'
|
|
3
|
+
import type { BoardHeader } from './run-board-header'
|
|
4
|
+
import type { BoardRow } from './run-board-layout'
|
|
5
|
+
import { run_board_render_icon } from './run-board-render-icon'
|
|
6
|
+
import { run_board_render_tail } from './run-board-render-tail'
|
|
7
|
+
import { run_board_render_time } from './run-board-render-time'
|
|
8
|
+
import { run_board_render_waits } from './run-board-render-waits'
|
|
9
|
+
|
|
10
|
+
// What a lane row draws before its usage cells (joshuafolkken/kit#4292): the progress column — the
|
|
11
|
+
// spinner while it runs, 🚧 while its lane is held, blanks where it stopped — the phase's icon, how
|
|
12
|
+
// long it has stood at the phase and how long it has run, each time eight columns right-aligned. A held
|
|
13
|
+
// lane draws why and how long it is held in the run's time's place, so every column after it stays put.
|
|
14
|
+
|
|
15
|
+
const { BUDGET_ICON, held_of, held_time } = run_board_render_waits
|
|
16
|
+
const { phase_time } = run_board_render_tail
|
|
17
|
+
const { state_icon } = run_board_render_icon
|
|
18
|
+
const { time_of } = run_board_render_time
|
|
19
|
+
// The widest span a time column draws: `1°14′58″`.
|
|
20
|
+
const TIME_WIDTH = 8
|
|
21
|
+
const LANE_INDENT = ' '
|
|
22
|
+
// The progress column: an emoji two columns wide, or the spinner and a blank.
|
|
23
|
+
const PROGRESS_WIDTH = 2
|
|
24
|
+
const PROGRESS_BLANK = ' '.repeat(PROGRESS_WIDTH)
|
|
25
|
+
const ICON_WIDTH = 2
|
|
26
|
+
const SPACE = 1
|
|
27
|
+
// The column the run's time starts at, which the rule's ⏰ stands over.
|
|
28
|
+
const ELAPSED_START =
|
|
29
|
+
LANE_INDENT.length + PROGRESS_WIDTH + SPACE + ICON_WIDTH + SPACE + TIME_WIDTH + SPACE
|
|
30
|
+
// The column a lane row's usage cells start at, after the lead and one blank; the processes rows' too.
|
|
31
|
+
const USAGE_START = ELAPSED_START + TIME_WIDTH + SPACE
|
|
32
|
+
|
|
33
|
+
// A running row's part that changed at `at_ms`, emphasized while fresh (`run-board-fresh.ts`) — its
|
|
34
|
+
// start and its phase; a settled row's are long past.
|
|
35
|
+
function running_fresh(
|
|
36
|
+
row: BoardRow,
|
|
37
|
+
text: string,
|
|
38
|
+
at_ms: number | undefined,
|
|
39
|
+
header: BoardHeader,
|
|
40
|
+
): string {
|
|
41
|
+
return run_board_earlier.is_live(row) ? run_board_fresh.since(text, at_ms, header) : text
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function progress_of(row: BoardRow, header: BoardHeader): string {
|
|
45
|
+
if (held_of(row, header) !== undefined) return BUDGET_ICON
|
|
46
|
+
if (row.state !== 'running' || header.spinner === undefined) return PROGRESS_BLANK
|
|
47
|
+
|
|
48
|
+
return `${header.spinner} `
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// How long the row has run, or why and how long its lane is held while it is.
|
|
52
|
+
function whole_of(row: BoardRow, header: BoardHeader): string {
|
|
53
|
+
const held = held_of(row, header)
|
|
54
|
+
|
|
55
|
+
if (held !== undefined) return held_time(held, TIME_WIDTH)
|
|
56
|
+
|
|
57
|
+
const time = time_of(row, header.now_ms) ?? ''
|
|
58
|
+
const fresh = running_fresh(row, time, row.status?.started_ms, header)
|
|
59
|
+
|
|
60
|
+
return run_board_fresh.padded(time, TIME_WIDTH, fresh)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// A lane row's lead after its indent, ending where its usage cells start less one blank.
|
|
64
|
+
function lead_of(row: BoardRow, header: BoardHeader): string {
|
|
65
|
+
const icon = running_fresh(row, state_icon(row), row.status?.phase_ms, header)
|
|
66
|
+
const phase = phase_time(row, header, TIME_WIDTH)
|
|
67
|
+
|
|
68
|
+
return [progress_of(row, header), icon, phase, whole_of(row, header)].join(' ')
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const run_board_render_lead = {
|
|
72
|
+
ELAPSED_START,
|
|
73
|
+
LANE_INDENT,
|
|
74
|
+
TIME_WIDTH,
|
|
75
|
+
USAGE_START,
|
|
76
|
+
lead_of,
|
|
77
|
+
running_fresh,
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export { run_board_render_lead }
|
|
@@ -1,49 +1,80 @@
|
|
|
1
1
|
import { styleText } from 'node:util'
|
|
2
2
|
import type { FiledKind } from '#scripts/run/event/run-event-filed'
|
|
3
|
+
import { run_board_earlier } from './run-board-earlier'
|
|
3
4
|
import { run_board_kind } from './run-board-kind'
|
|
4
5
|
import { run_board_labels, type Words } from './run-board-labels'
|
|
5
6
|
import type { BoardRow } from './run-board-layout'
|
|
6
|
-
import type
|
|
7
|
+
import { run_board_notes, type BoardNote } from './run-board-notes'
|
|
7
8
|
import { run_board_phase } from './run-board-phase'
|
|
8
9
|
import { run_board_render_notes } from './run-board-render-notes'
|
|
9
10
|
import type { ItemState } from './run-board-status'
|
|
10
11
|
|
|
11
|
-
// The legend at the foot of `run:board`: the symbols named once, so a row carries
|
|
12
|
-
// between rows. Drawn apart from the rows, which tell it the icons they
|
|
12
|
+
// The legend at the foot of `run:board`: the symbols the frame draws, named once, so a row carries
|
|
13
|
+
// only what differs between rows. Drawn apart from the rows, which tell it the icons they draw.
|
|
14
|
+
// joshuafolkken/kit#4047: each naming only what the frame draws, on one line. An icon the frame draws
|
|
15
|
+
// beside its own word is not named — ⏳ under `⏳ queued`, 🙋 under `🙋 decision`, ✅ under `✅ done`
|
|
16
|
+
// and 📌 on `📌 findings` — so the legend names only an icon drawn with no word beside it, what a
|
|
17
|
+
// waiting row leads with among them.
|
|
13
18
|
|
|
14
|
-
const {
|
|
15
|
-
|
|
19
|
+
const {
|
|
20
|
+
FILED_KIND_ICONS,
|
|
21
|
+
FILED_RUN_MARK,
|
|
22
|
+
KIND_WORDS,
|
|
23
|
+
PHASE_ICONS,
|
|
24
|
+
PHASE_WORDS,
|
|
25
|
+
STATE_ICONS,
|
|
26
|
+
WAITS_ICON,
|
|
27
|
+
WAIT_WORDS,
|
|
28
|
+
WORDS,
|
|
29
|
+
} = run_board_labels
|
|
16
30
|
const GAP = ' '
|
|
17
31
|
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
// the
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
[
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
// What the frame draws, as the legend reads it.
|
|
33
|
+
interface LegendDrawn {
|
|
34
|
+
// The icons the rows lead with — a running row leads with its phase, so 🔄 is named only while a
|
|
35
|
+
// row draws it.
|
|
36
|
+
leads: ReadonlySet<string>
|
|
37
|
+
// Every icon a phase may be drawn with: the rows' leads, the header's third line and the rows' ends.
|
|
38
|
+
icons: ReadonlySet<string>
|
|
39
|
+
// The activity kinds the header's third line and the rows' ends draw, where their own words do not
|
|
40
|
+
// name them (joshuafolkken/kit#3767, joshuafolkken/kit#3769).
|
|
41
|
+
named: ReadonlyArray<string>
|
|
42
|
+
// What a followup row's checks draw (joshuafolkken/kit#3770).
|
|
43
|
+
checks: ReadonlyArray<string>
|
|
44
|
+
// 🚧 and the reasons a held check is drawn with (joshuafolkken/kit#4052).
|
|
45
|
+
held: ReadonlyArray<string>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type LeadWords = ReadonlyArray<readonly [string, keyof Words]>
|
|
49
|
+
|
|
50
|
+
function states_of(states: ReadonlyArray<readonly [ItemState, keyof Words]>): LeadWords {
|
|
51
|
+
return states.map(([state, word]) => [STATE_ICONS[state], word] as const)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// The row leads the legend can name, each with its word: in progress first, then the settled ones.
|
|
55
|
+
const PROGRESS_STATES: LeadWords = states_of([['running', 'in_progress']])
|
|
56
|
+
const SETTLED_STATES: LeadWords = [
|
|
57
|
+
...states_of([
|
|
58
|
+
['parked', 'parked'],
|
|
59
|
+
['paused', 'paused'],
|
|
60
|
+
['stopped', 'stopped'],
|
|
61
|
+
]),
|
|
62
|
+
[run_board_earlier.EARLIER_ICON, 'earlier'],
|
|
63
|
+
...states_of([
|
|
64
|
+
['unknown', 'unknown'],
|
|
65
|
+
['done', 'done'],
|
|
66
|
+
['withdrawn', 'withdrawn'],
|
|
67
|
+
]),
|
|
40
68
|
]
|
|
41
69
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
70
|
+
function state_legend(states: LeadWords, leads: ReadonlySet<string>): Array<string> {
|
|
71
|
+
return states.filter(([icon]) => leads.has(icon)).map(([icon, word]) => `${icon} ${WORDS[word]}`)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// The phases the frame draws, in the order a run passes them.
|
|
75
|
+
function phase_legend(icons: ReadonlySet<string>): Array<string> {
|
|
76
|
+
return run_board_phase.PHASES.filter((phase) => icons.has(PHASE_ICONS[phase])).map(
|
|
77
|
+
(phase) => `${PHASE_ICONS[phase]} ${WORDS[PHASE_WORDS[phase]]}`,
|
|
47
78
|
)
|
|
48
79
|
}
|
|
49
80
|
|
|
@@ -54,35 +85,72 @@ function kinds_of(rows: ReadonlyArray<BoardRow>): Array<FiledKind> {
|
|
|
54
85
|
return run_board_kind.KIND_ORDER.filter((kind) => drawn.has(kind))
|
|
55
86
|
}
|
|
56
87
|
|
|
88
|
+
// The wait icon a row draws: the one a waiting row leads with, which names its blockers itself, else
|
|
89
|
+
// 🔗 where blockers follow the title of a row that waits on no condition of its own.
|
|
90
|
+
function wait_icon(row: BoardRow): string | undefined {
|
|
91
|
+
return row.reason?.icon ?? (row.waits.length > 0 ? WAITS_ICON : undefined)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// What the waiting rows the frame draws lead with (joshuafolkken/kit#4288), in one fixed order.
|
|
57
95
|
function waits_legend(rows: ReadonlyArray<BoardRow>): Array<string> {
|
|
58
|
-
|
|
96
|
+
const drawn = new Set(rows.map((row) => wait_icon(row)))
|
|
97
|
+
|
|
98
|
+
return WAIT_WORDS.filter(([icon]) => drawn.has(icon)).map(
|
|
99
|
+
([icon, word]) => `${icon} ${WORDS[word]}`,
|
|
100
|
+
)
|
|
59
101
|
}
|
|
60
102
|
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
103
|
+
// ✚ is named only while a row the run filed draws it (joshuafolkken/kit#4099).
|
|
104
|
+
function filed_legend(
|
|
105
|
+
rows: ReadonlyArray<BoardRow>,
|
|
106
|
+
notes: ReadonlyArray<BoardNote>,
|
|
107
|
+
): Array<string> {
|
|
108
|
+
const filed = run_board_notes.filed_numbers(notes)
|
|
109
|
+
|
|
110
|
+
return rows.some((row) => filed.has(row.number)) ? [`${FILED_RUN_MARK} ${WORDS.filed_run}`] : []
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// What is in progress, then what has settled.
|
|
114
|
+
function states_line(drawn: LegendDrawn): Array<string> {
|
|
115
|
+
return [
|
|
116
|
+
...state_legend(PROGRESS_STATES, drawn.leads),
|
|
117
|
+
...phase_legend(drawn.icons),
|
|
118
|
+
...new Set(drawn.named),
|
|
119
|
+
...state_legend(SETTLED_STATES, drawn.leads),
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// The kinds, then the rest. The header's gauges and marks read by their place, so the legend leaves
|
|
124
|
+
// them.
|
|
125
|
+
function others_line(
|
|
67
126
|
rows: ReadonlyArray<BoardRow>,
|
|
68
|
-
drawn:
|
|
127
|
+
drawn: LegendDrawn,
|
|
69
128
|
notes: ReadonlyArray<BoardNote>,
|
|
70
|
-
named: ReadonlyArray<string> = [],
|
|
71
129
|
): Array<string> {
|
|
72
130
|
const kinds = kinds_of(rows)
|
|
73
131
|
const kind_icons = kinds.map((kind) => FILED_KIND_ICONS[kind])
|
|
74
|
-
const
|
|
132
|
+
const named = new Set([...drawn.leads, ...kind_icons])
|
|
75
133
|
const kind_named = kinds.map((kind) => `${FILED_KIND_ICONS[kind]} ${WORDS[KIND_WORDS[kind]]}`)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
...state_legend(drawn),
|
|
134
|
+
|
|
135
|
+
return [
|
|
79
136
|
...kind_named,
|
|
80
137
|
...waits_legend(rows),
|
|
81
|
-
...
|
|
138
|
+
...filed_legend(rows, notes),
|
|
139
|
+
...drawn.held,
|
|
140
|
+
...drawn.checks,
|
|
141
|
+
...run_board_render_notes.notes_legend(notes, named, rows),
|
|
82
142
|
]
|
|
83
|
-
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// One line, drawn only when it names something.
|
|
146
|
+
function legend_of(
|
|
147
|
+
rows: ReadonlyArray<BoardRow>,
|
|
148
|
+
drawn: LegendDrawn,
|
|
149
|
+
notes: ReadonlyArray<BoardNote>,
|
|
150
|
+
): Array<string> {
|
|
151
|
+
const entries = [...states_line(drawn), ...others_line(rows, drawn, notes)]
|
|
84
152
|
|
|
85
|
-
return
|
|
153
|
+
return entries.length === 0 ? [] : [styleText('dim', entries.join(GAP))]
|
|
86
154
|
}
|
|
87
155
|
|
|
88
156
|
const run_board_render_legend = {
|
|
@@ -90,3 +158,4 @@ const run_board_render_legend = {
|
|
|
90
158
|
}
|
|
91
159
|
|
|
92
160
|
export { run_board_render_legend }
|
|
161
|
+
export type { LegendDrawn }
|