@joshuafolkken/kit 1.1240.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 +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 +29 -47
- 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-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
- 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-ZQGD4GBY.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-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
- 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 +216 -202
- 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 +281 -94
- 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 +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 +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 +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 +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 +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/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-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 +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 +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 +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 +58 -47
- 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
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
3
5
|
import { josh_command } from '#scripts/josh/josh-run'
|
|
4
6
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
5
7
|
import { run_cut_report } from '#scripts/run/cut/run-cut-report'
|
|
8
|
+
import { run_event_plan } from '#scripts/run/event/run-event-plan'
|
|
6
9
|
import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
7
10
|
import { run_halfrun_resume } from '#scripts/run/run-halfrun-resume'
|
|
8
11
|
import { run_label } from '#scripts/run/run-label'
|
|
@@ -10,17 +13,21 @@ import { run_next } from '#scripts/run/run-next'
|
|
|
10
13
|
import { run_prep } from '#scripts/run/run-prep'
|
|
11
14
|
import { run_prep_cli } from '#scripts/run/run-prep-cli'
|
|
12
15
|
import { run_prrun_resume } from '#scripts/run/run-prrun-resume'
|
|
13
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
run_stage,
|
|
18
|
+
type StageCommand,
|
|
19
|
+
type StageDecision,
|
|
20
|
+
type StageState,
|
|
21
|
+
} from '#scripts/run/run-stage'
|
|
14
22
|
import { run_stage_read, type StageRead } from '#scripts/run/run-stage-read'
|
|
15
23
|
import { run_step } from '#scripts/run/run-step'
|
|
16
24
|
import { run_entry, type EntryParts } from './run-entry'
|
|
17
25
|
import { run_entry_stop } from './run-entry-stop'
|
|
18
26
|
|
|
19
|
-
// `josh run:entry <N>` — one call for the fixed entry sequence a lane opens on
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// folds three reads.
|
|
27
|
+
// `josh run:entry <N>` — one call for the fixed entry sequence a lane opens on. Rather than a round
|
|
28
|
+
// trip each on `run:hold`, `cost --cut`, `run:prep` and `run:step`, re-billing a lane's full context
|
|
29
|
+
// each time, this runs all four internally and prints one composite report, the same way
|
|
30
|
+
// `backlog:offer` folds `backlog:next` → `backlog:budget` and `run:prep` folds three reads.
|
|
24
31
|
//
|
|
25
32
|
// **The stops short-circuit.** A `busy` / `unknown` hold and an `over` budget both end the run, so the
|
|
26
33
|
// composite reports them without reading the issue — the gate `fullrun.md` steps 1 and 3 stop on stays a
|
|
@@ -31,7 +38,6 @@ import { run_entry_stop } from './run-entry-stop'
|
|
|
31
38
|
const ARGV_OFFSET = 2
|
|
32
39
|
const SUCCESS_EXIT_CODE = 0
|
|
33
40
|
const FAILURE_EXIT_CODE = 1
|
|
34
|
-
const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
|
|
35
41
|
const USAGE = 'Usage: josh run:entry <issue-number> [--to kickoff|halfrun|prrun|fullrun]'
|
|
36
42
|
const TO_FLAG = '--to'
|
|
37
43
|
// The flag and its command.
|
|
@@ -50,7 +56,11 @@ const HALFRUN_RESUME_TOKEN = 'halfrun'
|
|
|
50
56
|
function parse_number(argv: ReadonlyArray<string>): string | undefined {
|
|
51
57
|
const [first] = argv
|
|
52
58
|
|
|
53
|
-
if (
|
|
59
|
+
if (
|
|
60
|
+
first === undefined ||
|
|
61
|
+
argv.length !== 1 ||
|
|
62
|
+
!issue_number_shape.ISSUE_NUMBER_PATTERN.test(first)
|
|
63
|
+
) {
|
|
54
64
|
return undefined
|
|
55
65
|
}
|
|
56
66
|
|
|
@@ -62,7 +72,7 @@ interface EntryRequest {
|
|
|
62
72
|
command: StageCommand
|
|
63
73
|
}
|
|
64
74
|
|
|
65
|
-
// `--to <command>` names how far the run goes
|
|
75
|
+
// `--to <command>` names how far the run goes; absent, it is `fullrun`.
|
|
66
76
|
// Anything else is refused.
|
|
67
77
|
function parse_command(rest: ReadonlyArray<string>): StageCommand | undefined {
|
|
68
78
|
if (rest.length === 0) return run_stage.DEFAULT_COMMAND
|
|
@@ -87,7 +97,7 @@ function first_line(out: string): string {
|
|
|
87
97
|
|
|
88
98
|
// `run:hold <N>` prints one token — `hold`, `busy` or `unknown` — and forwards its explanation to
|
|
89
99
|
// stderr, so the composite branches on the token and the reader still sees why. `--fullrun` marks the
|
|
90
|
-
// hold as a run whose implementation cut resumes as `fullrun #N`
|
|
100
|
+
// hold as a run whose implementation cut resumes as `fullrun #N` — a
|
|
91
101
|
// `fullrun`'s, and a `prrun`'s, which runs `fullrun`'s steps; a `halfrun`'s hold is never marked.
|
|
92
102
|
async function claim_hold(issue_number: string, command: StageCommand): Promise<string> {
|
|
93
103
|
const mark = command === run_stage.HALFRUN ? [] : ['--fullrun']
|
|
@@ -116,7 +126,7 @@ interface Reads {
|
|
|
116
126
|
}
|
|
117
127
|
|
|
118
128
|
// The issue reads and the pre-implementation verdict, from the one gather `run:prep` and `run:next`
|
|
119
|
-
// already share
|
|
129
|
+
// already share rather than a second copy — the report is `run:prep`'s
|
|
120
130
|
// formatter, the verdict is `run:step`'s `pre_verdict` over the same parts.
|
|
121
131
|
async function gather_reads(issue_number: string): Promise<Reads> {
|
|
122
132
|
const reads = await run_prep_cli.gather(issue_number)
|
|
@@ -127,7 +137,7 @@ async function gather_reads(issue_number: string): Promise<Reads> {
|
|
|
127
137
|
}
|
|
128
138
|
|
|
129
139
|
function emit(parts: EntryParts): number {
|
|
130
|
-
console.info(run_entry.format_report(parts))
|
|
140
|
+
console.info(session_cite.text(run_entry.format_report(parts)))
|
|
131
141
|
|
|
132
142
|
return run_entry.exit_code(parts)
|
|
133
143
|
}
|
|
@@ -138,7 +148,7 @@ function stop_report(issue_number: string, hold: string, cost: string, report: s
|
|
|
138
148
|
return emit({ issue_number, hold, cost, verdict: run_entry.NO_VERDICT, report })
|
|
139
149
|
}
|
|
140
150
|
|
|
141
|
-
// A stop this command decided carries its own chores
|
|
151
|
+
// A stop this command decided carries its own chores: the `confirmation`
|
|
142
152
|
// Telegram always, and the release where this call claimed the hold — `run_entry_stop` says why.
|
|
143
153
|
interface StopCall {
|
|
144
154
|
parts: Pick<EntryParts, 'issue_number' | 'hold' | 'cost' | 'report'>
|
|
@@ -160,9 +170,9 @@ interface Resume {
|
|
|
160
170
|
code: number
|
|
161
171
|
}
|
|
162
172
|
|
|
163
|
-
// **A resume is asked before the hold is claimed
|
|
164
|
-
//
|
|
165
|
-
//
|
|
173
|
+
// **A resume is asked before the hold is claimed.** An implementation cut outside a lane keeps its
|
|
174
|
+
// hold, so the fresh session's `fullrun #N` would otherwise be refused `busy` by its own run's hold
|
|
175
|
+
// before it ever reached `run:cut --resume` — the hand-off the cut promised could not land.
|
|
166
176
|
async function ask_resume(issue_number: string): Promise<Resume> {
|
|
167
177
|
const asked = await josh_command.josh_run(
|
|
168
178
|
['run:cut', '--resume', issue_number],
|
|
@@ -175,16 +185,16 @@ async function ask_resume(issue_number: string): Promise<Resume> {
|
|
|
175
185
|
// Anything but `fresh` is `run:cut --resume`'s answer to act on (`pre-gate-cut.md`), not a new run: the
|
|
176
186
|
// token and its exit code are passed through, and nothing is claimed or read.
|
|
177
187
|
function resume_report(issue_number: string, resume: Resume): number {
|
|
178
|
-
console.info(`entry
|
|
188
|
+
console.info(`entry ${session_cite.issue(issue_number)} — resume: ${resume.token}`)
|
|
179
189
|
|
|
180
190
|
return resume.code
|
|
181
191
|
}
|
|
182
192
|
|
|
183
|
-
// **A `halfrun` stopped before its commit is resumed, not claimed
|
|
193
|
+
// **A `halfrun` stopped before its commit is resumed, not claimed**: its hold
|
|
184
194
|
// is kept over the verified diff, so the claim below would answer `busy` against it. The budget is asked
|
|
185
195
|
// first, as for any run; then the hold is adopted and the run goes to the gate, skipping everything up
|
|
186
|
-
// to and including implementation. **A `prrun` stopped before its merge is resumed the same way
|
|
187
|
-
//
|
|
196
|
+
// to and including implementation. **A `prrun` stopped before its merge is resumed the same way**,
|
|
197
|
+
// under the token that says what is left of it.
|
|
188
198
|
async function resume_stopped(
|
|
189
199
|
{ issue_number, command }: EntryRequest,
|
|
190
200
|
token: string,
|
|
@@ -204,7 +214,7 @@ async function resume_stopped(
|
|
|
204
214
|
return await stop_run({ parts, command, reason: HOLD_REASON, should_release: false })
|
|
205
215
|
}
|
|
206
216
|
|
|
207
|
-
console.info(`entry
|
|
217
|
+
console.info(`entry ${session_cite.issue(issue_number)} — resume: ${token}`)
|
|
208
218
|
|
|
209
219
|
return SUCCESS_EXIT_CODE
|
|
210
220
|
}
|
|
@@ -225,15 +235,21 @@ async function resume_any(
|
|
|
225
235
|
: await resume_stopped(request, stage.prrun_token, run_prrun_resume)
|
|
226
236
|
}
|
|
227
237
|
|
|
228
|
-
// **A command whose stopping point the issue has already reached redoes nothing**
|
|
229
|
-
//
|
|
238
|
+
// **A command whose stopping point the issue has already reached redoes nothing** — the stage line is
|
|
239
|
+
// the whole report. A merged issue is the exception: the ordinary entry already
|
|
230
240
|
// answers it (`already-done`, or `keep-work` over a lane's uncommitted work), so it is left to that.
|
|
231
241
|
function is_settled(decision: StageDecision): boolean {
|
|
232
242
|
return decision.is_reached && decision.state !== run_stage.MERGED
|
|
233
243
|
}
|
|
234
244
|
|
|
245
|
+
// A planned issue was planned by `kickoff`, whose entry claims nothing, so the claim that starts past
|
|
246
|
+
// the plan writes the `plan` event `run:board` draws 📝 from.
|
|
247
|
+
async function mark_planned(issue_number: string, state: StageState): Promise<void> {
|
|
248
|
+
if (state === run_stage.PLANNED) await run_event_plan.emit_plan(issue_number)
|
|
249
|
+
}
|
|
250
|
+
|
|
235
251
|
// The tree is held and the budget allows the run, so the issue is marked as running before its reads
|
|
236
|
-
//
|
|
252
|
+
// — the label then shows in the `labels:` line the report below carries.
|
|
237
253
|
async function proceed(issue_number: string, hold: string, cost: string): Promise<number> {
|
|
238
254
|
await run_label.mark(issue_number)
|
|
239
255
|
const reads = await gather_reads(issue_number)
|
|
@@ -241,7 +257,10 @@ async function proceed(issue_number: string, hold: string, cost: string): Promis
|
|
|
241
257
|
return emit({ issue_number, hold, cost, verdict: reads.verdict, report: reads.report })
|
|
242
258
|
}
|
|
243
259
|
|
|
244
|
-
async function claim_run(
|
|
260
|
+
async function claim_run(
|
|
261
|
+
{ issue_number, command }: EntryRequest,
|
|
262
|
+
state: StageState,
|
|
263
|
+
): Promise<number> {
|
|
245
264
|
const hold = await claim_hold(issue_number, command)
|
|
246
265
|
|
|
247
266
|
if (hold !== run_hold_cli.HOLD_VERDICT) {
|
|
@@ -258,6 +277,8 @@ async function claim_run({ issue_number, command }: EntryRequest): Promise<numbe
|
|
|
258
277
|
return await stop_run({ parts, command, reason: BUDGET_REASON, should_release: true })
|
|
259
278
|
}
|
|
260
279
|
|
|
280
|
+
await mark_planned(issue_number, state)
|
|
281
|
+
|
|
261
282
|
return await proceed(issue_number, hold, cost)
|
|
262
283
|
}
|
|
263
284
|
|
|
@@ -283,11 +304,11 @@ async function open_run(request: EntryRequest): Promise<number> {
|
|
|
283
304
|
const stage = await run_stage_read.read_stage(issue_number)
|
|
284
305
|
const decision = run_stage.decide(stage.state, command)
|
|
285
306
|
|
|
286
|
-
console.info(run_stage.format_decision(issue_number, decision))
|
|
307
|
+
console.info(session_cite.text(run_stage.format_decision(issue_number, decision)))
|
|
287
308
|
|
|
288
309
|
if (command === run_stage.KICKOFF || is_settled(decision)) return SUCCESS_EXIT_CODE
|
|
289
310
|
|
|
290
|
-
return (await resume_any(request, decision, stage)) ?? (await claim_run(request))
|
|
311
|
+
return (await resume_any(request, decision, stage)) ?? (await claim_run(request, decision.state))
|
|
291
312
|
}
|
|
292
313
|
|
|
293
314
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
1
2
|
import { josh_command } from '#scripts/josh/josh-run'
|
|
2
3
|
import { telegram_notify } from '#scripts/notify/telegram-notify'
|
|
3
4
|
import { lane_park } from '#scripts/rules/lane-park'
|
|
4
5
|
|
|
5
|
-
// What `run:entry` does on the way out of a stop it decided itself
|
|
6
|
+
// What `run:entry` does on the way out of a stop it decided itself.
|
|
6
7
|
//
|
|
7
|
-
// **The
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// eleven measured sessions the hook sent a reply back five times for exactly those two calls, each one a
|
|
11
|
-
// further turn re-reading the whole context. The command that decides the stop knows everything the
|
|
12
|
-
// chores need, so it does them, and the hook stays a safety net that a normal run never trips.
|
|
8
|
+
// **The command that decides the stop does its chores** — the `confirmation` Telegram and the hold
|
|
9
|
+
// release — because it knows everything they need, and leaving them to the agent costs further turns
|
|
10
|
+
// re-reading the whole context. The `Stop` hook stays a safety net that a normal run never trips.
|
|
13
11
|
//
|
|
14
12
|
// **The release is the claim's own undo, and only where this call made the claim.** A resume over a
|
|
15
13
|
// stopped `halfrun` / `prrun` stops on the budget before adopting anything, and the hold there is the
|
|
@@ -58,7 +56,7 @@ function is_parking_child(): boolean {
|
|
|
58
56
|
const DEFAULT_PORTS: StopPorts = { notify: telegram_notify.confirm, release, is_parking_child }
|
|
59
57
|
|
|
60
58
|
function body_of(notice: StopNotice): string {
|
|
61
|
-
return `${notice.command}
|
|
59
|
+
return `${notice.command} ${issue_cite.plain(notice.issue_number)} stopped at entry: ${notice.reason}.\nResume with \`${notice.command} ${issue_cite.plain(notice.issue_number)}\`.`
|
|
62
60
|
}
|
|
63
61
|
|
|
64
62
|
// The release runs first, so the resume the Telegram names finds the tree free when a person acts on it.
|
|
@@ -77,7 +75,7 @@ async function notify_stop(notice: StopNotice, ports: StopPorts): Promise<void>
|
|
|
77
75
|
if (ports.is_parking_child()) return
|
|
78
76
|
|
|
79
77
|
const is_sent = await ports.notify({
|
|
80
|
-
issue_title: `${notice.command}
|
|
78
|
+
issue_title: `${notice.command} ${issue_cite.plain(notice.issue_number)} stopped`,
|
|
81
79
|
body: body_of(notice),
|
|
82
80
|
recovery: RECOVERY,
|
|
83
81
|
})
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
2
2
|
import { run_step } from '#scripts/run/run-step'
|
|
3
3
|
|
|
4
|
-
// `josh run:entry <N>` — the one call a `fullrun` makes to open a run
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// the
|
|
8
|
-
//
|
|
9
|
-
// round trips, so collapsing four into one is where the fold pays the most.
|
|
4
|
+
// `josh run:entry <N>` — the one call a `fullrun` makes to open a run. It folds the fixed entry
|
|
5
|
+
// sequence of four round trips — claim the tree (`run:hold`), read the session budget (`cost --cut`),
|
|
6
|
+
// gather the issue reads (`run:prep`), and decide the pre-implementation step (`run:step`) — into one
|
|
7
|
+
// composite, the same shape `backlog:offer` gives the parent loop head. Context cost grows with the
|
|
8
|
+
// square of a lane's round trips, so collapsing four into one is where the fold pays the most.
|
|
10
9
|
//
|
|
11
10
|
// **This module is the pure half**, kept apart from the chaining CLI the way `run-prep.ts` is kept from
|
|
12
11
|
// `run-prep-cli.ts` and `run-review.ts` from its steps. It shapes the summary line the reader branches
|
|
@@ -10,20 +10,19 @@ import { run_event_stream_emit } from './run-event-stream-emit'
|
|
|
10
10
|
import { run_event_watch } from './run-event-watch'
|
|
11
11
|
|
|
12
12
|
// `josh run:event` — the command a run's step calls to append to, or read back, the append-only event
|
|
13
|
-
// stream
|
|
13
|
+
// stream. The in-process seams (`run:merge`) append directly; the steps with no
|
|
14
14
|
// josh command at the point the event happens — a plan posted, a child launched, a PR opened, a stop —
|
|
15
15
|
// call `--append` here, so parent and lane child alike write to the one stream. `--from` is the woken
|
|
16
16
|
// reader's "everything since the position I last read"; `--last` is the degenerate single-event read.
|
|
17
17
|
//
|
|
18
|
-
// **`--follow` is one bounded read that waits
|
|
18
|
+
// **`--follow` is one bounded read that waits.** It is `--from` that returns
|
|
19
19
|
// the moment an event is past the given position, and otherwise at the interval. The lines go to
|
|
20
20
|
// standard output and the position to read from next goes to standard error — the same before and after
|
|
21
21
|
// a session cut, because the stream is the run's and the position is the caller's.
|
|
22
22
|
//
|
|
23
|
-
// **`--watch` is the ambient surface: the same pass in a loop that never exits
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
// whole history each time, and outspent every lane of the run doing it.
|
|
23
|
+
// **`--watch` is the ambient surface: the same pass in a loop that never exits**, each event rendered
|
|
24
|
+
// in the session language (`run-event-render.ts`), for a person to keep open in a pane of their own. No
|
|
25
|
+
// conversation relays the stream — a session woken per event would re-read its whole history each time.
|
|
27
26
|
|
|
28
27
|
const ARGV_OFFSET = 2
|
|
29
28
|
const SUCCESS_EXIT_CODE = 0
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import {
|
|
3
|
+
BREAKING_CHANGE_LABEL,
|
|
4
|
+
BUG_LABEL,
|
|
5
|
+
ENHANCEMENT_LABEL,
|
|
6
|
+
has_label_name,
|
|
7
|
+
} from '#scripts/issue/issue-labels'
|
|
8
|
+
|
|
9
|
+
// The text of a `filed` event: the Issue a run filed, its kind, its title, and the child whose work
|
|
10
|
+
// turned it up. `issue:file` writes it and `run:board` reads it back, both through this module, so the
|
|
11
|
+
// two never spell it differently.
|
|
12
|
+
|
|
13
|
+
// The classification labels a filing's kind is read from, in precedence order: a breaking change is
|
|
14
|
+
// named as one whatever else it is.
|
|
15
|
+
const KINDS = [BREAKING_CHANGE_LABEL, BUG_LABEL, ENHANCEMENT_LABEL] as const
|
|
16
|
+
|
|
17
|
+
type FiledKind = (typeof KINDS)[number]
|
|
18
|
+
|
|
19
|
+
interface Filed {
|
|
20
|
+
// `#<N>` for this repository's Issue, `<owner>/<repo>#<N>` for one filed elsewhere.
|
|
21
|
+
reference: string
|
|
22
|
+
// The filing's classification label; none where it carries none of `KINDS`, and on an event written
|
|
23
|
+
// before the kind was recorded.
|
|
24
|
+
kind: FiledKind | undefined
|
|
25
|
+
title: string
|
|
26
|
+
// The lane child that was working when the Issue was filed, when the filing came from one.
|
|
27
|
+
found_during: string | undefined
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// The kind slot is always written, `[<label>]` or `[]`, against the reference with no space: an event
|
|
31
|
+
// written before the kind always has the space there, so no title, whatever it opens with, reads as a
|
|
32
|
+
// kind.
|
|
33
|
+
const TEXT_PATTERN = new RegExp(
|
|
34
|
+
String.raw`^(?<reference>\S*#\d+)(?:\[(?<kind>${KINDS.join('|')}|)\])? (?<title>.*?)(?: \(found during #(?<during>\d+)\))?$`,
|
|
35
|
+
'u',
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
// Through the case-insensitive comparison GitHub applies, so a `--label Bug` filing is still a bug.
|
|
39
|
+
function kind_of(labels: ReadonlyArray<string>): FiledKind | undefined {
|
|
40
|
+
return KINDS.find((kind) => has_label_name(labels, kind))
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function text_of(filed: Filed): string {
|
|
44
|
+
const kind = `[${filed.kind ?? ''}]`
|
|
45
|
+
const suffix =
|
|
46
|
+
filed.found_during === undefined
|
|
47
|
+
? ''
|
|
48
|
+
: ` (found during ${issue_cite.plain(filed.found_during)})`
|
|
49
|
+
|
|
50
|
+
return `${filed.reference}${kind} ${filed.title}${suffix}`
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function parse(text: string): Filed | undefined {
|
|
54
|
+
const groups = TEXT_PATTERN.exec(text)?.groups
|
|
55
|
+
|
|
56
|
+
if (groups === undefined) return undefined
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
reference: String(groups['reference']),
|
|
60
|
+
kind: KINDS.find((kind) => kind === groups['kind']),
|
|
61
|
+
title: String(groups['title']),
|
|
62
|
+
found_during: groups['during'],
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const run_event_filed = { kind_of, parse, text_of }
|
|
67
|
+
|
|
68
|
+
export { run_event_filed }
|
|
69
|
+
export type { Filed, FiledKind }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { StreamRead } from './run-event-stream'
|
|
2
2
|
|
|
3
|
-
// The follow read behind `josh run:event --follow` and `--watch
|
|
3
|
+
// The follow read behind `josh run:event --follow` and `--watch`. A reader
|
|
4
4
|
// asks the run's event stream for "everything since the position I last read" — and must see **both** a
|
|
5
5
|
// new event's arrival, promptly, and the interval passing when nothing new has happened, so a person
|
|
6
6
|
// watching sees progress land at once and still sees the run is alive when it is quiet.
|
|
@@ -8,12 +8,12 @@ import type { StreamRead } from './run-event-stream'
|
|
|
8
8
|
// **This is one bounded pass, not the loop.** It returns as soon as any event is past the caller's
|
|
9
9
|
// position (the arrival), or when the interval elapses having found none (the quiet tick); the caller
|
|
10
10
|
// shows what came back and asks again from the returned position. The loop is `run-event-watch.ts`,
|
|
11
|
-
// run in a pane of its own rather than by a session restarting the pass
|
|
11
|
+
// run in a pane of its own rather than by a session restarting the pass.
|
|
12
12
|
//
|
|
13
13
|
// **It reads the run's stream, not a session's.** `read` is `run_event_stream.read_from` bound to the
|
|
14
14
|
// run-keyed target, and the position is the caller's own, so the pass answers the same before and after
|
|
15
15
|
// a `backlogrun` session cut: a cut changes who executes, never what the stream says or where a reader
|
|
16
|
-
// stands in it. That invariant is
|
|
16
|
+
// stands in it. That invariant is why this takes ports rather
|
|
17
17
|
// than resolving a target itself — the test drives it with a stream it controls and a clock it advances.
|
|
18
18
|
//
|
|
19
19
|
// **It is a poll, and deliberately not `run:progress`'s loop.** That one reads GitHub observations and
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { run_event_scope } from './run-event-scope'
|
|
3
|
+
import { run_event_stream, type RunEvent } from './run-event-stream'
|
|
4
|
+
import { run_event_stream_emit } from './run-event-stream-emit'
|
|
5
|
+
|
|
6
|
+
// The `plan` event `run:board` draws 📝 from, written by code rather than by a step a child runs by hand,
|
|
7
|
+
// which children skip — and every `run:planned` issue's entry starts past the plan. Two callers write
|
|
8
|
+
// it: `run:entry` when a planned issue is claimed, and the first implementation edit of a lane child,
|
|
9
|
+
// which is where the Step 0 work summary falls due. **Once per launch of the issue**, so the second
|
|
10
|
+
// of the two adds nothing, while a re-dispatched child — whose launch restarts its `run:board` track —
|
|
11
|
+
// writes its own.
|
|
12
|
+
|
|
13
|
+
const KIND = run_event_stream.EVENT_KIND.PLAN
|
|
14
|
+
const PLAN_VERB = 'planned'
|
|
15
|
+
|
|
16
|
+
function plan_text(issue: string): string {
|
|
17
|
+
return `${PLAN_VERB} ${issue_cite.plain(issue)}`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function has_plan(events: ReadonlyArray<RunEvent>, issue: string): boolean {
|
|
21
|
+
return run_event_scope
|
|
22
|
+
.since_own_launch(events, issue)
|
|
23
|
+
.some((event) => event.kind === KIND && run_event_scope.issue_named(event) === issue)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Append the issue's `plan` event unless its newest launch already carries one. Best-effort
|
|
28
|
+
* like every emit: a failed read is an empty invocation, a failed append is swallowed.
|
|
29
|
+
*/
|
|
30
|
+
async function emit_plan(issue: string): Promise<void> {
|
|
31
|
+
if (has_plan(await run_event_stream_emit.invocation_or_all_events(), issue)) return
|
|
32
|
+
|
|
33
|
+
await run_event_stream_emit.emit(KIND, plan_text(issue))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const run_event_plan = { emit_plan, plan_text }
|
|
37
|
+
|
|
38
|
+
export { run_event_plan }
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { EventKind, RunEvent } from './run-event-stream'
|
|
2
2
|
|
|
3
|
-
// One run event as the line a person reads in the watch pane
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// one label per event kind, in the session language, beside the local clock time.
|
|
3
|
+
// One run event as the line a person reads in the watch pane. The pane is a script, not a session, so
|
|
4
|
+
// the wording is supplied here — one label per event kind, in the session language, beside the local
|
|
5
|
+
// clock time.
|
|
7
6
|
//
|
|
8
7
|
// **The kinds are a fixed enumeration** (`run-event-stream.ts` → `EVENT_KIND`), so a template table is
|
|
9
8
|
// the whole renderer; a kind the table does not name — a stream written by a newer kit — prints its raw
|
|
@@ -40,6 +39,12 @@ const KIND_LABELS: Readonly<Record<EventKind, KindLabel>> = {
|
|
|
40
39
|
heartbeat: { ja: '生存確認', en: 'heartbeat' },
|
|
41
40
|
'ship-launch': { ja: '出荷を開始', en: 'ship launched' },
|
|
42
41
|
'ship-stop': { ja: '出荷が停止', en: 'ship stopped' },
|
|
42
|
+
idle: { ja: '新着待ち', en: 'idle watch' },
|
|
43
|
+
filed: { ja: '起票', en: 'filed' },
|
|
44
|
+
note: { ja: '意見', en: 'note' },
|
|
45
|
+
'lane-phase': { ja: 'レーンの段階', en: 'lane phase' },
|
|
46
|
+
add: { ja: '割り込み', en: 'added' },
|
|
47
|
+
'lane-limit': { ja: 'レーン上限', en: 'lane limit' },
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
const LABELS_BY_KIND: ReadonlyMap<string, KindLabel> = new Map(Object.entries(KIND_LABELS))
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
1
2
|
import type { CarryRead } from '#scripts/run/carry/run-carry'
|
|
2
3
|
import { run_event_stream, type RunEvent } from './run-event-stream'
|
|
3
4
|
|
|
4
|
-
// The one place a stream consumer scopes the event stream to a single invocation
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// mechanism, published once, so `run:report`, the retrospective digest and `run:step` share one time filter
|
|
10
|
-
// rather than each writing it again — the second copy `CLAUDE.md` forbids as a clone.
|
|
5
|
+
// The one place a stream consumer scopes the event stream to a single invocation. The stream is the
|
|
6
|
+
// repository's event log, not this run's — it outlives every invocation by design — so a consumer handed
|
|
7
|
+
// every event treats a previous invocation's merges, parks and cuts as its own. The carry record's
|
|
8
|
+
// `started_at` is the lower bound, filtered by each event's own time, published once so `run:report`, the
|
|
9
|
+
// retrospective digest and `run:step` share one time filter rather than each writing it again.
|
|
11
10
|
//
|
|
12
11
|
// **It never rounds an undetermined scope back to the whole stream.** A scope that cannot be determined — no
|
|
13
12
|
// carry record, an unreadable one, or a start time that is not a time — answers `undefined`, and each
|
|
14
|
-
// consumer falls to the "could not determine" side rather than showing every invocation's events
|
|
15
|
-
// exactly the rounding #2308 and #2393 named.
|
|
13
|
+
// consumer falls to the "could not determine" side rather than showing every invocation's events.
|
|
16
14
|
|
|
17
15
|
const SINCE_SCOPE = 'since'
|
|
18
16
|
const UNKNOWN_SCOPE = 'unknown'
|
|
@@ -71,19 +69,19 @@ function scope_of(read: CarryRead): EventScope {
|
|
|
71
69
|
|
|
72
70
|
// The newest event within scope, or `undefined` when the scope could not be determined or nothing falls
|
|
73
71
|
// inside it. The "last line" consumers read this rather than the raw newest event, so a stale event a
|
|
74
|
-
// previous invocation left on the stream is never read as this run's position
|
|
72
|
+
// previous invocation left on the stream is never read as this run's position.
|
|
75
73
|
function last_scoped_event(
|
|
76
74
|
events: ReadonlyArray<RunEvent>,
|
|
77
75
|
scope: EventScope,
|
|
78
76
|
): RunEvent | undefined {
|
|
79
|
-
// Trace events (a `josh ship` stage line
|
|
77
|
+
// Trace events (a `josh ship` stage line) are skipped, as `read_last` skips
|
|
80
78
|
// them, so `run:step` reads the run's position rather than an unknown `ship-stage`.
|
|
81
79
|
return scoped_events(events, scope)?.findLast(
|
|
82
80
|
(event) => !run_event_stream.TRACE_KINDS.has(event.kind),
|
|
83
81
|
)
|
|
84
82
|
}
|
|
85
83
|
|
|
86
|
-
// The positions a detached `josh ship` supervisor leaves
|
|
84
|
+
// The positions a detached `josh ship` supervisor leaves. Each names its issue
|
|
87
85
|
// (`#<N> …`), so they are self-scoping where the carry scope is not: the stream is shared by every lane,
|
|
88
86
|
// and another lane's supervisor must never be read as this run's position.
|
|
89
87
|
const SHIP_POSITION_KINDS: ReadonlySet<string> = new Set([
|
|
@@ -108,20 +106,27 @@ const BATCH_RECORD_KINDS: ReadonlySet<string> = new Set([
|
|
|
108
106
|
const ISSUE_REFERENCE = /#(\d+)/u
|
|
109
107
|
|
|
110
108
|
function is_foreign_ship_event(event: RunEvent, issue: string): boolean {
|
|
111
|
-
return
|
|
109
|
+
return (
|
|
110
|
+
SHIP_POSITION_KINDS.has(event.kind) && !event.text.startsWith(`${issue_cite.plain(issue)} `)
|
|
111
|
+
)
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
function is_own_ship_event(event: RunEvent, issue: string): boolean {
|
|
115
115
|
return SHIP_POSITION_KINDS.has(event.kind) && !is_foreign_ship_event(event, issue)
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
// The issue an event's text names, the way every reader here — and `run:board` — keys an event to a child.
|
|
119
|
+
function issue_named(event: RunEvent): string | undefined {
|
|
120
|
+
return ISSUE_REFERENCE.exec(event.text)?.[1]
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// **A lane child's position is read only from events that name its own issue.** The parent and every
|
|
124
|
+
// lane append to one stream under one carry scope, so anything else on it is another run's: another
|
|
125
|
+
// lane's merge, the parent's stall (which names no issue) or another lane's cut would misdirect the
|
|
126
|
+
// child. The child's own merge and
|
|
122
127
|
// outage stay, so the parent-only stop in `run-step.ts` still holds; the parent keeps reading everything.
|
|
123
128
|
function names_issue(event: RunEvent, issue: string): boolean {
|
|
124
|
-
return
|
|
129
|
+
return issue_named(event) === issue
|
|
125
130
|
}
|
|
126
131
|
|
|
127
132
|
function is_lane_position(event: RunEvent, issue: string): boolean {
|
|
@@ -164,12 +169,36 @@ function last_issue_event(
|
|
|
164
169
|
return own.findLast((event) => is_own_ship_event(event, issue))
|
|
165
170
|
}
|
|
166
171
|
|
|
172
|
+
// A child's launch and the endings `run:merge` settles it with — the ones `run:board` stops drawing it
|
|
173
|
+
// running on. A park or a split already ran `run:merge`, so a child closed after one owes nothing.
|
|
174
|
+
const LAUNCH_OR_SETTLE_KINDS: ReadonlySet<string> = new Set([
|
|
175
|
+
KIND.CHILD_LAUNCH,
|
|
176
|
+
KIND.MERGE,
|
|
177
|
+
KIND.PARK,
|
|
178
|
+
KIND.SPLIT,
|
|
179
|
+
])
|
|
180
|
+
|
|
181
|
+
// Whether this invocation's newest launch of the issue has not yet been settled.
|
|
182
|
+
// `run:merge` is the merge event's one writer, so a child that closed without it stays running on
|
|
183
|
+
// `run:board`; `run:step` reads this to point the parent at the merge. An undetermined scope owes nothing.
|
|
184
|
+
function is_merge_owed(events: ReadonlyArray<RunEvent>, scope: EventScope, issue: string): boolean {
|
|
185
|
+
const newest = (scoped_events(events, scope) ?? []).findLast(
|
|
186
|
+
(event) => LAUNCH_OR_SETTLE_KINDS.has(event.kind) && names_issue(event, issue),
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
return newest?.kind === KIND.CHILD_LAUNCH
|
|
190
|
+
}
|
|
191
|
+
|
|
167
192
|
const run_event_scope = {
|
|
168
193
|
UNKNOWN_EVENT_SCOPE,
|
|
194
|
+
is_merge_owed,
|
|
195
|
+
issue_named,
|
|
169
196
|
last_issue_event,
|
|
170
197
|
last_scoped_event,
|
|
198
|
+
moment_of,
|
|
171
199
|
scope_of,
|
|
172
200
|
scoped_events,
|
|
201
|
+
since_own_launch,
|
|
173
202
|
}
|
|
174
203
|
|
|
175
204
|
export type { EventScope }
|