@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
|
@@ -7,9 +7,9 @@ import type { BrokenLine } from './observation-ledger-line'
|
|
|
7
7
|
import { observation_ledger_prepare } from './observation-ledger-prepare'
|
|
8
8
|
import { observations_flush_landing } from './observations-flush-landing'
|
|
9
9
|
|
|
10
|
-
// The commit path for the ledger lines no run's own commit carried
|
|
10
|
+
// The commit path for the ledger lines no run's own commit carried. Every run —
|
|
11
11
|
// a lane's included — commits its appended lines with its own pull request (`scripts/git/
|
|
12
|
-
// git-staging.ts
|
|
12
|
+
// git-staging.ts`), and `pnpm josh followup` commits a
|
|
13
13
|
// line appended after that commit before it merges, so what is left here is a line written on the
|
|
14
14
|
// default branch outside any issue's run — the date-named file `observation-ledger-home.ts` resolves.
|
|
15
15
|
//
|
|
@@ -17,7 +17,7 @@ import { observations_flush_landing } from './observations-flush-landing'
|
|
|
17
17
|
// their own over one path, wait on the same required checks every other pull request waits on, and
|
|
18
18
|
// merge — so this reuses the same primitives rather than growing a second answer to "how does a
|
|
19
19
|
// josh command open and land a pull request". The one difference is that this pull request is handed
|
|
20
|
-
// to GitHub's auto-merge as soon as it opens
|
|
20
|
+
// to GitHub's auto-merge as soon as it opens, so it lands even when the wait
|
|
21
21
|
// below does not survive — `observations-flush-landing.ts` carries why.
|
|
22
22
|
|
|
23
23
|
const COMMIT_MESSAGE = 'Record observation ledger entries'
|
|
@@ -72,7 +72,7 @@ function status_paths(status_output: string): ReadonlyArray<string> {
|
|
|
72
72
|
.map((line) => observation_ledger.status_path(line))
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
// **Single-sourced with `pnpm josh followup`'s pre-flush short-circuit
|
|
75
|
+
// **Single-sourced with `pnpm josh followup`'s pre-flush short-circuit**:
|
|
76
76
|
// the ledger-change test lives in `observation-ledger.ts`, so the two callers cannot drift.
|
|
77
77
|
function has_ledger_change(status_output: string): boolean {
|
|
78
78
|
return observation_ledger.has_pending_append(status_output)
|
|
@@ -89,17 +89,17 @@ function other_changed_paths(status_output: string): ReadonlyArray<string> {
|
|
|
89
89
|
// is what the ordinary off-default refusal says — would abandon them without a word, so this branch
|
|
90
90
|
// of the refusal says the opposite.
|
|
91
91
|
//
|
|
92
|
-
// **The exits it names are ones the caller can actually take
|
|
93
|
-
//
|
|
92
|
+
// **The exits it names are ones the caller can actually take**. "Finish or delete that branch" are
|
|
93
|
+
// both closed to an agent: the distributed
|
|
94
94
|
// `.claude/settings.json` denies `Bash(git commit*)` and `Bash(git branch -d*)`, and `pnpm josh git`
|
|
95
|
-
// excludes the ledger from staging by design
|
|
95
|
+
// excludes the ledger from staging by design, so finishing through it is not
|
|
96
96
|
// possible either. Pushing the branch and landing its pull request is the route that is open.
|
|
97
97
|
function stranded_flush_message(current: string): string {
|
|
98
98
|
return `\`${current}\` is a flush branch an earlier \`pnpm josh observations:flush\` left behind, and its appended observations are committed only there. Land it before flushing again — \`git push -u origin ${current}\`, then open and merge its pull request; \`pnpm josh ms\` here would leave the only copy of those lines behind.`
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
// **A flush branch with no commit on it strands nothing, so it is told the opposite
|
|
102
|
-
//
|
|
101
|
+
// **A flush branch with no commit on it strands nothing, so it is told the opposite**.
|
|
102
|
+
// The appended lines never left the working tree, which makes the "only
|
|
103
103
|
// copy" premise above factually false here — and makes `pnpm josh ms` the correct exit, the very one
|
|
104
104
|
// the other message forbids.
|
|
105
105
|
function empty_flush_message(current: string): string {
|
|
@@ -120,9 +120,9 @@ function off_default_message(current: string, default_branch: string): string {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
// **A branch cut from a default branch that predates another merged flush conflicts by
|
|
123
|
-
// construction
|
|
123
|
+
// construction**. The ledger is append-only and every writer adds at the
|
|
124
124
|
// same tail, so a stale start point opens a pull request `wait_for_pr_success` waits on until it
|
|
125
|
-
// exhausts its budget rather than merging. The flush fast-forwards first
|
|
125
|
+
// exhausts its budget rather than merging. The flush fast-forwards first, so
|
|
126
126
|
// this is printed only when that fast-forward was refused — the reason is git's own.
|
|
127
127
|
function behind_default_message(default_branch: string, reason: string): string {
|
|
128
128
|
return `\`pnpm josh observations:flush\` cuts its branch from \`${default_branch}\`, which is behind \`origin/${default_branch}\` and could not be fast-forwarded (${reason}) — a branch cut here would open a pull request that cannot merge. Run \`pnpm josh ms\` first.`
|
|
@@ -183,7 +183,7 @@ async function refuse_off_default(current: string, default_branch: string): Prom
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
// **The start point's freshness is judged without moving the working tree**, which is the whole
|
|
186
|
-
// point of doing it here rather than pulling
|
|
186
|
+
// point of doing it here rather than pulling. `git fetch` updates the
|
|
187
187
|
// remote-tracking ref and `git rev-list --count HEAD..origin/<default>` reads it — neither writes a
|
|
188
188
|
// file, so the ledger, dirty by definition when this runs, is left exactly as it is.
|
|
189
189
|
async function commits_behind_default(default_branch: string): Promise<number> {
|
|
@@ -192,8 +192,8 @@ async function commits_behind_default(default_branch: string): Promise<number> {
|
|
|
192
192
|
return await git_command.commit_count_beyond('HEAD', `origin/${default_branch}`)
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
// **A default branch that is only behind is brought forward rather than refused
|
|
196
|
-
//
|
|
195
|
+
// **A default branch that is only behind is brought forward rather than refused**.
|
|
196
|
+
// A lane's flush acts on the primary checkout, whose default branch is
|
|
197
197
|
// behind by the lane's own merge every time — so the refusal alone stopped every lane close. A
|
|
198
198
|
// `--ff-only` merge moves no file the dirty ledger conflicts with: git refuses it, untouched, when an
|
|
199
199
|
// incoming commit changes the ledger too, and only that case is still refused.
|
|
@@ -231,7 +231,7 @@ async function refuse_unsafe_flush(status_output: string): Promise<string> {
|
|
|
231
231
|
// **Its exit code is read rather than discarded**: `run` catches its own errors and returns `1`, so a
|
|
232
232
|
// checkout left on the flush branch would otherwise be reported as a completed flush.
|
|
233
233
|
//
|
|
234
|
-
// **The local default branch is fast-forwarded before it is checked out
|
|
234
|
+
// **The local default branch is fast-forwarded before it is checked out**.
|
|
235
235
|
// Lines appended while the pull request waited leave the ledger dirty, and git refuses to check out a
|
|
236
236
|
// default branch whose ledger differs from the flush branch's. Once the merge is in, the fast-forwarded
|
|
237
237
|
// default branch holds the same ledger the flush branch does, so the checkout carries those lines over.
|
|
@@ -266,9 +266,8 @@ async function push_and_open(branch_name: string): Promise<string> {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
// **The side that created the branch is the side that rolls it back
|
|
270
|
-
//
|
|
271
|
-
// refusal the next run printed named two exits an agent cannot take. Nothing is stranded at this
|
|
269
|
+
// **The side that created the branch is the side that rolls it back**, so a commit rejected by the
|
|
270
|
+
// pre-commit hook does not leave the branch behind with nothing on it. Nothing is stranded at this
|
|
272
271
|
// point — the appended lines are still in the working tree, staged and uncommitted — so returning to
|
|
273
272
|
// the default branch and removing the branch loses none of them.
|
|
274
273
|
//
|
|
@@ -300,7 +299,7 @@ function rejection_message(
|
|
|
300
299
|
return roll_back_failure_message(branch_name, reason, roll_back_reason)
|
|
301
300
|
}
|
|
302
301
|
|
|
303
|
-
// **Every ledger path the status names is staged, not the one constant
|
|
302
|
+
// **Every ledger path the status names is staged, not the one constant**.
|
|
304
303
|
// After a migration the change is the new file together with the old one's deletion, and a commit
|
|
305
304
|
// holding only the first would leave the deletion behind as a change no later flush could tell apart
|
|
306
305
|
// from a fresh append.
|
|
@@ -342,8 +341,8 @@ async function open_pull_request(branch_name: string, default_branch: string): P
|
|
|
342
341
|
// at any more. The next flush would read `has_ledger_change` as false and report `clean`, which is
|
|
343
342
|
// the silent loss the refusals above exist to prevent. Left on the branch, the refusal fires.
|
|
344
343
|
//
|
|
345
|
-
// With auto-merge on, a failed wait
|
|
346
|
-
// the checks pass
|
|
344
|
+
// With auto-merge on, a failed wait does not strand the lines for good — GitHub still merges once
|
|
345
|
+
// the checks pass — but the checkout stays on the branch all the same,
|
|
347
346
|
// because only a merge this command has seen makes returning to the default branch safe.
|
|
348
347
|
async function land(
|
|
349
348
|
branch_name: string,
|
|
@@ -380,9 +379,9 @@ function broken_lines_message(broken: ReadonlyArray<BrokenLine>): string {
|
|
|
380
379
|
}
|
|
381
380
|
|
|
382
381
|
// **A malformed line is refused before a branch is cut, not after.** The ledger path was collected
|
|
383
|
-
// without a line ever being parsed
|
|
382
|
+
// without a line ever being parsed, so a broken append could ride a flush
|
|
384
383
|
// through; validating here keeps the committed ledger to its grammar. The migration and the parse are
|
|
385
|
-
// `observation-ledger-prepare.ts`'s, shared with the run's own commit
|
|
384
|
+
// `observation-ledger-prepare.ts`'s, shared with the run's own commit.
|
|
386
385
|
async function prepare_ledger(): Promise<void> {
|
|
387
386
|
const broken = await observation_ledger_prepare.prepare(process.cwd())
|
|
388
387
|
|
|
@@ -392,12 +391,12 @@ async function prepare_ledger(): Promise<void> {
|
|
|
392
391
|
// **Nothing pulls in front of the branch, and that is deliberate.** The ledger is dirty by
|
|
393
392
|
// definition at this point, so `git pull --ff-only` aborts on it in exactly the case a pull would
|
|
394
393
|
// have been for — an upstream flush that already advanced the ledger — and reports a failure about
|
|
395
|
-
// the wrong thing
|
|
396
|
-
// point is read from the remote first
|
|
397
|
-
// only where git can do it without touching the ledger
|
|
394
|
+
// the wrong thing. So the freshness of the start
|
|
395
|
+
// point is read from the remote first, and `catch_up_default` fast-forwards
|
|
396
|
+
// only where git can do it without touching the ledger: a default branch
|
|
398
397
|
// that predates another merged flush still stops here — before a branch is cut — rather than opening
|
|
399
398
|
// a pull request that cannot merge. An earlier flush pull request still open is checked for the same
|
|
400
|
-
// reason
|
|
399
|
+
// reason: a branch cut beside it conflicts with it at the ledger's tail.
|
|
401
400
|
async function flush(now: Date): Promise<string> {
|
|
402
401
|
const status_output = await git_command.status()
|
|
403
402
|
const default_branch = await refuse_unsafe_flush(status_output)
|
|
@@ -10,11 +10,15 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { readFileSync, writeFileSync } from 'node:fs'
|
|
12
12
|
import { fileURLToPath } from 'node:url'
|
|
13
|
-
import {
|
|
13
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
14
14
|
import { overrides_snapshot_schema } from '#scripts/lib/schemas'
|
|
15
15
|
import { overrides_files } from './overrides-files'
|
|
16
16
|
import { overrides_check, type OverridesDiff } from './overrides-logic'
|
|
17
17
|
|
|
18
|
+
const ARGV_OFFSET = 2
|
|
19
|
+
const OPTIONS = { save: { type: 'boolean', default: false } } as const
|
|
20
|
+
const USAGE = cli_flags.usage_line(['--save'], 'overrides')
|
|
21
|
+
|
|
18
22
|
function is_file_not_found(error: unknown): boolean {
|
|
19
23
|
return error instanceof Error && 'code' in error && error.code === 'ENOENT'
|
|
20
24
|
}
|
|
@@ -70,15 +74,21 @@ function run_overrides_check(should_save: boolean): void {
|
|
|
70
74
|
console.info(`✔ overrides unchanged (${summary}).`)
|
|
71
75
|
}
|
|
72
76
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
// A line nobody can read is refused before the snapshot is read or written: a misspelled `--save` that
|
|
78
|
+
// fell through would compare against the record the caller meant to replace.
|
|
79
|
+
function refuse_usage(): never {
|
|
80
|
+
console.error(USAGE)
|
|
81
|
+
|
|
82
|
+
return process.exit(1)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function main(argv: ReadonlyArray<string>): void {
|
|
86
|
+
const values = cli_flags.values_of(argv, OPTIONS)
|
|
78
87
|
|
|
88
|
+
if (values === undefined) refuse_usage()
|
|
79
89
|
run_overrides_check(values.save)
|
|
80
90
|
}
|
|
81
91
|
|
|
82
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) main()
|
|
92
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) main(process.argv.slice(ARGV_OFFSET))
|
|
83
93
|
|
|
84
|
-
export { run_overrides_check }
|
|
94
|
+
export { run_overrides_check, main }
|
|
@@ -13,7 +13,7 @@ import { package_scout_format } from './package-scout-format'
|
|
|
13
13
|
|
|
14
14
|
// `josh pkg:scout <keywords> [--size <n>]` — before the Package-First tier decision, rank the
|
|
15
15
|
// candidate packages by measured metrics so "clearly best (Tier A)" and "genuine toss-up (Tier B)"
|
|
16
|
-
// are read off the output rather than judged
|
|
16
|
+
// are read off the output rather than judged.
|
|
17
17
|
//
|
|
18
18
|
// The registry answers in three reads: one search for the candidates, then per candidate a downloads
|
|
19
19
|
// point and the latest version metadata (bundled types, license, unpacked size). A per-candidate read
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from './package-scout'
|
|
7
7
|
|
|
8
8
|
// The printed shape of `josh pkg:scout` — one line per candidate with each metric labelled, then a
|
|
9
|
-
// verdict line that names whether the choice is a Tier A pick or a Tier B question
|
|
10
|
-
//
|
|
9
|
+
// verdict line that names whether the choice is a Tier A pick or a Tier B question.
|
|
10
|
+
// Formatting is pure so the layout and the verdict wording are unit-tested
|
|
11
11
|
// without a registry.
|
|
12
12
|
|
|
13
13
|
// The blank shown for a metric the registry did not report — a fact absent, never a zero measured.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The measured metrics behind `josh pkg:scout` — the ranking of package candidates and the near-tie
|
|
2
2
|
// verdict that turns the Package-First "clearly best (Tier A) / genuine toss-up (Tier B)" branch from
|
|
3
|
-
// an impression into a computed answer
|
|
3
|
+
// an impression into a computed answer.
|
|
4
4
|
//
|
|
5
5
|
// This module is the pure half: it takes candidates already gathered from the npm registry and
|
|
6
6
|
// answers two things — the order they rank in, and whether the top two are close enough that the
|
|
@@ -7,7 +7,7 @@ import type { StepResult } from './propagate-run'
|
|
|
7
7
|
// a failed spawn reports one exit code for all three. The run's report then appended "upgrade/sync
|
|
8
8
|
// changes left uncommitted" to that code, which names the *first* of the three: so a consumer whose
|
|
9
9
|
// pre-push hook refused the push was reported as a consumer whose sync never got committed, and the
|
|
10
|
-
// reader went looking at a sync that had worked
|
|
10
|
+
// reader went looking at a sync that had worked.
|
|
11
11
|
//
|
|
12
12
|
// **Nothing here changes whether a push is blocked.** A consumer's pre-push gate refusing a push is
|
|
13
13
|
// the gate doing its job, and the probes below are read-only. What is fixed is the sentence.
|
|
@@ -10,7 +10,7 @@ import { GIT_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
|
10
10
|
// Propagation commits and pushes. A consumer with uncommitted work would have that work swept into
|
|
11
11
|
// the upgrade commit — `josh git` stages the whole tree — and a supplier repository that is behind
|
|
12
12
|
// its remote would propagate the *previous* release, which is already published and would report
|
|
13
|
-
// success
|
|
13
|
+
// success.
|
|
14
14
|
|
|
15
15
|
// The probes that talk to the remote get their own budget. Ten seconds is generous for a local
|
|
16
16
|
// `rev-parse` and tight for an ssh handshake, and a probe that times out answers "no" — which for
|
|
@@ -27,7 +27,7 @@ interface TreeState {
|
|
|
27
27
|
reason?: string
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
// **`cwd` alone does not say which repository this is about
|
|
30
|
+
// **`cwd` alone does not say which repository this is about**. `GIT_DIR` and
|
|
31
31
|
// `GIT_WORK_TREE` beat it outright, and git exports both to every hook it runs — so under
|
|
32
32
|
// `pnpm josh git`'s pre-push hook every probe below silently answered about the checkout the hook was
|
|
33
33
|
// firing in rather than the path it was handed. The visible cost was in the unit suite, where
|
|
@@ -42,8 +42,8 @@ interface TreeState {
|
|
|
42
42
|
// because every call below already passes the path this way and a second spelling of the same intent
|
|
43
43
|
// is one more thing to keep in step.
|
|
44
44
|
//
|
|
45
|
-
// **The list itself
|
|
46
|
-
//
|
|
45
|
+
// **The list itself lives in `#scripts/git/git-location-environment`**: three consumers clear the
|
|
46
|
+
// same names, and a list kept
|
|
47
47
|
// in one of them is a list the other two drift away from. It widened there past `GIT_DIR` /
|
|
48
48
|
// `GIT_WORK_TREE` to the index and object-store variables, which redirect a *write* rather than a
|
|
49
49
|
// lookup — inert for the read-only probes below, and required by the fixture that commits.
|
|
@@ -116,8 +116,8 @@ function commit_ahead(repository_path: string, default_name: string): string | u
|
|
|
116
116
|
// remote-tracking ref: a push that was refused leaves no such ref behind, and neither does a branch
|
|
117
117
|
// that was never pushed at all, so the ref cannot tell the two apart.
|
|
118
118
|
//
|
|
119
|
-
// **The arguments come from `git-ls-remote.ts`, which anchors the pattern at `refs/heads
|
|
120
|
-
//
|
|
119
|
+
// **The arguments come from `git-ls-remote.ts`, which anchors the pattern at `refs/heads/`**.
|
|
120
|
+
// Built here from the bare name, the query answered for any branch whose
|
|
121
121
|
// ref ends in it — so a lane pushed as `wip/1641-lane` reported `1641-lane` as already on origin,
|
|
122
122
|
// and propagation classified an unpushed branch as pushed.
|
|
123
123
|
function has_remote_branch(repository_path: string, branch: string): boolean {
|
|
@@ -130,7 +130,7 @@ function has_remote_branch(repository_path: string, branch: string): boolean {
|
|
|
130
130
|
// --git-path` does not. Without this the classification would name a hook on the strength of a dry
|
|
131
131
|
// run alone, and **any** push failure that has cleared by the time the probe runs satisfies that: a
|
|
132
132
|
// dropped ssh connection, a refreshed token, one 500 from GitHub. Naming a hook that does not exist
|
|
133
|
-
// is the same misattribution
|
|
133
|
+
// is the same misattribution as blaming the wrong push sub-step, pointed the other way.
|
|
134
134
|
function hooks_directory(repository_path: string): string | undefined {
|
|
135
135
|
const configured = run_git(repository_path, ['config', '--get', 'core.hooksPath'])
|
|
136
136
|
if (configured !== undefined && configured !== '') return configured
|
|
@@ -3,7 +3,7 @@ import { propagate_run, type RunStep, type StepResult } from './propagate-run'
|
|
|
3
3
|
import { propagate_steps, type Release, type ReleasePlan } from './propagate-steps'
|
|
4
4
|
import { propagate_targets, type Manifest, type PropagateTarget } from './propagate-targets'
|
|
5
5
|
|
|
6
|
-
// What one `josh propagate` run carries, decided from the repository it runs in
|
|
6
|
+
// What one `josh propagate` run carries, decided from the repository it runs in.
|
|
7
7
|
//
|
|
8
8
|
// The supplier is kit or any toolkit built on it — app-kit, game-kit — and a toolkit's propagation
|
|
9
9
|
// carries the base packages under it too, at the versions that toolkit itself has installed and was
|
|
@@ -77,7 +77,7 @@ function pin_installed(project_root: string, release: Release): Release | undefi
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
// Why a declared base toolkit would fall out of the plan, naming it — either way `josh adopt` refuses
|
|
80
|
-
// one for
|
|
80
|
+
// one for. A base left out is not merely left behind: every consumer that
|
|
81
81
|
// installs it would then read it as a toolkit above this one and be skipped.
|
|
82
82
|
function incomplete_cause(project_root: string): string | undefined {
|
|
83
83
|
const misplaced = adopt_toolkits.misplaced_toolkits(project_root)
|
|
@@ -7,9 +7,8 @@ import { with_page_size } from '#scripts/version/version-remote'
|
|
|
7
7
|
//
|
|
8
8
|
// A merge is not a publish: kit's auto-tag and publish workflows run after the merge commit lands,
|
|
9
9
|
// so a consumer told to upgrade the instant the PR merged resolves the previous release. The wait is
|
|
10
|
-
// implemented once here because
|
|
11
|
-
// condition — two implementations would drift, and the looser one would decide
|
|
12
|
-
// (joshuafolkken/kit#863).
|
|
10
|
+
// implemented once here because resolving a cross-repository epic child waits on the same
|
|
11
|
+
// condition — two implementations would drift, and the looser one would decide.
|
|
13
12
|
|
|
14
13
|
const VERSIONS_PAGE_SIZE = 100
|
|
15
14
|
const NAMES_JQ = '[.[] | .name]'
|
|
@@ -5,11 +5,11 @@ import type { PropagateTarget } from './propagate-targets'
|
|
|
5
5
|
//
|
|
6
6
|
// One consumer's failure never stops another: the whole point of the command is to leave the run
|
|
7
7
|
// knowing which consumers took the release and which did not, and a run that aborts on the first
|
|
8
|
-
// failure answers that for a prefix of them
|
|
8
|
+
// failure answers that for a prefix of them.
|
|
9
9
|
|
|
10
10
|
// The steps, in order, that carry a release into one consumer. `josh` here is the consumer's own
|
|
11
11
|
// installed CLI, run from the consumer's directory — which is what keeps kit's self-sync guard
|
|
12
|
-
//
|
|
12
|
+
// out of the way: the sync runs in a consumer project, where it belongs.
|
|
13
13
|
const STEP_PRECHECK = 'working tree check'
|
|
14
14
|
const STEP_UPGRADE = 'josh vu'
|
|
15
15
|
const STEP_SYNC = 'josh sync'
|
|
@@ -44,8 +44,7 @@ interface StepResult {
|
|
|
44
44
|
// file, for instance. The sequence ends here as a skip rather than opening an empty pull request.
|
|
45
45
|
is_complete?: boolean
|
|
46
46
|
// What this failure actually left in the consumer, as the failing step measured it. Only the
|
|
47
|
-
// steps that can probe set it; for the rest the standing note below is what they always leave
|
|
48
|
-
// (joshuafolkken/kit#1417).
|
|
47
|
+
// steps that can probe set it; for the rest the standing note below is what they always leave.
|
|
49
48
|
leftover?: string
|
|
50
49
|
}
|
|
51
50
|
|
|
@@ -89,9 +88,8 @@ function has_leftover_changes(steps: ReadonlyArray<StepResult>): boolean {
|
|
|
89
88
|
|
|
90
89
|
// What to say the failure left behind. A step that measured it wins; the note above stands in only
|
|
91
90
|
// where none did, which is every step before the commit — and there it is accurate, since nothing
|
|
92
|
-
// has committed yet.
|
|
93
|
-
//
|
|
94
|
-
// pre-push hook was reported as changes that were never committed.
|
|
91
|
+
// has committed yet. Appended to *every* failure after the upgrade, it would report a push refused
|
|
92
|
+
// by the consumer's pre-push hook as changes that were never committed.
|
|
95
93
|
function leftover_of(result: StepResult, steps: ReadonlyArray<StepResult>): string | undefined {
|
|
96
94
|
if (!has_leftover_changes(steps)) return undefined
|
|
97
95
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { propagate_run } from './propagate-run'
|
|
2
2
|
import type { PropagateTarget, TargetState } from './propagate-targets'
|
|
3
3
|
|
|
4
|
-
// Narrowing a run to the one consumer `--target` names
|
|
4
|
+
// Narrowing a run to the one consumer `--target` names.
|
|
5
5
|
//
|
|
6
6
|
// Every other consumer stays in the list as `not_selected`, so the report still accounts for each
|
|
7
7
|
// repository considered and says why it was left alone. A name that matches nothing — or matches a
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { pr_classification } from '#scripts/ci/pr-classification'
|
|
2
2
|
import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
3
3
|
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
4
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
4
5
|
import { OTHER_CHANGE_LABEL } from '#scripts/issue/issue-labels'
|
|
5
6
|
import { GATE_COMMAND } from '#scripts/josh/josh-command-types'
|
|
6
7
|
import { error_text } from '#scripts/lib/error-message'
|
|
@@ -18,11 +19,11 @@ import type { PropagateTarget } from './propagate-targets'
|
|
|
18
19
|
// Kept out of the command module because two of the steps are not plain spawns: the pre-check is a
|
|
19
20
|
// decision made from git probes, and the pull-request step needs the issue number the step before it
|
|
20
21
|
// created. A closure carries that number instead of module-level state, so a run is self-contained
|
|
21
|
-
// and the sequencing stays testable
|
|
22
|
+
// and the sequencing stays testable.
|
|
22
23
|
|
|
23
24
|
const SUCCESS_EXIT_CODE = 0
|
|
24
25
|
// The consumer-side gate. `josh gate` is the same command the AI documents require of a person
|
|
25
|
-
//
|
|
26
|
+
// — running the four checks concurrently and reporting every failure in one
|
|
26
27
|
// pass — so the chain is not repeated here. It resolves in the consumer's directory, which by this
|
|
27
28
|
// point has already been upgraded to the version being propagated, so the command is present.
|
|
28
29
|
const VERIFY_SCRIPT = `pnpm josh ${GATE_COMMAND}`
|
|
@@ -37,12 +38,11 @@ const STEP_COMMANDS: Readonly<Record<string, ReadonlyArray<string>>> = {
|
|
|
37
38
|
|
|
38
39
|
// kit's own CLI name. The sync is spelled through the *toolkit's* bin rather than hardcoded, because
|
|
39
40
|
// `@joshuafolkken/app-kit` syncs with `josh-app` and `@joshuafolkken/game-kit` with `josh-game`; a
|
|
40
|
-
// run that synced only `josh` would leave the other toolkit's managed files behind
|
|
41
|
-
// (joshuafolkken/kit#1085).
|
|
41
|
+
// run that synced only `josh` would leave the other toolkit's managed files behind.
|
|
42
42
|
const JOSH_BIN = 'josh'
|
|
43
43
|
|
|
44
44
|
// `pnpm <bin>` resolves the target's own installed CLI, never this checkout — which is what keeps
|
|
45
|
-
// the sync a consumer-side sync and leaves kit's self-sync guard
|
|
45
|
+
// the sync a consumer-side sync and leaves kit's self-sync guard satisfied.
|
|
46
46
|
function sync_command(bin_name: string): ReadonlyArray<string> {
|
|
47
47
|
return ['pnpm', bin_name, 'sync']
|
|
48
48
|
}
|
|
@@ -67,9 +67,9 @@ const PROPAGATE_ORIGIN =
|
|
|
67
67
|
'Opened by `josh propagate` from the supplier repository after the release was published.'
|
|
68
68
|
const RUN_NOTE =
|
|
69
69
|
'The upgrade, the managed-file sync and the verification gate have already run here.'
|
|
70
|
-
// `josh git` refuses to open a pull request for an issue that declares no release classification
|
|
71
|
-
//
|
|
72
|
-
// the consumer's own, which is what `other-change` covers
|
|
70
|
+
// `josh git` refuses to open a pull request for an issue that declares no release classification,
|
|
71
|
+
// so the upgrade issue declares one. A dependency upgrade changes no code of
|
|
72
|
+
// the consumer's own, which is what `other-change` covers.
|
|
73
73
|
const UPGRADE_CLASSIFICATION = OTHER_CHANGE_LABEL
|
|
74
74
|
const EMPTY_PLAN_TITLE = 'Upgrade the installed toolkits'
|
|
75
75
|
const LAST_SEPARATOR = ' and '
|
|
@@ -91,8 +91,8 @@ function release_names(releases: ReadonlyArray<Release>): string {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
// Each release with its own version, for a plan whose releases disagree on one — a toolkit's
|
|
94
|
-
// propagation carries the base packages at the versions that toolkit was verified with
|
|
95
|
-
//
|
|
94
|
+
// propagation carries the base packages at the versions that toolkit was verified with,
|
|
95
|
+
// so one shared "to <version>" would name a version most of them are not.
|
|
96
96
|
function versioned_names(releases: ReadonlyArray<Release>): string {
|
|
97
97
|
const named = releases.map((release) => ({
|
|
98
98
|
...release,
|
|
@@ -181,9 +181,8 @@ function spawn_step(
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
// The same, keeping what the command printed. Only the pull-request step uses it: a consumer's
|
|
184
|
-
// pre-push hook names the check that stopped it in its own last lines, and
|
|
185
|
-
//
|
|
186
|
-
// three sub-steps with, and attributed it to the wrong one.
|
|
184
|
+
// pre-push hook names the check that stopped it in its own last lines, and without them
|
|
185
|
+
// the report has one exit code to attribute three sub-steps with, and can blame the wrong one.
|
|
187
186
|
//
|
|
188
187
|
// **This step's output is replayed when it finishes rather than printed as it runs**, and that is
|
|
189
188
|
// the price of keeping it. A synchronous spawn gives one target per file descriptor, so `['inherit',
|
|
@@ -233,10 +232,10 @@ function precheck_step(target: PropagateTarget, step: string): StepResult {
|
|
|
233
232
|
// rather than a branchless pull request that cannot be opened at all.
|
|
234
233
|
//
|
|
235
234
|
// It posts to REST instead of running `gh issue create`: that command goes through GraphQL, which a
|
|
236
|
-
// cloud session is answered 403 for, while the REST endpoint is served normally
|
|
237
|
-
//
|
|
235
|
+
// cloud session is answered 403 for, while the REST endpoint is served normally.
|
|
236
|
+
// This was the last `gh <noun> <verb>` spawn in kit's own code, and it was
|
|
238
237
|
// missed by that epic's survey because the survey counted `exec_gh_command` call sites and this one
|
|
239
|
-
// spawned gh directly
|
|
238
|
+
// spawned gh directly.
|
|
240
239
|
//
|
|
241
240
|
// The request is the one every issue creation builds, and the spawn is the synchronous twin of the
|
|
242
241
|
// one the asynchronous writers use — so no second write layer exists to disagree with the first.
|
|
@@ -246,7 +245,7 @@ function precheck_step(target: PropagateTarget, step: string): StepResult {
|
|
|
246
245
|
// gh's own output is the only thing that distinguishes a missing scope from disabled issues from a
|
|
247
246
|
// repository that does not exist. Reporting `could not open an issue` alone hides all three, so the
|
|
248
247
|
// whole message is kept — `to_gh_error` puts the stderr summary and the JSON body REST writes to
|
|
249
|
-
// stdout on separate lines
|
|
248
|
+
// stdout on separate lines, and both carry the reason.
|
|
250
249
|
//
|
|
251
250
|
// **It is folded back onto one line here.** The run's report is one line per consumer, and
|
|
252
251
|
// `failure_reason` appends the "changes left uncommitted" warning to the end of this text — so a
|
|
@@ -319,7 +318,7 @@ function issue_step(
|
|
|
319
318
|
|
|
320
319
|
// Put the consumer back on its default branch. `josh git` leaves it on the feature branch, and the
|
|
321
320
|
// next run's pre-check would refuse it for that — the consumer would silently stop receiving
|
|
322
|
-
// releases
|
|
321
|
+
// releases.
|
|
323
322
|
function return_step(target: PropagateTarget, step: string): StepResult {
|
|
324
323
|
if (propagate_git.return_to_default_branch(target.path)) return { step, is_ok: true }
|
|
325
324
|
|
|
@@ -335,7 +334,7 @@ function pull_request_step(
|
|
|
335
334
|
): StepResult {
|
|
336
335
|
const number = issue_numbers.get(target.repo)
|
|
337
336
|
if (number === undefined) return { step, is_ok: false, detail: 'no issue number' }
|
|
338
|
-
const argument = `${plan_title(plan.releases)}
|
|
337
|
+
const argument = `${plan_title(plan.releases)} ${issue_cite.plain(number)}`
|
|
339
338
|
const outcome = spawn_captured(target, step, ['pnpm', 'josh', 'git', '-y', argument])
|
|
340
339
|
if (outcome.result.is_ok) return outcome.result
|
|
341
340
|
|
|
@@ -352,7 +351,7 @@ interface Release {
|
|
|
352
351
|
|
|
353
352
|
// What one run carries: the releases, and the sentence naming the command that opened the issue.
|
|
354
353
|
// `josh propagate` always passes exactly one release; `josh adopt` passes every toolkit installed in
|
|
355
|
-
// the repository it runs in
|
|
354
|
+
// the repository it runs in. Only the upgrade and the sync repeat per
|
|
356
355
|
// release — the pre-check, the verification gate, the issue, the pull request and the return to the
|
|
357
356
|
// default branch happen once, which is why the step order itself is unchanged.
|
|
358
357
|
interface ReleasePlan {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import type { RepoMap } from '#scripts/discovery/repo-map-logic'
|
|
4
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
4
5
|
import { z } from 'zod'
|
|
5
6
|
|
|
6
7
|
// Deciding which repositories a published release should be carried into.
|
|
7
8
|
//
|
|
8
|
-
// The candidate set is
|
|
9
|
+
// The candidate set is the repository discovery map, so the owner restriction is inherited
|
|
9
10
|
// rather than restated: propagation writes — `josh vu`, `josh sync`, a commit, a pull request — and
|
|
10
11
|
// a write aimed at somebody else's repository is worse than a read aimed at one. Nothing here
|
|
11
12
|
// re-implements discovery.
|
|
@@ -13,16 +14,15 @@ import { z } from 'zod'
|
|
|
13
14
|
// Which candidates are targets is read from the candidate itself: a repository is downstream when
|
|
14
15
|
// its manifest declares a dependency on this package. That is a fact about the checkout in front of
|
|
15
16
|
// us rather than a roster, so a new consumer needs no edit here — and it covers a consumer that is
|
|
16
|
-
// not a published package at all, which a list of downstream package names cannot
|
|
17
|
-
// (joshuafolkken/kit#863).
|
|
17
|
+
// not a published package at all, which a list of downstream package names cannot.
|
|
18
18
|
|
|
19
19
|
const MANIFEST_NAME = 'package.json'
|
|
20
20
|
const NODE_MODULES = 'node_modules'
|
|
21
21
|
|
|
22
22
|
// Why a candidate is not going to be processed, or that it is. `not_selected` is the one state set
|
|
23
|
-
// after classification: a candidate `--target` left out
|
|
23
|
+
// after classification: a candidate `--target` left out. `carried_above` is
|
|
24
24
|
// the other: a consumer that installs a toolkit above the supplier, which that toolkit's own
|
|
25
|
-
// propagation delivers instead
|
|
25
|
+
// propagation delivers instead.
|
|
26
26
|
type TargetState =
|
|
27
27
|
| 'ready'
|
|
28
28
|
| 'up_to_date'
|
|
@@ -68,11 +68,7 @@ function read_manifest(repository_path: string): Manifest | undefined {
|
|
|
68
68
|
if (!existsSync(manifest_path)) return undefined
|
|
69
69
|
|
|
70
70
|
try {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const result = manifest_schema.safeParse(parsed)
|
|
74
|
-
|
|
75
|
-
return result.success ? result.data : undefined
|
|
71
|
+
return json_value.parse_with(readFileSync(manifest_path, 'utf8'), manifest_schema)
|
|
76
72
|
} catch {
|
|
77
73
|
return undefined
|
|
78
74
|
}
|
|
@@ -15,7 +15,7 @@ import { propagate_steps, type ReleasePlan } from './propagate-steps'
|
|
|
15
15
|
import { propagate_targets, type PropagateTarget } from './propagate-targets'
|
|
16
16
|
|
|
17
17
|
// `josh propagate` — carry the release this repository just published into every consumer checked
|
|
18
|
-
// out next to it
|
|
18
|
+
// out next to it.
|
|
19
19
|
|
|
20
20
|
const SUCCESS_EXIT_CODE = 0
|
|
21
21
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -32,7 +32,7 @@ const UNTOUCHED_NOTE = 'No consumer was touched.'
|
|
|
32
32
|
interface RunOptions {
|
|
33
33
|
is_dry_run: boolean
|
|
34
34
|
is_publish_wait_skipped: boolean
|
|
35
|
-
// The one consumer to propagate to, when `--target` narrowed the run
|
|
35
|
+
// The one consumer to propagate to, when `--target` narrowed the run.
|
|
36
36
|
target?: string
|
|
37
37
|
// The usage message, when the arguments were not accepted. Carried alongside rather than returned
|
|
38
38
|
// instead, so the caller has one shape to branch on.
|
|
@@ -87,11 +87,11 @@ function parse_options(argv: ReadonlyArray<string>): RunOptions {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// Propagation runs from the supplier's own repository, and only there — kit's, or a toolkit's built
|
|
90
|
-
// on it
|
|
90
|
+
// on it.
|
|
91
91
|
//
|
|
92
92
|
// This is also what decides who propagates when several sessions are running: in the
|
|
93
93
|
// per-repository concurrency model there is one session per checkout, so the session standing in
|
|
94
|
-
// the supplier repository is the one that can run this command
|
|
94
|
+
// the supplier repository is the one that can run this command. It is a
|
|
95
95
|
// convention enforced at the boundary, not a lock — two checkouts of the supplier would both pass,
|
|
96
96
|
// which is why each consumer is additionally refused unless its working tree is clean.
|
|
97
97
|
function refuse_outside_source_repository(project_root: string): string | undefined {
|
|
@@ -192,7 +192,7 @@ interface RunPlan {
|
|
|
192
192
|
|
|
193
193
|
// The consumers this run will consider, narrowed by `--target`. Resolved before the publish wait so
|
|
194
194
|
// a mistyped name fails at once instead of after minutes of polling the registry. A consumer that
|
|
195
|
-
// installs a toolkit above the supplier is left to that toolkit's propagation
|
|
195
|
+
// installs a toolkit above the supplier is left to that toolkit's propagation.
|
|
196
196
|
function resolve_run_targets(
|
|
197
197
|
releases: ReleasePlan,
|
|
198
198
|
version: string,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
import { file_reader } from '#scripts/lib/read-file'
|
|
3
3
|
|
|
4
|
-
// The scope expansion `prompts/refactoring.md` §4.3 used to describe in prose
|
|
4
|
+
// The scope expansion `prompts/refactoring.md` §4.3 used to describe in prose:
|
|
5
5
|
// from the seed files, follow imports both ways — the files a seed imports and the files that import a
|
|
6
6
|
// seed — for up to three stages, stopping as soon as a stage finds nothing new. Walking the import
|
|
7
7
|
// graph is exactly computable, so it is computed here rather than read and traced by hand.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
import { find_local_bin_upwards } from '#scripts/build/local-bin'
|
|
3
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
3
4
|
import { LINT_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
4
5
|
import { execa } from 'execa'
|
|
5
6
|
import { z } from 'zod'
|
|
6
7
|
|
|
7
|
-
// The mechanical half of `prompts/refactoring.md
|
|
8
|
+
// The mechanical half of `prompts/refactoring.md`: the refactoring
|
|
8
9
|
// priorities ESLint already decides. Rather than read the checklist and grep by hand, the project's
|
|
9
10
|
// own eslint is asked in JSON and its findings are bucketed into the checklist's items.
|
|
10
11
|
//
|
|
@@ -186,16 +187,9 @@ function eslint_command(root: string, files: ReadonlyArray<string>): ReadonlyArr
|
|
|
186
187
|
}
|
|
187
188
|
|
|
188
189
|
// `undefined` means the run did not produce parseable eslint JSON — a failure, kept distinct from a
|
|
189
|
-
// valid empty array (a clean scope), so a scan that could not run is never reported as `clear
|
|
190
|
-
// (joshuafolkken/kit#2180).
|
|
190
|
+
// valid empty array (a clean scope), so a scan that could not run is never reported as `clear`.
|
|
191
191
|
function parse_results(raw: string | undefined = 'null'): Array<LintResult> | undefined {
|
|
192
|
-
|
|
193
|
-
const parsed = results_schema.safeParse(JSON.parse(raw))
|
|
194
|
-
|
|
195
|
-
return parsed.success ? parsed.data : undefined
|
|
196
|
-
} catch {
|
|
197
|
-
return undefined
|
|
198
|
-
}
|
|
192
|
+
return json_value.parse_with(raw, results_schema)
|
|
199
193
|
}
|
|
200
194
|
|
|
201
195
|
// The project's own eslint over the scope, in JSON. `reject: false` because eslint exits non-zero when
|