@opengsd/gsd-core 1.2.0-rc.1
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/LICENSE +21 -0
- package/README.ja-JP.md +870 -0
- package/README.ko-KR.md +861 -0
- package/README.md +301 -0
- package/README.pt-BR.md +492 -0
- package/README.zh-CN.md +842 -0
- package/agents/gsd-advisor-researcher.md +127 -0
- package/agents/gsd-ai-researcher.md +133 -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 +615 -0
- package/agents/gsd-domain-researcher.md +153 -0
- package/agents/gsd-eval-auditor.md +191 -0
- package/agents/gsd-eval-planner.md +154 -0
- package/agents/gsd-executor.md +772 -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 +928 -0
- package/agents/gsd-plan-checker.md +978 -0
- package/agents/gsd-planner.md +1218 -0
- package/agents/gsd-project-researcher.md +677 -0
- package/agents/gsd-research-synthesizer.md +255 -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 +380 -0
- package/agents/gsd-user-profiler.md +171 -0
- package/agents/gsd-verifier.md +917 -0
- package/bin/install.js +10936 -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 +46 -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/discuss-phase.md +76 -0
- package/commands/gsd/docs-update.md +49 -0
- package/commands/gsd/eval-review.md +33 -0
- package/commands/gsd/execute-phase.md +64 -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 +199 -0
- package/commands/gsd/health.md +31 -0
- package/commands/gsd/help.md +28 -0
- package/commands/gsd/import.md +41 -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/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 +62 -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 +47 -0
- package/commands/gsd/quick.md +174 -0
- package/commands/gsd/resume-work.md +30 -0
- package/commands/gsd/review-backlog.md +63 -0
- package/commands/gsd/review.md +41 -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 +19 -0
- package/commands/gsd/surface.md +155 -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 +48 -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/get-shit-done/bin/check-latest-version.cjs +106 -0
- package/get-shit-done/bin/gsd-tools.cjs +1676 -0
- package/get-shit-done/bin/lib/active-workstream-store.cjs +302 -0
- package/get-shit-done/bin/lib/adr-parser.cjs +394 -0
- package/get-shit-done/bin/lib/agent-command-router.cjs +65 -0
- package/get-shit-done/bin/lib/artifacts.cjs +53 -0
- package/get-shit-done/bin/lib/audit.cjs +755 -0
- package/get-shit-done/bin/lib/check-command-router.cjs +333 -0
- package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +118 -0
- package/get-shit-done/bin/lib/clock.cjs +96 -0
- package/get-shit-done/bin/lib/clusters.cjs +135 -0
- package/get-shit-done/bin/lib/code-review-flags.cjs +74 -0
- package/get-shit-done/bin/lib/command-aliases.cjs +815 -0
- package/get-shit-done/bin/lib/command-arg-projection.cjs +62 -0
- package/get-shit-done/bin/lib/command-routing-hub.cjs +388 -0
- package/get-shit-done/bin/lib/commands.cjs +1188 -0
- package/get-shit-done/bin/lib/config-schema.cjs +31 -0
- package/get-shit-done/bin/lib/config.cjs +728 -0
- package/get-shit-done/bin/lib/configuration.cjs +248 -0
- package/get-shit-done/bin/lib/context-utilization.cjs +47 -0
- package/get-shit-done/bin/lib/core.cjs +2121 -0
- package/get-shit-done/bin/lib/decisions.cjs +116 -0
- package/get-shit-done/bin/lib/docs.cjs +270 -0
- package/get-shit-done/bin/lib/drift.cjs +388 -0
- package/get-shit-done/bin/lib/fallow-runner.cjs +109 -0
- package/get-shit-done/bin/lib/frontmatter.cjs +389 -0
- package/get-shit-done/bin/lib/gap-checker.cjs +205 -0
- package/get-shit-done/bin/lib/graphify.cjs +592 -0
- package/get-shit-done/bin/lib/gsd2-import.cjs +514 -0
- package/get-shit-done/bin/lib/init-command-router.cjs +58 -0
- package/get-shit-done/bin/lib/init.cjs +2112 -0
- package/get-shit-done/bin/lib/install-profiles.cjs +603 -0
- package/get-shit-done/bin/lib/installer-migration-authoring.cjs +117 -0
- package/get-shit-done/bin/lib/installer-migration-report.cjs +354 -0
- package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +220 -0
- package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +41 -0
- package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +80 -0
- package/get-shit-done/bin/lib/installer-migrations.cjs +778 -0
- package/get-shit-done/bin/lib/intel.cjs +708 -0
- package/get-shit-done/bin/lib/learnings.cjs +421 -0
- package/get-shit-done/bin/lib/milestone.cjs +314 -0
- package/get-shit-done/bin/lib/model-catalog.cjs +212 -0
- package/get-shit-done/bin/lib/model-profiles.cjs +31 -0
- package/get-shit-done/bin/lib/observability/event.cjs +82 -0
- package/get-shit-done/bin/lib/observability/logger.cjs +174 -0
- package/get-shit-done/bin/lib/observability/redaction.cjs +50 -0
- package/get-shit-done/bin/lib/package-identity.cjs +31 -0
- package/get-shit-done/bin/lib/phase-command-router.cjs +191 -0
- package/get-shit-done/bin/lib/phase-lifecycle.cjs +80 -0
- package/get-shit-done/bin/lib/phase.cjs +1607 -0
- package/get-shit-done/bin/lib/phases-command-router.cjs +39 -0
- package/get-shit-done/bin/lib/plan-scan.cjs +97 -0
- package/get-shit-done/bin/lib/planning-workspace.cjs +238 -0
- package/get-shit-done/bin/lib/profile-output.cjs +1141 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/project-root.cjs +112 -0
- package/get-shit-done/bin/lib/prompt-budget.cjs +399 -0
- package/get-shit-done/bin/lib/review-reviewer-selection.cjs +125 -0
- package/get-shit-done/bin/lib/roadmap-command-router.cjs +28 -0
- package/get-shit-done/bin/lib/roadmap.cjs +650 -0
- package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +301 -0
- package/get-shit-done/bin/lib/runtime-homes.cjs +222 -0
- package/get-shit-done/bin/lib/runtime-name-policy.cjs +83 -0
- package/get-shit-done/bin/lib/runtime-slash.cjs +112 -0
- package/get-shit-done/bin/lib/schema-detect.cjs +165 -0
- package/get-shit-done/bin/lib/secrets.cjs +32 -0
- package/get-shit-done/bin/lib/security.cjs +600 -0
- package/get-shit-done/bin/lib/semver-compare.cjs +35 -0
- package/get-shit-done/bin/lib/shell-command-projection.cjs +500 -0
- package/get-shit-done/bin/lib/state-command-router.cjs +252 -0
- package/get-shit-done/bin/lib/state-document.cjs +263 -0
- package/get-shit-done/bin/lib/state.cjs +2038 -0
- package/get-shit-done/bin/lib/surface.cjs +470 -0
- package/get-shit-done/bin/lib/task-command-router.cjs +81 -0
- package/get-shit-done/bin/lib/template.cjs +228 -0
- package/get-shit-done/bin/lib/uat.cjs +289 -0
- package/get-shit-done/bin/lib/update-context.cjs +209 -0
- package/get-shit-done/bin/lib/validate-command-router.cjs +83 -0
- package/get-shit-done/bin/lib/validate.cjs +92 -0
- package/get-shit-done/bin/lib/verify-command-router.cjs +40 -0
- package/get-shit-done/bin/lib/verify.cjs +1511 -0
- package/get-shit-done/bin/lib/workstream-inventory-builder.cjs +74 -0
- package/get-shit-done/bin/lib/workstream-inventory.cjs +146 -0
- package/get-shit-done/bin/lib/workstream-name-policy.cjs +94 -0
- package/get-shit-done/bin/lib/workstream.cjs +389 -0
- package/get-shit-done/bin/lib/worktree-safety.cjs +985 -0
- package/get-shit-done/bin/shared/config-defaults.manifest.json +97 -0
- package/get-shit-done/bin/shared/config-schema.manifest.json +175 -0
- package/get-shit-done/bin/shared/model-catalog.json +122 -0
- package/get-shit-done/bin/shared/runtime-aliases.manifest.json +75 -0
- package/get-shit-done/bin/verify-reapply-patches.cjs +352 -0
- package/get-shit-done/contexts/dev.md +21 -0
- package/get-shit-done/contexts/research.md +22 -0
- package/get-shit-done/contexts/review.md +23 -0
- package/get-shit-done/references/agent-contracts.md +79 -0
- package/get-shit-done/references/ai-evals.md +156 -0
- package/get-shit-done/references/ai-frameworks.md +186 -0
- package/get-shit-done/references/artifact-types.md +131 -0
- package/get-shit-done/references/autonomous-smart-discuss.md +277 -0
- package/get-shit-done/references/checkpoints.md +814 -0
- package/get-shit-done/references/common-bug-patterns.md +114 -0
- package/get-shit-done/references/context-budget.md +85 -0
- package/get-shit-done/references/continuation-format.md +253 -0
- package/get-shit-done/references/debugger-philosophy.md +76 -0
- package/get-shit-done/references/decimal-phase-calculation.md +64 -0
- package/get-shit-done/references/doc-conflict-engine.md +91 -0
- package/get-shit-done/references/domain-probes.md +125 -0
- package/get-shit-done/references/execute-mvp-tdd.md +81 -0
- package/get-shit-done/references/executor-examples.md +110 -0
- package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
- package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
- package/get-shit-done/references/gate-prompts.md +100 -0
- package/get-shit-done/references/gates.md +70 -0
- package/get-shit-done/references/git-integration.md +298 -0
- package/get-shit-done/references/git-planning-commit.md +40 -0
- package/get-shit-done/references/ios-scaffold.md +123 -0
- package/get-shit-done/references/mandatory-initial-read.md +2 -0
- package/get-shit-done/references/model-profile-resolution.md +38 -0
- package/get-shit-done/references/model-profiles.md +245 -0
- package/get-shit-done/references/mvp-concepts.md +49 -0
- package/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/get-shit-done/references/planner-antipatterns.md +89 -0
- package/get-shit-done/references/planner-chunked.md +49 -0
- package/get-shit-done/references/planner-gap-closure.md +62 -0
- package/get-shit-done/references/planner-graphify-auto-update.md +67 -0
- package/get-shit-done/references/planner-human-verify-mode.md +57 -0
- package/get-shit-done/references/planner-interface-context.md +62 -0
- package/get-shit-done/references/planner-mvp-mode.md +53 -0
- package/get-shit-done/references/planner-reviews.md +39 -0
- package/get-shit-done/references/planner-revision.md +87 -0
- package/get-shit-done/references/planner-source-audit.md +73 -0
- package/get-shit-done/references/planning-config.md +471 -0
- package/get-shit-done/references/project-skills-discovery.md +19 -0
- package/get-shit-done/references/questioning.md +162 -0
- package/get-shit-done/references/revision-loop.md +97 -0
- package/get-shit-done/references/scout-codebase.md +51 -0
- package/get-shit-done/references/skeleton-template.md +48 -0
- package/get-shit-done/references/sketch-interactivity.md +41 -0
- package/get-shit-done/references/sketch-theme-system.md +94 -0
- package/get-shit-done/references/sketch-tooling.md +45 -0
- package/get-shit-done/references/sketch-variant-patterns.md +81 -0
- package/get-shit-done/references/spidr-splitting.md +69 -0
- package/get-shit-done/references/tdd.md +330 -0
- package/get-shit-done/references/thinking-models-debug.md +44 -0
- package/get-shit-done/references/thinking-models-execution.md +50 -0
- package/get-shit-done/references/thinking-models-planning.md +62 -0
- package/get-shit-done/references/thinking-models-research.md +50 -0
- package/get-shit-done/references/thinking-models-verification.md +55 -0
- package/get-shit-done/references/thinking-partner.md +96 -0
- package/get-shit-done/references/ui-brand.md +160 -0
- package/get-shit-done/references/universal-anti-patterns.md +63 -0
- package/get-shit-done/references/user-profiling.md +681 -0
- package/get-shit-done/references/user-story-template.md +58 -0
- package/get-shit-done/references/verification-overrides.md +227 -0
- package/get-shit-done/references/verification-patterns.md +612 -0
- package/get-shit-done/references/verify-mvp-mode.md +85 -0
- package/get-shit-done/references/workstream-flag.md +111 -0
- package/get-shit-done/references/worktree-path-safety.md +89 -0
- package/get-shit-done/templates/AI-SPEC.md +246 -0
- package/get-shit-done/templates/DEBUG.md +169 -0
- package/get-shit-done/templates/README.md +77 -0
- package/get-shit-done/templates/SECURITY.md +61 -0
- package/get-shit-done/templates/UAT.md +265 -0
- package/get-shit-done/templates/UI-SPEC.md +100 -0
- package/get-shit-done/templates/VALIDATION.md +76 -0
- package/get-shit-done/templates/claude-md.md +145 -0
- package/get-shit-done/templates/codebase/architecture.md +255 -0
- package/get-shit-done/templates/codebase/concerns.md +310 -0
- package/get-shit-done/templates/codebase/conventions.md +307 -0
- package/get-shit-done/templates/codebase/integrations.md +280 -0
- package/get-shit-done/templates/codebase/stack.md +186 -0
- package/get-shit-done/templates/codebase/structure.md +285 -0
- package/get-shit-done/templates/codebase/testing.md +480 -0
- package/get-shit-done/templates/config.json +62 -0
- package/get-shit-done/templates/context.md +352 -0
- package/get-shit-done/templates/continue-here.md +78 -0
- package/get-shit-done/templates/copilot-instructions.md +7 -0
- package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
- package/get-shit-done/templates/dev-preferences.md +21 -0
- package/get-shit-done/templates/discovery.md +146 -0
- package/get-shit-done/templates/discussion-log.md +63 -0
- package/get-shit-done/templates/milestone-archive.md +123 -0
- package/get-shit-done/templates/milestone.md +115 -0
- package/get-shit-done/templates/phase-prompt.md +610 -0
- package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
- package/get-shit-done/templates/project.md +186 -0
- package/get-shit-done/templates/requirements.md +231 -0
- package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
- package/get-shit-done/templates/research-project/FEATURES.md +147 -0
- package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
- package/get-shit-done/templates/research-project/STACK.md +120 -0
- package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
- package/get-shit-done/templates/research.md +592 -0
- package/get-shit-done/templates/retrospective.md +54 -0
- package/get-shit-done/templates/roadmap.md +202 -0
- package/get-shit-done/templates/spec.md +307 -0
- package/get-shit-done/templates/state.md +195 -0
- package/get-shit-done/templates/summary-complex.md +59 -0
- package/get-shit-done/templates/summary-minimal.md +41 -0
- package/get-shit-done/templates/summary-standard.md +48 -0
- package/get-shit-done/templates/summary.md +248 -0
- package/get-shit-done/templates/user-profile.md +146 -0
- package/get-shit-done/templates/user-setup.md +311 -0
- package/get-shit-done/templates/verification-report.md +322 -0
- package/get-shit-done/workflows/_runtime-launcher.snippet.sh +1 -0
- package/get-shit-done/workflows/add-backlog.md +91 -0
- package/get-shit-done/workflows/add-phase.md +113 -0
- package/get-shit-done/workflows/add-tests.md +355 -0
- package/get-shit-done/workflows/add-todo.md +161 -0
- package/get-shit-done/workflows/ai-integration-phase.md +295 -0
- package/get-shit-done/workflows/analyze-dependencies.md +96 -0
- package/get-shit-done/workflows/audit-fix.md +178 -0
- package/get-shit-done/workflows/audit-milestone.md +358 -0
- package/get-shit-done/workflows/audit-uat.md +110 -0
- package/get-shit-done/workflows/autonomous.md +795 -0
- package/get-shit-done/workflows/check-todos.md +180 -0
- package/get-shit-done/workflows/cleanup.md +155 -0
- package/get-shit-done/workflows/code-review-fix.md +502 -0
- package/get-shit-done/workflows/code-review.md +656 -0
- package/get-shit-done/workflows/complete-milestone.md +855 -0
- package/get-shit-done/workflows/debug.md +232 -0
- package/get-shit-done/workflows/diagnose-issues.md +241 -0
- package/get-shit-done/workflows/discovery-phase.md +291 -0
- package/get-shit-done/workflows/discuss-phase/modes/advisor.md +176 -0
- package/get-shit-done/workflows/discuss-phase/modes/all.md +28 -0
- package/get-shit-done/workflows/discuss-phase/modes/analyze.md +44 -0
- package/get-shit-done/workflows/discuss-phase/modes/auto.md +57 -0
- package/get-shit-done/workflows/discuss-phase/modes/batch.md +52 -0
- package/get-shit-done/workflows/discuss-phase/modes/chain.md +98 -0
- package/get-shit-done/workflows/discuss-phase/modes/default.md +141 -0
- package/get-shit-done/workflows/discuss-phase/modes/power.md +44 -0
- package/get-shit-done/workflows/discuss-phase/modes/text.md +55 -0
- package/get-shit-done/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/get-shit-done/workflows/discuss-phase/templates/context.md +136 -0
- package/get-shit-done/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/get-shit-done/workflows/discuss-phase-assumptions.md +675 -0
- package/get-shit-done/workflows/discuss-phase-power.md +291 -0
- package/get-shit-done/workflows/discuss-phase.md +499 -0
- package/get-shit-done/workflows/do.md +111 -0
- package/get-shit-done/workflows/docs-update.md +1162 -0
- package/get-shit-done/workflows/edit-phase.md +295 -0
- package/get-shit-done/workflows/eval-review.md +156 -0
- package/get-shit-done/workflows/execute-phase/steps/codebase-drift-gate.md +82 -0
- package/get-shit-done/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/get-shit-done/workflows/execute-phase/steps/post-merge-gate.md +117 -0
- package/get-shit-done/workflows/execute-phase.md +1709 -0
- package/get-shit-done/workflows/execute-plan.md +526 -0
- package/get-shit-done/workflows/explore.md +144 -0
- package/get-shit-done/workflows/extract-learnings.md +243 -0
- package/get-shit-done/workflows/fast.md +124 -0
- package/get-shit-done/workflows/forensics.md +279 -0
- package/get-shit-done/workflows/graduation.md +196 -0
- package/get-shit-done/workflows/health.md +224 -0
- package/get-shit-done/workflows/help/modes/brief.md +22 -0
- package/get-shit-done/workflows/help/modes/default.md +50 -0
- package/get-shit-done/workflows/help/modes/full.md +784 -0
- package/get-shit-done/workflows/help/modes/topic.md +74 -0
- package/get-shit-done/workflows/help.md +24 -0
- package/get-shit-done/workflows/import.md +254 -0
- package/get-shit-done/workflows/inbox.md +387 -0
- package/get-shit-done/workflows/ingest-docs.md +339 -0
- package/get-shit-done/workflows/insert-phase.md +152 -0
- package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
- package/get-shit-done/workflows/list-workspaces.md +57 -0
- package/get-shit-done/workflows/manager.md +393 -0
- package/get-shit-done/workflows/map-codebase.md +444 -0
- package/get-shit-done/workflows/milestone-summary.md +224 -0
- package/get-shit-done/workflows/mvp-phase.md +222 -0
- package/get-shit-done/workflows/new-milestone.md +635 -0
- package/get-shit-done/workflows/new-project.md +1555 -0
- package/get-shit-done/workflows/new-workspace.md +240 -0
- package/get-shit-done/workflows/next.md +299 -0
- package/get-shit-done/workflows/node-repair.md +92 -0
- package/get-shit-done/workflows/note.md +158 -0
- package/get-shit-done/workflows/pause-work.md +244 -0
- package/get-shit-done/workflows/plan-milestone-gaps.md +281 -0
- package/get-shit-done/workflows/plan-phase.md +1809 -0
- package/get-shit-done/workflows/plan-review-convergence.md +346 -0
- package/get-shit-done/workflows/plant-seed.md +230 -0
- package/get-shit-done/workflows/pr-branch.md +157 -0
- package/get-shit-done/workflows/profile-user.md +453 -0
- package/get-shit-done/workflows/progress.md +699 -0
- package/get-shit-done/workflows/quick.md +1039 -0
- package/get-shit-done/workflows/reapply-patches.md +426 -0
- package/get-shit-done/workflows/remove-phase.md +156 -0
- package/get-shit-done/workflows/remove-workspace.md +108 -0
- package/get-shit-done/workflows/resume-project.md +332 -0
- package/get-shit-done/workflows/review.md +623 -0
- package/get-shit-done/workflows/scan.md +105 -0
- package/get-shit-done/workflows/secure-phase.md +180 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/settings-advanced.md +620 -0
- package/get-shit-done/workflows/settings-integrations.md +312 -0
- package/get-shit-done/workflows/settings.md +552 -0
- package/get-shit-done/workflows/ship.md +356 -0
- package/get-shit-done/workflows/sketch-wrap-up.md +286 -0
- package/get-shit-done/workflows/sketch.md +361 -0
- package/get-shit-done/workflows/spec-phase.md +262 -0
- package/get-shit-done/workflows/spike-wrap-up.md +307 -0
- package/get-shit-done/workflows/spike.md +453 -0
- package/get-shit-done/workflows/stats.md +80 -0
- package/get-shit-done/workflows/sync-skills.md +182 -0
- package/get-shit-done/workflows/thread.md +222 -0
- package/get-shit-done/workflows/transition.md +694 -0
- package/get-shit-done/workflows/ui-phase.md +328 -0
- package/get-shit-done/workflows/ui-review.md +193 -0
- package/get-shit-done/workflows/ultraplan-phase.md +199 -0
- package/get-shit-done/workflows/undo.md +314 -0
- package/get-shit-done/workflows/update.md +443 -0
- package/get-shit-done/workflows/validate-phase.md +179 -0
- package/get-shit-done/workflows/verify-phase.md +544 -0
- package/get-shit-done/workflows/verify-work.md +781 -0
- package/hooks/dist/gsd-check-update-worker.js +95 -0
- package/hooks/dist/gsd-check-update.js +64 -0
- package/hooks/dist/gsd-context-monitor.js +195 -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 +548 -0
- package/hooks/dist/gsd-update-banner.js +134 -0
- package/hooks/dist/gsd-validate-commit.sh +57 -0
- package/hooks/dist/gsd-workflow-guard.js +166 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/gsd-check-update-worker.js +95 -0
- package/hooks/gsd-check-update.js +64 -0
- package/hooks/gsd-context-monitor.js +195 -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 +548 -0
- package/hooks/gsd-update-banner.js +134 -0
- package/hooks/gsd-validate-commit.sh +57 -0
- package/hooks/gsd-workflow-guard.js +166 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +34 -0
- package/package.json +102 -0
- package/scripts/affected-tests-lib.cjs +541 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +339 -0
- package/scripts/build-hooks.js +236 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +392 -0
- package/scripts/changeset/github-release-notes.cjs +199 -0
- package/scripts/changeset/lint.cjs +110 -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 +108 -0
- package/scripts/check-env.cjs +302 -0
- package/scripts/check-npm-integrity.cjs +209 -0
- package/scripts/ci-guard-runner.cjs +16 -0
- package/scripts/ci-prepare-test-scope.cjs +46 -0
- package/scripts/ci-rebase-check.cjs +85 -0
- package/scripts/ci-test-scope.cjs +302 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +147 -0
- package/scripts/fix-slash-commands.cjs +147 -0
- package/scripts/gen-inventory-manifest.cjs +109 -0
- package/scripts/generate-package-identity.cjs +104 -0
- package/scripts/lint-command-contract.cjs +108 -0
- package/scripts/lint-descriptions.cjs +83 -0
- package/scripts/lint-docs-required.cjs +222 -0
- package/scripts/lint-no-source-grep-extras.cjs +81 -0
- package/scripts/lint-no-source-grep.cjs +174 -0
- package/scripts/lint-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +98 -0
- package/scripts/lint-shared-module-handsync.cjs +388 -0
- package/scripts/lint-shell-command-projection-drift.cjs +57 -0
- package/scripts/lint-skill-deps.cjs +180 -0
- package/scripts/lint-test-file-count.allowlist.json +36 -0
- package/scripts/lint-test-file-count.cjs +190 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +203 -0
- package/scripts/release-tarball-smoke.cjs +627 -0
- package/scripts/run-affected-tests.cjs +6 -0
- package/scripts/run-cross-platform-tests.cjs +63 -0
- package/scripts/run-tests.cjs +282 -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/shared-module-handsync-allowlist.json +183 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +402 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/workflow-policy.cjs +450 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Ultraplan Phase Workflow [BETA]
|
|
2
|
+
|
|
3
|
+
Offload GSD's plan phase to Claude Code's ultraplan cloud infrastructure.
|
|
4
|
+
|
|
5
|
+
⚠ **BETA feature.** Ultraplan is in research preview and may change. This workflow is
|
|
6
|
+
intentionally isolated from /gsd:plan-phase so upstream changes to ultraplan cannot
|
|
7
|
+
affect the core planning pipeline.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<step name="banner">
|
|
12
|
+
|
|
13
|
+
Display the stage banner:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
17
|
+
GSD ► ULTRAPLAN PHASE ⚠ BETA
|
|
18
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
Ultraplan is in research preview (Claude Code v2.1.91+).
|
|
20
|
+
Use /gsd:plan-phase for stable local planning.
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
</step>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
<step name="runtime_gate">
|
|
28
|
+
|
|
29
|
+
Check that the session is running inside Claude Code:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
if [ "$CLAUDECODE" = "1" ] || [ -n "$CLAUDE_CODE_ENTRYPOINT" ]; then
|
|
33
|
+
CC_VERSION="$(claude --version 2>/dev/null | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | head -n1)"
|
|
34
|
+
if [ -n "$CC_VERSION" ] && [ "$(printf '%s\n' "2.1.91" "$CC_VERSION" | sort -V | head -n1)" = "2.1.91" ]; then
|
|
35
|
+
echo "claude-code:${CC_VERSION}"
|
|
36
|
+
else
|
|
37
|
+
echo ""
|
|
38
|
+
fi
|
|
39
|
+
else
|
|
40
|
+
echo ""
|
|
41
|
+
fi
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If the output is empty or unset, display the following error and exit:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
48
|
+
║ RUNTIME ERROR ║
|
|
49
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
50
|
+
|
|
51
|
+
/gsd:ultraplan-phase requires Claude Code.
|
|
52
|
+
ultraplan is not available in this runtime.
|
|
53
|
+
|
|
54
|
+
Use /gsd:plan-phase for local planning instead.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
</step>
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
<step name="initialize">
|
|
62
|
+
|
|
63
|
+
Parse phase number from `$ARGUMENTS`. If no phase number is provided, detect the next
|
|
64
|
+
unplanned phase from the roadmap (same logic as /gsd:plan-phase).
|
|
65
|
+
|
|
66
|
+
Load GSD phase context:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/get-shit-done/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi
|
|
70
|
+
INIT=$(gsd_run query init.plan-phase "$PHASE")
|
|
71
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Parse JSON for: `phase_found`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`,
|
|
75
|
+
`phase_dir`, `roadmap_path`, `requirements_path`, `research_path`, `planning_exists`.
|
|
76
|
+
|
|
77
|
+
**If `planning_exists` is false:** Error and exit:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
No .planning directory found. Initialize the project first:
|
|
81
|
+
|
|
82
|
+
/gsd:new-project
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**If `phase_found` is false:** Error with the phase number provided and exit.
|
|
86
|
+
|
|
87
|
+
Display detected phase:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
Phase {N}: {phase name}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
</step>
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
<step name="build_prompt">
|
|
98
|
+
|
|
99
|
+
Build the ultraplan prompt from GSD context.
|
|
100
|
+
|
|
101
|
+
1. Read the phase scope from ROADMAP.md — extract the goal, deliverables, and scope for
|
|
102
|
+
the target phase.
|
|
103
|
+
|
|
104
|
+
2. Read REQUIREMENTS.md if it exists (`requirements_path` is not null) — extract a
|
|
105
|
+
concise summary (key requirements relevant to this phase, not the full document).
|
|
106
|
+
|
|
107
|
+
3. Read RESEARCH.md if it exists (`research_path` is not null) — extract a concise
|
|
108
|
+
summary of technical findings. Including this reduces redundant cloud research.
|
|
109
|
+
|
|
110
|
+
Construct the prompt:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
Plan phase {phase_number}: {phase_name}
|
|
114
|
+
|
|
115
|
+
## Phase Scope (from ROADMAP.md)
|
|
116
|
+
|
|
117
|
+
{phase scope block extracted from ROADMAP.md}
|
|
118
|
+
|
|
119
|
+
## Requirements Context
|
|
120
|
+
|
|
121
|
+
{requirements summary, or "No REQUIREMENTS.md found — infer from phase scope."}
|
|
122
|
+
|
|
123
|
+
## Existing Research
|
|
124
|
+
|
|
125
|
+
{research summary, or "No RESEARCH.md found — research from scratch."}
|
|
126
|
+
|
|
127
|
+
## Output Format
|
|
128
|
+
|
|
129
|
+
Produce a GSD PLAN.md with the following YAML frontmatter:
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
phase: "{padded_phase}-{phase_slug}"
|
|
133
|
+
plan: "{padded_phase}-01"
|
|
134
|
+
type: "feature"
|
|
135
|
+
wave: 1
|
|
136
|
+
depends_on: []
|
|
137
|
+
files_modified: []
|
|
138
|
+
autonomous: true
|
|
139
|
+
must_haves:
|
|
140
|
+
truths: []
|
|
141
|
+
artifacts: []
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
Then a ## Plan section with numbered tasks. Each task should have:
|
|
145
|
+
- A clear imperative title
|
|
146
|
+
- Files to create or modify
|
|
147
|
+
- Specific implementation steps
|
|
148
|
+
|
|
149
|
+
Keep the plan focused and executable.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
</step>
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
<step name="return_path_card">
|
|
157
|
+
|
|
158
|
+
Display the return-path instructions **before** triggering ultraplan so they are visible
|
|
159
|
+
in the terminal scroll-back after ultraplan launches:
|
|
160
|
+
|
|
161
|
+
```text
|
|
162
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
163
|
+
WHEN THE PLAN IS READY — WHAT TO DO
|
|
164
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
165
|
+
|
|
166
|
+
When ◆ ultraplan ready appears in your terminal:
|
|
167
|
+
|
|
168
|
+
1. Open the session link in your browser
|
|
169
|
+
2. Review the plan — use inline comments and emoji reactions to give feedback
|
|
170
|
+
3. Ask Claude to revise until you're satisfied
|
|
171
|
+
4. Click "Approve plan and teleport back to terminal"
|
|
172
|
+
5. At the terminal dialog, choose Cancel ← saves the plan to a file
|
|
173
|
+
6. Note the file path Claude prints
|
|
174
|
+
7. Run: /gsd:import --from <the file path>
|
|
175
|
+
|
|
176
|
+
/gsd:import will run conflict detection, convert to GSD format,
|
|
177
|
+
validate via plan-checker, update ROADMAP.md, and commit.
|
|
178
|
+
|
|
179
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
180
|
+
Launching ultraplan for Phase {N}: {phase_name}...
|
|
181
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
</step>
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
<step name="trigger">
|
|
189
|
+
|
|
190
|
+
Trigger ultraplan with the constructed prompt:
|
|
191
|
+
|
|
192
|
+
```text
|
|
193
|
+
/ultraplan {constructed prompt from build_prompt step}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Your terminal will show a `◇ ultraplan` status indicator while the remote session works.
|
|
197
|
+
Use `/tasks` to open the detail view with the session link, agent activity, and a stop action.
|
|
198
|
+
|
|
199
|
+
</step>
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Safe git revert workflow. Rolls back GSD phase or plan commits using the phase manifest with dependency checks and a confirmation gate. Uses git revert --no-commit (NEVER git reset) to preserve history.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
@~/.claude/get-shit-done/references/ui-brand.md
|
|
7
|
+
@~/.claude/get-shit-done/references/gate-prompts.md
|
|
8
|
+
</required_reading>
|
|
9
|
+
|
|
10
|
+
<process>
|
|
11
|
+
|
|
12
|
+
<step name="banner" priority="first">
|
|
13
|
+
Display the stage banner:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
17
|
+
GSD ► UNDO
|
|
18
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
```
|
|
20
|
+
</step>
|
|
21
|
+
|
|
22
|
+
<step name="parse_arguments">
|
|
23
|
+
Parse $ARGUMENTS for the undo mode:
|
|
24
|
+
|
|
25
|
+
- `--last N` → MODE=last, COUNT=N (integer, default 10 if N missing)
|
|
26
|
+
- `--phase NN` → MODE=phase, TARGET_PHASE=NN (two-digit phase number)
|
|
27
|
+
- `--plan NN-MM` → MODE=plan, TARGET_PLAN=NN-MM (phase-plan ID)
|
|
28
|
+
|
|
29
|
+
If no valid argument is provided, display usage and exit:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Usage: /gsd:undo --last N | --phase NN | --plan NN-MM
|
|
33
|
+
|
|
34
|
+
Modes:
|
|
35
|
+
--last N Show last N GSD commits for interactive selection
|
|
36
|
+
--phase NN Revert all commits for phase NN
|
|
37
|
+
--plan NN-MM Revert all commits for plan NN-MM
|
|
38
|
+
|
|
39
|
+
Examples:
|
|
40
|
+
/gsd:undo --last 5
|
|
41
|
+
/gsd:undo --phase 03
|
|
42
|
+
/gsd:undo --plan 03-02
|
|
43
|
+
```
|
|
44
|
+
</step>
|
|
45
|
+
|
|
46
|
+
<step name="gather_commits">
|
|
47
|
+
Based on MODE, gather candidate commits.
|
|
48
|
+
|
|
49
|
+
**MODE=last:**
|
|
50
|
+
|
|
51
|
+
Run:
|
|
52
|
+
```bash
|
|
53
|
+
git log --oneline --no-merges -${COUNT}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Filter for GSD conventional commits matching `type(scope): message` pattern (e.g., `feat(04-01):`, `docs(03):`, `fix(02-03):`).
|
|
57
|
+
|
|
58
|
+
Display a numbered list of matching commits:
|
|
59
|
+
```
|
|
60
|
+
Recent GSD commits:
|
|
61
|
+
1. abc1234 feat(04-01): implement auth endpoint
|
|
62
|
+
2. def5678 docs(03-02): complete plan summary
|
|
63
|
+
3. ghi9012 fix(02-03): correct validation logic
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
68
|
+
Use AskUserQuestion to ask:
|
|
69
|
+
- question: "Which commits to revert? Enter numbers (e.g., 1,3) or 'all'"
|
|
70
|
+
- header: "Select"
|
|
71
|
+
|
|
72
|
+
Parse the user's selection into COMMITS list.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
**MODE=phase:**
|
|
77
|
+
|
|
78
|
+
Read `.planning/.phase-manifest.json` if it exists.
|
|
79
|
+
|
|
80
|
+
If the file exists and `manifest.phases?.[TARGET_PHASE]?.commits` is a non-empty array:
|
|
81
|
+
- Use `manifest.phases[TARGET_PHASE].commits` entries as COMMITS (each entry is a commit hash)
|
|
82
|
+
|
|
83
|
+
If the file does not exist, or `manifest.phases?.[TARGET_PHASE]` is missing:
|
|
84
|
+
- Display: "Manifest has no entry for phase ${TARGET_PHASE} (or file missing), falling back to git log search"
|
|
85
|
+
- Fallback: run git log and filter for the target phase scope:
|
|
86
|
+
```bash
|
|
87
|
+
git log --oneline --no-merges --all | grep -E "\(0*${TARGET_PHASE}(-[0-9]+)?\):" | head -50
|
|
88
|
+
```
|
|
89
|
+
- Use matching commits as COMMITS
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
**MODE=plan:**
|
|
94
|
+
|
|
95
|
+
Run:
|
|
96
|
+
```bash
|
|
97
|
+
git log --oneline --no-merges --all | grep -E "\(${TARGET_PLAN}\)" | head -50
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Use matching commits as COMMITS.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
**Empty check:**
|
|
105
|
+
|
|
106
|
+
If COMMITS is empty after gathering:
|
|
107
|
+
```
|
|
108
|
+
No commits found for ${MODE} ${TARGET}. Nothing to revert.
|
|
109
|
+
```
|
|
110
|
+
Exit cleanly.
|
|
111
|
+
</step>
|
|
112
|
+
|
|
113
|
+
<step name="dependency_check">
|
|
114
|
+
**Applies when MODE=phase or MODE=plan.**
|
|
115
|
+
|
|
116
|
+
Skip this step entirely for MODE=last.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
**MODE=phase:**
|
|
121
|
+
|
|
122
|
+
Read `.planning/ROADMAP.md` inline.
|
|
123
|
+
|
|
124
|
+
Search for phases that list a dependency on the target phase. Look for patterns like:
|
|
125
|
+
- "Depends on: Phase ${TARGET_PHASE}"
|
|
126
|
+
- "Depends on: ${TARGET_PHASE}"
|
|
127
|
+
- "depends_on: [${TARGET_PHASE}]"
|
|
128
|
+
|
|
129
|
+
For each dependent phase N found:
|
|
130
|
+
1. Check if `.planning/phases/${N}-*/` directory exists
|
|
131
|
+
2. If directory exists, check for any PLAN.md or SUMMARY.md files inside it
|
|
132
|
+
|
|
133
|
+
If any downstream phase has started work, collect warnings:
|
|
134
|
+
```
|
|
135
|
+
⚠ Downstream dependency detected:
|
|
136
|
+
Phase ${N} depends on Phase ${TARGET_PHASE} and has started work.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
**MODE=plan:**
|
|
142
|
+
|
|
143
|
+
Extract the phase number from TARGET_PLAN (the NN part of NN-MM). Extract the plan number (the MM part).
|
|
144
|
+
|
|
145
|
+
Look for later plans in the same phase directory (`.planning/phases/${NN}-*/`). For each later plan (plans with number > MM):
|
|
146
|
+
1. Read the later plan's PLAN.md
|
|
147
|
+
2. Check if its `<files>` sections or `consumes` fields reference outputs from the target plan
|
|
148
|
+
|
|
149
|
+
If any later plan references the target plan's outputs, collect warnings:
|
|
150
|
+
```
|
|
151
|
+
⚠ Intra-phase dependency detected:
|
|
152
|
+
Plan ${LATER_PLAN} in phase ${NN} references outputs from plan ${TARGET_PLAN}.
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
If any warnings exist (from either mode):
|
|
158
|
+
- Display all warnings
|
|
159
|
+
- Use AskUserQuestion with approve-revise-abort pattern:
|
|
160
|
+
- question: "Downstream work depends on the target being reverted. Proceed anyway?"
|
|
161
|
+
- header: "Confirm"
|
|
162
|
+
- options: Proceed | Abort
|
|
163
|
+
|
|
164
|
+
If user selects "Abort": exit with "Revert cancelled. No changes made."
|
|
165
|
+
</step>
|
|
166
|
+
|
|
167
|
+
<step name="confirm_revert">
|
|
168
|
+
Display the confirmation gate using approve-revise-abort pattern from gate-prompts.md.
|
|
169
|
+
|
|
170
|
+
Show:
|
|
171
|
+
```
|
|
172
|
+
The following commits will be reverted (in reverse chronological order):
|
|
173
|
+
|
|
174
|
+
{hash} — {message}
|
|
175
|
+
{hash} — {message}
|
|
176
|
+
...
|
|
177
|
+
|
|
178
|
+
Total: {N} commit(s) to revert
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Use AskUserQuestion:
|
|
182
|
+
- question: "Proceed with revert?"
|
|
183
|
+
- header: "Approve?"
|
|
184
|
+
- options: Approve | Abort
|
|
185
|
+
|
|
186
|
+
If "Abort": display "Revert cancelled. No changes made." and exit.
|
|
187
|
+
If "Approve": ask for a reason:
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
AskUserQuestion(
|
|
191
|
+
header: "Reason",
|
|
192
|
+
question: "Brief reason for the revert (used in commit message):",
|
|
193
|
+
options: []
|
|
194
|
+
)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Store the response as REVERT_REASON. Continue to execute_revert.
|
|
198
|
+
</step>
|
|
199
|
+
|
|
200
|
+
<step name="execute_revert">
|
|
201
|
+
**HARD CONSTRAINT: Use git revert --no-commit. NEVER use git reset (except for conflict cleanup as documented below).**
|
|
202
|
+
|
|
203
|
+
**Dirty-tree guard (run first, before any revert):**
|
|
204
|
+
|
|
205
|
+
Run `git status --porcelain`. If the output is non-empty, display the dirty files and abort:
|
|
206
|
+
```
|
|
207
|
+
Working tree has uncommitted changes. Commit or stash them before running /gsd:undo.
|
|
208
|
+
```
|
|
209
|
+
Exit immediately — do not proceed to any revert operations.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
Sort COMMITS in reverse chronological order (newest first). If commits came from git log (already newest-first), they are already in correct order.
|
|
214
|
+
|
|
215
|
+
For each commit hash in COMMITS:
|
|
216
|
+
```bash
|
|
217
|
+
git revert --no-commit ${HASH}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
If any revert fails (merge conflict or error):
|
|
221
|
+
1. Display the error message
|
|
222
|
+
2. Run cleanup — handle both first-call and mid-sequence cases:
|
|
223
|
+
```bash
|
|
224
|
+
# Try git revert --abort first (works if this is the first failed revert)
|
|
225
|
+
git revert --abort 2>/dev/null
|
|
226
|
+
# If prior --no-commit reverts already staged cleanly before this failure,
|
|
227
|
+
# revert --abort may be a no-op. Clean up staged and working tree changes:
|
|
228
|
+
git reset HEAD 2>/dev/null
|
|
229
|
+
git restore . 2>/dev/null
|
|
230
|
+
```
|
|
231
|
+
3. Display:
|
|
232
|
+
```
|
|
233
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
234
|
+
║ ERROR ║
|
|
235
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
236
|
+
|
|
237
|
+
Revert failed on commit ${HASH}.
|
|
238
|
+
Likely cause: merge conflict with subsequent changes.
|
|
239
|
+
|
|
240
|
+
**To fix:** Resolve the conflict manually or revert commits individually.
|
|
241
|
+
All pending reverts have been aborted — working tree is clean.
|
|
242
|
+
```
|
|
243
|
+
4. Exit with error.
|
|
244
|
+
|
|
245
|
+
After all reverts are staged successfully, create a single commit:
|
|
246
|
+
|
|
247
|
+
For MODE=phase:
|
|
248
|
+
```bash
|
|
249
|
+
git commit -m "revert(${TARGET_PHASE}): undo phase ${TARGET_PHASE} — ${REVERT_REASON}"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
For MODE=plan:
|
|
253
|
+
```bash
|
|
254
|
+
git commit -m "revert(${TARGET_PLAN}): undo plan ${TARGET_PLAN} — ${REVERT_REASON}"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
For MODE=last:
|
|
258
|
+
```bash
|
|
259
|
+
git commit -m "revert: undo ${N} selected commits — ${REVERT_REASON}"
|
|
260
|
+
```
|
|
261
|
+
</step>
|
|
262
|
+
|
|
263
|
+
<step name="summary">
|
|
264
|
+
Display the completion banner:
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
268
|
+
GSD ► UNDO COMPLETE ✓
|
|
269
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Show summary:
|
|
273
|
+
```
|
|
274
|
+
✓ ${N} commit(s) reverted
|
|
275
|
+
✓ Single revert commit created: ${REVERT_HASH}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Show next steps:
|
|
279
|
+
```
|
|
280
|
+
───────────────────────────────────────────────────────────────
|
|
281
|
+
|
|
282
|
+
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
283
|
+
|
|
284
|
+
**Review state** — verify project is in expected state after revert
|
|
285
|
+
|
|
286
|
+
/clear then:
|
|
287
|
+
|
|
288
|
+
/gsd:progress
|
|
289
|
+
|
|
290
|
+
───────────────────────────────────────────────────────────────
|
|
291
|
+
|
|
292
|
+
**Also available:**
|
|
293
|
+
- `/gsd:execute-phase ${PHASE}` — re-execute if needed
|
|
294
|
+
- `/gsd:undo --last 1` — undo the revert itself if something went wrong
|
|
295
|
+
|
|
296
|
+
───────────────────────────────────────────────────────────────
|
|
297
|
+
```
|
|
298
|
+
</step>
|
|
299
|
+
|
|
300
|
+
</process>
|
|
301
|
+
|
|
302
|
+
<success_criteria>
|
|
303
|
+
- [ ] Arguments parsed correctly for all three modes
|
|
304
|
+
- [ ] --phase mode reads .planning/.phase-manifest.json using manifest.phases[TARGET_PHASE].commits
|
|
305
|
+
- [ ] --phase mode falls back to git log if manifest entry missing
|
|
306
|
+
- [ ] Dependency check warns when downstream phases have started (MODE=phase)
|
|
307
|
+
- [ ] Dependency check warns when later plans reference target plan outputs (MODE=plan)
|
|
308
|
+
- [ ] Dirty-tree guard aborts if working tree has uncommitted changes
|
|
309
|
+
- [ ] Confirmation gate shown before any revert execution
|
|
310
|
+
- [ ] Reverts use git revert --no-commit in reverse chronological order
|
|
311
|
+
- [ ] Single commit created after all reverts staged
|
|
312
|
+
- [ ] Error handling cleans up both first-call and mid-sequence conflict cases
|
|
313
|
+
- [ ] git reset --hard is NEVER used anywhere in this workflow
|
|
314
|
+
</success_criteria>
|