@therocketcode/gsd-core 1.4.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-plugin/plugin.json +23 -0
- package/GEMINI.md +53 -0
- package/LICENSE +21 -0
- package/README.ja-JP.md +125 -0
- package/README.ko-KR.md +125 -0
- package/README.md +144 -0
- package/README.pt-BR.md +125 -0
- package/README.zh-CN.md +125 -0
- package/agents/gsd-advisor-researcher.md +108 -0
- package/agents/gsd-ai-researcher.md +114 -0
- package/agents/gsd-assumptions-analyzer.md +105 -0
- package/agents/gsd-code-fixer.md +668 -0
- package/agents/gsd-code-reviewer.md +387 -0
- package/agents/gsd-codebase-mapper.md +853 -0
- package/agents/gsd-debug-session-manager.md +314 -0
- package/agents/gsd-debugger.md +1452 -0
- package/agents/gsd-doc-classifier.md +168 -0
- package/agents/gsd-doc-synthesizer.md +204 -0
- package/agents/gsd-doc-verifier.md +217 -0
- package/agents/gsd-doc-writer.md +616 -0
- package/agents/gsd-domain-researcher.md +147 -0
- package/agents/gsd-eval-auditor.md +191 -0
- package/agents/gsd-eval-planner.md +154 -0
- package/agents/gsd-executor.md +785 -0
- package/agents/gsd-framework-selector.md +160 -0
- package/agents/gsd-integration-checker.md +470 -0
- package/agents/gsd-intel-updater.md +342 -0
- package/agents/gsd-nyquist-auditor.md +203 -0
- package/agents/gsd-pattern-mapper.md +335 -0
- package/agents/gsd-phase-researcher.md +867 -0
- package/agents/gsd-plan-checker.md +978 -0
- package/agents/gsd-planner.md +1204 -0
- package/agents/gsd-project-researcher.md +611 -0
- package/agents/gsd-research-synthesizer.md +259 -0
- package/agents/gsd-roadmapper.md +688 -0
- package/agents/gsd-security-auditor.md +155 -0
- package/agents/gsd-ui-auditor.md +495 -0
- package/agents/gsd-ui-checker.md +309 -0
- package/agents/gsd-ui-researcher.md +374 -0
- package/agents/gsd-user-profiler.md +171 -0
- package/agents/gsd-verifier.md +923 -0
- package/assets/gsd-logo-2000-transparent.png +0 -0
- package/assets/gsd-logo-2000-transparent.svg +17 -0
- package/assets/gsd-logo-2000.png +0 -0
- package/assets/gsd-logo-2000.svg +21 -0
- package/assets/terminal.svg +68 -0
- package/bin/install.js +12726 -0
- package/bin/lib/ui-safety-gate.cjs +107 -0
- package/commands/gsd/add-tests.md +42 -0
- package/commands/gsd/ai-integration-phase.md +37 -0
- package/commands/gsd/audit-fix.md +34 -0
- package/commands/gsd/audit-milestone.md +37 -0
- package/commands/gsd/audit-uat.md +24 -0
- package/commands/gsd/autonomous.md +48 -0
- package/commands/gsd/capture.md +62 -0
- package/commands/gsd/cleanup.md +24 -0
- package/commands/gsd/code-review.md +59 -0
- package/commands/gsd/complete-milestone.md +143 -0
- package/commands/gsd/config.md +56 -0
- package/commands/gsd/debug.md +52 -0
- package/commands/gsd/discover-product.md +65 -0
- package/commands/gsd/discuss-phase.md +77 -0
- package/commands/gsd/docs-update.md +49 -0
- package/commands/gsd/eval-review.md +33 -0
- package/commands/gsd/execute-phase.md +66 -0
- package/commands/gsd/explore.md +27 -0
- package/commands/gsd/extract-learnings.md +23 -0
- package/commands/gsd/fast.md +31 -0
- package/commands/gsd/forensics.md +57 -0
- package/commands/gsd/graphify.md +204 -0
- package/commands/gsd/health.md +31 -0
- package/commands/gsd/help.md +28 -0
- package/commands/gsd/import.md +45 -0
- package/commands/gsd/inbox.md +39 -0
- package/commands/gsd/ingest-docs.md +42 -0
- package/commands/gsd/manager.md +45 -0
- package/commands/gsd/map-codebase.md +83 -0
- package/commands/gsd/milestone-summary.md +51 -0
- package/commands/gsd/model-domain.md +65 -0
- package/commands/gsd/mvp-phase.md +45 -0
- package/commands/gsd/new-milestone.md +45 -0
- package/commands/gsd/new-project.md +47 -0
- package/commands/gsd/ns-context.md +23 -0
- package/commands/gsd/ns-ideate.md +24 -0
- package/commands/gsd/ns-manage.md +29 -0
- package/commands/gsd/ns-project.md +22 -0
- package/commands/gsd/ns-review.md +26 -0
- package/commands/gsd/ns-workflow.md +28 -0
- package/commands/gsd/pause-work.md +43 -0
- package/commands/gsd/phase.md +56 -0
- package/commands/gsd/plan-phase.md +64 -0
- package/commands/gsd/plan-review-convergence.md +59 -0
- package/commands/gsd/pr-branch.md +26 -0
- package/commands/gsd/profile-user.md +46 -0
- package/commands/gsd/progress.md +48 -0
- package/commands/gsd/quick.md +174 -0
- package/commands/gsd/recommend-architecture.md +64 -0
- package/commands/gsd/resume-work.md +30 -0
- package/commands/gsd/review-backlog.md +63 -0
- package/commands/gsd/review.md +42 -0
- package/commands/gsd/secure-phase.md +36 -0
- package/commands/gsd/settings.md +29 -0
- package/commands/gsd/ship.md +24 -0
- package/commands/gsd/sketch.md +60 -0
- package/commands/gsd/spec-phase.md +63 -0
- package/commands/gsd/spike.md +57 -0
- package/commands/gsd/stats.md +20 -0
- package/commands/gsd/surface.md +155 -0
- package/commands/gsd/testing-strategy.md +65 -0
- package/commands/gsd/thread.md +24 -0
- package/commands/gsd/ui-phase.md +35 -0
- package/commands/gsd/ui-review.md +33 -0
- package/commands/gsd/ultraplan-phase.md +34 -0
- package/commands/gsd/undo.md +35 -0
- package/commands/gsd/update.md +49 -0
- package/commands/gsd/validate-phase.md +36 -0
- package/commands/gsd/verify-work.md +39 -0
- package/commands/gsd/workspace.md +52 -0
- package/commands/gsd/workstreams.md +70 -0
- package/gemini-extension.json +6 -0
- package/gsd-core/bin/check-latest-version.cjs +161 -0
- package/gsd-core/bin/gsd-tools.cjs +1928 -0
- 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 +343 -0
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/gsd-core/bin/lib/cli-exit.cjs +42 -0
- package/gsd-core/bin/lib/clock.cjs +95 -0
- package/gsd-core/bin/lib/clusters.cjs +132 -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 +1203 -0
- package/gsd-core/bin/lib/config-schema.cjs +29 -0
- package/gsd-core/bin/lib/config-types.cjs +19 -0
- package/gsd-core/bin/lib/config.cjs +738 -0
- package/gsd-core/bin/lib/configuration.cjs +239 -0
- package/gsd-core/bin/lib/context-utilization.cjs +48 -0
- package/gsd-core/bin/lib/core.cjs +2051 -0
- package/gsd-core/bin/lib/decisions.cjs +118 -0
- 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 +1815 -0
- package/gsd-core/bin/lib/install-profiles.cjs +584 -0
- package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +350 -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 +823 -0
- package/gsd-core/bin/lib/intel.cjs +590 -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/gsd-core/bin/lib/observability/redaction.cjs +48 -0
- package/gsd-core/bin/lib/package-identity.cjs +35 -0
- package/gsd-core/bin/lib/package-legitimacy.cjs +368 -0
- 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/gsd-core/bin/lib/plan-scan.cjs +91 -0
- 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/research-provider.cjs +137 -0
- package/gsd-core/bin/lib/research-store.cjs +167 -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 +476 -0
- package/gsd-core/bin/lib/roadmap.cjs +600 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +312 -0
- package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +56 -0
- package/gsd-core/bin/lib/runtime-homes.cjs +190 -0
- package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
- package/gsd-core/bin/lib/schema-detect.cjs +159 -0
- package/gsd-core/bin/lib/secrets.cjs +34 -0
- package/gsd-core/bin/lib/security.cjs +480 -0
- package/gsd-core/bin/lib/semver-compare.cjs +42 -0
- package/gsd-core/bin/lib/shell-command-projection.cjs +533 -0
- package/gsd-core/bin/lib/state-command-router.cjs +160 -0
- package/gsd-core/bin/lib/state-document.cjs +259 -0
- package/gsd-core/bin/lib/state.cjs +2010 -0
- package/gsd-core/bin/lib/surface.cjs +449 -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/verification-command-router.cjs +31 -0
- package/gsd-core/bin/lib/verification.cjs +193 -0
- package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
- package/gsd-core/bin/lib/verify.cjs +1451 -0
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +81 -0
- package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
- package/gsd-core/bin/lib/workstream-name-policy.cjs +91 -0
- package/gsd-core/bin/lib/workstream.cjs +380 -0
- package/gsd-core/bin/lib/worktree-base-ref.cjs +325 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +943 -0
- package/gsd-core/bin/shared/config-defaults.manifest.json +98 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +192 -0
- package/gsd-core/bin/shared/model-catalog.json +149 -0
- package/gsd-core/bin/shared/runtime-aliases.manifest.json +75 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +349 -0
- package/gsd-core/contexts/dev.md +21 -0
- package/gsd-core/contexts/research.md +22 -0
- package/gsd-core/contexts/review.md +23 -0
- package/gsd-core/references/agent-contracts.md +79 -0
- package/gsd-core/references/ai-evals.md +156 -0
- package/gsd-core/references/ai-frameworks.md +186 -0
- package/gsd-core/references/architecture-decision.md +74 -0
- package/gsd-core/references/artifact-types.md +131 -0
- package/gsd-core/references/auth-in-tests.md +91 -0
- package/gsd-core/references/autonomous-smart-discuss.md +277 -0
- package/gsd-core/references/checkpoints.md +814 -0
- package/gsd-core/references/common-bug-patterns.md +114 -0
- package/gsd-core/references/context-budget.md +85 -0
- package/gsd-core/references/continuation-format.md +253 -0
- package/gsd-core/references/db-test-isolation.md +54 -0
- package/gsd-core/references/debugger-philosophy.md +76 -0
- package/gsd-core/references/decimal-phase-calculation.md +64 -0
- package/gsd-core/references/doc-conflict-engine.md +91 -0
- package/gsd-core/references/domain-modeling.md +80 -0
- package/gsd-core/references/domain-probes.md +125 -0
- package/gsd-core/references/e2e-tiering.md +35 -0
- package/gsd-core/references/execute-mvp-tdd.md +81 -0
- package/gsd-core/references/executor-examples.md +110 -0
- package/gsd-core/references/few-shot-examples/plan-checker.md +73 -0
- package/gsd-core/references/few-shot-examples/verifier.md +109 -0
- package/gsd-core/references/flaky-test-checklist.md +22 -0
- package/gsd-core/references/gate-prompts.md +100 -0
- package/gsd-core/references/gates.md +70 -0
- package/gsd-core/references/git-integration.md +298 -0
- package/gsd-core/references/git-planning-commit.md +40 -0
- package/gsd-core/references/ios-scaffold.md +123 -0
- package/gsd-core/references/mandatory-initial-read.md +2 -0
- package/gsd-core/references/model-profile-resolution.md +38 -0
- package/gsd-core/references/model-profiles.md +245 -0
- package/gsd-core/references/mvp-concepts.md +49 -0
- package/gsd-core/references/phase-argument-parsing.md +61 -0
- package/gsd-core/references/planner-antipatterns.md +89 -0
- package/gsd-core/references/planner-chunked.md +49 -0
- package/gsd-core/references/planner-gap-closure.md +62 -0
- package/gsd-core/references/planner-graphify-auto-update.md +67 -0
- package/gsd-core/references/planner-human-verify-mode.md +57 -0
- package/gsd-core/references/planner-interface-context.md +62 -0
- package/gsd-core/references/planner-load-graph-context.md +36 -0
- package/gsd-core/references/planner-mvp-mode.md +53 -0
- package/gsd-core/references/planner-reviews.md +39 -0
- package/gsd-core/references/planner-revision.md +87 -0
- package/gsd-core/references/planner-source-audit.md +73 -0
- package/gsd-core/references/planning-config.md +473 -0
- package/gsd-core/references/product-discovery.md +49 -0
- package/gsd-core/references/project-skills-discovery.md +19 -0
- package/gsd-core/references/questioning.md +162 -0
- package/gsd-core/references/realistic-test-data.md +44 -0
- package/gsd-core/references/research-documentation-lookup.md +29 -0
- package/gsd-core/references/research-philosophy.md +29 -0
- package/gsd-core/references/research-verification-protocol.md +27 -0
- package/gsd-core/references/revision-loop.md +97 -0
- package/gsd-core/references/scout-codebase.md +51 -0
- package/gsd-core/references/skeleton-template.md +48 -0
- package/gsd-core/references/sketch-interactivity.md +41 -0
- package/gsd-core/references/sketch-theme-system.md +94 -0
- package/gsd-core/references/sketch-tooling.md +45 -0
- package/gsd-core/references/sketch-variant-patterns.md +81 -0
- package/gsd-core/references/spidr-splitting.md +69 -0
- package/gsd-core/references/tdd.md +330 -0
- package/gsd-core/references/test-containers.md +55 -0
- package/gsd-core/references/test-strategy.md +75 -0
- package/gsd-core/references/thinking-models-debug.md +44 -0
- package/gsd-core/references/thinking-models-execution.md +50 -0
- package/gsd-core/references/thinking-models-planning.md +62 -0
- package/gsd-core/references/thinking-models-research.md +50 -0
- package/gsd-core/references/thinking-models-verification.md +55 -0
- package/gsd-core/references/thinking-partner.md +96 -0
- package/gsd-core/references/ui-brand.md +162 -0
- package/gsd-core/references/universal-anti-patterns.md +63 -0
- package/gsd-core/references/user-profiling.md +681 -0
- package/gsd-core/references/user-story-template.md +58 -0
- package/gsd-core/references/verification-overrides.md +227 -0
- package/gsd-core/references/verification-patterns.md +612 -0
- package/gsd-core/references/verify-mvp-mode.md +85 -0
- package/gsd-core/references/workstream-flag.md +111 -0
- package/gsd-core/references/worktree-branch-check.md +38 -0
- package/gsd-core/references/worktree-path-safety.md +67 -0
- package/gsd-core/templates/AI-SPEC.md +246 -0
- package/gsd-core/templates/DEBUG.md +169 -0
- package/gsd-core/templates/README.md +77 -0
- package/gsd-core/templates/SECURITY.md +61 -0
- package/gsd-core/templates/UAT.md +265 -0
- package/gsd-core/templates/UI-SPEC.md +100 -0
- package/gsd-core/templates/VALIDATION.md +76 -0
- package/gsd-core/templates/adr.md +58 -0
- package/gsd-core/templates/claude-md.md +145 -0
- package/gsd-core/templates/codebase/architecture.md +255 -0
- package/gsd-core/templates/codebase/concerns.md +310 -0
- package/gsd-core/templates/codebase/conventions.md +307 -0
- package/gsd-core/templates/codebase/integrations.md +280 -0
- package/gsd-core/templates/codebase/stack.md +186 -0
- package/gsd-core/templates/codebase/structure.md +285 -0
- package/gsd-core/templates/codebase/testing.md +480 -0
- package/gsd-core/templates/config.json +62 -0
- package/gsd-core/templates/context.md +352 -0
- package/gsd-core/templates/continue-here.md +78 -0
- package/gsd-core/templates/copilot-instructions.md +7 -0
- package/gsd-core/templates/debug-subagent-prompt.md +91 -0
- package/gsd-core/templates/dev-preferences.md +21 -0
- package/gsd-core/templates/discovery.md +146 -0
- package/gsd-core/templates/discussion-log.md +63 -0
- package/gsd-core/templates/domain-model.md +54 -0
- package/gsd-core/templates/milestone-archive.md +123 -0
- package/gsd-core/templates/milestone.md +115 -0
- package/gsd-core/templates/phase-prompt.md +610 -0
- package/gsd-core/templates/planner-subagent-prompt.md +117 -0
- package/gsd-core/templates/product-brief.md +55 -0
- package/gsd-core/templates/project.md +186 -0
- package/gsd-core/templates/requirements.md +231 -0
- package/gsd-core/templates/research-project/ARCHITECTURE.md +204 -0
- package/gsd-core/templates/research-project/FEATURES.md +147 -0
- package/gsd-core/templates/research-project/PITFALLS.md +200 -0
- package/gsd-core/templates/research-project/STACK.md +120 -0
- package/gsd-core/templates/research-project/SUMMARY.md +170 -0
- package/gsd-core/templates/research.md +592 -0
- package/gsd-core/templates/retrospective.md +54 -0
- package/gsd-core/templates/roadmap.md +202 -0
- package/gsd-core/templates/spec.md +307 -0
- package/gsd-core/templates/state.md +195 -0
- package/gsd-core/templates/summary-complex.md +59 -0
- package/gsd-core/templates/summary-minimal.md +41 -0
- package/gsd-core/templates/summary-standard.md +48 -0
- package/gsd-core/templates/summary.md +248 -0
- package/gsd-core/templates/test-strategy.md +50 -0
- package/gsd-core/templates/user-profile.md +146 -0
- package/gsd-core/templates/user-setup.md +311 -0
- package/gsd-core/templates/verification-report.md +322 -0
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/gsd-core/workflows/add-backlog.md +91 -0
- package/gsd-core/workflows/add-phase.md +113 -0
- package/gsd-core/workflows/add-tests.md +355 -0
- package/gsd-core/workflows/add-todo.md +161 -0
- package/gsd-core/workflows/ai-integration-phase.md +295 -0
- package/gsd-core/workflows/analyze-dependencies.md +96 -0
- package/gsd-core/workflows/audit-fix.md +178 -0
- package/gsd-core/workflows/audit-milestone.md +360 -0
- package/gsd-core/workflows/audit-uat.md +110 -0
- package/gsd-core/workflows/autonomous.md +797 -0
- package/gsd-core/workflows/check-todos.md +180 -0
- package/gsd-core/workflows/cleanup.md +195 -0
- package/gsd-core/workflows/code-review-fix.md +502 -0
- package/gsd-core/workflows/code-review.md +658 -0
- package/gsd-core/workflows/complete-milestone.md +855 -0
- package/gsd-core/workflows/debug.md +237 -0
- package/gsd-core/workflows/diagnose-issues.md +245 -0
- package/gsd-core/workflows/discover-product.md +112 -0
- package/gsd-core/workflows/discovery-phase.md +291 -0
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +176 -0
- package/gsd-core/workflows/discuss-phase/modes/all.md +28 -0
- package/gsd-core/workflows/discuss-phase/modes/analyze.md +44 -0
- package/gsd-core/workflows/discuss-phase/modes/auto.md +57 -0
- package/gsd-core/workflows/discuss-phase/modes/batch.md +52 -0
- package/gsd-core/workflows/discuss-phase/modes/chain.md +98 -0
- package/gsd-core/workflows/discuss-phase/modes/default.md +141 -0
- package/gsd-core/workflows/discuss-phase/modes/power.md +44 -0
- package/gsd-core/workflows/discuss-phase/modes/text.md +55 -0
- package/gsd-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/gsd-core/workflows/discuss-phase/templates/context.md +136 -0
- package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/gsd-core/workflows/discuss-phase-assumptions.md +675 -0
- package/gsd-core/workflows/discuss-phase-power.md +291 -0
- package/gsd-core/workflows/discuss-phase.md +499 -0
- package/gsd-core/workflows/do.md +111 -0
- package/gsd-core/workflows/docs-update.md +1176 -0
- package/gsd-core/workflows/edit-phase.md +295 -0
- package/gsd-core/workflows/eval-review.md +156 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
- package/gsd-core/workflows/execute-phase.md +1752 -0
- package/gsd-core/workflows/execute-plan.md +526 -0
- package/gsd-core/workflows/explore.md +146 -0
- package/gsd-core/workflows/extract-learnings.md +243 -0
- package/gsd-core/workflows/fast.md +124 -0
- package/gsd-core/workflows/forensics.md +279 -0
- package/gsd-core/workflows/graduation.md +196 -0
- package/gsd-core/workflows/health.md +224 -0
- package/gsd-core/workflows/help/modes/brief.md +22 -0
- package/gsd-core/workflows/help/modes/default.md +50 -0
- package/gsd-core/workflows/help/modes/full.md +789 -0
- package/gsd-core/workflows/help/modes/topic.md +74 -0
- package/gsd-core/workflows/help.md +24 -0
- package/gsd-core/workflows/import.md +256 -0
- package/gsd-core/workflows/inbox.md +387 -0
- package/gsd-core/workflows/ingest-docs.md +340 -0
- package/gsd-core/workflows/insert-phase.md +152 -0
- package/gsd-core/workflows/list-phase-assumptions.md +178 -0
- package/gsd-core/workflows/list-workspaces.md +57 -0
- package/gsd-core/workflows/manager.md +393 -0
- package/gsd-core/workflows/map-codebase.md +446 -0
- package/gsd-core/workflows/milestone-summary.md +224 -0
- package/gsd-core/workflows/model-domain.md +162 -0
- package/gsd-core/workflows/mvp-phase.md +222 -0
- package/gsd-core/workflows/new-milestone.md +635 -0
- package/gsd-core/workflows/new-project.md +1555 -0
- package/gsd-core/workflows/new-workspace.md +240 -0
- package/gsd-core/workflows/next.md +299 -0
- package/gsd-core/workflows/node-repair.md +92 -0
- package/gsd-core/workflows/note.md +158 -0
- package/gsd-core/workflows/pause-work.md +244 -0
- package/gsd-core/workflows/plan-milestone-gaps.md +281 -0
- package/gsd-core/workflows/plan-phase.md +1814 -0
- package/gsd-core/workflows/plan-review-convergence.md +346 -0
- package/gsd-core/workflows/plant-seed.md +230 -0
- package/gsd-core/workflows/pr-branch.md +157 -0
- package/gsd-core/workflows/profile-user.md +453 -0
- package/gsd-core/workflows/progress.md +699 -0
- package/gsd-core/workflows/quick.md +1017 -0
- package/gsd-core/workflows/reapply-patches.md +426 -0
- package/gsd-core/workflows/recommend-architecture.md +135 -0
- package/gsd-core/workflows/remove-phase.md +156 -0
- package/gsd-core/workflows/remove-workspace.md +108 -0
- package/gsd-core/workflows/resume-project.md +332 -0
- package/gsd-core/workflows/review.md +748 -0
- package/gsd-core/workflows/scan.md +107 -0
- package/gsd-core/workflows/secure-phase.md +182 -0
- package/gsd-core/workflows/session-report.md +146 -0
- package/gsd-core/workflows/settings-advanced.md +810 -0
- package/gsd-core/workflows/settings-integrations.md +312 -0
- package/gsd-core/workflows/settings.md +566 -0
- package/gsd-core/workflows/ship.md +405 -0
- package/gsd-core/workflows/sketch-wrap-up.md +286 -0
- package/gsd-core/workflows/sketch.md +361 -0
- package/gsd-core/workflows/spec-phase.md +263 -0
- package/gsd-core/workflows/spike-wrap-up.md +307 -0
- package/gsd-core/workflows/spike.md +453 -0
- package/gsd-core/workflows/stats.md +80 -0
- package/gsd-core/workflows/sync-skills.md +182 -0
- package/gsd-core/workflows/testing-strategy.md +122 -0
- package/gsd-core/workflows/thread.md +222 -0
- package/gsd-core/workflows/transition.md +694 -0
- package/gsd-core/workflows/ui-phase.md +328 -0
- package/gsd-core/workflows/ui-review.md +193 -0
- package/gsd-core/workflows/ultraplan-phase.md +199 -0
- package/gsd-core/workflows/undo.md +314 -0
- package/gsd-core/workflows/update.md +496 -0
- package/gsd-core/workflows/validate-phase.md +181 -0
- package/gsd-core/workflows/verify-phase.md +544 -0
- package/gsd-core/workflows/verify-work.md +781 -0
- package/hooks/dist/gsd-check-update-worker.js +108 -0
- package/hooks/dist/gsd-check-update.js +66 -0
- package/hooks/dist/gsd-config-reload.js +133 -0
- package/hooks/dist/gsd-context-monitor.js +195 -0
- package/hooks/dist/gsd-cursor-post-tool.js +75 -0
- package/hooks/dist/gsd-cursor-session-start.js +52 -0
- package/hooks/dist/gsd-graphify-update.sh +158 -0
- package/hooks/dist/gsd-phase-boundary.sh +47 -0
- package/hooks/dist/gsd-prompt-guard.js +97 -0
- package/hooks/dist/gsd-read-guard.js +101 -0
- package/hooks/dist/gsd-read-injection-scanner.js +203 -0
- package/hooks/dist/gsd-session-state.sh +59 -0
- package/hooks/dist/gsd-statusline.js +566 -0
- package/hooks/dist/gsd-update-banner.js +138 -0
- package/hooks/dist/gsd-validate-commit.sh +57 -0
- package/hooks/dist/gsd-workflow-guard.js +167 -0
- package/hooks/dist/gsd-worktree-path-guard.js +169 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/dist/managed-hooks-registry.cjs +38 -0
- package/hooks/gsd-check-update-worker.js +108 -0
- package/hooks/gsd-check-update.js +66 -0
- package/hooks/gsd-config-reload.js +133 -0
- package/hooks/gsd-context-monitor.js +195 -0
- package/hooks/gsd-cursor-post-tool.js +75 -0
- package/hooks/gsd-cursor-session-start.js +52 -0
- package/hooks/gsd-graphify-update.sh +158 -0
- package/hooks/gsd-phase-boundary.sh +47 -0
- package/hooks/gsd-prompt-guard.js +97 -0
- package/hooks/gsd-read-guard.js +101 -0
- package/hooks/gsd-read-injection-scanner.js +203 -0
- package/hooks/gsd-session-state.sh +59 -0
- package/hooks/gsd-statusline.js +566 -0
- package/hooks/gsd-update-banner.js +138 -0
- package/hooks/gsd-validate-commit.sh +57 -0
- package/hooks/gsd-workflow-guard.js +167 -0
- package/hooks/gsd-worktree-path-guard.js +169 -0
- package/hooks/hooks.json +69 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +38 -0
- package/package.json +115 -0
- package/scripts/affected-tests-lib.cjs +542 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +351 -0
- package/scripts/build-hooks.js +247 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +590 -0
- package/scripts/changeset/github-release-notes.cjs +199 -0
- package/scripts/changeset/lint.cjs +111 -0
- package/scripts/changeset/new.cjs +137 -0
- package/scripts/changeset/parse.cjs +114 -0
- package/scripts/changeset/render.cjs +34 -0
- package/scripts/changeset/serialize.cjs +130 -0
- package/scripts/check-alias-drift.cjs +114 -0
- package/scripts/check-env.cjs +312 -0
- package/scripts/check-npm-integrity.cjs +215 -0
- package/scripts/ci-guard-runner.cjs +22 -0
- package/scripts/ci-prepare-test-scope.cjs +51 -0
- package/scripts/ci-rebase-check.cjs +86 -0
- package/scripts/ci-test-scope.cjs +431 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +155 -0
- package/scripts/fix-slash-commands.cjs +147 -0
- package/scripts/gen-inventory-manifest.cjs +115 -0
- package/scripts/gen-research-agents.cjs +276 -0
- package/scripts/generate-package-identity.cjs +125 -0
- package/scripts/issue-dedupe.cjs +278 -0
- package/scripts/lib/allowlist-ratchet.cjs +136 -0
- package/scripts/lib/cli-exit.cjs +56 -0
- package/scripts/lint-command-contract.cjs +114 -0
- package/scripts/lint-descriptions.cjs +87 -0
- package/scripts/lint-docs-required.cjs +222 -0
- package/scripts/lint-legacy-dir-name.cjs +160 -0
- package/scripts/lint-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +99 -0
- package/scripts/lint-shell-command-projection-drift.cjs +62 -0
- package/scripts/lint-skill-deps.cjs +185 -0
- package/scripts/lint-test-file-count.allowlist.json +135 -0
- package/scripts/lint-test-file-count.cjs +246 -0
- package/scripts/mutation-matrix.cjs +222 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +207 -0
- package/scripts/release-notes/discord-release-summary.cjs +373 -0
- package/scripts/release-notes/format-github-release-notes.cjs +261 -0
- package/scripts/release-tarball-smoke.cjs +629 -0
- package/scripts/research-profiles.cjs +149 -0
- package/scripts/run-affected-tests.cjs +7 -0
- package/scripts/run-cross-platform-tests.cjs +67 -0
- package/scripts/run-tests.cjs +315 -0
- package/scripts/secret-scan-lint.sh +231 -0
- package/scripts/secret-scan.sh +358 -0
- package/scripts/setup-branch-protection.sh +236 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-manifest-versions.cjs +119 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +399 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/verify-npm-publish.cjs +240 -0
- package/scripts/workflow-policy.cjs +450 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Installer migration: record first-time installer migration baseline.
|
|
4
|
+
*
|
|
5
|
+
* ADR-457 build-at-publish: the hand-written
|
|
6
|
+
* bin/lib/installer-migrations/000-first-time-baseline.cjs collapsed to a
|
|
7
|
+
* TypeScript source of truth. Behaviour is preserved byte-for-behaviour from
|
|
8
|
+
* the prior hand-written .cjs; only types are added.
|
|
9
|
+
*/
|
|
10
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
+
};
|
|
13
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
14
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
+
const BASELINE_MIGRATION_ID = '2026-05-11-first-time-baseline-scan';
|
|
16
|
+
// Runtime install surfaces must stay aligned with:
|
|
17
|
+
// - docs/installer-migrations.md#runtime-configuration-contract-registry
|
|
18
|
+
// - docs/ARCHITECTURE.md#runtime-install-contract-matrix
|
|
19
|
+
const RUNTIME_SURFACES = {
|
|
20
|
+
claude: ['gsd-core', 'commands/gsd', 'skills', 'agents', 'hooks', 'settings.json'],
|
|
21
|
+
codex: ['gsd-core', 'skills', 'agents', 'hooks', 'config.toml', 'hooks.json'],
|
|
22
|
+
gemini: ['gsd-core', 'commands/gsd', 'hooks'],
|
|
23
|
+
opencode: ['gsd-core', 'command', 'skills', 'agents'],
|
|
24
|
+
kilo: ['gsd-core', 'command', 'skills', 'agents'],
|
|
25
|
+
copilot: ['gsd-core', 'skills', 'agents'],
|
|
26
|
+
antigravity: ['gsd-core', 'skills', 'agents'],
|
|
27
|
+
cursor: ['gsd-core', 'skills', 'agents', 'hooks', 'hooks.json'],
|
|
28
|
+
windsurf: ['gsd-core', 'skills', 'agents', 'rules'],
|
|
29
|
+
augment: ['gsd-core', 'skills', 'agents'],
|
|
30
|
+
trae: ['gsd-core', 'skills', 'agents', 'rules'],
|
|
31
|
+
qwen: ['gsd-core', 'skills', 'agents'],
|
|
32
|
+
hermes: ['gsd-core', 'skills/gsd', 'agents'],
|
|
33
|
+
cline: ['gsd-core', 'skills', 'agents'],
|
|
34
|
+
codebuddy: ['gsd-core', 'skills', 'agents'],
|
|
35
|
+
};
|
|
36
|
+
const COMMON_SURFACES = ['gsd-core', 'skills', 'agents', 'hooks'];
|
|
37
|
+
const INTERNAL_TOP_LEVEL_NAMES = new Set([
|
|
38
|
+
'gsd-file-manifest.json',
|
|
39
|
+
'gsd-install-state.json',
|
|
40
|
+
'gsd-migration-backups',
|
|
41
|
+
'gsd-migration-journal',
|
|
42
|
+
]);
|
|
43
|
+
const USER_OWNED_PATHS = new Set([
|
|
44
|
+
'gsd-core/USER-PROFILE.md',
|
|
45
|
+
'commands/gsd/dev-preferences.md',
|
|
46
|
+
'skills/gsd-dev-preferences/SKILL.md',
|
|
47
|
+
]);
|
|
48
|
+
let knownGeneratedAgentNames = null;
|
|
49
|
+
function normalizeRelPath(relPath) {
|
|
50
|
+
return relPath.replace(/\\/g, '/').replace(/^\/+/, '');
|
|
51
|
+
}
|
|
52
|
+
function baselineInstallSurfaces(runtime) {
|
|
53
|
+
if (runtime && RUNTIME_SURFACES[runtime])
|
|
54
|
+
return RUNTIME_SURFACES[runtime];
|
|
55
|
+
return COMMON_SURFACES;
|
|
56
|
+
}
|
|
57
|
+
function walkFiles(root, relDir, files) {
|
|
58
|
+
const dir = node_path_1.default.join(root, relDir);
|
|
59
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
60
|
+
return;
|
|
61
|
+
const entries = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
62
|
+
for (const entry of entries) {
|
|
63
|
+
const relPath = node_path_1.default.posix.join(relDir, entry.name);
|
|
64
|
+
if (relDir === '' && INTERNAL_TOP_LEVEL_NAMES.has(entry.name))
|
|
65
|
+
continue;
|
|
66
|
+
if (entry.isDirectory()) {
|
|
67
|
+
walkFiles(root, relPath, files);
|
|
68
|
+
}
|
|
69
|
+
else if (entry.isFile()) {
|
|
70
|
+
files.add(normalizeRelPath(relPath));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function scanBaselineFiles(configDir, runtime) {
|
|
75
|
+
const relPaths = new Set();
|
|
76
|
+
for (const surface of baselineInstallSurfaces(runtime)) {
|
|
77
|
+
const normalized = normalizeRelPath(surface);
|
|
78
|
+
const fullPath = node_path_1.default.join(configDir, normalized);
|
|
79
|
+
if (!node_fs_1.default.existsSync(fullPath))
|
|
80
|
+
continue;
|
|
81
|
+
const stat = node_fs_1.default.statSync(fullPath);
|
|
82
|
+
if (stat.isDirectory()) {
|
|
83
|
+
walkFiles(configDir, normalized, relPaths);
|
|
84
|
+
}
|
|
85
|
+
else if (stat.isFile() && !INTERNAL_TOP_LEVEL_NAMES.has(normalized)) {
|
|
86
|
+
relPaths.add(normalized);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return [...relPaths];
|
|
90
|
+
}
|
|
91
|
+
function isUserOwnedBaselinePath(relPath) {
|
|
92
|
+
if (USER_OWNED_PATHS.has(relPath))
|
|
93
|
+
return true;
|
|
94
|
+
const parts = relPath.split('/');
|
|
95
|
+
if (parts[0] === 'skills' && parts[1] && !parts[1].startsWith('gsd-'))
|
|
96
|
+
return true;
|
|
97
|
+
if (parts[0] === 'agents' && parts[1] && !parts[1].startsWith('gsd-'))
|
|
98
|
+
return true;
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
function listKnownGeneratedAgentNames() {
|
|
102
|
+
if (knownGeneratedAgentNames)
|
|
103
|
+
return knownGeneratedAgentNames;
|
|
104
|
+
knownGeneratedAgentNames = new Set();
|
|
105
|
+
const agentsDir = node_path_1.default.resolve(__dirname, '..', '..', '..', '..', 'agents');
|
|
106
|
+
try {
|
|
107
|
+
for (const entry of node_fs_1.default.readdirSync(agentsDir, { withFileTypes: true })) {
|
|
108
|
+
if (entry.isFile() && entry.name.startsWith('gsd-') && entry.name.endsWith('.md')) {
|
|
109
|
+
knownGeneratedAgentNames.add(entry.name.replace(/\.md$/, ''));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// If the source agent directory is unavailable, fail closed and treat
|
|
115
|
+
// GSD-looking agent files as user-choice artifacts.
|
|
116
|
+
}
|
|
117
|
+
return knownGeneratedAgentNames;
|
|
118
|
+
}
|
|
119
|
+
function isKnownGeneratedAgentPath(relPath, runtime) {
|
|
120
|
+
const parts = relPath.split('/');
|
|
121
|
+
if (parts.length !== 2 || parts[0] !== 'agents')
|
|
122
|
+
return false;
|
|
123
|
+
const fileName = parts[1];
|
|
124
|
+
const extension = node_path_1.default.posix.extname(fileName);
|
|
125
|
+
if (extension !== '.md' && !(runtime === 'codex' && extension === '.toml'))
|
|
126
|
+
return false;
|
|
127
|
+
const agentName = fileName.slice(0, -extension.length);
|
|
128
|
+
return listKnownGeneratedAgentNames().has(agentName);
|
|
129
|
+
}
|
|
130
|
+
function isStaleGsdLookingPath(relPath) {
|
|
131
|
+
const baseName = node_path_1.default.posix.basename(relPath);
|
|
132
|
+
if (/^gsd[-_]/.test(baseName))
|
|
133
|
+
return true;
|
|
134
|
+
const parts = relPath.split('/');
|
|
135
|
+
if ((parts[0] === 'skills' || parts[0] === 'agents') && parts[1] && parts[1].startsWith('gsd-')) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
function baselineActionRank(action) {
|
|
141
|
+
if (action.type === 'record-baseline')
|
|
142
|
+
return 0;
|
|
143
|
+
if (action.type === 'baseline-preserve-user')
|
|
144
|
+
return 1;
|
|
145
|
+
return 2;
|
|
146
|
+
}
|
|
147
|
+
const migration = {
|
|
148
|
+
id: BASELINE_MIGRATION_ID,
|
|
149
|
+
title: 'Record first-time installer migration baseline',
|
|
150
|
+
description: 'Classify existing install surfaces before destructive installer migrations run.',
|
|
151
|
+
introducedIn: '1.50.0',
|
|
152
|
+
scopes: ['global', 'local'],
|
|
153
|
+
destructive: false,
|
|
154
|
+
plan: ({ configDir, runtime, baselineScan, classifyArtifact }) => {
|
|
155
|
+
if (!baselineScan)
|
|
156
|
+
return [];
|
|
157
|
+
const actions = [];
|
|
158
|
+
for (const relPath of scanBaselineFiles(configDir, runtime)) {
|
|
159
|
+
// docs/installer-migrations.md#baseline-preserve-user keeps user-owned
|
|
160
|
+
// artifacts out of destructive migration flow.
|
|
161
|
+
if (isUserOwnedBaselinePath(relPath)) {
|
|
162
|
+
actions.push({
|
|
163
|
+
type: 'baseline-preserve-user',
|
|
164
|
+
relPath,
|
|
165
|
+
reason: 'known user-owned artifact preserved by first-time migration baseline',
|
|
166
|
+
classification: 'user-owned',
|
|
167
|
+
originalHash: null,
|
|
168
|
+
currentHash: null,
|
|
169
|
+
});
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const artifact = classifyArtifact(relPath);
|
|
173
|
+
if (artifact.classification === 'managed-pristine' || artifact.classification === 'managed-modified') {
|
|
174
|
+
actions.push({
|
|
175
|
+
type: 'record-baseline',
|
|
176
|
+
relPath,
|
|
177
|
+
reason: 'existing manifest-managed file included in first-time migration baseline',
|
|
178
|
+
});
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const currentHash = artifact.currentHash ?? null;
|
|
182
|
+
if (isKnownGeneratedAgentPath(relPath, runtime)) {
|
|
183
|
+
actions.push({
|
|
184
|
+
type: 'record-baseline',
|
|
185
|
+
relPath,
|
|
186
|
+
reason: 'known installer-generated agent included in first-time migration baseline',
|
|
187
|
+
classification: artifact.classification,
|
|
188
|
+
originalHash: artifact.originalHash ?? null,
|
|
189
|
+
currentHash,
|
|
190
|
+
});
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (isStaleGsdLookingPath(relPath)) {
|
|
194
|
+
actions.push({
|
|
195
|
+
type: 'prompt-user',
|
|
196
|
+
relPath,
|
|
197
|
+
reason: 'GSD-looking file is not proven manifest-managed and needs explicit user choice',
|
|
198
|
+
classification: 'stale-gsd-looking',
|
|
199
|
+
originalHash: artifact.originalHash ?? null,
|
|
200
|
+
currentHash,
|
|
201
|
+
prompt: 'Choose whether to remove this stale-looking GSD artifact or keep it as user-owned.',
|
|
202
|
+
choices: ['keep', 'remove'],
|
|
203
|
+
});
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
actions.push({
|
|
207
|
+
type: 'baseline-preserve-user',
|
|
208
|
+
relPath,
|
|
209
|
+
reason: 'unknown install-surface file preserved by first-time migration baseline',
|
|
210
|
+
classification: artifact.classification,
|
|
211
|
+
originalHash: artifact.originalHash ?? null,
|
|
212
|
+
currentHash,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return actions.sort((left, right) => baselineActionRank(left) - baselineActionRank(right) || left.relPath.localeCompare(right.relPath));
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
module.exports = migration;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Installer migration: remove manifest-managed legacy orphan hook files
|
|
4
|
+
* (ADR-457 build-at-publish: the hand-written
|
|
5
|
+
* bin/lib/installer-migrations/001-legacy-orphan-files.cjs collapsed to a
|
|
6
|
+
* TypeScript source of truth). Behaviour is preserved byte-for-behaviour from
|
|
7
|
+
* the prior hand-written .cjs; only types are added.
|
|
8
|
+
*/
|
|
9
|
+
const LEGACY_ORPHAN_FILES = [
|
|
10
|
+
'hooks/gsd-notify.sh',
|
|
11
|
+
'hooks/statusline.js',
|
|
12
|
+
];
|
|
13
|
+
const migration = {
|
|
14
|
+
id: '2026-05-11-legacy-orphan-files',
|
|
15
|
+
title: 'Remove manifest-managed legacy orphan hook files',
|
|
16
|
+
description: 'Remove legacy orphan hook files that are still manifest-managed.',
|
|
17
|
+
introducedIn: '1.50.0',
|
|
18
|
+
scopes: ['global', 'local'],
|
|
19
|
+
destructive: true,
|
|
20
|
+
// Retired generated hook files are removed only with manifest-managed
|
|
21
|
+
// evidence. This follows docs/installer-migrations.md#ownership and avoids
|
|
22
|
+
// relying on whether a runtime currently registers host hook config in the
|
|
23
|
+
// runtime contract registry.
|
|
24
|
+
plan: (ctx) => {
|
|
25
|
+
const actions = [];
|
|
26
|
+
for (const relPath of LEGACY_ORPHAN_FILES) {
|
|
27
|
+
const artifact = ctx.classifyArtifact(relPath);
|
|
28
|
+
if (artifact.classification === 'managed-pristine') {
|
|
29
|
+
actions.push({
|
|
30
|
+
type: 'remove-managed',
|
|
31
|
+
relPath,
|
|
32
|
+
reason: 'legacy orphan hook file retired by installer migration',
|
|
33
|
+
ownershipEvidence: 'legacy hook path is manifest-managed in gsd-file-manifest.json',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else if (artifact.classification === 'managed-modified') {
|
|
37
|
+
actions.push({
|
|
38
|
+
type: 'backup-and-remove',
|
|
39
|
+
relPath,
|
|
40
|
+
reason: 'legacy orphan hook file retired by installer migration',
|
|
41
|
+
ownershipEvidence: 'legacy hook path is manifest-managed in gsd-file-manifest.json',
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return actions;
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
module.exports = migration;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Installer migration: remove legacy Codex hooks.json GSD hook registrations.
|
|
4
|
+
*
|
|
5
|
+
* ADR-457 build-at-publish: the hand-written
|
|
6
|
+
* bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs collapsed to a
|
|
7
|
+
* TypeScript source of truth. Behaviour is preserved byte-for-behaviour from
|
|
8
|
+
* the prior hand-written .cjs; only types are added.
|
|
9
|
+
*/
|
|
10
|
+
const shell_command_projection_cjs_1 = require("../shell-command-projection.cjs");
|
|
11
|
+
function isStructurallyEmpty(value) {
|
|
12
|
+
if (value === null || value === undefined)
|
|
13
|
+
return true;
|
|
14
|
+
if (Array.isArray(value))
|
|
15
|
+
return value.length === 0;
|
|
16
|
+
if (typeof value !== 'object')
|
|
17
|
+
return false;
|
|
18
|
+
for (const _key in value)
|
|
19
|
+
return false;
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
function isManagedCodexHookCommand(command, configDir) {
|
|
23
|
+
return (0, shell_command_projection_cjs_1.isManagedHookCommand)(command, {
|
|
24
|
+
surface: 'codex-hooks-json',
|
|
25
|
+
includeLegacyAliases: true,
|
|
26
|
+
configDir,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function pruneLegacyCodexHooksJsonValue(value, configDir) {
|
|
30
|
+
if (Array.isArray(value)) {
|
|
31
|
+
let changed = false;
|
|
32
|
+
const next = [];
|
|
33
|
+
for (const item of value) {
|
|
34
|
+
const pruned = pruneLegacyCodexHooksJsonValue(item, configDir);
|
|
35
|
+
if (pruned.changed)
|
|
36
|
+
changed = true;
|
|
37
|
+
if (pruned.changed && isStructurallyEmpty(pruned.value))
|
|
38
|
+
changed = true;
|
|
39
|
+
else
|
|
40
|
+
next.push(pruned.value);
|
|
41
|
+
}
|
|
42
|
+
return { value: next, changed };
|
|
43
|
+
}
|
|
44
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
45
|
+
const valueObj = value;
|
|
46
|
+
const command = valueObj['command'];
|
|
47
|
+
if (isManagedCodexHookCommand(command, configDir)) {
|
|
48
|
+
return { value: null, changed: true };
|
|
49
|
+
}
|
|
50
|
+
let changed = false;
|
|
51
|
+
const next = {};
|
|
52
|
+
for (const [key, child] of Object.entries(valueObj)) {
|
|
53
|
+
const pruned = pruneLegacyCodexHooksJsonValue(child, configDir);
|
|
54
|
+
if (pruned.changed)
|
|
55
|
+
changed = true;
|
|
56
|
+
if (pruned.changed && isStructurallyEmpty(pruned.value))
|
|
57
|
+
changed = true;
|
|
58
|
+
else
|
|
59
|
+
next[key] = pruned.value;
|
|
60
|
+
}
|
|
61
|
+
return { value: next, changed };
|
|
62
|
+
}
|
|
63
|
+
return { value, changed: false };
|
|
64
|
+
}
|
|
65
|
+
const migration = {
|
|
66
|
+
id: '2026-05-11-codex-legacy-hooks-json',
|
|
67
|
+
title: 'Remove legacy Codex hooks.json GSD hook registrations',
|
|
68
|
+
description: 'Remove legacy Codex hooks.json GSD hook registrations after config.toml migration.',
|
|
69
|
+
introducedIn: '1.50.0',
|
|
70
|
+
runtimes: ['codex'],
|
|
71
|
+
scopes: ['global', 'local'],
|
|
72
|
+
destructive: true,
|
|
73
|
+
runtimeContract: 'docs/installer-migrations.md#runtime-configuration-contract-registry Codex row',
|
|
74
|
+
plan: (ctx) => {
|
|
75
|
+
const { configDir } = ctx;
|
|
76
|
+
const hooksJson = ctx.readJson('hooks.json');
|
|
77
|
+
if (!hooksJson.exists || hooksJson.error)
|
|
78
|
+
return [];
|
|
79
|
+
const pruned = pruneLegacyCodexHooksJsonValue(hooksJson.value, configDir);
|
|
80
|
+
if (!pruned.changed)
|
|
81
|
+
return [];
|
|
82
|
+
return [
|
|
83
|
+
{
|
|
84
|
+
type: 'rewrite-json',
|
|
85
|
+
relPath: 'hooks.json',
|
|
86
|
+
value: pruned.value,
|
|
87
|
+
deleteIfEmpty: true,
|
|
88
|
+
reason: 'legacy Codex hooks.json GSD registration retired by installer migration',
|
|
89
|
+
ownershipEvidence: 'pruned command matches generated GSD hook command under the install hooks directory',
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
module.exports = migration;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Installer migration 003: remove stale legacy get-shit-done/ runtime directory // gsd-allow-legacy-name
|
|
4
|
+
* files after the rename to gsd-core/ (#604).
|
|
5
|
+
*
|
|
6
|
+
* Background: the GSD runtime config subdirectory was renamed from
|
|
7
|
+
* get-shit-done/ to gsd-core/ in #604. On upgrade, both directories can exist // gsd-allow-legacy-name
|
|
8
|
+
* simultaneously. This migration removes prior-manifest-managed files from the
|
|
9
|
+
* legacy get-shit-done/ directory during install. Migrations run BEFORE the new // gsd-allow-legacy-name
|
|
10
|
+
* runtime is materialized, so gsd-core/ will not yet exist on the first upgrade
|
|
11
|
+
* run — the migration must not gate on its presence. If the install fails after
|
|
12
|
+
* migrations apply, the framework rolls back by restoring files from rollback
|
|
13
|
+
* storage (copied before deletion), so removing legacy files pre-materialization
|
|
14
|
+
* is safe.
|
|
15
|
+
*
|
|
16
|
+
* Per-file approach: the migration framework has no recursive directory-removal
|
|
17
|
+
* primitive — all actions operate on individual files identified by relPath. As
|
|
18
|
+
* a result, any empty subdirectory shells left under the legacy tree after all
|
|
19
|
+
* files are removed will remain on disk. Users can remove them manually if
|
|
20
|
+
* desired. This is a known, intentional limitation of the ADR-0008 design: the
|
|
21
|
+
* framework never removes directories, only files.
|
|
22
|
+
*
|
|
23
|
+
* User file preservation: files classified 'unknown' (not in the prior manifest)
|
|
24
|
+
* receive a 'baseline-preserve-user' action and are explicitly NOT removed.
|
|
25
|
+
*/
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
30
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
31
|
+
function walkLegacyFiles(root, relDir, baseResolved, results) {
|
|
32
|
+
const dir = node_path_1.default.join(root, relDir);
|
|
33
|
+
const entries = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
// Do not follow symlinks — skip them entirely to avoid out-of-tree traversal.
|
|
36
|
+
if (entry.isSymbolicLink())
|
|
37
|
+
continue; // gsd-allow-legacy-name (entry under legacy get-shit-done/ dir)
|
|
38
|
+
const relPath = node_path_1.default.posix.join(relDir, entry.name);
|
|
39
|
+
// Bounds check: ensure the resolved path stays under configDir.
|
|
40
|
+
const resolved = node_path_1.default.resolve(root, relPath);
|
|
41
|
+
if (resolved !== baseResolved && !resolved.startsWith(baseResolved + node_path_1.default.sep))
|
|
42
|
+
continue;
|
|
43
|
+
if (entry.isDirectory()) {
|
|
44
|
+
walkLegacyFiles(root, relPath, baseResolved, results);
|
|
45
|
+
}
|
|
46
|
+
else if (entry.isFile()) {
|
|
47
|
+
results.push(relPath);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const REASON = 'legacy runtime directory renamed to gsd-core (#604)';
|
|
52
|
+
const migration = {
|
|
53
|
+
id: '2026-06-02-rename-get-shit-done-to-gsd-core', // gsd-allow-legacy-name
|
|
54
|
+
title: 'Remove stale legacy get-shit-done/ runtime directory files (#604)', // gsd-allow-legacy-name
|
|
55
|
+
description: 'After the config dir rename from get-shit-done/ to gsd-core/ (#604), remove prior-manifest-managed files ' + // gsd-allow-legacy-name
|
|
56
|
+
'from the stale legacy directory during install (framework rollback restores them if install fails). User-added files are preserved.',
|
|
57
|
+
introducedIn: '1.2.0',
|
|
58
|
+
scopes: ['global', 'local'],
|
|
59
|
+
destructive: true,
|
|
60
|
+
plan(ctx) {
|
|
61
|
+
const legacyRoot = node_path_1.default.join(ctx.configDir, 'get-shit-done'); // gsd-allow-legacy-name
|
|
62
|
+
// Idempotency: if the legacy directory doesn't exist, nothing to do.
|
|
63
|
+
if (!node_fs_1.default.existsSync(legacyRoot))
|
|
64
|
+
return [];
|
|
65
|
+
// Safety: if the legacy root itself is a symlink to an out-of-tree location,
|
|
66
|
+
// do not process it — walking a symlinked dir could emit removes outside configDir.
|
|
67
|
+
if (node_fs_1.default.lstatSync(legacyRoot).isSymbolicLink())
|
|
68
|
+
return []; // gsd-allow-legacy-name
|
|
69
|
+
const baseResolved = node_path_1.default.resolve(ctx.configDir);
|
|
70
|
+
const relPaths = [];
|
|
71
|
+
walkLegacyFiles(ctx.configDir, 'get-shit-done', baseResolved, relPaths); // gsd-allow-legacy-name
|
|
72
|
+
const actions = [];
|
|
73
|
+
for (const relPath of relPaths) {
|
|
74
|
+
// Bounds-check each relPath before emitting any action.
|
|
75
|
+
const resolved = node_path_1.default.resolve(ctx.configDir, relPath);
|
|
76
|
+
if (resolved !== baseResolved && !resolved.startsWith(baseResolved + node_path_1.default.sep))
|
|
77
|
+
continue;
|
|
78
|
+
const { classification } = ctx.classifyArtifact(relPath);
|
|
79
|
+
if (classification === 'managed-pristine') {
|
|
80
|
+
actions.push({
|
|
81
|
+
type: 'remove-managed',
|
|
82
|
+
relPath,
|
|
83
|
+
reason: REASON,
|
|
84
|
+
ownershipEvidence: 'present in prior install manifest as a managed GSD runtime file',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else if (classification === 'managed-modified') {
|
|
88
|
+
actions.push({
|
|
89
|
+
type: 'backup-and-remove',
|
|
90
|
+
relPath,
|
|
91
|
+
reason: REASON,
|
|
92
|
+
ownershipEvidence: 'managed GSD runtime file, locally modified; backed up before removal',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else if (classification === 'unknown') {
|
|
96
|
+
actions.push({
|
|
97
|
+
type: 'baseline-preserve-user',
|
|
98
|
+
relPath,
|
|
99
|
+
reason: 'user-added file under legacy runtime dir; preserved per ADR-0008',
|
|
100
|
+
ownershipEvidence: 'file is not present in the prior install manifest; treated as user-owned',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// 'managed-missing', 'missing', and any other classification: skip (no action)
|
|
104
|
+
}
|
|
105
|
+
return actions;
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
module.exports = migration;
|