@opengsd/gsd-core 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.opencode/plugins/gsd-core.js +12 -0
- package/agents/gsd-advisor-researcher.compact.md +85 -0
- package/agents/gsd-ai-researcher.compact.md +96 -0
- package/agents/gsd-assumptions-analyzer.compact.md +81 -0
- package/agents/gsd-code-fixer.compact.md +458 -0
- package/agents/gsd-code-fixer.md +5 -5
- package/agents/gsd-code-reviewer.compact.md +269 -0
- package/agents/gsd-code-reviewer.md +15 -3
- package/agents/gsd-codebase-mapper.compact.md +760 -0
- package/agents/gsd-debug-session-manager.compact.md +345 -0
- package/agents/gsd-doc-classifier.compact.md +192 -0
- package/agents/gsd-doc-synthesizer.compact.md +200 -0
- package/agents/gsd-doc-verifier.compact.md +143 -0
- package/agents/gsd-doc-writer.compact.md +440 -0
- package/agents/gsd-dom-verifier.compact.md +138 -0
- package/agents/gsd-domain-researcher.compact.md +141 -0
- package/agents/gsd-eval-auditor.compact.md +160 -0
- package/agents/gsd-eval-planner.compact.md +137 -0
- package/agents/gsd-executor.md +63 -35
- package/agents/gsd-framework-selector.compact.md +82 -0
- package/agents/gsd-integration-checker.compact.md +245 -0
- package/agents/gsd-intel-updater.compact.md +226 -0
- package/agents/gsd-mempalace-curator.compact.md +45 -0
- package/agents/gsd-nyquist-auditor.compact.md +179 -0
- package/agents/gsd-pattern-mapper.compact.md +275 -0
- package/agents/gsd-plan-checker.md +76 -57
- package/agents/gsd-planner.md +14 -0
- package/agents/gsd-project-researcher.compact.md +587 -0
- package/agents/gsd-research-synthesizer.compact.md +212 -0
- package/agents/gsd-roadmapper.compact.md +454 -0
- package/agents/gsd-roadmapper.md +13 -0
- package/agents/gsd-security-auditor.compact.md +162 -0
- package/agents/gsd-ui-auditor.compact.md +404 -0
- package/agents/gsd-ui-checker.compact.md +277 -0
- package/agents/gsd-ui-checker.md +19 -3
- package/agents/gsd-ui-researcher.compact.md +282 -0
- package/agents/gsd-ui-researcher.md +29 -0
- package/agents/gsd-user-profiler.compact.md +108 -0
- package/agents/gsd-verifier.md +23 -1
- package/bin/install.js +444 -134
- package/commands/gsd/cleanup.md +1 -0
- package/commands/gsd/code-review.md +2 -1
- package/commands/gsd/complete-milestone.md +1 -0
- package/commands/gsd/config.md +1 -0
- package/commands/gsd/debug.md +1 -0
- package/commands/gsd/execute-phase.md +1 -1
- package/commands/gsd/graphify.md +1 -0
- package/commands/gsd/health.md +1 -0
- package/commands/gsd/mempalace-capture.md +1 -0
- package/commands/gsd/mempalace-recall.md +1 -0
- package/commands/gsd/new-milestone.md +1 -0
- package/commands/gsd/new-project.md +1 -0
- package/commands/gsd/next.md +1 -0
- package/commands/gsd/ns-workflow.md +2 -1
- package/commands/gsd/pause-work.md +1 -0
- package/commands/gsd/phase.md +2 -1
- package/commands/gsd/pr-branch.md +1 -0
- package/commands/gsd/quick-batch.md +105 -0
- package/commands/gsd/resume-work.md +1 -0
- package/commands/gsd/review-backlog.md +1 -0
- package/commands/gsd/settings.md +2 -1
- package/commands/gsd/stats.md +1 -0
- package/commands/gsd/surface.md +18 -8
- package/commands/gsd/thread.md +1 -0
- package/commands/gsd/workspace.md +1 -0
- package/commands/gsd/workstreams.md +1 -0
- package/gsd-core/bin/check-latest-version.cjs +8 -3
- package/gsd-core/bin/gsd-tools.cjs +532 -174
- package/gsd-core/bin/lib/adr-parser.cjs +1 -1
- package/gsd-core/bin/lib/artifacts.cjs +2 -1
- package/gsd-core/bin/lib/audit.cjs +39 -22
- package/gsd-core/bin/lib/broken-windows.cjs +168 -49
- package/gsd-core/bin/lib/capability-activation.cjs +27 -0
- package/gsd-core/bin/lib/capability-lifecycle.cjs +10 -6
- package/gsd-core/bin/lib/capability-loader.cjs +135 -1
- package/gsd-core/bin/lib/capability-registry.cjs +528 -116
- package/gsd-core/bin/lib/capability-source.cjs +19 -2
- package/gsd-core/bin/lib/capability-state.cjs +7 -1
- package/gsd-core/bin/lib/capability-validator.cjs +134 -5
- package/gsd-core/bin/lib/capability-writer.cjs +14 -4
- package/gsd-core/bin/lib/check-command-router.cjs +198 -38
- package/gsd-core/bin/lib/claude-orchestration.cjs +10 -25
- package/gsd-core/bin/lib/clusters.cjs +1 -0
- package/gsd-core/bin/lib/code-review-depth.cjs +2 -2
- package/gsd-core/bin/lib/command-aliases.cjs +16 -0
- package/gsd-core/bin/lib/commands.cjs +981 -79
- package/gsd-core/bin/lib/config-loader.cjs +4 -0
- package/gsd-core/bin/lib/config.cjs +153 -38
- package/gsd-core/bin/lib/core-utils.cjs +34 -7
- package/gsd-core/bin/lib/coverage.cjs +1 -1
- package/gsd-core/bin/lib/decisions.cjs +343 -28
- package/gsd-core/bin/lib/edge-probe.cjs +14 -1
- package/gsd-core/bin/lib/external-descriptor-trust.cjs +29 -14
- package/gsd-core/bin/lib/file-overlap-partitioner.cjs +74 -0
- package/gsd-core/bin/lib/frontmatter.cjs +137 -23
- package/gsd-core/bin/lib/gap-checker.cjs +22 -13
- package/gsd-core/bin/lib/git-base-branch.cjs +10 -2
- package/gsd-core/bin/lib/gsd2-import.cjs +1 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +8 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +54 -11
- package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +87 -23
- package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +1 -1
- package/gsd-core/bin/lib/host-integration.cjs +57 -5
- package/gsd-core/bin/lib/init-command-router.cjs +14 -0
- package/gsd-core/bin/lib/init.cjs +539 -60
- package/gsd-core/bin/lib/install-engine.cjs +199 -14
- package/gsd-core/bin/lib/install-model-override-resolver.cjs +45 -0
- package/gsd-core/bin/lib/install-profiles.cjs +36 -14
- package/gsd-core/bin/lib/installer-migration-report.cjs +1 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +33 -4
- package/gsd-core/bin/lib/io.cjs +35 -0
- package/gsd-core/bin/lib/loop-resolver.cjs +64 -39
- package/gsd-core/bin/lib/markdown-table.cjs +123 -0
- package/gsd-core/bin/lib/mcp-catalog.cjs +2 -2
- package/gsd-core/bin/lib/milestone.cjs +41 -10
- package/gsd-core/bin/lib/model-resolver.cjs +101 -10
- package/gsd-core/bin/lib/phase-command-router.cjs +20 -7
- package/gsd-core/bin/lib/phase-id.cjs +412 -31
- package/gsd-core/bin/lib/phase-lifecycle.cjs +61 -0
- package/gsd-core/bin/lib/phase.cjs +941 -98
- package/gsd-core/bin/lib/plan-document.cjs +10 -0
- package/gsd-core/bin/lib/planning-inspect.cjs +34 -18
- package/gsd-core/bin/lib/planning-snapshot.cjs +206 -30
- package/gsd-core/bin/lib/planning-workspace.cjs +153 -29
- package/gsd-core/bin/lib/pristine-baseline.cjs +182 -0
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +91 -4
- package/gsd-core/bin/lib/quick-batch-command-router.cjs +285 -0
- package/gsd-core/bin/lib/quick-batch-dispatch.cjs +250 -0
- package/gsd-core/bin/lib/quick-batch.cjs +840 -0
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +61 -2
- package/gsd-core/bin/lib/research-store.cjs +11 -12
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +53 -5
- package/gsd-core/bin/lib/review-lane-invocation.cjs +96 -1
- package/gsd-core/bin/lib/review-lane-runner.cjs +136 -10
- package/gsd-core/bin/lib/reviewer-step-dispatch.cjs +337 -0
- package/gsd-core/bin/lib/roadmap-parser.cjs +555 -41
- package/gsd-core/bin/lib/roadmap.cjs +292 -69
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +260 -43
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +28 -20
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +294 -108
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +408 -47
- package/gsd-core/bin/lib/security.cjs +126 -7
- package/gsd-core/bin/lib/shell-command-projection.cjs +4 -0
- package/gsd-core/bin/lib/smart-entry.cjs +7 -9
- package/gsd-core/bin/lib/state-document.cjs +159 -32
- package/gsd-core/bin/lib/state-md-schema.cjs +44 -27
- package/gsd-core/bin/lib/state-transition.cjs +465 -62
- package/gsd-core/bin/lib/state.cjs +906 -151
- package/gsd-core/bin/lib/surface.cjs +83 -10
- package/gsd-core/bin/lib/task-command-router.cjs +12 -6
- package/gsd-core/bin/lib/tdd-red-evidence.cjs +133 -0
- package/gsd-core/bin/lib/uat.cjs +1420 -516
- package/gsd-core/bin/lib/update-context.cjs +36 -26
- package/gsd-core/bin/lib/validate.cjs +230 -12
- package/gsd-core/bin/lib/vendor/js-yaml.cjs +11 -3
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +316 -23
- package/gsd-core/bin/lib/verify-command-grounding.cjs +1 -1
- package/gsd-core/bin/lib/verify-command-router.cjs +1 -0
- package/gsd-core/bin/lib/verify.cjs +531 -36
- package/gsd-core/bin/lib/workstream-inventory.cjs +21 -2
- package/gsd-core/bin/lib/worktree-safety.cjs +21 -7
- package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +13 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +507 -81
- package/gsd-core/references/agent-contracts.md +3 -3
- package/gsd-core/references/compact-content-gate.md +66 -0
- package/gsd-core/references/edge-probe.md +17 -13
- package/gsd-core/references/execute-mvp-tdd.md +18 -16
- package/gsd-core/references/execute-phase-response-language.md +6 -0
- package/gsd-core/references/executor-examples.md +42 -0
- package/gsd-core/references/few-shot-examples/plan-checker.md +15 -15
- package/gsd-core/references/loop-hook-dispatch.md +18 -0
- package/gsd-core/references/model-profiles.md +12 -3
- package/gsd-core/references/mvp-concepts.md +2 -2
- package/gsd-core/references/plan-checker-examples.md +41 -0
- package/gsd-core/references/planner-antipatterns.md +25 -0
- package/gsd-core/references/planner-chunked.md +5 -1
- package/gsd-core/references/planner-coupling.md +42 -0
- package/gsd-core/references/planner-quick-batch.md +71 -0
- package/gsd-core/references/planner-reviews.md +47 -0
- package/gsd-core/references/planner-revision.md +75 -2
- package/gsd-core/references/planning-config.md +5 -1
- package/gsd-core/references/response-language-directive.md +9 -0
- package/gsd-core/references/revision-loop.md +118 -11
- package/gsd-core/references/tdd.md +17 -9
- package/gsd-core/references/thinking-models-planning.md +18 -2
- package/gsd-core/references/verification-patterns.md +17 -4
- package/gsd-core/references/verifier-evidence-gate.md +160 -0
- package/gsd-core/references/worktree-path-safety.md +112 -2
- package/gsd-core/templates/README.md +7 -1
- package/gsd-core/templates/phase-prompt.md +4 -0
- package/gsd-core/templates/state.md +6 -3
- package/gsd-core/templates/summary.compact.md +212 -0
- package/gsd-core/templates/user-setup.compact.md +199 -0
- package/gsd-core/templates/user-setup.md +0 -9
- package/gsd-core/templates/verification-report.md +5 -0
- package/gsd-core/workflows/add-backlog.md +2 -0
- package/gsd-core/workflows/add-phase.md +2 -0
- package/gsd-core/workflows/add-tests.md +1 -1
- package/gsd-core/workflows/add-todo.md +4 -3
- package/gsd-core/workflows/ai-integration-phase.md +1 -1
- package/gsd-core/workflows/analyze-dependencies.md +2 -0
- package/gsd-core/workflows/audit-fix.md +2 -0
- package/gsd-core/workflows/audit-milestone.md +2 -0
- package/gsd-core/workflows/audit-uat.md +2 -0
- package/gsd-core/workflows/autonomous.md +15 -10
- package/gsd-core/workflows/check-todos.md +5 -3
- package/gsd-core/workflows/cleanup.md +4 -2
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +22 -13
- package/gsd-core/workflows/code-review-fix.md +5 -3
- package/gsd-core/workflows/code-review.md +211 -43
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +274 -0
- package/gsd-core/workflows/complete-milestone.md +40 -254
- package/gsd-core/workflows/debug.md +1 -1
- package/gsd-core/workflows/diagnose-issues.md +5 -1
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/all.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/analyze.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/auto.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/batch.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/chain.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/default.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/power.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/text.md +2 -0
- package/gsd-core/workflows/discuss-phase/templates/context.md +2 -0
- package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +2 -0
- package/gsd-core/workflows/discuss-phase-assumptions.md +1 -1
- package/gsd-core/workflows/discuss-phase-power.md +2 -0
- package/gsd-core/workflows/discuss-phase.md +1 -1
- package/gsd-core/workflows/do.md +43 -13
- package/gsd-core/workflows/docs-update/detail/elaboration.md +179 -0
- package/gsd-core/workflows/docs-update.md +15 -156
- package/gsd-core/workflows/edit-phase.md +2 -0
- package/gsd-core/workflows/eval-review.md +1 -1
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +124 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +20 -3
- package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +56 -0
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +24 -3
- package/gsd-core/workflows/execute-phase/steps/executor-progress-policy.md +43 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +8 -2
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +2 -0
- package/gsd-core/workflows/execute-phase/steps/sequential-root-pin.md +35 -0
- package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +25 -0
- package/gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md +2 -0
- package/gsd-core/workflows/execute-phase.md +78 -159
- package/gsd-core/workflows/execute-plan.md +28 -15
- package/gsd-core/workflows/explore.md +2 -0
- package/gsd-core/workflows/extract-learnings.md +2 -0
- package/gsd-core/workflows/fast.md +6 -0
- package/gsd-core/workflows/forensics.md +2 -0
- package/gsd-core/workflows/graduation.md +1 -1
- package/gsd-core/workflows/health.md +1 -1
- package/gsd-core/workflows/help/modes/brief.md +2 -0
- package/gsd-core/workflows/help/modes/default.md +2 -0
- package/gsd-core/workflows/help/modes/full.compact.md +398 -0
- package/gsd-core/workflows/help/modes/full.md +12 -0
- package/gsd-core/workflows/help/modes/topic.md +2 -0
- package/gsd-core/workflows/help.md +3 -1
- package/gsd-core/workflows/import.md +3 -3
- package/gsd-core/workflows/inbox.md +1 -1
- package/gsd-core/workflows/ingest-docs.md +1 -1
- package/gsd-core/workflows/insert-phase.md +2 -0
- package/gsd-core/workflows/list-phase-assumptions.md +2 -0
- package/gsd-core/workflows/list-seeds.md +2 -0
- package/gsd-core/workflows/list-workspaces.md +2 -0
- package/gsd-core/workflows/manager.md +3 -3
- package/gsd-core/workflows/map-codebase.md +52 -3
- package/gsd-core/workflows/milestone-summary.md +2 -0
- package/gsd-core/workflows/mvp-phase.md +1 -1
- package/gsd-core/workflows/new-milestone.md +55 -13
- package/gsd-core/workflows/new-project/detail/elaboration.md +216 -0
- package/gsd-core/workflows/new-project.md +37 -205
- package/gsd-core/workflows/new-workspace.md +1 -1
- package/gsd-core/workflows/next.md +2 -0
- package/gsd-core/workflows/node-repair.md +2 -0
- package/gsd-core/workflows/note.md +2 -0
- package/gsd-core/workflows/onboard.md +1 -1
- package/gsd-core/workflows/pause-work.md +19 -4
- package/gsd-core/workflows/plan-phase/detail/elaboration.md +209 -0
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +100 -18
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +2 -0
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +9 -0
- package/gsd-core/workflows/plan-phase.md +144 -185
- package/gsd-core/workflows/plan-review-convergence.md +102 -10
- package/gsd-core/workflows/plant-seed.md +1 -1
- package/gsd-core/workflows/pr-branch.md +30 -10
- package/gsd-core/workflows/profile-user.md +1 -1
- package/gsd-core/workflows/progress/steps/forensic-audit.md +1 -1
- package/gsd-core/workflows/progress.md +25 -3
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +37 -2
- package/gsd-core/workflows/quick/steps/research-phase.md +3 -3
- package/gsd-core/workflows/quick-batch/steps/batch-init.md +55 -0
- package/gsd-core/workflows/quick-batch/steps/completion.md +65 -0
- package/gsd-core/workflows/quick-batch/steps/merge-wave.md +100 -0
- package/gsd-core/workflows/quick-batch/steps/plan-checker-loop.md +147 -0
- package/gsd-core/workflows/quick-batch/steps/planner-wave.md +158 -0
- package/gsd-core/workflows/quick-batch/steps/research-phase.md +95 -0
- package/gsd-core/workflows/quick-batch/steps/resume-mode.md +49 -0
- package/gsd-core/workflows/quick-batch/steps/verification-wave.md +73 -0
- package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +169 -0
- package/gsd-core/workflows/quick-batch.md +203 -0
- package/gsd-core/workflows/quick.md +21 -4
- package/gsd-core/workflows/reapply-patches.md +79 -3
- package/gsd-core/workflows/remove-phase.md +2 -0
- package/gsd-core/workflows/remove-workspace.md +1 -1
- package/gsd-core/workflows/resume-project.md +6 -2
- package/gsd-core/workflows/review.md +215 -10
- package/gsd-core/workflows/scan.md +2 -0
- package/gsd-core/workflows/section-manifest.json +12 -0
- package/gsd-core/workflows/secure-phase.md +1 -1
- package/gsd-core/workflows/session-report.md +2 -0
- package/gsd-core/workflows/settings-advanced.md +2 -0
- package/gsd-core/workflows/settings-integrations.md +9 -8
- package/gsd-core/workflows/settings.md +19 -6
- package/gsd-core/workflows/ship.md +10 -10
- package/gsd-core/workflows/sketch-wrap-up.md +2 -0
- package/gsd-core/workflows/sketch.md +1 -1
- package/gsd-core/workflows/smart-entry.md +1 -1
- package/gsd-core/workflows/spec-phase.md +24 -19
- package/gsd-core/workflows/spike-wrap-up.md +2 -0
- package/gsd-core/workflows/spike.md +1 -1
- package/gsd-core/workflows/stats.md +2 -0
- package/gsd-core/workflows/sync-skills.md +12 -4
- package/gsd-core/workflows/thread.md +2 -0
- package/gsd-core/workflows/transition.md +2 -0
- package/gsd-core/workflows/ui-phase.md +26 -5
- package/gsd-core/workflows/ui-review.md +1 -1
- package/gsd-core/workflows/ultraplan-phase.md +2 -0
- package/gsd-core/workflows/undo.md +1 -1
- package/gsd-core/workflows/update.md +48 -43
- package/gsd-core/workflows/validate-phase.md +1 -1
- package/gsd-core/workflows/verify-work/detail/elaboration.md +230 -0
- package/gsd-core/workflows/verify-work.md +68 -182
- package/hooks/dist/gsd-agent-isolation-guard.js +42 -16
- package/hooks/dist/gsd-check-update-worker.js +19 -2
- package/hooks/dist/gsd-context-monitor.js +371 -27
- package/hooks/dist/gsd-cursor-subagent-start.js +34 -14
- package/hooks/dist/gsd-node-runner.sh +1 -0
- package/hooks/dist/gsd-prompt-guard.js +30 -5
- package/hooks/dist/gsd-read-guard.js +2 -0
- package/hooks/dist/gsd-read-injection-scanner.js +5 -5
- package/hooks/dist/gsd-secret-read-guard.js +1105 -0
- package/hooks/dist/gsd-statusline.js +18 -10
- package/hooks/dist/gsd-validate-commit.sh +474 -7
- package/hooks/dist/gsd-workflow-guard.js +2 -1
- package/hooks/dist/gsd-worktree-path-guard.js +25 -14
- package/hooks/dist/gsd-write-guard.js +46 -1
- package/hooks/dist/lib/dispatch-identity.js +187 -0
- package/hooks/dist/lib/filename-classification.js +64 -0
- package/hooks/dist/lib/git-cmd.js +210 -1
- package/hooks/dist/lib/injection-patterns.js +36 -6
- package/hooks/dist/lib/isolation-deny-reason.js +53 -1
- package/hooks/dist/lib/isolation-sentinel.js +58 -19
- package/hooks/dist/managed-hooks-registry.cjs +1 -0
- package/hooks/gsd-agent-isolation-guard.js +42 -16
- package/hooks/gsd-check-update-worker.js +19 -2
- package/hooks/gsd-context-monitor.js +371 -27
- package/hooks/gsd-cursor-subagent-start.js +34 -14
- package/hooks/gsd-node-runner.sh +1 -0
- package/hooks/gsd-prompt-guard.js +30 -5
- package/hooks/gsd-read-guard.js +2 -0
- package/hooks/gsd-read-injection-scanner.js +5 -5
- package/hooks/gsd-secret-read-guard.js +1105 -0
- package/hooks/gsd-statusline.js +18 -10
- package/hooks/gsd-validate-commit.sh +474 -7
- package/hooks/gsd-workflow-guard.js +2 -1
- package/hooks/gsd-worktree-path-guard.js +25 -14
- package/hooks/gsd-write-guard.js +46 -1
- package/hooks/hooks.json +6 -0
- package/hooks/lib/dispatch-identity.js +187 -0
- package/hooks/lib/filename-classification.js +64 -0
- package/hooks/lib/git-cmd.js +210 -1
- package/hooks/lib/injection-patterns.js +36 -6
- package/hooks/lib/isolation-deny-reason.js +53 -1
- package/hooks/lib/isolation-sentinel.js +58 -19
- package/hooks/managed-hooks-registry.cjs +1 -0
- package/package.json +13 -9
- package/scripts/benchmark-compact-content-variants.cjs +298 -0
- package/scripts/benchmark-compact-content.cjs +368 -0
- package/scripts/build-hooks.js +11 -4
- package/scripts/check-contract-drift.cjs +4 -1
- package/scripts/check-env.cjs +36 -8
- package/scripts/check-glossary-refs.cjs +25 -21
- package/scripts/ci-next-health.cjs +271 -0
- package/scripts/ci-prepare-test-scope.cjs +7 -7
- package/scripts/ci-test-scope.cjs +133 -20
- package/scripts/ci-timeout-report.cjs +1 -1
- package/scripts/diff-touches-shipped-paths.cjs +1 -1
- package/scripts/docs-guard-registry.cjs +17 -2
- package/scripts/gen-adr-index.cjs +8 -2
- package/scripts/gen-inventory-manifest.cjs +12 -0
- package/scripts/gen-loop-host-contract.cjs +67 -15
- package/scripts/gen-platform-conformance-tier.cjs +557 -0
- package/scripts/lib/drift-scan.cjs +1 -1
- package/scripts/lib/macos-conformance-tier.generated.cjs +210 -0
- package/scripts/lib/npm-version-check-diagnosis.cjs +59 -0
- package/scripts/lib/platform-conformance-tier.generated.cjs +276 -0
- package/scripts/lib/shellcheck-fetch.cjs +247 -0
- package/scripts/lib/suite-detection.cjs +32 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +0 -6
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +1 -1
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
- package/scripts/lint-allowed-tools-parity.cjs +221 -0
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +24 -2
- package/scripts/lint-phase-enumeration-drift.cjs +24 -6
- package/scripts/lint-phase-id-drift.cjs +465 -15
- package/scripts/lint-portable-grep.cjs +176 -0
- package/scripts/lint-response-language-coverage.cjs +530 -0
- package/scripts/lint-source-test-name-collision.cjs +1 -1
- package/scripts/lint-test-file-count.allowlist.json +4 -1
- package/scripts/lint-vendored-deps.cjs +128 -17
- package/scripts/lint-workflow-shellcheck-baseline.json +1112 -0
- package/scripts/lint-workflow-shellcheck.cjs +614 -0
- package/scripts/npm-audit-baseline.cjs +376 -0
- package/scripts/prompt-injection-scan.sh +22 -0
- package/scripts/require-issue-link-policy.cjs +16 -1
- package/scripts/workflow-size.cjs +139 -0
- package/skills/gsd-cleanup/SKILL.md +1 -0
- package/skills/gsd-code-review/SKILL.md +2 -1
- package/skills/gsd-complete-milestone/SKILL.md +1 -0
- package/skills/gsd-config/SKILL.md +1 -0
- package/skills/gsd-debug/SKILL.md +1 -0
- package/skills/gsd-execute-phase/SKILL.md +1 -1
- package/skills/gsd-graphify/SKILL.md +1 -0
- package/skills/gsd-health/SKILL.md +1 -0
- package/skills/gsd-mempalace-capture/SKILL.md +1 -0
- package/skills/gsd-mempalace-recall/SKILL.md +1 -0
- package/skills/gsd-new-milestone/SKILL.md +1 -0
- package/skills/gsd-new-project/SKILL.md +1 -0
- package/skills/gsd-next/SKILL.md +1 -0
- package/skills/gsd-ns-workflow/SKILL.md +1 -0
- package/skills/gsd-pause-work/SKILL.md +1 -0
- package/skills/gsd-phase/SKILL.md +2 -1
- package/skills/gsd-pr-branch/SKILL.md +1 -0
- package/skills/gsd-quick-batch/SKILL.md +105 -0
- package/skills/gsd-resume-work/SKILL.md +1 -0
- package/skills/gsd-review-backlog/SKILL.md +1 -0
- package/skills/gsd-settings/SKILL.md +2 -1
- package/skills/gsd-stats/SKILL.md +1 -0
- package/skills/gsd-surface/SKILL.md +18 -8
- package/skills/gsd-thread/SKILL.md +1 -0
- package/skills/gsd-workspace/SKILL.md +1 -0
- package/skills/gsd-workstreams/SKILL.md +1 -0
- package/vscode/package.json +1 -1
- package/gsd-core/templates/claude-md.md +0 -145
- package/gsd-core/templates/codebase/concerns.md +0 -310
- package/gsd-core/templates/codebase/conventions.md +0 -307
- package/gsd-core/templates/codebase/integrations.md +0 -280
- package/gsd-core/templates/codebase/structure.md +0 -285
- package/gsd-core/templates/codebase/testing.md +0 -480
- package/gsd-core/templates/debug-subagent-prompt.md +0 -91
- package/gsd-core/templates/discovery.md +0 -146
|
@@ -23,6 +23,8 @@ If `section_manifest` is `null` or `"auto-mode-detection"` is in its `included`
|
|
|
23
23
|
|
|
24
24
|
<process>
|
|
25
25
|
|
|
26
|
+
**Compact Content Gate.** Read and follow `gsd-core/references/compact-content-gate.md` now — it states the `workflow.compact_content` check and the resolution rule this spine defers to. When it directs a Read, read `gsd-core/workflows/new-project/detail/elaboration.md` in full before continuing past this point; its content elaborates on two sections below (Step 2b's prior spike/sketch detection, and Step 6's researcher/synthesizer prompts).
|
|
27
|
+
|
|
26
28
|
## 1. Setup
|
|
27
29
|
|
|
28
30
|
**MANDATORY FIRST STEP — Execute these checks before ANY user interaction:**
|
|
@@ -37,9 +39,9 @@ AGENT_SKILLS_SYNTHESIZER=$(gsd_run query agent-skills gsd-research-synthesizer)
|
|
|
37
39
|
AGENT_SKILLS_ROADMAPPER=$(gsd_run query agent-skills gsd-roadmapper)
|
|
38
40
|
```
|
|
39
41
|
|
|
40
|
-
Parse JSON for: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `project_exists`, `has_codebase_map`, `planning_exists`, `has_existing_code`, `has_package_file`, `is_brownfield`, `needs_codebase_map`, `has_git`, `git_worktree_root`, `in_nested_subdir`, `project_path`, `agents_installed`, `missing_agents`, `agent_runtime`, `agents_dir`, `required_agents`, `required_agents_installed`, `missing_required_agents`, `agent_skill_payloads_available`, `agent_skill_payload_agents`, `requirements_path`, `roadmap_path`, `config_path`, `research_dir`, `response_language`.
|
|
42
|
+
Parse JSON for: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `project_exists`, `has_codebase_map`, `planning_exists`, `has_existing_code`, `has_package_file`, `is_brownfield`, `needs_codebase_map`, `has_git`, `git_worktree_root`, `in_nested_subdir`, `project_path`, `agents_installed`, `missing_agents`, `agent_runtime`, `agents_dir`, `required_agents`, `required_agents_installed`, `missing_required_agents`, `agent_skill_payloads_available`, `agent_skill_payload_agents`, `requirements_exists`, `init_incomplete`, `requirements_path`, `roadmap_path`, `config_path`, `research_dir`, `response_language`.
|
|
41
43
|
|
|
42
|
-
**If `response_language` is set:** All user-facing questions, prompts, and explanations
|
|
44
|
+
**If `response_language` is set:** All user-facing output of this workflow — narration between tool calls, status updates, progress notes, findings, questions, prompts, and explanations — MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
|
|
43
45
|
|
|
44
46
|
**If `agents_installed` is false:** Display a warning before proceeding:
|
|
45
47
|
```text
|
|
@@ -92,7 +94,9 @@ INSTRUCTION_FILE=$(gsd_run query project-instruction-file --runtime "$RUNTIME")
|
|
|
92
94
|
|
|
93
95
|
All subsequent references to the project instruction file use `$INSTRUCTION_FILE`.
|
|
94
96
|
|
|
95
|
-
**If `project_exists` is true
|
|
97
|
+
**If `project_exists` is true and `init_incomplete` is true (#4040 — interrupted bootstrap):** Resume initialization instead of erroring. `.planning/` exists but initialization stopped before all core artifacts landed. Keep the existing `PROJECT.md` and any already-created artifacts (`REQUIREMENTS.md` if present, `config.json`); skip the steps that would recreate them and continue the flow from the first missing artifact in init order — `REQUIREMENTS.md` → `ROADMAP.md` + `STATE.md` — until all exist. Do not error and do not bounce the user back to `/gsd:progress` (that routing loop is the #4040 bug).
|
|
98
|
+
|
|
99
|
+
**If `project_exists` is true and `init_incomplete` is false:** Error — project already initialized. Use `/gsd:progress`.
|
|
96
100
|
|
|
97
101
|
**Git init (#3491 — never nest `.git` inside an existing worktree):**
|
|
98
102
|
|
|
@@ -116,33 +120,9 @@ If `section_manifest` is `null` or `"auto-mode-config"` is in its `included` lis
|
|
|
116
120
|
|
|
117
121
|
## 2b. Prior Spike/Sketch Detection
|
|
118
122
|
|
|
119
|
-
Check for
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
# Check for spike findings skill (project-local)
|
|
123
|
-
SPIKE_SKILL=$(ls ./.claude/skills/spike-findings-*/SKILL.md 2>/dev/null | head -1 || true)
|
|
124
|
-
|
|
125
|
-
# Check for sketch findings skill (project-local)
|
|
126
|
-
SKETCH_SKILL=$(ls ./.claude/skills/sketch-findings-*/SKILL.md 2>/dev/null | head -1 || true)
|
|
123
|
+
Check for a spike/sketch findings skill or raw `.planning/{spikes,sketches}/MANIFEST.md` files. If any exist, surface them before questioning (which findings-skill, if any, and any raw un-wrapped spikes/sketches worth `/gsd:spike --wrap-up` / `/gsd:sketch --wrap-up`), and if a findings skill exists, read its SKILL.md to inform the questioning phase — it carries validated patterns, constraints, and design decisions that should shape the project definition.
|
|
127
124
|
|
|
128
|
-
|
|
129
|
-
HAS_SPIKES=$(ls .planning/spikes/MANIFEST.md 2>/dev/null)
|
|
130
|
-
HAS_SKETCHES=$(ls .planning/sketches/MANIFEST.md 2>/dev/null)
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
If any of these exist, surface them before questioning:
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
⚡ Prior exploration detected:
|
|
137
|
-
{if SPIKE_SKILL} ✓ Spike findings skill: {path} — validated patterns from experiments
|
|
138
|
-
{if SKETCH_SKILL} ✓ Sketch findings skill: {path} — validated design decisions
|
|
139
|
-
{if HAS_SPIKES && !SPIKE_SKILL} ◆ Raw spikes in .planning/spikes/ — consider `/gsd:spike --wrap-up` to package findings
|
|
140
|
-
{if HAS_SKETCHES && !SKETCH_SKILL} ◆ Raw sketches in .planning/sketches/ — consider `/gsd:sketch --wrap-up` to package findings
|
|
141
|
-
|
|
142
|
-
These findings will be incorporated into project context and available to planning agents.
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
If spike/sketch findings skills exist, read their SKILL.md files to inform the questioning phase — they contain validated patterns, constraints, and design decisions that should shape the project definition.
|
|
125
|
+
Exact detection commands and the surfaced-findings banner: `gsd-core/workflows/new-project/detail/elaboration.md` § 1.
|
|
146
126
|
|
|
147
127
|
## 3. Deep Questioning
|
|
148
128
|
|
|
@@ -536,6 +516,10 @@ These spawn additional agents during planning/execution. They add tokens and tim
|
|
|
536
516
|
|
|
537
517
|
All recommended for important projects. Skip for quick experiments.
|
|
538
518
|
|
|
519
|
+
A fourth question in this same round covers Compact Content (#4139) — not a spawned agent,
|
|
520
|
+
but grouped here because it's the last general workflow-behavior toggle before the more
|
|
521
|
+
involved AI-models round below.
|
|
522
|
+
|
|
539
523
|
```
|
|
540
524
|
questions: [
|
|
541
525
|
{
|
|
@@ -564,6 +548,15 @@ questions: [
|
|
|
564
548
|
{ label: "Yes (Recommended)", description: "Confirm deliverables match phase goals" },
|
|
565
549
|
{ label: "No", description: "Trust execution, skip verification" }
|
|
566
550
|
]
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
header: "Compact Content",
|
|
554
|
+
question: "Use token-minimized instruction content where available? (smaller context footprint)",
|
|
555
|
+
multiSelect: false,
|
|
556
|
+
options: [
|
|
557
|
+
{ label: "No (Recommended)", description: "Full instruction detail loaded every time. Best while evaluating GSD or on a large context window." },
|
|
558
|
+
{ label: "Yes", description: "Terser instructions where a compact variant exists; canonical detail loads only when actually needed. Frees up context for long sessions or large codebases." }
|
|
559
|
+
]
|
|
567
560
|
}
|
|
568
561
|
]
|
|
569
562
|
|
|
@@ -625,7 +618,7 @@ Create `.planning/config.json` with all settings (CLI fills in remaining default
|
|
|
625
618
|
|
|
626
619
|
```bash
|
|
627
620
|
mkdir -p .planning
|
|
628
|
-
gsd_run query config-new-project '{"mode":"[yolo|interactive]","granularity":"[selected]","parallelization":true|false,"commit_docs":true|false,"model_profile":"quality|balanced|budget|adaptive|inherit","workflow":{"research":true|false,"plan_check":true|false,"verifier":true|false,"nyquist_validation":[false if granularity=coarse, true otherwise]},"plan_review":{"source_grounding":true|false},"ship":{"pr_body_sections":[{"heading":"User Stories & Acceptance Criteria","enabled":true|false,"source":"REQUIREMENTS.md ## User Stories || REQUIREMENTS.md ## Acceptance Criteria","fallback":"- Acceptance criteria are covered by the linked requirements and verification evidence."},{"heading":"Risks & Dependencies","enabled":true|false,"source":"PLAN.md ## Risks || PLAN.md ## Dependencies","fallback":"- No known high-risk rollout dependencies."},{"heading":"Success Metrics & Release Criteria","enabled":true|false,"source":"REQUIREMENTS.md ## Definition of Done || VERIFICATION.md ## Release Criteria","fallback":"- Release when automated verification and required manual checks pass."},{"heading":"Stakeholder Review & Approval","enabled":true|false,"template":"- Product owner approval pending for {phase_name}."}]}}'
|
|
621
|
+
gsd_run query config-new-project '{"mode":"[yolo|interactive]","granularity":"[selected]","parallelization":true|false,"commit_docs":true|false,"model_profile":"quality|balanced|budget|adaptive|inherit","workflow":{"research":true|false,"plan_check":true|false,"verifier":true|false,"compact_content":true|false,"nyquist_validation":[false if granularity=coarse, true otherwise]},"plan_review":{"source_grounding":true|false},"ship":{"pr_body_sections":[{"heading":"User Stories & Acceptance Criteria","enabled":true|false,"source":"REQUIREMENTS.md ## User Stories || REQUIREMENTS.md ## Acceptance Criteria","fallback":"- Acceptance criteria are covered by the linked requirements and verification evidence."},{"heading":"Risks & Dependencies","enabled":true|false,"source":"PLAN.md ## Risks || PLAN.md ## Dependencies","fallback":"- No known high-risk rollout dependencies."},{"heading":"Success Metrics & Release Criteria","enabled":true|false,"source":"REQUIREMENTS.md ## Definition of Done || VERIFICATION.md ## Release Criteria","fallback":"- Release when automated verification and required manual checks pass."},{"heading":"Stakeholder Review & Approval","enabled":true|false,"template":"- Product owner approval pending for {phase_name}."}]}}'
|
|
629
622
|
```
|
|
630
623
|
|
|
631
624
|
**Note:** Run `/gsd:settings` anytime to update model profile, workflow agents, branching strategy, and other preferences.
|
|
@@ -649,15 +642,18 @@ gsd_run query commit "chore: add project config" --files .planning/config.json
|
|
|
649
642
|
|
|
650
643
|
**Detect multi-repo workspace:**
|
|
651
644
|
|
|
652
|
-
Check for directories with their own `.git`
|
|
645
|
+
Check for directories with their own `.git` (separate repos within the workspace —
|
|
646
|
+
this also finds linked git worktree children, whose `.git` is a file rather than a
|
|
647
|
+
directory, unlike a plain `find -type d` predicate would):
|
|
653
648
|
|
|
654
649
|
```bash
|
|
655
|
-
|
|
650
|
+
gsd_run query init.new-project
|
|
656
651
|
```
|
|
657
652
|
|
|
658
|
-
|
|
653
|
+
Read the `sub_repos_detected` array from the JSON output — each entry is a bare
|
|
654
|
+
directory name already relative to the workspace root (e.g. `"backend"`).
|
|
659
655
|
|
|
660
|
-
|
|
656
|
+
**If sub-repos found:**
|
|
661
657
|
|
|
662
658
|
Use AskUserQuestion:
|
|
663
659
|
|
|
@@ -726,180 +722,13 @@ Display spawning indicator:
|
|
|
726
722
|
→ Pitfalls research
|
|
727
723
|
```
|
|
728
724
|
|
|
729
|
-
Spawn 4 parallel gsd-project-researcher agents
|
|
730
|
-
|
|
731
|
-
<!-- #2517 model-omit-on-inherit -->
|
|
732
|
-
|
|
733
|
-
> **Model omission (#2517).** Omit the `model` parameter entirely when the value it would carry (`researcher_model`, `synthesizer_model`, `roadmapper_model`) is `"inherit"` or empty. An empty value 404s on runtimes without native tier aliases — the default on non-Claude runtimes. Omitting it inherits the orchestrator's model. See @gsd-core/references/model-profile-resolution.md.
|
|
734
|
-
|
|
735
|
-
```text
|
|
736
|
-
Agent(prompt="<research_type>
|
|
737
|
-
Project Research — Stack dimension for [domain].
|
|
738
|
-
</research_type>
|
|
739
|
-
|
|
740
|
-
<milestone_context>
|
|
741
|
-
[greenfield OR subsequent]
|
|
742
|
-
|
|
743
|
-
Greenfield: Research the standard stack for building [domain] from scratch.
|
|
744
|
-
Subsequent: Research what's needed to add [target features] to an existing [domain] app. Don't re-research the existing system.
|
|
745
|
-
</milestone_context>
|
|
746
|
-
|
|
747
|
-
<question>
|
|
748
|
-
What's the standard 2025 stack for [domain]?
|
|
749
|
-
</question>
|
|
750
|
-
|
|
751
|
-
<required_reading>
|
|
752
|
-
- {project_path} (Project context and goals)
|
|
753
|
-
</required_reading>
|
|
754
|
-
|
|
755
|
-
${AGENT_SKILLS_RESEARCHER}
|
|
756
|
-
|
|
757
|
-
<downstream_consumer>
|
|
758
|
-
Your STACK.md feeds into roadmap creation. Be prescriptive:
|
|
759
|
-
- Specific libraries with versions
|
|
760
|
-
- Clear rationale for each choice
|
|
761
|
-
- What NOT to use and why
|
|
762
|
-
</downstream_consumer>
|
|
763
|
-
|
|
764
|
-
<quality_gate>
|
|
765
|
-
- [ ] Versions are current (verify with Context7/official docs, not training data)
|
|
766
|
-
- [ ] Rationale explains WHY, not just WHAT
|
|
767
|
-
- [ ] Confidence levels assigned to each recommendation
|
|
768
|
-
</quality_gate>
|
|
769
|
-
|
|
770
|
-
<!-- #2508 runtime-aware-dispatch -->
|
|
771
|
-
|
|
772
|
-
> **Runtime-aware dispatch (#2508 Phase 4).** GSD workflows dispatch specialized subagents by role. Before dispatching on a built-in-only runtime (kimi-code — three built-ins only), resolve the role to a built-in via `gsd_run query resolve-dispatch-type --requested <role> --raw`. On named-dispatch runtimes (Claude/OpenCode/…) the role is returned unchanged; on kimi-code it maps to `coder`/`explore`/`plan` by role-suffix. The persona rides `${AGENT_SKILLS_<ROLE>}` (Phase 3) regardless. See @gsd-core/references/runtime-aware-dispatch.md.
|
|
773
|
-
|
|
774
|
-
<output>
|
|
775
|
-
Write to: {research_dir}/STACK.md
|
|
776
|
-
Use template: ~/.claude/gsd-core/templates/research-project/STACK.md
|
|
777
|
-
</output>
|
|
778
|
-
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Stack research")
|
|
779
|
-
|
|
780
|
-
Agent(prompt="<research_type>
|
|
781
|
-
Project Research — Features dimension for [domain].
|
|
782
|
-
</research_type>
|
|
783
|
-
|
|
784
|
-
<milestone_context>
|
|
785
|
-
[greenfield OR subsequent]
|
|
786
|
-
|
|
787
|
-
Greenfield: What features do [domain] products have? What's table stakes vs differentiating?
|
|
788
|
-
Subsequent: How do [target features] typically work? What's expected behavior?
|
|
789
|
-
</milestone_context>
|
|
790
|
-
|
|
791
|
-
<question>
|
|
792
|
-
What features do [domain] products have? What's table stakes vs differentiating?
|
|
793
|
-
</question>
|
|
794
|
-
|
|
795
|
-
<required_reading>
|
|
796
|
-
- {project_path} (Project context)
|
|
797
|
-
</required_reading>
|
|
798
|
-
|
|
799
|
-
${AGENT_SKILLS_RESEARCHER}
|
|
800
|
-
|
|
801
|
-
<downstream_consumer>
|
|
802
|
-
Your FEATURES.md feeds into requirements definition. Categorize clearly:
|
|
803
|
-
- Table stakes (must have or users leave)
|
|
804
|
-
- Differentiators (competitive advantage)
|
|
805
|
-
- Anti-features (things to deliberately NOT build)
|
|
806
|
-
</downstream_consumer>
|
|
807
|
-
|
|
808
|
-
<quality_gate>
|
|
809
|
-
- [ ] Categories are clear (table stakes vs differentiators vs anti-features)
|
|
810
|
-
- [ ] Complexity noted for each feature
|
|
811
|
-
- [ ] Dependencies between features identified
|
|
812
|
-
</quality_gate>
|
|
813
|
-
|
|
814
|
-
<output>
|
|
815
|
-
Write to: {research_dir}/FEATURES.md
|
|
816
|
-
Use template: ~/.claude/gsd-core/templates/research-project/FEATURES.md
|
|
817
|
-
</output>
|
|
818
|
-
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Features research")
|
|
819
|
-
|
|
820
|
-
Agent(prompt="<research_type>
|
|
821
|
-
Project Research — Architecture dimension for [domain].
|
|
822
|
-
</research_type>
|
|
823
|
-
|
|
824
|
-
<milestone_context>
|
|
825
|
-
[greenfield OR subsequent]
|
|
826
|
-
|
|
827
|
-
Greenfield: How are [domain] systems typically structured? What are major components?
|
|
828
|
-
Subsequent: How do [target features] integrate with existing [domain] architecture?
|
|
829
|
-
</milestone_context>
|
|
830
|
-
|
|
831
|
-
<question>
|
|
832
|
-
How are [domain] systems typically structured? What are major components?
|
|
833
|
-
</question>
|
|
834
|
-
|
|
835
|
-
<required_reading>
|
|
836
|
-
- {project_path} (Project context)
|
|
837
|
-
</required_reading>
|
|
838
|
-
|
|
839
|
-
${AGENT_SKILLS_RESEARCHER}
|
|
840
|
-
|
|
841
|
-
<downstream_consumer>
|
|
842
|
-
Your ARCHITECTURE.md informs phase structure in roadmap. Include:
|
|
843
|
-
- Component boundaries (what talks to what)
|
|
844
|
-
- Data flow (how information moves)
|
|
845
|
-
- Suggested build order (dependencies between components)
|
|
846
|
-
</downstream_consumer>
|
|
847
|
-
|
|
848
|
-
<quality_gate>
|
|
849
|
-
- [ ] Components clearly defined with boundaries
|
|
850
|
-
- [ ] Data flow direction explicit
|
|
851
|
-
- [ ] Build order implications noted
|
|
852
|
-
</quality_gate>
|
|
853
|
-
|
|
854
|
-
<output>
|
|
855
|
-
Write to: {research_dir}/ARCHITECTURE.md
|
|
856
|
-
Use template: ~/.claude/gsd-core/templates/research-project/ARCHITECTURE.md
|
|
857
|
-
</output>
|
|
858
|
-
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Architecture research")
|
|
859
|
-
|
|
860
|
-
Agent(prompt="<research_type>
|
|
861
|
-
Project Research — Pitfalls dimension for [domain].
|
|
862
|
-
</research_type>
|
|
863
|
-
|
|
864
|
-
<milestone_context>
|
|
865
|
-
[greenfield OR subsequent]
|
|
866
|
-
|
|
867
|
-
Greenfield: What do [domain] projects commonly get wrong? Critical mistakes?
|
|
868
|
-
Subsequent: What are common mistakes when adding [target features] to [domain]?
|
|
869
|
-
</milestone_context>
|
|
870
|
-
|
|
871
|
-
<question>
|
|
872
|
-
What do [domain] projects commonly get wrong? Critical mistakes?
|
|
873
|
-
</question>
|
|
874
|
-
|
|
875
|
-
<required_reading>
|
|
876
|
-
- {project_path} (Project context)
|
|
877
|
-
</required_reading>
|
|
878
|
-
|
|
879
|
-
${AGENT_SKILLS_RESEARCHER}
|
|
880
|
-
|
|
881
|
-
<downstream_consumer>
|
|
882
|
-
Your PITFALLS.md prevents mistakes in roadmap/planning. For each pitfall:
|
|
883
|
-
- Warning signs (how to detect early)
|
|
884
|
-
- Prevention strategy (how to avoid)
|
|
885
|
-
- Which phase should address it
|
|
886
|
-
</downstream_consumer>
|
|
887
|
-
|
|
888
|
-
<quality_gate>
|
|
889
|
-
- [ ] Pitfalls are specific to this domain (not generic advice)
|
|
890
|
-
- [ ] Prevention strategies are actionable
|
|
891
|
-
- [ ] Phase mapping included where relevant
|
|
892
|
-
</quality_gate>
|
|
893
|
-
|
|
894
|
-
<output>
|
|
895
|
-
Write to: {research_dir}/PITFALLS.md
|
|
896
|
-
Use template: ~/.claude/gsd-core/templates/research-project/PITFALLS.md
|
|
897
|
-
</output>
|
|
898
|
-
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Pitfalls research")
|
|
899
|
-
```
|
|
725
|
+
Spawn 4 parallel gsd-project-researcher agents — one per dimension (Stack, Features, Architecture, Pitfalls) — each given the domain and greenfield/subsequent milestone context, a dimension-specific question, a downstream-consumer note (what the next stage needs from this file), and a quality gate; each writes its own file (STACK.md / FEATURES.md / ARCHITECTURE.md / PITFALLS.md) under `{research_dir}/` from its template.
|
|
900
726
|
|
|
727
|
+
<!-- gsd:protected -->
|
|
901
728
|
> **ORCHESTRATOR RULE — CODEX RUNTIME**: After calling all 4 researcher Agent() calls above, do NOT read research files or synthesize content independently while the subagents are active. Wait for all 4 researchers to complete before spawning the synthesizer. This prevents duplicate work and wasted context.
|
|
902
729
|
|
|
730
|
+
**Model omission (#2517) applies to every one of these 5 spawns** (4 researchers + synthesizer): omit the `model=` parameter entirely when the value it would carry (`researcher_model`, `synthesizer_model`) is `"inherit"` or empty — passing it literally 404s on runtimes without native tier aliases (the default on non-Claude runtimes). Omitting `model=` inherits the orchestrator's model.
|
|
731
|
+
|
|
903
732
|
After all 4 agents complete, spawn synthesizer to create SUMMARY.md:
|
|
904
733
|
|
|
905
734
|
```text
|
|
@@ -925,6 +754,7 @@ Commit after writing.
|
|
|
925
754
|
", subagent_type="gsd-research-synthesizer", model="{synthesizer_model}", description="Synthesize research")
|
|
926
755
|
```
|
|
927
756
|
|
|
757
|
+
<!-- gsd:protected -->
|
|
928
758
|
> **ORCHESTRATOR RULE — CODEX RUNTIME**: After calling Agent() above, stop working on this task immediately. Do not read more files, edit code, or run tests related to this task while the subagent is active. Wait for the subagent to return its result. This prevents duplicate work, conflicting edits, and wasted context. Only resume when the subagent result is available.
|
|
929
759
|
|
|
930
760
|
**Synthesizer output self-heal (#222) — verify SUMMARY.md materialized:** The synthesizer's canonical output is `.planning/research/SUMMARY.md` on disk; its brief structured return (`## SYNTHESIS COMPLETE` plus a few `###` confirmation lines) is NOT the file content. A known LLM false-refusal (issue #222) sometimes makes the agent return the full SUMMARY.md document inline — fabricating a write restriction (e.g. "the runtime is blocking file writes") — instead of writing the file. Prompt hardening alone does not fully eliminate it, so the orchestrator MUST absorb the failure deterministically before spawning `gsd-roadmapper`:
|
|
@@ -935,6 +765,8 @@ Commit after writing.
|
|
|
935
765
|
|
|
936
766
|
This guarantees `gsd-roadmapper` (which lists SUMMARY.md as required reading) never runs against a missing or truncated SUMMARY.md.
|
|
937
767
|
|
|
768
|
+
Exact agent prompts (all four researcher dimensions): `gsd-core/workflows/new-project/detail/elaboration.md` § 2.
|
|
769
|
+
|
|
938
770
|
Display research complete banner and key findings:
|
|
939
771
|
|
|
940
772
|
```
|
|
@@ -20,7 +20,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
|
20
20
|
|
|
21
21
|
Parse JSON for: `default_workspace_base`, `child_repos`, `child_repo_count`, `worktree_available`, `is_git_repo`, `cwd_repo_name`, `project_root`, `response_language`.
|
|
22
22
|
|
|
23
|
-
**If `response_language` is set:** All user-facing questions, prompts, and explanations
|
|
23
|
+
**If `response_language` is set:** All user-facing output of this workflow — narration between tool calls, status updates, progress notes, findings, questions, prompts, and explanations — MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
|
|
24
24
|
|
|
25
25
|
## 2. Parse Arguments
|
|
26
26
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@~/.claude/gsd-core/references/response-language-directive.md
|
|
2
|
+
|
|
1
3
|
<purpose>
|
|
2
4
|
Autonomous repair operator for failed task verification. Invoked by execute-plan when a task fails its done-criteria. Proposes and attempts structured fixes before escalating to the user.
|
|
3
5
|
</purpose>
|
|
@@ -33,7 +33,7 @@ Parse JSON fields from `INIT`:
|
|
|
33
33
|
- `commit_docs`, `text_mode`, `has_git`, `git_worktree_root`, `in_nested_subdir`
|
|
34
34
|
- `response_language`
|
|
35
35
|
|
|
36
|
-
**If `response_language` is set:** All user-facing questions, prompts, and explanations
|
|
36
|
+
**If `response_language` is set:** All user-facing output of this workflow — narration between tool calls, status updates, progress notes, findings, questions, prompts, and explanations — MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
|
|
37
37
|
|
|
38
38
|
Set:
|
|
39
39
|
- `TEXT_MODE=true` if `--text` is present or `text_mode` is true. When `TEXT_MODE` is active, replace every `AskUserQuestion` call below with a plain-text numbered list and ask the user to type their choice number — required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@~/.claude/gsd-core/references/response-language-directive.md
|
|
2
|
+
|
|
1
3
|
<purpose>
|
|
2
4
|
Create structured `.planning/HANDOFF.json` and `.continue-here.md` handoff files to preserve complete work state across sessions. The JSON provides machine-readable state for `/gsd:resume-work`; the markdown provides human-readable context.
|
|
3
5
|
</purpose>
|
|
@@ -15,13 +17,16 @@ Determine what kind of work is being paused and set the handoff destination acco
|
|
|
15
17
|
|
|
16
18
|
```bash
|
|
17
19
|
# Check for active phase
|
|
18
|
-
phase=$(
|
|
20
|
+
phase=$(ls -t .planning/phases/*/PLAN.md 2>/dev/null | head -1 || true)
|
|
21
|
+
phase=${phase:+$(basename "$(dirname "$phase")")}
|
|
19
22
|
|
|
20
23
|
# Check for active spike
|
|
21
|
-
spike=$(
|
|
24
|
+
spike=$(ls -t .planning/spikes/*/SPIKE.md .planning/spikes/*/DESIGN.md .planning/spikes/*/README.md 2>/dev/null | head -1 || true)
|
|
25
|
+
spike=${spike:+$(basename "$(dirname "$spike")")}
|
|
22
26
|
|
|
23
27
|
# Check for active sketch
|
|
24
|
-
sketch=$(
|
|
28
|
+
sketch=$(ls -t .planning/sketches/*/README.md .planning/sketches/*/index.html 2>/dev/null | head -1 || true)
|
|
29
|
+
sketch=${sketch:+$(basename "$(dirname "$sketch")")}
|
|
25
30
|
|
|
26
31
|
# Check for active deliberation
|
|
27
32
|
deliberation=$(ls .planning/deliberations/*.md 2>/dev/null | head -1 || true)
|
|
@@ -103,13 +108,23 @@ timestamp=$(gsd_run query current-timestamp full --raw)
|
|
|
103
108
|
"decisions": [
|
|
104
109
|
{"decision": "{what}", "rationale": "{why}", "phase": "{phase_number}"}
|
|
105
110
|
],
|
|
106
|
-
"uncommitted_files": [],
|
|
111
|
+
"uncommitted_files": ["XY path", "..."], # #3968: MEASURED — see below
|
|
107
112
|
"next_action": "{specific first action when resuming}",
|
|
108
113
|
"context_notes": "{mental state, approach, what you were thinking}"
|
|
109
114
|
}
|
|
110
115
|
```
|
|
111
116
|
|
|
112
117
|
Any recorded `async_jobs` entries are the primary resume context on the next session — check them first before treating a PLAN-without-SUMMARY as incomplete work.
|
|
118
|
+
|
|
119
|
+
**`uncommitted_files` is measured, never asserted (#3968).** Populate it from an actual call,
|
|
120
|
+
not from memory — a narrated `[]` over a dirty tree is how 14 plans' worth of uncommitted
|
|
121
|
+
code went invisible in the wild:
|
|
122
|
+
```bash
|
|
123
|
+
UNCOMMITTED=$(git status --porcelain)
|
|
124
|
+
# One array entry per line ("XY path"); truncate the list at 50 entries and note the
|
|
125
|
+
# elided count, but NEVER round it to empty — a non-empty porcelain output is the single
|
|
126
|
+
# most load-bearing fact a resume session needs.
|
|
127
|
+
```
|
|
113
128
|
</step>
|
|
114
129
|
|
|
115
130
|
<step name="write">
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
Apply response_language to all user-facing prose — narration between tool calls, status updates, progress notes, and findings included; preserve code, paths, and identifiers.
|
|
2
|
+
|
|
3
|
+
# plan-phase — Detail
|
|
4
|
+
|
|
5
|
+
Elaboration deferred from the `plan-phase.md` spine under ADR-4139 (Compact Content mode). Read via `gsd-core/references/compact-content-gate.md` when `workflow.compact_content` is `false`. This file supplements the spine — it does not stand alone.
|
|
6
|
+
|
|
7
|
+
## § 9a — Filesystem Fallback (Planner)
|
|
8
|
+
|
|
9
|
+
This elaborates the spine's §9a trigger condition (above) — the recovery banner and its three options.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# #3218: this asks "did the planner write files to disk at all" — a
|
|
13
|
+
# planner-produced-nothing check, not outstanding-work counting — so it
|
|
14
|
+
# takes the PHYSICAL set (`plan_count_all`, status:superseded INCLUDED): a
|
|
15
|
+
# superseded plan is still a file the planner wrote, and this check must not
|
|
16
|
+
# read "nothing written" just because every plan happens to be superseded.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The spine already computed `DISK_PLANS` (above) before reaching this elaboration.
|
|
20
|
+
|
|
21
|
+
**If `DISK_PLANS` > 0:** The planner wrote plans to disk but the Agent() return was empty or
|
|
22
|
+
truncated (the Windows stdio hang pattern — the subagent finished but the return never
|
|
23
|
+
arrived). Display:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
◆ Planner wrote {DISK_PLANS} plan(s) to disk but did not emit a PLANNING COMPLETE marker.
|
|
27
|
+
This is a known Windows stdio hang pattern — work is likely recoverable.
|
|
28
|
+
|
|
29
|
+
Plans found on disk:
|
|
30
|
+
{ls output of *-PLAN.md}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Offer 3 options:
|
|
34
|
+
1. **Accept plans** — treat as `## PLANNING COMPLETE` and continue through step 9 `## PLANNING COMPLETE` handling (so `--skip-verify` / `plan_checker_enabled=false` are honored — may skip to step 13 rather than step 10)
|
|
35
|
+
2. **Retry planner** — re-spawn the planner with the same prompt (return to step 8)
|
|
36
|
+
3. **Stop** — exit; user can re-run `/gsd:plan-phase {N}` to resume
|
|
37
|
+
|
|
38
|
+
**If `DISK_PLANS` is 0 and no marker:** The planner produced no output. Treat as
|
|
39
|
+
`## PLANNING INCONCLUSIVE` and handle accordingly.
|
|
40
|
+
|
|
41
|
+
## § 9b — Handle Phase Split Recommendation
|
|
42
|
+
|
|
43
|
+
When the planner returns `## PHASE SPLIT RECOMMENDED`, it means the phase's source items exceed the context budget for full-fidelity implementation. The planner proposes groupings.
|
|
44
|
+
|
|
45
|
+
**Extract from planner return:**
|
|
46
|
+
- Proposed sub-phases (e.g., "17a: processing core (D-01 to D-19)", "17b: billing + config UX (D-20 to D-27)")
|
|
47
|
+
- Which source items (REQ-IDs, D-XX decisions, RESEARCH items) go in each sub-phase
|
|
48
|
+
- Why the split is necessary (context cost estimate, file count)
|
|
49
|
+
|
|
50
|
+
**Present to user:**
|
|
51
|
+
```
|
|
52
|
+
## Phase {X} exceeds context budget for full-fidelity implementation
|
|
53
|
+
|
|
54
|
+
The planner found {N} source items that exceed the context budget when
|
|
55
|
+
planned at full fidelity. Instead of reducing scope, we recommend splitting:
|
|
56
|
+
|
|
57
|
+
**Option 1: Split into sub-phases**
|
|
58
|
+
- Phase {X}a: {name} — {items} ({N} source items, ~{P}% context)
|
|
59
|
+
- Phase {X}b: {name} — {items} ({M} source items, ~{Q}% context)
|
|
60
|
+
|
|
61
|
+
**Option 2: Proceed anyway** (planner will attempt all, quality may degrade past 50% context)
|
|
62
|
+
|
|
63
|
+
**Option 3: Prioritize** — you choose which items to implement now,
|
|
64
|
+
rest become a follow-up phase
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Use AskUserQuestion with these 3 options.
|
|
68
|
+
|
|
69
|
+
**If "Split":** Use `/gsd:phase --insert` to create the sub-phases, then replan each.
|
|
70
|
+
**If "Proceed":** Return to planner with instruction to attempt all items at full fidelity, accepting more plans/tasks.
|
|
71
|
+
**If "Prioritize":** Use AskUserQuestion (multiSelect) to let user pick which items are "now" vs "later". Create CONTEXT.md for each sub-phase with the selected items.
|
|
72
|
+
|
|
73
|
+
## § 9c — Handle Source Audit Gaps
|
|
74
|
+
|
|
75
|
+
When the planner returns `## ⚠ Source Audit: Unplanned Items Found`, it means items from REQUIREMENTS.md, RESEARCH.md, ROADMAP goal, or CONTEXT.md decisions have no corresponding plan.
|
|
76
|
+
|
|
77
|
+
**Extract from planner return:**
|
|
78
|
+
- Each unplanned item with its source artifact and section
|
|
79
|
+
- The planner's suggested options (A: add plan, B: split phase, C: defer with confirmation)
|
|
80
|
+
|
|
81
|
+
**Present each gap to user.** For each unplanned item:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
## ⚠ Unplanned: {item description}
|
|
85
|
+
|
|
86
|
+
Source: {RESEARCH.md / REQUIREMENTS.md / ROADMAP goal / CONTEXT.md}
|
|
87
|
+
Details: {why the planner flagged this}
|
|
88
|
+
|
|
89
|
+
Options:
|
|
90
|
+
1. Add a plan to cover this item (recommended)
|
|
91
|
+
2. Split phase — move to a sub-phase with related items
|
|
92
|
+
3. Defer — add to backlog (developer confirms this is intentional)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Use AskUserQuestion for each gap (or batch if multiple gaps).
|
|
96
|
+
|
|
97
|
+
**If "Add plan":** Return to planner (step 8) with instruction to add plans covering the missing items, preserving existing plans.
|
|
98
|
+
**If "Split":** Use `/gsd:phase --insert` for overflow items, then replan.
|
|
99
|
+
**If "Defer":** Record in CONTEXT.md `## Deferred Ideas` with developer's confirmation. Proceed to step 10.
|
|
100
|
+
|
|
101
|
+
## § 11a — Filesystem Fallback (Checker)
|
|
102
|
+
|
|
103
|
+
Fires when the checker's Agent() call comes back without either completion marker (`## VERIFICATION PASSED` / `## ISSUES FOUND`). The spine already computed `DISK_PLANS` before reaching this elaboration.
|
|
104
|
+
|
|
105
|
+
**If `DISK_PLANS` > 0:** Plans exist on disk; the checker return was empty or truncated (the
|
|
106
|
+
Windows stdio hang pattern — the subagent finished but the return never arrived). Display:
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
◆ Checker return was empty or truncated. {DISK_PLANS} plan(s) exist on disk.
|
|
110
|
+
This is a known Windows stdio hang pattern — checker may have completed without returning.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Offer 3 options:
|
|
114
|
+
1. **Accept verification** — treat as `## VERIFICATION PASSED` and continue to step 13
|
|
115
|
+
2. **Retry checker** — re-spawn the checker with the same prompt (return to step 10)
|
|
116
|
+
3. **Stop** — exit; user can re-run `/gsd:plan-phase {N}` to resume
|
|
117
|
+
|
|
118
|
+
**If `DISK_PLANS` is 0:** No plans on disk — something is seriously wrong. Display error and stop.
|
|
119
|
+
|
|
120
|
+
## § 11 thinking-partner — Thinking Partner For Architectural Tradeoffs
|
|
121
|
+
|
|
122
|
+
**Thinking partner for architectural tradeoffs (conditional):**
|
|
123
|
+
If `features.thinking_partner` is enabled, scan the checker's issues for architectural tradeoff keywords
|
|
124
|
+
("architecture", "approach", "strategy", "pattern", "vs", "alternative"). If found:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
The plan-checker flagged an architectural decision point:
|
|
128
|
+
{issue description}
|
|
129
|
+
|
|
130
|
+
Brief analysis:
|
|
131
|
+
- Option A: {approach_from_plan} — {pros/cons}
|
|
132
|
+
- Option B: {alternative_approach} — {pros/cons}
|
|
133
|
+
- Recommendation: {choice} aligned with {phase_goal}
|
|
134
|
+
|
|
135
|
+
Apply this to the revision? [Yes] / [No, I'll decide]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
If yes: include the recommendation in the revision prompt. If no: proceed to revision loop as normal.
|
|
139
|
+
If thinking_partner disabled: skip this block entirely.
|
|
140
|
+
|
|
141
|
+
## § 12.5 — Plan Bounce (Optional External Refinement)
|
|
142
|
+
|
|
143
|
+
**Skip if:** `--skip-bounce` flag, `--gaps` flag, or bounce is not activated.
|
|
144
|
+
|
|
145
|
+
**Activation:** Bounce runs when `--bounce` flag is present OR `workflow.plan_bounce` config is `true`. The `--skip-bounce` flag always wins (disables bounce even if config enables it). The `--gaps` flag also disables bounce (gap-closure mode should not modify plans externally).
|
|
146
|
+
|
|
147
|
+
**Prerequisites:** `workflow.plan_bounce_script` must be set to a valid script path. If bounce is activated but no script is configured, display warning and skip:
|
|
148
|
+
```
|
|
149
|
+
⚠ Plan bounce activated but no script configured.
|
|
150
|
+
Set workflow.plan_bounce_script to the path of your refinement script.
|
|
151
|
+
Skipping bounce step.
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Read pass count:**
|
|
155
|
+
```bash
|
|
156
|
+
_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}/gsd-core/bin/${_GSD_SHIM_NAME}"; _gsd_at() { for _p; do if [ -f "$_p" ]; then GSD_TOOLS="$_p"; return 0; fi; done; return 1; }; if _gsd_at "${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}" "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif unset -f gsd_run; _G="$(command -v gsd_run)"; then GSD_TOOLS="$_G"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif _gsd_at "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; then gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd_run is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; GSD_IDENTITY_STATUS=unverified; case "$(gsd_run runtime-identity --raw 2>/dev/null || true)" in '{"packageName":"@opengsd/gsd-core"'*'}') GSD_IDENTITY_STATUS=ok;; esac; export GSD_IDENTITY_STATUS; [ "$GSD_IDENTITY_STATUS" = ok ] || echo "WARNING: \"$GSD_TOOLS\" did not prove it is @opengsd/gsd-core - it is either a different package or an @opengsd/gsd-core older than the runtime-identity verb. See docs/how-to/diagnose-a-foreign-gsd-tools.md" >&2; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
|
|
157
|
+
BOUNCE_PASSES=$(gsd_run query config-get workflow.plan_bounce_passes --raw 2>/dev/null || echo "2")
|
|
158
|
+
BOUNCE_SCRIPT=$(gsd_run query config-get workflow.plan_bounce_script --raw 2>/dev/null || true)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Display banner:
|
|
162
|
+
```
|
|
163
|
+
### GSD ► BOUNCING PLANS (External Refinement)
|
|
164
|
+
|
|
165
|
+
Script: ${BOUNCE_SCRIPT}
|
|
166
|
+
Max passes: ${BOUNCE_PASSES}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**For each PLAN.md file in the phase directory:**
|
|
170
|
+
|
|
171
|
+
1. **Backup:** Copy `*-PLAN.md` to `*-PLAN.pre-bounce.md`
|
|
172
|
+
```bash
|
|
173
|
+
cp "${PLAN_FILE}" "${PLAN_FILE%.md}.pre-bounce.md"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
2. **Invoke bounce script:**
|
|
177
|
+
```bash
|
|
178
|
+
"${BOUNCE_SCRIPT}" "${PLAN_FILE}" "${BOUNCE_PASSES}"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
3. **Validate bounced plan — YAML frontmatter integrity:**
|
|
182
|
+
After the script returns, check that the bounced file still has valid YAML frontmatter (opening and closing `---` delimiters with parseable content between them). If the bounced plan breaks YAML frontmatter validation, restore the original from the pre-bounce.md backup and continue to the next plan:
|
|
183
|
+
```
|
|
184
|
+
⚠ Bounced plan ${PLAN_FILE} has broken YAML frontmatter — restoring original from pre-bounce backup.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
4. **Handle script failure:** If the bounce script exits non-zero, restore the original plan from the pre-bounce.md backup and continue to the next plan:
|
|
188
|
+
```
|
|
189
|
+
⚠ Bounce script failed for ${PLAN_FILE} (exit code ${EXIT_CODE}) — restoring original from pre-bounce backup.
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**After all plans are bounced:**
|
|
193
|
+
|
|
194
|
+
5. **Re-run plan checker on bounced plans:** Spawn gsd-plan-checker (same as step 10) on all modified plans. If a bounced plan fails the checker, restore original from its pre-bounce.md backup:
|
|
195
|
+
```
|
|
196
|
+
⚠ Bounced plan ${PLAN_FILE} failed checker validation — restoring original from pre-bounce backup.
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
6. **Commit surviving bounced plans:** If at least one plan survived both the frontmatter validation and the checker re-run, commit the changes:
|
|
200
|
+
```bash
|
|
201
|
+
gsd_run query commit "refactor(${padded_phase}): bounce plans through external refinement" --files "${PHASE_DIR}/*-PLAN.md"
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Display summary:
|
|
205
|
+
```
|
|
206
|
+
Plan bounce complete: {survived}/{total} plans refined
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Clean up:** Remove all `*-PLAN.pre-bounce.md` backup files after the bounce step completes (whether plans survived or were restored).
|