@joshuafolkken/kit 1.1471.0 → 1.1784.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/settings.json +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/auto-ok/auto-ok-cli.ts +14 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +6 -7
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +54 -7
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +69 -0
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +137 -18
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +31 -60
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +65 -129
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/gh/git-pr.ts +13 -1
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +39 -14
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +5 -16
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +34 -78
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/expected-effect-lint.ts +60 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +81 -90
- package/scripts/issue/issue-lint-cli.ts +7 -13
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +111 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +19 -25
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +111 -71
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +31 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +112 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon.ts +265 -0
- package/scripts/lint/format.ts +14 -5
- package/scripts/lint/import-graph.ts +279 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +12 -11
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +18 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +6 -15
- package/scripts/report/report-format-reference.ts +4 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +82 -16
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +67 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +90 -3
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +76 -7
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +118 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +240 -61
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -47
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +2 -2
- package/scripts/run/board/run-board-state.ts +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry.ts +9 -4
- package/scripts/run/cut/run-cut-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review.ts +2 -1
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- package/scripts/run/ship/run-ship.ts +30 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +3 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +15 -0
- package/scripts/split/split-measure.ts +65 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +55 -6
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +54 -21
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +71 -137
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +10 -1
- package/scripts/time-runtime/time-shell.ts +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +10 -3
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
type FrameParts,
|
|
4
|
-
type NotesPart,
|
|
5
|
-
type PlanLine,
|
|
6
|
-
type PlanSection,
|
|
7
|
-
type TerminalSize,
|
|
8
|
-
} from './run-board-fit'
|
|
1
|
+
import type { FrameParts, PlanLine, PlanSection, TerminalSize, YieldStage } from './run-board-fit'
|
|
2
|
+
import { run_board_fold, type FrameBounds } from './run-board-fold'
|
|
9
3
|
import { run_board_fresh } from './run-board-fresh'
|
|
10
4
|
import { run_board_header, type BoardHeader } from './run-board-header'
|
|
11
5
|
import { run_board_labels } from './run-board-labels'
|
|
@@ -13,49 +7,49 @@ import {
|
|
|
13
7
|
run_board_layout,
|
|
14
8
|
type BoardLayout,
|
|
15
9
|
type BoardRow,
|
|
16
|
-
type
|
|
10
|
+
type QueuedEntry,
|
|
17
11
|
} from './run-board-layout'
|
|
18
12
|
import type { Link } from './run-board-link'
|
|
19
|
-
import type
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
13
|
+
import { run_board_notes, type BoardNote } from './run-board-notes'
|
|
14
|
+
import { run_board_priority } from './run-board-priority'
|
|
15
|
+
import { run_board_render_condition } from './run-board-render-condition'
|
|
16
|
+
import { run_board_render_foot } from './run-board-render-foot'
|
|
17
|
+
import { run_board_render_icon } from './run-board-render-icon'
|
|
18
|
+
import { run_board_render_lanes, type LaneCells } from './run-board-render-lanes'
|
|
19
|
+
import { run_board_render_lead } from './run-board-render-lead'
|
|
22
20
|
import { run_board_render_notes } from './run-board-render-notes'
|
|
23
|
-
import {
|
|
21
|
+
import { run_board_render_processes } from './run-board-render-processes'
|
|
22
|
+
import { run_board_render_section } from './run-board-render-section'
|
|
24
23
|
import { run_board_render_tail } from './run-board-render-tail'
|
|
25
|
-
import {
|
|
26
|
-
import { run_board_render_title } from './run-board-render-title'
|
|
24
|
+
import { run_board_render_time } from './run-board-render-time'
|
|
25
|
+
import { run_board_render_title, type RowCut, type RowFit } from './run-board-render-title'
|
|
27
26
|
import { run_board_row_yield } from './run-board-row-yield'
|
|
28
27
|
import type { Thanks } from './run-board-thanks-csv'
|
|
29
28
|
|
|
30
29
|
// The whole `run:board` screen as lines — pure, so what a person sees is tested apart from the
|
|
31
|
-
// terminal. The header says where the run is; the
|
|
32
|
-
//
|
|
33
|
-
// is a rule rather than a heading, and the legend
|
|
34
|
-
//
|
|
35
|
-
// reads the same on every board.
|
|
36
|
-
|
|
37
|
-
const { FILED_KIND_ICONS, KIND_BLANK,
|
|
38
|
-
|
|
39
|
-
const {
|
|
40
|
-
const { clock_of, elapsed_of } = run_board_labels
|
|
30
|
+
// terminal. The header says where the run is; under it the run's own rows, then the ones waiting on a
|
|
31
|
+
// person's decision, then the findings — what the run would otherwise have said in no chat anyone
|
|
32
|
+
// reads — and the plan's rest in its order. A section is a rule rather than a heading, and the legend
|
|
33
|
+
// at the foot names the symbols, so a row carries only what differs between rows. Every word is
|
|
34
|
+
// English whatever the session language: one set of words reads the same on every board.
|
|
35
|
+
|
|
36
|
+
const { FILED_KIND_ICONS, KIND_BLANK, STATE_ICONS, WAITS_ICON, WORDS, clock_of } = run_board_labels
|
|
37
|
+
const { time_of, time_width } = run_board_render_time
|
|
38
|
+
const { state_icon } = run_board_render_icon
|
|
41
39
|
const { NOTE_LIMIT } = run_board_render_notes
|
|
42
|
-
const {
|
|
43
|
-
const {
|
|
40
|
+
const { lane_cells_of, lanes_section, number_text } = run_board_render_lanes
|
|
41
|
+
const { LANE_INDENT, lead_of: lane_lead_of, running_fresh } = run_board_render_lead
|
|
42
|
+
const { ELLIPSIS, TITLE_LIMIT, WHOLE, fitted, reason_text, row_overrun, title_of } =
|
|
43
|
+
run_board_render_title
|
|
44
44
|
const { padded } = run_board_fresh
|
|
45
|
+
const { condition_of, waits_of } = run_board_render_condition
|
|
46
|
+
const { legend_lines, resume_lines, thanks_part } = run_board_render_foot
|
|
47
|
+
const { ROW_INDENT, done_section, keyed, plan_section } = run_board_render_section
|
|
45
48
|
const GAP = ' '
|
|
46
|
-
const
|
|
47
|
-
const BRANCH =
|
|
48
|
-
const LAST_BRANCH =
|
|
49
|
-
const
|
|
50
|
-
const RULE_LEAD = `${RULE}${RULE}`
|
|
51
|
-
const RULE_WIDTH = 50
|
|
52
|
-
|
|
53
|
-
// The live terminal a frame is kept within, and the footer the frame ends on and gives way first;
|
|
54
|
-
// neither for a frame that is not redrawn in place.
|
|
55
|
-
interface FrameBounds {
|
|
56
|
-
size?: TerminalSize | undefined
|
|
57
|
-
footer?: ReadonlyArray<string> | undefined
|
|
58
|
-
}
|
|
49
|
+
const FILED_LEAD = `${run_board_labels.FILED_RUN_MARK} `
|
|
50
|
+
const BRANCH = `${ROW_INDENT} ├ `
|
|
51
|
+
const LAST_BRANCH = `${ROW_INDENT} └ `
|
|
52
|
+
const { bounded } = run_board_fold
|
|
59
53
|
|
|
60
54
|
interface BoardView extends FrameBounds {
|
|
61
55
|
header: BoardHeader
|
|
@@ -67,18 +61,32 @@ interface BoardView extends FrameBounds {
|
|
|
67
61
|
link?: Link | undefined
|
|
68
62
|
}
|
|
69
63
|
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
64
|
+
// When the reads off this machine last failed, and why.
|
|
65
|
+
type ReadFailure = Pick<BoardHeader, 'read_error' | 'read_failed_ms'>
|
|
66
|
+
|
|
67
|
+
// What every row of one frame is drawn with: the header, how wide the time column is, so a
|
|
68
|
+
// `2°05′30″` and a `42″` end in the same column, and the lane cells after a row's lead where its
|
|
69
|
+
// section draws them.
|
|
73
70
|
interface RowFrame {
|
|
74
71
|
header: BoardHeader
|
|
75
72
|
time_width: number
|
|
76
|
-
|
|
77
|
-
slot_width: number
|
|
73
|
+
cells?: LaneCells | undefined
|
|
78
74
|
// The columns a row's title is cut to: the title column's, or fewer where a row gives some up.
|
|
79
75
|
title_limit: number
|
|
76
|
+
// The columns cut off the end of a row's reason, where its title alone could not give up enough.
|
|
77
|
+
reason_cut: number
|
|
80
78
|
// The pane's width where the frame is kept within one.
|
|
81
79
|
columns: number | undefined
|
|
80
|
+
// The issues the run filed, whose rows lead their title with ✚.
|
|
81
|
+
filed: ReadonlySet<number>
|
|
82
|
+
// The columns a lane row that draws a tail gives up with every other such row.
|
|
83
|
+
shared?: number | undefined
|
|
84
|
+
// The queued, waiting and done sections draw a condition column after the icon
|
|
85
|
+
// (joshuafolkken/kit#4288, #4292).
|
|
86
|
+
is_conditioned?: boolean | undefined
|
|
87
|
+
// The lanes section draws each row's lead — progress, phase and times — before its cells
|
|
88
|
+
// (`run-board-render-lead.ts`).
|
|
89
|
+
is_lane_row?: boolean | undefined
|
|
82
90
|
}
|
|
83
91
|
|
|
84
92
|
// A row drawn before the plan is read has no title yet, and says so.
|
|
@@ -88,302 +96,230 @@ function row_title(row: BoardRow, header: BoardHeader): string | undefined {
|
|
|
88
96
|
return ELLIPSIS
|
|
89
97
|
}
|
|
90
98
|
|
|
91
|
-
// A
|
|
92
|
-
//
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// How long a row has run: a running one until now, a settled one its whole span.
|
|
98
|
-
function elapsed_ms(row: BoardRow, now_ms: number): number | undefined {
|
|
99
|
-
const started = row.status?.started_ms
|
|
100
|
-
const ended = end_of(row, now_ms)
|
|
101
|
-
|
|
102
|
-
if (started === undefined || ended === undefined) return undefined
|
|
103
|
-
|
|
104
|
-
return ended - started
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function time_of(row: BoardRow, now_ms: number): string | undefined {
|
|
108
|
-
const elapsed = elapsed_ms(row, now_ms)
|
|
109
|
-
|
|
110
|
-
return elapsed === undefined ? undefined : elapsed_of(elapsed)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function waits_of(row: BoardRow, header: BoardHeader): string | undefined {
|
|
114
|
-
if (row.waits.length === 0) return undefined
|
|
99
|
+
// A row the run filed leads its title with ✚ (joshuafolkken/kit#4099), cut by as many columns, so every
|
|
100
|
+
// column after it stays where an unmarked row has it.
|
|
101
|
+
function title_text(row: BoardRow, frame: RowFrame): string {
|
|
102
|
+
const title = row_title(row, frame.header)
|
|
115
103
|
|
|
116
|
-
|
|
117
|
-
}
|
|
104
|
+
if (!frame.filed.has(row.number)) return title_of(title, frame.title_limit)
|
|
118
105
|
|
|
119
|
-
|
|
120
|
-
// start and its phase; a settled row's are long past.
|
|
121
|
-
function running_fresh(
|
|
122
|
-
row: BoardRow,
|
|
123
|
-
text: string,
|
|
124
|
-
at_ms: number | undefined,
|
|
125
|
-
header: BoardHeader,
|
|
126
|
-
): string {
|
|
127
|
-
return row.state === 'running' ? run_board_fresh.since(text, at_ms, header) : text
|
|
106
|
+
return `${FILED_LEAD}${title_of(title, frame.title_limit - FILED_LEAD.length)}`
|
|
128
107
|
}
|
|
129
108
|
|
|
130
109
|
// The title padded to the title column and the time to the time column — blanks where a row has none —
|
|
131
|
-
// so the times form one column, and what follows them starts in one column on every row
|
|
110
|
+
// so the times form one column, and what follows them starts in one column on every row but a waiting
|
|
111
|
+
// one, whose title is not padded. A lane row draws its time in its lead.
|
|
132
112
|
function timed_parts(row: BoardRow, frame: RowFrame): Array<string> {
|
|
113
|
+
const title = title_text(row, frame)
|
|
114
|
+
|
|
115
|
+
if (row.state === 'waiting') return [title]
|
|
116
|
+
if (frame.is_lane_row === true) return [title.padEnd(frame.title_limit)]
|
|
117
|
+
|
|
133
118
|
const time = time_of(row, frame.header.now_ms) ?? ''
|
|
134
|
-
const title = title_of(row_title(row, frame.header), frame.title_limit)
|
|
135
119
|
const fresh = running_fresh(row, time, row.status?.started_ms, frame.header)
|
|
136
120
|
|
|
137
121
|
return [title.padEnd(frame.title_limit), padded(time, frame.time_width, fresh)]
|
|
138
122
|
}
|
|
139
123
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
function state_icon(row: BoardRow): string {
|
|
143
|
-
const current = row.state === 'running' ? row.status?.track?.at(-1) : undefined
|
|
144
|
-
|
|
145
|
-
return current === undefined ? STATE_ICONS[row.state] : PHASE_ICONS[current]
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// A running row turns the spinner in the first column of its indent where the header has one, so its
|
|
149
|
-
// title starts in the same column as every other row's.
|
|
150
|
-
function indent_of(prefix: string, row: BoardRow, header: BoardHeader): string {
|
|
151
|
-
if (row.state !== 'running' || header.spinner === undefined) return prefix
|
|
152
|
-
|
|
153
|
-
return `${header.spinner}${prefix.slice(1)}`
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// A row's usage column as drawn: a settled row's finish time emphasized while it is fresh.
|
|
157
|
-
function slot_text(row: BoardRow, usage: UsageSlot, header: BoardHeader): string | undefined {
|
|
158
|
-
const slot = slot_of(row, usage, header.now_ms)
|
|
159
|
-
const ended = row.state === 'running' ? undefined : row.status?.ended_ms
|
|
160
|
-
|
|
161
|
-
return slot === undefined ? slot : run_board_fresh.since(slot, ended, header)
|
|
124
|
+
function joined(parts: ReadonlyArray<string | undefined>): string {
|
|
125
|
+
return parts.filter((part) => part !== undefined && part !== '').join(GAP)
|
|
162
126
|
}
|
|
163
127
|
|
|
164
|
-
// A row's
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
function cell_text(row: BoardRow, frame: RowFrame): string | undefined {
|
|
168
|
-
const { usage, slot_width } = frame
|
|
128
|
+
// A lane row's lead, else the icon and, in a section that draws one, the condition column after it.
|
|
129
|
+
function icon_text(row: BoardRow, frame: RowFrame): string {
|
|
130
|
+
const { header } = frame
|
|
169
131
|
|
|
170
|
-
if (
|
|
171
|
-
if (row.status === undefined) return ' '.repeat(slot_width)
|
|
132
|
+
if (frame.is_lane_row === true) return lane_lead_of(row, header)
|
|
172
133
|
|
|
173
|
-
|
|
174
|
-
}
|
|
134
|
+
const icon = running_fresh(row, state_icon(row), row.status?.phase_ms, header)
|
|
175
135
|
|
|
176
|
-
|
|
177
|
-
return parts.filter((part) => part !== undefined && part !== '').join(GAP)
|
|
136
|
+
return frame.is_conditioned === true ? `${icon} ${condition_of(row, header)}` : icon
|
|
178
137
|
}
|
|
179
138
|
|
|
180
|
-
// The release kind's
|
|
181
|
-
// ends at its
|
|
182
|
-
|
|
139
|
+
// The priority and the release kind's icons between the number — and its lane cells, where drawn —
|
|
140
|
+
// and the title, one space either side; a row with no title ends at its kind, so what follows keeps
|
|
141
|
+
// its usual gap.
|
|
142
|
+
function lead_of(row: BoardRow, frame: RowFrame, title: string): string {
|
|
143
|
+
const { header } = frame
|
|
183
144
|
const kind = row.kind === undefined ? KIND_BLANK : FILED_KIND_ICONS[row.kind]
|
|
184
|
-
const
|
|
185
|
-
const lead = `${
|
|
145
|
+
const number = number_text(row, frame.cells, header.link)
|
|
146
|
+
const lead = `${icon_text(row, frame)} ${number} ${run_board_priority.cell_of(row)} ${kind}`
|
|
186
147
|
|
|
187
148
|
return title === '' ? lead : `${lead} ${title}`
|
|
188
149
|
}
|
|
189
150
|
|
|
190
|
-
// A row up to its
|
|
151
|
+
// A row up to its tail — the columns that stay where they are on every row. A waiting row has no time
|
|
152
|
+
// to line up, so it ends at its title and what it waits on follows two blanks on.
|
|
191
153
|
function head_text(row: BoardRow, frame: RowFrame): string {
|
|
192
154
|
const [title = '', time] = timed_parts(row, frame)
|
|
155
|
+
const lead = lead_of(row, frame, title)
|
|
156
|
+
|
|
157
|
+
if (row.state === 'waiting') return lead
|
|
193
158
|
|
|
194
|
-
return joined([
|
|
159
|
+
return joined([lead, time])
|
|
195
160
|
}
|
|
196
161
|
|
|
197
|
-
// Every row carries its state's icon,
|
|
162
|
+
// Every row carries its state's icon, or the icon of what it waits on; a running row ends on its tail
|
|
198
163
|
// (`run-board-render-tail.ts`), and a row with nothing after its padded columns ends where its text does.
|
|
199
164
|
function row_text(row: BoardRow, frame: RowFrame): string {
|
|
200
165
|
const { header } = frame
|
|
201
166
|
const tail = run_board_render_tail.tail_of(row, header)
|
|
202
|
-
const notes = [waits_of(row, header), reason_text(row,
|
|
167
|
+
const notes = [waits_of(row, header, frame.is_conditioned), reason_text(row, frame.reason_cut)]
|
|
203
168
|
|
|
204
169
|
return joined([head_text(row, frame), ...tail, ...notes]).trimEnd()
|
|
205
170
|
}
|
|
206
171
|
|
|
172
|
+
// A row drawn whole or cut, after its indent.
|
|
173
|
+
function row_draw(indent: string, row: BoardRow, frame: RowFrame): (cut: RowCut) => string {
|
|
174
|
+
return (cut) => `${indent}${row_text(row, { ...frame, ...cut })}`
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// A row drawn with lane cells keeps its head on one line, its title giving up their columns where the
|
|
178
|
+
// pane is narrow. A row that draws a tail keeps its whole line, giving up the columns its section's
|
|
179
|
+
// rows give up together (joshuafolkken/kit#4226).
|
|
180
|
+
function row_fit(indent: string, row: BoardRow, frame: RowFrame): RowFit {
|
|
181
|
+
const is_line_kept = run_board_render_tail.tail_of(row, frame.header).length > 0
|
|
182
|
+
|
|
183
|
+
return {
|
|
184
|
+
is_line_kept,
|
|
185
|
+
lead: frame.filed.has(row.number) ? FILED_LEAD.length : 0,
|
|
186
|
+
head: (cut) => `${indent}${head_text(row, { ...frame, ...cut })}`,
|
|
187
|
+
is_head_kept: frame.cells !== undefined,
|
|
188
|
+
shared: is_line_kept ? frame.shared : undefined,
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
207
192
|
// A plan line that draws one issue row, and one that draws none — a blank, a rule, an epic's own line.
|
|
208
|
-
function row_line(
|
|
209
|
-
const
|
|
210
|
-
const text = fitted(
|
|
211
|
-
row,
|
|
212
|
-
frame.columns,
|
|
213
|
-
(title_limit) => `${indent}${row_text(row, { ...frame, title_limit })}`,
|
|
214
|
-
)
|
|
193
|
+
function row_line(indent: string, row: BoardRow, frame: RowFrame, stage?: YieldStage): PlanLine {
|
|
194
|
+
const fit = row_fit(indent, row, frame)
|
|
195
|
+
const text = fitted(row, frame.columns, row_draw(indent, row, frame), fit)
|
|
215
196
|
|
|
216
|
-
return { text, row: run_board_row_yield.yield_of(row) }
|
|
197
|
+
return { text, row: run_board_row_yield.yield_of(row, stage) }
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// The most columns a lane row that draws a tail runs past the pane, which every such row gives up, so
|
|
201
|
+
// their titles end in one column and the tails after them start in one.
|
|
202
|
+
function shared_overrun(rows: ReadonlyArray<BoardRow>, frame: RowFrame): number {
|
|
203
|
+
const overruns = rows.map((row) => {
|
|
204
|
+
const fit = row_fit(LANE_INDENT, row, frame)
|
|
205
|
+
|
|
206
|
+
return fit.is_line_kept === true
|
|
207
|
+
? row_overrun(row, frame.columns, row_draw(LANE_INDENT, row, frame), fit)
|
|
208
|
+
: 0
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
return Math.max(0, ...overruns)
|
|
217
212
|
}
|
|
218
213
|
|
|
219
214
|
function bare(text: string): PlanLine {
|
|
220
215
|
return { text, row: undefined }
|
|
221
216
|
}
|
|
222
217
|
|
|
223
|
-
|
|
218
|
+
// A running child turns the spinner in the first column of its branch where the header has one, so its
|
|
219
|
+
// tree says which child is moving.
|
|
220
|
+
function branch_of(prefix: string, row: BoardRow, header: BoardHeader): string {
|
|
221
|
+
if (row.state !== 'running' || header.spinner === undefined) return prefix
|
|
222
|
+
|
|
223
|
+
return `${header.spinner}${prefix.slice(1)}`
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function epic_lines(
|
|
227
|
+
entry: Extract<QueuedEntry, { kind: 'epic' }>,
|
|
228
|
+
frame: RowFrame,
|
|
229
|
+
): Array<PlanLine> {
|
|
224
230
|
const last = entry.rows.length - 1
|
|
225
231
|
const children = entry.rows.map((row, index) =>
|
|
226
|
-
row_line(index === last ? LAST_BRANCH : BRANCH, row, frame),
|
|
232
|
+
row_line(branch_of(index === last ? LAST_BRANCH : BRANCH, row, frame.header), row, frame),
|
|
227
233
|
)
|
|
228
234
|
const title = title_of(entry.title)
|
|
229
235
|
const number = frame.header.link(String(entry.epic))
|
|
230
236
|
const epic = title === '' ? number : `${number}${GAP}${title}`
|
|
231
237
|
|
|
232
|
-
return [bare(`${
|
|
238
|
+
return [bare(`${ROW_INDENT}📁 ${epic}`), ...children]
|
|
233
239
|
}
|
|
234
240
|
|
|
235
|
-
function entry_lines(entry:
|
|
236
|
-
if (entry.kind === 'row') return [row_line(
|
|
241
|
+
function entry_lines(entry: QueuedEntry, frame: RowFrame): Array<PlanLine> {
|
|
242
|
+
if (entry.kind === 'row') return [row_line(ROW_INDENT, entry.row, frame)]
|
|
237
243
|
|
|
238
244
|
return epic_lines(entry, frame)
|
|
239
245
|
}
|
|
240
246
|
|
|
241
|
-
function rule_of(label: string): string {
|
|
242
|
-
return `${RULE_LEAD} ${label} `.padEnd(RULE_WIDTH, RULE)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
function heading_lines(heading: string | undefined): Array<string> {
|
|
246
|
-
return heading === undefined ? [''] : ['', rule_of(heading)]
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
function plan_section(
|
|
250
|
-
heading: string | undefined,
|
|
251
|
-
lines: ReadonlyArray<PlanLine>,
|
|
252
|
-
): Array<PlanSection> {
|
|
253
|
-
if (lines.length === 0) return []
|
|
254
|
-
|
|
255
|
-
return [{ head: heading_lines(heading), lines }]
|
|
256
|
-
}
|
|
257
|
-
|
|
258
247
|
function rows_section(
|
|
259
248
|
heading: string | undefined,
|
|
260
249
|
rows: ReadonlyArray<BoardRow>,
|
|
261
250
|
frame: RowFrame,
|
|
251
|
+
stage?: YieldStage,
|
|
262
252
|
): Array<PlanSection> {
|
|
263
253
|
return plan_section(
|
|
264
254
|
heading,
|
|
265
|
-
rows.map((row) => row_line(
|
|
266
|
-
)
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// The time column's width: the widest time any active row draws in this frame.
|
|
270
|
-
function time_width(header: BoardHeader): number {
|
|
271
|
-
const times = (header.layout?.active ?? []).map((row) => time_of(row, header.now_ms) ?? '')
|
|
272
|
-
|
|
273
|
-
return Math.max(0, ...times.map((time) => time.length))
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Whether every row's usage column still fits one terminal line — measured as the deepest, an epic's
|
|
277
|
-
// child — where a frame is kept within a terminal. The tail and the notes after it are left out: a
|
|
278
|
-
// row's reason makes room for itself, so one long reason would otherwise take the column off every row.
|
|
279
|
-
function is_usage_fitting(
|
|
280
|
-
rows: ReadonlyArray<BoardRow>,
|
|
281
|
-
frame: RowFrame,
|
|
282
|
-
size: TerminalSize | undefined,
|
|
283
|
-
): boolean {
|
|
284
|
-
if (size === undefined) return true
|
|
285
|
-
|
|
286
|
-
return rows.every(
|
|
287
|
-
(row) => run_board_fit.height_of(`${BRANCH}${head_text(row, frame)}`, size.columns) === 1,
|
|
255
|
+
rows.map((row) => row_line(ROW_INDENT, row, frame, stage)),
|
|
288
256
|
)
|
|
289
257
|
}
|
|
290
258
|
|
|
291
|
-
// The usage column is drawn on every row or on none: a pane too narrow for it on any row draws it on
|
|
292
|
-
// none — a finish time with it.
|
|
293
259
|
function frame_of(
|
|
294
260
|
header: BoardHeader,
|
|
295
|
-
|
|
261
|
+
notes: ReadonlyArray<BoardNote>,
|
|
296
262
|
size: TerminalSize | undefined,
|
|
297
263
|
): RowFrame {
|
|
298
|
-
|
|
299
|
-
const usage = header.usages === undefined ? undefined : usage_slot(rows, header.usages)
|
|
300
|
-
const frame = {
|
|
264
|
+
return {
|
|
301
265
|
header,
|
|
302
266
|
time_width: time_width(header),
|
|
303
|
-
|
|
304
|
-
slot_width: usage === undefined ? 0 : column_width(rows, usage, header.now_ms),
|
|
305
|
-
title_limit: TITLE_LIMIT,
|
|
267
|
+
...WHOLE,
|
|
306
268
|
columns: size?.columns,
|
|
269
|
+
filed: run_board_notes.filed_numbers(notes),
|
|
307
270
|
}
|
|
308
|
-
|
|
309
|
-
return is_usage_fitting(rows, frame, size) ? frame : { ...frame, usage: undefined }
|
|
310
271
|
}
|
|
311
272
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
const waves = layout.waves.flatMap((wave, index) =>
|
|
319
|
-
plan_section(
|
|
320
|
-
String(index + 1),
|
|
321
|
-
wave.flatMap((entry) => entry_lines(entry, frame)),
|
|
322
|
-
),
|
|
273
|
+
// The rows not yet started under one heading, in the order they are offered: a running batch starts
|
|
274
|
+
// each once a lane and its paths are free, never wave by wave (joshuafolkken/kit#4137).
|
|
275
|
+
function queued_section(layout: BoardLayout, frame: RowFrame): Array<PlanSection> {
|
|
276
|
+
return plan_section(
|
|
277
|
+
`${STATE_ICONS.waiting} ${WORDS.queued}`,
|
|
278
|
+
layout.queued.flatMap((entry) => entry_lines(entry, { ...frame, is_conditioned: true })),
|
|
323
279
|
)
|
|
324
|
-
|
|
325
|
-
return [
|
|
326
|
-
...rows_section(undefined, layout.active, frame),
|
|
327
|
-
...waves,
|
|
328
|
-
...rows_section(STATE_ICONS.human, layout.people, frame),
|
|
329
|
-
...rows_section(WAITS_ICON, layout.unreached, frame),
|
|
330
|
-
]
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// The findings under a rule, led by 📌 where a legend names it and by its word where none does, and how
|
|
334
|
-
// many more there are, so the section never pushes the plan off the screen.
|
|
335
|
-
function notes_part(notes: ReadonlyArray<BoardNote>, header: BoardHeader): NotesPart {
|
|
336
|
-
const has_legend = header.layout !== undefined
|
|
337
|
-
const lines = run_board_render_notes.note_lines(notes, has_legend, header.link)
|
|
338
|
-
const label = has_legend ? NOTES_ICON : WORDS.notes
|
|
339
|
-
|
|
340
|
-
return { head: heading_lines(label), lines, hidden: notes.length - lines.length }
|
|
341
280
|
}
|
|
342
281
|
|
|
343
|
-
// The
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
const checks = is_checks ? run_board_render_checks.LEGEND : []
|
|
282
|
+
// The rows above the findings: the run's own, the earlier run's lanes still holding a place, then the
|
|
283
|
+
// ones waiting on a person's decision — a child parked on one and an untouched plan row alike
|
|
284
|
+
// (joshuafolkken/kit#4099).
|
|
285
|
+
function active_sections(layout: BoardLayout, frame: RowFrame): Array<PlanSection> {
|
|
286
|
+
const people = run_board_layout.people_of(layout)
|
|
287
|
+
const lead = run_board_layout.lanes_drawn(layout)
|
|
288
|
+
const decision = `${STATE_ICONS.human} ${WORDS.decision}`
|
|
289
|
+
const cells = lane_cells_of(frame.header, lead)
|
|
290
|
+
const lane_frame = { ...frame, cells, is_lane_row: true }
|
|
291
|
+
const shared = shared_overrun(lead, lane_frame)
|
|
292
|
+
const lanes = lanes_section(
|
|
293
|
+
lead.map((row) => row_line(LANE_INDENT, row, { ...lane_frame, shared })),
|
|
294
|
+
cells,
|
|
295
|
+
)
|
|
358
296
|
|
|
359
|
-
return [...
|
|
297
|
+
return [...lanes, ...rows_section(decision, people, frame)]
|
|
360
298
|
}
|
|
361
299
|
|
|
362
|
-
//
|
|
363
|
-
function
|
|
300
|
+
// The plan's rest under the findings, the 🔗 waiting rows giving way before them.
|
|
301
|
+
function plan_parts(
|
|
302
|
+
header: BoardHeader,
|
|
303
|
+
notes: ReadonlyArray<BoardNote>,
|
|
304
|
+
size: TerminalSize | undefined,
|
|
305
|
+
): Pick<FrameParts, 'below' | 'plan'> {
|
|
364
306
|
const { layout } = header
|
|
365
307
|
|
|
366
|
-
if (layout === undefined) return []
|
|
367
|
-
|
|
368
|
-
const rows = run_board_layout.rows_of(layout)
|
|
369
|
-
const drawn = new Set(rows.map((row) => state_icon(row)))
|
|
370
|
-
const named = activity_named(header, rows)
|
|
308
|
+
if (layout === undefined) return { plan: [] }
|
|
371
309
|
|
|
372
|
-
|
|
373
|
-
}
|
|
310
|
+
const frame = frame_of(header, notes, size)
|
|
311
|
+
const conditioned = { ...frame, is_conditioned: true }
|
|
312
|
+
const done = layout.active.filter((row) => run_board_layout.is_finished(row.state))
|
|
313
|
+
const waiting = `${WAITS_ICON} ${WORDS.waiting}`
|
|
374
314
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
function bounded(parts: FrameParts, bounds: FrameBounds): Array<string> {
|
|
384
|
-
const { size } = bounds
|
|
385
|
-
|
|
386
|
-
return size === undefined ? run_board_fit.whole(parts) : run_board_fit.fit(parts, size)
|
|
315
|
+
return {
|
|
316
|
+
plan: active_sections(layout, frame),
|
|
317
|
+
below: [
|
|
318
|
+
...keyed('queued', queued_section(layout, frame)),
|
|
319
|
+
...keyed('waiting', rows_section(waiting, layout.unreached, conditioned, 'waiting')),
|
|
320
|
+
...done_section(done, (row) => row_line(ROW_INDENT, row, conditioned)),
|
|
321
|
+
],
|
|
322
|
+
}
|
|
387
323
|
}
|
|
388
324
|
|
|
389
325
|
function render(view: BoardView): Array<string> {
|
|
@@ -391,9 +327,10 @@ function render(view: BoardView): Array<string> {
|
|
|
391
327
|
const above = [...run_board_header.header_lines(header), ...resume_lines(view.resume)]
|
|
392
328
|
const parts = {
|
|
393
329
|
above,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
330
|
+
...plan_parts(header, notes, view.size),
|
|
331
|
+
processes: run_board_render_processes.processes_part(header),
|
|
332
|
+
notes: run_board_render_notes.notes_part(notes, { ...header, columns: view.size?.columns }),
|
|
333
|
+
thanks: thanks_part(view.thanks, view.link, view.size?.columns),
|
|
397
334
|
legend: legend_lines(header, notes),
|
|
398
335
|
footer: view.footer ?? [],
|
|
399
336
|
}
|
|
@@ -401,8 +338,18 @@ function render(view: BoardView): Array<string> {
|
|
|
401
338
|
return bounded(parts, view)
|
|
402
339
|
}
|
|
403
340
|
|
|
404
|
-
|
|
405
|
-
|
|
341
|
+
// No run read here — or the reads failed, which the line says, and why, in place of `no run`: a read
|
|
342
|
+
// that failed cannot tell whether a run is there.
|
|
343
|
+
function render_no_run(
|
|
344
|
+
now_ms: number,
|
|
345
|
+
bounds: FrameBounds = {},
|
|
346
|
+
failure: ReadFailure = {},
|
|
347
|
+
): Array<string> {
|
|
348
|
+
const { read_failed_ms, read_error } = failure
|
|
349
|
+
const warning = run_board_header.warning_of(WORDS.read, read_failed_ms, read_error)
|
|
350
|
+
const said = warning === undefined ? WORDS.no_run : undefined
|
|
351
|
+
const parts = ['■ backlogrun', said, clock_of(now_ms), warning]
|
|
352
|
+
const above = [parts.filter((part) => part !== undefined).join(GAP)]
|
|
406
353
|
const notes = { head: [], lines: [], hidden: 0 }
|
|
407
354
|
|
|
408
355
|
return bounded({ above, plan: [], notes, legend: [], footer: bounds.footer ?? [] }, bounds)
|
|
@@ -416,4 +363,4 @@ const run_board_render = {
|
|
|
416
363
|
}
|
|
417
364
|
|
|
418
365
|
export { run_board_render }
|
|
419
|
-
export type { BoardView
|
|
366
|
+
export type { BoardView }
|