@joshuafolkken/kit 1.1240.0 → 1.1373.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +52 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +19 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +195 -181
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -187
- package/dist/josh.js +282 -95
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +17 -11
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +3 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +30 -5
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +168 -30
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +53 -51
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +7 -7
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +1 -1
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +24 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +30 -35
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +25 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +6 -7
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +12 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +2 -2
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +1 -1
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-runs.ts +1 -1
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +6 -7
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +54 -36
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +9 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +171 -46
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +26 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +64 -18
- package/scripts/run/run-step.ts +107 -51
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +9 -9
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -279
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +26 -26
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { OPTIONAL_ENV_FILE_FLAGS, type CommandEntry } from './josh-command-types'
|
|
2
2
|
|
|
3
3
|
// The run-lifecycle registry (`run:hold` through `run:step`), split out of `josh-commands-ai.ts` so
|
|
4
|
-
// that file stays under its 300-code-line limit, as `BACKLOG_COMMANDS` and `LANE_COMMANDS`
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// that file stays under its 300-code-line limit, as `BACKLOG_COMMANDS` and `LANE_COMMANDS` are. It
|
|
5
|
+
// is spread into `AI_COMMANDS` at the place the entries belong, so the generated catalog keeps their
|
|
6
|
+
// order.
|
|
7
7
|
|
|
8
8
|
// One script answers both `run:hold` and `run:release`; the flag below is what tells them apart.
|
|
9
9
|
const RUN_HOLD_SCRIPT = 'scripts/run/hold/run-hold-cli.ts'
|
|
@@ -32,12 +32,18 @@ const RUN_COMMANDS: Record<string, CommandEntry> = {
|
|
|
32
32
|
'run:carry': {
|
|
33
33
|
script: 'scripts/run/carry/run-carry-cli.ts',
|
|
34
34
|
// `--stopped` sends the stop confirmation, so the Telegram credentials come from `.env` as for
|
|
35
|
-
// `run:wake` below
|
|
35
|
+
// `run:wake` below.
|
|
36
36
|
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
37
37
|
description: 'Carry one invocation’s budget across its own session cuts',
|
|
38
38
|
category: 'AI tools',
|
|
39
39
|
reference: ['<operation> [arguments...]', 'automation', ['files']],
|
|
40
40
|
},
|
|
41
|
+
'run:add': {
|
|
42
|
+
script: 'scripts/run/add/run-add-cli.ts',
|
|
43
|
+
description: 'Add issues to a live backlogrun, ahead of the queue unless --no-priority',
|
|
44
|
+
category: 'AI tools',
|
|
45
|
+
reference: ['<issue...> [--no-priority]', 'automation', ['network', 'files']],
|
|
46
|
+
},
|
|
41
47
|
'run:wake': {
|
|
42
48
|
script: 'scripts/run/wake/run-wake-cli.ts',
|
|
43
49
|
// `.env` rather than the ambient environment:
|
|
@@ -76,18 +82,26 @@ const RUN_COMMANDS: Record<string, CommandEntry> = {
|
|
|
76
82
|
['files'],
|
|
77
83
|
],
|
|
78
84
|
},
|
|
85
|
+
'run:board': {
|
|
86
|
+
script: 'scripts/run/board/run-board-cli.ts',
|
|
87
|
+
// `--every` pushes its frame as a Telegram, so the credentials come from `.env` as for `run:carry`.
|
|
88
|
+
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
89
|
+
description: 'Draw a live board of the running backlogrun, redrawn every second',
|
|
90
|
+
category: 'AI tools',
|
|
91
|
+
reference: ['[--once | --chat | --every <minutes>]', 'automation', ['files', 'network']],
|
|
92
|
+
},
|
|
79
93
|
'run:prep': {
|
|
80
94
|
script: 'scripts/run/run-prep-cli.ts',
|
|
81
95
|
description: 'Bundle a run’s pre-edit reads: body, comments, state, dependency scope',
|
|
82
96
|
category: 'AI tools',
|
|
83
97
|
reference: ['<issue>', 'automation', ['network']],
|
|
84
98
|
},
|
|
85
|
-
// The entry sequence a lane opened on, folded into one call
|
|
99
|
+
// The entry sequence a lane opened on, folded into one call: claim the tree,
|
|
86
100
|
// read the budget, gather the issue reads and decide the pre-implementation step. `run:hold`,
|
|
87
101
|
// `cost --cut`, `run:prep` and `run:step` were four round trips re-billing a lane's full context each.
|
|
88
102
|
'run:entry': {
|
|
89
103
|
script: 'scripts/run/entry/run-entry-cli.ts',
|
|
90
|
-
// A `busy` hold or an `over` budget sends the stop confirmation
|
|
104
|
+
// A `busy` hold or an `over` budget sends the stop confirmation.
|
|
91
105
|
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
92
106
|
description:
|
|
93
107
|
'Open a run in one call: claim the tree, read the budget, bundle the reads, decide the pre-implementation step',
|
|
@@ -111,7 +125,7 @@ const RUN_COMMANDS: Record<string, CommandEntry> = {
|
|
|
111
125
|
description:
|
|
112
126
|
'Print the run’s next single action, computed from the event stream, carry record and issue state',
|
|
113
127
|
category: 'AI tools',
|
|
114
|
-
reference: ['<issue>', 'automation', ['network', 'files']],
|
|
128
|
+
reference: ['[<issue>]', 'automation', ['network', 'files']],
|
|
115
129
|
},
|
|
116
130
|
}
|
|
117
131
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { CommandEntry } from './josh-command-types'
|
|
2
2
|
|
|
3
3
|
// The `split:assess` command registry, split out of `josh-commands-ai.ts` so that file stays under its
|
|
4
|
-
// 300-code-line limit, exactly as `LANE_COMMANDS` was for the same reason
|
|
5
|
-
// joshuafolkken/kit#2218). It is spread into `AI_COMMANDS` so the command stays grouped with the other
|
|
4
|
+
// 300-code-line limit, exactly as `LANE_COMMANDS` was for the same reason. It is spread into `AI_COMMANDS` so the command stays grouped with the other
|
|
6
5
|
// decision oracles under the 'AI tools' category.
|
|
7
6
|
|
|
8
7
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
@@ -24,16 +24,16 @@ const VERSIONING_COMMANDS: Record<string, CommandEntry> = {
|
|
|
24
24
|
category: 'Versioning',
|
|
25
25
|
reference: ['', 'developer', ['network']],
|
|
26
26
|
},
|
|
27
|
-
// The one place that decides a version
|
|
27
|
+
// The one place that decides a version. A `script` entry for the same
|
|
28
28
|
// reason `ranges` is one: script paths resolve against the kit package root, so it keeps working
|
|
29
29
|
// from a consumer repository where the file lives under node_modules.
|
|
30
30
|
release: {
|
|
31
31
|
script: 'scripts/release/release-cli.ts',
|
|
32
32
|
description: 'Release the merges main has taken since the version last changed',
|
|
33
33
|
category: 'Versioning',
|
|
34
|
-
reference: ['[
|
|
34
|
+
reference: ['[--dry-run]', 'maintainer', ['git', 'network', 'release']],
|
|
35
35
|
},
|
|
36
|
-
// The read-only half of the one above
|
|
36
|
+
// The read-only half of the one above. `release --dry-run` cannot
|
|
37
37
|
// answer this question: it refuses off the default branch and on a dirty tree, which is every
|
|
38
38
|
// position a run asks it from. A `script` entry for the same reason `release` is one.
|
|
39
39
|
'release:scope': {
|
|
@@ -42,8 +42,8 @@ const VERSIONING_COMMANDS: Record<string, CommandEntry> = {
|
|
|
42
42
|
category: 'Versioning',
|
|
43
43
|
reference: ['[--json]', 'automation', ['none']],
|
|
44
44
|
},
|
|
45
|
-
// Run by the release workflows, kit's and the one sync distributes, after a tag has published
|
|
46
|
-
//
|
|
45
|
+
// Run by the release workflows, kit's and the one sync distributes, after a tag has published.
|
|
46
|
+
// Settings come from the environment, so the workflow decides them.
|
|
47
47
|
'release:github': {
|
|
48
48
|
script: 'scripts/release/github-release-cli.ts',
|
|
49
49
|
description: 'Create the GitHub Release for a published tag, with generated notes',
|
|
@@ -20,20 +20,17 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
20
20
|
reference: ['<message>', 'developer', ['network']],
|
|
21
21
|
default_script_arguments: ['-y', '--skip-commit', '--skip-push'],
|
|
22
22
|
},
|
|
23
|
-
// **The optional form, on both
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
// session, and `followup` with them the merge step of every `fullrun` there. `doctor` was moved to
|
|
28
|
-
// this form for the same reason in joshuafolkken/kit#869.
|
|
23
|
+
// **The optional form, on both**. The mandatory `--env-file=.env` is resolved by node before the
|
|
24
|
+
// script's first line: on a machine with no `.env` it dies as `.env: not found` with exit code 9,
|
|
25
|
+
// even where `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` exist as real environment variables — a
|
|
26
|
+
// cloud session, and `followup` with them the merge step of every `fullrun` there.
|
|
29
27
|
//
|
|
30
28
|
// Nothing is lost by relaxing it: both scripts already load `.env` through `josh_environment_file`
|
|
31
29
|
// themselves, so the file is read either way and node's precedence — an existing environment
|
|
32
30
|
// variable wins over the file — is node's own in both spellings.
|
|
33
31
|
//
|
|
34
|
-
// **
|
|
35
|
-
//
|
|
36
|
-
// `josh notify` exits non-zero instead of warning and answering 0.
|
|
32
|
+
// **A missing credential still fails loudly**: `telegram_notify.send` throws on missing credentials
|
|
33
|
+
// and on a failed send, so `josh notify` exits non-zero instead of warning and answering 0.
|
|
37
34
|
followup: {
|
|
38
35
|
script: 'scripts/followup/git-followup-workflow.ts',
|
|
39
36
|
description: 'Follow-up git workflow',
|
|
@@ -49,11 +46,23 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
49
46
|
script: 'scripts/notify/telegram-test.ts',
|
|
50
47
|
description: 'Send Telegram notification',
|
|
51
48
|
category: 'Workflow',
|
|
52
|
-
reference: [
|
|
49
|
+
reference: [
|
|
50
|
+
'[--task-type <type>] [--body <text> | --body-file <path>] [--issue-url <url>] [--pr-url <url>] [--issue-title <text>] [--repo-name <name>]',
|
|
51
|
+
'automation',
|
|
52
|
+
['notifications'],
|
|
53
|
+
],
|
|
53
54
|
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
54
55
|
},
|
|
55
|
-
//
|
|
56
|
-
//
|
|
56
|
+
// One observation-ledger sighting: the key's count, the append and the second-sighting verdict,
|
|
57
|
+
// which a run used to type as a `cat | grep -c` and judge by hand.
|
|
58
|
+
'observation:record': {
|
|
59
|
+
script: 'scripts/observations/observation-record-cli.ts',
|
|
60
|
+
description: 'Record an observation sighting and answer whether it is now filed',
|
|
61
|
+
category: 'Workflow',
|
|
62
|
+
reference: ['<key> <depth> <where> <what> [--checkout <path>]', 'automation', ['files']],
|
|
63
|
+
},
|
|
64
|
+
// The observation ledger's commit path for the lines no run's own commit carried:
|
|
65
|
+
// a lane's lines sit in the primary checkout, which
|
|
57
66
|
// its commit cannot see, and the recurrence count the promotion rule reads is a count of main.
|
|
58
67
|
'observations:flush': {
|
|
59
68
|
script: 'scripts/observations/observations-flush-cli.ts',
|
|
@@ -61,8 +70,8 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
61
70
|
category: 'Workflow',
|
|
62
71
|
reference: ['', 'automation', ['git', 'network']],
|
|
63
72
|
},
|
|
64
|
-
// The one write path for a `/code-review` round's findings
|
|
65
|
-
// `--check` gate `followup` runs before it merges
|
|
73
|
+
// The one write path for a `/code-review` round's findings, plus the
|
|
74
|
+
// `--check` gate `followup` runs before it merges. It appends a `- rf:`
|
|
66
75
|
// line per finding — or one zero-finding line for a clean round — to the observation ledger, so
|
|
67
76
|
// `observations:flush` commits them and the recurrence count survives the run.
|
|
68
77
|
'review:record': {
|
|
@@ -70,12 +79,12 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
70
79
|
description: 'Record a review round’s findings, or check a round was recorded',
|
|
71
80
|
category: 'Workflow',
|
|
72
81
|
reference: [
|
|
73
|
-
'--issue <N> [<category>:<severity>:<file> ...] | --check --issue <N>',
|
|
82
|
+
'--issue <N> [--comment] [<category>:<severity>:<file> ...] | --check --issue <N>',
|
|
74
83
|
'automation',
|
|
75
|
-
['files'],
|
|
84
|
+
['files', 'network'],
|
|
76
85
|
],
|
|
77
86
|
},
|
|
78
|
-
// The reader over what `review:record` wrote
|
|
87
|
+
// The reader over what `review:record` wrote: each recurring category’s
|
|
79
88
|
// count, and the number of zero-finding rounds that distinguishes a quiet category from an unwatched one.
|
|
80
89
|
'review:findings': {
|
|
81
90
|
script: 'scripts/review/review-findings-cli.ts',
|
|
@@ -84,7 +93,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
84
93
|
reference: ['', 'developer', ['files']],
|
|
85
94
|
},
|
|
86
95
|
// After a behavior-change Issue merges, re-run its declared baseline and print before/after; a value
|
|
87
|
-
// that did not move appends a refuted-premise line to the observation ledger
|
|
96
|
+
// that did not move appends a refuted-premise line to the observation ledger.
|
|
88
97
|
'measure:rerun': {
|
|
89
98
|
script: 'scripts/issue/measure-rerun-cli.ts',
|
|
90
99
|
description: 'Re-run a merged issue’s baseline command and print the before/after pair',
|
|
@@ -92,7 +101,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
92
101
|
reference: ['<issue-number>', 'automation', ['network', 'processes', 'files']],
|
|
93
102
|
},
|
|
94
103
|
// A script rather than an `sh -c` chain, because it has a precondition to enforce: run inside a
|
|
95
|
-
// linked work tree it would hijack the default branch from every other one
|
|
104
|
+
// linked work tree it would hijack the default branch from every other one.
|
|
96
105
|
'main:sync': {
|
|
97
106
|
script: 'scripts/git/main-sync.ts',
|
|
98
107
|
description:
|
|
@@ -101,9 +110,8 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
101
110
|
reference: ['', 'developer', ['git', 'network']],
|
|
102
111
|
},
|
|
103
112
|
// A script rather than an `sh -c` chain, because the strategy has to be named rather than left to
|
|
104
|
-
// the caller's git configuration:
|
|
105
|
-
//
|
|
106
|
-
// (joshuafolkken/kit#1659).
|
|
113
|
+
// the caller's git configuration: a bare `git pull` aborts with `Need to specify how to reconcile
|
|
114
|
+
// divergent branches` on exactly the diverged branch the command exists for.
|
|
107
115
|
'main:merge': {
|
|
108
116
|
script: 'scripts/git/main-merge.ts',
|
|
109
117
|
description: 'Merge origin default branch into the current branch',
|
|
@@ -4,7 +4,7 @@ import { ENV_FILE_NAME } from '#ports'
|
|
|
4
4
|
//
|
|
5
5
|
// **The flag form is what most commands use, and it is not free.** Declaring any `tsx_arguments`
|
|
6
6
|
// disqualifies a command from in-process dispatch (`josh-in-process.ts`), which puts a second
|
|
7
|
-
// ~0.16 s tsx start in front of every call
|
|
7
|
+
// ~0.16 s tsx start in front of every call. A
|
|
8
8
|
// command a hook fires on every `Bash` call, or one an unattended `epicrun` polls every sixty
|
|
9
9
|
// seconds, cannot pay that, so it reads the file itself instead.
|
|
10
10
|
//
|
|
@@ -5,8 +5,8 @@ import type { CommandEntry } from './josh-command-types'
|
|
|
5
5
|
|
|
6
6
|
// `pnpm josh <script command>` started tsx twice — once for this dispatcher, once for the script it
|
|
7
7
|
// spawned. Measured on 2026-09-04, the second start was about 0.16 s of the 0.55 s a
|
|
8
|
-
// `pnpm josh format:edited` took, and the edit/Bash hook pays it 60–90 times in a single run
|
|
9
|
-
//
|
|
8
|
+
// `pnpm josh format:edited` took, and the edit/Bash hook pays it 60–90 times in a single run.
|
|
9
|
+
// The script is ordinary TypeScript and a TypeScript loader is already
|
|
10
10
|
// installed by the time this file runs, so the dispatcher evaluates the script itself instead.
|
|
11
11
|
const TYPESCRIPT_EXTENSION = '.ts'
|
|
12
12
|
const JAVASCRIPT_EXTENSION = '.js'
|
|
@@ -21,7 +21,7 @@ function is_typescript_dispatcher(dispatcher_url: string): boolean {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
// A command marked `is_bundled` is pre-built to `dist/commands/<script basename>.js` by
|
|
24
|
-
// `scripts/build/build-commands.ts
|
|
24
|
+
// `scripts/build/build-commands.ts`. The path is derived here, in a module
|
|
25
25
|
// the dispatcher bundle already carries, so the build and the dispatcher cannot name two locations.
|
|
26
26
|
function bundled_script_path(package_directory: string, script: string): string {
|
|
27
27
|
const name = `${path.basename(script, TYPESCRIPT_EXTENSION)}${JAVASCRIPT_EXTENSION}`
|
|
@@ -59,7 +59,7 @@ function resolve_tsx_executable(): string {
|
|
|
59
59
|
|
|
60
60
|
// Locating the CLI entry through tsx's own manifest never consults pnpm's generated shim, which
|
|
61
61
|
// hardcodes a store path a later bump prunes. The resolution itself is `resolve_package_bin` —
|
|
62
|
-
// shared with the format hook's eslint route rather than written twice
|
|
62
|
+
// shared with the format hook's eslint route rather than written twice.
|
|
63
63
|
function resolve_tsx_cli_entry(): string | undefined {
|
|
64
64
|
for (const base_directory of [PACKAGE_DIR, process.cwd()]) {
|
|
65
65
|
const cli_entry = resolve_package_bin(base_directory, TSX_PACKAGE, TSX_BIN)
|
|
@@ -157,7 +157,7 @@ function format_help(is_all = false, is_consumer = false): string {
|
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
// Every name a user could type — the canonical commands and their aliases — ranked by edit distance
|
|
160
|
-
// so `josh gat` points at `gate
|
|
160
|
+
// so `josh gat` points at `gate`.
|
|
161
161
|
function all_command_names(): Array<string> {
|
|
162
162
|
return [...Object.keys(COMMAND_MAP), ...Object.keys(ALIASES)]
|
|
163
163
|
}
|
|
@@ -219,7 +219,7 @@ function spawn_script_entry(
|
|
|
219
219
|
|
|
220
220
|
// Only the in-process branch is genuinely asynchronous; the spawning one answers the moment the
|
|
221
221
|
// child exits. Both are reported as a promise so every caller has one shape to handle, and
|
|
222
|
-
// `josh.ts` awaits it either way
|
|
222
|
+
// `josh.ts` awaits it either way.
|
|
223
223
|
async function run_script_entry(
|
|
224
224
|
entry: CommandEntry,
|
|
225
225
|
subcommand_arguments: Array<string>,
|
|
@@ -242,8 +242,7 @@ function github_prerequisite_exit(resolved: string, is_consumer: boolean): numbe
|
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
// The exit a command answers with before it runs, or `undefined` to go ahead: a consumer is refused a
|
|
245
|
-
// kit-only command with guidance, and a composite command rejects extra arguments
|
|
246
|
-
// (joshuafolkken/kit#1988).
|
|
245
|
+
// kit-only command with guidance, and a composite command rejects extra arguments.
|
|
247
246
|
function pre_dispatch_exit(
|
|
248
247
|
resolved: string,
|
|
249
248
|
entry: CommandEntry,
|
|
@@ -283,8 +282,8 @@ function declared(value: number | (() => number) | undefined): number | undefine
|
|
|
283
282
|
return typeof value === 'function' ? value() : value
|
|
284
283
|
}
|
|
285
284
|
|
|
286
|
-
// **Every command passes through here, so this is where a declared weight is reserved
|
|
287
|
-
//
|
|
285
|
+
// **Every command passes through here, so this is where a declared weight is reserved**.
|
|
286
|
+
// A heavy command run directly, outside `josh gate`, used to start its tools
|
|
288
287
|
// without claiming a place. A command under a parent that already holds its cores claims nothing:
|
|
289
288
|
// `core_budget.with_command_reservation` reads the mark that parent set.
|
|
290
289
|
async function dispatch_entry(
|
package/scripts/josh/josh-run.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa'
|
|
2
2
|
|
|
3
|
-
// One captured `pnpm josh` subprocess
|
|
3
|
+
// One captured `pnpm josh` subprocess. A composite command that collapses a
|
|
4
4
|
// sequence of `pnpm josh` calls into one — `run:merge`, `backlog:offer`, `lane:launch` — reads each
|
|
5
5
|
// step's output back rather than inheriting it, so the step's own report logic is reused rather than
|
|
6
6
|
// cloned and only the composite's own token reaches the caller's stdout. This is that read, single-
|
|
@@ -11,11 +11,11 @@ import { execa } from 'execa'
|
|
|
11
11
|
// a person sees it, so a composite streams it through; `run:merge` keeps it piped, because it composes
|
|
12
12
|
// its own report from the captured values instead.
|
|
13
13
|
//
|
|
14
|
-
// **Forwarded stderr is captured as well
|
|
14
|
+
// **Forwarded stderr is captured as well**: a composite that writes a report
|
|
15
15
|
// of its own — `run:tail` — puts a failed step's reason in that report, where a detached run's log
|
|
16
16
|
// otherwise showed only pnpm's `ELIFECYCLE` line.
|
|
17
17
|
//
|
|
18
|
-
// **`timeout_ms` bounds a read made from inside a loop
|
|
18
|
+
// **`timeout_ms` bounds a read made from inside a loop**: the step is killed and
|
|
19
19
|
// its exit reads as a failure, so a hung network call ends a pass instead of the loop around it.
|
|
20
20
|
|
|
21
21
|
const PNPM = 'pnpm'
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { status_icons } from '#scripts/lib/status-icons'
|
|
2
2
|
|
|
3
|
-
// A josh command's own overall verdict, and the one place its line is written
|
|
3
|
+
// A josh command's own overall verdict, and the one place its line is written.
|
|
4
4
|
//
|
|
5
|
-
// `status-icons.ts` single-
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// of a step that passed with warnings or skipped (joshuafolkken/kit#1328), and that body is written by
|
|
5
|
+
// `status-icons.ts` single-sources the *character* a failure line opens with, which is not enough for
|
|
6
|
+
// a command that **forwards another tool's output**. `josh gate` prints the body
|
|
7
|
+
// of a step that passed with warnings or skipped, and that body is written by
|
|
9
8
|
// eslint, svelte-check, vitest or cspell — this repository owns none of those formats. One of them
|
|
10
9
|
// opening a line with the failure icon makes a *green* gate read as a failed call, and the re-run that
|
|
11
|
-
// follows it is then charged as rework
|
|
10
|
+
// follows it is then charged as rework, which the rework figure exists to keep honest.
|
|
12
11
|
//
|
|
13
12
|
// **The anchor is the command's own verdict, not the shape of every line it prints.** A command that
|
|
14
13
|
// forwards other tools' output states its own result in one line, and that line outranks the body it
|
|
@@ -17,21 +16,20 @@ import { status_icons } from '#scripts/lib/status-icons'
|
|
|
17
16
|
// each consumer's gate with inherited stdio — so a `passed` verdict speaks for the lines in front of
|
|
18
17
|
// it and the reading resumes after it (`time-reported-failure.ts` → `lines_after_last_pass`).
|
|
19
18
|
//
|
|
20
|
-
// **Why not enumerate every josh failure-line shape.**
|
|
21
|
-
// names as most likely, and rejects for the reason it names: the gate's step line is
|
|
19
|
+
// **Why not enumerate every josh failure-line shape.** The gate's step line is
|
|
22
20
|
// `✗ <label> (pnpm <cmd>) <n>s`, `josh health`'s is ` ✗ <label>` and `josh propagate`'s is
|
|
23
21
|
// ` ✗ <repo> <reason>`, so a pattern list tight enough to exclude a third-party warning is a list of
|
|
24
22
|
// per-command patterns — and the next josh command to print a failure line is silently not counted,
|
|
25
23
|
// which is the detector going quiet without failing. Reading the verdict instead leaves every other
|
|
26
24
|
// josh command exactly as it was: no verdict line, so nothing changes for them.
|
|
27
25
|
//
|
|
28
|
-
// **What it degrades to is
|
|
26
|
+
// **What it degrades to is the bare-icon reading, not silence.** A body the harness truncated past the
|
|
29
27
|
// verdict line falls back to the bare-icon reading, so the figure stays a floor. The gate's verdict is
|
|
30
28
|
// its **last** line, which is what survives the `2>&1 | tail -40` agents actually type
|
|
31
29
|
// (`prompts/collaboration-workflow/output-bounds.md`), so the fallback is the rare case rather than
|
|
32
30
|
// the common one.
|
|
33
31
|
//
|
|
34
|
-
// **The opening line is here for the same reason the verdict is
|
|
32
|
+
// **The opening line is here for the same reason the verdict is**. A verdict
|
|
35
33
|
// says where the gate's output *ended*; nothing said where it began, so a green verdict silenced every
|
|
36
34
|
// failure mark printed before it — including one written by a command that had already finished. The
|
|
37
35
|
// gate's plan line is what says "the gate starts here", and it is single-sourced for the reason the
|
|
@@ -41,8 +39,7 @@ const { FAIL_ICON, PASS_ICON } = status_icons
|
|
|
41
39
|
const GATE_SUBJECT = 'verification gate'
|
|
42
40
|
|
|
43
41
|
// The prefixes are what the detector matches **and** what the printer builds its line from, so a
|
|
44
|
-
// reworded verdict moves both ends at once — the property
|
|
45
|
-
// applied to the line. Splitting them into a printed string and a matched string is exactly the drift
|
|
42
|
+
// reworded verdict moves both ends at once — the property the icon has, applied to the line. Splitting them into a printed string and a matched string is exactly the drift
|
|
46
43
|
// this module exists to prevent.
|
|
47
44
|
const GATE_PASSED_PREFIX = `${PASS_ICON} ${GATE_SUBJECT} passed`
|
|
48
45
|
const GATE_FAILED_PREFIX = `${FAIL_ICON} ${GATE_SUBJECT} failed`
|
package/scripts/josh/josh.ts
CHANGED
|
@@ -24,8 +24,8 @@ function handle_unknown(cmd: string): never {
|
|
|
24
24
|
process.exit(1)
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
// `process.exit` truncates a piped stdout at its buffer size, and
|
|
28
|
-
//
|
|
27
|
+
// `process.exit` truncates a piped stdout at its buffer size, and the output at risk is the script's
|
|
28
|
+
// own — `scripts/gate/verification-gate.ts` writes its per-check blocks
|
|
29
29
|
// and its failure summary through this process, and sets `process.exitCode` rather than exiting for
|
|
30
30
|
// exactly that reason. Recording the code and letting node exit when the loop drains keeps every
|
|
31
31
|
// byte, and it leaves the last word with a script that finishes work after module evaluation
|
|
@@ -36,7 +36,7 @@ function record_exit_code(exit_code: number): void {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// `run_command` answers with a number for a shell command and a promise for a script it runs in
|
|
39
|
-
// this same process
|
|
39
|
+
// this same process; `await` covers both, and the argv slice is taken
|
|
40
40
|
// before it because the in-process branch replaces `process.argv` with the script's own.
|
|
41
41
|
async function main(): Promise<void> {
|
|
42
42
|
const cmd = process.argv[ARGV_OFFSET]
|
package/scripts/josh/kit-only.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { COMMAND_MAP } from './josh-command-map'
|
|
|
2
2
|
import type { CommandEntry } from './josh-command-types'
|
|
3
3
|
|
|
4
4
|
// The commands marked `is_kit_only` in the map only make sense inside the kit repository itself, so a
|
|
5
|
-
// consumer never sees them in `josh --help` and is refused with guidance when it runs one
|
|
6
|
-
//
|
|
5
|
+
// consumer never sees them in `josh --help` and is refused with guidance when it runs one.
|
|
6
|
+
// The flag lives on the entry; everything a reader needs to act on it is
|
|
7
7
|
// here, so the help filter, the dispatch guard and the distributed-doc test read one definition.
|
|
8
8
|
|
|
9
9
|
// Where a consumer is told to go. A script-emitted string, so it stays English (`CLAUDE.md` →
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { changed_paths } from '#scripts/git/changed-paths'
|
|
2
2
|
|
|
3
|
-
// The shape both path-decided commands share
|
|
3
|
+
// The shape both path-decided commands share.
|
|
4
4
|
//
|
|
5
5
|
// `josh review:level` and `josh review:round2` ask different questions of the same tree, and they answer
|
|
6
6
|
// the same way: read the changed paths, decide from them alone, print the answer on stdout and the reason on
|
|
@@ -29,8 +29,8 @@ interface DecisionCommand<Answer extends string> {
|
|
|
29
29
|
explain: (paths: ReadonlyArray<string>, answer: Answer) => string
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
// The flag contract every mechanically-decided command shares — the two here and `josh review:round2
|
|
33
|
-
//
|
|
32
|
+
// The flag contract every mechanically-decided command shares — the two here and `josh review:round2`.
|
|
33
|
+
// An argument that is not a known flag makes the whole invocation
|
|
34
34
|
// unreadable, and an unreadable invocation is never answered with a default. Shared because the
|
|
35
35
|
// *direction* is the load-bearing part rather than the `some` call: a command that guessed would
|
|
36
36
|
// hand the caller the answer they were reaching for instead of the one their tree supports, and two
|
|
@@ -5,9 +5,9 @@ import { tmpdir } from 'node:os'
|
|
|
5
5
|
// "the temp directory"**: it honors `TMPDIR`, which on macOS names a per-user `/var/folders/…/T`, so
|
|
6
6
|
// two processes with different `TMPDIR` values resolve two different places. A record one josh
|
|
7
7
|
// command writes for another to read then lands where the reader never looks — the transcript a
|
|
8
|
-
// harness wrote under `/tmp` that `os.tmpdir()` could not name
|
|
9
|
-
// record a `backlogrun` handed off that the `run:wake`-launched session began again from nothing
|
|
10
|
-
//
|
|
8
|
+
// harness wrote under `/tmp` that `os.tmpdir()` could not name, and the run
|
|
9
|
+
// record a `backlogrun` handed off that the `run:wake`-launched session began again from nothing.
|
|
10
|
+
// A cross-process handoff has to key on a root neither end's own `TMPDIR`
|
|
11
11
|
// can move, and that is what this pins.
|
|
12
12
|
//
|
|
13
13
|
// **It is decided by platform rather than written as a bare `/tmp`, because a POSIX literal is not
|
|
@@ -42,12 +42,14 @@ function resolve_temporary_root(
|
|
|
42
42
|
return can_write(POSIX_TEMP_ROOT) ? POSIX_TEMP_ROOT : tmpdir()
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
// **An explicit root wins, and the unit suite is who sets one
|
|
45
|
+
// **An explicit root wins, and the unit suite is who sets one**. Every
|
|
46
46
|
// record keyed here is shared by the whole host, so a unit test that drove a writer for real wrote
|
|
47
47
|
// into the live run's records — progress lines for issues the run never touched, relayed to the
|
|
48
48
|
// session watching it. The network guard's `arm` points this at a directory of its own before any
|
|
49
49
|
// worker forks, so every process of one test run shares a root no real run reads, and `disarm`
|
|
50
|
-
// removes it with the rest of the guard.
|
|
50
|
+
// removes it with the rest of the guard. Live evidence of `run:carry` sets it for the same
|
|
51
|
+
// reason: the run's state records are keyed here too, and evidence taken against the default root
|
|
52
|
+
// once ended the record of the run that was actually going.
|
|
51
53
|
const TEMP_ROOT_KEY = 'JOSH_TEMP_ROOT'
|
|
52
54
|
|
|
53
55
|
function temporary_root(override: string | undefined, platform: string): string {
|
|
@@ -6,7 +6,7 @@ import path from 'node:path'
|
|
|
6
6
|
import { PROBE_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
7
7
|
import { PLATFORM_TEMP_ROOT } from './platform-temporary'
|
|
8
8
|
|
|
9
|
-
// Whether the process a record names is still the one that wrote it
|
|
9
|
+
// Whether the process a record names is still the one that wrote it.
|
|
10
10
|
//
|
|
11
11
|
// **A pid is not a process identity, and every record here was treating it as one.** `process.kill(
|
|
12
12
|
// pid, 0)` answers "alive" for whatever holds that number *now*, so a marker left behind by a gate
|
|
@@ -63,8 +63,14 @@ const BEACON_PREFIX = `josh-process-identity-${String(process.getuid?.() ?? '')}
|
|
|
63
63
|
const BEACON_ID_LENGTH = 36
|
|
64
64
|
const BEACON_ID_PATTERN = /^[\da-f-]+$/u
|
|
65
65
|
const WINDOWS_PLATFORM = 'win32'
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
// The probe's three exits. Only a refused connection or a missing socket
|
|
67
|
+
// proves the listener gone; any other error, the probe's own socket timeout, and a probe killed by
|
|
68
|
+
// `PROBE_TIMEOUT_MS` or a signal leave the answer unknown, since a loaded machine produces all three
|
|
69
|
+
// for a holder that is still running.
|
|
70
|
+
const BEACON_LIVE_STATUS = 0
|
|
71
|
+
const BEACON_UNKNOWN_STATUS = 1
|
|
72
|
+
const BEACON_GONE_STATUS = 2
|
|
73
|
+
const SOCKET_PROBE_SOURCE = `const net=require('node:net');const socket=net.createConnection(process.argv[1]);socket.once('connect',()=>process.exit(${String(BEACON_LIVE_STATUS)}));socket.once('error',(error)=>process.exit(['ECONNREFUSED','ENOENT'].includes(error.code)?${String(BEACON_GONE_STATUS)}:${String(BEACON_UNKNOWN_STATUS)}));socket.setTimeout(1000,()=>process.exit(${String(BEACON_UNKNOWN_STATUS)}));`
|
|
68
74
|
const beacons = new Map<string, Server>()
|
|
69
75
|
const exit_cleanup = { is_registered: false }
|
|
70
76
|
|
|
@@ -219,15 +225,26 @@ function beacon_target(token: string): string | undefined {
|
|
|
219
225
|
return is_valid_beacon_name(path.basename(target)) ? target : undefined
|
|
220
226
|
}
|
|
221
227
|
|
|
222
|
-
|
|
228
|
+
// No status is a probe killed by its timeout or a signal — unknown, the same as its own timeout.
|
|
229
|
+
function run_socket_probe(target: string): number | undefined {
|
|
223
230
|
return (
|
|
224
231
|
spawnSync(process.execPath, ['-e', SOCKET_PROBE_SOURCE, target], {
|
|
225
232
|
stdio: 'ignore',
|
|
226
233
|
timeout: PROBE_TIMEOUT_MS,
|
|
227
|
-
}).status
|
|
234
|
+
}).status ?? undefined
|
|
228
235
|
)
|
|
229
236
|
}
|
|
230
237
|
|
|
238
|
+
function is_live_beacon(
|
|
239
|
+
target: string,
|
|
240
|
+
probe: (target: string) => number | undefined = run_socket_probe,
|
|
241
|
+
): boolean | undefined {
|
|
242
|
+
const status = probe(target)
|
|
243
|
+
if (status === BEACON_LIVE_STATUS) return true
|
|
244
|
+
|
|
245
|
+
return status === BEACON_GONE_STATUS ? false : undefined
|
|
246
|
+
}
|
|
247
|
+
|
|
231
248
|
function has_matching_start(
|
|
232
249
|
pid: number,
|
|
233
250
|
recorded_start: string,
|
|
@@ -299,7 +316,7 @@ function is_same_process(
|
|
|
299
316
|
}
|
|
300
317
|
|
|
301
318
|
// **Whether a record is the caller's own, which is a different question from whether its writer is
|
|
302
|
-
// alive
|
|
319
|
+
// alive**. `is_same_process` asks about the recorded process; this asks
|
|
303
320
|
// whether that process *is this one*. A supervisor that has been replaced reads its successor's
|
|
304
321
|
// record as perfectly live, so liveness alone can never tell a hand-over from an ordinary pass — and
|
|
305
322
|
// a writer deciding by liveness overwrites whatever it finds.
|
|
@@ -319,6 +336,7 @@ function is_own_process(pid: number | undefined, recorded_start: string | undefi
|
|
|
319
336
|
|
|
320
337
|
const process_identity = {
|
|
321
338
|
close_beacon,
|
|
339
|
+
is_live_beacon,
|
|
322
340
|
is_live_pid,
|
|
323
341
|
is_own_process,
|
|
324
342
|
is_same_process,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
2
|
|
|
3
|
-
// The pair a record names its writing process by, as `process_identity` reads it back
|
|
4
|
-
//
|
|
3
|
+
// The pair a record names its writing process by, as `process_identity` reads it back:
|
|
4
|
+
// the pid, and the opaque start token `process_identity.own_fields` wrote
|
|
5
5
|
// beside it. Every lock, marker and ledger entry that later asks `is_same_process` carries this pair,
|
|
6
|
-
// so its shape is declared once here and each record extends it
|
|
6
|
+
// so its shape is declared once here and each record extends it.
|
|
7
7
|
//
|
|
8
|
-
// `process_start` is optional because
|
|
8
|
+
// `process_start` is optional because an older record, or one written on a platform
|
|
9
9
|
// whose start time cannot be read, carries only the pid — `is_same_process` has an answer of its own
|
|
10
10
|
// for that case rather than the record being rejected.
|
|
11
11
|
const process_owner_schema = z.object({ pid: z.number(), process_start: z.string().optional() })
|