@opengsd/gsd-core 1.3.0-rc.1 → 1.3.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/README.ja-JP.md +44 -790
- package/README.ko-KR.md +41 -778
- package/README.md +39 -180
- package/README.pt-BR.md +45 -413
- package/README.zh-CN.md +43 -761
- package/agents/gsd-ai-researcher.md +1 -1
- package/agents/gsd-debugger.md +8 -8
- package/agents/gsd-domain-researcher.md +14 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-eval-planner.md +1 -1
- package/agents/gsd-executor.md +21 -8
- package/agents/gsd-framework-selector.md +1 -1
- package/agents/gsd-intel-updater.md +4 -4
- package/agents/gsd-phase-researcher.md +18 -5
- package/agents/gsd-plan-checker.md +3 -3
- package/agents/gsd-planner.md +36 -23
- package/agents/gsd-project-researcher.md +13 -0
- package/agents/gsd-research-synthesizer.md +6 -2
- package/agents/gsd-roadmapper.md +6 -6
- package/agents/gsd-ui-researcher.md +15 -2
- package/agents/gsd-user-profiler.md +2 -2
- package/agents/gsd-verifier.md +7 -7
- package/bin/install.js +169 -59
- package/commands/gsd/add-tests.md +1 -1
- package/commands/gsd/ai-integration-phase.md +3 -3
- package/commands/gsd/audit-fix.md +1 -1
- package/commands/gsd/audit-milestone.md +1 -1
- package/commands/gsd/audit-uat.md +1 -1
- package/commands/gsd/autonomous.md +2 -2
- package/commands/gsd/capture.md +6 -6
- package/commands/gsd/cleanup.md +1 -1
- package/commands/gsd/code-review.md +1 -1
- package/commands/gsd/complete-milestone.md +2 -2
- package/commands/gsd/config.md +3 -3
- package/commands/gsd/debug.md +1 -1
- package/commands/gsd/discuss-phase.md +5 -4
- package/commands/gsd/docs-update.md +1 -1
- package/commands/gsd/eval-review.md +2 -2
- package/commands/gsd/execute-phase.md +2 -2
- package/commands/gsd/explore.md +1 -1
- package/commands/gsd/extract-learnings.md +2 -2
- package/commands/gsd/fast.md +1 -1
- package/commands/gsd/forensics.md +1 -1
- package/commands/gsd/graphify.md +9 -9
- package/commands/gsd/health.md +1 -1
- package/commands/gsd/help.md +2 -2
- package/commands/gsd/import.md +5 -5
- package/commands/gsd/inbox.md +1 -1
- package/commands/gsd/ingest-docs.md +4 -4
- package/commands/gsd/manager.md +3 -3
- package/commands/gsd/map-codebase.md +1 -1
- package/commands/gsd/milestone-summary.md +1 -1
- package/commands/gsd/mvp-phase.md +4 -4
- package/commands/gsd/new-milestone.md +5 -5
- package/commands/gsd/new-project.md +5 -5
- package/commands/gsd/pause-work.md +2 -2
- package/commands/gsd/phase.md +4 -4
- package/commands/gsd/plan-phase.md +2 -2
- package/commands/gsd/plan-review-convergence.md +4 -4
- package/commands/gsd/pr-branch.md +1 -1
- package/commands/gsd/profile-user.md +2 -2
- package/commands/gsd/progress.md +4 -4
- package/commands/gsd/quick.md +1 -1
- package/commands/gsd/resume-work.md +1 -1
- package/commands/gsd/review.md +1 -1
- package/commands/gsd/secure-phase.md +1 -1
- package/commands/gsd/settings.md +1 -1
- package/commands/gsd/ship.md +2 -2
- package/commands/gsd/sketch.md +7 -7
- package/commands/gsd/spec-phase.md +2 -2
- package/commands/gsd/spike.md +3 -3
- package/commands/gsd/stats.md +1 -1
- package/commands/gsd/surface.md +4 -4
- package/commands/gsd/thread.md +1 -1
- package/commands/gsd/ui-phase.md +2 -2
- package/commands/gsd/ui-review.md +2 -2
- package/commands/gsd/ultraplan-phase.md +2 -2
- package/commands/gsd/undo.md +3 -3
- package/commands/gsd/update.md +3 -3
- package/commands/gsd/validate-phase.md +1 -1
- package/commands/gsd/verify-work.md +2 -2
- package/commands/gsd/workspace.md +4 -4
- package/{get-shit-done → gsd-core}/bin/check-latest-version.cjs +1 -1
- package/{get-shit-done → gsd-core}/bin/gsd-tools.cjs +13 -3
- package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
- package/gsd-core/bin/lib/adr-parser.cjs +399 -0
- package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
- package/gsd-core/bin/lib/artifacts.cjs +51 -0
- package/gsd-core/bin/lib/audit.cjs +743 -0
- package/gsd-core/bin/lib/check-command-router.cjs +342 -0
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/gsd-core/bin/lib/clock.cjs +95 -0
- package/gsd-core/bin/lib/clusters.cjs +128 -0
- package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
- package/gsd-core/bin/lib/command-aliases.cjs +809 -0
- package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
- package/gsd-core/bin/lib/commands.cjs +1202 -0
- package/gsd-core/bin/lib/config-schema.cjs +29 -0
- package/{get-shit-done → gsd-core}/bin/lib/config-types.cjs +1 -1
- package/gsd-core/bin/lib/config.cjs +714 -0
- package/{get-shit-done → gsd-core}/bin/lib/configuration.cjs +76 -85
- package/gsd-core/bin/lib/context-utilization.cjs +48 -0
- package/gsd-core/bin/lib/core.cjs +2007 -0
- package/{get-shit-done → gsd-core}/bin/lib/decisions.cjs +9 -7
- package/gsd-core/bin/lib/docs.cjs +252 -0
- package/gsd-core/bin/lib/drift.cjs +364 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
- package/gsd-core/bin/lib/frontmatter.cjs +442 -0
- package/gsd-core/bin/lib/gap-checker.cjs +257 -0
- package/gsd-core/bin/lib/graphify.cjs +496 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
- package/gsd-core/bin/lib/init-command-router.cjs +62 -0
- package/gsd-core/bin/lib/init.cjs +1799 -0
- package/gsd-core/bin/lib/install-profiles.cjs +526 -0
- package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +347 -0
- package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
- package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +784 -0
- package/gsd-core/bin/lib/intel.cjs +607 -0
- package/gsd-core/bin/lib/learnings.cjs +270 -0
- package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/gsd-core/bin/lib/milestone.cjs +373 -0
- package/gsd-core/bin/lib/model-catalog.cjs +154 -0
- package/gsd-core/bin/lib/model-profiles.cjs +24 -0
- package/gsd-core/bin/lib/observability/event.cjs +51 -0
- package/gsd-core/bin/lib/observability/logger.cjs +146 -0
- package/{get-shit-done → gsd-core}/bin/lib/observability/redaction.cjs +19 -21
- package/{get-shit-done → gsd-core}/bin/lib/package-identity.cjs +5 -1
- package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
- package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/gsd-core/bin/lib/phase.cjs +1307 -0
- package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
- package/{get-shit-done → gsd-core}/bin/lib/plan-scan.cjs +18 -24
- package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
- package/gsd-core/bin/lib/profile-output.cjs +1120 -0
- package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
- package/gsd-core/bin/lib/project-root.cjs +119 -0
- package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +491 -0
- package/gsd-core/bin/lib/roadmap.cjs +600 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +254 -0
- package/gsd-core/bin/lib/runtime-homes.cjs +169 -0
- package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
- package/{get-shit-done → gsd-core}/bin/lib/schema-detect.cjs +20 -26
- package/gsd-core/bin/lib/secrets.cjs +34 -0
- package/gsd-core/bin/lib/security.cjs +407 -0
- package/{get-shit-done → gsd-core}/bin/lib/semver-compare.cjs +1 -1
- package/gsd-core/bin/lib/shell-command-projection.cjs +524 -0
- package/gsd-core/bin/lib/state-command-router.cjs +160 -0
- package/{get-shit-done → gsd-core}/bin/lib/state-document.cjs +78 -78
- package/gsd-core/bin/lib/state.cjs +2010 -0
- package/gsd-core/bin/lib/surface.cjs +406 -0
- package/gsd-core/bin/lib/task-command-router.cjs +85 -0
- package/gsd-core/bin/lib/template.cjs +237 -0
- package/gsd-core/bin/lib/uat.cjs +297 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/gsd-core/bin/lib/update-context.cjs +218 -0
- package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
- package/gsd-core/bin/lib/validate.cjs +112 -0
- package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
- package/gsd-core/bin/lib/verify.cjs +1451 -0
- package/{get-shit-done → gsd-core}/bin/lib/workstream-inventory-builder.cjs +19 -12
- package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
- package/{get-shit-done → gsd-core}/bin/lib/workstream-name-policy.cjs +28 -31
- package/gsd-core/bin/lib/workstream.cjs +380 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +912 -0
- package/{get-shit-done → gsd-core}/bin/shared/config-schema.manifest.json +5 -0
- package/{get-shit-done → gsd-core}/references/artifact-types.md +1 -1
- package/{get-shit-done → gsd-core}/references/few-shot-examples/plan-checker.md +2 -2
- package/{get-shit-done → gsd-core}/references/few-shot-examples/verifier.md +12 -12
- package/{get-shit-done → gsd-core}/references/model-profile-resolution.md +1 -1
- package/{get-shit-done → gsd-core}/references/mvp-concepts.md +1 -1
- package/{get-shit-done → gsd-core}/references/planner-graphify-auto-update.md +2 -2
- package/{get-shit-done → gsd-core}/references/planner-mvp-mode.md +1 -1
- package/{get-shit-done → gsd-core}/references/verification-patterns.md +1 -1
- package/gsd-core/references/worktree-branch-check.md +38 -0
- package/{get-shit-done → gsd-core}/references/worktree-path-safety.md +4 -26
- package/{get-shit-done → gsd-core}/templates/README.md +2 -2
- package/{get-shit-done → gsd-core}/templates/codebase/structure.md +10 -10
- package/{get-shit-done → gsd-core}/templates/copilot-instructions.md +1 -1
- package/{get-shit-done → gsd-core}/templates/phase-prompt.md +10 -10
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/{get-shit-done → gsd-core}/workflows/add-backlog.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-tests.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-todo.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ai-integration-phase.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/audit-fix.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/audit-milestone.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/audit-uat.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/autonomous.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/check-todos.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/cleanup.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/code-review-fix.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/code-review.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/complete-milestone.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/debug.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/diagnose-issues.md +4 -2
- package/{get-shit-done → gsd-core}/workflows/discovery-phase.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/advisor.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/auto.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/chain.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/power.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase-assumptions.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/discuss-phase.md +6 -6
- package/{get-shit-done → gsd-core}/workflows/do.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/docs-update.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/edit-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/eval-review.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/codebase-drift-gate.md +15 -2
- package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/post-merge-gate.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/execute-phase.md +68 -46
- package/{get-shit-done → gsd-core}/workflows/execute-plan.md +8 -8
- package/{get-shit-done → gsd-core}/workflows/explore.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/extract-learnings.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/forensics.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/graduation.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/health.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/help/modes/full.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/import.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ingest-docs.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/insert-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/list-workspaces.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/manager.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/map-codebase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/milestone-summary.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/mvp-phase.md +7 -7
- package/{get-shit-done → gsd-core}/workflows/new-milestone.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/new-project.md +6 -6
- package/{get-shit-done → gsd-core}/workflows/new-workspace.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/next.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/pause-work.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/plan-milestone-gaps.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/plan-phase.md +15 -15
- package/{get-shit-done → gsd-core}/workflows/plan-review-convergence.md +7 -7
- package/{get-shit-done → gsd-core}/workflows/plant-seed.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/profile-user.md +11 -11
- package/{get-shit-done → gsd-core}/workflows/progress.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/quick.md +2 -26
- package/{get-shit-done → gsd-core}/workflows/reapply-patches.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/remove-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/remove-workspace.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/resume-project.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/review.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/scan.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/secure-phase.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/settings-advanced.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/settings-integrations.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/settings.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ship.md +56 -4
- package/{get-shit-done → gsd-core}/workflows/sketch-wrap-up.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/sketch.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/spec-phase.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/spike-wrap-up.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/spike.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/stats.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/sync-skills.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/thread.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/transition.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/ui-phase.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/ui-review.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/ultraplan-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/undo.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/update.md +41 -16
- package/{get-shit-done → gsd-core}/workflows/validate-phase.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/verify-phase.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/verify-work.md +5 -5
- package/hooks/dist/gsd-check-update-worker.js +16 -3
- package/hooks/dist/gsd-check-update.js +7 -5
- package/hooks/dist/gsd-context-monitor.js +2 -2
- package/hooks/dist/gsd-statusline.js +39 -21
- package/hooks/dist/gsd-update-banner.js +6 -2
- package/hooks/dist/managed-hooks-registry.cjs +35 -0
- package/hooks/gsd-check-update-worker.js +16 -3
- package/hooks/gsd-check-update.js +7 -5
- package/hooks/gsd-context-monitor.js +2 -2
- package/hooks/gsd-statusline.js +39 -21
- package/hooks/gsd-update-banner.js +6 -2
- package/package.json +9 -6
- package/scripts/affected-tests-lib.cjs +1 -1
- package/scripts/base64-scan.sh +12 -0
- package/scripts/build-hooks.js +4 -1
- package/scripts/changeset/cli.cjs +2 -2
- package/scripts/changeset/github-release-notes.cjs +1 -1
- package/scripts/changeset/lint.cjs +1 -1
- package/scripts/check-alias-drift.cjs +8 -8
- package/scripts/check-env.cjs +5 -1
- package/scripts/ci-test-scope.cjs +25 -10
- package/scripts/command-contract-helpers.cjs +1 -1
- package/scripts/fix-slash-commands.cjs +5 -5
- package/scripts/gen-inventory-manifest.cjs +3 -3
- package/scripts/generate-package-identity.cjs +28 -7
- package/scripts/lib/allowlist-ratchet.cjs +136 -0
- package/scripts/lint-command-contract.cjs +1 -1
- package/scripts/lint-legacy-dir-name.cjs +156 -0
- package/scripts/lint-package-identity-drift.cjs +8 -8
- package/scripts/lint-pr-check-project-dir.cjs +0 -1
- package/scripts/lint-shell-command-projection-drift.cjs +1 -1
- package/scripts/lint-skill-deps.cjs +1 -1
- package/scripts/lint-test-file-count.allowlist.json +129 -32
- package/scripts/lint-test-file-count.cjs +85 -30
- package/scripts/mutation-matrix.cjs +219 -0
- package/scripts/prompt-injection-scan.sh +5 -1
- package/scripts/release-notes/format-github-release-notes.cjs +256 -0
- package/scripts/release-tarball-smoke.cjs +9 -9
- package/scripts/run-tests.cjs +11 -3
- package/scripts/strip-prose-atrefs.cjs +2 -2
- package/scripts/sync-runtime-launcher.cjs +2 -2
- package/scripts/verify-npm-publish.cjs +252 -0
- package/get-shit-done/bin/lib/active-workstream-store.cjs +0 -302
- package/get-shit-done/bin/lib/adr-parser.cjs +0 -394
- package/get-shit-done/bin/lib/agent-command-router.cjs +0 -65
- package/get-shit-done/bin/lib/artifacts.cjs +0 -53
- package/get-shit-done/bin/lib/audit.cjs +0 -755
- package/get-shit-done/bin/lib/check-command-router.cjs +0 -333
- package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +0 -118
- package/get-shit-done/bin/lib/clock.cjs +0 -96
- package/get-shit-done/bin/lib/clusters.cjs +0 -135
- package/get-shit-done/bin/lib/code-review-flags.cjs +0 -74
- package/get-shit-done/bin/lib/command-aliases.cjs +0 -831
- package/get-shit-done/bin/lib/command-arg-projection.cjs +0 -62
- package/get-shit-done/bin/lib/command-routing-hub.cjs +0 -388
- package/get-shit-done/bin/lib/commands.cjs +0 -1292
- package/get-shit-done/bin/lib/config-schema.cjs +0 -31
- package/get-shit-done/bin/lib/config.cjs +0 -728
- package/get-shit-done/bin/lib/context-utilization.cjs +0 -47
- package/get-shit-done/bin/lib/core.cjs +0 -2513
- package/get-shit-done/bin/lib/docs.cjs +0 -270
- package/get-shit-done/bin/lib/drift.cjs +0 -388
- package/get-shit-done/bin/lib/fallow-runner.cjs +0 -109
- package/get-shit-done/bin/lib/frontmatter.cjs +0 -389
- package/get-shit-done/bin/lib/gap-checker.cjs +0 -254
- package/get-shit-done/bin/lib/graphify.cjs +0 -592
- package/get-shit-done/bin/lib/gsd2-import.cjs +0 -514
- package/get-shit-done/bin/lib/init-command-router.cjs +0 -58
- package/get-shit-done/bin/lib/init.cjs +0 -2112
- package/get-shit-done/bin/lib/install-profiles.cjs +0 -603
- package/get-shit-done/bin/lib/installer-migration-authoring.cjs +0 -117
- package/get-shit-done/bin/lib/installer-migration-report.cjs +0 -355
- package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +0 -220
- package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +0 -41
- package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +0 -80
- package/get-shit-done/bin/lib/installer-migrations.cjs +0 -778
- package/get-shit-done/bin/lib/intel.cjs +0 -708
- package/get-shit-done/bin/lib/learnings.cjs +0 -421
- package/get-shit-done/bin/lib/milestone.cjs +0 -372
- package/get-shit-done/bin/lib/model-catalog.cjs +0 -229
- package/get-shit-done/bin/lib/model-profiles.cjs +0 -31
- package/get-shit-done/bin/lib/observability/event.cjs +0 -82
- package/get-shit-done/bin/lib/observability/logger.cjs +0 -174
- package/get-shit-done/bin/lib/phase-command-router.cjs +0 -191
- package/get-shit-done/bin/lib/phase-lifecycle.cjs +0 -79
- package/get-shit-done/bin/lib/phase.cjs +0 -1607
- package/get-shit-done/bin/lib/phases-command-router.cjs +0 -39
- package/get-shit-done/bin/lib/planning-workspace.cjs +0 -238
- package/get-shit-done/bin/lib/profile-output.cjs +0 -1141
- package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
- package/get-shit-done/bin/lib/project-root.cjs +0 -112
- package/get-shit-done/bin/lib/prompt-budget.cjs +0 -399
- package/get-shit-done/bin/lib/review-reviewer-selection.cjs +0 -126
- package/get-shit-done/bin/lib/roadmap-command-router.cjs +0 -162
- package/get-shit-done/bin/lib/roadmap-upgrade.cjs +0 -569
- package/get-shit-done/bin/lib/roadmap.cjs +0 -651
- package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +0 -301
- package/get-shit-done/bin/lib/runtime-homes.cjs +0 -222
- package/get-shit-done/bin/lib/runtime-name-policy.cjs +0 -83
- package/get-shit-done/bin/lib/runtime-slash.cjs +0 -112
- package/get-shit-done/bin/lib/secrets.cjs +0 -32
- package/get-shit-done/bin/lib/security.cjs +0 -600
- package/get-shit-done/bin/lib/shell-command-projection.cjs +0 -535
- package/get-shit-done/bin/lib/state-command-router.cjs +0 -252
- package/get-shit-done/bin/lib/state.cjs +0 -2073
- package/get-shit-done/bin/lib/surface.cjs +0 -470
- package/get-shit-done/bin/lib/task-command-router.cjs +0 -81
- package/get-shit-done/bin/lib/template.cjs +0 -228
- package/get-shit-done/bin/lib/uat.cjs +0 -289
- package/get-shit-done/bin/lib/ui-safety-gate.cjs +0 -111
- package/get-shit-done/bin/lib/update-context.cjs +0 -209
- package/get-shit-done/bin/lib/validate-command-router.cjs +0 -83
- package/get-shit-done/bin/lib/validate.cjs +0 -118
- package/get-shit-done/bin/lib/verify-command-router.cjs +0 -40
- package/get-shit-done/bin/lib/verify.cjs +0 -1614
- package/get-shit-done/bin/lib/workstream-inventory.cjs +0 -146
- package/get-shit-done/bin/lib/workstream.cjs +0 -389
- package/get-shit-done/bin/lib/worktree-safety.cjs +0 -985
- package/get-shit-done/workflows/_runtime-launcher.snippet.sh +0 -1
- package/scripts/lint-no-source-grep-extras.cjs +0 -81
- package/scripts/lint-no-source-grep.cjs +0 -174
- /package/{get-shit-done → gsd-core}/bin/shared/config-defaults.manifest.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/shared/model-catalog.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/shared/runtime-aliases.manifest.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/verify-reapply-patches.cjs +0 -0
- /package/{get-shit-done → gsd-core}/contexts/dev.md +0 -0
- /package/{get-shit-done → gsd-core}/contexts/research.md +0 -0
- /package/{get-shit-done → gsd-core}/contexts/review.md +0 -0
- /package/{get-shit-done → gsd-core}/references/agent-contracts.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ai-evals.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ai-frameworks.md +0 -0
- /package/{get-shit-done → gsd-core}/references/autonomous-smart-discuss.md +0 -0
- /package/{get-shit-done → gsd-core}/references/checkpoints.md +0 -0
- /package/{get-shit-done → gsd-core}/references/common-bug-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/context-budget.md +0 -0
- /package/{get-shit-done → gsd-core}/references/continuation-format.md +0 -0
- /package/{get-shit-done → gsd-core}/references/debugger-philosophy.md +0 -0
- /package/{get-shit-done → gsd-core}/references/decimal-phase-calculation.md +0 -0
- /package/{get-shit-done → gsd-core}/references/doc-conflict-engine.md +0 -0
- /package/{get-shit-done → gsd-core}/references/domain-probes.md +0 -0
- /package/{get-shit-done → gsd-core}/references/execute-mvp-tdd.md +0 -0
- /package/{get-shit-done → gsd-core}/references/executor-examples.md +0 -0
- /package/{get-shit-done → gsd-core}/references/gate-prompts.md +0 -0
- /package/{get-shit-done → gsd-core}/references/gates.md +0 -0
- /package/{get-shit-done → gsd-core}/references/git-integration.md +0 -0
- /package/{get-shit-done → gsd-core}/references/git-planning-commit.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ios-scaffold.md +0 -0
- /package/{get-shit-done → gsd-core}/references/mandatory-initial-read.md +0 -0
- /package/{get-shit-done → gsd-core}/references/model-profiles.md +0 -0
- /package/{get-shit-done → gsd-core}/references/phase-argument-parsing.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-antipatterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-chunked.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-gap-closure.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-human-verify-mode.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-interface-context.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-reviews.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-revision.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-source-audit.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planning-config.md +0 -0
- /package/{get-shit-done → gsd-core}/references/project-skills-discovery.md +0 -0
- /package/{get-shit-done → gsd-core}/references/questioning.md +0 -0
- /package/{get-shit-done → gsd-core}/references/revision-loop.md +0 -0
- /package/{get-shit-done → gsd-core}/references/scout-codebase.md +0 -0
- /package/{get-shit-done → gsd-core}/references/skeleton-template.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-interactivity.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-theme-system.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-tooling.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-variant-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/spidr-splitting.md +0 -0
- /package/{get-shit-done → gsd-core}/references/tdd.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-debug.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-execution.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-planning.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-research.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-verification.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-partner.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ui-brand.md +0 -0
- /package/{get-shit-done → gsd-core}/references/universal-anti-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/user-profiling.md +0 -0
- /package/{get-shit-done → gsd-core}/references/user-story-template.md +0 -0
- /package/{get-shit-done → gsd-core}/references/verification-overrides.md +0 -0
- /package/{get-shit-done → gsd-core}/references/verify-mvp-mode.md +0 -0
- /package/{get-shit-done → gsd-core}/references/workstream-flag.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/AI-SPEC.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/DEBUG.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/SECURITY.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/UAT.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/UI-SPEC.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/VALIDATION.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/claude-md.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/architecture.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/concerns.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/conventions.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/integrations.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/stack.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/testing.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/config.json +0 -0
- /package/{get-shit-done → gsd-core}/templates/context.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/continue-here.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/debug-subagent-prompt.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/dev-preferences.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/discovery.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/discussion-log.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/milestone-archive.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/milestone.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/planner-subagent-prompt.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/project.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/requirements.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/ARCHITECTURE.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/FEATURES.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/PITFALLS.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/STACK.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/SUMMARY.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/retrospective.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/roadmap.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/spec.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/state.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-complex.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-minimal.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-standard.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/user-profile.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/user-setup.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/verification-report.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/analyze-dependencies.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/all.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/analyze.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/batch.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/default.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/text.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/checkpoint.json +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/context.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/discussion-log.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase-power.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/fast.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/brief.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/default.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/topic.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/inbox.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/list-phase-assumptions.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/node-repair.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/note.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/pr-branch.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/session-report.md +0 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const { execFileSync } = require('child_process');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Classify a What's-Changed bullet line into 'Feature', 'Fix', or 'Enhancement'.
|
|
10
|
+
* @param {string} bulletLine - Full bullet line including the leading `* ` or `- ` marker.
|
|
11
|
+
* @returns {'Feature'|'Fix'|'Enhancement'}
|
|
12
|
+
*/
|
|
13
|
+
function classifyTitle(bulletLine) {
|
|
14
|
+
// Strip leading `* ` or `- ` marker
|
|
15
|
+
const withoutMarker = bulletLine.replace(/^[*-]\s+/, '');
|
|
16
|
+
|
|
17
|
+
// Extract title = text before ` by @`
|
|
18
|
+
const byIdx = withoutMarker.indexOf(' by @');
|
|
19
|
+
const title = (byIdx !== -1 ? withoutMarker.slice(0, byIdx) : withoutMarker).trim();
|
|
20
|
+
|
|
21
|
+
if (/^feat(?:ure)?\s*(?:\(|!|:)/i.test(title)) return 'Feature';
|
|
22
|
+
if (/^fix\s*(?:\(|!|:)/i.test(title)) return 'Fix';
|
|
23
|
+
return 'Enhancement';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Reformat GitHub's auto-generated release notes into the repo's hand-curated format.
|
|
28
|
+
*
|
|
29
|
+
* @param {object} opts
|
|
30
|
+
* @param {string} opts.generatedBody - The raw GitHub-generated release body.
|
|
31
|
+
* @param {string} opts.version - Version string (e.g. "1.3.0-rc.1"), no leading "v".
|
|
32
|
+
* @param {boolean} opts.prerelease - Whether this is a pre-release.
|
|
33
|
+
* @param {string} opts.packageName - npm package name (e.g. "@opengsd/gsd-core").
|
|
34
|
+
* @returns {string} Formatted release body (no trailing newline).
|
|
35
|
+
*/
|
|
36
|
+
function formatReleaseNotes({ generatedBody, version, prerelease, packageName }) {
|
|
37
|
+
const lines = generatedBody.split('\n');
|
|
38
|
+
|
|
39
|
+
const featureBullets = [];
|
|
40
|
+
const fixBullets = [];
|
|
41
|
+
const enhancementBullets = [];
|
|
42
|
+
const newContributorBullets = [];
|
|
43
|
+
let fullChangelogLine = null;
|
|
44
|
+
|
|
45
|
+
let inWhatsChanged = false;
|
|
46
|
+
let inNewContributors = false;
|
|
47
|
+
|
|
48
|
+
for (const line of lines) {
|
|
49
|
+
const trimmed = line.trim();
|
|
50
|
+
|
|
51
|
+
// Detect section headings
|
|
52
|
+
if (trimmed === '## What\'s Changed') {
|
|
53
|
+
inWhatsChanged = true;
|
|
54
|
+
inNewContributors = false;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (trimmed === '## New Contributors') {
|
|
59
|
+
inWhatsChanged = false;
|
|
60
|
+
inNewContributors = true;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Full changelog line ends the What's Changed section
|
|
65
|
+
if (trimmed.startsWith('**Full Changelog**:')) {
|
|
66
|
+
inWhatsChanged = false;
|
|
67
|
+
inNewContributors = false;
|
|
68
|
+
fullChangelogLine = trimmed;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Any other `##` heading ends current section
|
|
73
|
+
if (trimmed.startsWith('## ')) {
|
|
74
|
+
inWhatsChanged = false;
|
|
75
|
+
inNewContributors = false;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Collect bullets
|
|
80
|
+
if (inWhatsChanged && (trimmed.startsWith('* ') || trimmed.startsWith('- '))) {
|
|
81
|
+
const category = classifyTitle(trimmed);
|
|
82
|
+
if (category === 'Feature') featureBullets.push(trimmed);
|
|
83
|
+
else if (category === 'Fix') fixBullets.push(trimmed);
|
|
84
|
+
else enhancementBullets.push(trimmed);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (inNewContributors && (trimmed.startsWith('* ') || trimmed.startsWith('- '))) {
|
|
89
|
+
newContributorBullets.push(trimmed);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Build Install block
|
|
95
|
+
let installBlock;
|
|
96
|
+
if (prerelease) {
|
|
97
|
+
installBlock = [
|
|
98
|
+
'## Install',
|
|
99
|
+
'',
|
|
100
|
+
'This pre-release is published to npm under the `next` dist-tag.',
|
|
101
|
+
'',
|
|
102
|
+
'```bash',
|
|
103
|
+
`npm i ${packageName}@${version}`,
|
|
104
|
+
'# or',
|
|
105
|
+
`npm i ${packageName}@next`,
|
|
106
|
+
'```',
|
|
107
|
+
].join('\n');
|
|
108
|
+
} else {
|
|
109
|
+
installBlock = [
|
|
110
|
+
'## Install',
|
|
111
|
+
'',
|
|
112
|
+
'```bash',
|
|
113
|
+
`npm i ${packageName}@${version}`,
|
|
114
|
+
'# or',
|
|
115
|
+
`npm i ${packageName}@latest`,
|
|
116
|
+
'```',
|
|
117
|
+
].join('\n');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Assemble groups (omit empty ones)
|
|
121
|
+
const groups = [];
|
|
122
|
+
|
|
123
|
+
// Group A: Install
|
|
124
|
+
groups.push(installBlock);
|
|
125
|
+
|
|
126
|
+
// Group B: What's Changed heading
|
|
127
|
+
groups.push('## What\'s Changed');
|
|
128
|
+
|
|
129
|
+
// Group C: Features
|
|
130
|
+
if (featureBullets.length > 0) {
|
|
131
|
+
groups.push('### Feature\n' + featureBullets.join('\n'));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Group D: Enhancements
|
|
135
|
+
if (enhancementBullets.length > 0) {
|
|
136
|
+
groups.push('### Enhancement\n' + enhancementBullets.join('\n'));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Group E: Fixes
|
|
140
|
+
if (fixBullets.length > 0) {
|
|
141
|
+
groups.push('### Fix\n' + fixBullets.join('\n'));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Group F: New Contributors
|
|
145
|
+
if (newContributorBullets.length > 0) {
|
|
146
|
+
groups.push('## New Contributors\n' + newContributorBullets.join('\n'));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Group G: Full Changelog
|
|
150
|
+
if (fullChangelogLine) {
|
|
151
|
+
groups.push(fullChangelogLine);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return groups.join('\n\n');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// CLI entry point
|
|
158
|
+
if (require.main === module) {
|
|
159
|
+
try {
|
|
160
|
+
const argv = process.argv.slice(2);
|
|
161
|
+
|
|
162
|
+
let tag = null;
|
|
163
|
+
let repo = null;
|
|
164
|
+
let packageName = null;
|
|
165
|
+
let prerelease = null;
|
|
166
|
+
let useStdin = false;
|
|
167
|
+
let doApply = false;
|
|
168
|
+
|
|
169
|
+
for (let i = 0; i < argv.length; i++) {
|
|
170
|
+
const arg = argv[i];
|
|
171
|
+
if (arg === '--tag') {
|
|
172
|
+
tag = argv[++i];
|
|
173
|
+
} else if (arg === '--repo') {
|
|
174
|
+
repo = argv[++i];
|
|
175
|
+
} else if (arg === '--package') {
|
|
176
|
+
packageName = argv[++i];
|
|
177
|
+
} else if (arg === '--prerelease') {
|
|
178
|
+
prerelease = true;
|
|
179
|
+
} else if (arg === '--latest') {
|
|
180
|
+
prerelease = false;
|
|
181
|
+
} else if (arg === '--stdin') {
|
|
182
|
+
useStdin = true;
|
|
183
|
+
} else if (arg === '--apply') {
|
|
184
|
+
doApply = true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Derive version from tag
|
|
189
|
+
const version = tag ? tag.replace(/^v/, '') : null;
|
|
190
|
+
|
|
191
|
+
// Resolve package name if not provided
|
|
192
|
+
if (!packageName) {
|
|
193
|
+
const repoRoot = path.resolve(__dirname, '..', '..');
|
|
194
|
+
const pkgJson = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf8'));
|
|
195
|
+
packageName = pkgJson.name;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
let generatedBody;
|
|
199
|
+
|
|
200
|
+
if (useStdin) {
|
|
201
|
+
// Read from stdin
|
|
202
|
+
if (!version) {
|
|
203
|
+
throw new Error('--stdin mode requires --tag or --version to derive version');
|
|
204
|
+
}
|
|
205
|
+
if (prerelease === null) {
|
|
206
|
+
throw new Error('--stdin mode requires --prerelease or --latest');
|
|
207
|
+
}
|
|
208
|
+
generatedBody = fs.readFileSync('/dev/stdin', 'utf8');
|
|
209
|
+
} else {
|
|
210
|
+
// Fetch from gh
|
|
211
|
+
if (!tag) {
|
|
212
|
+
throw new Error('--tag <tag> is required');
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const ghArgs = ['release', 'view', tag, '--json', 'body', '-q', '.body'];
|
|
216
|
+
if (repo) ghArgs.push('--repo', repo);
|
|
217
|
+
|
|
218
|
+
generatedBody = execFileSync('gh', ghArgs, { encoding: 'utf8' });
|
|
219
|
+
|
|
220
|
+
// Determine prerelease if not forced
|
|
221
|
+
if (prerelease === null) {
|
|
222
|
+
try {
|
|
223
|
+
const ghPreArgs = ['release', 'view', tag, '--json', 'isPrerelease', '-q', '.isPrerelease'];
|
|
224
|
+
if (repo) ghPreArgs.push('--repo', repo);
|
|
225
|
+
const result = execFileSync('gh', ghPreArgs, { encoding: 'utf8' }).trim();
|
|
226
|
+
prerelease = result === 'true';
|
|
227
|
+
} catch (_e) {
|
|
228
|
+
// Final fallback: check if tag contains `-` after version digits
|
|
229
|
+
prerelease = /-/.test(version);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const formatted = formatReleaseNotes({ generatedBody, version, prerelease, packageName });
|
|
235
|
+
|
|
236
|
+
if (doApply) {
|
|
237
|
+
const tmpFile = path.join(os.tmpdir(), `release-notes-${Date.now()}.md`);
|
|
238
|
+
fs.writeFileSync(tmpFile, formatted, 'utf8');
|
|
239
|
+
try {
|
|
240
|
+
const ghArgs = ['release', 'edit', tag, '--notes-file', tmpFile];
|
|
241
|
+
if (repo) ghArgs.push('--repo', repo);
|
|
242
|
+
execFileSync('gh', ghArgs, { encoding: 'utf8' });
|
|
243
|
+
process.stderr.write(`Release notes updated for ${tag}\n`);
|
|
244
|
+
} finally {
|
|
245
|
+
fs.unlinkSync(tmpFile);
|
|
246
|
+
}
|
|
247
|
+
} else {
|
|
248
|
+
process.stdout.write(formatted + '\n');
|
|
249
|
+
}
|
|
250
|
+
} catch (err) {
|
|
251
|
+
process.stderr.write((err.message || String(err)) + '\n');
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
module.exports = { formatReleaseNotes, classifyTitle };
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* Non-interactive: --local --claude flags skip all prompts.
|
|
34
34
|
*
|
|
35
35
|
* Workflow-body checks (Cycle 3 — informational):
|
|
36
|
-
* - Scans all installed
|
|
36
|
+
* - Scans all installed gsd-core/workflows/*.md for /gsd:<known-cmd>
|
|
37
37
|
* colon-namespace leaks (WORKFLOW_BODY_COLON_LEAK).
|
|
38
38
|
* This check populates result.details with counters but does NOT return a
|
|
39
39
|
* failure code by default; it is informational until enforcement is enabled.
|
|
@@ -45,7 +45,7 @@ const { execFileSync, spawnSync } = require('child_process');
|
|
|
45
45
|
const fs = require('fs');
|
|
46
46
|
const os = require('os');
|
|
47
47
|
const path = require('path');
|
|
48
|
-
const { PACKAGE_NAME } = require('../
|
|
48
|
+
const { PACKAGE_NAME } = require('../gsd-core/bin/lib/package-identity.cjs');
|
|
49
49
|
// 120 s proved too tight on Windows GitHub-hosted runners: cold-cache
|
|
50
50
|
// `npm install -g` with a 1499-file tarball took ~120 s exactly, causing
|
|
51
51
|
// spawnSync to fire SIGTERM and return { status: null, stdout: '', stderr: '' }
|
|
@@ -182,15 +182,15 @@ function findInstallerBin(installPrefix) {
|
|
|
182
182
|
* Structured parser — only inspects individual lines; never regexes on the
|
|
183
183
|
* whole-file string. Two recognised forms (in priority order):
|
|
184
184
|
*
|
|
185
|
-
* 1. @-import line: `@~/.claude/
|
|
186
|
-
* 2. Inline mention: any line containing `~/.claude/
|
|
185
|
+
* 1. @-import line: `@~/.claude/gsd-core/workflows/<name>.md`
|
|
186
|
+
* 2. Inline mention: any line containing `~/.claude/gsd-core/workflows/<name>.md`
|
|
187
187
|
* (takes the LAST occurrence so conditional-dispatch files resolve to the
|
|
188
188
|
* default / unconditional branch, e.g. discuss-phase.md)
|
|
189
189
|
*
|
|
190
190
|
* Returns the bare workflow filename (e.g. `"discuss-phase.md"`) or null.
|
|
191
191
|
*/
|
|
192
192
|
function parseWorkflowRef(mdContent) {
|
|
193
|
-
const WORKFLOW_PREFIX = '
|
|
193
|
+
const WORKFLOW_PREFIX = 'gsd-core/workflows/';
|
|
194
194
|
let atImportResult = null;
|
|
195
195
|
let lastInlineResult = null;
|
|
196
196
|
|
|
@@ -433,7 +433,7 @@ function runSmoke({
|
|
|
433
433
|
// Verify expected dirs were created
|
|
434
434
|
const expectedDirs = [
|
|
435
435
|
path.join(fixtureDir, '.claude', 'commands'),
|
|
436
|
-
path.join(fixtureDir, '.claude', '
|
|
436
|
+
path.join(fixtureDir, '.claude', 'gsd-core'),
|
|
437
437
|
];
|
|
438
438
|
for (const dir of expectedDirs) {
|
|
439
439
|
if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
|
|
@@ -472,9 +472,9 @@ function runSmoke({
|
|
|
472
472
|
|
|
473
473
|
let workflowPath = null;
|
|
474
474
|
if (workflowName) {
|
|
475
|
-
// Workflow files live at
|
|
475
|
+
// Workflow files live at gsd-core/workflows/<name> in the package.
|
|
476
476
|
// Some live in subdirectories; try flat first then scan once.
|
|
477
|
-
const flat = path.join(pkg, '
|
|
477
|
+
const flat = path.join(pkg, 'gsd-core', 'workflows', workflowName);
|
|
478
478
|
workflowPath = fs.existsSync(flat) ? flat : null;
|
|
479
479
|
|
|
480
480
|
if (!workflowPath) {
|
|
@@ -503,7 +503,7 @@ function runSmoke({
|
|
|
503
503
|
// ─────────────────────────────────────────────────────────────────────────
|
|
504
504
|
|
|
505
505
|
// --- Workflow-body checks (informational — #3668 not yet fixed) ----------
|
|
506
|
-
const workflowsDir = path.join(pkg, '
|
|
506
|
+
const workflowsDir = path.join(pkg, 'gsd-core', 'workflows');
|
|
507
507
|
const installedCmdNames = readInstalledCmdNames(pkg);
|
|
508
508
|
|
|
509
509
|
let workflowsScanned = 0;
|
package/scripts/run-tests.cjs
CHANGED
|
@@ -26,7 +26,7 @@ const { execFileSync } = require('child_process');
|
|
|
26
26
|
|
|
27
27
|
const SUITES = ['all', 'unit', 'integration', 'install', 'security', 'slow'];
|
|
28
28
|
|
|
29
|
-
// ADR-457 build-at-publish:
|
|
29
|
+
// ADR-457 build-at-publish: gsd-core/bin/lib/*.cjs is generated from
|
|
30
30
|
// src/*.cts and gitignored, so on a clean checkout (fresh CI, before any build)
|
|
31
31
|
// the artifact is absent — yet test files require it. This is the universal
|
|
32
32
|
// chokepoint every test path funnels through (test:unit, --files-from, direct
|
|
@@ -38,7 +38,7 @@ const SUITES = ['all', 'unit', 'integration', 'install', 'security', 'slow'];
|
|
|
38
38
|
// modules migrate into src/.
|
|
39
39
|
function ensureBuiltArtifacts() {
|
|
40
40
|
const root = join(__dirname, '..');
|
|
41
|
-
const sentinel = join(root, '
|
|
41
|
+
const sentinel = join(root, 'gsd-core', 'bin', 'lib', 'semver-compare.cjs');
|
|
42
42
|
if (existsSync(sentinel)) return;
|
|
43
43
|
const tscBin = require.resolve('typescript/bin/tsc');
|
|
44
44
|
execFileSync(process.execPath, [tscBin, '-p', join(root, 'tsconfig.build.json')], {
|
|
@@ -161,7 +161,15 @@ function selectExplicitFiles(allFiles, filesValue, filesFrom) {
|
|
|
161
161
|
const selected = [];
|
|
162
162
|
const missing = [];
|
|
163
163
|
for (const file of requested) {
|
|
164
|
-
|
|
164
|
+
// If the token is a bare suite name (e.g. "unit" written by ci-test-scope
|
|
165
|
+
// as the #408 fallback sentinel), delegate to the existing suite resolver
|
|
166
|
+
// rather than treating it as a filename. This prevents the
|
|
167
|
+
// "requested test file(s) not found: unit" crash (#641).
|
|
168
|
+
if (SUITES.includes(file)) {
|
|
169
|
+
for (const f of selectFiles(allFiles, file)) {
|
|
170
|
+
selected.push(f);
|
|
171
|
+
}
|
|
172
|
+
} else if (available.has(file)) {
|
|
165
173
|
selected.push(file);
|
|
166
174
|
} else {
|
|
167
175
|
missing.push(file);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* strip-prose-atrefs.cjs
|
|
4
4
|
*
|
|
5
|
-
* Removes redundant @~/.claude/
|
|
5
|
+
* Removes redundant @~/.claude/gsd-core/ path tokens from prose lines
|
|
6
6
|
* in <process> and <context> blocks. The path is already declared in
|
|
7
7
|
* <execution_context> where it actually loads the file. Prose copies are
|
|
8
8
|
* inert and add ~900 tokens/invocation of dead weight.
|
|
@@ -30,7 +30,7 @@ const DRY_RUN = process.argv.includes('--dry-run');
|
|
|
30
30
|
const ROOT = path.join(__dirname, '..');
|
|
31
31
|
const COMMANDS_DIR = path.join(ROOT, 'commands', 'gsd');
|
|
32
32
|
|
|
33
|
-
const AT_PATH_PATTERN = /@(?:~|\$HOME)\/.+?
|
|
33
|
+
const AT_PATH_PATTERN = /@(?:~|\$HOME)\/.+?gsd-core\/[^\s`\)]+/;
|
|
34
34
|
const mkAtRe = () => new RegExp(AT_PATH_PATTERN.source, 'g');
|
|
35
35
|
|
|
36
36
|
function transformLine(line) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* sync-runtime-launcher.cjs
|
|
4
4
|
*
|
|
5
|
-
* Idempotent transform: for every
|
|
5
|
+
* Idempotent transform: for every gsd-core/workflows/*.md (and subdirs),
|
|
6
6
|
* rewrite all bash/sh/shell fenced blocks to:
|
|
7
7
|
* 1. Strip ALL old resolver forms from every bash block (GSD_TOOLS=,
|
|
8
8
|
* GSD_SDK=, the if/elif/else/fi resolver, _GSD_SHIM_NAME=, and any
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
const fs = require('node:fs');
|
|
20
20
|
const path = require('node:path');
|
|
21
21
|
|
|
22
|
-
const WORKFLOWS_DIR = path.join(__dirname, '..', '
|
|
22
|
+
const WORKFLOWS_DIR = path.join(__dirname, '..', 'gsd-core', 'workflows');
|
|
23
23
|
const SNIPPET_FILE = path.join(WORKFLOWS_DIR, '_runtime-launcher.snippet.sh');
|
|
24
24
|
|
|
25
25
|
// Read canonical preamble (full content of snippet file)
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* verify-npm-publish.cjs — verifies a freshly-published npm version is
|
|
6
|
+
* retrievable, tolerating registry/CDN propagation lag via bounded retry.
|
|
7
|
+
* Fixes #623. Used by both Verify-publish steps in .github/workflows/release.yml.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const cp = require('node:child_process');
|
|
11
|
+
|
|
12
|
+
// ---- Constants ---------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
const REASON = Object.freeze({
|
|
15
|
+
OK_VERSION_LIVE: 'ok_version_live',
|
|
16
|
+
FAIL_VERSION_NOT_FOUND: 'fail_version_not_found',
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// ---- Sleep -------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
22
|
+
|
|
23
|
+
// ---- npm fetchers ------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
function defaultFetchVersion(pkg, version) {
|
|
26
|
+
try {
|
|
27
|
+
const out = cp.execFileSync('npm', ['view', `${pkg}@${version}`, 'version'],
|
|
28
|
+
{ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
29
|
+
return out || null;
|
|
30
|
+
} catch { return null; }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function defaultFetchDistTag(pkg, distTag) {
|
|
34
|
+
try {
|
|
35
|
+
const out = cp.execFileSync('npm', ['view', pkg, 'dist-tags', '--json'],
|
|
36
|
+
{ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
|
|
37
|
+
const tags = JSON.parse(out);
|
|
38
|
+
return (tags && typeof tags === 'object' && tags[distTag]) || null;
|
|
39
|
+
} catch { return null; }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ---- Core async function (unit-tested seam) ----------------------------------
|
|
43
|
+
|
|
44
|
+
async function verifyPublish({
|
|
45
|
+
pkg,
|
|
46
|
+
version,
|
|
47
|
+
distTag = null,
|
|
48
|
+
fetchVersion = defaultFetchVersion,
|
|
49
|
+
fetchDistTag = defaultFetchDistTag,
|
|
50
|
+
maxAttempts = 20,
|
|
51
|
+
intervalMs = 5000,
|
|
52
|
+
sleep = defaultSleep,
|
|
53
|
+
}) {
|
|
54
|
+
let attempts = 0;
|
|
55
|
+
|
|
56
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
57
|
+
const found = fetchVersion(pkg, version);
|
|
58
|
+
attempts++;
|
|
59
|
+
|
|
60
|
+
if (found === version) {
|
|
61
|
+
// Version confirmed live — optionally resolve dist-tag informally
|
|
62
|
+
let distTagResult = null;
|
|
63
|
+
|
|
64
|
+
if (distTag && typeof distTag === 'string' && distTag.length > 0) {
|
|
65
|
+
let pointsTo = null;
|
|
66
|
+
|
|
67
|
+
for (let dt = 1; dt <= maxAttempts; dt++) {
|
|
68
|
+
const tagVal = fetchDistTag(pkg, distTag);
|
|
69
|
+
if (tagVal !== null) {
|
|
70
|
+
pointsTo = tagVal;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
if (dt < maxAttempts) {
|
|
74
|
+
await sleep(intervalMs);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
distTagResult = {
|
|
79
|
+
name: distTag,
|
|
80
|
+
points_to: pointsTo,
|
|
81
|
+
matches: pointsTo === version,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
reason: REASON.OK_VERSION_LIVE,
|
|
88
|
+
pkg,
|
|
89
|
+
version,
|
|
90
|
+
attempts,
|
|
91
|
+
distTag: distTagResult,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Not found yet — sleep before retry (but not after the final attempt)
|
|
96
|
+
if (attempt < maxAttempts) {
|
|
97
|
+
await sleep(intervalMs);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
ok: false,
|
|
103
|
+
reason: REASON.FAIL_VERSION_NOT_FOUND,
|
|
104
|
+
pkg,
|
|
105
|
+
version,
|
|
106
|
+
attempts,
|
|
107
|
+
distTag: null,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ---- Argument parsing --------------------------------------------------------
|
|
112
|
+
|
|
113
|
+
function parseArgs(argv) {
|
|
114
|
+
const opts = {
|
|
115
|
+
pkg: null,
|
|
116
|
+
version: null,
|
|
117
|
+
distTag: null,
|
|
118
|
+
maxAttempts: 20,
|
|
119
|
+
intervalMs: 5000,
|
|
120
|
+
json: false,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const args = argv.slice();
|
|
124
|
+
while (args.length > 0) {
|
|
125
|
+
const arg = args.shift();
|
|
126
|
+
|
|
127
|
+
if (arg === '--help' || arg === '-h') {
|
|
128
|
+
process.stdout.write(
|
|
129
|
+
'Usage: node scripts/verify-npm-publish.cjs --package <pkg> --version <ver> [options]\n' +
|
|
130
|
+
'\n' +
|
|
131
|
+
'Options:\n' +
|
|
132
|
+
' --package <s> npm package name (required)\n' +
|
|
133
|
+
' --version <s> version to verify (required)\n' +
|
|
134
|
+
' --dist-tag <s> dist-tag to report (optional, informational only)\n' +
|
|
135
|
+
' --max-attempts <n> max retry attempts (default: 20)\n' +
|
|
136
|
+
' --interval-ms <n> ms between retries (default: 5000)\n' +
|
|
137
|
+
' --json emit structured JSON output\n' +
|
|
138
|
+
' --help, -h show this help\n'
|
|
139
|
+
);
|
|
140
|
+
process.exit(0);
|
|
141
|
+
} else if (arg === '--package') {
|
|
142
|
+
const val = args.shift();
|
|
143
|
+
if (!val || val.startsWith('-')) {
|
|
144
|
+
process.stderr.write('error: --package requires a value\n');
|
|
145
|
+
process.exit(2);
|
|
146
|
+
}
|
|
147
|
+
opts.pkg = val;
|
|
148
|
+
} else if (arg === '--version') {
|
|
149
|
+
const val = args.shift();
|
|
150
|
+
if (!val || val.startsWith('-')) {
|
|
151
|
+
process.stderr.write('error: --version requires a value\n');
|
|
152
|
+
process.exit(2);
|
|
153
|
+
}
|
|
154
|
+
opts.version = val;
|
|
155
|
+
} else if (arg === '--dist-tag') {
|
|
156
|
+
const val = args.shift();
|
|
157
|
+
if (!val || val.startsWith('-')) {
|
|
158
|
+
process.stderr.write('error: --dist-tag requires a value\n');
|
|
159
|
+
process.exit(2);
|
|
160
|
+
}
|
|
161
|
+
opts.distTag = val;
|
|
162
|
+
} else if (arg === '--max-attempts') {
|
|
163
|
+
const val = args.shift();
|
|
164
|
+
if (!val || val.startsWith('-')) {
|
|
165
|
+
process.stderr.write('error: --max-attempts requires a value\n');
|
|
166
|
+
process.exit(2);
|
|
167
|
+
}
|
|
168
|
+
const n = parseInt(val, 10);
|
|
169
|
+
if (isNaN(n) || n < 1) {
|
|
170
|
+
process.stderr.write('error: --max-attempts must be a positive integer\n');
|
|
171
|
+
process.exit(2);
|
|
172
|
+
}
|
|
173
|
+
opts.maxAttempts = n;
|
|
174
|
+
} else if (arg === '--interval-ms') {
|
|
175
|
+
const val = args.shift();
|
|
176
|
+
if (!val || val.startsWith('-')) {
|
|
177
|
+
process.stderr.write('error: --interval-ms requires a value\n');
|
|
178
|
+
process.exit(2);
|
|
179
|
+
}
|
|
180
|
+
const n = parseInt(val, 10);
|
|
181
|
+
if (isNaN(n) || n < 0) {
|
|
182
|
+
process.stderr.write('error: --interval-ms must be a non-negative integer\n');
|
|
183
|
+
process.exit(2);
|
|
184
|
+
}
|
|
185
|
+
opts.intervalMs = n;
|
|
186
|
+
} else if (arg === '--json') {
|
|
187
|
+
opts.json = true;
|
|
188
|
+
} else {
|
|
189
|
+
process.stderr.write(`unknown argument: ${arg}\n`);
|
|
190
|
+
process.exit(2);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (!opts.pkg) {
|
|
195
|
+
process.stderr.write('error: --package is required\n');
|
|
196
|
+
process.exit(2);
|
|
197
|
+
}
|
|
198
|
+
if (!opts.version) {
|
|
199
|
+
process.stderr.write('error: --version is required\n');
|
|
200
|
+
process.exit(2);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return opts;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// ---- Main entry point --------------------------------------------------------
|
|
207
|
+
|
|
208
|
+
async function main() {
|
|
209
|
+
const opts = parseArgs(process.argv.slice(2));
|
|
210
|
+
const result = await verifyPublish({
|
|
211
|
+
pkg: opts.pkg,
|
|
212
|
+
version: opts.version,
|
|
213
|
+
distTag: opts.distTag,
|
|
214
|
+
maxAttempts: opts.maxAttempts,
|
|
215
|
+
intervalMs: opts.intervalMs,
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
if (opts.json) {
|
|
219
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
220
|
+
} else {
|
|
221
|
+
if (result.ok) {
|
|
222
|
+
process.stdout.write(
|
|
223
|
+
`✓ Verified: ${result.pkg}@${result.version} is live on npm (after ${result.attempts} attempt(s))\n`
|
|
224
|
+
);
|
|
225
|
+
if (result.distTag) {
|
|
226
|
+
process.stdout.write(`✓ ${result.distTag.name} tag points to: ${result.distTag.points_to}\n`);
|
|
227
|
+
if (!result.distTag.matches) {
|
|
228
|
+
process.stdout.write(
|
|
229
|
+
`::warning::${result.distTag.name} dist-tag points to ${result.distTag.points_to}, expected ${result.version}\n`
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
} else {
|
|
234
|
+
process.stdout.write(
|
|
235
|
+
`::error::Published version verification failed. ${result.pkg}@${result.version} not found after ${result.attempts} attempt(s)\n`
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
process.exit(result.ok ? 0 : 1);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ---- Guard -------------------------------------------------------------------
|
|
244
|
+
|
|
245
|
+
if (require.main === module) {
|
|
246
|
+
main().catch((err) => {
|
|
247
|
+
process.stderr.write(String((err && err.stack) || err) + '\n');
|
|
248
|
+
process.exit(1);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
module.exports = { verifyPublish, parseArgs, REASON, defaultFetchVersion, defaultFetchDistTag };
|