@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,7 +1,7 @@
|
|
|
1
1
|
import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
|
|
2
2
|
|
|
3
3
|
// `josh run:progress` — the one line an unattended run prints when it has gone quiet, and the clock
|
|
4
|
-
// that decides when that is
|
|
4
|
+
// that decides when that is.
|
|
5
5
|
//
|
|
6
6
|
// **The trigger is silence, not a timer.** An `epicrun` reports when a child merges or is parked, and
|
|
7
7
|
// a child is 20–46 minutes of wall clock; between those two events it says nothing at all, so the
|
|
@@ -10,11 +10,9 @@ import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
|
|
|
10
10
|
// from the last report of *any* kind, so a heartbeat never lands immediately behind a real one, where
|
|
11
11
|
// it would be noise rather than news. `--mark` is how the run tells this clock a real report happened.
|
|
12
12
|
//
|
|
13
|
-
// **A line that could say "still running" is a line not worth printing.**
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
// is twenty minutes (joshuafolkken/kit#1570): a child measures 20–46 minutes, and twenty gives one to
|
|
17
|
-
// two reports per child rather than a run of lines saying what the last one said. Every field below is
|
|
13
|
+
// **A line that could say "still running" is a line not worth printing.** The default is twenty
|
|
14
|
+
// minutes: a child measures 20–46 minutes, and twenty gives one to two reports per child rather than a
|
|
15
|
+
// run of lines saying what the last one said. Every field below is
|
|
18
16
|
// re-read on each tick rather than remembered — a child's labels, whether a pull request exists yet,
|
|
19
17
|
// which lanes are open, the load average, and how long the whole set has been identical.
|
|
20
18
|
//
|
|
@@ -28,20 +26,17 @@ import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
|
|
|
28
26
|
// it prints about a pull request is that one exists and what state GitHub calls it — which is a read
|
|
29
27
|
// it actually performs.
|
|
30
28
|
//
|
|
31
|
-
// **The line also says *when* it was observed, and not only how long the silence had run
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
// concluded the machine's clock was broken when it matched GitHub's `Date` header to the second. Three
|
|
35
|
-
// decisions follow from that, and each is a decision rather than a default:
|
|
29
|
+
// **The line also says *when* it was observed, and not only how long the silence had run.** A
|
|
30
|
+
// relative figure means something only while the reports keep coming: a run suspended overnight would
|
|
31
|
+
// read its own `quiet 11m` as if no time had passed. Three decisions follow from that:
|
|
36
32
|
//
|
|
37
|
-
// - **The date is carried, not just the clock time.**
|
|
38
|
-
//
|
|
33
|
+
// - **The date is carried, not just the clock time.** A suspension can cross a day boundary, so an
|
|
34
|
+
// `HH:MM` alone would leave the same hole open.
|
|
39
35
|
// - **The local clock leads, and UTC is printed beside it.** The local half is the one a person can
|
|
40
|
-
// act on without converting anything
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// together, so a reader on a third machine can place both.
|
|
36
|
+
// act on without converting anything. UTC is kept because the line is read from other machines and
|
|
37
|
+
// from cloud sessions, where a timestamp rendered in the reader's zone makes one process look like a
|
|
38
|
+
// stranger. The printed offset ties the two halves together, so a reader on a third machine can
|
|
39
|
+
// place both.
|
|
45
40
|
// - **It is added beside the elapsed figures, never in place of them.** How long it has been quiet and
|
|
46
41
|
// when the observation was taken are two different facts, and neither can be reconstructed from the
|
|
47
42
|
// other without knowing the answer already.
|
|
@@ -53,13 +48,16 @@ const INTERVAL_KEY = 'JOSH_PROGRESS_INTERVAL_MINUTES'
|
|
|
53
48
|
const MS_PER_MINUTE = 60_000
|
|
54
49
|
const MS_PER_SECOND = 1000
|
|
55
50
|
const DEFAULT_INTERVAL_MS = DEFAULT_INTERVAL_MINUTES * MS_PER_MINUTE
|
|
51
|
+
// The switch that silences every progress report — the watcher's and `run:board --every`'s alike.
|
|
52
|
+
const DISABLED_KEY = 'JOSH_PROGRESS'
|
|
53
|
+
const DISABLED_VALUE = '0'
|
|
56
54
|
|
|
57
55
|
// What one child looked like on this tick. `pr_state` is `run_preflight`'s own vocabulary rather than
|
|
58
56
|
// a second spelling of it — `none` / `open` / `merged` / `closed`.
|
|
59
57
|
interface ChildObservation {
|
|
60
58
|
issue: string
|
|
61
59
|
// Kept from the `in-progress` listing the child was read from, so the line cites it in full
|
|
62
|
-
//
|
|
60
|
+
// without a read per child.
|
|
63
61
|
title: string
|
|
64
62
|
labels: ReadonlyArray<string>
|
|
65
63
|
pr_state: string
|
|
@@ -89,16 +87,15 @@ interface ProgressState {
|
|
|
89
87
|
}
|
|
90
88
|
|
|
91
89
|
const NO_LANES = 'none'
|
|
92
|
-
// The children slot when the run has started but no child carries `in-progress` yet
|
|
93
|
-
//
|
|
90
|
+
// The children slot when the run has started but no child carries `in-progress` yet. It is an
|
|
91
|
+
// observed fact — zero in-progress children — not a guess about
|
|
94
92
|
// what will appear: `read_observations` returns an observation at all only because a mechanical record
|
|
95
93
|
// (a lane, a hold, or a carried budget) says a run is underway, and the lanes field beside this one
|
|
96
94
|
// carries whatever evidence exists.
|
|
97
95
|
const NO_CHILD_YET = 'no in-progress child yet'
|
|
98
|
-
// The fifth line's value when there is no scheduled next report. The command always supplies one,
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
// renderer, so its contract states the absence rather than assuming a stamp is always there.
|
|
96
|
+
// The fifth line's value when there is no scheduled next report. The command always supplies one, but
|
|
97
|
+
// a line with no `next` field says the field was absent rather than inventing a time: `format_report`
|
|
98
|
+
// is a pure renderer, so its contract states the absence rather than assuming a stamp is always there.
|
|
102
99
|
const NO_NEXT = 'none'
|
|
103
100
|
const QUIET_MARKER = '⏳'
|
|
104
101
|
// `1970-01-01T00:00:00.000Z` cut after the minutes. Seconds are dropped because the interval this line
|
|
@@ -145,16 +142,14 @@ function format_offset(total_minutes: number): string {
|
|
|
145
142
|
/**
|
|
146
143
|
* The instant this observation was taken, on the local clock and in UTC, with its date on both.
|
|
147
144
|
*
|
|
148
|
-
* **The local half leads because it is the half a person can act on.**
|
|
149
|
-
*
|
|
150
|
-
* convert before it meant anything — which is the same failure joshuafolkken/kit#1560 filed, arriving
|
|
151
|
-
* from the other side: a stamp nobody can place is a stamp nobody reads.
|
|
145
|
+
* **The local half leads because it is the half a person can act on.** UTC alone is a number the
|
|
146
|
+
* reader has to convert before it means anything, and a stamp nobody can place is a stamp nobody reads.
|
|
152
147
|
*
|
|
153
|
-
* **UTC is kept beside it rather than replaced.** The
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
148
|
+
* **UTC is kept beside it rather than replaced.** The line is relayed to other machines and read in
|
|
149
|
+
* cloud sessions, where a timestamp rendered in the reader's zone makes one process look like a
|
|
150
|
+
* stranger. Printing both costs twenty-five characters and leaves neither reader guessing — the
|
|
151
|
+
* offset is what ties the two halves together, so a reader on a third machine can place the local
|
|
152
|
+
* half as well.
|
|
158
153
|
*
|
|
159
154
|
* **The local half is read off the instant shifted by that same rounded offset, never off `getHours`
|
|
160
155
|
* and `getMinutes`.** Those truncate the seconds of a sub-minute offset while the offset beside them
|
|
@@ -202,8 +197,8 @@ function next_state(
|
|
|
202
197
|
return { key, unchanged_since_ms: now_ms }
|
|
203
198
|
}
|
|
204
199
|
|
|
205
|
-
// The issue leads as a citation rather than a bare `#N
|
|
206
|
-
//
|
|
200
|
+
// The issue leads as a citation rather than a bare `#N`: the parent relays these lines verbatim, and
|
|
201
|
+
// a bare number copied into a reply is what the Stop guard sends back.
|
|
207
202
|
function format_child(child: ChildObservation, cite: IssueCiter): string {
|
|
208
203
|
const labels = child.labels.length > 0 ? child.labels.join(',') : '(no labels)'
|
|
209
204
|
|
|
@@ -211,9 +206,8 @@ function format_child(child: ChildObservation, cite: IssueCiter): string {
|
|
|
211
206
|
}
|
|
212
207
|
|
|
213
208
|
// An empty set is the pre-label stage, said as such rather than left as a blank slot between the
|
|
214
|
-
// separators
|
|
215
|
-
//
|
|
216
|
-
// place the two cases are told apart on the line.
|
|
209
|
+
// separators. A `read_observations` result carries no children exactly when a run has started and
|
|
210
|
+
// none has reached `in-progress` yet, so this is the one place the two cases are told apart on the line.
|
|
217
211
|
function format_children(children: ReadonlyArray<ChildObservation>, repo: string): string {
|
|
218
212
|
if (children.length === 0) return NO_CHILD_YET
|
|
219
213
|
const cite = issue_cite.citer(repo, new Map(children.map((child) => [child.issue, child.title])))
|
|
@@ -249,12 +243,9 @@ interface LineTiming {
|
|
|
249
243
|
/**
|
|
250
244
|
* When the next line is due if the silence holds — printed, never left for a reader to work out.
|
|
251
245
|
*
|
|
252
|
-
* **The
|
|
253
|
-
* `
|
|
254
|
-
* that
|
|
255
|
-
* placeholder digits and all. Every comparable judgement in this repository has moved to the command
|
|
256
|
-
* that already holds the inputs — `run:hold`, `delegate`, `review:level`, `latest:scope` — and
|
|
257
|
-
* this is that same move for one value.
|
|
246
|
+
* **The command holds both inputs, so it prints the result.** A run that derives a time by hand from
|
|
247
|
+
* the `at` stamp plus the interval eventually derives it wrong; the judgement lives with the command
|
|
248
|
+
* that already holds the inputs, as for `run:hold`, `delegate`, `review:level` and `latest:scope`.
|
|
258
249
|
*
|
|
259
250
|
* **It is a schedule rather than an observation, and the two conditions on it are said in prose**
|
|
260
251
|
* (`docs/josh-commands-run.md` → `josh run:progress`): it holds only while the silence continues, and a
|
|
@@ -267,7 +258,7 @@ function format_next_report(now_ms: number, interval_ms: number): string {
|
|
|
267
258
|
|
|
268
259
|
// The already-formatted field strings the five labelled lines are built from. They are kept as strings
|
|
269
260
|
// rather than the raw observation so that `format_report` stays a pure renderer the tests can drive with
|
|
270
|
-
// an absent `next
|
|
261
|
+
// an absent `next`.
|
|
271
262
|
interface ReportFields {
|
|
272
263
|
observed_at: string
|
|
273
264
|
quiet: string
|
|
@@ -287,14 +278,11 @@ function format_next_line(next: string | undefined): string {
|
|
|
287
278
|
|
|
288
279
|
/**
|
|
289
280
|
* The five labelled lines a quiet run prints — one field group per line, a label in front of every
|
|
290
|
-
* field — so
|
|
291
|
-
* The command used to emit one `·`-joined run of values that `backlogrun.md` asked the parent to rewrite
|
|
292
|
-
* by hand every interval; the labels and the line breaks live here now, so the parent relays the output
|
|
293
|
-
* verbatim and rounds, rephrases or re-labels nothing.
|
|
281
|
+
* field — so the parent relays the output verbatim and rounds, rephrases or re-labels nothing.
|
|
294
282
|
*
|
|
295
|
-
* The observation instant leads and the scheduled next closes it
|
|
296
|
-
*
|
|
297
|
-
*
|
|
283
|
+
* The observation instant leads and the scheduled next closes it: the first field says whether
|
|
284
|
+
* everything after it is still about now, and the last is the one field about a moment that has not
|
|
285
|
+
* happened yet.
|
|
298
286
|
*/
|
|
299
287
|
function format_report(fields: ReportFields): string {
|
|
300
288
|
return [
|
|
@@ -353,9 +341,15 @@ function minutes_from(raw: string | undefined): number | undefined {
|
|
|
353
341
|
return minutes
|
|
354
342
|
}
|
|
355
343
|
|
|
344
|
+
function is_disabled(): boolean {
|
|
345
|
+
return process.env[DISABLED_KEY] === DISABLED_VALUE
|
|
346
|
+
}
|
|
347
|
+
|
|
356
348
|
const run_progress = {
|
|
357
349
|
DEFAULT_INTERVAL_MINUTES,
|
|
358
350
|
DEFAULT_INTERVAL_MS,
|
|
351
|
+
DISABLED_KEY,
|
|
352
|
+
DISABLED_VALUE,
|
|
359
353
|
INTERVAL_KEY,
|
|
360
354
|
MS_PER_MINUTE,
|
|
361
355
|
MS_PER_SECOND,
|
|
@@ -368,6 +362,7 @@ const run_progress = {
|
|
|
368
362
|
format_next_line,
|
|
369
363
|
format_next_report,
|
|
370
364
|
format_report,
|
|
365
|
+
is_disabled,
|
|
371
366
|
is_due,
|
|
372
367
|
minutes_from,
|
|
373
368
|
next_state,
|
|
@@ -6,16 +6,16 @@ import { run_review, type GateState, type ReviewTiming } from './run-review'
|
|
|
6
6
|
import { run_review_steps } from './run-review-steps'
|
|
7
7
|
|
|
8
8
|
// `josh run:review` — one call that leaves `josh gate` running in the background and prints the whole
|
|
9
|
-
// `/code-review` brief, so a lane child launches the two together and they overlap
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
9
|
+
// `/code-review` brief, so a lane child launches the two together and they overlap.
|
|
10
|
+
// It composes `josh gate` and `josh review:brief` and changes neither: the gate is the same command
|
|
11
|
+
// spawned detached, and the brief is `review:brief` run unchanged, so the nonce/checkout contract
|
|
12
|
+
// `review:attest --check` enforces is minted exactly as a standalone brief mints it.
|
|
13
13
|
//
|
|
14
14
|
// **The default mode opens the pair; `--join` closes it.** The child runs the default, reads the brief
|
|
15
15
|
// off stdout, launches the review subagent, and — once it returns — runs `--join`, which waits for the
|
|
16
16
|
// gate to finish, records the overlap, and exits non-zero if the gate came back red. That exit code is
|
|
17
|
-
// what makes "a red gate is not adopted over" a mechanical guarantee rather than an ordering
|
|
18
|
-
//
|
|
17
|
+
// what makes "a red gate is not adopted over" a mechanical guarantee rather than an ordering
|
|
18
|
+
// (`run-review.ts` → `adopt_verdict`).
|
|
19
19
|
|
|
20
20
|
const ARGV_OFFSET = 2
|
|
21
21
|
const JOIN_FLAG = '--join'
|
|
@@ -12,7 +12,7 @@ import { detached_launch, type LaunchArgv, type LaunchResult } from '#scripts/ru
|
|
|
12
12
|
import { run_review, type GateState, type ReviewTiming, type TimingStart } from './run-review'
|
|
13
13
|
|
|
14
14
|
// The side effects `josh run:review` performs, kept out of `run-review.ts` the way `run-merge-steps.ts`
|
|
15
|
-
// is kept out of `run-merge.ts
|
|
15
|
+
// is kept out of `run-merge.ts`. Three of them: launch the gate detached so
|
|
16
16
|
// one command leaves it running in the background, read back the state the join waits on from the
|
|
17
17
|
// stamps a real `josh gate` writes, and keep the four timestamps the overlap is measured from.
|
|
18
18
|
|
|
@@ -65,10 +65,10 @@ function launch_gate(root: string = PROJECT_ROOT): LaunchResult {
|
|
|
65
65
|
// in-flight marker reads. `reusable_green_gate` is the gate's own reuse test rather than a second copy
|
|
66
66
|
// of it, so the join calls a gate green on exactly the trees the gate would skip.
|
|
67
67
|
//
|
|
68
|
-
// **The marker is read before the green record, never after
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
//
|
|
68
|
+
// **The marker is read before the green record, never after**. The gate writes its green record
|
|
69
|
+
// and only then clears the marker, so a marker read as gone means any green record is already on disk
|
|
70
|
+
// for the read that follows. Read the other way round, a gate that recorded green and cleared its
|
|
71
|
+
// marker between the two reads would be seen as neither — and the join would answer RED.
|
|
72
72
|
async function read_gate_state(): Promise<GateState> {
|
|
73
73
|
const is_running = file_map_stamp.is_writer_running(review_stamps.in_flight_stamp.read())
|
|
74
74
|
const tree = await gate_tree.read_gate_tree()
|
|
@@ -78,7 +78,7 @@ async function read_gate_state(): Promise<GateState> {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
// The brief has to report the gate as in-flight, or it says `Not verified` and sends the review agent
|
|
81
|
-
// to re-run the suite the gate is already running
|
|
81
|
+
// to re-run the suite the gate is already running. The detached gate writes
|
|
82
82
|
// that marker itself, but its cold start can outrun the brief — so the composite writes the marker up
|
|
83
83
|
// front, for the tree it is about to review. The gate overwrites it with its own identity the moment it
|
|
84
84
|
// starts and clears it when it finishes, so this only closes the window between launch and that write;
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
// The pure decisions `josh run:review` makes, kept apart from the side effects the same way
|
|
2
|
-
// `run-merge.ts` is kept apart from `run-merge-steps.ts
|
|
2
|
+
// `run-merge.ts` is kept apart from `run-merge-steps.ts`.
|
|
3
3
|
//
|
|
4
4
|
// `run:review` starts the gate in the background and prints the `/code-review` brief in one call, so a
|
|
5
5
|
// lane child launches both from a single command and the two overlap rather than running one after the
|
|
6
6
|
// other. Two facts have to be decided from what the stamps say, and both are decided here so a test can
|
|
7
7
|
// pin them without a gate ever running:
|
|
8
8
|
//
|
|
9
|
-
// - **whether the review verdict may be adopted** — only over a green gate.
|
|
10
|
-
//
|
|
11
|
-
// there was no path to adopting a review over a red gate. Started together, that guarantee is no
|
|
12
|
-
// longer a side effect of the order and has to be a decision (`adopt_verdict`).
|
|
9
|
+
// - **whether the review verdict may be adopted** — only over a green gate. Started together, the two
|
|
10
|
+
// no longer guarantee that by their order, so it has to be a decision (`adopt_verdict`).
|
|
13
11
|
// - **how far the gate and the review overlapped** — the measurement the parallel start exists to
|
|
14
12
|
// produce, computed from the four timestamps `run-review-steps.ts` records.
|
|
15
13
|
|
|
@@ -18,10 +16,10 @@ const BLOCKED = 'blocked'
|
|
|
18
16
|
|
|
19
17
|
type AdoptVerdict = typeof ADOPT | typeof BLOCKED
|
|
20
18
|
|
|
21
|
-
// A red gate blocks the review verdict outright, whatever the review concluded
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
19
|
+
// A red gate blocks the review verdict outright, whatever the review concluded: running the gate
|
|
20
|
+
// beside the review is only safe while a red gate can still stop the commit. `--join` exits non-zero
|
|
21
|
+
// on `blocked`, so the guard is the command's exit code rather than a sentence a child has to read
|
|
22
|
+
// and obey.
|
|
25
23
|
function adopt_verdict(is_gate_green: boolean): AdoptVerdict {
|
|
26
24
|
return is_gate_green ? ADOPT : BLOCKED
|
|
27
25
|
}
|
|
@@ -85,8 +83,8 @@ function overlap_seconds(timing: ReviewTiming): number {
|
|
|
85
83
|
return Math.max(NO_OVERLAP, (end - start) / MS_PER_SECOND)
|
|
86
84
|
}
|
|
87
85
|
|
|
88
|
-
// The three lines a `--join` prints so a reader —
|
|
89
|
-
//
|
|
86
|
+
// The three lines a `--join` prints so a reader — `chain-rule.md`'s overlap check — can
|
|
87
|
+
// see the gate ran inside the review rather than in front of it.
|
|
90
88
|
function format_timing(timing: ReviewTiming): string {
|
|
91
89
|
const gate = span_seconds(timing.gate_started_at, timing.gate_ended_at)
|
|
92
90
|
const review = span_seconds(timing.review_started_at, timing.review_ended_at)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { error_text } from '#scripts/lib/error-message'
|
|
2
|
+
|
|
3
|
+
// What `run:cut`, `run:carry` and `run:hold` share about a failure nobody planned. Each of them answers
|
|
4
|
+
// one token on every path out, and the token alone cannot say why — so the two failures are kept
|
|
5
|
+
// apart here: a git directory that could not be resolved is the one case their "git directory could
|
|
6
|
+
// not be read" message is true of, and anything else thrown is reported with its own message.
|
|
7
|
+
|
|
8
|
+
// Only the resolution is folded into `undefined`, so the caller's unknown-git-directory message is
|
|
9
|
+
// printed for that path alone. `JOSH_DEBUG` keeps the reason git gave.
|
|
10
|
+
async function directory_of(
|
|
11
|
+
where: string,
|
|
12
|
+
read: () => Promise<string | undefined>,
|
|
13
|
+
): Promise<string | undefined> {
|
|
14
|
+
try {
|
|
15
|
+
return await read()
|
|
16
|
+
} catch (error) {
|
|
17
|
+
error_text.trace_swallowed(where, error)
|
|
18
|
+
|
|
19
|
+
return undefined
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function message(command: string, error: unknown): string {
|
|
24
|
+
return `${command} failed and established nothing: ${error_text.message_of(error)}`
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const run_cli_fault = { directory_of, message }
|
|
28
|
+
|
|
29
|
+
export { run_cli_fault }
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
3
4
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
4
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
5
6
|
import {
|
|
@@ -8,10 +9,9 @@ import {
|
|
|
8
9
|
type EndingDecision,
|
|
9
10
|
type EndingRequest,
|
|
10
11
|
} from './run-ending'
|
|
11
|
-
import { run_issue_number } from './run-issue-number'
|
|
12
12
|
|
|
13
13
|
// `josh run:ending <N> --output <path> [--repo <owner/repo>]` — one verdict about how the dispatched
|
|
14
|
-
// lane child running `<N>` ended
|
|
14
|
+
// lane child running `<N>` ended.
|
|
15
15
|
//
|
|
16
16
|
// The stdout/stderr split is the contract `run:liveness` and `run:hold` keep: exactly one verdict
|
|
17
17
|
// token on stdout on every path, the reason and the basis on stderr. `unreadable` exits non-zero,
|
|
@@ -59,7 +59,7 @@ interface ParsedArguments {
|
|
|
59
59
|
function is_valid(parsed: ParsedArguments): boolean {
|
|
60
60
|
return (
|
|
61
61
|
parsed.positionals.length === 1 &&
|
|
62
|
-
|
|
62
|
+
issue_number_shape.ISSUE_NUMBER_PATTERN.test(parsed.positionals[0] ?? '') &&
|
|
63
63
|
parsed.values.output !== undefined
|
|
64
64
|
)
|
|
65
65
|
}
|
|
@@ -3,32 +3,28 @@ import { agent_exit_record } from '#scripts/agent/agent-exit-record'
|
|
|
3
3
|
import { api_outage } from '#scripts/agent/api-outage'
|
|
4
4
|
import type { ClaudeResultEvent } from '#scripts/agent/claude-result-event'
|
|
5
5
|
import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
|
|
6
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
6
7
|
import { issue_state } from '#scripts/issue/issue-state'
|
|
7
8
|
import { run_cut } from '#scripts/run/cut/run-cut'
|
|
8
9
|
import { run_hold } from '#scripts/run/hold/run-hold'
|
|
9
|
-
import { run_issue_number } from './run-issue-number'
|
|
10
10
|
import { run_liveness } from './run-liveness'
|
|
11
11
|
|
|
12
|
-
// `josh run:ending <N>` — how a dispatched lane child *ended*, not whether it is still moving
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
// for joshuafolkken/kit#2118 ended `subtype: success`, left three uncommitted files, opened no PR, and
|
|
17
|
-
// `run:cut --resume` answered `fresh` — a mid-implementation exit that read as a clean finish, and the
|
|
18
|
-
// cause took a person opening 875KB of JSONL to find.
|
|
12
|
+
// `josh run:ending <N>` — how a dispatched lane child *ended*, not whether it is still moving.
|
|
13
|
+
// `run:liveness` answers "still working, or stopped?"; a normally-exited child that stopped
|
|
14
|
+
// mid-implementation is invisible to it — the output freezes exactly as a completed child's does, and
|
|
15
|
+
// `is_error: false` looks like success.
|
|
19
16
|
//
|
|
20
17
|
// **The verdict is read from three traces the child leaves behind, never from `is_error`.** A cut
|
|
21
18
|
// record for this issue means it handed off; a CLOSED Issue means it completed and merged; an OPEN
|
|
22
19
|
// Issue with no cut means it ended in the middle. The exit record's own `is_error: false` is *not* a
|
|
23
|
-
// completion — completion is the CLOSED Issue
|
|
24
|
-
//
|
|
25
|
-
// calls the harness refused (`permission_denials`, the direct cause of the 2118 stop).
|
|
20
|
+
// completion — completion is the CLOSED Issue. The exit record is read for the *basis* the park comment
|
|
21
|
+
// carries: which fields said so, and how many tool calls the harness refused (`permission_denials`).
|
|
26
22
|
//
|
|
27
23
|
// **The words are a different question from `run:liveness`'s four**, deliberately non-overlapping:
|
|
28
24
|
// `merged` / `cut` / `outage` / `abandoned` / `unreadable` answer "how did it end", where `alive` /
|
|
29
25
|
// `stopped` / `settled` / `undetermined` answer "is it still going".
|
|
30
26
|
//
|
|
31
|
-
// **`outage` splits the mid-implementation ending in two
|
|
27
|
+
// **`outage` splits the mid-implementation ending in two**. A child that ended
|
|
32
28
|
// mid-implementation because it could not reach the API is not a child that stalled on its own: the
|
|
33
29
|
// exit record carries a transport-failure signature, read mechanically by `api-outage.ts`. The parent
|
|
34
30
|
// reads it to leave the outage child re-dispatchable rather than parking it and counting it against
|
|
@@ -112,7 +108,7 @@ function describe_exit(record: ClaudeResultEvent): string {
|
|
|
112
108
|
}
|
|
113
109
|
|
|
114
110
|
// The refused interactive ask, as a clause the park comment can carry the question and options in — or
|
|
115
|
-
// empty when the child asked nothing
|
|
111
|
+
// empty when the child asked nothing. This is the backstop for a child that
|
|
116
112
|
// slipped past the `PreToolUse` refusal: the question is stranded in the exit record's
|
|
117
113
|
// `permission_denials`, and lifting it here spares the parent opening the JSONL by hand.
|
|
118
114
|
function refused_ask_clause(record: ClaudeResultEvent | undefined): string {
|
|
@@ -214,7 +210,7 @@ async function read_traces(request: EndingRequest): Promise<EndingTraces> {
|
|
|
214
210
|
}
|
|
215
211
|
|
|
216
212
|
async function check(request: EndingRequest): Promise<EndingDecision> {
|
|
217
|
-
|
|
213
|
+
issue_number_shape.require_issue_number(request.issue)
|
|
218
214
|
|
|
219
215
|
return decide(await read_traces(request))
|
|
220
216
|
}
|
|
@@ -5,11 +5,10 @@ import {
|
|
|
5
5
|
type StopMarkFields,
|
|
6
6
|
} from '#scripts/run/hold/run-hold'
|
|
7
7
|
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// `halfrun` stop promised could not land, and each run improvised its own way past the guard.
|
|
8
|
+
// A `halfrun` stops before its commit and **keeps** its hold, because the uncommitted, hand-verified
|
|
9
|
+
// work is exactly what a second run would trample. The person then types `fullrun #N` to ship it, and
|
|
10
|
+
// that run adopts the hold here rather than meeting `busy` from `run:entry`'s claim or being advised
|
|
11
|
+
// to stash the verified diff away.
|
|
13
12
|
//
|
|
14
13
|
// **The stop is recorded, never inferred.** A hold naming #N over a dirty tree is also what a `halfrun`
|
|
15
14
|
// still implementing and a `backlogrun` child leave, and adopting either hands a half-written diff to
|
|
@@ -43,7 +42,7 @@ function is_own_record(read: HoldRead, issue: string): boolean {
|
|
|
43
42
|
return hold === undefined || hold.issue === issue || hold.issue === run_hold.UNNUMBERED_ISSUE
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
// `mark` is the `halfrun` stop's by default; a `prrun` stop passes its own
|
|
45
|
+
// `mark` is the `halfrun` stop's by default; a `prrun` stop passes its own, so
|
|
47
46
|
// the own-record check is one check whichever run is stopping.
|
|
48
47
|
function mark_stop_at(
|
|
49
48
|
target: string,
|
|
@@ -68,8 +67,7 @@ function take_over(target: string, issue: string): boolean {
|
|
|
68
67
|
return run_hold.create_hold(target, issue, new Date(), true)
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
// `false` leaves the record untouched, so the ordinary claim that follows decides the tree
|
|
72
|
-
// it did before this resume existed.
|
|
70
|
+
// `false` leaves the record untouched, so the ordinary claim that follows decides the tree.
|
|
73
71
|
function adopt_at(target: string, issue: string, is_dirty: boolean): boolean {
|
|
74
72
|
if (!is_halfrun_stop(run_hold.read_hold(target), issue, is_dirty)) return false
|
|
75
73
|
|
|
@@ -3,11 +3,11 @@ import { lane_reap } from '#scripts/lane/lane-reap'
|
|
|
3
3
|
import { lane_registry } from '#scripts/lane/lane-registry'
|
|
4
4
|
import { run_carry, type CarryRead, type RunCarry } from '#scripts/run/carry/run-carry'
|
|
5
5
|
|
|
6
|
-
// The headless `backlogrun` parent
|
|
6
|
+
// The headless `backlogrun` parent. `run:wake` starts a cut's successor as
|
|
7
7
|
// `claude -p`, and there a turn that ends is the process that ends: its background `lane:await` and
|
|
8
8
|
// `run:progress --wait` are killed with it, so "a background command's exit re-invokes the session"
|
|
9
|
-
// (`backlogrun-
|
|
10
|
-
//
|
|
9
|
+
// (`docs/maintainers/backlogrun-driver.md` → "Waiting while something is in flight") does not hold. A successor that
|
|
10
|
+
// ends its turn on a wait therefore ends the run's driver while its lanes are still working.
|
|
11
11
|
//
|
|
12
12
|
// **The mark is what tells that session apart, and the supervisor is its only writer.** It rides the
|
|
13
13
|
// launch's environment (`run-wake-cli.ts`), so an attached session never carries it, and a lane child
|
|
@@ -28,6 +28,21 @@ function is_headless(source: EnvironmentSource = process.env): boolean {
|
|
|
28
28
|
return source[HEADLESS_ENV_KEY] === HEADLESS_VALUE
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
// The session the supervisor launched itself — marked, and not a lane child that inherited the mark.
|
|
32
|
+
function is_headless_parent(source: EnvironmentSource): boolean {
|
|
33
|
+
return is_headless(source) && lane_child_marker.marked_issue(source) === undefined
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// **The cut cap binds a session cut, never the hand-back to the driver.** A headless parent is a
|
|
37
|
+
// judgment session the `run:wake` driver woke for one branch, and its `--cut` is how it returns the
|
|
38
|
+
// loop — the driver holds the run between wakes, so the session has no accumulated context for the
|
|
39
|
+
// cap to weigh against a cold preamble. Capping it would leave the session unable to cut while the
|
|
40
|
+
// headless stop rule refuses its turn-end until it does. Every reader of the cap asks here, so the
|
|
41
|
+
// `--cut` refusal, `run:step` and the parent-cut hook never disagree about it.
|
|
42
|
+
function is_cut_capped(carry: RunCarry, source: EnvironmentSource = process.env): boolean {
|
|
43
|
+
return !is_headless_parent(source) && run_carry.is_at_cut_cap(carry)
|
|
44
|
+
}
|
|
45
|
+
|
|
31
46
|
// Only a live, un-handed-off record binds the session to its lanes. After `run:carry --cut` the next
|
|
32
47
|
// successor drives them, and after `--end` (`none`) or past the bound (`expired`) there is no run left
|
|
33
48
|
// to drive — ending the turn is correct in all three. An unreadable record fails open, as every stop
|
|
@@ -49,9 +64,7 @@ async function read_carry_here(): Promise<CarryRead | undefined> {
|
|
|
49
64
|
* lane child, with lanes still in flight and no cut handed the record off.
|
|
50
65
|
*/
|
|
51
66
|
async function must_keep_waiting(source: EnvironmentSource = process.env): Promise<boolean> {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (!is_candidate || !(await lane_registry.has_lanes_in_flight())) return false
|
|
67
|
+
if (!is_headless_parent(source) || !(await lane_registry.has_lanes_in_flight())) return false
|
|
55
68
|
|
|
56
69
|
return is_driving(await read_carry_here())
|
|
57
70
|
}
|
|
@@ -64,9 +77,9 @@ async function current_carry(): Promise<RunCarry | undefined> {
|
|
|
64
77
|
return read?.kind === 'carried' ? read.carry : undefined
|
|
65
78
|
}
|
|
66
79
|
|
|
67
|
-
// **A live record binds only the session that declared it
|
|
68
|
-
//
|
|
69
|
-
//
|
|
80
|
+
// **A live record binds only the session that declared it**. A cut's successor adopts the
|
|
81
|
+
// record and rewrites its owner, and every session in this checkout reads that same file — so without
|
|
82
|
+
// this test the session that cut, still attached, would read as a second parent. The
|
|
70
83
|
// owner is `--owner "$PPID"`, the session process, which is an ancestor of every hook it runs; a
|
|
71
84
|
// record that declared no owner proves no one is its parent.
|
|
72
85
|
function is_owned_here(carry: RunCarry, ancestry: () => ReadonlySet<number>): boolean {
|
|
@@ -85,7 +98,7 @@ function driven_here(
|
|
|
85
98
|
/**
|
|
86
99
|
* The live, un-handed-off carry record this session drives as the `backlogrun` parent, or `undefined`
|
|
87
100
|
* for a lane child or any session that does not own one. Returned rather than tested so a caller that
|
|
88
|
-
* also needs the record's counters (the parent cut's cap
|
|
101
|
+
* also needs the record's counters (the parent cut's cap) reads it once.
|
|
89
102
|
*/
|
|
90
103
|
async function driving_carry(
|
|
91
104
|
source: EnvironmentSource = process.env,
|
|
@@ -98,8 +111,7 @@ async function driving_carry(
|
|
|
98
111
|
|
|
99
112
|
/**
|
|
100
113
|
* Whether this session is the driving `backlogrun` parent, attached or headless: not a lane child, and
|
|
101
|
-
* the declared owner of a live, un-handed-off carry record — the record only a `backlogrun` writes
|
|
102
|
-
* (joshuafolkken/kit#2452, joshuafolkken/kit#2472).
|
|
114
|
+
* the declared owner of a live, un-handed-off carry record — the record only a `backlogrun` writes.
|
|
103
115
|
*/
|
|
104
116
|
async function is_backlog_parent(
|
|
105
117
|
source: EnvironmentSource = process.env,
|
|
@@ -114,6 +126,7 @@ const run_headless = {
|
|
|
114
126
|
driving_carry,
|
|
115
127
|
environment,
|
|
116
128
|
is_backlog_parent,
|
|
129
|
+
is_cut_capped,
|
|
117
130
|
is_headless,
|
|
118
131
|
is_owned_here,
|
|
119
132
|
must_keep_waiting,
|