gsd-remix 1.0.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/LICENSE +21 -0
- package/README.md +939 -0
- package/README.zh-CN.md +876 -0
- package/agents/gsd-advisor-researcher.md +127 -0
- package/agents/gsd-ai-researcher.md +133 -0
- package/agents/gsd-assumptions-analyzer.md +105 -0
- package/agents/gsd-code-fixer.md +517 -0
- package/agents/gsd-code-reviewer.md +371 -0
- package/agents/gsd-codebase-mapper.md +781 -0
- package/agents/gsd-debug-session-manager.md +314 -0
- package/agents/gsd-debugger.md +1452 -0
- package/agents/gsd-doc-classifier.md +168 -0
- package/agents/gsd-doc-synthesizer.md +204 -0
- package/agents/gsd-doc-verifier.md +217 -0
- package/agents/gsd-doc-writer.md +615 -0
- package/agents/gsd-domain-researcher.md +153 -0
- package/agents/gsd-eval-auditor.md +191 -0
- package/agents/gsd-eval-planner.md +154 -0
- package/agents/gsd-executor.md +603 -0
- package/agents/gsd-framework-selector.md +160 -0
- package/agents/gsd-integration-checker.md +470 -0
- package/agents/gsd-intel-updater.md +334 -0
- package/agents/gsd-nyquist-auditor.md +203 -0
- package/agents/gsd-pattern-mapper.md +335 -0
- package/agents/gsd-phase-researcher.md +841 -0
- package/agents/gsd-plan-checker.md +978 -0
- package/agents/gsd-planner.md +1251 -0
- package/agents/gsd-project-researcher.md +677 -0
- package/agents/gsd-research-synthesizer.md +247 -0
- package/agents/gsd-roadmapper.md +688 -0
- package/agents/gsd-security-auditor.md +155 -0
- package/agents/gsd-ui-auditor.md +495 -0
- package/agents/gsd-ui-checker.md +309 -0
- package/agents/gsd-ui-researcher.md +380 -0
- package/agents/gsd-user-profiler.md +171 -0
- package/agents/gsd-verifier.md +830 -0
- package/bin/install.js +7062 -0
- package/commands/gsd/add-backlog.md +79 -0
- package/commands/gsd/add-phase.md +43 -0
- package/commands/gsd/add-tests.md +41 -0
- package/commands/gsd/add-todo.md +47 -0
- package/commands/gsd/ai-integration-phase.md +36 -0
- package/commands/gsd/analyze-dependencies.md +34 -0
- package/commands/gsd/audit-fix.md +33 -0
- package/commands/gsd/audit-milestone.md +36 -0
- package/commands/gsd/audit-uat.md +24 -0
- package/commands/gsd/autonomous.md +46 -0
- package/commands/gsd/check-todos.md +45 -0
- package/commands/gsd/cleanup.md +23 -0
- package/commands/gsd/code-review-fix.md +52 -0
- package/commands/gsd/code-review.md +55 -0
- package/commands/gsd/complete-milestone.md +136 -0
- package/commands/gsd/debug.md +263 -0
- package/commands/gsd/discuss-phase.md +69 -0
- package/commands/gsd/do.md +30 -0
- package/commands/gsd/docs-update.md +48 -0
- package/commands/gsd/eval-review.md +32 -0
- package/commands/gsd/execute-phase.md +63 -0
- package/commands/gsd/explore.md +27 -0
- package/commands/gsd/extract_learnings.md +22 -0
- package/commands/gsd/fast.md +30 -0
- package/commands/gsd/forensics.md +56 -0
- package/commands/gsd/from-gsd2.md +47 -0
- package/commands/gsd/graphify.md +201 -0
- package/commands/gsd/health.md +22 -0
- package/commands/gsd/help.md +24 -0
- package/commands/gsd/import.md +37 -0
- package/commands/gsd/inbox.md +38 -0
- package/commands/gsd/ingest-docs.md +42 -0
- package/commands/gsd/insert-phase.md +32 -0
- package/commands/gsd/intel.md +179 -0
- package/commands/gsd/join-discord.md +19 -0
- package/commands/gsd/list-phase-assumptions.md +46 -0
- package/commands/gsd/list-workspaces.md +19 -0
- package/commands/gsd/manager.md +40 -0
- package/commands/gsd/map-codebase.md +71 -0
- package/commands/gsd/milestone-summary.md +51 -0
- package/commands/gsd/new-milestone.md +44 -0
- package/commands/gsd/new-project.md +46 -0
- package/commands/gsd/new-workspace.md +44 -0
- package/commands/gsd/next.md +28 -0
- package/commands/gsd/note.md +34 -0
- package/commands/gsd/pause-work.md +38 -0
- package/commands/gsd/plan-milestone-gaps.md +34 -0
- package/commands/gsd/plan-phase.md +52 -0
- package/commands/gsd/plan-review-convergence.md +52 -0
- package/commands/gsd/plant-seed.md +28 -0
- package/commands/gsd/pr-branch.md +25 -0
- package/commands/gsd/profile-user.md +46 -0
- package/commands/gsd/progress.md +25 -0
- package/commands/gsd/quick.md +173 -0
- package/commands/gsd/reapply-patches.md +331 -0
- package/commands/gsd/remove-phase.md +31 -0
- package/commands/gsd/remove-workspace.md +26 -0
- package/commands/gsd/research-phase.md +195 -0
- package/commands/gsd/resume-work.md +40 -0
- package/commands/gsd/review-backlog.md +62 -0
- package/commands/gsd/review.md +40 -0
- package/commands/gsd/scan.md +26 -0
- package/commands/gsd/secure-phase.md +35 -0
- package/commands/gsd/session-report.md +19 -0
- package/commands/gsd/set-profile.md +12 -0
- package/commands/gsd/settings.md +36 -0
- package/commands/gsd/ship.md +23 -0
- package/commands/gsd/sketch-wrap-up.md +31 -0
- package/commands/gsd/sketch.md +49 -0
- package/commands/gsd/spec-phase.md +62 -0
- package/commands/gsd/spike-wrap-up.md +31 -0
- package/commands/gsd/spike.md +46 -0
- package/commands/gsd/stats.md +18 -0
- package/commands/gsd/sync-skills.md +19 -0
- package/commands/gsd/thread.md +227 -0
- package/commands/gsd/ui-phase.md +34 -0
- package/commands/gsd/ui-review.md +32 -0
- package/commands/gsd/ultraplan-phase.md +33 -0
- package/commands/gsd/undo.md +34 -0
- package/commands/gsd/update.md +37 -0
- package/commands/gsd/validate-phase.md +35 -0
- package/commands/gsd/verify-work.md +38 -0
- package/commands/gsd/workstreams.md +69 -0
- package/get-shit-done/bin/gsd-tools.cjs +1263 -0
- package/get-shit-done/bin/lib/artifacts.cjs +52 -0
- package/get-shit-done/bin/lib/audit.cjs +757 -0
- package/get-shit-done/bin/lib/commands.cjs +1023 -0
- package/get-shit-done/bin/lib/config-schema.cjs +79 -0
- package/get-shit-done/bin/lib/config.cjs +463 -0
- package/get-shit-done/bin/lib/core.cjs +1794 -0
- package/get-shit-done/bin/lib/docs.cjs +267 -0
- package/get-shit-done/bin/lib/frontmatter.cjs +379 -0
- package/get-shit-done/bin/lib/graphify.cjs +494 -0
- package/get-shit-done/bin/lib/gsd2-import.cjs +511 -0
- package/get-shit-done/bin/lib/init.cjs +1878 -0
- package/get-shit-done/bin/lib/intel.cjs +639 -0
- package/get-shit-done/bin/lib/learnings.cjs +378 -0
- package/get-shit-done/bin/lib/milestone.cjs +283 -0
- package/get-shit-done/bin/lib/model-profiles.cjs +71 -0
- package/get-shit-done/bin/lib/phase.cjs +1058 -0
- package/get-shit-done/bin/lib/profile-output.cjs +1080 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/roadmap.cjs +523 -0
- package/get-shit-done/bin/lib/schema-detect.cjs +238 -0
- package/get-shit-done/bin/lib/security.cjs +504 -0
- package/get-shit-done/bin/lib/state.cjs +1649 -0
- package/get-shit-done/bin/lib/template.cjs +226 -0
- package/get-shit-done/bin/lib/uat.cjs +288 -0
- package/get-shit-done/bin/lib/verify.cjs +1184 -0
- package/get-shit-done/bin/lib/workstream.cjs +495 -0
- package/get-shit-done/bin/repair-sdk.cjs +177 -0
- package/get-shit-done/contexts/dev.md +21 -0
- package/get-shit-done/contexts/research.md +22 -0
- package/get-shit-done/contexts/review.md +22 -0
- package/get-shit-done/references/agent-contracts.md +79 -0
- package/get-shit-done/references/ai-evals.md +156 -0
- package/get-shit-done/references/ai-frameworks.md +186 -0
- package/get-shit-done/references/artifact-types.md +131 -0
- package/get-shit-done/references/autonomous-smart-discuss.md +277 -0
- package/get-shit-done/references/checkpoints.md +808 -0
- package/get-shit-done/references/common-bug-patterns.md +114 -0
- package/get-shit-done/references/context-budget.md +49 -0
- package/get-shit-done/references/continuation-format.md +253 -0
- package/get-shit-done/references/debugger-philosophy.md +76 -0
- package/get-shit-done/references/decimal-phase-calculation.md +64 -0
- package/get-shit-done/references/doc-conflict-engine.md +91 -0
- package/get-shit-done/references/domain-probes.md +125 -0
- package/get-shit-done/references/executor-examples.md +110 -0
- package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
- package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
- package/get-shit-done/references/gate-prompts.md +100 -0
- package/get-shit-done/references/gates.md +70 -0
- package/get-shit-done/references/git-integration.md +295 -0
- package/get-shit-done/references/git-planning-commit.md +40 -0
- package/get-shit-done/references/ios-scaffold.md +123 -0
- package/get-shit-done/references/mandatory-initial-read.md +2 -0
- package/get-shit-done/references/model-profile-resolution.md +38 -0
- package/get-shit-done/references/model-profiles.md +145 -0
- package/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/get-shit-done/references/planner-antipatterns.md +89 -0
- package/get-shit-done/references/planner-gap-closure.md +62 -0
- package/get-shit-done/references/planner-reviews.md +39 -0
- package/get-shit-done/references/planner-revision.md +87 -0
- package/get-shit-done/references/planner-source-audit.md +73 -0
- package/get-shit-done/references/planning-config.md +460 -0
- package/get-shit-done/references/project-skills-discovery.md +19 -0
- package/get-shit-done/references/questioning.md +162 -0
- package/get-shit-done/references/revision-loop.md +97 -0
- package/get-shit-done/references/sketch-interactivity.md +41 -0
- package/get-shit-done/references/sketch-theme-system.md +94 -0
- package/get-shit-done/references/sketch-tooling.md +45 -0
- package/get-shit-done/references/sketch-variant-patterns.md +81 -0
- package/get-shit-done/references/tdd.md +330 -0
- package/get-shit-done/references/thinking-models-debug.md +44 -0
- package/get-shit-done/references/thinking-models-execution.md +50 -0
- package/get-shit-done/references/thinking-models-planning.md +62 -0
- package/get-shit-done/references/thinking-models-research.md +50 -0
- package/get-shit-done/references/thinking-models-verification.md +55 -0
- package/get-shit-done/references/thinking-partner.md +96 -0
- package/get-shit-done/references/ui-brand.md +160 -0
- package/get-shit-done/references/universal-anti-patterns.md +63 -0
- package/get-shit-done/references/user-profiling.md +681 -0
- package/get-shit-done/references/verification-overrides.md +227 -0
- package/get-shit-done/references/verification-patterns.md +612 -0
- package/get-shit-done/references/workstream-flag.md +111 -0
- package/get-shit-done/templates/AI-SPEC.md +246 -0
- package/get-shit-done/templates/DEBUG.md +169 -0
- package/get-shit-done/templates/README.md +76 -0
- package/get-shit-done/templates/SECURITY.md +61 -0
- package/get-shit-done/templates/UAT.md +265 -0
- package/get-shit-done/templates/UI-SPEC.md +100 -0
- package/get-shit-done/templates/VALIDATION.md +76 -0
- package/get-shit-done/templates/claude-md.md +145 -0
- package/get-shit-done/templates/codebase/architecture.md +255 -0
- package/get-shit-done/templates/codebase/concerns.md +310 -0
- package/get-shit-done/templates/codebase/conventions.md +307 -0
- package/get-shit-done/templates/codebase/integrations.md +280 -0
- package/get-shit-done/templates/codebase/stack.md +186 -0
- package/get-shit-done/templates/codebase/structure.md +285 -0
- package/get-shit-done/templates/codebase/testing.md +480 -0
- package/get-shit-done/templates/config.json +56 -0
- package/get-shit-done/templates/context.md +352 -0
- package/get-shit-done/templates/continue-here.md +78 -0
- package/get-shit-done/templates/copilot-instructions.md +7 -0
- package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
- package/get-shit-done/templates/dev-preferences.md +21 -0
- package/get-shit-done/templates/discovery.md +146 -0
- package/get-shit-done/templates/discussion-log.md +63 -0
- package/get-shit-done/templates/milestone-archive.md +123 -0
- package/get-shit-done/templates/milestone.md +115 -0
- package/get-shit-done/templates/phase-prompt.md +610 -0
- package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
- package/get-shit-done/templates/project.md +186 -0
- package/get-shit-done/templates/requirements.md +231 -0
- package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
- package/get-shit-done/templates/research-project/FEATURES.md +147 -0
- package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
- package/get-shit-done/templates/research-project/STACK.md +120 -0
- package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
- package/get-shit-done/templates/research.md +592 -0
- package/get-shit-done/templates/retrospective.md +54 -0
- package/get-shit-done/templates/roadmap.md +202 -0
- package/get-shit-done/templates/spec.md +307 -0
- package/get-shit-done/templates/state.md +184 -0
- package/get-shit-done/templates/summary-complex.md +59 -0
- package/get-shit-done/templates/summary-minimal.md +41 -0
- package/get-shit-done/templates/summary-standard.md +48 -0
- package/get-shit-done/templates/summary.md +248 -0
- package/get-shit-done/templates/user-profile.md +146 -0
- package/get-shit-done/templates/user-setup.md +311 -0
- package/get-shit-done/templates/verification-report.md +322 -0
- package/get-shit-done/workflows/add-phase.md +112 -0
- package/get-shit-done/workflows/add-tests.md +354 -0
- package/get-shit-done/workflows/add-todo.md +160 -0
- package/get-shit-done/workflows/ai-integration-phase.md +284 -0
- package/get-shit-done/workflows/analyze-dependencies.md +96 -0
- package/get-shit-done/workflows/audit-fix.md +175 -0
- package/get-shit-done/workflows/audit-milestone.md +340 -0
- package/get-shit-done/workflows/audit-uat.md +109 -0
- package/get-shit-done/workflows/autonomous.md +789 -0
- package/get-shit-done/workflows/check-todos.md +179 -0
- package/get-shit-done/workflows/cleanup.md +154 -0
- package/get-shit-done/workflows/code-review-fix.md +497 -0
- package/get-shit-done/workflows/code-review.md +515 -0
- package/get-shit-done/workflows/complete-milestone.md +847 -0
- package/get-shit-done/workflows/diagnose-issues.md +238 -0
- package/get-shit-done/workflows/discovery-phase.md +291 -0
- package/get-shit-done/workflows/discuss-phase-assumptions.md +670 -0
- package/get-shit-done/workflows/discuss-phase-power.md +308 -0
- package/get-shit-done/workflows/discuss-phase.md +1378 -0
- package/get-shit-done/workflows/do.md +110 -0
- package/get-shit-done/workflows/docs-update.md +1155 -0
- package/get-shit-done/workflows/eval-review.md +155 -0
- package/get-shit-done/workflows/execute-phase.md +1677 -0
- package/get-shit-done/workflows/execute-plan.md +533 -0
- package/get-shit-done/workflows/explore.md +141 -0
- package/get-shit-done/workflows/extract_learnings.md +242 -0
- package/get-shit-done/workflows/fast.md +105 -0
- package/get-shit-done/workflows/forensics.md +265 -0
- package/get-shit-done/workflows/graduation.md +195 -0
- package/get-shit-done/workflows/health.md +314 -0
- package/get-shit-done/workflows/help.md +667 -0
- package/get-shit-done/workflows/import.md +246 -0
- package/get-shit-done/workflows/inbox.md +387 -0
- package/get-shit-done/workflows/ingest-docs.md +328 -0
- package/get-shit-done/workflows/insert-phase.md +130 -0
- package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
- package/get-shit-done/workflows/list-workspaces.md +56 -0
- package/get-shit-done/workflows/manager.md +365 -0
- package/get-shit-done/workflows/map-codebase.md +393 -0
- package/get-shit-done/workflows/milestone-summary.md +223 -0
- package/get-shit-done/workflows/new-milestone.md +611 -0
- package/get-shit-done/workflows/new-project.md +1391 -0
- package/get-shit-done/workflows/new-workspace.md +239 -0
- package/get-shit-done/workflows/next.md +220 -0
- package/get-shit-done/workflows/node-repair.md +92 -0
- package/get-shit-done/workflows/note.md +158 -0
- package/get-shit-done/workflows/pause-work.md +243 -0
- package/get-shit-done/workflows/plan-milestone-gaps.md +273 -0
- package/get-shit-done/workflows/plan-phase.md +1349 -0
- package/get-shit-done/workflows/plan-review-convergence.md +254 -0
- package/get-shit-done/workflows/plant-seed.md +172 -0
- package/get-shit-done/workflows/pr-branch.md +157 -0
- package/get-shit-done/workflows/profile-user.md +452 -0
- package/get-shit-done/workflows/progress.md +619 -0
- package/get-shit-done/workflows/quick.md +970 -0
- package/get-shit-done/workflows/remove-phase.md +155 -0
- package/get-shit-done/workflows/remove-workspace.md +92 -0
- package/get-shit-done/workflows/research-phase.md +89 -0
- package/get-shit-done/workflows/resume-project.md +326 -0
- package/get-shit-done/workflows/review.md +344 -0
- package/get-shit-done/workflows/scan.md +102 -0
- package/get-shit-done/workflows/secure-phase.md +166 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/settings.md +319 -0
- package/get-shit-done/workflows/ship.md +302 -0
- package/get-shit-done/workflows/sketch-wrap-up.md +283 -0
- package/get-shit-done/workflows/sketch.md +286 -0
- package/get-shit-done/workflows/spec-phase.md +262 -0
- package/get-shit-done/workflows/spike-wrap-up.md +281 -0
- package/get-shit-done/workflows/spike.md +362 -0
- package/get-shit-done/workflows/stats.md +60 -0
- package/get-shit-done/workflows/sync-skills.md +182 -0
- package/get-shit-done/workflows/transition.md +693 -0
- package/get-shit-done/workflows/ui-phase.md +323 -0
- package/get-shit-done/workflows/ui-review.md +190 -0
- package/get-shit-done/workflows/ultraplan-phase.md +189 -0
- package/get-shit-done/workflows/undo.md +314 -0
- package/get-shit-done/workflows/update.md +587 -0
- package/get-shit-done/workflows/validate-phase.md +176 -0
- package/get-shit-done/workflows/verify-phase.md +465 -0
- package/get-shit-done/workflows/verify-work.md +740 -0
- package/hooks/dist/gsd-check-update-worker.js +108 -0
- package/hooks/dist/gsd-check-update.js +64 -0
- package/hooks/dist/gsd-context-monitor.js +192 -0
- package/hooks/dist/gsd-phase-boundary.sh +28 -0
- package/hooks/dist/gsd-prompt-guard.js +97 -0
- package/hooks/dist/gsd-read-guard.js +82 -0
- package/hooks/dist/gsd-read-injection-scanner.js +152 -0
- package/hooks/dist/gsd-session-state.sh +34 -0
- package/hooks/dist/gsd-statusline.js +293 -0
- package/hooks/dist/gsd-validate-commit.sh +48 -0
- package/hooks/dist/gsd-workflow-guard.js +94 -0
- package/hooks/gsd-check-update-worker.js +108 -0
- package/hooks/gsd-check-update.js +64 -0
- package/hooks/gsd-context-monitor.js +192 -0
- package/hooks/gsd-phase-boundary.sh +28 -0
- package/hooks/gsd-prompt-guard.js +97 -0
- package/hooks/gsd-read-guard.js +82 -0
- package/hooks/gsd-read-injection-scanner.js +152 -0
- package/hooks/gsd-session-state.sh +34 -0
- package/hooks/gsd-statusline.js +293 -0
- package/hooks/gsd-validate-commit.sh +48 -0
- package/hooks/gsd-workflow-guard.js +94 -0
- package/package.json +59 -0
- package/scripts/base64-scan.sh +262 -0
- package/scripts/build-hooks.js +95 -0
- package/scripts/gen-inventory-manifest.cjs +109 -0
- package/scripts/prompt-injection-scan.sh +201 -0
- package/scripts/run-tests.cjs +33 -0
- package/scripts/secret-scan.sh +227 -0
- package/sdk/package-lock.json +1998 -0
- package/sdk/package.json +52 -0
- package/sdk/prompts/agents/gsd-executor.md +110 -0
- package/sdk/prompts/agents/gsd-phase-researcher.md +158 -0
- package/sdk/prompts/agents/gsd-plan-checker.md +160 -0
- package/sdk/prompts/agents/gsd-planner.md +214 -0
- package/sdk/prompts/agents/gsd-project-researcher.md +323 -0
- package/sdk/prompts/agents/gsd-research-synthesizer.md +237 -0
- package/sdk/prompts/agents/gsd-roadmapper.md +670 -0
- package/sdk/prompts/agents/gsd-verifier.md +159 -0
- package/sdk/prompts/templates/project.md +186 -0
- package/sdk/prompts/templates/requirements.md +231 -0
- package/sdk/prompts/templates/research-project/ARCHITECTURE.md +204 -0
- package/sdk/prompts/templates/research-project/FEATURES.md +147 -0
- package/sdk/prompts/templates/research-project/PITFALLS.md +200 -0
- package/sdk/prompts/templates/research-project/STACK.md +120 -0
- package/sdk/prompts/templates/research-project/SUMMARY.md +170 -0
- package/sdk/prompts/templates/roadmap.md +202 -0
- package/sdk/prompts/templates/state.md +175 -0
- package/sdk/prompts/workflows/discuss-phase.md +126 -0
- package/sdk/prompts/workflows/execute-plan.md +106 -0
- package/sdk/prompts/workflows/plan-phase.md +84 -0
- package/sdk/prompts/workflows/research-phase.md +45 -0
- package/sdk/prompts/workflows/verify-phase.md +142 -0
- package/sdk/src/assembled-prompts.test.ts +349 -0
- package/sdk/src/cli-transport.test.ts +388 -0
- package/sdk/src/cli-transport.ts +130 -0
- package/sdk/src/cli.test.ts +383 -0
- package/sdk/src/cli.ts +670 -0
- package/sdk/src/config.test.ts +168 -0
- package/sdk/src/config.ts +177 -0
- package/sdk/src/context-engine.test.ts +295 -0
- package/sdk/src/context-engine.ts +170 -0
- package/sdk/src/context-truncation.test.ts +163 -0
- package/sdk/src/context-truncation.ts +233 -0
- package/sdk/src/e2e.integration.test.ts +178 -0
- package/sdk/src/errors.ts +72 -0
- package/sdk/src/event-stream.test.ts +661 -0
- package/sdk/src/event-stream.ts +441 -0
- package/sdk/src/failure-memory.test.ts +457 -0
- package/sdk/src/failure-memory.ts +1324 -0
- package/sdk/src/golden/capture.ts +95 -0
- package/sdk/src/golden/fixtures/generate-slug.golden.json +1 -0
- package/sdk/src/golden/fixtures/profile-sample-sessions/demo-project/sample.jsonl +3 -0
- package/sdk/src/golden/fixtures/summary-extract-sample.md +26 -0
- package/sdk/src/golden/fixtures/uat-render-checkpoint-sample.md +15 -0
- package/sdk/src/golden/golden-integration-covered.ts +30 -0
- package/sdk/src/golden/golden-mutation-covered.ts +7 -0
- package/sdk/src/golden/golden-policy.test.ts +8 -0
- package/sdk/src/golden/golden-policy.ts +112 -0
- package/sdk/src/golden/golden.integration.test.ts +373 -0
- package/sdk/src/golden/init-golden-normalize.ts +15 -0
- package/sdk/src/golden/read-only-golden-rows.ts +77 -0
- package/sdk/src/golden/read-only-parity.integration.test.ts +125 -0
- package/sdk/src/golden/registry-canonical-commands.ts +31 -0
- package/sdk/src/gsd-tools.test.ts +409 -0
- package/sdk/src/gsd-tools.ts +595 -0
- package/sdk/src/headless-prompts.test.ts +159 -0
- package/sdk/src/index.ts +333 -0
- package/sdk/src/init-e2e.integration.test.ts +136 -0
- package/sdk/src/init-runner.test.ts +783 -0
- package/sdk/src/init-runner.ts +735 -0
- package/sdk/src/lifecycle-e2e.integration.test.ts +258 -0
- package/sdk/src/logger.test.ts +149 -0
- package/sdk/src/logger.ts +113 -0
- package/sdk/src/milestone-runner.test.ts +421 -0
- package/sdk/src/phase-prompt.test.ts +538 -0
- package/sdk/src/phase-prompt.ts +264 -0
- package/sdk/src/phase-runner-types.test.ts +421 -0
- package/sdk/src/phase-runner.integration.test.ts +377 -0
- package/sdk/src/phase-runner.test.ts +2333 -0
- package/sdk/src/phase-runner.ts +1203 -0
- package/sdk/src/plan-parser.test.ts +528 -0
- package/sdk/src/plan-parser.ts +427 -0
- package/sdk/src/prompt-builder.test.ts +306 -0
- package/sdk/src/prompt-builder.ts +193 -0
- package/sdk/src/prompt-sanitizer.test.ts +260 -0
- package/sdk/src/prompt-sanitizer.ts +71 -0
- package/sdk/src/query/QUERY-HANDLERS.md +317 -0
- package/sdk/src/query/audit-open.ts +722 -0
- package/sdk/src/query/check-auto-mode.test.ts +77 -0
- package/sdk/src/query/check-auto-mode.ts +50 -0
- package/sdk/src/query/check-completion.test.ts +113 -0
- package/sdk/src/query/check-completion.ts +182 -0
- package/sdk/src/query/check-gates.test.ts +103 -0
- package/sdk/src/query/check-gates.ts +112 -0
- package/sdk/src/query/check-ship-ready.test.ts +77 -0
- package/sdk/src/query/check-ship-ready.ts +103 -0
- package/sdk/src/query/check-verification-status.test.ts +143 -0
- package/sdk/src/query/check-verification-status.ts +160 -0
- package/sdk/src/query/commit.test.ts +202 -0
- package/sdk/src/query/commit.ts +301 -0
- package/sdk/src/query/config-gates.test.ts +89 -0
- package/sdk/src/query/config-gates.ts +69 -0
- package/sdk/src/query/config-mutation.test.ts +365 -0
- package/sdk/src/query/config-mutation.ts +497 -0
- package/sdk/src/query/config-query.test.ts +161 -0
- package/sdk/src/query/config-query.ts +190 -0
- package/sdk/src/query/context-history.test.ts +165 -0
- package/sdk/src/query/context-history.ts +467 -0
- package/sdk/src/query/decomposed-handlers.test.ts +365 -0
- package/sdk/src/query/detect-custom-files.ts +97 -0
- package/sdk/src/query/detect-phase-type.test.ts +105 -0
- package/sdk/src/query/detect-phase-type.ts +141 -0
- package/sdk/src/query/docs-init.ts +257 -0
- package/sdk/src/query/failure-capture.ts +58 -0
- package/sdk/src/query/frontmatter-array.test.ts +14 -0
- package/sdk/src/query/frontmatter-mutation.test.ts +259 -0
- package/sdk/src/query/frontmatter-mutation.ts +343 -0
- package/sdk/src/query/frontmatter.test.ts +281 -0
- package/sdk/src/query/frontmatter.ts +397 -0
- package/sdk/src/query/helpers.test.ts +426 -0
- package/sdk/src/query/helpers.ts +482 -0
- package/sdk/src/query/index.ts +586 -0
- package/sdk/src/query/init-complex.test.ts +232 -0
- package/sdk/src/query/init-complex.ts +578 -0
- package/sdk/src/query/init.test.ts +522 -0
- package/sdk/src/query/init.ts +1046 -0
- package/sdk/src/query/intel.test.ts +90 -0
- package/sdk/src/query/intel.ts +404 -0
- package/sdk/src/query/normalize-query-command.test.ts +50 -0
- package/sdk/src/query/normalize-query-command.ts +56 -0
- package/sdk/src/query/phase-lifecycle.test.ts +1126 -0
- package/sdk/src/query/phase-lifecycle.ts +1799 -0
- package/sdk/src/query/phase-list-queries.test.ts +88 -0
- package/sdk/src/query/phase-list-queries.ts +152 -0
- package/sdk/src/query/phase-ready.test.ts +65 -0
- package/sdk/src/query/phase-ready.ts +158 -0
- package/sdk/src/query/phase.test.ts +307 -0
- package/sdk/src/query/phase.ts +340 -0
- package/sdk/src/query/pipeline.test.ts +169 -0
- package/sdk/src/query/pipeline.ts +243 -0
- package/sdk/src/query/plan-execution-route.test.ts +166 -0
- package/sdk/src/query/plan-execution-route.ts +209 -0
- package/sdk/src/query/plan-task-structure.test.ts +65 -0
- package/sdk/src/query/plan-task-structure.ts +63 -0
- package/sdk/src/query/profile-extract-messages.ts +247 -0
- package/sdk/src/query/profile-output.ts +908 -0
- package/sdk/src/query/profile-questionnaire-data.ts +181 -0
- package/sdk/src/query/profile-sample.ts +184 -0
- package/sdk/src/query/profile-scan-sessions.ts +174 -0
- package/sdk/src/query/profile.test.ts +74 -0
- package/sdk/src/query/profile.ts +337 -0
- package/sdk/src/query/progress.test.ts +156 -0
- package/sdk/src/query/progress.ts +566 -0
- package/sdk/src/query/registry.test.ts +216 -0
- package/sdk/src/query/registry.ts +174 -0
- package/sdk/src/query/requirements-extract-from-plans.test.ts +58 -0
- package/sdk/src/query/requirements-extract-from-plans.ts +86 -0
- package/sdk/src/query/roadmap-update-plan-progress.ts +132 -0
- package/sdk/src/query/roadmap.test.ts +359 -0
- package/sdk/src/query/roadmap.ts +591 -0
- package/sdk/src/query/route-next-action.test.ts +61 -0
- package/sdk/src/query/route-next-action.ts +345 -0
- package/sdk/src/query/runtime-health.ts +7 -0
- package/sdk/src/query/schema-detect.ts +189 -0
- package/sdk/src/query/skill-manifest.ts +214 -0
- package/sdk/src/query/skills.test.ts +80 -0
- package/sdk/src/query/skills.ts +62 -0
- package/sdk/src/query/state-mutation.test.ts +450 -0
- package/sdk/src/query/state-mutation.ts +1444 -0
- package/sdk/src/query/state-project-load.ts +109 -0
- package/sdk/src/query/state.test.ts +347 -0
- package/sdk/src/query/state.ts +397 -0
- package/sdk/src/query/summary.test.ts +95 -0
- package/sdk/src/query/summary.ts +296 -0
- package/sdk/src/query/template.test.ts +180 -0
- package/sdk/src/query/template.ts +242 -0
- package/sdk/src/query/uat.test.ts +77 -0
- package/sdk/src/query/uat.ts +314 -0
- package/sdk/src/query/utils.test.ts +82 -0
- package/sdk/src/query/utils.ts +92 -0
- package/sdk/src/query/validate.test.ts +656 -0
- package/sdk/src/query/validate.ts +807 -0
- package/sdk/src/query/verify.test.ts +414 -0
- package/sdk/src/query/verify.ts +645 -0
- package/sdk/src/query/websearch.test.ts +31 -0
- package/sdk/src/query/websearch.ts +82 -0
- package/sdk/src/query/workspace.test.ts +119 -0
- package/sdk/src/query/workspace.ts +131 -0
- package/sdk/src/query/workstream.test.ts +51 -0
- package/sdk/src/query/workstream.ts +434 -0
- package/sdk/src/research-gate.test.ts +190 -0
- package/sdk/src/research-gate.ts +94 -0
- package/sdk/src/runtime-health.test.ts +176 -0
- package/sdk/src/runtime-health.ts +387 -0
- package/sdk/src/session-runner.test.ts +98 -0
- package/sdk/src/session-runner.ts +299 -0
- package/sdk/src/tool-scoping.test.ts +160 -0
- package/sdk/src/tool-scoping.ts +61 -0
- package/sdk/src/types.ts +917 -0
- package/sdk/src/workstream-utils.ts +33 -0
- package/sdk/src/ws-flag.test.ts +285 -0
- package/sdk/src/ws-transport.test.ts +161 -0
- package/sdk/src/ws-transport.ts +93 -0
- package/sdk/tsconfig.json +20 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Curate spike experiment findings and package them into a persistent project skill for future
|
|
3
|
+
build conversations. Reads from `.planning/spikes/`, writes skill to `./.claude/skills/spike-findings-[project]/`
|
|
4
|
+
(project-local) and summary to `.planning/spikes/WRAP-UP-SUMMARY.md`.
|
|
5
|
+
Companion to `/gsd-spike`.
|
|
6
|
+
</purpose>
|
|
7
|
+
|
|
8
|
+
<required_reading>
|
|
9
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
10
|
+
</required_reading>
|
|
11
|
+
|
|
12
|
+
<process>
|
|
13
|
+
|
|
14
|
+
<step name="banner">
|
|
15
|
+
```
|
|
16
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
17
|
+
GSD ► SPIKE WRAP-UP
|
|
18
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
```
|
|
20
|
+
</step>
|
|
21
|
+
|
|
22
|
+
<step name="gather">
|
|
23
|
+
## Gather Spike Inventory
|
|
24
|
+
|
|
25
|
+
1. Read `.planning/spikes/MANIFEST.md` for the overall idea context
|
|
26
|
+
2. Glob `.planning/spikes/*/README.md` and parse YAML frontmatter from each
|
|
27
|
+
3. Check if `./.claude/skills/spike-findings-*/SKILL.md` exists for this project
|
|
28
|
+
- If yes: read its `processed_spikes` list from the metadata section and filter those out
|
|
29
|
+
- If no: all spikes are candidates
|
|
30
|
+
|
|
31
|
+
If no unprocessed spikes exist:
|
|
32
|
+
```
|
|
33
|
+
No unprocessed spikes found in `.planning/spikes/`.
|
|
34
|
+
Run `/gsd-spike` first to create experiments.
|
|
35
|
+
```
|
|
36
|
+
Exit.
|
|
37
|
+
|
|
38
|
+
Check `commit_docs` config:
|
|
39
|
+
```bash
|
|
40
|
+
COMMIT_DOCS=$(gsd-remix-sdk query config-get commit_docs 2>/dev/null || echo "true")
|
|
41
|
+
```
|
|
42
|
+
</step>
|
|
43
|
+
|
|
44
|
+
<step name="auto_include">
|
|
45
|
+
## Auto-Include All Spikes
|
|
46
|
+
|
|
47
|
+
Include all unprocessed spikes automatically. Present a brief inventory showing what's being processed:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Processing N spikes:
|
|
51
|
+
001 — name (VALIDATED)
|
|
52
|
+
002 — name (PARTIAL)
|
|
53
|
+
003 — name (INVALIDATED)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Every spike carries forward:
|
|
57
|
+
- **VALIDATED** spikes provide proven patterns
|
|
58
|
+
- **PARTIAL** spikes provide constrained patterns
|
|
59
|
+
- **INVALIDATED** spikes provide landmines and dead ends
|
|
60
|
+
</step>
|
|
61
|
+
|
|
62
|
+
<step name="group">
|
|
63
|
+
## Auto-Group by Feature Area
|
|
64
|
+
|
|
65
|
+
Group spikes by feature area based on tags, names, `related` fields, and content. Proceed directly into synthesis.
|
|
66
|
+
|
|
67
|
+
Each group becomes one reference file in the generated skill.
|
|
68
|
+
</step>
|
|
69
|
+
|
|
70
|
+
<step name="skill_name">
|
|
71
|
+
## Determine Output Skill Name
|
|
72
|
+
|
|
73
|
+
Derive the skill name from the project directory:
|
|
74
|
+
|
|
75
|
+
1. Get the project root directory name (e.g., `solana-tracker`)
|
|
76
|
+
2. The skill will be created at `./.claude/skills/spike-findings-[project-dir-name]/`
|
|
77
|
+
|
|
78
|
+
If a skill already exists at that path (append mode), update in place.
|
|
79
|
+
</step>
|
|
80
|
+
|
|
81
|
+
<step name="copy_sources">
|
|
82
|
+
## Copy Source Files
|
|
83
|
+
|
|
84
|
+
For each included spike:
|
|
85
|
+
|
|
86
|
+
1. Identify the core source files — the actual scripts, main files, and config that make the spike work. Exclude:
|
|
87
|
+
- `node_modules/`, `__pycache__/`, `.venv/`, build artifacts
|
|
88
|
+
- Lock files (`package-lock.json`, `yarn.lock`, etc.)
|
|
89
|
+
- `.git/`, `.DS_Store`
|
|
90
|
+
2. Copy the README.md and core source files into `sources/NNN-spike-name/` inside the generated skill directory
|
|
91
|
+
</step>
|
|
92
|
+
|
|
93
|
+
<step name="synthesize">
|
|
94
|
+
## Synthesize Reference Files
|
|
95
|
+
|
|
96
|
+
For each feature-area group, write a reference file at `references/[feature-area-name].md`:
|
|
97
|
+
|
|
98
|
+
```markdown
|
|
99
|
+
# [Feature Area Name]
|
|
100
|
+
|
|
101
|
+
## Validated Patterns
|
|
102
|
+
[For each validated finding: describe the approach that works, include key code snippets extracted from the spike source, explain why it works]
|
|
103
|
+
|
|
104
|
+
## Landmines
|
|
105
|
+
[Things that look right but aren't. Gotchas. Anti-patterns discovered during spiking.]
|
|
106
|
+
|
|
107
|
+
## Constraints
|
|
108
|
+
[Hard facts: rate limits, library limitations, version requirements, incompatibilities]
|
|
109
|
+
|
|
110
|
+
## Origin
|
|
111
|
+
Synthesized from spikes: NNN, NNN, NNN
|
|
112
|
+
Source files available in: sources/NNN-spike-name/, sources/NNN-spike-name/
|
|
113
|
+
```
|
|
114
|
+
</step>
|
|
115
|
+
|
|
116
|
+
<step name="write_skill">
|
|
117
|
+
## Write SKILL.md
|
|
118
|
+
|
|
119
|
+
Create (or update) the generated skill's SKILL.md:
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
---
|
|
123
|
+
name: spike-findings-[project-dir-name]
|
|
124
|
+
description: Validated patterns, constraints, and implementation knowledge from spike experiments. Auto-loaded during implementation work on [project-dir-name].
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
<context>
|
|
128
|
+
## Project: [project-dir-name]
|
|
129
|
+
|
|
130
|
+
[One paragraph from MANIFEST.md describing the overall idea]
|
|
131
|
+
|
|
132
|
+
Spike sessions wrapped: [date(s)]
|
|
133
|
+
</context>
|
|
134
|
+
|
|
135
|
+
<findings_index>
|
|
136
|
+
## Feature Areas
|
|
137
|
+
|
|
138
|
+
| Area | Reference | Key Finding |
|
|
139
|
+
|------|-----------|-------------|
|
|
140
|
+
| [Name] | references/[name].md | [One-line summary] |
|
|
141
|
+
|
|
142
|
+
## Source Files
|
|
143
|
+
|
|
144
|
+
Original spike source files are preserved in `sources/` for complete reference.
|
|
145
|
+
</findings_index>
|
|
146
|
+
|
|
147
|
+
<metadata>
|
|
148
|
+
## Processed Spikes
|
|
149
|
+
|
|
150
|
+
[List of spike numbers wrapped up]
|
|
151
|
+
|
|
152
|
+
- 001-spike-name
|
|
153
|
+
- 002-spike-name
|
|
154
|
+
</metadata>
|
|
155
|
+
```
|
|
156
|
+
</step>
|
|
157
|
+
|
|
158
|
+
<step name="write_summary">
|
|
159
|
+
## Write Planning Summary
|
|
160
|
+
|
|
161
|
+
Write `.planning/spikes/WRAP-UP-SUMMARY.md` for project history:
|
|
162
|
+
|
|
163
|
+
```markdown
|
|
164
|
+
# Spike Wrap-Up Summary
|
|
165
|
+
|
|
166
|
+
**Date:** [date]
|
|
167
|
+
**Spikes processed:** [count]
|
|
168
|
+
**Feature areas:** [list]
|
|
169
|
+
**Skill output:** `./.claude/skills/spike-findings-[project]/`
|
|
170
|
+
|
|
171
|
+
## Processed Spikes
|
|
172
|
+
| # | Name | Type | Verdict | Feature Area |
|
|
173
|
+
|---|------|------|---------|--------------|
|
|
174
|
+
|
|
175
|
+
## Key Findings
|
|
176
|
+
[consolidated findings summary]
|
|
177
|
+
```
|
|
178
|
+
</step>
|
|
179
|
+
|
|
180
|
+
<step name="update_claude_md">
|
|
181
|
+
## Update Project CLAUDE.md
|
|
182
|
+
|
|
183
|
+
Add an auto-load routing line to the project's CLAUDE.md (create the file if it doesn't exist):
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
- **Spike findings for [project]** (implementation patterns, constraints, gotchas) → `Skill("spike-findings-[project-dir-name]")`
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
If this routing line already exists (append mode), leave it as-is.
|
|
190
|
+
</step>
|
|
191
|
+
|
|
192
|
+
<step name="commit">
|
|
193
|
+
Commit all artifacts (if `COMMIT_DOCS` is true):
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
gsd-remix-sdk query commit "docs(spike-wrap-up): package [N] spike findings into project skill" .planning/spikes/WRAP-UP-SUMMARY.md
|
|
197
|
+
```
|
|
198
|
+
</step>
|
|
199
|
+
|
|
200
|
+
<step name="report">
|
|
201
|
+
```
|
|
202
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
203
|
+
GSD ► SPIKE WRAP-UP COMPLETE ✓
|
|
204
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
205
|
+
|
|
206
|
+
**Processed:** {N} spikes
|
|
207
|
+
**Feature areas:** {list}
|
|
208
|
+
**Skill:** `./.claude/skills/spike-findings-[project]/`
|
|
209
|
+
**Summary:** `.planning/spikes/WRAP-UP-SUMMARY.md`
|
|
210
|
+
**CLAUDE.md:** routing line added
|
|
211
|
+
|
|
212
|
+
The spike-findings skill will auto-load in future build conversations.
|
|
213
|
+
```
|
|
214
|
+
</step>
|
|
215
|
+
|
|
216
|
+
<step name="whats_next">
|
|
217
|
+
## What's Next — Intelligent Spike Routing
|
|
218
|
+
|
|
219
|
+
Analyze the full spike landscape (MANIFEST.md, all curated findings, feature-area groupings, validated/invalidated/partial verdicts) and present three categories of next-step options:
|
|
220
|
+
|
|
221
|
+
### Category A: Integration Spikes — "Do any validated spikes need to be tested together?"
|
|
222
|
+
|
|
223
|
+
Review every pair and cluster of VALIDATED spikes. Look for:
|
|
224
|
+
|
|
225
|
+
- **Shared resources:** Two spikes that both touch the same API, database, state, or data format but were tested independently. Will they conflict, race, or step on each other?
|
|
226
|
+
- **Data handoffs:** Spike A produces output that Spike B consumes. The formats were assumed compatible but never proven.
|
|
227
|
+
- **Timing/ordering:** Spikes that work in isolation but have sequencing dependencies in the real flow (e.g., auth must complete before streaming starts).
|
|
228
|
+
- **Resource contention:** Spikes that individually work but may compete for connections, memory, rate limits, or tokens when combined.
|
|
229
|
+
|
|
230
|
+
If integration risks exist, present them as concrete proposed spikes:
|
|
231
|
+
|
|
232
|
+
> **Integration spike candidates:**
|
|
233
|
+
> - "Spikes 001 + 003 together: streaming through the authenticated connection" — these were tested separately but the real app needs both at once
|
|
234
|
+
> - "Spikes 002 + 005 data handoff: does the parser output match what the renderer expects?"
|
|
235
|
+
|
|
236
|
+
If no meaningful integration risks exist, say so and skip this category.
|
|
237
|
+
|
|
238
|
+
### Category B: Frontier Spikes — "What else should we spike?"
|
|
239
|
+
|
|
240
|
+
Think laterally about the overall idea from MANIFEST.md and what's been proven so far. Consider:
|
|
241
|
+
|
|
242
|
+
- **Gaps in the vision:** What does the user's idea need that hasn't been spiked yet? Look at the MANIFEST.md idea description and identify capabilities that are assumed but unproven.
|
|
243
|
+
- **Discovered dependencies:** Findings from completed spikes that reveal new questions. A spike that validated "X works" may imply "but we'd also need Y" — surface those implied needs.
|
|
244
|
+
- **Alternative approaches:** If any spike was PARTIAL or INVALIDATED, suggest a different angle to achieve the same goal.
|
|
245
|
+
- **Adjacent capabilities:** Things that aren't strictly required but would meaningfully improve the idea if feasible — worth a quick spike to find out.
|
|
246
|
+
- **Comparison opportunities:** If a spike used one library/approach and it worked but felt heavy or awkward, suggest a comparison spike with an alternative.
|
|
247
|
+
|
|
248
|
+
Present frontier spikes as concrete proposals with names, validation questions (Given/When/Then), and risk-ordering:
|
|
249
|
+
|
|
250
|
+
> **Frontier spike candidates:**
|
|
251
|
+
> 1. `NNN-descriptive-name` — Given [X], when [Y], then [Z]. *Why now: [reason this is the logical next thing to explore]*
|
|
252
|
+
> 2. `NNN-descriptive-name` — Given [X], when [Y], then [Z]. *Why now: [reason]*
|
|
253
|
+
|
|
254
|
+
Number them continuing from the highest existing spike number.
|
|
255
|
+
|
|
256
|
+
### Category C: Standard Options
|
|
257
|
+
|
|
258
|
+
- `/gsd-plan-phase` — Start planning the real implementation
|
|
259
|
+
- `/gsd-add-phase` — Add a phase based on spike findings
|
|
260
|
+
- `/gsd-spike` — Spike additional ideas
|
|
261
|
+
- `/gsd-explore` — Continue exploring
|
|
262
|
+
- Other
|
|
263
|
+
|
|
264
|
+
### Presenting the Options
|
|
265
|
+
|
|
266
|
+
Present all applicable categories, then ask the user which direction to go. If the user picks a frontier or integration spike, write the spike definitions directly into `.planning/spikes/MANIFEST.md` (appending to the existing table) and kick off `/gsd-spike` with those spikes pre-defined — the user shouldn't have to re-describe what was just proposed.
|
|
267
|
+
</step>
|
|
268
|
+
|
|
269
|
+
</process>
|
|
270
|
+
|
|
271
|
+
<success_criteria>
|
|
272
|
+
- [ ] All unprocessed spikes auto-included and processed
|
|
273
|
+
- [ ] Spikes grouped by feature area
|
|
274
|
+
- [ ] Spike-findings skill exists at `./.claude/skills/` with SKILL.md, references/, sources/
|
|
275
|
+
- [ ] Core source files from all spikes copied into sources/
|
|
276
|
+
- [ ] Reference files contain validated patterns, code snippets, landmines, constraints
|
|
277
|
+
- [ ] `.planning/spikes/WRAP-UP-SUMMARY.md` written for project history
|
|
278
|
+
- [ ] Project CLAUDE.md has auto-load routing line
|
|
279
|
+
- [ ] Summary presented
|
|
280
|
+
- [ ] Intelligent next-step analysis presented with integration spike candidates, frontier spike candidates, and standard options
|
|
281
|
+
</success_criteria>
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Rapid feasibility validation through focused, throwaway experiments. Each spike answers one
|
|
3
|
+
specific question with observable evidence. Saves artifacts to `.planning/spikes/`.
|
|
4
|
+
Companion to `/gsd-spike-wrap-up`.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
<required_reading>
|
|
8
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
9
|
+
</required_reading>
|
|
10
|
+
|
|
11
|
+
<process>
|
|
12
|
+
|
|
13
|
+
<step name="banner">
|
|
14
|
+
```
|
|
15
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
16
|
+
GSD ► SPIKING
|
|
17
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Parse `$ARGUMENTS` for:
|
|
21
|
+
- `--quick` flag → set `QUICK_MODE=true`
|
|
22
|
+
- `--text` flag → set `TEXT_MODE=true`
|
|
23
|
+
- Remaining text → the idea to spike
|
|
24
|
+
|
|
25
|
+
**Text mode:** If TEXT_MODE is enabled, replace AskUserQuestion calls with plain-text numbered lists — emit the options and ask the user to type the number of their choice.
|
|
26
|
+
</step>
|
|
27
|
+
|
|
28
|
+
<step name="setup_directory">
|
|
29
|
+
Create `.planning/spikes/` if it doesn't exist:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
mkdir -p .planning/spikes
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Check for existing spikes to determine numbering:
|
|
36
|
+
```bash
|
|
37
|
+
ls -d .planning/spikes/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Check `commit_docs` config:
|
|
41
|
+
```bash
|
|
42
|
+
COMMIT_DOCS=$(gsd-remix-sdk query config-get commit_docs 2>/dev/null || echo "true")
|
|
43
|
+
```
|
|
44
|
+
</step>
|
|
45
|
+
|
|
46
|
+
<step name="detect_stack">
|
|
47
|
+
Check for the project's tech stack to inform spike technology choices:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
ls package.json pyproject.toml Cargo.toml go.mod 2>/dev/null
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Use the project's language/framework by default. For greenfield projects with no existing stack, pick whatever gets to a runnable result fastest (Python, Node, Bash, single HTML file).
|
|
54
|
+
|
|
55
|
+
Avoid unless the spike specifically requires it:
|
|
56
|
+
- Complex package management beyond `npm install` or `pip install`
|
|
57
|
+
- Build tools, bundlers, or transpilers
|
|
58
|
+
- Docker, containers, or infrastructure
|
|
59
|
+
- Env files or config systems — hardcode everything
|
|
60
|
+
</step>
|
|
61
|
+
|
|
62
|
+
<step name="check_prior_spikes">
|
|
63
|
+
If `.planning/spikes/MANIFEST.md` exists, read it. Scan the verdicts, names, and validation questions of all prior spikes. When decomposing the new idea, cross-reference against this history:
|
|
64
|
+
|
|
65
|
+
- **Skip already-validated questions.** If a prior spike proved "WebSocket streaming works" with a VALIDATED verdict, don't re-spike it. Note the prior spike number and move on.
|
|
66
|
+
- **Build on prior findings.** If a prior spike was INVALIDATED or PARTIAL, factor that into the new decomposition — don't repeat the same approach, and flag the constraint to the user.
|
|
67
|
+
- **Call out relevant prior art.** When presenting the decomposition, mention any prior spikes that overlap: "Spike 003 already validated X, so we can skip that and focus on Y."
|
|
68
|
+
|
|
69
|
+
If no `.planning/spikes/MANIFEST.md` exists, skip this step.
|
|
70
|
+
</step>
|
|
71
|
+
|
|
72
|
+
<step name="decompose">
|
|
73
|
+
**If `QUICK_MODE` is true:** Skip decomposition and alignment. Take the user's idea as a single spike question. Assign it spike number `001` (or next available). Jump to `research`.
|
|
74
|
+
|
|
75
|
+
**Otherwise:**
|
|
76
|
+
|
|
77
|
+
Break the idea into 2-5 independent questions that each prove something specific. Frame each as an informal Given/When/Then. Present as a table:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
| # | Spike | Type | Validates (Given/When/Then) | Risk |
|
|
81
|
+
|---|-------|------|-----------------------------|------|
|
|
82
|
+
| 001 | websocket-streaming | standard | Given a WS connection, when LLM streams tokens, then client receives chunks < 100ms | **High** |
|
|
83
|
+
| 002a | pdf-parse-pdfjs | comparison | Given a multi-page PDF, when parsed with pdfjs, then structured text is extractable | Medium |
|
|
84
|
+
| 002b | pdf-parse-camelot | comparison | Given a multi-page PDF, when parsed with camelot, then structured text is extractable | Medium |
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Spike types:**
|
|
88
|
+
- **standard** — one approach answering one question
|
|
89
|
+
- **comparison** — same question, different approaches. Use a shared number with lettered variants: `NNN-a-name` and `NNN-b-name`. Both built back-to-back, then head-to-head comparison.
|
|
90
|
+
|
|
91
|
+
Good spikes answer one specific feasibility question:
|
|
92
|
+
- "Can we parse X format and extract Y?" — script that does it on a sample file
|
|
93
|
+
- "How fast is X approach?" — benchmark with real-ish data
|
|
94
|
+
- "Can we get X and Y to talk to each other?" — thinnest integration
|
|
95
|
+
- "What does X feel like as a UI?" — minimal interactive prototype
|
|
96
|
+
- "Does X API actually support Y?" — script that calls it and shows the response
|
|
97
|
+
- "Should we use X or Y for this?" — **comparison spike**: same thin proof built with both
|
|
98
|
+
|
|
99
|
+
Bad spikes are too broad or don't produce observable output:
|
|
100
|
+
- "Set up the project" — not a question, just busywork
|
|
101
|
+
- "Design the architecture" — planning, not spiking
|
|
102
|
+
- "Build the backend" — too broad, no specific question
|
|
103
|
+
- "Research best practices" — open-ended reading with no runnable output
|
|
104
|
+
|
|
105
|
+
Order by risk — the spike most likely to kill the idea runs first.
|
|
106
|
+
</step>
|
|
107
|
+
|
|
108
|
+
<step name="align">
|
|
109
|
+
**If `QUICK_MODE` is true:** Skip.
|
|
110
|
+
|
|
111
|
+
Present the ordered spike list and ask which to build:
|
|
112
|
+
|
|
113
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
114
|
+
║ CHECKPOINT: Decision Required ║
|
|
115
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
116
|
+
|
|
117
|
+
{spike table from decompose step}
|
|
118
|
+
|
|
119
|
+
──────────────────────────────────────────────────────────────
|
|
120
|
+
→ Build all in this order, or adjust the list?
|
|
121
|
+
──────────────────────────────────────────────────────────────
|
|
122
|
+
|
|
123
|
+
The user may reorder, merge, split, or skip spikes. Wait for alignment.
|
|
124
|
+
</step>
|
|
125
|
+
|
|
126
|
+
<step name="research">
|
|
127
|
+
## Research Before Building
|
|
128
|
+
|
|
129
|
+
Before writing any spike code, ground each spike in reality. This prevents building against outdated APIs, picking the wrong library, or discovering mid-spike that the approach is impossible.
|
|
130
|
+
|
|
131
|
+
For each spike about to be built:
|
|
132
|
+
|
|
133
|
+
**a. Identify unknowns.** What libraries, APIs, protocols, or techniques does this spike depend on? What assumptions are you making about how they work?
|
|
134
|
+
|
|
135
|
+
**b. Check current docs.** Use context7 (resolve-library-id → query-docs) for any library or framework involved. Use web search for APIs, services, or techniques without a context7 entry. Read actual documentation — not training data, which may be stale.
|
|
136
|
+
|
|
137
|
+
**c. Validate feasibility before coding.** Specifically check:
|
|
138
|
+
- Does the API/library actually support what the spike assumes? (Check endpoints, methods, capabilities)
|
|
139
|
+
- What's the current recommended approach? (The "right way" changes — what was learned in training may be deprecated)
|
|
140
|
+
- Are there version constraints, breaking changes, or migration gotchas?
|
|
141
|
+
- Are there rate limits, auth requirements, or platform restrictions that would block the spike?
|
|
142
|
+
|
|
143
|
+
**d. Pick the right tool.** If multiple libraries could solve the problem, briefly compare them on: current maintenance status, API fit for the specific spike question, and complexity. Pick the one that gets to a runnable answer fastest with the fewest surprises.
|
|
144
|
+
|
|
145
|
+
**e. Capture research findings.** Add a `## Research` section to the spike's README (before `## How to Run`) with:
|
|
146
|
+
- Which docs were checked and key findings
|
|
147
|
+
- The chosen approach and why
|
|
148
|
+
- Any gotchas or constraints discovered
|
|
149
|
+
|
|
150
|
+
**Skip research when unnecessary.** If the spike uses only well-known, stable tools already verified in this session, or if the entire spike is pure logic with no external dependencies, skip this step. The goal is grounding in reality, not busywork.
|
|
151
|
+
</step>
|
|
152
|
+
|
|
153
|
+
<step name="create_manifest">
|
|
154
|
+
Create or update `.planning/spikes/MANIFEST.md`:
|
|
155
|
+
|
|
156
|
+
```markdown
|
|
157
|
+
# Spike Manifest
|
|
158
|
+
|
|
159
|
+
## Idea
|
|
160
|
+
[One paragraph describing the overall idea being explored]
|
|
161
|
+
|
|
162
|
+
## Spikes
|
|
163
|
+
|
|
164
|
+
| # | Name | Type | Validates | Verdict | Tags |
|
|
165
|
+
|---|------|------|-----------|---------|------|
|
|
166
|
+
| 001 | websocket-streaming | standard | WS connections can stream LLM output | VALIDATED | websocket, real-time |
|
|
167
|
+
| 002a | pdf-parse-pdfjs | comparison | PDF table extraction | WINNER | pdf, parsing |
|
|
168
|
+
| 002b | pdf-parse-camelot | comparison | PDF table extraction | — | pdf, parsing |
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
If MANIFEST.md already exists, append new spikes to the existing table.
|
|
172
|
+
</step>
|
|
173
|
+
|
|
174
|
+
<step name="build_spikes">
|
|
175
|
+
Build each spike sequentially, highest-risk first.
|
|
176
|
+
|
|
177
|
+
**Comparison spikes** use a shared number with lettered variants: `NNN-a-descriptive-name` and `NNN-b-descriptive-name`. Both answer the same question using different approaches. Build them back-to-back, then report a head-to-head comparison before moving on. Judge on criteria that matter for the real build: API ergonomics, output quality, complexity, performance, or whatever the user cares about. The comparison spike's verdict names the winner and why.
|
|
178
|
+
|
|
179
|
+
### For Each Spike:
|
|
180
|
+
|
|
181
|
+
**a.** Find next available number by checking existing `.planning/spikes/NNN-*/` directories.
|
|
182
|
+
Format: three-digit zero-padded + hyphenated descriptive name. Comparison spikes: same number with letter suffix — `002a-pdf-parse-pdfjs`, `002b-pdf-parse-camelot`.
|
|
183
|
+
|
|
184
|
+
**b.** Create the spike directory: `.planning/spikes/NNN-descriptive-name/`
|
|
185
|
+
|
|
186
|
+
**c.** Assess observability needs before writing code. Ask: **can Claude fully verify this spike's outcome by running a command and reading stdout, or does it require human interaction with a runtime?**
|
|
187
|
+
|
|
188
|
+
Spikes that need runtime observability:
|
|
189
|
+
- **UI spikes** — anything with a browser, clicks, visual feedback
|
|
190
|
+
- **Streaming spikes** — WebSockets, SSE, real-time data flow
|
|
191
|
+
- **Multi-process spikes** — client/server, IPC, subprocess orchestration
|
|
192
|
+
- **Timing-sensitive spikes** — race conditions, debounce, polling, reconnection
|
|
193
|
+
- **External API spikes** — where the API response shape, latency, or error behavior matters for the verdict
|
|
194
|
+
|
|
195
|
+
Spikes that do NOT need it:
|
|
196
|
+
- Pure computation (parse this file, transform this data)
|
|
197
|
+
- Single-run scripts with deterministic stdout
|
|
198
|
+
- Anything Claude can run and check the output of directly
|
|
199
|
+
|
|
200
|
+
**If the spike needs runtime observability,** build a forensic log layer into the spike:
|
|
201
|
+
|
|
202
|
+
1. **An event log array** at module level that captures every meaningful event with an ISO timestamp and a direction/category tag (e.g., `"user_input"`, `"api_response"`, `"sse_frame"`, `"error"`, `"state_change"`)
|
|
203
|
+
2. **A log export mechanism** appropriate to the spike's runtime:
|
|
204
|
+
- For server spikes: a `GET /api/export-log` endpoint returning downloadable JSON
|
|
205
|
+
- For CLI spikes: write `spike-log-{timestamp}.json` to the spike directory on exit or on signal
|
|
206
|
+
- For browser spikes: a visible "Export Log" button that triggers a JSON download
|
|
207
|
+
3. **A log summary** included in the export: total event counts by category, duration, errors detected, environment metadata
|
|
208
|
+
4. **Analysis helpers** if the event volume warrants it: a small script (bash/python) in the spike directory that extracts the signal from the log. Name it `analyze-log.sh` or similar.
|
|
209
|
+
|
|
210
|
+
Keep the logging lightweight — an array push per event, not a logging framework. Inline it in the spike code.
|
|
211
|
+
|
|
212
|
+
**d.** Build the minimum code that answers the spike's question (with the observability layer from step c if applicable). Every line must serve the question — nothing incidental.
|
|
213
|
+
|
|
214
|
+
**e.** Write `README.md` with YAML frontmatter:
|
|
215
|
+
|
|
216
|
+
```markdown
|
|
217
|
+
---
|
|
218
|
+
spike: NNN
|
|
219
|
+
name: descriptive-name
|
|
220
|
+
type: standard
|
|
221
|
+
validates: "Given [precondition], when [action], then [expected outcome]"
|
|
222
|
+
verdict: PENDING
|
|
223
|
+
related: []
|
|
224
|
+
tags: [tag1, tag2]
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
# Spike NNN: Descriptive Name
|
|
228
|
+
|
|
229
|
+
## What This Validates
|
|
230
|
+
[The specific feasibility question, framed as Given/When/Then]
|
|
231
|
+
|
|
232
|
+
## Research
|
|
233
|
+
[Docs checked, key findings, chosen approach and why, gotchas discovered. Omit if no external dependencies.]
|
|
234
|
+
|
|
235
|
+
## How to Run
|
|
236
|
+
[Single command or short sequence to run the spike]
|
|
237
|
+
|
|
238
|
+
## What to Expect
|
|
239
|
+
[Concrete observable outcomes: "When you click X, you should see Y within Z seconds"]
|
|
240
|
+
|
|
241
|
+
## Observability
|
|
242
|
+
[If this spike has a forensic log layer: describe what's captured, how to export the log, and how to analyze it. Omit for spikes without runtime observability.]
|
|
243
|
+
|
|
244
|
+
## Results
|
|
245
|
+
[Filled in after running — verdict, evidence, surprises. If a forensic log was exported, include key findings from the log analysis here.]
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**f.** Auto-link related spikes: read existing spike READMEs and infer relationships from tags, names, and descriptions. Write the `related` field silently.
|
|
249
|
+
|
|
250
|
+
**g.** Run and verify:
|
|
251
|
+
- If self-verifiable: run it, check output, update README verdict and Results section
|
|
252
|
+
- If needs human judgment: run it, present instructions using a checkpoint box:
|
|
253
|
+
|
|
254
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
255
|
+
║ CHECKPOINT: Verification Required ║
|
|
256
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
257
|
+
|
|
258
|
+
**Spike {NNN}: {name}**
|
|
259
|
+
|
|
260
|
+
**How to run:** {command}
|
|
261
|
+
**What to expect:** {concrete outcomes}
|
|
262
|
+
|
|
263
|
+
──────────────────────────────────────────────────────────────
|
|
264
|
+
→ Does this match what you expected? Describe what you see.
|
|
265
|
+
──────────────────────────────────────────────────────────────
|
|
266
|
+
|
|
267
|
+
- If the spike has a forensic log layer: after verification, export the log and include key findings in the Results section. If something went wrong, ask the user to export the log and provide it for diagnosis.
|
|
268
|
+
|
|
269
|
+
**h.** Update verdict to VALIDATED / INVALIDATED / PARTIAL (or WINNER for comparison spike winners). Update Results section with evidence.
|
|
270
|
+
|
|
271
|
+
**i.** Update `.planning/spikes/MANIFEST.md` with the spike's row.
|
|
272
|
+
|
|
273
|
+
**j.** Commit (if `COMMIT_DOCS` is true):
|
|
274
|
+
```bash
|
|
275
|
+
gsd-remix-sdk query commit "docs(spike-NNN): [VERDICT] — [key finding in one sentence]" .planning/spikes/NNN-descriptive-name/ .planning/spikes/MANIFEST.md
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**k.** Report before moving to next spike:
|
|
279
|
+
```
|
|
280
|
+
◆ Spike NNN: {name}
|
|
281
|
+
Verdict: {VALIDATED ✓ / INVALIDATED ✗ / PARTIAL ⚠}
|
|
282
|
+
Finding: {one sentence}
|
|
283
|
+
Impact: {effect on remaining spikes, if any}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**l.** If a spike invalidates a core assumption: stop and present:
|
|
287
|
+
|
|
288
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
289
|
+
║ CHECKPOINT: Decision Required ║
|
|
290
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
291
|
+
|
|
292
|
+
Core assumption invalidated by Spike {NNN}.
|
|
293
|
+
|
|
294
|
+
{what was invalidated and why}
|
|
295
|
+
|
|
296
|
+
──────────────────────────────────────────────────────────────
|
|
297
|
+
→ Continue with remaining spikes / Pivot approach / Abandon
|
|
298
|
+
──────────────────────────────────────────────────────────────
|
|
299
|
+
|
|
300
|
+
Only proceed if the user says to.
|
|
301
|
+
</step>
|
|
302
|
+
|
|
303
|
+
<step name="report">
|
|
304
|
+
After all spikes complete, present the consolidated report:
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
308
|
+
GSD ► SPIKE COMPLETE ✓
|
|
309
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
310
|
+
|
|
311
|
+
## Verdicts
|
|
312
|
+
|
|
313
|
+
| # | Name | Type | Verdict |
|
|
314
|
+
|---|------|------|---------|
|
|
315
|
+
| 001 | {name} | standard | ✓ VALIDATED |
|
|
316
|
+
| 002a | {name} | comparison | ✓ WINNER |
|
|
317
|
+
| 002b | {name} | comparison | — |
|
|
318
|
+
|
|
319
|
+
## Key Discoveries
|
|
320
|
+
{surprises, gotchas, things that weren't expected}
|
|
321
|
+
|
|
322
|
+
## Feasibility Assessment
|
|
323
|
+
{overall, is the idea viable?}
|
|
324
|
+
|
|
325
|
+
## Signal for the Build
|
|
326
|
+
{what the real implementation should use, avoid, or watch out for}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
───────────────────────────────────────────────────────────────
|
|
330
|
+
|
|
331
|
+
## ▶ Next Up
|
|
332
|
+
|
|
333
|
+
**Package findings** — wrap spike knowledge into a reusable skill
|
|
334
|
+
|
|
335
|
+
`/gsd-spike-wrap-up`
|
|
336
|
+
|
|
337
|
+
───────────────────────────────────────────────────────────────
|
|
338
|
+
|
|
339
|
+
**Also available:**
|
|
340
|
+
- `/gsd-plan-phase` — start planning the real implementation
|
|
341
|
+
- `/gsd-explore` — continue exploring the idea
|
|
342
|
+
- `/gsd-add-phase` — add a phase to the roadmap based on findings
|
|
343
|
+
|
|
344
|
+
───────────────────────────────────────────────────────────────
|
|
345
|
+
</step>
|
|
346
|
+
|
|
347
|
+
</process>
|
|
348
|
+
|
|
349
|
+
<success_criteria>
|
|
350
|
+
- [ ] `.planning/spikes/` created (auto-creates if needed, no project init required)
|
|
351
|
+
- [ ] Prior spikes checked — already-validated questions skipped, prior findings factored in
|
|
352
|
+
- [ ] Research grounded each spike in current docs before coding (unless pure logic/no deps)
|
|
353
|
+
- [ ] Comparison spikes built back-to-back with head-to-head verdict
|
|
354
|
+
- [ ] Spikes needing human interaction have forensic log layer (event capture, export, analysis)
|
|
355
|
+
- [ ] Each spike answers one specific question with observable evidence
|
|
356
|
+
- [ ] Each spike README has complete frontmatter (including type), run instructions, and results
|
|
357
|
+
- [ ] User verified each spike (self-verified or human checkpoint)
|
|
358
|
+
- [ ] MANIFEST.md is current (with Type column)
|
|
359
|
+
- [ ] Commits use `docs(spike-NNN): [VERDICT]` format
|
|
360
|
+
- [ ] Consolidated report presented with next-step routing
|
|
361
|
+
- [ ] If core assumption invalidated, execution stopped and user consulted
|
|
362
|
+
</success_criteria>
|