@joshuafolkken/kit 1.1229.0 → 1.1370.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +50 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +24 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +27 -16
- package/.claude/skills/workflow-commands/latest-gate.md +18 -29
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.github/workflows/publish.yml +2 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +38 -57
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +213 -197
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -201
- package/dist/josh.js +540 -137
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +16 -10
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +4 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +26 -2
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +162 -0
- package/scripts/gate/core-budget.ts +134 -91
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +103 -35
- package/scripts/gate/gate-report.ts +39 -21
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +313 -0
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +60 -53
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +12 -8
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +35 -0
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +49 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +75 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +14 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +46 -37
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +165 -0
- package/scripts/issue/issue-release.ts +58 -0
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +32 -34
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +33 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +11 -5
- package/scripts/josh/josh-commands-lane.ts +16 -5
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- package/scripts/josh/josh-commands-run.ts +20 -6
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +10 -10
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +20 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +44 -30
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +25 -24
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +22 -8
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +27 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +140 -0
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +5 -6
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +68 -37
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +10 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +172 -43
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +25 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +13 -15
- package/scripts/run/run-step.ts +62 -48
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -33
- package/scripts/run/wake/run-wake-describe.ts +76 -29
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +13 -21
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -328
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +129 -98
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/templates/workflows/github-release.yml +4 -0
- package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -5,33 +5,37 @@
|
|
|
5
5
|
* The target version is resolved from the registry's publish timestamps
|
|
6
6
|
* (`pnpm view pnpm time --json`) instead of a dist-tag, because pnpm publishes its
|
|
7
7
|
* per-major tag `latest-<major>` only for SUPERSEDED majors — while <major> is the newest
|
|
8
|
-
* major, the only tag covering it is `latest
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* major, the only tag covering it is `latest`, so a `latest-<major>` pin would fail on every
|
|
9
|
+
* run in the common case, and `latest` itself can momentarily point below the devEngines
|
|
10
|
+
* floor. Picking the newest registry version whose major equals the `packageManager` pin keeps
|
|
11
|
+
* both invariants: never below the adopted major, and advancing while that major is the
|
|
12
|
+
* current one.
|
|
13
13
|
*
|
|
14
|
-
* The `minimumReleaseAge` quarantine is applied natively from `pnpm-workspace.yaml
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* The `minimumReleaseAge` quarantine is applied natively from `pnpm-workspace.yaml`.
|
|
15
|
+
* safe-chain filters the registry only when the process tree was launched through one of its
|
|
16
|
+
* wrapped shell commands, so `josh latest` and `pnpm josh latest` would resolve different
|
|
17
|
+
* answers and the pin would oscillate. Reading the window from the repo-managed
|
|
18
18
|
* `pnpm-workspace.yaml` and filtering by publish timestamp makes the resolution identical in
|
|
19
19
|
* every invocation context; right after a pnpm release the answer is simply the previous
|
|
20
|
-
* release, exactly as the filtered view
|
|
20
|
+
* release, exactly as the filtered view behaves.
|
|
21
21
|
*
|
|
22
22
|
* The resolved version is floored at the current `packageManager` pin: a filtered registry
|
|
23
23
|
* view legitimately answers below a freshly adopted pin for the first 24 hours after every
|
|
24
|
-
* pnpm release, and writing that answer would downgrade the protected toolchain pin
|
|
25
|
-
*
|
|
24
|
+
* pnpm release, and writing that answer would downgrade the protected toolchain pin.
|
|
25
|
+
* Not-newer answers skip the bump non-fatally instead.
|
|
26
26
|
*
|
|
27
27
|
* `devEngines.packageManager.version` is realigned with the `packageManager` pin on every
|
|
28
|
-
* path — bumped, skipped, or unresolvable
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
28
|
+
* path — bumped, skipped, or unresolvable. A bump never fires in the steady state of an
|
|
29
|
+
* up-to-date repository, so alignment gated on one would leave a manifest that arrived with
|
|
30
|
+
* the two fields out of step warning forever. The alignment is idempotent, so running it
|
|
31
|
+
* unconditionally is free.
|
|
32
32
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
33
|
+
* A failed bump exits non-zero with its cause, the manifest restored — a skip would let
|
|
34
|
+
* `latest:scope --record` mark the run fresh while a pnpm that could not self-update (the
|
|
35
|
+
* Corepack shim refuses it) stayed pinned silently. `josh latest` runs this step
|
|
36
|
+
* last, right before the record, so the dependency update and the audit still finish and only the
|
|
37
|
+
* record is withheld. A registry answer not newer than the pin, or nothing aged past the
|
|
38
|
+
* quarantine window yet, remains a non-fatal skip.
|
|
35
39
|
*
|
|
36
40
|
* Usage: tsx scripts/version/latest-corepack.ts
|
|
37
41
|
*/
|
|
@@ -54,9 +58,19 @@ const WORKSPACE_PATH = 'pnpm-workspace.yaml'
|
|
|
54
58
|
const SHA512_BYTES = 64
|
|
55
59
|
const INTEGRITY_RE = /^sha512-([A-Za-z0-9+/]+={0,2})$/u
|
|
56
60
|
const PACKAGE_MANAGER_VALUE_RE = /("packageManager"\s*:\s*")pnpm@[^"]+(")/u
|
|
61
|
+
|
|
62
|
+
// `target` is undefined both when the registry did not answer and when it answered but nothing has
|
|
63
|
+
// aged past the quarantine window yet; only the first is a failure.
|
|
64
|
+
interface TargetResolution {
|
|
65
|
+
target: string | undefined
|
|
66
|
+
is_registry_reachable: boolean
|
|
67
|
+
}
|
|
68
|
+
|
|
57
69
|
const PNPM_DEVELOPMENT_MANAGER_SCHEMA = z.object({ name: z.literal('pnpm'), version: z.string() })
|
|
58
70
|
const DEV_ENGINES_SCHEMA = z.object({ packageManager: PNPM_DEVELOPMENT_MANAGER_SCHEMA })
|
|
59
71
|
const DEV_ENGINES_PNPM_SCHEMA = z.object({ devEngines: DEV_ENGINES_SCHEMA.optional() })
|
|
72
|
+
const COREPACK_REMEDY =
|
|
73
|
+
'pnpm runs through the Corepack shim, where pnpm 11+ refuses self-update (ERR_PNPM_CANT_SELF_UPDATE_IN_COREPACK). Run `corepack disable pnpm`, install a standalone pnpm (https://pnpm.io/installation), run josh sync so a devEngines.packageManager.onFail of "error" becomes "download" (the standalone pnpm then fetches the pinned version), then rerun josh latest.'
|
|
60
74
|
|
|
61
75
|
function extract_development_engines_version(package_json_content: string): string | undefined {
|
|
62
76
|
const parsed = DEV_ENGINES_PNPM_SCHEMA.safeParse(
|
|
@@ -94,7 +108,7 @@ function extract_pinned_version(package_json_content: string): string | undefine
|
|
|
94
108
|
|
|
95
109
|
// Never move the pin backwards. A filtered registry view (safe-chain's minimum-release-age
|
|
96
110
|
// proxy) answers below a freshly adopted pin for 24 hours after every pnpm release, and an
|
|
97
|
-
// equal answer would only rewrite the same value — both skip instead
|
|
111
|
+
// equal answer would only rewrite the same value — both skip instead.
|
|
98
112
|
function is_target_not_newer_than_pin(target: string, pinned_version: string | undefined): boolean {
|
|
99
113
|
if (pinned_version === undefined) return false
|
|
100
114
|
const target_version = target.slice(TARGET_PREFIX.length)
|
|
@@ -128,22 +142,33 @@ function query_release_times(): Record<string, string> | undefined {
|
|
|
128
142
|
return extract_times_json(result.stdout)
|
|
129
143
|
}
|
|
130
144
|
|
|
145
|
+
function to_resolution(
|
|
146
|
+
version: string | undefined,
|
|
147
|
+
is_registry_reachable: boolean,
|
|
148
|
+
): TargetResolution {
|
|
149
|
+
const target = version === undefined ? undefined : `${TARGET_PREFIX}${version}`
|
|
150
|
+
|
|
151
|
+
return { target, is_registry_reachable }
|
|
152
|
+
}
|
|
153
|
+
|
|
131
154
|
// Ask the registry for the newest pnpm release on the pinned major that has aged past the
|
|
132
|
-
// quarantine window.
|
|
133
|
-
function
|
|
155
|
+
// quarantine window.
|
|
156
|
+
function resolve_major_target(major: string): TargetResolution {
|
|
134
157
|
const times = query_release_times()
|
|
135
|
-
if (times === undefined) return undefined
|
|
158
|
+
if (times === undefined) return to_resolution(undefined, false)
|
|
136
159
|
|
|
137
160
|
// The project's own `pnpm-workspace.yaml`, deliberately not the upward walk the version check
|
|
138
161
|
// uses: `josh latest` reads `package.json` and writes the pnpm pin relative to the working
|
|
139
162
|
// directory, so it has no subdirectory case — and honouring an ancestor's policy here could freeze
|
|
140
|
-
// pnpm bumps in a project that declares none
|
|
141
|
-
|
|
163
|
+
// pnpm bumps in a project that declares none.
|
|
164
|
+
const version = release_age.select_aged_version(
|
|
142
165
|
times,
|
|
143
166
|
major,
|
|
144
167
|
release_age.read_minimum_release_age(WORKSPACE_PATH),
|
|
145
168
|
Date.now(),
|
|
146
169
|
)
|
|
170
|
+
|
|
171
|
+
return to_resolution(version, true)
|
|
147
172
|
}
|
|
148
173
|
|
|
149
174
|
function parse_latest_version(stdout: string): string | undefined {
|
|
@@ -163,24 +188,40 @@ function query_latest_version(): string | undefined {
|
|
|
163
188
|
return parse_latest_version(result.stdout)
|
|
164
189
|
}
|
|
165
190
|
|
|
166
|
-
// The
|
|
167
|
-
//
|
|
168
|
-
//
|
|
169
|
-
function
|
|
170
|
-
|
|
171
|
-
|
|
191
|
+
// The target handed to pnpm self-update: an exact registry-resolved version on the pinned major, or
|
|
192
|
+
// the latest exact version when no major can be read from package.json. The latest-version query
|
|
193
|
+
// has no quarantine selection, so resolving nothing there always means the registry did not answer.
|
|
194
|
+
function resolve_target(major: string | undefined): TargetResolution {
|
|
195
|
+
if (major !== undefined) return resolve_major_target(major)
|
|
196
|
+
const version = query_latest_version()
|
|
197
|
+
|
|
198
|
+
return to_resolution(version, version !== undefined)
|
|
199
|
+
}
|
|
172
200
|
|
|
173
|
-
|
|
201
|
+
function resolve_corepack_target(major: string | undefined): string | undefined {
|
|
202
|
+
return resolve_target(major).target
|
|
174
203
|
}
|
|
175
204
|
|
|
176
|
-
// Non-fatal skip message
|
|
177
|
-
// (latest:update, audit) running instead of aborting on a bump failure.
|
|
205
|
+
// Non-fatal skip message for a registry answer with nothing to adopt — nothing to bump, nothing failed.
|
|
178
206
|
function warn_skip(reason: string): void {
|
|
179
|
-
console.warn(`⚠ Skipped pnpm bump (${reason})
|
|
207
|
+
console.warn(`⚠ Skipped pnpm bump (${reason}).`)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Every failure path ends here, so the exit status the `josh latest` chain stops on is one value.
|
|
211
|
+
function fail_bump(reason: string): number {
|
|
212
|
+
console.error(
|
|
213
|
+
`✖ pnpm bump failed (${reason}); the run is not recorded, so the next josh latest retries it.`,
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
return FAILURE_EXIT_CODE
|
|
180
217
|
}
|
|
181
218
|
|
|
182
|
-
|
|
183
|
-
|
|
219
|
+
// Corepack exports COREPACK_ROOT to the package manager it launches, and pnpm 11+ refuses
|
|
220
|
+
// `self-update` under it (ERR_PNPM_CANT_SELF_UPDATE_IN_COREPACK), so the remedy is named there.
|
|
221
|
+
function fail_self_update(status: number, environment: NodeJS.ProcessEnv = process.env): number {
|
|
222
|
+
if (environment['COREPACK_ROOT'] !== undefined) console.error(COREPACK_REMEDY)
|
|
223
|
+
|
|
224
|
+
return fail_bump(`pnpm self-update exited ${String(status)}`)
|
|
184
225
|
}
|
|
185
226
|
|
|
186
227
|
function run_pnpm_update(target: string): number {
|
|
@@ -193,22 +234,11 @@ function run_pnpm_update(target: string): number {
|
|
|
193
234
|
return result.exitCode ?? FAILURE_EXIT_CODE
|
|
194
235
|
}
|
|
195
236
|
|
|
196
|
-
// The target is an already-resolved exact version, so a non-zero status here is a
|
|
197
|
-
// genuine pnpm or network failure; a later run retries. Returns whether a skip
|
|
198
|
-
// happened.
|
|
199
|
-
function did_warn_skip(status: number): boolean {
|
|
200
|
-
if (status === 0) return false
|
|
201
|
-
|
|
202
|
-
warn_skip(`pnpm self-update exited ${String(status)}`)
|
|
203
|
-
|
|
204
|
-
return true
|
|
205
|
-
}
|
|
206
|
-
|
|
207
237
|
// Realign `devEngines.packageManager.version` with the `packageManager` pin so the two
|
|
208
238
|
// fields keep matching (pnpm suppresses the dual-declaration warning only on an exact
|
|
209
239
|
// match). Runs on every path, not just after a successful bump: a repository that arrives
|
|
210
240
|
// with the two fields already out of step sits in the no-bump steady state forever, so an
|
|
211
|
-
// alignment gated on a bump would never repair it
|
|
241
|
+
// alignment gated on a bump would never repair it.
|
|
212
242
|
function sync_development_engines(package_json_path: string = PACKAGE_JSON_PATH): void {
|
|
213
243
|
const content = readFileSync(package_json_path, 'utf8')
|
|
214
244
|
const aligned = package_manager_version.align_development_engines_version(content)
|
|
@@ -224,7 +254,7 @@ function restore_package_json(
|
|
|
224
254
|
package_json_path: string = PACKAGE_JSON_PATH,
|
|
225
255
|
): void {
|
|
226
256
|
writeFileSync(package_json_path, content)
|
|
227
|
-
console.info('✔ Restored package.json pin (pnpm bump
|
|
257
|
+
console.info('✔ Restored package.json pin (pnpm bump failed)')
|
|
228
258
|
}
|
|
229
259
|
|
|
230
260
|
function decode_integrity(encoded: string): string | undefined {
|
|
@@ -281,7 +311,7 @@ function restore_integrity(target: string, integrity: string): void {
|
|
|
281
311
|
}
|
|
282
312
|
|
|
283
313
|
// The equal case is the steady state of every up-to-date run, so it logs as success; only
|
|
284
|
-
// an answer strictly below the pin is the anomaly worth a warning
|
|
314
|
+
// an answer strictly below the pin is the anomaly worth a warning.
|
|
285
315
|
function notify_skipped_bump(target: string, pinned_version: string): void {
|
|
286
316
|
if (target === `${TARGET_PREFIX}${pinned_version}`) {
|
|
287
317
|
console.info(`✔ pnpm pin ${pinned_version} already matches the newest registry release.`)
|
|
@@ -292,35 +322,19 @@ function notify_skipped_bump(target: string, pinned_version: string): void {
|
|
|
292
322
|
warn_skip(`registry answered ${target}, below the pinned ${pinned_version}`)
|
|
293
323
|
}
|
|
294
324
|
|
|
295
|
-
|
|
296
|
-
// skipped and the reason has already been logged.
|
|
297
|
-
function resolve_floored_target(original: string, major: string | undefined): string | undefined {
|
|
298
|
-
const target = resolve_corepack_target(major)
|
|
299
|
-
|
|
300
|
-
if (target === undefined) {
|
|
301
|
-
warn_unresolved(major)
|
|
302
|
-
|
|
303
|
-
return undefined
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
const pinned_version = extract_pinned_version(original)
|
|
307
|
-
if (!is_target_not_newer_than_pin(target, pinned_version)) return target
|
|
308
|
-
|
|
309
|
-
notify_skipped_bump(target, pinned_version ?? '')
|
|
310
|
-
|
|
311
|
-
return undefined
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
function restore_after_update(original: string, target: string, integrity: string): void {
|
|
325
|
+
function restore_after_update(original: string, target: string, integrity: string): number {
|
|
315
326
|
try {
|
|
316
327
|
restore_integrity(target, integrity)
|
|
328
|
+
|
|
329
|
+
return 0
|
|
317
330
|
} catch {
|
|
318
331
|
restore_package_json(original)
|
|
319
|
-
|
|
332
|
+
|
|
333
|
+
return fail_bump('pnpm self-update wrote an unexpected pin')
|
|
320
334
|
}
|
|
321
335
|
}
|
|
322
336
|
|
|
323
|
-
function pin_unpinned_manifest(original: string, target: string, integrity: string):
|
|
337
|
+
function pin_unpinned_manifest(original: string, target: string, integrity: string): number {
|
|
324
338
|
const manifest = z.record(z.string(), z.unknown()).parse(json_value.parse_or_undefined(original))
|
|
325
339
|
const pinned = JSON.stringify(
|
|
326
340
|
{ ...manifest, packageManager: `${target}+${integrity}` },
|
|
@@ -334,53 +348,71 @@ function pin_unpinned_manifest(original: string, target: string, integrity: stri
|
|
|
334
348
|
)
|
|
335
349
|
|
|
336
350
|
const result = execaSync('pnpm', ['--version'], { reject: false })
|
|
337
|
-
if (result.exitCode === 0 && result.stdout.trim() === target.slice(TARGET_PREFIX.length)) return
|
|
351
|
+
if (result.exitCode === 0 && result.stdout.trim() === target.slice(TARGET_PREFIX.length)) return 0
|
|
338
352
|
|
|
339
353
|
restore_package_json(original)
|
|
340
|
-
warn_skip('the newly pinned pnpm version could not start')
|
|
341
|
-
}
|
|
342
354
|
|
|
343
|
-
|
|
344
|
-
|
|
355
|
+
return fail_bump('the newly pinned pnpm version could not start')
|
|
356
|
+
}
|
|
345
357
|
|
|
346
|
-
|
|
347
|
-
|
|
358
|
+
// The target is an already-resolved exact version, so a non-zero status here is a genuine
|
|
359
|
+
// pnpm, Corepack or network failure.
|
|
360
|
+
function update_pinned_manifest(original: string, target: string, integrity: string): number {
|
|
361
|
+
const status = run_pnpm_update(target)
|
|
362
|
+
if (status === 0) return restore_after_update(original, target, integrity)
|
|
348
363
|
|
|
349
|
-
|
|
350
|
-
}
|
|
364
|
+
restore_package_json(original)
|
|
351
365
|
|
|
352
|
-
|
|
366
|
+
return fail_self_update(status)
|
|
353
367
|
}
|
|
354
368
|
|
|
355
369
|
// Query integrity before mutating the manifest; self-update writes both pins without it.
|
|
356
|
-
function bump_package_manager(original: string, target: string):
|
|
370
|
+
function bump_package_manager(original: string, target: string): number {
|
|
357
371
|
const integrity = query_integrity(target)
|
|
372
|
+
if (integrity === undefined) return fail_bump(`no integrity for ${target}`)
|
|
373
|
+
if (!PACKAGE_MANAGER_RE.test(original)) return pin_unpinned_manifest(original, target, integrity)
|
|
358
374
|
|
|
359
|
-
|
|
360
|
-
|
|
375
|
+
return update_pinned_manifest(original, target, integrity)
|
|
376
|
+
}
|
|
361
377
|
|
|
362
|
-
|
|
363
|
-
|
|
378
|
+
// An unreachable registry fails, so the unrecorded run is retried. A reachable one with nothing
|
|
379
|
+
// aged past the quarantine window is the quarantine skip — like a not-newer answer, there is nothing
|
|
380
|
+
// to adopt yet, and failing would stall every run for up to the whole window.
|
|
381
|
+
function report_unresolved(major: string | undefined, is_registry_reachable: boolean): number {
|
|
382
|
+
const label = `pnpm ${major ?? ''}`.trimEnd()
|
|
383
|
+
if (!is_registry_reachable) return fail_bump(`the registry did not answer for ${label}`)
|
|
364
384
|
|
|
365
|
-
|
|
366
|
-
pin_unpinned_manifest(original, target, integrity)
|
|
385
|
+
warn_skip(`no ${label} release has aged past the quarantine window yet`)
|
|
367
386
|
|
|
368
|
-
|
|
387
|
+
return 0
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// Resolve the pnpm target with the pin floor applied, then bump.
|
|
391
|
+
function bump_to_registry_target(original: string, major: string | undefined): number {
|
|
392
|
+
const { target, is_registry_reachable } = resolve_target(major)
|
|
393
|
+
if (target === undefined) return report_unresolved(major, is_registry_reachable)
|
|
394
|
+
|
|
395
|
+
const pinned_version = extract_pinned_version(original)
|
|
396
|
+
|
|
397
|
+
if (!is_target_not_newer_than_pin(target, pinned_version)) {
|
|
398
|
+
return bump_package_manager(original, target)
|
|
369
399
|
}
|
|
370
400
|
|
|
371
|
-
|
|
401
|
+
notify_skipped_bump(target, pinned_version ?? '')
|
|
402
|
+
|
|
403
|
+
return 0
|
|
372
404
|
}
|
|
373
405
|
|
|
374
|
-
function main():
|
|
406
|
+
function main(): number {
|
|
375
407
|
const original = readFileSync(PACKAGE_JSON_PATH, 'utf8')
|
|
376
|
-
const
|
|
377
|
-
const target = resolve_floored_target(original, major)
|
|
378
|
-
if (target !== undefined) bump_package_manager(original, target)
|
|
408
|
+
const status = bump_to_registry_target(original, extract_pnpm_major(original))
|
|
379
409
|
|
|
380
410
|
sync_development_engines()
|
|
411
|
+
|
|
412
|
+
return status
|
|
381
413
|
}
|
|
382
414
|
|
|
383
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) main()
|
|
415
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) process.exitCode = main()
|
|
384
416
|
|
|
385
417
|
const latest_corepack = {
|
|
386
418
|
extract_pnpm_major,
|
|
@@ -388,12 +420,11 @@ const latest_corepack = {
|
|
|
388
420
|
is_target_not_newer_than_pin,
|
|
389
421
|
notify_skipped_bump,
|
|
390
422
|
extract_times_json,
|
|
391
|
-
query_major_latest_version,
|
|
392
423
|
resolve_corepack_target,
|
|
393
424
|
run_pnpm_update,
|
|
394
425
|
query_integrity,
|
|
395
426
|
restore_integrity,
|
|
396
|
-
|
|
427
|
+
fail_self_update,
|
|
397
428
|
sync_development_engines,
|
|
398
429
|
restore_package_json,
|
|
399
430
|
main,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { lane_paths, type LaneEnvironment } from '#scripts/lane/lane-paths'
|
|
4
4
|
|
|
5
|
-
// Refuse a dependency update inside a lane
|
|
5
|
+
// Refuse a dependency update inside a lane.
|
|
6
6
|
//
|
|
7
7
|
// `latest:scope` reads how long ago `josh latest` last finished, and that stamp is keyed to the
|
|
8
8
|
// project root. A lane is a linked work tree whose project root is its own directory, so a fresh
|
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { latest_lane_guard } from './latest-lane-guard'
|
|
4
4
|
import { latest_stamp, type LatestStamp } from './latest-stamp'
|
|
5
5
|
|
|
6
|
-
// `josh latest:scope` — say whether this run has to update dependencies
|
|
6
|
+
// `josh latest:scope` — say whether this run has to update dependencies.
|
|
7
7
|
//
|
|
8
8
|
// A command rather than a paragraph in a procedure, for the reason `josh review:level` is a command:
|
|
9
9
|
// a rule an agent applies from memory is a rule an agent can talk itself out of, and this one is
|
|
@@ -65,7 +65,7 @@ function decide(): Decision {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
// A lane is answered `skip` before the stamp is even read
|
|
68
|
+
// A lane is answered `skip` before the stamp is even read: the stamp is
|
|
69
69
|
// keyed to the project root, so a lane always reads as stale, and every lane would otherwise run its
|
|
70
70
|
// own dependency update. `latest_lane_guard` is the single source of the reason and of the refusal
|
|
71
71
|
// `josh latest` prints.
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
2
2
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
3
|
|
|
4
|
-
// When `josh latest` last finished in this checkout, and whether that is recent enough to skip
|
|
5
|
-
// (joshuafolkken/kit#1215).
|
|
4
|
+
// When `josh latest` last finished in this checkout, and whether that is recent enough to skip.
|
|
6
5
|
//
|
|
7
6
|
// `josh latest` is a network-bound chain — pnpm update, every dependency, `ranges`, `pnpm audit` — that
|
|
8
7
|
// took 60–120 seconds at the head of every `fullrun` / `halfrun` and of every child a batch ran, and
|
|
@@ -63,8 +63,8 @@ function report_kept_back(regressions: ReadonlyArray<VersionRegression>): void {
|
|
|
63
63
|
|
|
64
64
|
// The direct-dependency `--latest` bump lifts the package.json ranges; this second, argument-less
|
|
65
65
|
// pass then re-resolves every tier the lockfile carries within those ranges, which is the only stage
|
|
66
|
-
// that reaches the indirect packages a direct-only update leaves pinned at a stale resolution
|
|
67
|
-
//
|
|
66
|
+
// that reaches the indirect packages a direct-only update leaves pinned at a stale resolution.
|
|
67
|
+
// `pnpm update` defaults to depth Infinity, so no flag is needed to reach
|
|
68
68
|
// the whole tree. The re-resolution stage always runs — even when every direct dependency is
|
|
69
69
|
// overridden and the `--latest` stage is absent, the indirect tiers still need re-resolving.
|
|
70
70
|
const PNPM_UPDATE_ALL_TIERS = ['pnpm', 'update']
|
|
@@ -7,7 +7,7 @@ import { z } from 'zod'
|
|
|
7
7
|
import { release_age } from './release-age'
|
|
8
8
|
|
|
9
9
|
// The public npm registry, read without credentials so a consumer who installed from public npm
|
|
10
|
-
// can see the latest release without a `read:packages` GitHub token
|
|
10
|
+
// can see the latest release without a `read:packages` GitHub token. The
|
|
11
11
|
// GitHub Packages versions API stays the source for a scope routed there, and the fallback for a
|
|
12
12
|
// package public npm does not carry.
|
|
13
13
|
const PUBLIC_REGISTRY = 'https://registry.npmjs.org'
|
|
@@ -99,7 +99,7 @@ function read_release_times(package_name: string): Record<string, string> | unde
|
|
|
99
99
|
// Whether public npm already carries `<name>@<version>`. **Asked of public npm regardless of how this
|
|
100
100
|
// checkout routes the scope**, unlike the two readers above: `josh release` waits for `publish.yml`'s
|
|
101
101
|
// `publish-npm` job and links the npmjs.com page, so GitHub Packages answering would not be the
|
|
102
|
-
// question it asks
|
|
102
|
+
// question it asks.
|
|
103
103
|
function has_public_version(package_name: string, version: string): boolean {
|
|
104
104
|
const parsed = times_schema.safeParse(read_packument(package_name, FULL_ACCEPT))
|
|
105
105
|
|
|
@@ -14,6 +14,12 @@ const PNPM_PIN_REGEX = /^pnpm@(.+)$/u
|
|
|
14
14
|
const DEV_ENGINES_NAME_FIRST_REGEX = /("name":\s*"pnpm"\s*,\s*"version":\s*")[^"]+(")/u
|
|
15
15
|
const DEV_ENGINES_VERSION_FIRST_REGEX = /("version":\s*")[^"]+("\s*,\s*"name":\s*"pnpm")/u
|
|
16
16
|
|
|
17
|
+
// An `onFail: "error"` inside a `"packageManager": { … }` object — in a manifest that is only
|
|
18
|
+
// `devEngines.packageManager`, since the top-level `packageManager` is a string — and never
|
|
19
|
+
// `devEngines.runtime`, because `[^{}]` cannot cross into another block.
|
|
20
|
+
const DEV_ENGINES_ON_FAIL_ERROR_REGEX = /("packageManager":\s*\{[^{}]*"onFail":\s*")error(")/u
|
|
21
|
+
const ON_FAIL_DOWNLOAD = 'download'
|
|
22
|
+
|
|
17
23
|
const optional_version_schema = z.object({ version: z.string().optional() }).optional()
|
|
18
24
|
|
|
19
25
|
const alignment_read_schema = z.object({
|
|
@@ -86,10 +92,22 @@ function align_development_engines_version(content: string): string {
|
|
|
86
92
|
return set_development_engines_version(content, target)
|
|
87
93
|
}
|
|
88
94
|
|
|
95
|
+
// `onFail: "error"` rejects any pnpm that is not byte-for-byte the pin, so a machine that left
|
|
96
|
+
// Corepack for a standalone pnpm cannot run pnpm at all; `"download"` fetches the pinned version
|
|
97
|
+
// instead. Only `"error"` is rewritten — a `"warn"` / `"ignore"` the
|
|
98
|
+
// project chose itself is kept, and the rest of the file is preserved byte-for-byte.
|
|
99
|
+
function upgrade_development_engines_on_fail(content: string): string {
|
|
100
|
+
return content.replace(
|
|
101
|
+
DEV_ENGINES_ON_FAIL_ERROR_REGEX,
|
|
102
|
+
(_match: string, prefix: string, suffix: string) => `${prefix}${ON_FAIL_DOWNLOAD}${suffix}`,
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
89
106
|
const package_manager_version = {
|
|
90
107
|
extract_pnpm_pin,
|
|
91
108
|
align_development_engines_version,
|
|
92
109
|
set_development_engines_version,
|
|
110
|
+
upgrade_development_engines_on_fail,
|
|
93
111
|
}
|
|
94
112
|
|
|
95
113
|
export { package_manager_version }
|
|
@@ -24,7 +24,8 @@ const FAILURE_EXIT_CODE = 1
|
|
|
24
24
|
// consumer can resolve — the exact blind spot this guard exists to close.
|
|
25
25
|
//
|
|
26
26
|
// `pnpm view` rather than `npm view` because npm refuses to run at all inside a project whose
|
|
27
|
-
// `devEngines.packageManager` names pnpm with `onFail
|
|
27
|
+
// `devEngines.packageManager` names pnpm with an `onFail` other than `"warn"` / `"ignore"` (kit
|
|
28
|
+
// ships `"download"`, which npm refuses on just the same), failing every probe with
|
|
28
29
|
// EBADDEVENGINES instead of answering. Both are shimmed, so the filtered view is preserved.
|
|
29
30
|
function probe_range(name: string, range: string): ProbeResult {
|
|
30
31
|
const result = execaSync('pnpm', ['view', `${name}@${range}`, 'version'], {
|
|
@@ -4,7 +4,7 @@ import semver from 'semver'
|
|
|
4
4
|
// kit ships a `preinstall` hook that installs @aikidosec/safe-chain, whose minimum-age policy hides
|
|
5
5
|
// releases younger than its window from every install running behind it. A range whose floor sits
|
|
6
6
|
// inside that window has no satisfying version for a consumer, so `pnpm install` fails with
|
|
7
|
-
// ERR_PNPM_NO_MATCHING_VERSION naming a version that demonstrably exists and is tagged latest
|
|
7
|
+
// ERR_PNPM_NO_MATCHING_VERSION naming a version that demonstrably exists and is tagged latest.
|
|
8
8
|
//
|
|
9
9
|
// The check asks the registry through that same filtered view instead of modelling the policy:
|
|
10
10
|
// `pnpm view <name>@<range> version` prints no version and exits non-zero
|
|
@@ -4,14 +4,14 @@ import { yaml_document } from '#scripts/lib/yaml-document'
|
|
|
4
4
|
import semver from 'semver'
|
|
5
5
|
import { z } from 'zod'
|
|
6
6
|
|
|
7
|
-
// The minimum-release-age quarantine
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
7
|
+
// The minimum-release-age quarantine, applied natively instead of inherited from safe-chain's
|
|
8
|
+
// interception. safe-chain filters the registry only when the process tree was started through one
|
|
9
|
+
// of its wrapped shell commands, so `josh latest` and `pnpm josh latest` would resolve different
|
|
10
|
+
// "newest release" answers. These functions make the resolution deterministic: the policy comes
|
|
11
|
+
// from the repo-managed `pnpm-workspace.yaml`, the publish timestamps from the registry, and the
|
|
12
|
+
// selection is a pure computation over both. pnpm 12 reads its settings from `pnpm-workspace.yaml`
|
|
13
|
+
// — a `minimum-release-age` line in `.npmrc` is ignored there, so reading it would report a window
|
|
14
|
+
// pnpm does not apply.
|
|
15
15
|
|
|
16
16
|
const NO_QUARANTINE_MINUTES = 0
|
|
17
17
|
const WORKSPACE_PATH = 'pnpm-workspace.yaml'
|
|
@@ -78,7 +78,7 @@ function is_eligible(
|
|
|
78
78
|
// `major` pins the search to one major line — what `josh latest` needs, since corepack validates the
|
|
79
79
|
// resolved pnpm version against `devEngines`. Pass `undefined` to search every major, which is what
|
|
80
80
|
// an "is this installable at all" question wants: `pnpm add pkg@latest` resolves to the newest
|
|
81
|
-
// permitted release regardless of major
|
|
81
|
+
// permitted release regardless of major.
|
|
82
82
|
function select_aged_version(
|
|
83
83
|
times: Record<string, string>,
|
|
84
84
|
major: string | undefined,
|
|
@@ -112,7 +112,7 @@ function read_declared_minimum_release_age(workspace_path: string): number | und
|
|
|
112
112
|
//
|
|
113
113
|
// Deliberately not the upward walk below: `josh latest` resolves this against the working directory
|
|
114
114
|
// it also writes `corepack use` into, and honouring an ancestor's policy there could freeze pnpm
|
|
115
|
-
// bumps in a project that declares none
|
|
115
|
+
// bumps in a project that declares none.
|
|
116
116
|
function read_minimum_release_age(workspace_path: string = WORKSPACE_PATH): number {
|
|
117
117
|
return read_declared_minimum_release_age(workspace_path) ?? NO_QUARANTINE_MINUTES
|
|
118
118
|
}
|
|
@@ -121,7 +121,7 @@ function read_minimum_release_age(workspace_path: string = WORKSPACE_PATH): numb
|
|
|
121
121
|
//
|
|
122
122
|
// This walks rather than reading one path because `josh version` and `josh latest` both run from
|
|
123
123
|
// anywhere inside a project — and from outside one — so resolving against the working directory
|
|
124
|
-
// alone would silently read "no quarantine" in every subdirectory
|
|
124
|
+
// alone would silently read "no quarantine" in every subdirectory. pnpm
|
|
125
125
|
// finds its workspace root the same way, by walking up to the nearest `pnpm-workspace.yaml`.
|
|
126
126
|
//
|
|
127
127
|
// `boundary` stops the walk at a known root. Production passes none, while tests bound the search
|
|
@@ -5,7 +5,7 @@ import { release_age } from './release-age'
|
|
|
5
5
|
// *unpinned* resolution, so anything resolved without an explicit version stops one or more releases
|
|
6
6
|
// short of `latest`. Reporting that as a bare `⚠ → <latest>` is indistinguishable from an install the
|
|
7
7
|
// user forgot to upgrade — and it recurs after every successful upgrade, because the newest release
|
|
8
|
-
// is by definition the youngest
|
|
8
|
+
// is by definition the youngest.
|
|
9
9
|
//
|
|
10
10
|
// **The window binds unpinned resolution only.** Measured on pnpm 11.22.0 with
|
|
11
11
|
// `minimumReleaseAge: 1440` and a release published 3.5 h earlier:
|
|
@@ -14,7 +14,7 @@ import { release_age } from './release-age'
|
|
|
14
14
|
// pnpm add pkg -> 1.78.0 (the newest release past the window)
|
|
15
15
|
//
|
|
16
16
|
// So a pinned `Run:` hint always works and is never suppressed. What the window actually holds back
|
|
17
|
-
// is peer resolution — the mechanism behind an upstream's effective install
|
|
17
|
+
// is peer resolution — the mechanism behind an upstream's effective install,
|
|
18
18
|
// which is why this explanation is attached there and nowhere else.
|
|
19
19
|
|
|
20
20
|
const MINUTES_PER_HOUR = 60
|
|
@@ -6,7 +6,7 @@ import { execaSync } from 'execa'
|
|
|
6
6
|
const SAFE_CHAIN_PKG = '@aikidosec/safe-chain'
|
|
7
7
|
|
|
8
8
|
// The registry's answer is trusted only as an exact semver version: it ends up in workflow files and
|
|
9
|
-
// in the installer URL
|
|
9
|
+
// in the installer URL.
|
|
10
10
|
function fetch_latest_version(): string | undefined {
|
|
11
11
|
const result = execaSync('npm', ['view', SAFE_CHAIN_PKG, 'version'], {
|
|
12
12
|
reject: false,
|
|
@@ -18,8 +18,8 @@ function fetch_latest_version(): string | undefined {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// The hash-verified installer pinned in the workflows is the one place a safe-chain release is
|
|
21
|
-
// recorded; `preinstall` no longer names one
|
|
22
|
-
// files that carry the pin — app-kit's own `dast.yml` / `load.yml` included
|
|
21
|
+
// recorded; `preinstall` no longer names one. Every repository moves the
|
|
22
|
+
// files that carry the pin — app-kit's own `dast.yml` / `load.yml` included.
|
|
23
23
|
function sync(): void {
|
|
24
24
|
const latest = fetch_latest_version()
|
|
25
25
|
|
|
@@ -29,8 +29,7 @@ interface VersionSnapshot {
|
|
|
29
29
|
// What the local minimum-release-age policy permits an unpinned resolve to reach. Carried only on an
|
|
30
30
|
// upstream report, because only the effective install is peer-resolved — every other target is
|
|
31
31
|
// upgraded by an explicitly pinned command the window does not block. Optional throughout: a package
|
|
32
|
-
// whose publish timestamps could not be read keeps exactly the report it had before
|
|
33
|
-
// (joshuafolkken/kit#808).
|
|
32
|
+
// whose publish timestamps could not be read keeps exactly the report it had before.
|
|
34
33
|
interface ReleaseHold {
|
|
35
34
|
installable: string
|
|
36
35
|
minimum_age_minutes: number
|
|
@@ -75,7 +74,7 @@ interface EffectiveUpgradeHint {
|
|
|
75
74
|
// `installed_versions` is populated only when the consumer declared its global upgrade command
|
|
76
75
|
// pin-only (`is_global_upgrade_command_pinned`). It lists the globally-resolved versions kit already
|
|
77
76
|
// knows, so a command whose every pin is already installed can be proven dead and replaced with an
|
|
78
|
-
// explanation instead of a `Run:` hint
|
|
77
|
+
// explanation instead of a `Run:` hint. Absent, no command is ever suppressed.
|
|
79
78
|
interface UpstreamReport {
|
|
80
79
|
config: PackageVersionConfig
|
|
81
80
|
project_version: string | undefined
|
|
@@ -4,8 +4,7 @@ import { version_check_arguments } from './version-check-arguments'
|
|
|
4
4
|
import { version_commands } from './version-commands'
|
|
5
5
|
|
|
6
6
|
// `version` shows the installed versions; `version --upgrade` updates both the global and the project
|
|
7
|
-
// @joshuafolkken/kit install
|
|
8
|
-
// joshuafolkken/kit#1928 folded it into this flag, so the version surface is one command again.
|
|
7
|
+
// @joshuafolkken/kit install, so the version surface is one command.
|
|
9
8
|
const UPGRADE_FLAG = '--upgrade'
|
|
10
9
|
const ARGUMENT_OFFSET = 2
|
|
11
10
|
const version_arguments = process.argv.slice(ARGUMENT_OFFSET)
|