@joshuafolkken/kit 1.1240.0 → 1.1373.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 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +52 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +19 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +195 -181
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -187
- package/dist/josh.js +282 -95
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +17 -11
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +3 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +30 -5
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +168 -30
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +53 -51
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +7 -7
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +1 -1
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +24 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +30 -35
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +25 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +6 -7
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +12 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +2 -2
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +1 -1
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-runs.ts +1 -1
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +6 -7
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +54 -36
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +9 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +171 -46
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +26 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +64 -18
- package/scripts/run/run-step.ts +107 -51
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +9 -9
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -279
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +26 -26
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { run_board_labels } from './run-board-labels'
|
|
2
|
+
import { run_board_machine } from './run-board-machine'
|
|
3
|
+
import type { LaneUsage } from './run-board-usage'
|
|
4
|
+
|
|
5
|
+
// A running row's CPU and memory column: `⚡ 20% 🧠1.6G`, each figure green, yellow or red in the
|
|
6
|
+
// header gauges' `GAUGE_SHADES`. **A lane's thresholds are its share of what the running lanes may
|
|
7
|
+
// use together**: the header's yellow threshold (`CPU_YELLOW` / `MEMORY_YELLOW`), never the whole
|
|
8
|
+
// machine — the OS, the IDE and the browser always hold some of it — divided by the running rows the
|
|
9
|
+
// frame draws. A lane turns yellow at three quarters of its share and red past the share itself — on
|
|
10
|
+
// an 18 GB machine at 3.2 and 4.2 GB with three lanes running, 1.2 and 1.6 GB with eight. One lane's
|
|
11
|
+
// share is the header's own threshold, so it takes no color the header gauge would not; a lane that
|
|
12
|
+
// ends widens the others' shares, and their colors may turn back.
|
|
13
|
+
|
|
14
|
+
const { GAUGE_SHADES, HEADER_ICONS, minute_of, painted } = run_board_labels
|
|
15
|
+
const { CPU_YELLOW, MEMORY_YELLOW, percent_text, threshold_alert } = run_board_machine
|
|
16
|
+
const YELLOW_OF_SHARE = 0.75
|
|
17
|
+
const BYTES_PER_KB = 1024
|
|
18
|
+
const BYTES_PER_GB = BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB
|
|
19
|
+
const GB_DECIMALS = 1
|
|
20
|
+
const PART_GAP = ' '
|
|
21
|
+
|
|
22
|
+
type Shade = (typeof GAUGE_SHADES)[keyof typeof GAUGE_SHADES]
|
|
23
|
+
|
|
24
|
+
// A running lane's thresholds, in percent of the machine: its share of `pool_percent` among `running`.
|
|
25
|
+
function lane_thresholds(pool_percent: number, running: number): { yellow: number; red: number } {
|
|
26
|
+
const share = pool_percent / Math.max(1, running)
|
|
27
|
+
|
|
28
|
+
return { yellow: share * YELLOW_OF_SHARE, red: share }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function shade_of(percent: number, pool_percent: number, running: number): Shade {
|
|
32
|
+
return GAUGE_SHADES[threshold_alert(percent, lane_thresholds(pool_percent, running))]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// The first sample has no CPU figure, so a row draws its memory alone until the second.
|
|
36
|
+
function cpu_part(cpu_percent: number | undefined, running: number): string | undefined {
|
|
37
|
+
if (cpu_percent === undefined) return undefined
|
|
38
|
+
|
|
39
|
+
const shade = shade_of(cpu_percent, CPU_YELLOW, running)
|
|
40
|
+
|
|
41
|
+
return `${HEADER_ICONS.cpu}${painted(shade, percent_text(cpu_percent))}`
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function memory_part(usage: LaneUsage, running: number): string {
|
|
45
|
+
const figure = `${(usage.memory_bytes / BYTES_PER_GB).toFixed(GB_DECIMALS)}G`
|
|
46
|
+
const shade = shade_of(usage.memory_percent, MEMORY_YELLOW, running)
|
|
47
|
+
|
|
48
|
+
return `${HEADER_ICONS.memory}${painted(shade, figure)}`
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// `undefined` for a lane no process was found under; `running` is the frame's running rows.
|
|
52
|
+
function text_of(usage: LaneUsage | undefined, running: number): string | undefined {
|
|
53
|
+
if (usage === undefined) return undefined
|
|
54
|
+
|
|
55
|
+
return [cpu_part(usage.cpu_percent, running), memory_part(usage, running)]
|
|
56
|
+
.filter((part) => part !== undefined)
|
|
57
|
+
.join(PART_GAP)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// The day a settled row finished, `10/8 `, where that is not the board's own day.
|
|
61
|
+
function day_of(ended_ms: number, now_ms: number): string {
|
|
62
|
+
const ended = new Date(ended_ms)
|
|
63
|
+
|
|
64
|
+
if (ended.toDateString() === new Date(now_ms).toDateString()) return ''
|
|
65
|
+
|
|
66
|
+
return `${String(ended.getMonth() + 1)}/${String(ended.getDate())} `
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// A settled row's finish time, drawn in the usage column: `🔚 14:05`, or
|
|
70
|
+
// `🔚 10/8 14:05` on another day; `undefined` for a row settled with no recorded end. 🔚 is the
|
|
71
|
+
// header's own end mark — 🏁 is already a done row's state icon.
|
|
72
|
+
function finish_of(ended_ms: number | undefined, now_ms: number): string | undefined {
|
|
73
|
+
if (ended_ms === undefined) return undefined
|
|
74
|
+
|
|
75
|
+
return `${HEADER_ICONS.ended} ${day_of(ended_ms, now_ms)}${minute_of(ended_ms)}`
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const run_board_usage_text = { finish_of, lane_thresholds, text_of }
|
|
79
|
+
|
|
80
|
+
export { run_board_usage_text }
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// Each lane's CPU and memory on its `run:board` row: which lane is loading the machine the header's ⚡
|
|
2
|
+
// and 🧠 show. How the processes are read is `run-board-usage-read.ts`'s; this file turns two readings
|
|
3
|
+
// into each lane's figures.
|
|
4
|
+
//
|
|
5
|
+
// A lane's CPU is its processes' CPU time between two samples as a share of the whole machine — the
|
|
6
|
+
// header's ⚡ scale, so the two read side by side, never Activity Monitor's one-core-is-100% — and its
|
|
7
|
+
// memory the sum of their resident sets. Shared pages are counted once per process, so the figure is
|
|
8
|
+
// larger than what the kernel holds; it compares lanes, which is all the column is for.
|
|
9
|
+
|
|
10
|
+
const PERCENT = 100
|
|
11
|
+
|
|
12
|
+
interface ProcessReading {
|
|
13
|
+
cpu_ms: number
|
|
14
|
+
rss_bytes: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface UsageMark {
|
|
18
|
+
at_ms: number
|
|
19
|
+
processes: ReadonlyMap<number, ProcessReading>
|
|
20
|
+
// Every listed process's lane, `undefined` for one under none — kept so each is looked up once.
|
|
21
|
+
lanes: ReadonlyMap<number, string | undefined>
|
|
22
|
+
// Each process's parent, kept only where the counts fold in the children each reaped — empty on the
|
|
23
|
+
// `ps` path, so nothing is deducted there.
|
|
24
|
+
parents: ReadonlyMap<number, number>
|
|
25
|
+
// The processes whose count was read with its reaped children folded in — one whose own read failed
|
|
26
|
+
// keeps the larger of `ps`'s own time and its last reading, so nothing reaped is taken off it.
|
|
27
|
+
folded: ReadonlySet<number>
|
|
28
|
+
cores: number
|
|
29
|
+
total_bytes: number
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// The CPU share is `undefined` on the first sample, which has nothing to take a difference from.
|
|
33
|
+
interface LaneUsage {
|
|
34
|
+
cpu_percent: number | undefined
|
|
35
|
+
memory_bytes: number
|
|
36
|
+
memory_percent: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Each lane's usage by its issue number.
|
|
40
|
+
type LaneUsages = ReadonlyMap<number, LaneUsage>
|
|
41
|
+
|
|
42
|
+
interface LaneProcess {
|
|
43
|
+
lane: string
|
|
44
|
+
pid: number
|
|
45
|
+
reading: ProcessReading
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface LaneTotal {
|
|
49
|
+
cpu_ms: number
|
|
50
|
+
rss_bytes: number
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const NO_TOTAL: LaneTotal = { cpu_ms: 0, rss_bytes: 0 }
|
|
54
|
+
|
|
55
|
+
function lane_processes(mark: UsageMark): Array<LaneProcess> {
|
|
56
|
+
const processes = [...mark.processes].map(([pid, reading]) => {
|
|
57
|
+
const lane = mark.lanes.get(pid)
|
|
58
|
+
|
|
59
|
+
return lane === undefined ? undefined : { lane, pid, reading }
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
return processes.filter((lane_process) => lane_process !== undefined)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The nearest of a gone process's ancestors still running — the one whose reaped-children time it has
|
|
66
|
+
// landed in. Walked through the last sample's parents, at most once round them. Where a parent between
|
|
67
|
+
// them exited without waiting, launchd reaped the gone process instead and its counted time comes off an
|
|
68
|
+
// ancestor that never received it; which happened cannot be read once both are gone, and taking it off
|
|
69
|
+
// keeps the lane a lower bound where leaving it would count the usual waited-for child twice.
|
|
70
|
+
function live_ancestor(pid: number, before: UsageMark, after: UsageMark): number | undefined {
|
|
71
|
+
let ancestor = before.parents.get(pid)
|
|
72
|
+
|
|
73
|
+
for (let step = 0; step < before.parents.size; step += 1) {
|
|
74
|
+
if (ancestor === undefined || after.processes.has(ancestor)) return ancestor
|
|
75
|
+
ancestor = before.parents.get(ancestor)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return undefined
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// What each running process's count already holds from earlier samples: a counted process that ended
|
|
82
|
+
// and was reaped brings all its time into its ancestor's, so what was counted for it is taken off there
|
|
83
|
+
// — only where that ancestor's count was read with its reaped children folded in.
|
|
84
|
+
function reaped_counted(before: UsageMark, after: UsageMark): Map<number, number> {
|
|
85
|
+
const counted = new Map<number, number>()
|
|
86
|
+
const gone = [...before.processes].filter(([pid]) => !after.processes.has(pid))
|
|
87
|
+
|
|
88
|
+
for (const [pid, reading] of gone) {
|
|
89
|
+
const ancestor = live_ancestor(pid, before, after)
|
|
90
|
+
|
|
91
|
+
if (ancestor !== undefined && after.folded.has(ancestor)) {
|
|
92
|
+
counted.set(ancestor, (counted.get(ancestor) ?? 0) + reading.cpu_ms)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return counted
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// A process that started since the last sample spent all its CPU time inside the interval; a count
|
|
100
|
+
// that went back — a reused process number — is read as none.
|
|
101
|
+
function cpu_spent(
|
|
102
|
+
before: UsageMark,
|
|
103
|
+
counted: ReadonlyMap<number, number>,
|
|
104
|
+
{ pid, reading }: LaneProcess,
|
|
105
|
+
): number {
|
|
106
|
+
const earlier = (before.processes.get(pid)?.cpu_ms ?? 0) + (counted.get(pid) ?? 0)
|
|
107
|
+
|
|
108
|
+
return Math.max(0, reading.cpu_ms - earlier)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function spent_of(
|
|
112
|
+
before: UsageMark | undefined,
|
|
113
|
+
after: UsageMark,
|
|
114
|
+
): (process: LaneProcess) => number {
|
|
115
|
+
if (before === undefined) return () => 0
|
|
116
|
+
|
|
117
|
+
const counted = reaped_counted(before, after)
|
|
118
|
+
|
|
119
|
+
return (lane_process) => cpu_spent(before, counted, lane_process)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function totals_of(before: UsageMark | undefined, after: UsageMark): Map<string, LaneTotal> {
|
|
123
|
+
const totals = new Map<string, LaneTotal>()
|
|
124
|
+
const spent = spent_of(before, after)
|
|
125
|
+
|
|
126
|
+
for (const lane_process of lane_processes(after)) {
|
|
127
|
+
const total = totals.get(lane_process.lane) ?? NO_TOTAL
|
|
128
|
+
|
|
129
|
+
totals.set(lane_process.lane, {
|
|
130
|
+
cpu_ms: total.cpu_ms + spent(lane_process),
|
|
131
|
+
rss_bytes: total.rss_bytes + lane_process.reading.rss_bytes,
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return totals
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function cpu_percent(
|
|
139
|
+
before: UsageMark | undefined,
|
|
140
|
+
after: UsageMark,
|
|
141
|
+
cpu_ms: number,
|
|
142
|
+
): number | undefined {
|
|
143
|
+
const elapsed = before === undefined ? 0 : after.at_ms - before.at_ms
|
|
144
|
+
|
|
145
|
+
return elapsed <= 0 ? undefined : (cpu_ms / (elapsed * after.cores)) * PERCENT
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function lane_usage(before: UsageMark | undefined, after: UsageMark, total: LaneTotal): LaneUsage {
|
|
149
|
+
return {
|
|
150
|
+
cpu_percent: cpu_percent(before, after, total.cpu_ms),
|
|
151
|
+
memory_bytes: total.rss_bytes,
|
|
152
|
+
memory_percent: (total.rss_bytes / after.total_bytes) * PERCENT,
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function usage_of(before: UsageMark | undefined, after: UsageMark): LaneUsages {
|
|
157
|
+
const totals = [...totals_of(before, after)]
|
|
158
|
+
|
|
159
|
+
return new Map(totals.map(([lane, total]) => [Number(lane), lane_usage(before, after, total)]))
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const run_board_usage = { usage_of }
|
|
163
|
+
|
|
164
|
+
export { run_board_usage }
|
|
165
|
+
export type { LaneUsage, LaneUsages, ProcessReading, UsageMark }
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
2
|
+
import type { RunCarry } from './run-carry'
|
|
3
|
+
|
|
4
|
+
// A named `backlogrun #N` run, with or without `--only`, derives its named list from the `invocation`
|
|
5
|
+
// string. **The invocation is not rewritten** to add an issue mid-run — `classify_claim` compares it
|
|
6
|
+
// character for character to decide who owns the record, so an edited invocation would answer
|
|
7
|
+
// `mismatch` at the next resume. The additions are kept beside it,
|
|
8
|
+
// each marked with whether it jumps the queue (`pnpm josh run:add`) or joins its end
|
|
9
|
+
// (`--no-priority`), and `remaining_of` folds them into the one ordered list the run reads.
|
|
10
|
+
interface CarryAddition {
|
|
11
|
+
issue: number
|
|
12
|
+
is_priority: boolean
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function issues_of(
|
|
16
|
+
added: ReadonlyArray<CarryAddition>,
|
|
17
|
+
is_priority: boolean,
|
|
18
|
+
): ReadonlyArray<number> {
|
|
19
|
+
return added.filter((entry) => entry.is_priority === is_priority).map((entry) => entry.issue)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// The prioritized additions first, in the order they were added, then the declared list, then the
|
|
23
|
+
// appended additions — each issue once, at its first position.
|
|
24
|
+
function ordered(
|
|
25
|
+
declared: ReadonlyArray<number>,
|
|
26
|
+
added: ReadonlyArray<CarryAddition> = [],
|
|
27
|
+
): ReadonlyArray<number> {
|
|
28
|
+
const sequence = [...issues_of(added, true), ...declared, ...issues_of(added, false)]
|
|
29
|
+
|
|
30
|
+
return sequence.filter((issue, index) => sequence.indexOf(issue) === index)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// An issue already added keeps its first entry, so a repeated `run:add` cannot reorder the queue.
|
|
34
|
+
function next_added(
|
|
35
|
+
carry: RunCarry,
|
|
36
|
+
additions: ReadonlyArray<CarryAddition>,
|
|
37
|
+
): Array<CarryAddition> {
|
|
38
|
+
const next = [...(carry.added ?? [])]
|
|
39
|
+
|
|
40
|
+
for (const addition of additions) {
|
|
41
|
+
if (next.every((entry) => entry.issue !== addition.issue)) next.push(addition)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return next
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function add_issues(
|
|
48
|
+
target: string,
|
|
49
|
+
carry: RunCarry,
|
|
50
|
+
additions: ReadonlyArray<CarryAddition>,
|
|
51
|
+
): RunCarry {
|
|
52
|
+
const next: RunCarry = { ...carry, added: next_added(carry, additions) }
|
|
53
|
+
|
|
54
|
+
stamp_file.write_stamp(target, next)
|
|
55
|
+
|
|
56
|
+
return next
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const run_carry_added = { add_issues, ordered }
|
|
60
|
+
|
|
61
|
+
export type { CarryAddition }
|
|
62
|
+
export { run_carry_added }
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
1
2
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
2
|
-
import {
|
|
3
|
+
import { run_invocation } from '#scripts/run/run-invocation'
|
|
3
4
|
import { run_carry, type CarryChange, type CarryClaimRequest, type CarryOwner } from './run-carry'
|
|
4
5
|
|
|
5
|
-
// The argument half of `josh run:carry
|
|
6
|
-
//
|
|
7
|
-
// was already there: everything here turns `argv` into one `Request` and reads no record, while
|
|
8
|
-
// everything left there acts on a record and prints. Nothing about the behavior moved with it.
|
|
6
|
+
// The argument half of `josh run:carry`: everything here turns `argv` into one `Request` and reads no
|
|
7
|
+
// record, while `run-carry-cli.ts` acts on a record and prints.
|
|
9
8
|
|
|
10
9
|
const NO_INCREMENT = 0
|
|
11
10
|
const ONE_CUT = 1
|
|
@@ -18,8 +17,8 @@ const EMPTY_INVOCATION = ''
|
|
|
18
17
|
// A pid below this addresses a process group rather than a process, which `process-identity.ts`
|
|
19
18
|
// rejects on the read side. Refused here too, so a record never records an owner nothing can be.
|
|
20
19
|
const MIN_PID = 1
|
|
21
|
-
// `--owner` is read by the two claiming alternatives and by the counting group
|
|
22
|
-
//
|
|
20
|
+
// `--owner` is read by the two claiming alternatives and by the counting group: a
|
|
21
|
+
// count checks the owner so a session whose record was handed off, or taken over by a successor,
|
|
23
22
|
// cannot advance a budget that is no longer its own. `--end` alone accepts it and ignores it, and a
|
|
24
23
|
// usage line that offered it there would be promising an ownership check nothing performs.
|
|
25
24
|
const USAGE =
|
|
@@ -35,11 +34,11 @@ const OPTIONS = {
|
|
|
35
34
|
merged: { type: 'string' },
|
|
36
35
|
owner: { type: 'string' },
|
|
37
36
|
// A boolean like `--cut`: it marks the end-of-run retrospective as run rather than counting an
|
|
38
|
-
// amount
|
|
39
|
-
//
|
|
37
|
+
// amount. It joins the counting group, so it carries `--owner` and is refused from a session that
|
|
38
|
+
// no longer owns the record, exactly as a merge count is.
|
|
40
39
|
retrospective: { type: 'boolean' },
|
|
41
40
|
resume: { type: 'string' },
|
|
42
|
-
// The retrospective's result carried to the event stream
|
|
41
|
+
// The retrospective's result carried to the event stream. It pairs with
|
|
43
42
|
// `--retrospective` and only with it: the mark and the result it records are one action, so a mark
|
|
44
43
|
// with nothing to read and a result no mark records are both usage errors rather than half-done
|
|
45
44
|
// closes. It is not a record field — `to_change` never carries it — so it rides the count request to
|
|
@@ -47,7 +46,7 @@ const OPTIONS = {
|
|
|
47
46
|
summary: { type: 'string' },
|
|
48
47
|
// **`--stopped <reason>` rides on `--end`, so it is a modifier rather than a fifth group.** A run
|
|
49
48
|
// that halts needing a person ends its record exactly as a clean one does; the reason is what turns
|
|
50
|
-
// that end into the ⏸️ confirmation the person gets after a session cut
|
|
49
|
+
// that end into the ⏸️ confirmation the person gets after a session cut.
|
|
51
50
|
// Named without `--end` it is ignored, the way a read ignores every counting flag.
|
|
52
51
|
stopped: { type: 'string' },
|
|
53
52
|
} as const
|
|
@@ -58,13 +57,13 @@ type ParsedValues = Partial<Record<OptionName, string | boolean>>
|
|
|
58
57
|
type OptionValue = string | boolean | undefined
|
|
59
58
|
|
|
60
59
|
// The counting request carries the owner so `count` can refuse a write from a session that is no
|
|
61
|
-
// longer the record's owner
|
|
60
|
+
// longer the record's owner.
|
|
62
61
|
interface CountRequest {
|
|
63
62
|
kind: 'count'
|
|
64
63
|
change: CarryChange
|
|
65
64
|
owner: CarryOwner
|
|
66
65
|
// The retrospective result to emit, present exactly when `change.retrospective` is set and never
|
|
67
|
-
// otherwise
|
|
66
|
+
// otherwise. The CLI reads it to append one event as it applies the mark.
|
|
68
67
|
summary?: string
|
|
69
68
|
}
|
|
70
69
|
|
|
@@ -91,7 +90,7 @@ function to_count(value: OptionValue): number | undefined {
|
|
|
91
90
|
}
|
|
92
91
|
|
|
93
92
|
// **`--done` and `--merged` name an issue, so each is checked as one and not as a count.** The shape
|
|
94
|
-
// is `
|
|
93
|
+
// is `issue-number-shape.ts`'s, which already refuses `0` and a leading zero — the same rule the `run:*`
|
|
95
94
|
// commands interpolate a number under, imported rather than restated. Absent is an empty object rather
|
|
96
95
|
// than a zero: there is no issue to record, which is a different fact from recording issue zero. A
|
|
97
96
|
// present-but-malformed value is `undefined`, which invalidates the whole invocation.
|
|
@@ -100,7 +99,7 @@ function to_issue(value: OptionValue): { issue?: number } | undefined {
|
|
|
100
99
|
|
|
101
100
|
if (text === undefined) return {}
|
|
102
101
|
|
|
103
|
-
if (!
|
|
102
|
+
if (!issue_number_shape.ISSUE_NUMBER_PATTERN.test(text)) return undefined
|
|
104
103
|
|
|
105
104
|
const issue = Number(text)
|
|
106
105
|
|
|
@@ -118,9 +117,9 @@ function to_done(value: OptionValue): Pick<CarryChange, 'done'> | undefined {
|
|
|
118
117
|
return parsed.issue === undefined ? {} : { done: parsed.issue }
|
|
119
118
|
}
|
|
120
119
|
|
|
121
|
-
// **`--merged` names the issue that merged, never a count
|
|
122
|
-
//
|
|
123
|
-
//
|
|
120
|
+
// **`--merged` names the issue that merged, never a count.** A bare count cannot be matched against
|
|
121
|
+
// `merged_issues`, so a parent counting a merge by hand and the driver's `run:merge` for the same
|
|
122
|
+
// issue would add two for one merge. Naming the issue makes the hand
|
|
124
123
|
// count the same change `run:merge` applies — one merge plus its number — so `apply_change`'s
|
|
125
124
|
// duplicate check holds whichever of the two arrives first.
|
|
126
125
|
function to_merged(value: OptionValue): Pick<CarryChange, 'merged' | 'merged_issue'> | undefined {
|
|
@@ -205,8 +204,8 @@ function summary_text(values: ParsedValues): string | undefined {
|
|
|
205
204
|
}
|
|
206
205
|
|
|
207
206
|
// The mark and its result are one close: `--retrospective` needs a `--summary` to record, and a
|
|
208
|
-
// `--summary` names a result no other flag records
|
|
209
|
-
//
|
|
207
|
+
// `--summary` names a result no other flag records. Either flag without the other is
|
|
208
|
+
// a usage error, so each must be present exactly when the other is.
|
|
210
209
|
function is_summary_paired(values: ParsedValues): boolean {
|
|
211
210
|
return (summary_text(values) !== undefined) === (values.retrospective === true)
|
|
212
211
|
}
|
|
@@ -229,12 +228,16 @@ function to_count_request(values: ParsedValues, owner: CarryOwner): Request | un
|
|
|
229
228
|
// `--begin ""` is a loop whose invocation variable was unset. A record named by nothing is one every
|
|
230
229
|
// other empty `--begin` then reads as its own, which is the cross-run inheritance `classify_claim`
|
|
231
230
|
// exists to refuse — so it is a usage error rather than a record.
|
|
231
|
+
// A `backlogrun` invocation is stored in `run_invocation.rebuild`'s canonical spelling, the one the
|
|
232
|
+
// wake supervisor hands back, so no record is one the wake refuses.
|
|
232
233
|
function to_claim_request(
|
|
233
|
-
|
|
234
|
+
typed: string,
|
|
234
235
|
owner: CarryOwner,
|
|
235
236
|
is_adoption: boolean,
|
|
236
237
|
): Request | undefined {
|
|
237
|
-
if (
|
|
238
|
+
if (typed === EMPTY_INVOCATION) return undefined
|
|
239
|
+
|
|
240
|
+
const invocation = run_invocation.rebuild(typed) ?? typed
|
|
238
241
|
|
|
239
242
|
return { kind: 'claim', claim: { invocation, owner, is_adoption } }
|
|
240
243
|
}
|
|
@@ -38,7 +38,7 @@ function has_other_change(change: CarryChange): boolean {
|
|
|
38
38
|
return has_amount || change.done !== undefined || change.retrospective === true
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
// **A duplicate merge drops only the merge
|
|
41
|
+
// **A duplicate merge drops only the merge**: `--merged <issue>` may ride
|
|
42
42
|
// beside `--filed` or `--done` in one call, and those are still increments the record has not seen.
|
|
43
43
|
// Only a duplicate carrying nothing else leaves the record untouched, which is `undefined` here.
|
|
44
44
|
function effective_change(carry: RunCarry, change: CarryChange): CarryChange | undefined {
|