@joshuafolkken/kit 1.1035.0 → 1.1094.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/settings.json +9 -8
- package/.claude/skills/epic-commands/SKILL.md +5 -7
- package/.claude/skills/verify-ui/SKILL.md +1 -1
- package/.claude/skills/workflow-commands/SKILL.md +21 -13
- package/.claude/skills/workflow-commands/background-commands.md +5 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +3 -3
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -7
- package/.claude/skills/workflow-commands/backlogrun-park.md +6 -0
- package/.claude/skills/workflow-commands/backlogrun-progress.md +31 -37
- package/.claude/skills/workflow-commands/backlogrun-steps.md +25 -25
- package/.claude/skills/workflow-commands/backlogrun.md +2 -2
- package/.claude/skills/workflow-commands/chain-rule.md +6 -4
- package/.claude/skills/workflow-commands/delegation.md +3 -3
- package/.claude/skills/workflow-commands/followup-reference.md +3 -3
- package/.claude/skills/workflow-commands/followup.md +7 -3
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/fullrun.md +3 -2
- package/.claude/skills/workflow-commands/halfrun.md +16 -19
- package/.claude/skills/workflow-commands/issue-comments.md +2 -2
- package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +9 -4
- package/.claude/skills/workflow-commands/latest-gate.md +1 -1
- package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
- package/.claude/skills/workflow-commands/observation-filing.md +44 -89
- package/.claude/skills/workflow-commands/pre-gate-cut.md +33 -36
- package/.claude/skills/workflow-commands/prerequisite.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +36 -0
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +24 -4
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/auto-tag.yml +21 -0
- package/.github/workflows/ci.yml +26 -128
- package/.github/workflows/pr-classification.yml +5 -41
- package/.github/workflows/publish.yml +42 -48
- package/.github/workflows/sonar-qube.yml +37 -4
- package/AGENTS.md +12 -2
- package/CLAUDE.md +15 -16
- package/GEMINI.md +14 -2
- package/README.md +59 -18
- package/SECURITY.md +36 -6
- package/cspell/index.yaml +2 -1
- package/dist/CLAUDE.md +15 -16
- package/dist/config-merge/index.js +15 -3
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-Y27M6A7X.js → chunk-3C4YCCEF.js} +5 -13
- package/dist/hooks/{chunk-D67KVGGY.js → chunk-7ZPFAVR7.js} +17 -88
- package/dist/hooks/{chunk-HOYJU5RM.js → chunk-E54KGFEQ.js} +11 -4
- package/dist/hooks/{chunk-KG6PZD72.js → chunk-IL27YTPH.js} +2 -2
- package/dist/hooks/{chunk-GJT4BNVE.js → chunk-KHWHKJOM.js} +3 -3
- package/dist/hooks/{chunk-HU66PWWL.js → chunk-M2XDCUKD.js} +1076 -509
- package/dist/hooks/{chunk-GLBDBJOK.js → chunk-NKOG3XAV.js} +199 -304
- package/dist/hooks/{chunk-ZXNE6NY3.js → chunk-O4LL4HTI.js} +2 -7
- package/dist/hooks/{chunk-XPLP27WA.js → chunk-OIZUHPJI.js} +5 -27
- package/dist/hooks/{chunk-EIFCAJRB.js → chunk-UD24EAIL.js} +2546 -1636
- package/dist/hooks/codex-hook-adapter.js +10 -11
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +15 -34
- package/dist/hooks/inputs.json +279 -0
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +23 -16
- package/dist/hooks/session-lang.js +0 -1
- package/dist/hooks/stop-guard.js +188 -509
- package/dist/josh.js +166 -225
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +412 -64
- package/eslint/rules/promise.js +5 -0
- package/package.json +13 -8
- package/prompts/collaboration-workflow/file-edits.md +6 -53
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/operating-rules.md +4 -4
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +4 -4
- package/prompts/collaboration-workflow/rule-delivery.md +5 -36
- package/prompts/collaboration-workflow/shell-body.md +7 -9
- package/prompts/collaboration-workflow/turn-batching.md +21 -37
- package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
- package/prompts/collaboration-workflow/wip-cap.md +36 -36
- package/prompts/collaboration-workflow.md +5 -8
- package/prompts/review-rubric.md +1 -1
- package/prompts/review.md +3 -3
- package/prompts/sonar-hotspot-handling.md +12 -4
- package/prompts/testing-guide.md +3 -3
- package/scripts/adopt/adopt-toolkits.ts +2 -2
- package/scripts/adopt/adopt.ts +0 -2
- package/scripts/agent/agent-argv.ts +0 -2
- package/scripts/agent/agent-diagnostics.ts +1 -1
- package/scripts/agent/agent-role-profile.ts +0 -7
- package/scripts/agent/claude-agent-argv.ts +0 -2
- package/scripts/agent/codex-agent-argv.ts +1 -1
- package/scripts/agent/codex-hooks.ts +92 -0
- package/scripts/agent/interactive-ask.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +15 -25
- package/scripts/backlog/backlog-budget.ts +0 -2
- package/scripts/backlog/backlog-defect-priority.ts +2 -2
- package/scripts/backlog/backlog-drive-cli.ts +10 -8
- package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
- package/scripts/backlog/backlog-drive-named.ts +2 -1
- package/scripts/backlog/backlog-drive.ts +76 -16
- package/scripts/backlog/backlog-named.ts +0 -3
- package/scripts/backlog/backlog-next.ts +32 -22
- package/scripts/backlog/backlog-offer-cli.ts +0 -5
- package/scripts/backlog/backlog-plan-cli.ts +6 -8
- package/scripts/backlog/backlog-plan.ts +1 -1
- package/scripts/backlog/backlog-pool.ts +34 -17
- package/scripts/backlog/backlog-rank.ts +106 -0
- package/scripts/backlog/backlog-ready.ts +19 -3
- package/scripts/backlog/backlog-scope.ts +1 -3
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +0 -1
- package/scripts/backlog/backlog-waves.ts +47 -31
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +26 -0
- package/scripts/build/build-hooks.ts +92 -11
- package/scripts/build/hook-bundle-stamp.ts +111 -0
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +1 -1
- package/scripts/ci/composite-actions.ts +30 -0
- package/scripts/ci/pr-classification.ts +3 -3
- package/scripts/claude/workflow-destination.ts +10 -1
- package/scripts/clone/clone-fingerprint.ts +0 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/json-format.ts +0 -1
- package/scripts/config-merge/patch-yaml-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +2 -9
- package/scripts/cost-runtime/cost-attribute.ts +0 -1
- package/scripts/cost-runtime/cost-cli.ts +0 -3
- package/scripts/cost-runtime/cost-corpus.ts +0 -2
- package/scripts/cost-runtime/cost-format.ts +0 -3
- package/scripts/cost-runtime/cost-pricing.ts +0 -1
- package/scripts/cost-runtime/cost-tokens.ts +0 -1
- package/scripts/delegation/delegation-cli.ts +1 -1
- package/scripts/delegation/delegation-policy.ts +11 -1
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +0 -2
- package/scripts/delegation/investigation-reads.ts +1 -164
- package/scripts/discovery/repo-map-logic.ts +0 -1
- package/scripts/discovery/repo-party-cli.ts +1 -1
- package/scripts/doctor/doctor-consumer.ts +4 -6
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/document-byte-budget.ts +8 -9
- package/scripts/document/document-byte-check.ts +0 -1
- package/scripts/document/document-read-cli.ts +0 -2
- package/scripts/document/document-section-cli.ts +1 -1
- package/scripts/document/document-section.ts +0 -3
- package/scripts/document/edit-files-cli.ts +0 -1
- package/scripts/document/entry-read-budget.ts +13 -4
- package/scripts/document/lane-child-read-set.ts +1 -6
- package/scripts/document/read-files-cli.ts +0 -4
- package/scripts/document/read-set-cli.ts +0 -2
- package/scripts/document/read-set-point-of-use.ts +1 -0
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +1 -1
- package/scripts/epic/epic-add.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +1 -4
- package/scripts/epic/epic-audit-orphans.ts +1 -3
- package/scripts/epic/epic-audit-rationale.ts +0 -1
- package/scripts/epic/epic-audit-report.ts +0 -2
- package/scripts/epic/epic-audit.ts +5 -4
- package/scripts/epic/epic-bundle-cli.ts +1 -1
- package/scripts/epic/epic-bundle-evidence.ts +0 -1
- package/scripts/epic/epic-bundle-referenced.ts +1 -5
- package/scripts/epic/epic-bundle.ts +0 -4
- package/scripts/epic/epic-busy.ts +4 -5
- package/scripts/epic/epic-candidate-confirm.ts +0 -5
- package/scripts/epic/epic-classify.ts +2 -2
- package/scripts/epic/epic-cli-argv.ts +0 -1
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +5 -2
- package/scripts/epic/epic-cross-repo.ts +2 -4
- package/scripts/epic/epic-decision.ts +0 -1
- package/scripts/epic/epic-fetch.ts +2 -2
- package/scripts/epic/epic-index.ts +2 -3
- package/scripts/epic/epic-issue.ts +1 -15
- package/scripts/epic/epic-lane-offer.ts +20 -30
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +1 -3
- package/scripts/epic/epic-next-views.ts +0 -1
- package/scripts/epic/epic-next.ts +1 -10
- package/scripts/epic/epic-parse.ts +0 -1
- package/scripts/epic/epic-promote.ts +0 -9
- package/scripts/epic/epic-rank.ts +37 -0
- package/scripts/epic/epic-read.ts +1 -2
- package/scripts/epic/epic-reconcile.ts +1 -1
- package/scripts/epic/epic-reference.ts +1 -13
- package/scripts/epic/epic-relation-recheck.ts +1 -1
- package/scripts/epic/epic-relations.ts +1 -1
- package/scripts/epic/epic-remove.ts +1 -1
- package/scripts/epic/epic-report.ts +0 -1
- package/scripts/epic/epic-run.ts +2 -3
- package/scripts/epic/epic-shape.ts +1 -1
- package/scripts/epic/epic-solo-stale.ts +107 -0
- package/scripts/epic/epic-solo.ts +32 -30
- package/scripts/epic/epic-triage.ts +1 -1
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/epic/epic.ts +1 -1
- package/scripts/exports/unused-members-cli.ts +53 -0
- package/scripts/{git → followup}/followup-issue-number.ts +1 -6
- package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
- package/scripts/{git → followup}/git-followup-finish.ts +1 -3
- package/scripts/{git → followup}/git-followup-flush.ts +2 -2
- package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
- package/scripts/{git → followup}/git-followup-label.ts +4 -4
- package/scripts/followup/git-followup-merged.ts +112 -0
- package/scripts/{git → followup}/git-followup-pending.ts +1 -1
- package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
- package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
- package/scripts/{git → followup}/git-pr-followup.ts +53 -16
- package/scripts/gate/core-budget.ts +3 -9
- package/scripts/gate/gate-plan.ts +7 -4
- package/scripts/gate/gate-report.ts +0 -6
- package/scripts/gate/gate-tree.ts +1 -1
- package/scripts/gate/pre-commit-type-check.ts +0 -6
- package/scripts/gate/project-checks.ts +7 -8
- package/scripts/gate/scoped-green.ts +0 -1
- package/scripts/gate/type-check-step.ts +1 -1
- package/scripts/gate/verification-gate.ts +0 -2
- package/scripts/gh/fix-gh-packages.ts +15 -12
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
- package/scripts/{git → gh}/git-gh-check.ts +2 -1
- package/scripts/{git → gh}/git-gh-exec.ts +1 -1
- package/scripts/{git → gh}/git-gh-failure.ts +1 -1
- package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
- package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
- package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
- package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
- package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
- package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
- package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
- package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
- package/scripts/{git → gh}/git-gh-pr.ts +3 -1
- package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
- package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
- package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
- package/scripts/{git → gh}/git-pr-checks.ts +2 -1
- package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
- package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
- package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
- package/scripts/{git → gh}/git-pr.ts +3 -3
- package/scripts/git/changed-file-scope.ts +0 -1
- package/scripts/git/git-branch.ts +3 -6
- package/scripts/git/git-command.ts +1 -1
- package/scripts/git/git-commit.ts +1 -1
- package/scripts/git/git-common-directory.ts +80 -24
- package/scripts/git/git-error.ts +66 -9
- package/scripts/git/git-execa-error.ts +6 -1
- package/scripts/git/git-issue.ts +1 -1
- package/scripts/git/git-preflight.ts +24 -6
- package/scripts/git/git-prompt.ts +6 -31
- package/scripts/git/git-push-transport.ts +12 -69
- package/scripts/git/git-push.ts +1 -1
- package/scripts/git/git-spawn.ts +79 -3
- package/scripts/git/git-ssh-keepalive.ts +74 -0
- package/scripts/git/git-staging.ts +1 -0
- package/scripts/git/git-status.ts +1 -1
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/gone-branch.ts +4 -2
- package/scripts/git/listing-cutoff.ts +1 -1
- package/scripts/git/main-merge.ts +1 -1
- package/scripts/git/main-sync.ts +19 -1
- package/scripts/git/parse-json-array.ts +0 -3
- package/scripts/git/repository-lock.ts +16 -16
- package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
- package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
- package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
- package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
- package/scripts/hooks/codex-hook-adapter.ts +0 -1
- package/scripts/hooks/edited-cspell.ts +1 -1
- package/scripts/hooks/format-edited-cli.ts +15 -0
- package/scripts/hooks/format-edited-file.ts +4 -9
- package/scripts/hooks/pre-push-unit.ts +0 -4
- package/scripts/hooks/pretool-guard-cli.ts +21 -0
- package/scripts/hooks/pretool-guard.ts +36 -19
- package/scripts/hooks/reserved-run.ts +1 -1
- package/scripts/hooks/step-zero-notice.ts +76 -0
- package/scripts/hooks/stop-guard.ts +47 -21
- package/scripts/init/claude-plugin-config.ts +4 -5
- package/scripts/init/hook-command-rewrite.ts +16 -8
- package/scripts/init/hook-launch.ts +41 -15
- package/scripts/init/init-basic.ts +2 -5
- package/scripts/init/init-logic.ts +7 -0
- package/scripts/init/init.ts +0 -3
- package/scripts/init/project-profile.ts +6 -11
- package/scripts/init/start-exec.ts +8 -2
- package/scripts/init/start-plan.ts +18 -5
- package/scripts/init/start-setup-pr.ts +52 -25
- package/scripts/init/start-steps.ts +42 -9
- package/scripts/init/start.ts +40 -10
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +3 -3
- package/scripts/issue/defect-rate.ts +1 -2
- package/scripts/{git → issue}/git-next-issues.ts +37 -8
- package/scripts/issue/issue-backlinks-cli.ts +1 -5
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +19 -3
- package/scripts/issue/issue-classification.ts +1 -9
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +2 -2
- package/scripts/issue/issue-file-cli.ts +5 -5
- package/scripts/issue/issue-file.ts +2 -2
- package/scripts/issue/issue-fold-cli.ts +1 -1
- package/scripts/issue/issue-fold-existing-cli.ts +1 -1
- package/scripts/{git → issue}/issue-labels.ts +20 -0
- package/scripts/issue/issue-lint-cli.ts +1 -1
- package/scripts/issue/issue-merged.ts +2 -2
- package/scripts/issue/issue-rank.ts +89 -0
- package/scripts/issue/issue-read-cli.ts +8 -47
- package/scripts/issue/issue-read.ts +0 -2
- package/scripts/issue/issue-report-failures.ts +80 -0
- package/scripts/issue/issue-scout-cli.ts +1 -7
- package/scripts/issue/issue-scout-closed.ts +2 -2
- package/scripts/issue/issue-scout.ts +0 -2
- package/scripts/issue/issue-state-cli.ts +5 -46
- package/scripts/issue/issue-state.ts +1 -5
- package/scripts/issue/markdown-section.ts +1 -1
- package/scripts/issue/measure-rerun-cli.ts +1 -1
- package/scripts/issue/reproduction-measure.ts +1 -1
- package/scripts/josh/cli-body.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +0 -3
- package/scripts/josh/josh-command-map.ts +2 -102
- package/scripts/josh/josh-commands-ai.ts +9 -102
- package/scripts/josh/josh-commands-backlog.ts +5 -1
- package/scripts/josh/josh-commands-development.ts +10 -3
- package/scripts/josh/josh-commands-issue.ts +2 -2
- package/scripts/josh/josh-commands-maintenance.ts +7 -0
- package/scripts/josh/josh-commands-project.ts +7 -1
- package/scripts/josh/josh-commands-run.ts +114 -0
- package/scripts/josh/josh-commands-versioning.ts +8 -0
- package/scripts/josh/josh-commands-workflow.ts +2 -2
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +3 -6
- package/scripts/lane/lane-capacity.ts +6 -3
- package/scripts/lane/lane-child-invocation.ts +20 -7
- package/scripts/lane/lane-child-marker.ts +16 -2
- package/scripts/lane/lane-cli.ts +33 -18
- package/scripts/lane/lane-close.ts +1 -3
- package/scripts/lane/lane-dispatch.ts +3 -4
- package/scripts/lane/lane-environment.ts +0 -9
- package/scripts/lane/lane-handoff.ts +38 -0
- package/scripts/lane/lane-launch-cli.ts +21 -11
- package/scripts/lane/lane-open.ts +0 -3
- package/scripts/lane/lane-output.ts +0 -1
- package/scripts/lane/lane-registry.ts +9 -0
- package/scripts/lane/lane-report.ts +10 -4
- package/scripts/lane/openai-lane-ship.ts +2 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
- package/scripts/lane/openai-lane-supervisor.ts +6 -4
- package/scripts/lane/openai-review-broker.ts +3 -0
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/json-value.ts +5 -4
- package/scripts/lib/poll.ts +3 -1
- package/scripts/lib/timed-fetch.ts +15 -0
- package/scripts/lib/timeouts.ts +13 -0
- package/scripts/{yaml → lib}/yaml-document.ts +3 -1
- package/scripts/{bytes → lines}/bytes-command.ts +0 -2
- package/scripts/lines/lines-command.ts +0 -1
- package/scripts/lint/lint-related-scope.ts +0 -1
- package/scripts/lint/lint-related.ts +1 -1
- package/scripts/{git → notify}/telegram-notify.ts +2 -2
- package/scripts/{git → notify}/telegram-test.ts +4 -4
- package/scripts/observations/observation-ledger-home.ts +0 -1
- package/scripts/observations/observation-ledger-line.ts +0 -1
- package/scripts/observations/observation-ledger-migrate.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +3 -3
- package/scripts/observations/observations-flush.ts +2 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/package/package-scout-cli.ts +2 -7
- package/scripts/package/package-scout.ts +0 -2
- package/scripts/propagate/propagate-git-failure.ts +0 -1
- package/scripts/propagate/propagate-git.ts +0 -2
- package/scripts/propagate/propagate-plan.ts +185 -0
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -3
- package/scripts/propagate/propagate-steps.ts +19 -6
- package/scripts/propagate/propagate-targets.ts +13 -6
- package/scripts/propagate/propagate.ts +60 -46
- package/scripts/refactor/import-graph.ts +0 -1
- package/scripts/refactor/refactor-lint.ts +0 -2
- package/scripts/refactor/refactor-scan.ts +0 -1
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +1 -2
- package/scripts/registry-migration/migrate.ts +19 -9
- package/scripts/release/github-release-cli.ts +8 -6
- package/scripts/release/github-release-environment.ts +46 -0
- package/scripts/release/github-release.ts +151 -94
- package/scripts/release/release-history.ts +0 -1
- package/scripts/release/release-plan.ts +0 -1
- package/scripts/release/release-publish.ts +2 -3
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/repo/auto-merge-setting-logic.ts +1 -4
- package/scripts/repo/repo-setting.ts +1 -1
- package/scripts/repo/repository-labels.ts +3 -3
- package/scripts/repo/required-checks-logic.ts +206 -0
- package/scripts/repo/required-checks-report.ts +71 -0
- package/scripts/repo/ruleset-check-cli.ts +53 -0
- package/scripts/repo/ruleset-check.ts +147 -0
- package/scripts/report/report-lint-cli.ts +0 -4
- package/scripts/review/disposition-cli.ts +1 -1
- package/scripts/review/live-evidence.ts +1 -1
- package/scripts/review/review-attest-cli.ts +0 -6
- package/scripts/review/review-attest.ts +48 -16
- package/scripts/review/review-brief-cli.ts +72 -8
- package/scripts/review/review-brief.ts +67 -9
- package/scripts/review/review-diff-parts.ts +89 -0
- package/scripts/review/review-diff-write.ts +97 -0
- package/scripts/review/review-finding-ledger.ts +0 -1
- package/scripts/review/review-record-cli.ts +1 -1
- package/scripts/review/review-record.ts +0 -1
- package/scripts/review/review-round2-cli.ts +1 -1
- package/scripts/review/review-stamps.ts +6 -2
- package/scripts/review/review-tree.ts +14 -2
- package/scripts/rules/decision-oracle-stage.ts +18 -0
- package/scripts/rules/decision-oracle.ts +10 -7
- package/scripts/rules/delivered-rules.ts +9 -1
- package/scripts/rules/destructive-command.ts +119 -0
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/file-body.ts +0 -3
- package/scripts/rules/filing-cap.ts +0 -2
- package/scripts/rules/gh-api.ts +7 -2
- package/scripts/rules/git-argv.ts +18 -7
- package/scripts/rules/git-force.ts +0 -2
- package/scripts/rules/implementation-cut.ts +1 -2
- package/scripts/rules/index-guard.ts +71 -0
- package/scripts/rules/issue-citation.ts +50 -25
- package/scripts/rules/issue-fold.ts +1 -2
- package/scripts/rules/lane-background.ts +15 -7
- package/scripts/rules/lane-carry-conflict.ts +1 -2
- package/scripts/rules/lane-park.ts +14 -8
- package/scripts/rules/last-prompt.ts +1 -0
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +0 -3
- package/scripts/rules/permission-guards.ts +14 -0
- package/scripts/rules/pre-gate-cut.ts +2 -2
- package/scripts/rules/protected-files.ts +74 -0
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +0 -3
- package/scripts/rules/rule-value-cli.ts +0 -1
- package/scripts/rules/shell-body-trigger.ts +0 -1
- package/scripts/rules/shell-segments.ts +0 -1
- package/scripts/rules/stop-rules.ts +13 -5
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +0 -1
- package/scripts/rules/worktree-guard.ts +26 -9
- package/scripts/run/run-carry-cli.ts +0 -2
- package/scripts/run/run-carry-stash.ts +2 -2
- package/scripts/run/run-carry-streak.ts +1 -1
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +1 -1
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +101 -24
- package/scripts/run/run-entry.ts +0 -1
- package/scripts/run/run-event-cli.ts +0 -2
- package/scripts/run/run-event-follow.ts +1 -0
- package/scripts/run/run-event-render.ts +1 -1
- package/scripts/run/run-event-scope.ts +53 -4
- package/scripts/run/run-event-stream.ts +0 -3
- package/scripts/run/run-event-watch.ts +1 -0
- package/scripts/run/run-halfrun-resume.ts +20 -7
- package/scripts/run/run-headless.ts +24 -8
- package/scripts/run/run-hold-cli.ts +33 -10
- package/scripts/run/run-hold.ts +25 -5
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +1 -1
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +5 -13
- package/scripts/run/run-merge-steps.ts +5 -5
- package/scripts/run/run-merge.ts +1 -1
- package/scripts/run/run-next-cli.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +143 -0
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +2 -2
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-cli.ts +4 -7
- package/scripts/run/run-progress-clock.ts +6 -34
- package/scripts/run/run-progress-config.ts +0 -4
- package/scripts/run/run-progress-read.ts +3 -3
- package/scripts/run/run-progress.ts +22 -10
- package/scripts/run/run-prrun-resume.ts +117 -0
- package/scripts/run/run-report-cli.ts +1 -2
- package/scripts/run/run-report.ts +0 -1
- package/scripts/run/run-retrospective.ts +1 -1
- package/scripts/run/run-review-cli.ts +0 -3
- package/scripts/run/run-review-steps.ts +2 -0
- package/scripts/run/run-review.ts +0 -2
- package/scripts/run/run-ship-cli.ts +27 -77
- package/scripts/run/run-ship-detach.ts +1 -0
- package/scripts/run/run-ship-next.ts +106 -0
- package/scripts/run/run-ship-preflight.ts +87 -0
- package/scripts/run/run-ship-return.ts +8 -3
- package/scripts/run/run-ship-review-steps.ts +23 -30
- package/scripts/run/run-ship-review.ts +20 -0
- package/scripts/run/run-ship-scoped.ts +45 -0
- package/scripts/run/run-ship-stage.ts +5 -1
- package/scripts/run/run-ship-steps.ts +105 -0
- package/scripts/run/run-ship.ts +2 -1
- package/scripts/run/run-stage-read.ts +62 -0
- package/scripts/run/run-stage.ts +160 -0
- package/scripts/run/run-status-cli.ts +1 -1
- package/scripts/run/run-step-cli.ts +21 -14
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stop-notify.ts +1 -3
- package/scripts/run/run-stranded-cli.ts +0 -4
- package/scripts/run/run-stranded-detect.ts +2 -2
- package/scripts/run/run-tail-cli.ts +17 -11
- package/scripts/run/run-tail.ts +2 -0
- package/scripts/run/run-tidy-lanes.ts +2 -1
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +4 -5
- package/scripts/run/run-wake-describe.ts +19 -1
- package/scripts/run/run-wake-loop.ts +2 -2
- package/scripts/run/run-wake.ts +2 -4
- package/scripts/run/run-watcher-guard-cli.ts +0 -4
- package/scripts/run/run-watcher-guard.ts +9 -7
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/project-config.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +0 -1
- package/scripts/security/security-audit-provision.ts +3 -2
- package/scripts/security/security-audit.ts +0 -1
- package/scripts/security/security-updates-logic.ts +0 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
- package/scripts/sonar/sonar-hotspots.ts +0 -1
- package/scripts/sonar/sonar-new-code-cli.ts +150 -0
- package/scripts/sonar/sonar-new-code.ts +79 -0
- package/scripts/sonar/sonar-project.ts +97 -0
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +2 -5
- package/scripts/sync/managed-config-scope-cli.ts +1 -1
- package/scripts/sync/skill-migration.ts +0 -1
- package/scripts/sync/sync-hook-safety.ts +2 -3
- package/scripts/sync/sync.ts +1 -8
- package/scripts/sync/template-source-logic.ts +0 -1
- package/scripts/sync/workflow-pin-logic.ts +16 -28
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +0 -2
- package/scripts/test/test-red-commit.ts +2 -2
- package/scripts/test/test-red.ts +14 -7
- package/scripts/test/test-type-logic.ts +1 -1
- package/scripts/test/unit-worker-share.ts +7 -16
- package/scripts/time-runtime/time-batch-guard.ts +1 -2
- package/scripts/time-runtime/time-bundle-call.ts +2 -3
- package/scripts/time-runtime/time-bundles.ts +0 -4
- package/scripts/time-runtime/time-density-hook.ts +0 -2
- package/scripts/time-runtime/time-followup-stage.ts +1 -1
- package/scripts/time-runtime/time-format.ts +0 -73
- package/scripts/time-runtime/time-round-trips.ts +0 -4
- package/scripts/time-runtime/time-single-check.ts +1 -1
- package/scripts/time-runtime/time-spans.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +1 -2
- package/scripts/ui/ui-routes-cli.ts +0 -5
- package/scripts/ui/ui-routes.ts +0 -5
- package/scripts/version/effective-upstream.ts +2 -2
- package/scripts/version/latest-corepack.ts +7 -9
- package/scripts/version/latest-scope-cli.ts +0 -2
- package/scripts/version/latest-update.ts +0 -2
- package/scripts/version/npm-registry.ts +97 -0
- package/scripts/version/publishable-range-check.ts +1 -1
- package/scripts/version/release-hold.ts +0 -4
- package/scripts/version/running-binary.ts +2 -2
- package/scripts/version/version-check-logic.ts +0 -2
- package/scripts/version/version-commands.ts +5 -4
- package/scripts/version/version-remote.ts +28 -14
- package/scripts/version/version-targets.ts +4 -4
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/dependabot-auto-merge.yml +5 -3
- package/templates/workflows/github-release.yml +81 -0
- package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
- package/prompts/collaboration-workflow/epic-audit.md +0 -5
- package/prompts/collaboration-workflow/epic-bundle.md +0 -5
- package/scripts/init/plugin-install-hint.ts +0 -47
- package/scripts/version/parse-json.ts +0 -13
- /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
- /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
- /package/scripts/{git → gh}/git-gh-command.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
- /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
- /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
- /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
- /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
- /package/scripts/{git → gh}/git-pr-error.ts +0 -0
- /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
- /package/scripts/{git → gh}/github-issue-url.ts +0 -0
- /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
- /package/scripts/{git → issue}/issue-reference.ts +0 -0
- /package/scripts/{git → lib}/animation-helpers.ts +0 -0
- /package/scripts/{git → lib}/git-animation.ts +0 -0
- /package/scripts/{git → notify}/git-notify.ts +0 -0
- /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
|
@@ -4,15 +4,14 @@ import { repo_discovery } from '#scripts/discovery/repo-discovery'
|
|
|
4
4
|
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
5
5
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
6
6
|
import { status_icons } from '#scripts/lib/status-icons'
|
|
7
|
-
import { self_sync_guard } from '#scripts/self-sync-guard/self-sync-guard-logic'
|
|
8
|
-
import { KIT_PACKAGE_NAME } from '#scripts/version/kit-descriptor'
|
|
9
7
|
import { derive_versions_endpoint } from '#scripts/version/version-command-config'
|
|
10
8
|
import { version_targets } from '#scripts/version/version-targets'
|
|
11
9
|
import { propagate_git } from './propagate-git'
|
|
10
|
+
import { propagate_plan } from './propagate-plan'
|
|
12
11
|
import { propagate_publish } from './propagate-publish'
|
|
13
12
|
import { propagate_run } from './propagate-run'
|
|
14
13
|
import { propagate_select, type TargetSelection } from './propagate-select'
|
|
15
|
-
import { propagate_steps } from './propagate-steps'
|
|
14
|
+
import { propagate_steps, type ReleasePlan } from './propagate-steps'
|
|
16
15
|
import { propagate_targets, type PropagateTarget } from './propagate-targets'
|
|
17
16
|
|
|
18
17
|
// `josh propagate` — carry the release this repository just published into every consumer checked
|
|
@@ -78,7 +77,8 @@ function parse_options(argv: ReadonlyArray<string>): RunOptions {
|
|
|
78
77
|
return usage === undefined ? options : { ...options, usage }
|
|
79
78
|
}
|
|
80
79
|
|
|
81
|
-
// Propagation runs from the supplier's own repository, and only there
|
|
80
|
+
// Propagation runs from the supplier's own repository, and only there — kit's, or a toolkit's built
|
|
81
|
+
// on it (joshuafolkken/kit#2879).
|
|
82
82
|
//
|
|
83
83
|
// This is also what decides who propagates when several sessions are running: in the
|
|
84
84
|
// per-repository concurrency model there is one session per checkout, so the session standing in
|
|
@@ -86,13 +86,7 @@ function parse_options(argv: ReadonlyArray<string>): RunOptions {
|
|
|
86
86
|
// convention enforced at the boundary, not a lock — two checkouts of the supplier would both pass,
|
|
87
87
|
// which is why each consumer is additionally refused unless its working tree is clean.
|
|
88
88
|
function refuse_outside_source_repository(project_root: string): string | undefined {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return [
|
|
92
|
-
`Refusing to propagate: this is not ${KIT_PACKAGE_NAME}'s own repository.`,
|
|
93
|
-
'Propagation carries a published release outward, so it runs from the package that published it.',
|
|
94
|
-
`Run it from the ${KIT_PACKAGE_NAME} checkout instead.`,
|
|
95
|
-
].join('\n')
|
|
89
|
+
return propagate_plan.resolve_supplier(project_root).refusal
|
|
96
90
|
}
|
|
97
91
|
|
|
98
92
|
// The version to carry: this repository's own declared version, which is what the merge published.
|
|
@@ -144,10 +138,14 @@ function resolve_run_version(project_root: string, is_dry_run = false): RunVersi
|
|
|
144
138
|
return resolve_supplier_version(project_root, is_dry_run)
|
|
145
139
|
}
|
|
146
140
|
|
|
147
|
-
async function await_publish(
|
|
141
|
+
async function await_publish(
|
|
142
|
+
package_name: string,
|
|
143
|
+
target_version: string,
|
|
144
|
+
is_skipped: boolean,
|
|
145
|
+
): Promise<boolean> {
|
|
148
146
|
if (is_skipped) return true
|
|
149
|
-
console.info(`Waiting for ${
|
|
150
|
-
const endpoint = derive_versions_endpoint(
|
|
147
|
+
console.info(`Waiting for ${package_name}@${target_version} to appear in the registry…`)
|
|
148
|
+
const endpoint = derive_versions_endpoint(package_name)
|
|
151
149
|
const result = await propagate_publish.wait_for_publish(endpoint, target_version)
|
|
152
150
|
|
|
153
151
|
if (result.state === 'published') {
|
|
@@ -179,49 +177,65 @@ function announce_run_version(resolved: RunVersion): string | undefined {
|
|
|
179
177
|
|
|
180
178
|
interface RunPlan {
|
|
181
179
|
version: string
|
|
180
|
+
releases: ReleasePlan
|
|
182
181
|
targets: ReadonlyArray<PropagateTarget>
|
|
183
182
|
}
|
|
184
183
|
|
|
185
184
|
// The consumers this run will consider, narrowed by `--target`. Resolved before the publish wait so
|
|
186
|
-
// a mistyped name fails at once instead of after minutes of polling the registry.
|
|
187
|
-
|
|
185
|
+
// a mistyped name fails at once instead of after minutes of polling the registry. A consumer that
|
|
186
|
+
// installs a toolkit above the supplier is left to that toolkit's propagation (joshuafolkken/kit#2879).
|
|
187
|
+
function resolve_run_targets(
|
|
188
|
+
releases: ReleasePlan,
|
|
189
|
+
version: string,
|
|
190
|
+
target: string | undefined,
|
|
191
|
+
): TargetSelection {
|
|
188
192
|
const map = repo_discovery.discover_repositories(PROJECT_ROOT)
|
|
189
|
-
const
|
|
193
|
+
const supplier = propagate_plan.supplier_name(releases)
|
|
194
|
+
const targets = propagate_targets
|
|
195
|
+
.resolve_targets(map, supplier, version)
|
|
196
|
+
.map((candidate) => propagate_plan.mark_carried(candidate, releases))
|
|
190
197
|
|
|
191
198
|
return propagate_select.select_target(targets, target)
|
|
192
199
|
}
|
|
193
200
|
|
|
194
|
-
//
|
|
201
|
+
// Print why the run stopped before any consumer was touched.
|
|
202
|
+
function refuse_run(refusal: string): void {
|
|
203
|
+
console.error(refusal)
|
|
204
|
+
console.error(UNTOUCHED_NOTE)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
interface PlanOutcome {
|
|
208
|
+
plan?: RunPlan
|
|
209
|
+
refusal?: string
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// The releases and the consumers for a version already accepted, or the reason there are none.
|
|
213
|
+
function plan_consumers(version: string, options: RunOptions): PlanOutcome {
|
|
214
|
+
const { plan: releases, refusal } = propagate_plan.build_plan(PROJECT_ROOT, version)
|
|
215
|
+
if (releases === undefined) return { refusal: refusal ?? UNTOUCHED_NOTE }
|
|
216
|
+
const selection = resolve_run_targets(releases, version, options.target)
|
|
217
|
+
if (selection.refusal !== undefined) return { refusal: selection.refusal }
|
|
218
|
+
|
|
219
|
+
return { plan: { version, releases, targets: selection.targets } }
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// The version, the releases and the consumers, or nothing once whatever stopped the run has been
|
|
223
|
+
// printed.
|
|
195
224
|
function plan_run(options: RunOptions): RunPlan | undefined {
|
|
196
225
|
const version = announce_run_version(resolve_run_version(PROJECT_ROOT, options.is_dry_run))
|
|
197
226
|
if (version === undefined) return undefined
|
|
198
|
-
const
|
|
227
|
+
const { plan, refusal } = plan_consumers(version, options)
|
|
228
|
+
if (refusal !== undefined) refuse_run(refusal)
|
|
199
229
|
|
|
200
|
-
|
|
201
|
-
console.error(selection.refusal)
|
|
202
|
-
console.error(UNTOUCHED_NOTE)
|
|
203
|
-
|
|
204
|
-
return undefined
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return { version, targets: selection.targets }
|
|
230
|
+
return plan
|
|
208
231
|
}
|
|
209
232
|
|
|
210
233
|
// Everything after the publish wait: run each consumer, print one report.
|
|
211
234
|
function propagate_to_consumers(plan: RunPlan, is_dry_run: boolean): number {
|
|
212
|
-
const {
|
|
235
|
+
const { releases, targets } = plan
|
|
213
236
|
const step = is_dry_run
|
|
214
|
-
?
|
|
215
|
-
: propagate_steps.create_step_runner(
|
|
216
|
-
releases: [
|
|
217
|
-
{
|
|
218
|
-
package_name: KIT_PACKAGE_NAME,
|
|
219
|
-
version,
|
|
220
|
-
bin_name: propagate_steps.JOSH_BIN,
|
|
221
|
-
},
|
|
222
|
-
],
|
|
223
|
-
origin: propagate_steps.PROPAGATE_ORIGIN,
|
|
224
|
-
})
|
|
237
|
+
? propagate_plan.create_step_describer(releases)
|
|
238
|
+
: propagate_steps.create_step_runner(releases)
|
|
225
239
|
const results = propagate_run.run_targets(
|
|
226
240
|
targets,
|
|
227
241
|
step,
|
|
@@ -236,8 +250,12 @@ function propagate_to_consumers(plan: RunPlan, is_dry_run: boolean): number {
|
|
|
236
250
|
|
|
237
251
|
// A dry run never waits: the whole reason to ask for one is to see the target list, and a wait that
|
|
238
252
|
// times out would end the run before the list was ever printed.
|
|
239
|
-
async function resolve_publish(
|
|
240
|
-
return await await_publish(
|
|
253
|
+
async function resolve_publish(plan: RunPlan, options: RunOptions): Promise<boolean> {
|
|
254
|
+
return await await_publish(
|
|
255
|
+
propagate_plan.supplier_name(plan.releases),
|
|
256
|
+
plan.version,
|
|
257
|
+
options.is_dry_run || options.is_publish_wait_skipped,
|
|
258
|
+
)
|
|
241
259
|
}
|
|
242
260
|
|
|
243
261
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
@@ -251,7 +269,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
251
269
|
|
|
252
270
|
const plan = plan_run(options)
|
|
253
271
|
if (plan === undefined) return FAILURE_EXIT_CODE
|
|
254
|
-
if (!(await resolve_publish(plan
|
|
272
|
+
if (!(await resolve_publish(plan, options))) return FAILURE_EXIT_CODE
|
|
255
273
|
|
|
256
274
|
return propagate_to_consumers(plan, options.is_dry_run)
|
|
257
275
|
}
|
|
@@ -261,16 +279,12 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
261
279
|
}
|
|
262
280
|
|
|
263
281
|
const propagate = {
|
|
264
|
-
DRY_RUN_REASON,
|
|
265
282
|
KNOWN_FLAGS,
|
|
266
283
|
TARGET_FLAG,
|
|
267
284
|
parse_options,
|
|
268
285
|
refuse_outside_source_repository,
|
|
269
286
|
resolve_target_version,
|
|
270
287
|
resolve_run_version,
|
|
271
|
-
announce_run_version,
|
|
272
|
-
run,
|
|
273
|
-
main,
|
|
274
288
|
}
|
|
275
289
|
|
|
276
290
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
@@ -219,9 +219,8 @@ function plan(project_npmrc: string, user_npmrc: string, lockfile: string): Migr
|
|
|
219
219
|
const migrate_logic = {
|
|
220
220
|
plan,
|
|
221
221
|
github_tarballs,
|
|
222
|
+
is_github_tarball,
|
|
222
223
|
rewrite_kit_lockfile,
|
|
223
|
-
registry_of,
|
|
224
|
-
scoped_packages,
|
|
225
224
|
scoped_versions,
|
|
226
225
|
}
|
|
227
226
|
|
|
@@ -2,6 +2,8 @@ import { existsSync, rmSync, writeFileSync } from 'node:fs'
|
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import { fileURLToPath } from 'node:url'
|
|
4
4
|
import { file_reader } from '#scripts/lib/read-file'
|
|
5
|
+
import { timed_fetch } from '#scripts/lib/timed-fetch'
|
|
6
|
+
import { COMMAND_TIMEOUT_MS, INSTALL_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
5
7
|
import { execa } from 'execa'
|
|
6
8
|
import { z } from 'zod'
|
|
7
9
|
import { migrate_logic, type MigrationPlan } from './migrate-logic'
|
|
@@ -11,7 +13,6 @@ const NPMRC = '.npmrc'
|
|
|
11
13
|
const LOCKFILE = 'pnpm-lock.yaml'
|
|
12
14
|
const WORKSPACE = 'pnpm-workspace.yaml'
|
|
13
15
|
const PUBLIC_REGISTRY = 'https://registry.npmjs.org/'
|
|
14
|
-
const FETCH_TIMEOUT_MS = 10_000
|
|
15
16
|
const SCOPE = '@joshuafolkken/'
|
|
16
17
|
const manifest_schema = z.looseObject({
|
|
17
18
|
dependencies: z.record(z.string(), z.string()).optional(),
|
|
@@ -104,11 +105,16 @@ async function verify_public_versions(
|
|
|
104
105
|
lockfile: string,
|
|
105
106
|
probe_version: MigrationDependencies['fetch_version'],
|
|
106
107
|
): Promise<VersionCheck> {
|
|
108
|
+
const versions = migrate_logic.scoped_versions(lockfile)
|
|
109
|
+
// Each probe reads its own package, so they run together; the report keeps the lockfile's order.
|
|
110
|
+
const probed = await Promise.all(
|
|
111
|
+
versions.map(async ([name, version]) => await probe_integrity(name, version, probe_version)),
|
|
112
|
+
)
|
|
107
113
|
const missing: Array<string> = []
|
|
108
114
|
const integrities = new Map<string, string>()
|
|
109
115
|
|
|
110
|
-
for (const [name, version] of
|
|
111
|
-
const integrity =
|
|
116
|
+
for (const [index, [name, version]] of versions.entries()) {
|
|
117
|
+
const integrity = probed[index]
|
|
112
118
|
if (integrity === undefined) missing.push(`${name}@${version}`)
|
|
113
119
|
else integrities.set(version, integrity)
|
|
114
120
|
}
|
|
@@ -238,9 +244,7 @@ async function migrate(cwd: string, dependencies: MigrationDependencies): Promis
|
|
|
238
244
|
|
|
239
245
|
async function fetch_version(name: string, version: string): Promise<string | undefined> {
|
|
240
246
|
const encoded = encodeURIComponent(name)
|
|
241
|
-
const response = await
|
|
242
|
-
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
243
|
-
})
|
|
247
|
+
const response = await timed_fetch(`${PUBLIC_REGISTRY}${encoded}/${encodeURIComponent(version)}`)
|
|
244
248
|
|
|
245
249
|
if (!response.ok) return undefined
|
|
246
250
|
const parsed = version_schema.safeParse(await response.json())
|
|
@@ -250,11 +254,17 @@ async function fetch_version(name: string, version: string): Promise<string | un
|
|
|
250
254
|
}
|
|
251
255
|
|
|
252
256
|
async function install(cwd: string): Promise<void> {
|
|
253
|
-
await execa('pnpm', ['install', '--lockfile-only', '--ignore-scripts', '--force'], {
|
|
257
|
+
await execa('pnpm', ['install', '--lockfile-only', '--ignore-scripts', '--force'], {
|
|
258
|
+
cwd,
|
|
259
|
+
timeout: INSTALL_TIMEOUT_MS,
|
|
260
|
+
})
|
|
254
261
|
}
|
|
255
262
|
|
|
256
263
|
async function effective_registry(cwd: string): Promise<string> {
|
|
257
|
-
const result = await execa('pnpm', ['config', 'get', '@joshuafolkken:registry'], {
|
|
264
|
+
const result = await execa('pnpm', ['config', 'get', '@joshuafolkken:registry'], {
|
|
265
|
+
cwd,
|
|
266
|
+
timeout: COMMAND_TIMEOUT_MS,
|
|
267
|
+
})
|
|
258
268
|
|
|
259
269
|
return result.stdout.trim()
|
|
260
270
|
}
|
|
@@ -275,7 +285,7 @@ async function main(): Promise<void> {
|
|
|
275
285
|
|
|
276
286
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
|
|
277
287
|
|
|
278
|
-
const registry_migration = { migrate }
|
|
288
|
+
const registry_migration = { migrate, install, effective_registry }
|
|
279
289
|
|
|
280
290
|
export { registry_migration }
|
|
281
291
|
export type { MigrationDependencies }
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process'
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
2
3
|
import { github_release } from './github-release'
|
|
4
|
+
import { github_release_environment } from './github-release-environment'
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
const tag = process.env
|
|
6
|
+
async function main(): Promise<void> {
|
|
7
|
+
const { token, tag, settings } = github_release_environment.read_release_input(process.env)
|
|
8
|
+
const tags = execFileSync('git', ['tag', '--list'], { encoding: 'utf8' }).trim().split('\n')
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
console.info(await github_release.publish(fetch, token, tag, { ...settings, tags }))
|
|
11
|
+
}
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
console.info(await github_release.publish(fetch, token, tag, { tags }))
|
|
13
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ReleaseSettings } from './github-release'
|
|
2
|
+
|
|
3
|
+
interface ReleaseInput {
|
|
4
|
+
token: string
|
|
5
|
+
tag: string
|
|
6
|
+
settings: ReleaseSettings
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
type Environment = Readonly<Record<string, string | undefined>>
|
|
10
|
+
|
|
11
|
+
// A workflow expression renders an unset input as the empty string, so empty means "not given".
|
|
12
|
+
function optional(value: string | undefined): string | undefined {
|
|
13
|
+
return value === undefined || value === '' ? undefined : value
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function job_names(value: string | undefined): ReadonlyArray<string> {
|
|
17
|
+
return (optional(value) ?? '')
|
|
18
|
+
.split(',')
|
|
19
|
+
.map((name) => name.trim())
|
|
20
|
+
.filter((name) => name !== '')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function read_release_input(environment: Environment): ReleaseInput {
|
|
24
|
+
const token = optional(environment['GH_TOKEN'])
|
|
25
|
+
const tag = optional(environment['RELEASE_TAG'])
|
|
26
|
+
const repository = optional(environment['GITHUB_REPOSITORY'])
|
|
27
|
+
|
|
28
|
+
if (!token || !tag || !repository) {
|
|
29
|
+
throw new Error('GH_TOKEN, RELEASE_TAG and GITHUB_REPOSITORY are required')
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
token,
|
|
34
|
+
tag,
|
|
35
|
+
settings: {
|
|
36
|
+
repository,
|
|
37
|
+
start_tag: optional(environment['RELEASE_START_TAG']),
|
|
38
|
+
workflow: optional(environment['RELEASE_WORKFLOW']),
|
|
39
|
+
jobs: job_names(environment['RELEASE_JOBS']),
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const github_release_environment = { read_release_input }
|
|
45
|
+
|
|
46
|
+
export { github_release_environment }
|