@joshuafolkken/kit 1.1229.0 → 1.1370.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 +50 -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 +24 -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 +27 -16
- package/.claude/skills/workflow-commands/latest-gate.md +18 -29
- 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/.github/workflows/publish.yml +2 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +38 -57
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- 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-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
- 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 +213 -197
- 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 -201
- package/dist/josh.js +540 -137
- 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 +16 -10
- 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 +4 -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 +26 -2
- 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 +162 -0
- package/scripts/gate/core-budget.ts +134 -91
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +103 -35
- package/scripts/gate/gate-report.ts +39 -21
- 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 +313 -0
- 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 +60 -53
- 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 +12 -8
- 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 +35 -0
- 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 +49 -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 +75 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +14 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +46 -37
- 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 +165 -0
- package/scripts/issue/issue-release.ts +58 -0
- 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 +32 -34
- 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 +33 -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 +11 -5
- package/scripts/josh/josh-commands-lane.ts +16 -5
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- package/scripts/josh/josh-commands-run.ts +20 -6
- 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 +10 -10
- 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 +20 -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 +44 -30
- 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 +25 -24
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +22 -8
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +27 -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 +140 -0
- 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/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -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-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- 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 +5 -6
- 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 +68 -37
- 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 +10 -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 +172 -43
- 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 +25 -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 +13 -15
- package/scripts/run/run-step.ts +62 -48
- 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 -33
- package/scripts/run/wake/run-wake-describe.ts +76 -29
- 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 +13 -21
- 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 -328
- 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 +129 -98
- 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/templates/workflows/github-release.yml +4 -0
- package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
- 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
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
4
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
5
|
import { issue_read_cli, type BlockRead } from '#scripts/issue/issue-read-cli'
|
|
5
6
|
import { issue_state_cli, type StateRead } from '#scripts/issue/issue-state-cli'
|
|
7
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
6
8
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
7
9
|
import { error_text } from '#scripts/lib/error-message'
|
|
8
10
|
import { run_ship_preflight } from '#scripts/run/ship/run-ship-preflight'
|
|
@@ -10,8 +12,8 @@ import { latest_scope_cli } from '#scripts/version/latest-scope-cli'
|
|
|
10
12
|
import { run_prep, type PrepParts } from './run-prep'
|
|
11
13
|
import { run_prep_locate } from './run-prep-locate'
|
|
12
14
|
|
|
13
|
-
// `josh run:prep <N>` — one call for the reads a `fullrun` makes before its first edit
|
|
14
|
-
//
|
|
15
|
+
// `josh run:prep <N>` — one call for the reads a `fullrun` makes before its first edit:
|
|
16
|
+
// the issue body and comments (`issue:read`), the state, labels and
|
|
15
17
|
// `human_review` line (`issue:state`), the dependency-update scope (`latest:scope`), and where the
|
|
16
18
|
// paths and identifiers the body names occur in code (`run-prep-locate.ts`). Each is
|
|
17
19
|
// reused rather than reproduced, and the two body reads run concurrently, so three round trips become
|
|
@@ -25,7 +27,6 @@ import { run_prep_locate } from './run-prep-locate'
|
|
|
25
27
|
const SUCCESS_EXIT_CODE = 0
|
|
26
28
|
const FAILURE_EXIT_CODE = 1
|
|
27
29
|
const ARGV_OFFSET = 2
|
|
28
|
-
const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
|
|
29
30
|
const USAGE = 'Usage: josh run:prep <issue-number>'
|
|
30
31
|
const LANE_SKIP_SCOPE = 'not asked'
|
|
31
32
|
const LANE_SKIP_REASON =
|
|
@@ -50,7 +51,11 @@ interface PrepReads {
|
|
|
50
51
|
function parse_number(argv: ReadonlyArray<string>): string | undefined {
|
|
51
52
|
const [first] = argv
|
|
52
53
|
|
|
53
|
-
if (
|
|
54
|
+
if (
|
|
55
|
+
first === undefined ||
|
|
56
|
+
argv.length !== 1 ||
|
|
57
|
+
!issue_number_shape.ISSUE_NUMBER_PATTERN.test(first)
|
|
58
|
+
) {
|
|
54
59
|
return undefined
|
|
55
60
|
}
|
|
56
61
|
|
|
@@ -60,7 +65,7 @@ function parse_number(argv: ReadonlyArray<string>): string | undefined {
|
|
|
60
65
|
// One note for a read that produced nothing, naming which of the two it was — the same distinction
|
|
61
66
|
// `issue:read` and `issue:state` keep, so a bundled failure still tells a retry from an answer.
|
|
62
67
|
function failure_note(issue_number: string, kind: string): string {
|
|
63
|
-
return `(issue
|
|
68
|
+
return `(issue ${session_cite.issue(issue_number)} not bundled: ${kind})`
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
// A dispatched lane child never runs `josh latest` — the parent does it once per session
|
|
@@ -75,11 +80,10 @@ function latest_decision(): LatestDecision {
|
|
|
75
80
|
return latest_scope_cli.decide()
|
|
76
81
|
}
|
|
77
82
|
|
|
78
|
-
// Whether a dispatched lane child's tree holds uncommitted work
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
// printed before this read existed.
|
|
83
|
+
// Whether a dispatched lane child's tree holds uncommitted work. A lane child that popped
|
|
84
|
+
// its parked work back and then found its issue closed is the one position that work is lost from —
|
|
85
|
+
// the lane is removed by force — so only a lane is asked; a person's own checkout keeps its unrelated
|
|
86
|
+
// edits out of the verdict. A status that cannot be read reports none, leaving the verdict unchanged.
|
|
83
87
|
async function lane_has_changes(): Promise<boolean> {
|
|
84
88
|
if (!lane_child_marker.is_child_of(process.cwd())) return false
|
|
85
89
|
|
|
@@ -144,8 +148,9 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
144
148
|
}
|
|
145
149
|
|
|
146
150
|
const reads = await gather(issue_number)
|
|
151
|
+
const report = run_prep.format_report(to_parts(issue_number, reads))
|
|
147
152
|
|
|
148
|
-
console.info(
|
|
153
|
+
console.info(session_cite.text(report))
|
|
149
154
|
|
|
150
155
|
return exit_code(reads)
|
|
151
156
|
}
|
|
@@ -155,8 +160,7 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
155
160
|
}
|
|
156
161
|
|
|
157
162
|
// `gather` and `to_parts` are exported so `run:next` reads the same state from the same three reads
|
|
158
|
-
// rather than growing a second copy of the gather
|
|
159
|
-
// consumer of `run:prep` the epic #2166 wanted.
|
|
163
|
+
// rather than growing a second copy of the gather.
|
|
160
164
|
const run_prep_cli = { gather, parse_number, run, to_parts }
|
|
161
165
|
|
|
162
166
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { get_exit_code } from '#scripts/git/git-execa-error'
|
|
2
2
|
import { git_spawn } from '#scripts/git/git-spawn'
|
|
3
3
|
|
|
4
|
-
// The code locations an issue names, bundled into `run:prep
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// never a whole file — so the first read lands on the right place.
|
|
4
|
+
// The code locations an issue names, bundled into `run:prep`. Investigation is most of a run's
|
|
5
|
+
// round trips, and most of it opens the files an issue names one read at a time. This finds each
|
|
6
|
+
// path, identifier and command the body puts in backticks and hands back where it occurs in code —
|
|
7
|
+
// `file:line` and a short excerpt, never a whole file — so the first read lands on the right place.
|
|
9
8
|
//
|
|
10
9
|
// **Only a backticked span is a target.** A prose word is not a name, and a span holding a space is a
|
|
11
10
|
// command line or a sentence rather than one thing to look up; the one exception is a `josh` command,
|
package/scripts/run/run-prep.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { issue_state, type IssueState } from '#scripts/issue/issue-state'
|
|
2
2
|
|
|
3
|
-
// `josh run:prep <N>` — the reads a `fullrun` makes before its first edit, assembled into one report
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// `human_review` line, and the dependency-update scope that `issue:read`, `issue:state` and
|
|
8
|
-
// `latest:scope` answered in three separate calls — reusing each rather than reproducing it.
|
|
3
|
+
// `josh run:prep <N>` — the reads a `fullrun` makes before its first edit, assembled into one report.
|
|
4
|
+
// This joins the issue body and comments, the state and `human_review` line, and the dependency-update
|
|
5
|
+
// scope that `issue:read`, `issue:state` and `latest:scope` answer in three separate calls — reusing
|
|
6
|
+
// each rather than reproducing it.
|
|
9
7
|
//
|
|
10
8
|
// The leading summary line carries the three facts a run branches on — the state, whether the issue
|
|
11
9
|
// stops before its commit, and whether a dependency update is owed — so the decision is read off the
|
|
@@ -40,13 +38,12 @@ interface PrepParts {
|
|
|
40
38
|
state_failure: string
|
|
41
39
|
latest_scope: string
|
|
42
40
|
latest_reason: string
|
|
43
|
-
// Where the paths and identifiers the issue names occur in code
|
|
41
|
+
// Where the paths and identifiers the issue names occur in code.
|
|
44
42
|
locations: string
|
|
45
43
|
// Whether a lane child's tree holds uncommitted work — read for the verdict, not printed in the
|
|
46
|
-
// report
|
|
44
|
+
// report.
|
|
47
45
|
has_changes: boolean
|
|
48
|
-
// What `josh ship` would refuse on as the tree stands — `run_ship_preflight.ahead
|
|
49
|
-
// (joshuafolkken/kit#3154).
|
|
46
|
+
// What `josh ship` would refuse on as the tree stands — `run_ship_preflight.ahead`.
|
|
50
47
|
ship_problems: ReadonlyArray<string>
|
|
51
48
|
}
|
|
52
49
|
|
|
@@ -5,7 +5,7 @@ import { git_command } from '#scripts/git/git-command'
|
|
|
5
5
|
import { run_hold, type HoldRead } from '#scripts/run/hold/run-hold'
|
|
6
6
|
import { run_halfrun_resume, type StopMark } from './run-halfrun-resume'
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// A `prrun` stops at a green, mergeable pull request and **keeps** its hold, so
|
|
9
9
|
// a person can look before anything merges. What comes next is one of three, and `run:entry` answers
|
|
10
10
|
// which as the resume token `fullrun #N` acts on — read, never inferred:
|
|
11
11
|
//
|
|
@@ -74,7 +74,7 @@ async function read_facts(stop_head: string): Promise<ResumeFacts> {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
// Read-only, so `run:entry` can ask the session budget before it takes anything over. `undefined` is
|
|
77
|
-
// "no `prrun` stop for this issue here", and the ordinary claim decides the tree
|
|
77
|
+
// "no `prrun` stop for this issue here", and the ordinary claim decides the tree.
|
|
78
78
|
async function resume_token(issue: string): Promise<PrrunToken | undefined> {
|
|
79
79
|
const target = await run_halfrun_resume.hold_target()
|
|
80
80
|
|
|
@@ -9,7 +9,7 @@ import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
|
9
9
|
import { run_report } from './run-report'
|
|
10
10
|
|
|
11
11
|
// `josh run:report` — the session-facing report, generated from the run's event stream rather than
|
|
12
|
-
// composed by hand
|
|
12
|
+
// composed by hand. It reads the events the run appended, asks `release:scope`
|
|
13
13
|
// the same question `josh followup` already asks, and prints `run_report.build_report` of the two. The AI
|
|
14
14
|
// writes only Step 0's three lines (Now / Change / Check), which `report-format.md` names as the half a
|
|
15
15
|
// machine cannot answer; this owns the mechanical half — what merged, what parked and why, what was cut,
|
|
@@ -31,9 +31,9 @@ async function read_stream(): Promise<ReadonlyArray<RunEvent>> {
|
|
|
31
31
|
return run_event_stream.read_events(target)
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
// The invocation this report covers, taken from the run record that already holds the start time
|
|
35
|
-
//
|
|
36
|
-
//
|
|
34
|
+
// The invocation this report covers, taken from the run record that already holds the start time.
|
|
35
|
+
// A checkout whose git directory cannot be resolved has no record to read, which is the same
|
|
36
|
+
// undetermined answer an absent record gives — and neither one falls back to the whole stream.
|
|
37
37
|
async function read_scope(): Promise<EventScope> {
|
|
38
38
|
const directory = await run_carry.repository_directory()
|
|
39
39
|
|
|
@@ -3,13 +3,10 @@ import { run_event_scope, type EventScope } from '#scripts/run/event/run-event-s
|
|
|
3
3
|
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
4
4
|
|
|
5
5
|
// The session-facing report generated *from* the run's event stream, rather than composed by hand each
|
|
6
|
-
// time
|
|
7
|
-
// launch, a merge, a park, a cut — and `format_event`
|
|
8
|
-
// What was never single-sourced is the report a person receives: `backlogrun-progress.md` defined the
|
|
9
|
-
// epic completion summary in prose ("naming what was merged, what was parked and why, and what was
|
|
10
|
-
// filed"), so the AI reassembled the wording every run and two runs' summaries never lined up.
|
|
6
|
+
// time, so two runs' summaries line up. The run has a typed, ordered stream of what happened — a plan,
|
|
7
|
+
// a launch, a merge, a park, a cut — and `format_event` single-sources what one of those reads as.
|
|
11
8
|
//
|
|
12
|
-
// **This
|
|
9
|
+
// **This generator owns nothing `format_event` owns.** Each event line is `format_event`'s
|
|
13
10
|
// verbatim — the merges, the parks with their reason in the text, the cuts — so the enumeration is the
|
|
14
11
|
// stream rendered, not a second rendering of it. The only thing this adds is the release tail, which is
|
|
15
12
|
// not on the stream: whether a release is owed is `release:scope`'s answer, appended once at the end.
|
|
@@ -18,15 +15,13 @@ import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-st
|
|
|
18
15
|
// exactly what was printed, so the body a person reads off-screen and the summary a session shows are one
|
|
19
16
|
// text with one generator — the "no second format" the acceptance criteria pin.
|
|
20
17
|
//
|
|
21
|
-
// **And it covers one invocation, not the whole stream
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// appended one. Two days of merges arrived in one completion summary, and the Telegram body built from that
|
|
25
|
-
// output was rejected for length, which is the failure the generated report exists to prevent. The scope is
|
|
18
|
+
// **And it covers one invocation, not the whole stream.** The stream outlives an invocation by design —
|
|
19
|
+
// it is the repository's event log, not this run's — so a generator handed every event renders every
|
|
20
|
+
// run that ever appended one, and a Telegram body built from that is rejected for length. The scope is
|
|
26
21
|
// therefore an **input**: the caller answers which invocation this is, from the run record that already
|
|
27
22
|
// holds the start time, and a scope nobody could determine prints a notice rather than everything. **The
|
|
28
|
-
// scoping itself is `run-event-scope.ts`'s
|
|
29
|
-
//
|
|
23
|
+
// scoping itself is `run-event-scope.ts`'s**, shared with every other stream consumer rather than kept
|
|
24
|
+
// private here.
|
|
30
25
|
|
|
31
26
|
const LINE_SEPARATOR = '\n'
|
|
32
27
|
|
|
@@ -56,7 +51,7 @@ function release_tail(release: Decision): string | undefined {
|
|
|
56
51
|
// The report: this invocation's events as `format_event`'s lines, then the release tail when there is one.
|
|
57
52
|
// Handed the same events, scope and verdict it returns the same string, which is what the determinism test
|
|
58
53
|
// pins — nothing here reads a clock or the environment. The scoping is `run-event-scope.ts`'s, shared with
|
|
59
|
-
// every other stream consumer
|
|
54
|
+
// every other stream consumer.
|
|
60
55
|
function build_report(input: ReportInput): string {
|
|
61
56
|
const scoped = run_event_scope.scoped_events(input.events, input.scope)
|
|
62
57
|
const lines =
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { hook_decision } from '#scripts/josh/hook-decision'
|
|
2
2
|
|
|
3
3
|
// Whether a run owes its end-of-run retrospective, single-sourced so `run:step` and `backlog:drive`
|
|
4
|
-
// never disagree on it
|
|
5
|
-
//
|
|
4
|
+
// never disagree on it: a drive that read "owed" where `run:step` read "not owed" would hand back at
|
|
5
|
+
// every drain to a session that had nothing to run.
|
|
6
6
|
|
|
7
|
-
// The opt-in switch that gates the retrospective
|
|
7
|
+
// The opt-in switch that gates the retrospective. It defaults off, so an unset
|
|
8
8
|
// variable owes no retrospective.
|
|
9
9
|
const RETROSPECTIVE_ENV_KEY = 'JOSH_RETROSPECTIVE'
|
|
10
10
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// The section report the composite commands share — `run:tail` and `ship` each run a fixed chain of
|
|
2
|
+
// steps and print every step's output under its own header. The section shape, the join and the
|
|
3
|
+
// clean/red verdict read off the collected codes are the same in both, so they live here once; what a
|
|
4
|
+
// composite adds on top (ship's `stopped at:` line, tail's stderr fold) stays in its own module.
|
|
5
|
+
|
|
6
|
+
const SECTION_SEPARATOR = '\n\n'
|
|
7
|
+
|
|
8
|
+
const SUCCESS_EXIT_CODE = 0
|
|
9
|
+
const FAILURE_EXIT_CODE = 1
|
|
10
|
+
|
|
11
|
+
interface Section {
|
|
12
|
+
header: string
|
|
13
|
+
body: string
|
|
14
|
+
code: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function section_report(section: Section): string {
|
|
18
|
+
return `${section.header}\n${section.body}`
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function format_sections(sections: ReadonlyArray<Section>): string {
|
|
22
|
+
return sections.map((section) => section_report(section)).join(SECTION_SEPARATOR)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Non-zero when any step failed, exactly as each step exits on its own — a bundle where one step
|
|
26
|
+
// failed is never read as clean because the steps around it succeeded.
|
|
27
|
+
function exit_code_of(sections: ReadonlyArray<Section>): number {
|
|
28
|
+
const is_clean = sections.every((section) => section.code === SUCCESS_EXIT_CODE)
|
|
29
|
+
|
|
30
|
+
return is_clean ? SUCCESS_EXIT_CODE : FAILURE_EXIT_CODE
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const run_section = {
|
|
34
|
+
FAILURE_EXIT_CODE,
|
|
35
|
+
SECTION_SEPARATOR,
|
|
36
|
+
SUCCESS_EXIT_CODE,
|
|
37
|
+
exit_code_of,
|
|
38
|
+
format_sections,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type { Section }
|
|
42
|
+
export { run_section }
|
|
@@ -4,7 +4,7 @@ import { run_halfrun_resume } from './run-halfrun-resume'
|
|
|
4
4
|
import { run_prrun_resume, type PrrunToken } from './run-prrun-resume'
|
|
5
5
|
import { run_stage, type StageState } from './run-stage'
|
|
6
6
|
|
|
7
|
-
// The reading half of the stage ladder
|
|
7
|
+
// The reading half of the stage ladder: the facts `run_stage.state_of` folds
|
|
8
8
|
// into one state, each read from where the stage that produced it left it — never from the
|
|
9
9
|
// conversation. A closed issue and the `run:planned` label come from GitHub; a `halfrun` stop and a `prrun`
|
|
10
10
|
// stop come from the stop's own mark on the tree's hold (`run-halfrun-resume.ts`,
|
|
@@ -40,7 +40,7 @@ async function read_stop(
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// An unreadable issue reads as neither closed nor planned: the ordinary entry that follows reads it
|
|
43
|
-
// again and answers `unknown` for it
|
|
43
|
+
// again and answers `unknown` for it.
|
|
44
44
|
async function read_stage(issue: string): Promise<StageRead> {
|
|
45
45
|
const [issue_read, stop] = await Promise.all([
|
|
46
46
|
issue_state_cli.read_issue(issue),
|
package/scripts/run/run-stage.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
|
|
3
|
+
// The workflow commands form a ladder — `kickoff` → `halfrun` → `prrun` →
|
|
2
4
|
// `fullrun` — and **the command typed decides only how far a run goes; where it starts is read off the
|
|
3
5
|
// issue**. A run that finds work already done resumes after it rather than redoing it, and a command
|
|
4
6
|
// whose stopping point the issue has already reached reports that and stops.
|
|
@@ -19,7 +21,7 @@ const COMMANDS = [KICKOFF, HALFRUN, PRRUN, FULLRUN] as const
|
|
|
19
21
|
|
|
20
22
|
type StageCommand = (typeof COMMANDS)[number]
|
|
21
23
|
|
|
22
|
-
// What `run:entry` serves when no command is named
|
|
24
|
+
// What `run:entry` serves when no command is named.
|
|
23
25
|
const DEFAULT_COMMAND: StageCommand = FULLRUN
|
|
24
26
|
|
|
25
27
|
const FRESH = 'fresh'
|
|
@@ -105,7 +107,7 @@ function next_commands(command: StageCommand): ReadonlyArray<StageCommand> {
|
|
|
105
107
|
|
|
106
108
|
// The `Next:` line a stop's Telegram and report carry, e.g. `Next: prrun #<N> | fullrun #<N>`.
|
|
107
109
|
function next_line(command: StageCommand, issue: string): string {
|
|
108
|
-
const commands = next_commands(command).map((next) => `${next}
|
|
110
|
+
const commands = next_commands(command).map((next) => `${next} ${issue_cite.plain(issue)}`)
|
|
109
111
|
|
|
110
112
|
return `${NEXT_PREFIX}${commands.join(NEXT_SEPARATOR)}`
|
|
111
113
|
}
|
|
@@ -113,7 +115,7 @@ function next_line(command: StageCommand, issue: string): string {
|
|
|
113
115
|
function format_decision(issue: string, decision: StageDecision): string {
|
|
114
116
|
const fields = [`at: ${decision.state}`, `to: ${decision.command}`, `start: ${decision.start}`]
|
|
115
117
|
|
|
116
|
-
return `stage
|
|
118
|
+
return `stage ${issue_cite.plain(issue)} — ${fields.join(' · ')}`
|
|
117
119
|
}
|
|
118
120
|
|
|
119
121
|
function cell(state: StageState, command: StageCommand): string {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { cost_cli, type CostVerdict } from '#scripts/cost-runtime/cost-cli'
|
|
4
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
5
|
import { issue_state_cli, type StateRead } from '#scripts/issue/issue-state-cli'
|
|
6
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
5
7
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
6
8
|
import { run_carry, type CarryRead } from '#scripts/run/carry/run-carry'
|
|
7
9
|
import { run_status, type StatusParts } from './run-status'
|
|
8
10
|
|
|
9
|
-
// `josh run:status <N>` — one call for the read-only status a run glances at
|
|
11
|
+
// `josh run:status <N>` — one call for the read-only status a run glances at:
|
|
10
12
|
// the issue's state and labels (`issue:state`), the session's hand-off verdict (`cost --cut`), and the
|
|
11
13
|
// invocation's carry counters (`run:carry`). Each is reused rather than reproduced, and the two async
|
|
12
14
|
// reads run concurrently, so three round trips become one.
|
|
@@ -19,7 +21,6 @@ import { run_status, type StatusParts } from './run-status'
|
|
|
19
21
|
const SUCCESS_EXIT_CODE = 0
|
|
20
22
|
const FAILURE_EXIT_CODE = 1
|
|
21
23
|
const ARGV_OFFSET = 2
|
|
22
|
-
const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
|
|
23
24
|
const USAGE = 'Usage: josh run:status <issue-number> [--repo <owner/repo>]'
|
|
24
25
|
const CARRY_NONE_NOTE = 'no run recorded here'
|
|
25
26
|
const CARRY_UNREADABLE_NOTE = '(run record not bundled: unreadable)'
|
|
@@ -48,7 +49,7 @@ function valid_issue(positionals: ReadonlyArray<string>): string | undefined {
|
|
|
48
49
|
|
|
49
50
|
if (first === undefined || rest.length > 0) return undefined
|
|
50
51
|
|
|
51
|
-
return ISSUE_NUMBER_PATTERN.test(first) ? first : undefined
|
|
52
|
+
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(first) ? first : undefined
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
function parse(argv: ReadonlyArray<string>): StatusRequest | undefined {
|
|
@@ -88,7 +89,7 @@ async function gather(request: StatusRequest): Promise<StatusReads> {
|
|
|
88
89
|
// One note for a read that produced nothing, naming which of the two it was — the same distinction
|
|
89
90
|
// `issue:state` keeps, so a bundled failure still tells a retry from an answer.
|
|
90
91
|
function failure_note(issue_number: string, kind: string): string {
|
|
91
|
-
return `(issue
|
|
92
|
+
return `(issue ${session_cite.issue(issue_number)} not bundled: ${kind})`
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
function carry_summary(carry: CarryRead): string {
|
|
@@ -145,8 +146,9 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
145
146
|
}
|
|
146
147
|
|
|
147
148
|
const reads = await gather(request)
|
|
149
|
+
const report = run_status.format_report(to_parts(request.issue_number, reads))
|
|
148
150
|
|
|
149
|
-
console.info(
|
|
151
|
+
console.info(session_cite.text(report))
|
|
150
152
|
|
|
151
153
|
return exit_code(reads)
|
|
152
154
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { issue_state, type IssueState } from '#scripts/issue/issue-state'
|
|
2
2
|
|
|
3
|
-
// `josh run:status <N>` — the read-only status a run glances at, assembled into one report
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// joins the answers those three commands give, reusing each rather than reproducing it.
|
|
3
|
+
// `josh run:status <N>` — the read-only status a run glances at, assembled into one report.
|
|
4
|
+
// A run reads three independent facts to know where it stands — the issue's own state, whether the
|
|
5
|
+
// session has crossed the hand-off budget, and its own carry counters. This joins the answers
|
|
6
|
+
// `issue:state`, `cost --cut` and `run:carry` give, reusing each rather than reproducing it.
|
|
8
7
|
//
|
|
9
8
|
// **It is read-only, and that is the whole point** — the merge event has its own composite
|
|
10
|
-
// (`run:merge`), and the pre-edit reads have theirs (`run:prep`);
|
|
11
|
-
//
|
|
9
|
+
// (`run:merge`), and the pre-edit reads have theirs (`run:prep`); this is the passive glance a resumed
|
|
10
|
+
// session or a non-merge decision takes, which must not write. `run:hold`'s claim and
|
|
12
11
|
// `run:progress`'s clock mark are excluded for exactly that reason.
|
|
13
12
|
//
|
|
14
13
|
// The leading summary line carries the three facts on one line — the state, the cost verdict and the
|
|
@@ -16,7 +16,7 @@ import { run_retrospective } from './run-retrospective'
|
|
|
16
16
|
import { run_step, type StepInput } from './run-step'
|
|
17
17
|
|
|
18
18
|
// `josh run:step <N>` — print the run's next single action, computed from the event stream, the carry
|
|
19
|
-
// record and the issue state
|
|
19
|
+
// record and the issue state. It reads exactly those three, never the
|
|
20
20
|
// conversation: the issue facts through `run:prep`'s own gather (so this and `run:next` never answer
|
|
21
21
|
// from different reads), the newest event off the stream, and the carry record's kind. The reader runs
|
|
22
22
|
// the printed line, returns the result through `run:event`, and asks again — the loop `run:step`
|
|
@@ -32,10 +32,11 @@ interface RunReads {
|
|
|
32
32
|
is_retrospective_done: boolean
|
|
33
33
|
is_at_cut_cap: boolean
|
|
34
34
|
is_handed_off: boolean
|
|
35
|
+
is_merge_owed: boolean
|
|
35
36
|
last_event: string | undefined
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
// **A hand-off stops only the session that declared the record
|
|
39
|
+
// **A hand-off stops only the session that declared the record**. The record is
|
|
39
40
|
// one per repository, so a `fullrun #M` a person starts in a fresh conversation beside a `backlogrun`
|
|
40
41
|
// waiting for its successor reads the same handed-off mark — and would be told to stop on every step.
|
|
41
42
|
// The owner is `--owner "$PPID"`, an ancestor of this process only in the session that took the cut.
|
|
@@ -50,6 +51,7 @@ const UNREADABLE_RUN: RunReads = {
|
|
|
50
51
|
is_retrospective_done: false,
|
|
51
52
|
is_at_cut_cap: false,
|
|
52
53
|
is_handed_off: false,
|
|
54
|
+
is_merge_owed: false,
|
|
53
55
|
last_event: undefined,
|
|
54
56
|
}
|
|
55
57
|
|
|
@@ -65,23 +67,18 @@ function read_run(
|
|
|
65
67
|
const carry = run_carry.read_carry(run_carry.carry_path(directory))
|
|
66
68
|
const events = run_event_stream.read_events(run_event_stream.target_of(directory))
|
|
67
69
|
// The last event *within this invocation's scope*, not the raw newest one: a stale event a previous
|
|
68
|
-
// invocation left on the stream must not be read as this run's
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const last = run_event_scope.last_issue_event(
|
|
74
|
-
events,
|
|
75
|
-
run_event_scope.scope_of(carry),
|
|
76
|
-
issue_number,
|
|
77
|
-
is_lane_child,
|
|
78
|
-
)
|
|
70
|
+
// invocation left on the stream — an old `child-launch`, say — must not be read as this run's
|
|
71
|
+
// position. Another issue's detached ship supervisor is left out the same way, and so — for a lane
|
|
72
|
+
// child — is every event that does not name its own issue.
|
|
73
|
+
const scope = run_event_scope.scope_of(carry)
|
|
74
|
+
const last = run_event_scope.last_issue_event(events, scope, issue_number, is_lane_child)
|
|
79
75
|
|
|
80
76
|
return {
|
|
81
77
|
carry_kind: carry.kind,
|
|
82
78
|
is_retrospective_done: run_carry.retrospective_done_of(carry),
|
|
83
|
-
is_at_cut_cap: carry.kind === 'carried' &&
|
|
79
|
+
is_at_cut_cap: carry.kind === 'carried' && run_headless.is_cut_capped(carry.carry),
|
|
84
80
|
is_handed_off: is_handed_off_here(carry),
|
|
81
|
+
is_merge_owed: run_event_scope.is_merge_owed(events, scope, issue_number),
|
|
85
82
|
last_event: last?.kind,
|
|
86
83
|
}
|
|
87
84
|
}
|
|
@@ -102,6 +99,7 @@ function step_input(parts: PrepParts, run_reads: RunReads, is_lane_child: boolea
|
|
|
102
99
|
is_retrospective_done: run_reads.is_retrospective_done,
|
|
103
100
|
is_at_cut_cap: run_reads.is_at_cut_cap,
|
|
104
101
|
is_handed_off: run_reads.is_handed_off,
|
|
102
|
+
is_merge_owed: run_reads.is_merge_owed,
|
|
105
103
|
is_lane_child,
|
|
106
104
|
is_consumer: doctor_consumer.is_kit_consumer(find_package_directory(process.cwd())),
|
|
107
105
|
// Read here rather than in `run-step.ts` so the position logic stays a pure function of its input.
|
|
@@ -132,7 +130,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
132
130
|
const { input, ship_problems } = await gather(issue_number)
|
|
133
131
|
|
|
134
132
|
console.info(run_step.next_action(input).line)
|
|
135
|
-
// On stderr, so stdout stays the one action line
|
|
133
|
+
// On stderr, so stdout stays the one action line: what `josh ship` would
|
|
136
134
|
// refuse on is said at every step, while it is still cheap to meet.
|
|
137
135
|
if (ship_problems.length > 0) console.error(run_prep.ship_body(ship_problems))
|
|
138
136
|
|