@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
|
@@ -58,7 +58,7 @@ else
|
|
|
58
58
|
fi
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
**If `response_language` is set:** All user-facing questions, prompts, and explanations
|
|
61
|
+
**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.
|
|
62
62
|
|
|
63
63
|
If `PHASE_FOUND` is `false`: error and exit. Suggest `/gsd add-phase` or `/gsd insert-phase` to create the phase first.
|
|
64
64
|
|
|
@@ -34,6 +34,10 @@ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-pars
|
|
|
34
34
|
GSD_WS=""
|
|
35
35
|
echo "$ARGUMENTS" | grep -qE -- '--ws[[:space:]]+[A-Za-z0-9._-]+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE -- '--ws[[:space:]]+[A-Za-z0-9._-]+')
|
|
36
36
|
MILESTONE_ARG=$(echo "$ARGUMENTS" | sed -E 's/--ws[[:space:]]+[A-Za-z0-9._-]+//g' | xargs)
|
|
37
|
+
# #4456: persist GSD_WS to a file so later steps' bash fences (each a
|
|
38
|
+
# separate shell) can forward it — the same cross-fence problem Step 5/6
|
|
39
|
+
# already solve for OUTGOING_MILESTONE via .gsd-outgoing-milestone.
|
|
40
|
+
printf '%s' "$GSD_WS" > .planning/.gsd-ws-arg 2>/dev/null || true
|
|
37
41
|
RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --raw --default "" 2>/dev/null || echo "")
|
|
38
42
|
# #2994: EARLY, section-manifest-only init.new-milestone call — needed here
|
|
39
43
|
# (before Step 4) to gate the project-md-milestone-write section. This is
|
|
@@ -44,13 +48,17 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --raw --default "
|
|
|
44
48
|
# fields too early and corrupt the roadmapper's phase-numbering context.
|
|
45
49
|
# init.new-milestone is a pure read (no mutation), so calling it twice is
|
|
46
50
|
# safe; only `section_manifest` is consumed from this early call.
|
|
47
|
-
|
|
51
|
+
# #4456: $GSD_WS forwarded (same fence as the parse above, no round-trip
|
|
52
|
+
# needed here) so the section manifest — and the shared PROJECT.md write
|
|
53
|
+
# guard it gates — reflects the EXPLICITLY requested workstream, not
|
|
54
|
+
# whatever ambient GSD_WORKSTREAM/session pointer happens to be active.
|
|
55
|
+
INIT_EARLY=$(gsd_run query init.new-milestone $GSD_WS)
|
|
48
56
|
if [[ "$INIT_EARLY" == @file:* ]]; then INIT_EARLY=$(cat "${INIT_EARLY#@file:}"); fi
|
|
49
57
|
```
|
|
50
58
|
|
|
51
59
|
`GSD_WS` must chain to every downstream routing suggestion in this workflow (Step 4's shared-file guard, and the `/gsd:discuss-phase`/`/gsd:plan-phase` routing hints below) per the routing-propagation contract in `gsd-core/references/workstream-flag.md` — never let it silently drop.
|
|
52
60
|
|
|
53
|
-
**If `response_language` is set:** All user-facing questions, prompts, and explanations
|
|
61
|
+
**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 (including the "What do you want to build next?" prompt and seed-selection questions below) — MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
|
|
54
62
|
|
|
55
63
|
- Read PROJECT.md (existing project, validated requirements, decisions)
|
|
56
64
|
- Read MILESTONES.md (what shipped previously)
|
|
@@ -195,10 +203,11 @@ blockers, todos) is preserved across the switch — symmetric with
|
|
|
195
203
|
`milestone.complete`.
|
|
196
204
|
|
|
197
205
|
```bash
|
|
198
|
-
|
|
206
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
207
|
+
OUTGOING_MILESTONE=$(gsd_run query state.get milestone --raw $GSD_WS_ARG 2>/dev/null || true)
|
|
199
208
|
printf '%s' "$OUTGOING_MILESTONE" > .planning/.gsd-outgoing-milestone 2>/dev/null || true
|
|
200
209
|
echo "Outgoing milestone (phase history archives under THIS version in step 6): ${OUTGOING_MILESTONE:-<unknown>}"
|
|
201
|
-
gsd_run query state.milestone-switch --milestone "v[X.Y]" --name "[Name]"
|
|
210
|
+
gsd_run query state.milestone-switch --milestone "v[X.Y]" --name "[Name]" $GSD_WS_ARG
|
|
202
211
|
```
|
|
203
212
|
|
|
204
213
|
**Capture the outgoing version now.** The lines above read the *current* (previous) milestone
|
|
@@ -239,11 +248,12 @@ the captured value into the command, so untrusted STATE.md content cannot be re-
|
|
|
239
248
|
shell:
|
|
240
249
|
|
|
241
250
|
```bash
|
|
251
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
242
252
|
OUTGOING_MILESTONE=$(cat .planning/.gsd-outgoing-milestone 2>/dev/null || true)
|
|
243
253
|
if [ -n "$OUTGOING_MILESTONE" ]; then
|
|
244
|
-
gsd_run query phases.clear --confirm --archive-version "$OUTGOING_MILESTONE"
|
|
254
|
+
gsd_run query phases.clear --confirm --archive-version "$OUTGOING_MILESTONE" $GSD_WS_ARG
|
|
245
255
|
else
|
|
246
|
-
gsd_run query phases.clear --confirm
|
|
256
|
+
gsd_run query phases.clear --confirm $GSD_WS_ARG
|
|
247
257
|
fi
|
|
248
258
|
rm -f .planning/.gsd-outgoing-milestone 2>/dev/null || true
|
|
249
259
|
```
|
|
@@ -258,31 +268,48 @@ Stage the phase archive move + source removal so they land in the same commit as
|
|
|
258
268
|
|
|
259
269
|
```bash
|
|
260
270
|
COMMIT_DOCS=$(gsd_run query config-get commit_docs --raw 2>/dev/null || echo "true")
|
|
271
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
272
|
+
INIT_STAGE=$(gsd_run query init.new-milestone $GSD_WS_ARG)
|
|
273
|
+
if [[ "$INIT_STAGE" == @file:* ]]; then INIT_STAGE=$(cat "${INIT_STAGE#@file:}"); fi
|
|
274
|
+
_gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
|
|
275
|
+
ARCHIVE_DIR=$(_gsd_field "$INIT_STAGE" archive_dir)
|
|
276
|
+
PHASES_DIR=$(_gsd_field "$INIT_STAGE" phases_dir)
|
|
261
277
|
if [ "$COMMIT_DOCS" != "false" ]; then
|
|
262
|
-
git add
|
|
278
|
+
git add "$ARCHIVE_DIR/" "$PHASES_DIR/" 2>/dev/null || true
|
|
263
279
|
fi
|
|
264
280
|
```
|
|
265
281
|
|
|
266
282
|
When `commit_docs` is false, the archive move and phase removals are deliberately left unstaged here — not a bug — since Step 6's commit is skipped too.
|
|
267
283
|
|
|
268
|
-
Stage PROJECT.md in both modes. Step 4's Part A guard — not this commit — is what protects the shared `## Current Milestone` heading (#2308): when a workstream is active Part A never writes it, so the only change PROJECT.md can carry here is Part B's idempotent `## Evolution` backfill, which must be committed rather than stranded as a dangling edit. Do NOT reintroduce a `[ -n "$GSD_WS" ]` branch around this commit: `GSD_WS` is set in Step 1's shell and each step's bash block runs in its own shell (the same reason Step 5 round-trips `OUTGOING_MILESTONE` through a file), so such a guard reads an unset variable, always takes the flat-mode branch, and only appears to work.
|
|
284
|
+
Stage PROJECT.md in both modes. Step 4's Part A guard — not this commit — is what protects the shared `## Current Milestone` heading (#2308): when a workstream is active Part A never writes it, so the only change PROJECT.md can carry here is Part B's idempotent `## Evolution` backfill, which must be committed rather than stranded as a dangling edit. Do NOT reintroduce a `[ -n "$GSD_WS" ]` branch around this commit: `GSD_WS` is set in Step 1's shell and each step's bash block runs in its own shell (the same reason Step 5 round-trips `OUTGOING_MILESTONE` through a file), so such a guard reads an unset variable, always takes the flat-mode branch, and only appears to work. STATE.md, unlike PROJECT.md, IS workstream-scoped (Step 5's switch just wrote the workstream's own copy) — resolved below via `init.new-milestone` rather than a literal `.planning/STATE.md`, which would commit the wrong (or a stale, unrelated) file under an active workstream.
|
|
269
285
|
|
|
270
286
|
```bash
|
|
271
|
-
|
|
287
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
288
|
+
INIT_COMMIT=$(gsd_run query init.new-milestone $GSD_WS_ARG)
|
|
289
|
+
if [[ "$INIT_COMMIT" == @file:* ]]; then INIT_COMMIT=$(cat "${INIT_COMMIT#@file:}"); fi
|
|
290
|
+
_gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
|
|
291
|
+
STATE_PATH=$(_gsd_field "$INIT_COMMIT" state_path)
|
|
292
|
+
PROJECT_PATH=$(_gsd_field "$INIT_COMMIT" project_path)
|
|
293
|
+
gsd_run query commit "docs: start milestone v[X.Y] [Name]" --files "$PROJECT_PATH" "$STATE_PATH"
|
|
272
294
|
```
|
|
273
295
|
|
|
274
296
|
## 7. Load Context and Resolve Models
|
|
275
297
|
|
|
276
298
|
```bash
|
|
277
299
|
RESET_PHASE_NUMBERS_PARAM=""; if [[ "$ARGUMENTS" =~ (^|[[:space:]])--reset-phase-numbers([[:space:]]|$) ]]; then RESET_PHASE_NUMBERS_PARAM="--reset-phase-numbers"; fi
|
|
278
|
-
|
|
300
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
301
|
+
INIT=$(gsd_run query init.new-milestone $RESET_PHASE_NUMBERS_PARAM $GSD_WS_ARG)
|
|
279
302
|
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
280
303
|
AGENT_SKILLS_RESEARCHER=$(gsd_run query agent-skills gsd-project-researcher)
|
|
281
304
|
AGENT_SKILLS_SYNTHESIZER=$(gsd_run query agent-skills gsd-research-synthesizer)
|
|
282
305
|
AGENT_SKILLS_ROADMAPPER=$(gsd_run query agent-skills gsd-roadmapper)
|
|
283
306
|
```
|
|
307
|
+
<!-- #4456: .planning/.gsd-ws-arg is NOT cleaned up here — Steps 9 and 10
|
|
308
|
+
below still need to re-read it (each is its own shell) to resolve
|
|
309
|
+
REQUIREMENTS.md/ROADMAP.md/STATE.md correctly under a workstream. It is
|
|
310
|
+
removed in Step 10, its true last consumer. -->
|
|
284
311
|
|
|
285
|
-
Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `research_enabled`, `current_milestone`, `project_exists`, `roadmap_exists`, `latest_completed_milestone`, `phase_dir_count`, `phase_archive_path`, `agents_installed`, `missing_agents`, `project_path`, `roadmap_path`, `requirements_path`, `config_path`, `research_dir`, `milestones_path`.
|
|
312
|
+
Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `research_enabled`, `current_milestone`, `project_exists`, `roadmap_exists`, `latest_completed_milestone`, `phase_dir_count`, `phase_archive_path`, `agents_installed`, `missing_agents`, `project_path`, `roadmap_path`, `requirements_path`, `config_path`, `research_dir`, `milestones_path`, `phases_dir`, `archive_dir`.
|
|
286
313
|
|
|
287
314
|
**If `agents_installed` is false:** Display a warning before proceeding:
|
|
288
315
|
```
|
|
@@ -495,7 +522,12 @@ If "adjust": Return to scoping.
|
|
|
495
522
|
|
|
496
523
|
**Commit requirements:**
|
|
497
524
|
```bash
|
|
498
|
-
|
|
525
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
526
|
+
INIT_REQ=$(gsd_run query init.new-milestone $GSD_WS_ARG)
|
|
527
|
+
if [[ "$INIT_REQ" == @file:* ]]; then INIT_REQ=$(cat "${INIT_REQ#@file:}"); fi
|
|
528
|
+
_gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
|
|
529
|
+
REQUIREMENTS_PATH=$(_gsd_field "$INIT_REQ" requirements_path)
|
|
530
|
+
gsd_run query commit "docs: define milestone v[X.Y] requirements" --files "$REQUIREMENTS_PATH"
|
|
499
531
|
```
|
|
500
532
|
|
|
501
533
|
## 10. Create Roadmap
|
|
@@ -579,7 +611,17 @@ Success criteria:
|
|
|
579
611
|
|
|
580
612
|
**Commit roadmap** (after approval):
|
|
581
613
|
```bash
|
|
582
|
-
|
|
614
|
+
GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
|
|
615
|
+
INIT_ROADMAP=$(gsd_run query init.new-milestone $GSD_WS_ARG)
|
|
616
|
+
if [[ "$INIT_ROADMAP" == @file:* ]]; then INIT_ROADMAP=$(cat "${INIT_ROADMAP#@file:}"); fi
|
|
617
|
+
_gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
|
|
618
|
+
ROADMAP_PATH=$(_gsd_field "$INIT_ROADMAP" roadmap_path)
|
|
619
|
+
STATE_PATH=$(_gsd_field "$INIT_ROADMAP" state_path)
|
|
620
|
+
REQUIREMENTS_PATH=$(_gsd_field "$INIT_ROADMAP" requirements_path)
|
|
621
|
+
gsd_run query commit "docs: create milestone v[X.Y] roadmap ([N] phases)" --files "$ROADMAP_PATH" "$STATE_PATH" "$REQUIREMENTS_PATH"
|
|
622
|
+
# #4456: true last consumer of the persisted --ws in this workflow — the
|
|
623
|
+
# round-trip file is no longer needed after this commit.
|
|
624
|
+
rm -f .planning/.gsd-ws-arg 2>/dev/null || true
|
|
583
625
|
```
|
|
584
626
|
|
|
585
627
|
## 10.5. Link Pending Todos to Roadmap Phases
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# new-project.md — deferred elaboration
|
|
2
|
+
|
|
3
|
+
Read in full when `workflow.compact_content` is `false` (the default) — see
|
|
4
|
+
`gsd-core/references/compact-content-gate.md` for the check and resolution rule this
|
|
5
|
+
spine defers to. Each `§` below is the full text the spine condenses at the point it
|
|
6
|
+
names.
|
|
7
|
+
|
|
8
|
+
## § 1 — Prior Spike/Sketch Detection (Step 2b)
|
|
9
|
+
|
|
10
|
+
Check for existing spike and sketch work that should inform project setup:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# Check for spike findings skill (project-local)
|
|
14
|
+
SPIKE_SKILL=$(ls ./.claude/skills/spike-findings-*/SKILL.md 2>/dev/null | head -1 || true)
|
|
15
|
+
|
|
16
|
+
# Check for sketch findings skill (project-local)
|
|
17
|
+
SKETCH_SKILL=$(ls ./.claude/skills/sketch-findings-*/SKILL.md 2>/dev/null | head -1 || true)
|
|
18
|
+
|
|
19
|
+
# Check for raw spikes/sketches in .planning/
|
|
20
|
+
HAS_SPIKES=$(ls .planning/spikes/MANIFEST.md 2>/dev/null)
|
|
21
|
+
HAS_SKETCHES=$(ls .planning/sketches/MANIFEST.md 2>/dev/null)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If any of these exist, surface them before questioning:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
⚡ Prior exploration detected:
|
|
28
|
+
{if SPIKE_SKILL} ✓ Spike findings skill: {path} — validated patterns from experiments
|
|
29
|
+
{if SKETCH_SKILL} ✓ Sketch findings skill: {path} — validated design decisions
|
|
30
|
+
{if HAS_SPIKES && !SPIKE_SKILL} ◆ Raw spikes in .planning/spikes/ — consider `/gsd:spike --wrap-up` to package findings
|
|
31
|
+
{if HAS_SKETCHES && !SKETCH_SKILL} ◆ Raw sketches in .planning/sketches/ — consider `/gsd:sketch --wrap-up` to package findings
|
|
32
|
+
|
|
33
|
+
These findings will be incorporated into project context and available to planning agents.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
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.
|
|
37
|
+
|
|
38
|
+
## § 2 — Research Decision: the four researcher prompts, synthesizer prompt, and self-heal steps
|
|
39
|
+
|
|
40
|
+
Spawn 4 parallel gsd-project-researcher agents with path references:
|
|
41
|
+
|
|
42
|
+
<!-- #2517 model-omit-on-inherit -->
|
|
43
|
+
|
|
44
|
+
> **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.
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
Agent(prompt="<research_type>
|
|
48
|
+
Project Research — Stack dimension for [domain].
|
|
49
|
+
</research_type>
|
|
50
|
+
|
|
51
|
+
<milestone_context>
|
|
52
|
+
[greenfield OR subsequent]
|
|
53
|
+
|
|
54
|
+
Greenfield: Research the standard stack for building [domain] from scratch.
|
|
55
|
+
Subsequent: Research what's needed to add [target features] to an existing [domain] app. Don't re-research the existing system.
|
|
56
|
+
</milestone_context>
|
|
57
|
+
|
|
58
|
+
<question>
|
|
59
|
+
What's the standard 2025 stack for [domain]?
|
|
60
|
+
</question>
|
|
61
|
+
|
|
62
|
+
<required_reading>
|
|
63
|
+
- {project_path} (Project context and goals)
|
|
64
|
+
</required_reading>
|
|
65
|
+
|
|
66
|
+
${AGENT_SKILLS_RESEARCHER}
|
|
67
|
+
|
|
68
|
+
<downstream_consumer>
|
|
69
|
+
Your STACK.md feeds into roadmap creation. Be prescriptive:
|
|
70
|
+
- Specific libraries with versions
|
|
71
|
+
- Clear rationale for each choice
|
|
72
|
+
- What NOT to use and why
|
|
73
|
+
</downstream_consumer>
|
|
74
|
+
|
|
75
|
+
<quality_gate>
|
|
76
|
+
- [ ] Versions are current (verify with Context7/official docs, not training data)
|
|
77
|
+
- [ ] Rationale explains WHY, not just WHAT
|
|
78
|
+
- [ ] Confidence levels assigned to each recommendation
|
|
79
|
+
</quality_gate>
|
|
80
|
+
|
|
81
|
+
<!-- #2508 runtime-aware-dispatch -->
|
|
82
|
+
|
|
83
|
+
> **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.
|
|
84
|
+
|
|
85
|
+
<output>
|
|
86
|
+
Write to: {research_dir}/STACK.md
|
|
87
|
+
Use template: ~/.claude/gsd-core/templates/research-project/STACK.md
|
|
88
|
+
</output>
|
|
89
|
+
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Stack research")
|
|
90
|
+
|
|
91
|
+
Agent(prompt="<research_type>
|
|
92
|
+
Project Research — Features dimension for [domain].
|
|
93
|
+
</research_type>
|
|
94
|
+
|
|
95
|
+
<milestone_context>
|
|
96
|
+
[greenfield OR subsequent]
|
|
97
|
+
|
|
98
|
+
Greenfield: What features do [domain] products have? What's table stakes vs differentiating?
|
|
99
|
+
Subsequent: How do [target features] typically work? What's expected behavior?
|
|
100
|
+
</milestone_context>
|
|
101
|
+
|
|
102
|
+
<question>
|
|
103
|
+
What features do [domain] products have? What's table stakes vs differentiating?
|
|
104
|
+
</question>
|
|
105
|
+
|
|
106
|
+
<required_reading>
|
|
107
|
+
- {project_path} (Project context, for the Features researcher)
|
|
108
|
+
</required_reading>
|
|
109
|
+
|
|
110
|
+
${AGENT_SKILLS_RESEARCHER}
|
|
111
|
+
|
|
112
|
+
<downstream_consumer>
|
|
113
|
+
Your FEATURES.md feeds into requirements definition. Categorize clearly:
|
|
114
|
+
- Table stakes (must have or users leave)
|
|
115
|
+
- Differentiators (competitive advantage)
|
|
116
|
+
- Anti-features (things to deliberately NOT build)
|
|
117
|
+
</downstream_consumer>
|
|
118
|
+
|
|
119
|
+
<quality_gate>
|
|
120
|
+
- [ ] Categories are clear (table stakes vs differentiators vs anti-features)
|
|
121
|
+
- [ ] Complexity noted for each feature
|
|
122
|
+
- [ ] Dependencies between features identified
|
|
123
|
+
</quality_gate>
|
|
124
|
+
|
|
125
|
+
<output>
|
|
126
|
+
Write to: {research_dir}/FEATURES.md
|
|
127
|
+
Use template: ~/.claude/gsd-core/templates/research-project/FEATURES.md
|
|
128
|
+
</output>
|
|
129
|
+
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Features research")
|
|
130
|
+
|
|
131
|
+
Agent(prompt="<research_type>
|
|
132
|
+
Project Research — Architecture dimension for [domain].
|
|
133
|
+
</research_type>
|
|
134
|
+
|
|
135
|
+
<milestone_context>
|
|
136
|
+
[greenfield OR subsequent]
|
|
137
|
+
|
|
138
|
+
Greenfield: How are [domain] systems typically structured? What are major components?
|
|
139
|
+
Subsequent: How do [target features] integrate with existing [domain] architecture?
|
|
140
|
+
</milestone_context>
|
|
141
|
+
|
|
142
|
+
<question>
|
|
143
|
+
How are [domain] systems typically structured? What are major components?
|
|
144
|
+
</question>
|
|
145
|
+
|
|
146
|
+
<required_reading>
|
|
147
|
+
- {project_path} (Project context, for the Architecture researcher)
|
|
148
|
+
</required_reading>
|
|
149
|
+
|
|
150
|
+
${AGENT_SKILLS_RESEARCHER}
|
|
151
|
+
|
|
152
|
+
<downstream_consumer>
|
|
153
|
+
Your ARCHITECTURE.md informs phase structure in roadmap. Include:
|
|
154
|
+
- Component boundaries (what talks to what)
|
|
155
|
+
- Data flow (how information moves)
|
|
156
|
+
- Suggested build order (dependencies between components)
|
|
157
|
+
</downstream_consumer>
|
|
158
|
+
|
|
159
|
+
<quality_gate>
|
|
160
|
+
- [ ] Components clearly defined with boundaries
|
|
161
|
+
- [ ] Data flow direction explicit
|
|
162
|
+
- [ ] Build order implications noted
|
|
163
|
+
</quality_gate>
|
|
164
|
+
|
|
165
|
+
<output>
|
|
166
|
+
Write to: {research_dir}/ARCHITECTURE.md
|
|
167
|
+
Use template: ~/.claude/gsd-core/templates/research-project/ARCHITECTURE.md
|
|
168
|
+
</output>
|
|
169
|
+
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Architecture research")
|
|
170
|
+
|
|
171
|
+
Agent(prompt="<research_type>
|
|
172
|
+
Project Research — Pitfalls dimension for [domain].
|
|
173
|
+
</research_type>
|
|
174
|
+
|
|
175
|
+
<milestone_context>
|
|
176
|
+
[greenfield OR subsequent]
|
|
177
|
+
|
|
178
|
+
Greenfield: What do [domain] projects commonly get wrong? Critical mistakes?
|
|
179
|
+
Subsequent: What are common mistakes when adding [target features] to [domain]?
|
|
180
|
+
</milestone_context>
|
|
181
|
+
|
|
182
|
+
<question>
|
|
183
|
+
What do [domain] projects commonly get wrong? Critical mistakes?
|
|
184
|
+
</question>
|
|
185
|
+
|
|
186
|
+
<required_reading>
|
|
187
|
+
- {project_path} (Project context, for the Pitfalls researcher)
|
|
188
|
+
</required_reading>
|
|
189
|
+
|
|
190
|
+
${AGENT_SKILLS_RESEARCHER}
|
|
191
|
+
|
|
192
|
+
<downstream_consumer>
|
|
193
|
+
Your PITFALLS.md prevents mistakes in roadmap/planning. For each pitfall:
|
|
194
|
+
- Warning signs (how to detect early)
|
|
195
|
+
- Prevention strategy (how to avoid)
|
|
196
|
+
- Which phase should address it
|
|
197
|
+
</downstream_consumer>
|
|
198
|
+
|
|
199
|
+
<quality_gate>
|
|
200
|
+
- [ ] Pitfalls are specific to this domain (not generic advice)
|
|
201
|
+
- [ ] Prevention strategies are actionable
|
|
202
|
+
- [ ] Phase mapping included where relevant
|
|
203
|
+
</quality_gate>
|
|
204
|
+
|
|
205
|
+
<output>
|
|
206
|
+
Write to: {research_dir}/PITFALLS.md
|
|
207
|
+
Use template: ~/.claude/gsd-core/templates/research-project/PITFALLS.md
|
|
208
|
+
</output>
|
|
209
|
+
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="Pitfalls research")
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
(The "wait for all 4 researchers before spawning the synthesizer" orchestrator rule, the full
|
|
213
|
+
synthesizer `Agent()` call, and the entire #222 self-heal recovery sequence — including its log
|
|
214
|
+
message and closing guarantee — are all stated verbatim in the spine. A pre-existing structural
|
|
215
|
+
drift guard (`tests/research-agent-profiles.test.cjs`) pins them there, so nothing about this
|
|
216
|
+
particular sub-flow is deferred to this file.)
|