@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
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { api_outage } from '#scripts/agent/api-outage'
|
|
4
4
|
import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-threshold'
|
|
5
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
5
6
|
import { issue_closing_pr } from '#scripts/issue/issue-closing-pr'
|
|
7
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
6
8
|
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
7
9
|
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
8
10
|
import { lane_ledger } from '#scripts/lane/lane-ledger'
|
|
@@ -11,14 +13,14 @@ import { run_carry, type CarryOwner, type RunCarry } from '#scripts/run/carry/ru
|
|
|
11
13
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
12
14
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
13
15
|
import { run_ending } from '#scripts/run/run-ending'
|
|
14
|
-
import {
|
|
16
|
+
import { run_label } from '#scripts/run/run-label'
|
|
15
17
|
import { run_merge, type ChildOutcome, type EndingSignals } from './run-merge'
|
|
16
|
-
import { run_merge_steps, type MergeContext } from './run-merge-steps'
|
|
18
|
+
import { run_merge_steps, type FailedResult, type MergeContext } from './run-merge-steps'
|
|
19
|
+
import { run_merge_token, type MergeToken } from './run-merge-token'
|
|
17
20
|
|
|
18
|
-
// `josh run:merge <N>` — one composite command for a `backlogrun` merge event
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
// return and reads back the next child number, or a control verdict.
|
|
21
|
+
// `josh run:merge <N>` — one composite command for a `backlogrun` merge event. The parent's context is
|
|
22
|
+
// the largest and its per-turn cost the highest, so it calls this once at a child's return and reads
|
|
23
|
+
// back the next child number, or a control verdict.
|
|
22
24
|
//
|
|
23
25
|
// The contract is `run:carry`'s: **standard output carries one token** (or the newline-separated
|
|
24
26
|
// offer `epic:next --lanes` prints), and everything else is a captured subprocess or a quiet
|
|
@@ -31,19 +33,7 @@ const SUCCESS_EXIT_CODE = 0
|
|
|
31
33
|
const FAILURE_EXIT_CODE = 1
|
|
32
34
|
const FIRST = 0
|
|
33
35
|
const MIN_PID = 1
|
|
34
|
-
const
|
|
35
|
-
const HUMAN_REVIEW_TOKEN = 'human-review'
|
|
36
|
-
// Matches the `busy` verdict `run:carry` emits for a refused count, so callers see one vocabulary.
|
|
37
|
-
const BUSY_TOKEN = 'busy'
|
|
38
|
-
const STOP_TOKEN = 'stop'
|
|
39
|
-
// The consecutive-outage guard tripped: the environment is down, so the run stops rather than
|
|
40
|
-
// re-dispatching into a dead API (joshuafolkken/kit#2240). Distinct from `stop` so the parent's report
|
|
41
|
-
// can say the environment failed rather than the children.
|
|
42
|
-
const ENVIRONMENT_TOKEN = 'environment'
|
|
43
|
-
const RETRY_TOKEN = 'retry'
|
|
44
|
-
// The child's cut was resumed in its own lane (joshuafolkken/kit#2484): the parent awaits that lane
|
|
45
|
-
// again, and offers no child in its place.
|
|
46
|
-
const RESUMED_TOKEN = 'resumed'
|
|
36
|
+
const { MERGE_TOKEN } = run_merge_token
|
|
47
37
|
const PARK_FAILURE_NOTE = 'The failed child could not be parked with needs-decision; stopping.'
|
|
48
38
|
// The same digit shape `run-carry-args.ts` reads an owner pid under; a count is a bare run of digits.
|
|
49
39
|
const DIGITS = /^\d+$/u
|
|
@@ -95,7 +85,7 @@ function is_epic_without_repo(values: ParsedArguments['values']): boolean {
|
|
|
95
85
|
function valid_epic(raw: string | undefined): string | undefined {
|
|
96
86
|
if (raw === undefined) return undefined
|
|
97
87
|
|
|
98
|
-
return
|
|
88
|
+
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(raw) ? raw : undefined
|
|
99
89
|
}
|
|
100
90
|
|
|
101
91
|
// The repository counterpart, testing its own named pattern directly for the same reason.
|
|
@@ -123,8 +113,8 @@ function has_invalid_offer(values: ParsedArguments['values']): boolean {
|
|
|
123
113
|
)
|
|
124
114
|
}
|
|
125
115
|
|
|
126
|
-
//
|
|
127
|
-
//
|
|
116
|
+
// A caller may still pass a numeric threshold. Its shape remains strict, but its value is ignored so
|
|
117
|
+
// a caller cannot introduce a second threshold source.
|
|
128
118
|
function has_invalid_legacy_over(raw: string | undefined): boolean {
|
|
129
119
|
if (raw === undefined) return false
|
|
130
120
|
|
|
@@ -136,7 +126,7 @@ function valid_child(parsed: ParsedArguments): string | undefined {
|
|
|
136
126
|
|
|
137
127
|
if (child === undefined) return undefined
|
|
138
128
|
|
|
139
|
-
return
|
|
129
|
+
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(child) ? child : undefined
|
|
140
130
|
}
|
|
141
131
|
|
|
142
132
|
function to_context(parsed: ParsedArguments): MergeContext | undefined {
|
|
@@ -169,24 +159,35 @@ function parse(argv: ReadonlyArray<string>): MergeContext | undefined {
|
|
|
169
159
|
}
|
|
170
160
|
|
|
171
161
|
// One handled return: the stdout token and the exit code. Returned rather than printed, so the
|
|
172
|
-
// in-process caller (`backlog:drive
|
|
173
|
-
interface
|
|
162
|
+
// in-process caller (`backlog:drive`) reads the same verdict the CLI prints.
|
|
163
|
+
interface ControlVerdict {
|
|
164
|
+
token: MergeToken
|
|
165
|
+
code: number
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// The next child offered in the collected one's place: the text `backlog:next` or `epic:next --lanes`
|
|
169
|
+
// printed, passed through as it was read, so no narrower type holds it.
|
|
170
|
+
interface OfferVerdict {
|
|
174
171
|
token: string
|
|
175
172
|
code: number
|
|
176
173
|
}
|
|
177
174
|
|
|
175
|
+
type MergeVerdict = ControlVerdict | OfferVerdict
|
|
176
|
+
|
|
178
177
|
// The verdict together with the outcome it was handled as, which the token alone does not carry — a
|
|
179
178
|
// merged, a parked and a failed child all answer with the next offer.
|
|
180
|
-
|
|
181
|
-
outcome: ChildOutcome
|
|
182
|
-
}
|
|
179
|
+
type MergeResult = MergeVerdict & { outcome: ChildOutcome }
|
|
183
180
|
|
|
184
|
-
function emit(token:
|
|
181
|
+
function emit(token: MergeToken, code: number): ControlVerdict {
|
|
185
182
|
return { token, code }
|
|
186
183
|
}
|
|
187
184
|
|
|
185
|
+
async function offered(ctx: MergeContext): Promise<OfferVerdict> {
|
|
186
|
+
return { token: await run_merge_steps.ask_next(ctx), code: SUCCESS_EXIT_CODE }
|
|
187
|
+
}
|
|
188
|
+
|
|
188
189
|
// Whether the child's exit record shows it could not reach the API — read only when `--output` named
|
|
189
|
-
// the transcript, off otherwise
|
|
190
|
+
// the transcript, off otherwise. The path is validated inside
|
|
190
191
|
// `run_ending.read_exit`, which returns `undefined` for an unreadable or missing record, so a missing
|
|
191
192
|
// output is simply "not an outage".
|
|
192
193
|
function read_is_outage(output: string | undefined): boolean {
|
|
@@ -199,7 +200,7 @@ type IssueRead = Awaited<ReturnType<typeof issue_state_cli.read_issue>>
|
|
|
199
200
|
|
|
200
201
|
// The timeline is read only for an OPEN, unparked child — the one classification a merged closing pull
|
|
201
202
|
// request changes. A CLOSED child was closed by GitHub, so it must carry no `merged_pr` for
|
|
202
|
-
// `do_merged` to close again
|
|
203
|
+
// `do_merged` to close again.
|
|
203
204
|
async function read_merged_pr(child: string, read: IssueRead): Promise<string | undefined> {
|
|
204
205
|
if (read.kind !== 'state' || run_merge.classify_child(read.state) !== 'failed') return undefined
|
|
205
206
|
|
|
@@ -220,54 +221,91 @@ function outcome_of(read: IssueRead, signals: EndingSignals): ChildOutcome {
|
|
|
220
221
|
}
|
|
221
222
|
|
|
222
223
|
// A refused count means this session is not the carry record's owner, so the whole operation is
|
|
223
|
-
// rejected — the lane is not closed and no next child is offered
|
|
224
|
+
// rejected — the lane is not closed and no next child is offered.
|
|
224
225
|
function report_count_refused(carry: RunCarry | undefined): MergeVerdict {
|
|
225
226
|
if (carry !== undefined) console.error(run_carry.count_refused_message(carry))
|
|
226
227
|
|
|
227
|
-
return emit(
|
|
228
|
+
return emit(MERGE_TOKEN.BUSY, FAILURE_EXIT_CODE)
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// A merged child counted and its lane closed, the merge put on the stream and in the ledger. Returns the
|
|
232
|
+
// carry when the ownership check refused it, `undefined` once recorded. `run:carry --end` records the
|
|
233
|
+
// merges a run ended with through it too (`run-merge-collect.ts`).
|
|
234
|
+
async function record_merged(ctx: MergeContext): Promise<RunCarry | undefined> {
|
|
235
|
+
const refused = await run_merge_steps.do_merged(ctx)
|
|
236
|
+
|
|
237
|
+
if (refused !== undefined) return refused
|
|
238
|
+
|
|
239
|
+
await run_event_stream_emit.emit(
|
|
240
|
+
run_event_stream.EVENT_KIND.MERGE,
|
|
241
|
+
`${issue_cite.plain(ctx.child)} merged`,
|
|
242
|
+
)
|
|
243
|
+
await lane_ledger.record_merge(Number(ctx.child))
|
|
244
|
+
|
|
245
|
+
return undefined
|
|
228
246
|
}
|
|
229
247
|
|
|
230
248
|
// A merge is the only outcome that asks the hand-off check, because it is the only one that returned
|
|
231
249
|
// the tree to a clean default branch. `over` stops the offer; `under` asks for the next child.
|
|
232
250
|
async function on_merged(ctx: MergeContext): Promise<MergeVerdict> {
|
|
233
|
-
const refused = await
|
|
251
|
+
const refused = await record_merged(ctx)
|
|
234
252
|
|
|
235
253
|
if (refused !== undefined) return report_count_refused(refused)
|
|
236
254
|
|
|
237
|
-
await
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
if (await run_merge_steps.is_over_budget(ctx.over)) return emit(OVER_TOKEN, SUCCESS_EXIT_CODE)
|
|
255
|
+
if (await run_merge_steps.is_over_budget(ctx.over)) {
|
|
256
|
+
return emit(MERGE_TOKEN.OVER, SUCCESS_EXIT_CODE)
|
|
257
|
+
}
|
|
241
258
|
|
|
242
|
-
return
|
|
259
|
+
return await offered(ctx)
|
|
243
260
|
}
|
|
244
261
|
|
|
245
|
-
|
|
246
|
-
|
|
262
|
+
// A child released to wait on its open blockers: settled for this run like a parked one, so it goes on
|
|
263
|
+
// the stream the same way, but nothing was counted — the failure guard is not read, and the next child
|
|
264
|
+
// is offered.
|
|
265
|
+
async function on_waiting(
|
|
266
|
+
ctx: MergeContext,
|
|
267
|
+
blockers: ReadonlyArray<string>,
|
|
268
|
+
): Promise<MergeVerdict> {
|
|
269
|
+
await run_event_stream_emit.emit(
|
|
270
|
+
run_event_stream.EVENT_KIND.PARK,
|
|
271
|
+
`${issue_cite.plain(ctx.child)} waiting on ${blockers.join(', ')}`,
|
|
272
|
+
)
|
|
247
273
|
|
|
248
|
-
|
|
274
|
+
return await offered(ctx)
|
|
275
|
+
}
|
|
249
276
|
|
|
277
|
+
async function on_parked_failure(ctx: MergeContext, result: FailedResult): Promise<MergeVerdict> {
|
|
250
278
|
if (!result.is_parked) {
|
|
251
279
|
console.error(PARK_FAILURE_NOTE)
|
|
252
280
|
|
|
253
|
-
return emit(
|
|
281
|
+
return emit(MERGE_TOKEN.STOP, FAILURE_EXIT_CODE)
|
|
254
282
|
}
|
|
255
283
|
|
|
256
284
|
await run_event_stream_emit.emit(
|
|
257
285
|
run_event_stream.EVENT_KIND.PARK,
|
|
258
|
-
|
|
286
|
+
`${issue_cite.plain(ctx.child)} parked (needs-decision)`,
|
|
259
287
|
)
|
|
260
288
|
|
|
261
289
|
if (result.carry !== undefined && run_merge.is_guard_tripped(result.carry.failures)) {
|
|
262
|
-
return emit(
|
|
290
|
+
return emit(MERGE_TOKEN.STOP, SUCCESS_EXIT_CODE)
|
|
263
291
|
}
|
|
264
292
|
|
|
265
|
-
return
|
|
293
|
+
return await offered(ctx)
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
async function on_failed(ctx: MergeContext, cause?: string): Promise<MergeVerdict> {
|
|
297
|
+
const result = await run_merge_steps.do_failed(ctx, cause)
|
|
298
|
+
|
|
299
|
+
if (result.is_refused) return report_count_refused(result.carry)
|
|
300
|
+
|
|
301
|
+
if (result.blockers.length > 0) return await on_waiting(ctx, result.blockers)
|
|
302
|
+
|
|
303
|
+
return await on_parked_failure(ctx, result)
|
|
266
304
|
}
|
|
267
305
|
|
|
268
|
-
// An API-outage child: counted into its own streak and left re-dispatchable, not parked
|
|
269
|
-
//
|
|
270
|
-
//
|
|
306
|
+
// An API-outage child: counted into its own streak and left re-dispatchable, not parked. Below the
|
|
307
|
+
// outage guard it offers the next child — which may be this same one again; at the guard it emits
|
|
308
|
+
// `environment` so the parent stops, the environment being down.
|
|
271
309
|
async function on_outage(ctx: MergeContext): Promise<MergeVerdict> {
|
|
272
310
|
const result = await run_merge_steps.do_outage(ctx)
|
|
273
311
|
|
|
@@ -275,19 +313,19 @@ async function on_outage(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
275
313
|
|
|
276
314
|
await run_event_stream_emit.emit(
|
|
277
315
|
run_event_stream.EVENT_KIND.OUTAGE,
|
|
278
|
-
|
|
316
|
+
`${issue_cite.plain(ctx.child)} outage (re-dispatchable)`,
|
|
279
317
|
)
|
|
280
318
|
|
|
281
319
|
if (result.carry !== undefined && run_merge.is_outage_guard_tripped(result.carry.outages)) {
|
|
282
|
-
return emit(
|
|
320
|
+
return emit(MERGE_TOKEN.ENVIRONMENT, SUCCESS_EXIT_CODE)
|
|
283
321
|
}
|
|
284
322
|
|
|
285
|
-
return
|
|
323
|
+
return await offered(ctx)
|
|
286
324
|
}
|
|
287
325
|
|
|
288
|
-
// A child that ended its session with a cut no successor adopted
|
|
289
|
-
//
|
|
290
|
-
//
|
|
326
|
+
// A child that ended its session with a cut no successor adopted: its successor is relaunched,
|
|
327
|
+
// nothing is counted and nothing is parked, and `resumed` tells the parent to await the same lane
|
|
328
|
+
// again rather than dispatch into it. A successor that could not be started — or a cut the
|
|
291
329
|
// fallback already relaunched once — is the failed child it would otherwise have been. A session that
|
|
292
330
|
// does not own the carry record is refused `busy` before anything is relaunched or marked.
|
|
293
331
|
async function on_cut(ctx: MergeContext): Promise<MergeVerdict> {
|
|
@@ -301,45 +339,51 @@ async function on_cut(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
301
339
|
|
|
302
340
|
await run_event_stream_emit.emit(
|
|
303
341
|
run_event_stream.EVENT_KIND.CHILD_LAUNCH,
|
|
304
|
-
|
|
342
|
+
`${issue_cite.plain(ctx.child)} resumed from its cut`,
|
|
305
343
|
)
|
|
306
344
|
|
|
307
|
-
return emit(
|
|
345
|
+
return emit(MERGE_TOKEN.RESUMED, SUCCESS_EXIT_CODE)
|
|
308
346
|
}
|
|
309
347
|
|
|
310
348
|
// A child that parked itself: nothing is counted, but the park is written to the stream as a failed
|
|
311
|
-
// child's is, so a reader restoring the run from its events sees the child settled
|
|
312
|
-
//
|
|
313
|
-
//
|
|
349
|
+
// child's is, so a reader restoring the run from its events sees the child settled. Its `in-progress`
|
|
350
|
+
// is dropped as a failed child's is: left on, it would outlive the `needs-decision` a person later
|
|
351
|
+
// lifts, and a `run:solo` child would then hold the whole backlog.
|
|
314
352
|
async function on_parked(ctx: MergeContext): Promise<MergeVerdict> {
|
|
315
|
-
await
|
|
316
|
-
await run_event_stream_emit.emit(
|
|
353
|
+
await run_label.unmark(ctx.child)
|
|
354
|
+
await run_event_stream_emit.emit(
|
|
355
|
+
run_event_stream.EVENT_KIND.PARK,
|
|
356
|
+
`${issue_cite.plain(ctx.child)} parked`,
|
|
357
|
+
)
|
|
317
358
|
|
|
318
|
-
return
|
|
359
|
+
return await offered(ctx)
|
|
319
360
|
}
|
|
320
361
|
|
|
321
362
|
// A split child: nothing is counted, and its lane is closed when it holds nothing, so the promoted
|
|
322
|
-
// epic does not keep a seat the next child needs
|
|
363
|
+
// epic does not keep a seat the next child needs.
|
|
323
364
|
async function on_skipped(ctx: MergeContext): Promise<MergeVerdict> {
|
|
324
365
|
await run_merge_steps.close_split_lane(ctx.child)
|
|
325
|
-
await run_event_stream_emit.emit(
|
|
366
|
+
await run_event_stream_emit.emit(
|
|
367
|
+
run_event_stream.EVENT_KIND.SPLIT,
|
|
368
|
+
`${issue_cite.plain(ctx.child)} split`,
|
|
369
|
+
)
|
|
326
370
|
|
|
327
|
-
return
|
|
371
|
+
return await offered(ctx)
|
|
328
372
|
}
|
|
329
373
|
|
|
330
374
|
// The child's own ending: it stopped before its commit for a person to look at, so nothing is counted
|
|
331
375
|
// and no next child is offered.
|
|
332
376
|
async function on_human_review(): Promise<MergeVerdict> {
|
|
333
|
-
return emit(
|
|
377
|
+
return emit(MERGE_TOKEN.HUMAN_REVIEW, SUCCESS_EXIT_CODE)
|
|
334
378
|
}
|
|
335
379
|
|
|
336
380
|
// The state could not be read, which is never `OPEN`: re-read before deciding anything.
|
|
337
381
|
async function on_unresolved(): Promise<MergeVerdict> {
|
|
338
|
-
return emit(
|
|
382
|
+
return emit(MERGE_TOKEN.RETRY, FAILURE_EXIT_CODE)
|
|
339
383
|
}
|
|
340
384
|
|
|
341
385
|
async function on_shipping(): Promise<MergeVerdict> {
|
|
342
|
-
return emit(
|
|
386
|
+
return emit(MERGE_TOKEN.RESUMED, SUCCESS_EXIT_CODE)
|
|
343
387
|
}
|
|
344
388
|
|
|
345
389
|
const HANDLERS: Readonly<Record<ChildOutcome, (ctx: MergeContext) => Promise<MergeVerdict>>> = {
|
|
@@ -355,7 +399,7 @@ const HANDLERS: Readonly<Record<ChildOutcome, (ctx: MergeContext) => Promise<Mer
|
|
|
355
399
|
}
|
|
356
400
|
|
|
357
401
|
// The whole merge event for one returned child, in-process: read its state, classify it, and run the
|
|
358
|
-
// handler. The CLI prints the token; `backlog:drive` branches on the outcome
|
|
402
|
+
// handler. The CLI prints the token; `backlog:drive` branches on the outcome.
|
|
359
403
|
async function merge_child(ctx: MergeContext): Promise<MergeResult> {
|
|
360
404
|
if (lane_handoff.is_ship_running(ctx.child, process.cwd())) {
|
|
361
405
|
return { outcome: 'shipping', ...(await on_shipping()) }
|
|
@@ -389,15 +433,10 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
389
433
|
}
|
|
390
434
|
|
|
391
435
|
const run_merge_cli = {
|
|
392
|
-
BUSY_TOKEN,
|
|
393
|
-
ENVIRONMENT_TOKEN,
|
|
394
|
-
HUMAN_REVIEW_TOKEN,
|
|
395
|
-
OVER_TOKEN,
|
|
396
|
-
RESUMED_TOKEN,
|
|
397
|
-
RETRY_TOKEN,
|
|
398
|
-
STOP_TOKEN,
|
|
399
436
|
merge_child,
|
|
400
437
|
parse,
|
|
438
|
+
read_merged_pr,
|
|
439
|
+
record_merged,
|
|
401
440
|
run,
|
|
402
441
|
}
|
|
403
442
|
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { backlog_drive_restore } from '#scripts/backlog/backlog-drive-restore'
|
|
2
|
+
import { issue_merged } from '#scripts/issue/issue-merged'
|
|
3
|
+
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
4
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
5
|
+
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
6
|
+
import { lane_registry, type LaneInfo } from '#scripts/lane/lane-registry'
|
|
7
|
+
import { run_carry, type CarryOwner, type RunCarry } from '#scripts/run/carry/run-carry'
|
|
8
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
9
|
+
import { run_merge } from './run-merge'
|
|
10
|
+
import { run_merge_cli } from './run-merge-cli'
|
|
11
|
+
|
|
12
|
+
type IssueRead = Awaited<ReturnType<typeof issue_state_cli.read_issue>>
|
|
13
|
+
|
|
14
|
+
// The merges a run ends with, recorded at `run:carry --end`. `backlog:drive` collects only the lanes
|
|
15
|
+
// it holds in memory, and a restarted driver reseeds them from the open lanes, so a lane that merged
|
|
16
|
+
// while no driver watched it never reached `run:merge`: no `merge` event, no ledger line, no merged
|
|
17
|
+
// count. Each lane still open on a child the run launched and never settled is read once more, and
|
|
18
|
+
// **only a merged one is collected** — closed by a merged pull request, or left open behind one —
|
|
19
|
+
// through the same `run:merge` recording a driver would have made.
|
|
20
|
+
|
|
21
|
+
interface Merge {
|
|
22
|
+
// The merged pull request GitHub left the child open behind, which `run:merge` still closes it for.
|
|
23
|
+
merged_pr: string | undefined
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// A closed child merged only when a merged pull request closed it; one closed by hand is not collected.
|
|
27
|
+
async function closed_merge(child: string): Promise<Merge | undefined> {
|
|
28
|
+
return (await issue_merged.read_merged(child)) ? { merged_pr: undefined } : undefined
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function open_merge(child: string, read: IssueRead): Promise<Merge | undefined> {
|
|
32
|
+
const merged_pr = await run_merge_cli.read_merged_pr(child, read)
|
|
33
|
+
|
|
34
|
+
return merged_pr === undefined ? undefined : { merged_pr }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// How the child merged; `undefined` when it did not, or could not be read.
|
|
38
|
+
async function merge_of(child: string): Promise<Merge | undefined> {
|
|
39
|
+
const read = await issue_state_cli.read_issue(child)
|
|
40
|
+
|
|
41
|
+
if (read.kind !== 'state') return undefined
|
|
42
|
+
|
|
43
|
+
const is_closed = run_merge.classify_child(read.state) === 'merged'
|
|
44
|
+
|
|
45
|
+
return is_closed ? await closed_merge(child) : await open_merge(child, read)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// A lane a detached `josh ship` still supervises is that ship's to merge.
|
|
49
|
+
async function collect_lane(lane: LaneInfo, owner: CarryOwner): Promise<void> {
|
|
50
|
+
if (lane_handoff.is_ship_running(lane.issue, process.cwd())) return
|
|
51
|
+
|
|
52
|
+
const merge = await merge_of(lane.issue)
|
|
53
|
+
|
|
54
|
+
if (merge === undefined) return
|
|
55
|
+
|
|
56
|
+
const ctx = { child: lane.issue, epic: undefined, repo: undefined, over: undefined, owner }
|
|
57
|
+
|
|
58
|
+
await run_merge_cli.record_merged({ ...ctx, merged_pr: merge.merged_pr })
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// **Best-effort, one lane at a time**: a close prunes the worktree list, and a lane that fails to
|
|
62
|
+
// collect is reported and left for `run:tidy` rather than failing the `--end` that asked.
|
|
63
|
+
async function collect_all(lanes: ReadonlyArray<LaneInfo>, owner: CarryOwner): Promise<void> {
|
|
64
|
+
for (const lane of lanes) {
|
|
65
|
+
try {
|
|
66
|
+
// eslint-disable-next-line no-await-in-loop -- a close prunes the worktree list the next one reads
|
|
67
|
+
await collect_lane(lane, owner)
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error(
|
|
70
|
+
`run:carry: lane ${session_cite.issue(lane.issue)} was not collected: ${String(error)}`,
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// `--end` speaks for the run whose record it closes, so the collection counts as the record's owner.
|
|
77
|
+
function owner_of(carry: RunCarry): CarryOwner {
|
|
78
|
+
return { pid: carry.owner_pid, start: carry.owner_start, transcript: carry.owner_transcript }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function collect_carried(carry: RunCarry): Promise<void> {
|
|
82
|
+
const in_flight = backlog_drive_restore.active_issues(
|
|
83
|
+
await run_event_stream_emit.current_events(),
|
|
84
|
+
)
|
|
85
|
+
const lanes = await lane_registry.list_lanes()
|
|
86
|
+
const collectable = lanes.filter((lane) => !lane.is_stranded && in_flight.has(lane.issue))
|
|
87
|
+
|
|
88
|
+
await collect_all(collectable, owner_of(carry))
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Asked by `--end` before it closes the record under `directory`, the common git directory; a run with
|
|
92
|
+
// no live record collects nothing. **It never fails the `--end` that asked**.
|
|
93
|
+
async function collect_merged(directory: string): Promise<void> {
|
|
94
|
+
const read = run_carry.read_carry(run_carry.carry_path(directory))
|
|
95
|
+
|
|
96
|
+
if (read.kind !== 'carried' && read.kind !== 'expired') return
|
|
97
|
+
|
|
98
|
+
try {
|
|
99
|
+
await collect_carried(read.carry)
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error(`run:carry: the run's merged lanes were not collected: ${String(error)}`)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const run_merge_collect = { collect_merged }
|
|
106
|
+
|
|
107
|
+
export { run_merge_collect }
|