@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,346 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Cross-AI plan convergence loop — automates the manual chain:
|
|
3
|
+
gsd-plan-phase N → gsd-review N --codex → gsd-plan-phase N --reviews → gsd-review N --codex → ...
|
|
4
|
+
Each step runs inside an isolated Agent that calls the corresponding Skill.
|
|
5
|
+
Orchestrator only does: init, loop control, parse CYCLE_SUMMARY for HIGH count, stall detection, escalation.
|
|
6
|
+
</purpose>
|
|
7
|
+
|
|
8
|
+
<required_reading>
|
|
9
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
10
|
+
|
|
11
|
+
@$HOME/.claude/get-shit-done/references/revision-loop.md
|
|
12
|
+
@$HOME/.claude/get-shit-done/references/gates.md
|
|
13
|
+
@$HOME/.claude/get-shit-done/references/agent-contracts.md
|
|
14
|
+
</required_reading>
|
|
15
|
+
|
|
16
|
+
<process>
|
|
17
|
+
|
|
18
|
+
## 1. Parse and Normalize Arguments
|
|
19
|
+
|
|
20
|
+
Extract from $ARGUMENTS: phase number, reviewer flags (`--codex`, `--gemini`, `--claude`, `--opencode`, `--ollama`, `--lm-studio`, `--llama-cpp`, `--all`), `--max-cycles N`, `--text`, `--ws`.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
PHASE=$(echo "$ARGUMENTS" | grep -oE '[0-9]+\.?[0-9]*' | head -1)
|
|
24
|
+
|
|
25
|
+
REVIEWER_FLAGS=""
|
|
26
|
+
echo "$ARGUMENTS" | grep -q '\-\-codex' && REVIEWER_FLAGS="$REVIEWER_FLAGS --codex"
|
|
27
|
+
echo "$ARGUMENTS" | grep -q '\-\-gemini' && REVIEWER_FLAGS="$REVIEWER_FLAGS --gemini"
|
|
28
|
+
echo "$ARGUMENTS" | grep -q '\-\-claude' && REVIEWER_FLAGS="$REVIEWER_FLAGS --claude"
|
|
29
|
+
echo "$ARGUMENTS" | grep -q '\-\-opencode' && REVIEWER_FLAGS="$REVIEWER_FLAGS --opencode"
|
|
30
|
+
echo "$ARGUMENTS" | grep -q '\-\-ollama' && REVIEWER_FLAGS="$REVIEWER_FLAGS --ollama"
|
|
31
|
+
echo "$ARGUMENTS" | grep -q '\-\-lm-studio' && REVIEWER_FLAGS="$REVIEWER_FLAGS --lm-studio"
|
|
32
|
+
echo "$ARGUMENTS" | grep -q '\-\-llama-cpp' && REVIEWER_FLAGS="$REVIEWER_FLAGS --llama-cpp"
|
|
33
|
+
echo "$ARGUMENTS" | grep -q '\-\-all' && REVIEWER_FLAGS="$REVIEWER_FLAGS --all"
|
|
34
|
+
if [ -z "$REVIEWER_FLAGS" ]; then REVIEWER_FLAGS="--codex"; fi
|
|
35
|
+
|
|
36
|
+
MAX_CYCLES=$(echo "$ARGUMENTS" | grep -oE '\-\-max-cycles\s+[0-9]+' | awk '{print $2}')
|
|
37
|
+
if [ -z "$MAX_CYCLES" ]; then MAX_CYCLES=3; fi
|
|
38
|
+
|
|
39
|
+
GSD_WS=""
|
|
40
|
+
echo "$ARGUMENTS" | grep -qE '\-\-ws\s+\S+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE '\-\-ws\s+\S+')
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 1.5. Config Gate (feature disabled by default)
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
_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
|
|
47
|
+
CONVERGENCE_ENABLED=$(gsd_run query config-get workflow.plan_review_convergence 2>/dev/null || echo "false")
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**If `CONVERGENCE_ENABLED` is not `"true"`:** Display and exit:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
gsd-plan-review-convergence is disabled (workflow.plan_review_convergence=false).
|
|
54
|
+
|
|
55
|
+
This feature automates the plan→review→replan loop using external AI reviewers.
|
|
56
|
+
Enable it with:
|
|
57
|
+
|
|
58
|
+
gsd config-set workflow.plan_review_convergence true
|
|
59
|
+
|
|
60
|
+
Then re-run: /gsd:plan-review-convergence {PHASE}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 2. Initialize
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "$PHASE")
|
|
67
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Parse JSON for: `phase_dir`, `phase_number`, `padded_phase`, `phase_name`, `has_plans`, `plan_count`, `commit_docs`, `text_mode`, `response_language`.
|
|
71
|
+
|
|
72
|
+
**If `response_language` is set:** All user-facing output should be in `{response_language}`.
|
|
73
|
+
|
|
74
|
+
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.
|
|
75
|
+
|
|
76
|
+
## 3. Validate Phase + Pre-flight Gate
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}")
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**If `found` is false:** Error with available phases. Exit.
|
|
83
|
+
|
|
84
|
+
Display startup banner:
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
88
|
+
GSD ► PLAN CONVERGENCE — Phase {phase_number}
|
|
89
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
90
|
+
|
|
91
|
+
Reviewers: {REVIEWER_FLAGS}
|
|
92
|
+
Max cycles: {MAX_CYCLES}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 4. Initial Planning (if no plans exist)
|
|
96
|
+
|
|
97
|
+
**If `has_plans` is true:** Skip to step 5. Display: `Plans found: {plan_count} PLAN.md files — skipping initial planning.`
|
|
98
|
+
|
|
99
|
+
**If `has_plans` is false:**
|
|
100
|
+
|
|
101
|
+
Display: `◆ No plans found — spawning initial planning agent...`
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
Agent(
|
|
105
|
+
description="Initial planning Phase {PHASE}",
|
|
106
|
+
prompt="Run /gsd:plan-phase for Phase {PHASE}.
|
|
107
|
+
|
|
108
|
+
Execute: Skill(skill='gsd-plan-phase', args='{PHASE} {GSD_WS}')
|
|
109
|
+
|
|
110
|
+
Complete the full planning workflow. Do NOT return until planning is complete and PLAN.md files are committed.",
|
|
111
|
+
mode="auto"
|
|
112
|
+
)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
After agent returns, verify plans were created:
|
|
116
|
+
```bash
|
|
117
|
+
PLAN_COUNT=$(ls ${phase_dir}/${padded_phase}-*-PLAN.md 2>/dev/null | wc -l)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
If PLAN_COUNT == 0: Error — initial planning failed. Exit.
|
|
121
|
+
|
|
122
|
+
Display: `Initial planning complete: ${PLAN_COUNT} PLAN.md files created.`
|
|
123
|
+
|
|
124
|
+
## 5. Convergence Loop
|
|
125
|
+
|
|
126
|
+
Initialize loop variables:
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
cycle = 0
|
|
130
|
+
prev_high_count = Infinity
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 5a. Review (Spawn Agent)
|
|
134
|
+
|
|
135
|
+
Increment `cycle`.
|
|
136
|
+
|
|
137
|
+
Display: `◆ Cycle {cycle}/{MAX_CYCLES} — spawning review agent...`
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
Agent(
|
|
141
|
+
description="Cross-AI review Phase {PHASE} cycle {cycle}",
|
|
142
|
+
prompt="Run /gsd:review for Phase {PHASE}.
|
|
143
|
+
|
|
144
|
+
Execute: Skill(skill='gsd-review', args='--phase {PHASE} {REVIEWER_FLAGS} {GSD_WS}')
|
|
145
|
+
|
|
146
|
+
Complete the full review workflow. Do NOT return until REVIEWS.md is committed.
|
|
147
|
+
|
|
148
|
+
IMPORTANT — CYCLE_SUMMARY contract (required):
|
|
149
|
+
Your final response MUST include a machine-readable line of exactly this form:
|
|
150
|
+
|
|
151
|
+
CYCLE_SUMMARY: current_high=<N>
|
|
152
|
+
|
|
153
|
+
Where <N> is the integer count of HIGH-severity concerns that REMAIN UNRESOLVED in this cycle's findings.
|
|
154
|
+
|
|
155
|
+
Counting rules:
|
|
156
|
+
INCLUDE in the count:
|
|
157
|
+
- Newly raised HIGHs in this cycle
|
|
158
|
+
- PARTIALLY RESOLVED HIGHs: concern acknowledged and a mitigation is in progress, but not yet verified/completed
|
|
159
|
+
- Previously raised HIGHs that are still unresolved
|
|
160
|
+
|
|
161
|
+
EXCLUDE from the count:
|
|
162
|
+
- FULLY RESOLVED HIGHs: concern addressed with verification complete (closed ticket, verification log, or reviewer sign-off)
|
|
163
|
+
- HIGH mentions in retrospective/summary tables comparing cycles
|
|
164
|
+
- Quoted excerpts from prior reviews referencing past HIGH items
|
|
165
|
+
|
|
166
|
+
Definitions:
|
|
167
|
+
PARTIALLY RESOLVED — concern acknowledged and mitigation is in progress but not yet verified/completed (e.g., open ticket exists but fix not landed).
|
|
168
|
+
FULLY RESOLVED — concern addressed with verification complete (closed ticket, verification log, or explicit reviewer sign-off confirming closure).
|
|
169
|
+
|
|
170
|
+
Your final response MUST also include this section immediately after the CYCLE_SUMMARY line:
|
|
171
|
+
|
|
172
|
+
## Current HIGH Concerns
|
|
173
|
+
[List each unresolved HIGH with a brief description, one per bullet]
|
|
174
|
+
[If none: write exactly 'None.']",
|
|
175
|
+
mode="auto"
|
|
176
|
+
)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Source-grounding pass (config: `plan_review.source_grounding`, default on)
|
|
180
|
+
|
|
181
|
+
Run this pass unless `plan_review.source_grounding` is `false`. It verifies every symbol the plan cites against the project source before approval, catching hallucinated symbols at review time instead of execution time.
|
|
182
|
+
|
|
183
|
+
1. **Enumerate cited symbols.** List every referenced symbol by kind, quoting the plan line for each (coverage must be auditable): decorators (`@name`), classes/methods (`Class.method`), functions (`module.function`), CLI flags (`--name`), file paths, dataclass/struct fields.
|
|
184
|
+
2. **Exclude new artifacts.** Do NOT verify symbols the plan declares under its "Artifacts this phase produces" section — those are created by this phase, not references to existing code.
|
|
185
|
+
3. **Resolve each remaining symbol** using the adapter named by `plan_review.source_grounding_authority` (default `grep`):
|
|
186
|
+
- `grep` — ripgrep / Read the source; confirm the name appears as a real declaration.
|
|
187
|
+
- `intel` — consult `.planning/intel/API-SURFACE.md` / `api-map.json` (only when `intel.enabled`).
|
|
188
|
+
Record one verdict per symbol: **VERIFIED** (quote `file:line`), **MISSING** (adapter can check this language/kind and the symbol is absent), **AMBIGUOUS** (multiple candidates), or **UNCHECKABLE** (adapter cannot analyze this language/kind — e.g. non-JS under `intel`, or any signature under `grep`). Never treat UNCHECKABLE as verified or missing.
|
|
189
|
+
4. **Severity & gating:**
|
|
190
|
+
- **MISSING** at authority `grep`/`intel` → `needs-acknowledgement`: the plan proceeds only if the author confirms the symbol is genuinely new or dynamically resolved, and that acknowledgement is recorded. A hard block is reserved for higher-authority adapters (LSP/SCIP) that can prove absence.
|
|
191
|
+
- **AMBIGUOUS** → MEDIUM. **UNCHECKABLE** → INFO.
|
|
192
|
+
- Signature mismatches cannot be asserted under `grep`/`intel`; report the signature as UNCHECKABLE.
|
|
193
|
+
5. **Coverage block.** Append a "Verification coverage" section to `REVIEWS.md` listing every UNCHECKABLE/skipped symbol and why — a clean review must never silently mean "nothing was checked."
|
|
194
|
+
|
|
195
|
+
After agent returns, verify REVIEWS.md exists:
|
|
196
|
+
```bash
|
|
197
|
+
REVIEWS_FILE=$(ls ${phase_dir}/${padded_phase}-REVIEWS.md 2>/dev/null)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
If REVIEWS_FILE is empty: Error — review agent did not produce REVIEWS.md. Exit.
|
|
201
|
+
|
|
202
|
+
### 5b. Extract HIGH Count from CYCLE_SUMMARY Contract
|
|
203
|
+
|
|
204
|
+
**Do NOT grep REVIEWS.md for HIGH count.** REVIEWS.md accumulates history across cycles — resolved HIGHs from prior cycles remain in the file as audit trail, inflating a raw grep count and causing false stall detection.
|
|
205
|
+
|
|
206
|
+
Parse HIGH_COUNT from the review agent's return message via the CYCLE_SUMMARY contract:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Extract the integer from "CYCLE_SUMMARY: current_high=N" in the agent's return message
|
|
210
|
+
HIGH_COUNT=$(echo "$REVIEW_AGENT_RETURN" | grep -oE 'CYCLE_SUMMARY:\s*current_high=[0-9]+' | head -1 | grep -oE '[0-9]+$')
|
|
211
|
+
|
|
212
|
+
if [ -z "$HIGH_COUNT" ]; then
|
|
213
|
+
# Distinguish malformed contract from completely absent contract
|
|
214
|
+
if echo "$REVIEW_AGENT_RETURN" | grep -q 'CYCLE_SUMMARY:'; then
|
|
215
|
+
echo "CYCLE_SUMMARY present but current_high is malformed — expected integer, got non-numeric value. Retry or switch reviewer."
|
|
216
|
+
else
|
|
217
|
+
echo "Review agent did not honor the CYCLE_SUMMARY contract — cannot determine HIGH count. Retry or switch reviewer."
|
|
218
|
+
fi
|
|
219
|
+
exit 1
|
|
220
|
+
fi
|
|
221
|
+
|
|
222
|
+
# Extract the ## Current HIGH Concerns section from the agent's return message
|
|
223
|
+
HIGH_LINES=$(echo "$REVIEW_AGENT_RETURN" | awk '/^## Current HIGH Concerns/{found=1; next} found && /^##/{exit} found{print}')
|
|
224
|
+
|
|
225
|
+
if [ "${HIGH_COUNT}" -gt 0 ] && [ -z "${HIGH_LINES}" ]; then
|
|
226
|
+
echo "⚠ Review agent's CYCLE_SUMMARY reports ${HIGH_COUNT} HIGHs but did not provide ## Current HIGH Concerns section — continuing with incomplete escalation details."
|
|
227
|
+
fi
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**If HIGH_COUNT == 0 (converged):**
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state planned-phase --phase "${PHASE}" --name "${phase_name}" --plans "${PLAN_COUNT}"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Display:
|
|
237
|
+
```text
|
|
238
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
239
|
+
GSD ► CONVERGENCE COMPLETE ✓
|
|
240
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
241
|
+
|
|
242
|
+
Phase {phase_number} converged in {cycle} cycle(s).
|
|
243
|
+
No HIGH concerns remaining.
|
|
244
|
+
|
|
245
|
+
REVIEWS.md: {REVIEWS_FILE}
|
|
246
|
+
Next: /gsd:execute-phase {PHASE}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Exit — convergence achieved.
|
|
250
|
+
|
|
251
|
+
**If HIGH_COUNT > 0:** Continue to 5c.
|
|
252
|
+
|
|
253
|
+
### 5c. Stall Detection + Escalation Check
|
|
254
|
+
|
|
255
|
+
Display: `◆ Cycle {cycle}/{MAX_CYCLES} — {HIGH_COUNT} HIGH concerns found`
|
|
256
|
+
|
|
257
|
+
**Stall detection:** If `HIGH_COUNT >= prev_high_count`:
|
|
258
|
+
```text
|
|
259
|
+
⚠ Convergence stalled — HIGH concern count not decreasing
|
|
260
|
+
({HIGH_COUNT} HIGH concerns, previous cycle had {prev_high_count})
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Max cycles check:** If `cycle >= MAX_CYCLES`:
|
|
264
|
+
|
|
265
|
+
If `TEXT_MODE` is true, present as plain-text numbered list:
|
|
266
|
+
```text
|
|
267
|
+
Plan convergence did not complete after {MAX_CYCLES} cycles.
|
|
268
|
+
{HIGH_COUNT} HIGH concerns remain:
|
|
269
|
+
|
|
270
|
+
{HIGH_LINES}
|
|
271
|
+
|
|
272
|
+
How would you like to proceed?
|
|
273
|
+
|
|
274
|
+
1. Proceed anyway — Accept plans with remaining HIGH concerns and move to execution
|
|
275
|
+
2. Manual review — Stop here, review REVIEWS.md and address concerns manually
|
|
276
|
+
|
|
277
|
+
Enter number:
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Otherwise use AskUserQuestion:
|
|
281
|
+
```js
|
|
282
|
+
AskUserQuestion([
|
|
283
|
+
{
|
|
284
|
+
question: "Plan convergence did not complete after {MAX_CYCLES} cycles. {HIGH_COUNT} HIGH concerns remain:\n\n{HIGH_LINES}\n\nHow would you like to proceed?",
|
|
285
|
+
header: "Convergence",
|
|
286
|
+
multiSelect: false,
|
|
287
|
+
options: [
|
|
288
|
+
{ label: "Proceed anyway", description: "Accept plans with remaining HIGH concerns and move to execution" },
|
|
289
|
+
{ label: "Manual review", description: "Stop here — review REVIEWS.md and address concerns manually" }
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
])
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
If "Proceed anyway": Display final status and exit.
|
|
296
|
+
If "Manual review":
|
|
297
|
+
```text
|
|
298
|
+
Review the concerns in: {REVIEWS_FILE}
|
|
299
|
+
|
|
300
|
+
To replan manually: /gsd:plan-phase {PHASE} --reviews
|
|
301
|
+
To restart loop: /gsd:plan-review-convergence {PHASE} {REVIEWER_FLAGS}
|
|
302
|
+
```
|
|
303
|
+
Exit workflow.
|
|
304
|
+
|
|
305
|
+
### 5d. Replan (Spawn Agent)
|
|
306
|
+
|
|
307
|
+
**If under max cycles:**
|
|
308
|
+
|
|
309
|
+
Update `prev_high_count = HIGH_COUNT`.
|
|
310
|
+
|
|
311
|
+
Display: `◆ Spawning replan agent with review feedback...`
|
|
312
|
+
|
|
313
|
+
```text
|
|
314
|
+
Agent(
|
|
315
|
+
description="Replan Phase {PHASE} with review feedback cycle {cycle}",
|
|
316
|
+
prompt="Run /gsd:plan-phase with --reviews for Phase {PHASE}.
|
|
317
|
+
|
|
318
|
+
Execute: Skill(skill='gsd-plan-phase', args='{PHASE} --reviews --skip-research {GSD_WS}')
|
|
319
|
+
|
|
320
|
+
This will replan incorporating cross-AI review feedback from REVIEWS.md.
|
|
321
|
+
Do NOT return until replanning is complete and updated PLAN.md files are committed.
|
|
322
|
+
|
|
323
|
+
IMPORTANT: When gsd-plan-phase outputs '## PLANNING COMPLETE', that means replanning is done. Return at that point.",
|
|
324
|
+
mode="auto"
|
|
325
|
+
)
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
After agent returns → go back to **step 5a** (review again).
|
|
329
|
+
|
|
330
|
+
</process>
|
|
331
|
+
|
|
332
|
+
<success_criteria>
|
|
333
|
+
- [ ] Config gate checked before running — exits with enable instructions if workflow.plan_review_convergence is false
|
|
334
|
+
- [ ] Initial planning via Agent → Skill("gsd-plan-phase") if no plans exist
|
|
335
|
+
- [ ] Review via Agent → Skill("gsd-review") — isolated, not inline; {GSD_WS} forwarded
|
|
336
|
+
- [ ] Replan via Agent → Skill("gsd-plan-phase --reviews") — isolated, not inline
|
|
337
|
+
- [ ] Orchestrator only does: init, config gate, loop control, parse CYCLE_SUMMARY for HIGH count, stall detection, escalation
|
|
338
|
+
- [ ] HIGH count extracted from review agent's CYCLE_SUMMARY return message (not by grepping REVIEWS.md)
|
|
339
|
+
- [ ] Review agent prompt defines CYCLE_SUMMARY: current_high=<N> contract with PARTIALLY/FULLY RESOLVED definitions
|
|
340
|
+
- [ ] Abort with clear error if CYCLE_SUMMARY is absent; distinguish malformed from absent
|
|
341
|
+
- [ ] Warn if HIGH_COUNT > 0 but ## Current HIGH Concerns section is absent from return message
|
|
342
|
+
- [ ] Each Agent fully completes its Skill before returning
|
|
343
|
+
- [ ] Loop exits on: no HIGH concerns (converged) OR max cycles (escalation)
|
|
344
|
+
- [ ] Stall detection reported when HIGH count not decreasing
|
|
345
|
+
- [ ] STATE.md updated on convergence completion
|
|
346
|
+
</success_criteria>
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Capture a forward-looking idea as a structured seed file with trigger conditions.
|
|
3
|
+
Seeds auto-surface during /gsd:new-milestone when trigger conditions match the
|
|
4
|
+
new milestone's scope.
|
|
5
|
+
|
|
6
|
+
Seeds beat deferred items because they:
|
|
7
|
+
- Preserve WHY the idea matters (not just WHAT)
|
|
8
|
+
- Define WHEN to surface (trigger conditions, not manual scanning)
|
|
9
|
+
- Track breadcrumbs (code references, related decisions)
|
|
10
|
+
- Auto-present at the right time via new-milestone scan
|
|
11
|
+
|
|
12
|
+
**One-shot capture**: the seed file is written immediately from the idea text alone.
|
|
13
|
+
Trigger / Why / Scope are optional enrichment — they can be provided now or added
|
|
14
|
+
later. The file is never gated behind questions.
|
|
15
|
+
</purpose>
|
|
16
|
+
|
|
17
|
+
<process>
|
|
18
|
+
|
|
19
|
+
<step name="parse-idea">
|
|
20
|
+
Parse `$ARGUMENTS` for the idea summary.
|
|
21
|
+
|
|
22
|
+
First, check for an enrich flag:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
if echo "$ARGUMENTS" | grep -qE '\-\-enrich[[:space:]]+SEED-[0-9]+'; then
|
|
26
|
+
ENRICH_TARGET=$(echo "$ARGUMENTS" | grep -oE 'SEED-[0-9]+')
|
|
27
|
+
SEED_FILE=$(ls .planning/seeds/${ENRICH_TARGET}-*.md 2>/dev/null | head -1)
|
|
28
|
+
# Skip to enrich-seed step — do not prompt for $IDEA
|
|
29
|
+
else
|
|
30
|
+
if [ -n "$ARGUMENTS" ]; then
|
|
31
|
+
IDEA="$ARGUMENTS"
|
|
32
|
+
else
|
|
33
|
+
# Ask only when no arguments at all
|
|
34
|
+
# What's the idea? (one sentence)
|
|
35
|
+
IDEA="<user response>"
|
|
36
|
+
fi
|
|
37
|
+
fi
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If `$ENRICH_TARGET` is set, skip straight to the `enrich-seed` step. Do not set `$IDEA` and do not run `create-seed-dir`, `generate-seed-id`, `write-seed`, `collect-breadcrumbs`, `commit-seed`, or `confirm`.
|
|
41
|
+
|
|
42
|
+
If `$ARGUMENTS` is non-empty and contains no `--enrich` flag, treat the full value as `$IDEA` (no prompt).
|
|
43
|
+
|
|
44
|
+
Only prompt for the idea when `$ARGUMENTS` is empty and no enrich target is present. Store the response as `$IDEA`.
|
|
45
|
+
</step>
|
|
46
|
+
|
|
47
|
+
<step name="create-seed-dir">
|
|
48
|
+
```bash
|
|
49
|
+
mkdir -p .planning/seeds
|
|
50
|
+
```
|
|
51
|
+
</step>
|
|
52
|
+
|
|
53
|
+
<step name="generate-seed-id">
|
|
54
|
+
```bash
|
|
55
|
+
# Find next seed number
|
|
56
|
+
EXISTING=$( (ls .planning/seeds/SEED-*.md 2>/dev/null || true) | wc -l )
|
|
57
|
+
NEXT=$((EXISTING + 1))
|
|
58
|
+
PADDED=$(printf "%03d" $NEXT)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Generate slug from idea summary.
|
|
62
|
+
</step>
|
|
63
|
+
|
|
64
|
+
<step name="write-seed">
|
|
65
|
+
Write `.planning/seeds/SEED-{PADDED}-{slug}.md` immediately with sensible defaults:
|
|
66
|
+
|
|
67
|
+
- `trigger_when`: default is `"when relevant"` — the seed will surface during any
|
|
68
|
+
new-milestone scan; the user can narrow it later via `--enrich`
|
|
69
|
+
- `scope`: default is `"unknown"` — the user can update it via `--enrich`
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
---
|
|
73
|
+
id: SEED-{PADDED}
|
|
74
|
+
status: dormant
|
|
75
|
+
planted: {ISO date}
|
|
76
|
+
planted_during: {current milestone/phase from STATE.md, or "unknown" if not in a GSD project}
|
|
77
|
+
trigger_when: when relevant
|
|
78
|
+
scope: unknown
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
# SEED-{PADDED}: {$IDEA}
|
|
82
|
+
|
|
83
|
+
## Why This Matters
|
|
84
|
+
|
|
85
|
+
_To be filled in. Run `/gsd:capture --seed --enrich SEED-{PADDED}` to add context._
|
|
86
|
+
|
|
87
|
+
## When to Surface
|
|
88
|
+
|
|
89
|
+
**Trigger:** when relevant
|
|
90
|
+
|
|
91
|
+
This seed will surface during `/gsd:new-milestone` when the milestone scope matches.
|
|
92
|
+
|
|
93
|
+
## Scope Estimate
|
|
94
|
+
|
|
95
|
+
**Unknown** — run `/gsd:capture --seed --enrich SEED-{PADDED}` to estimate effort.
|
|
96
|
+
|
|
97
|
+
## Breadcrumbs
|
|
98
|
+
|
|
99
|
+
_No breadcrumbs collected yet._
|
|
100
|
+
|
|
101
|
+
## Notes
|
|
102
|
+
|
|
103
|
+
_Captured via one-shot seed capture. Enrich with trigger, why, and scope at your convenience._
|
|
104
|
+
```
|
|
105
|
+
</step>
|
|
106
|
+
|
|
107
|
+
<step name="collect-breadcrumbs">
|
|
108
|
+
After writing the file, search the codebase for relevant references:
|
|
109
|
+
|
|
110
|
+
Extract one or two key terms from `$IDEA` (the most distinctive noun or phrase) and store as `$KEYWORD`.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Derive a single keyword for breadcrumb search.
|
|
114
|
+
# Lower-case, strip punctuation, take the first token longer than 2 chars.
|
|
115
|
+
KEYWORD=$(printf '%s' "$IDEA" \
|
|
116
|
+
| tr '[:upper:]' '[:lower:]' \
|
|
117
|
+
| tr -cs 'a-z0-9' '\n' \
|
|
118
|
+
| awk 'length > 2 {print; exit}')
|
|
119
|
+
KEYWORD="${KEYWORD:-seed}" # fallback to literal "seed" if extraction yields nothing
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Find files related to the idea keywords ($KEYWORD derived from $IDEA)
|
|
124
|
+
grep -rl "$KEYWORD" --include="*.ts" --include="*.js" --include="*.md" . 2>/dev/null | head -10
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Also check:
|
|
128
|
+
- Current STATE.md for related decisions
|
|
129
|
+
- ROADMAP.md for related phases
|
|
130
|
+
- todos/ for related captured ideas
|
|
131
|
+
|
|
132
|
+
If any breadcrumbs are found, update the Breadcrumbs section of the seed file.
|
|
133
|
+
Store relevant file paths as `$BREADCRUMBS`.
|
|
134
|
+
</step>
|
|
135
|
+
|
|
136
|
+
<step name="commit-seed">
|
|
137
|
+
```bash
|
|
138
|
+
_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
|
|
139
|
+
gsd_run query commit "docs: plant seed — {$IDEA}" --files .planning/seeds/SEED-{PADDED}-{slug}.md
|
|
140
|
+
```
|
|
141
|
+
</step>
|
|
142
|
+
|
|
143
|
+
<step name="confirm">
|
|
144
|
+
```text
|
|
145
|
+
✅ Seed planted: SEED-{PADDED}
|
|
146
|
+
|
|
147
|
+
"{$IDEA}"
|
|
148
|
+
File: .planning/seeds/SEED-{PADDED}-{slug}.md
|
|
149
|
+
|
|
150
|
+
Trigger and scope are set to defaults. Run `/gsd:capture --seed --enrich SEED-{PADDED}`
|
|
151
|
+
to add trigger conditions, rationale, and scope estimate at your convenience.
|
|
152
|
+
|
|
153
|
+
This seed will surface automatically when you run /gsd:new-milestone.
|
|
154
|
+
```
|
|
155
|
+
</step>
|
|
156
|
+
|
|
157
|
+
<step name="enrich-seed">
|
|
158
|
+
**Optional enrichment — only run this step when `--enrich` flag is present.**
|
|
159
|
+
|
|
160
|
+
If `--enrich` flag is in `$ARGUMENTS`:
|
|
161
|
+
- `$ENRICH_TARGET` and `$SEED_FILE` are already set by `parse-idea`. Derive `$SEED_ID` from `$ENRICH_TARGET` (e.g. `SEED_ID="$ENRICH_TARGET"`). If `$SEED_FILE` is empty, fall back to the most-recently modified file in `.planning/seeds/` and set `$SEED_ID` from its filename.
|
|
162
|
+
- Ask focused questions to build a complete seed:
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
**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.
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
AskUserQuestion(
|
|
169
|
+
header: "Trigger",
|
|
170
|
+
question: "When should this idea surface? (e.g., 'when we add user accounts', 'next major version', 'when performance becomes a priority')",
|
|
171
|
+
options: [] // freeform
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Store as `$TRIGGER`.
|
|
176
|
+
|
|
177
|
+
```text
|
|
178
|
+
AskUserQuestion(
|
|
179
|
+
header: "Why",
|
|
180
|
+
question: "Why does this matter? What problem does it solve or what opportunity does it create?",
|
|
181
|
+
options: []
|
|
182
|
+
)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Store as `$WHY`.
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
AskUserQuestion(
|
|
189
|
+
header: "Scope",
|
|
190
|
+
question: "How big is this? (rough estimate)",
|
|
191
|
+
options: [
|
|
192
|
+
{ label: "Small", description: "A few hours — could be a quick task" },
|
|
193
|
+
{ label: "Medium", description: "A phase or two — needs planning" },
|
|
194
|
+
{ label: "Large", description: "A full milestone — significant effort" }
|
|
195
|
+
]
|
|
196
|
+
)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Store as `$SCOPE`.
|
|
200
|
+
|
|
201
|
+
Update the seed file's frontmatter and sections with the gathered values:
|
|
202
|
+
- Set `trigger_when: {$TRIGGER}`
|
|
203
|
+
- Set `scope: {$SCOPE}`
|
|
204
|
+
- Fill in `## Why This Matters` with `{$WHY}`
|
|
205
|
+
- Fill in `## When to Surface` trigger detail
|
|
206
|
+
- Fill in `## Scope Estimate` elaboration
|
|
207
|
+
|
|
208
|
+
Commit the update:
|
|
209
|
+
```bash
|
|
210
|
+
gsd_run query commit "docs: enrich seed ${SEED_ID} — trigger + why + scope" --files "$SEED_FILE"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Confirm:
|
|
214
|
+
```text
|
|
215
|
+
✅ Seed enriched: ${SEED_ID}
|
|
216
|
+
Trigger: {$TRIGGER}
|
|
217
|
+
Scope: {$SCOPE}
|
|
218
|
+
```
|
|
219
|
+
</step>
|
|
220
|
+
|
|
221
|
+
</process>
|
|
222
|
+
|
|
223
|
+
<success_criteria>
|
|
224
|
+
- [ ] Seed file created in .planning/seeds/ in one step, no questions required
|
|
225
|
+
- [ ] Frontmatter includes status, trigger_when (default: "when relevant"), scope (default: "unknown")
|
|
226
|
+
- [ ] File is written BEFORE any optional enrichment questions are asked
|
|
227
|
+
- [ ] Committed to git
|
|
228
|
+
- [ ] User shown confirmation with file path
|
|
229
|
+
- [ ] Optional --enrich path available for adding trigger, why, scope post-capture
|
|
230
|
+
</success_criteria>
|