@therocketcode/gsd-core 1.4.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/plugin.json +23 -0
- package/GEMINI.md +53 -0
- package/LICENSE +21 -0
- package/README.ja-JP.md +125 -0
- package/README.ko-KR.md +125 -0
- package/README.md +144 -0
- package/README.pt-BR.md +125 -0
- package/README.zh-CN.md +125 -0
- package/agents/gsd-advisor-researcher.md +108 -0
- package/agents/gsd-ai-researcher.md +114 -0
- package/agents/gsd-assumptions-analyzer.md +105 -0
- package/agents/gsd-code-fixer.md +668 -0
- package/agents/gsd-code-reviewer.md +387 -0
- package/agents/gsd-codebase-mapper.md +853 -0
- package/agents/gsd-debug-session-manager.md +314 -0
- package/agents/gsd-debugger.md +1452 -0
- package/agents/gsd-doc-classifier.md +168 -0
- package/agents/gsd-doc-synthesizer.md +204 -0
- package/agents/gsd-doc-verifier.md +217 -0
- package/agents/gsd-doc-writer.md +616 -0
- package/agents/gsd-domain-researcher.md +147 -0
- package/agents/gsd-eval-auditor.md +191 -0
- package/agents/gsd-eval-planner.md +154 -0
- package/agents/gsd-executor.md +785 -0
- package/agents/gsd-framework-selector.md +160 -0
- package/agents/gsd-integration-checker.md +470 -0
- package/agents/gsd-intel-updater.md +342 -0
- package/agents/gsd-nyquist-auditor.md +203 -0
- package/agents/gsd-pattern-mapper.md +335 -0
- package/agents/gsd-phase-researcher.md +867 -0
- package/agents/gsd-plan-checker.md +978 -0
- package/agents/gsd-planner.md +1204 -0
- package/agents/gsd-project-researcher.md +611 -0
- package/agents/gsd-research-synthesizer.md +259 -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 +374 -0
- package/agents/gsd-user-profiler.md +171 -0
- package/agents/gsd-verifier.md +923 -0
- package/assets/gsd-logo-2000-transparent.png +0 -0
- package/assets/gsd-logo-2000-transparent.svg +17 -0
- package/assets/gsd-logo-2000.png +0 -0
- package/assets/gsd-logo-2000.svg +21 -0
- package/assets/terminal.svg +68 -0
- package/bin/install.js +12726 -0
- package/bin/lib/ui-safety-gate.cjs +107 -0
- package/commands/gsd/add-tests.md +42 -0
- package/commands/gsd/ai-integration-phase.md +37 -0
- package/commands/gsd/audit-fix.md +34 -0
- package/commands/gsd/audit-milestone.md +37 -0
- package/commands/gsd/audit-uat.md +24 -0
- package/commands/gsd/autonomous.md +48 -0
- package/commands/gsd/capture.md +62 -0
- package/commands/gsd/cleanup.md +24 -0
- package/commands/gsd/code-review.md +59 -0
- package/commands/gsd/complete-milestone.md +143 -0
- package/commands/gsd/config.md +56 -0
- package/commands/gsd/debug.md +52 -0
- package/commands/gsd/discover-product.md +65 -0
- package/commands/gsd/discuss-phase.md +77 -0
- package/commands/gsd/docs-update.md +49 -0
- package/commands/gsd/eval-review.md +33 -0
- package/commands/gsd/execute-phase.md +66 -0
- package/commands/gsd/explore.md +27 -0
- package/commands/gsd/extract-learnings.md +23 -0
- package/commands/gsd/fast.md +31 -0
- package/commands/gsd/forensics.md +57 -0
- package/commands/gsd/graphify.md +204 -0
- package/commands/gsd/health.md +31 -0
- package/commands/gsd/help.md +28 -0
- package/commands/gsd/import.md +45 -0
- package/commands/gsd/inbox.md +39 -0
- package/commands/gsd/ingest-docs.md +42 -0
- package/commands/gsd/manager.md +45 -0
- package/commands/gsd/map-codebase.md +83 -0
- package/commands/gsd/milestone-summary.md +51 -0
- package/commands/gsd/model-domain.md +65 -0
- package/commands/gsd/mvp-phase.md +45 -0
- package/commands/gsd/new-milestone.md +45 -0
- package/commands/gsd/new-project.md +47 -0
- package/commands/gsd/ns-context.md +23 -0
- package/commands/gsd/ns-ideate.md +24 -0
- package/commands/gsd/ns-manage.md +29 -0
- package/commands/gsd/ns-project.md +22 -0
- package/commands/gsd/ns-review.md +26 -0
- package/commands/gsd/ns-workflow.md +28 -0
- package/commands/gsd/pause-work.md +43 -0
- package/commands/gsd/phase.md +56 -0
- package/commands/gsd/plan-phase.md +64 -0
- package/commands/gsd/plan-review-convergence.md +59 -0
- package/commands/gsd/pr-branch.md +26 -0
- package/commands/gsd/profile-user.md +46 -0
- package/commands/gsd/progress.md +48 -0
- package/commands/gsd/quick.md +174 -0
- package/commands/gsd/recommend-architecture.md +64 -0
- package/commands/gsd/resume-work.md +30 -0
- package/commands/gsd/review-backlog.md +63 -0
- package/commands/gsd/review.md +42 -0
- package/commands/gsd/secure-phase.md +36 -0
- package/commands/gsd/settings.md +29 -0
- package/commands/gsd/ship.md +24 -0
- package/commands/gsd/sketch.md +60 -0
- package/commands/gsd/spec-phase.md +63 -0
- package/commands/gsd/spike.md +57 -0
- package/commands/gsd/stats.md +20 -0
- package/commands/gsd/surface.md +155 -0
- package/commands/gsd/testing-strategy.md +65 -0
- package/commands/gsd/thread.md +24 -0
- package/commands/gsd/ui-phase.md +35 -0
- package/commands/gsd/ui-review.md +33 -0
- package/commands/gsd/ultraplan-phase.md +34 -0
- package/commands/gsd/undo.md +35 -0
- package/commands/gsd/update.md +49 -0
- package/commands/gsd/validate-phase.md +36 -0
- package/commands/gsd/verify-work.md +39 -0
- package/commands/gsd/workspace.md +52 -0
- package/commands/gsd/workstreams.md +70 -0
- package/gemini-extension.json +6 -0
- package/gsd-core/bin/check-latest-version.cjs +161 -0
- package/gsd-core/bin/gsd-tools.cjs +1928 -0
- package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
- package/gsd-core/bin/lib/adr-parser.cjs +399 -0
- package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
- package/gsd-core/bin/lib/artifacts.cjs +51 -0
- package/gsd-core/bin/lib/audit.cjs +743 -0
- package/gsd-core/bin/lib/check-command-router.cjs +343 -0
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/gsd-core/bin/lib/cli-exit.cjs +42 -0
- package/gsd-core/bin/lib/clock.cjs +95 -0
- package/gsd-core/bin/lib/clusters.cjs +132 -0
- package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
- package/gsd-core/bin/lib/command-aliases.cjs +809 -0
- package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
- package/gsd-core/bin/lib/commands.cjs +1203 -0
- package/gsd-core/bin/lib/config-schema.cjs +29 -0
- package/gsd-core/bin/lib/config-types.cjs +19 -0
- package/gsd-core/bin/lib/config.cjs +738 -0
- package/gsd-core/bin/lib/configuration.cjs +239 -0
- package/gsd-core/bin/lib/context-utilization.cjs +48 -0
- package/gsd-core/bin/lib/core.cjs +2051 -0
- package/gsd-core/bin/lib/decisions.cjs +118 -0
- package/gsd-core/bin/lib/docs.cjs +252 -0
- package/gsd-core/bin/lib/drift.cjs +364 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
- package/gsd-core/bin/lib/frontmatter.cjs +442 -0
- package/gsd-core/bin/lib/gap-checker.cjs +257 -0
- package/gsd-core/bin/lib/graphify.cjs +496 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
- package/gsd-core/bin/lib/init-command-router.cjs +62 -0
- package/gsd-core/bin/lib/init.cjs +1815 -0
- package/gsd-core/bin/lib/install-profiles.cjs +584 -0
- package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +350 -0
- package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
- package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
- package/gsd-core/bin/lib/intel.cjs +590 -0
- package/gsd-core/bin/lib/learnings.cjs +270 -0
- package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/gsd-core/bin/lib/milestone.cjs +373 -0
- package/gsd-core/bin/lib/model-catalog.cjs +154 -0
- package/gsd-core/bin/lib/model-profiles.cjs +24 -0
- package/gsd-core/bin/lib/observability/event.cjs +51 -0
- package/gsd-core/bin/lib/observability/logger.cjs +146 -0
- package/gsd-core/bin/lib/observability/redaction.cjs +48 -0
- package/gsd-core/bin/lib/package-identity.cjs +35 -0
- package/gsd-core/bin/lib/package-legitimacy.cjs +368 -0
- package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
- package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/gsd-core/bin/lib/phase.cjs +1307 -0
- package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
- package/gsd-core/bin/lib/plan-scan.cjs +91 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
- package/gsd-core/bin/lib/profile-output.cjs +1120 -0
- package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
- package/gsd-core/bin/lib/project-root.cjs +119 -0
- package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
- package/gsd-core/bin/lib/research-provider.cjs +137 -0
- package/gsd-core/bin/lib/research-store.cjs +167 -0
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +476 -0
- package/gsd-core/bin/lib/roadmap.cjs +600 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +312 -0
- package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +56 -0
- package/gsd-core/bin/lib/runtime-homes.cjs +190 -0
- package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
- package/gsd-core/bin/lib/schema-detect.cjs +159 -0
- package/gsd-core/bin/lib/secrets.cjs +34 -0
- package/gsd-core/bin/lib/security.cjs +480 -0
- package/gsd-core/bin/lib/semver-compare.cjs +42 -0
- package/gsd-core/bin/lib/shell-command-projection.cjs +533 -0
- package/gsd-core/bin/lib/state-command-router.cjs +160 -0
- package/gsd-core/bin/lib/state-document.cjs +259 -0
- package/gsd-core/bin/lib/state.cjs +2010 -0
- package/gsd-core/bin/lib/surface.cjs +449 -0
- package/gsd-core/bin/lib/task-command-router.cjs +85 -0
- package/gsd-core/bin/lib/template.cjs +237 -0
- package/gsd-core/bin/lib/uat.cjs +297 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/gsd-core/bin/lib/update-context.cjs +218 -0
- package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
- package/gsd-core/bin/lib/validate.cjs +112 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +31 -0
- package/gsd-core/bin/lib/verification.cjs +193 -0
- package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
- package/gsd-core/bin/lib/verify.cjs +1451 -0
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +81 -0
- package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
- package/gsd-core/bin/lib/workstream-name-policy.cjs +91 -0
- package/gsd-core/bin/lib/workstream.cjs +380 -0
- package/gsd-core/bin/lib/worktree-base-ref.cjs +325 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +943 -0
- package/gsd-core/bin/shared/config-defaults.manifest.json +98 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +192 -0
- package/gsd-core/bin/shared/model-catalog.json +149 -0
- package/gsd-core/bin/shared/runtime-aliases.manifest.json +75 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +349 -0
- package/gsd-core/contexts/dev.md +21 -0
- package/gsd-core/contexts/research.md +22 -0
- package/gsd-core/contexts/review.md +23 -0
- package/gsd-core/references/agent-contracts.md +79 -0
- package/gsd-core/references/ai-evals.md +156 -0
- package/gsd-core/references/ai-frameworks.md +186 -0
- package/gsd-core/references/architecture-decision.md +74 -0
- package/gsd-core/references/artifact-types.md +131 -0
- package/gsd-core/references/auth-in-tests.md +91 -0
- package/gsd-core/references/autonomous-smart-discuss.md +277 -0
- package/gsd-core/references/checkpoints.md +814 -0
- package/gsd-core/references/common-bug-patterns.md +114 -0
- package/gsd-core/references/context-budget.md +85 -0
- package/gsd-core/references/continuation-format.md +253 -0
- package/gsd-core/references/db-test-isolation.md +54 -0
- package/gsd-core/references/debugger-philosophy.md +76 -0
- package/gsd-core/references/decimal-phase-calculation.md +64 -0
- package/gsd-core/references/doc-conflict-engine.md +91 -0
- package/gsd-core/references/domain-modeling.md +80 -0
- package/gsd-core/references/domain-probes.md +125 -0
- package/gsd-core/references/e2e-tiering.md +35 -0
- package/gsd-core/references/execute-mvp-tdd.md +81 -0
- package/gsd-core/references/executor-examples.md +110 -0
- package/gsd-core/references/few-shot-examples/plan-checker.md +73 -0
- package/gsd-core/references/few-shot-examples/verifier.md +109 -0
- package/gsd-core/references/flaky-test-checklist.md +22 -0
- package/gsd-core/references/gate-prompts.md +100 -0
- package/gsd-core/references/gates.md +70 -0
- package/gsd-core/references/git-integration.md +298 -0
- package/gsd-core/references/git-planning-commit.md +40 -0
- package/gsd-core/references/ios-scaffold.md +123 -0
- package/gsd-core/references/mandatory-initial-read.md +2 -0
- package/gsd-core/references/model-profile-resolution.md +38 -0
- package/gsd-core/references/model-profiles.md +245 -0
- package/gsd-core/references/mvp-concepts.md +49 -0
- package/gsd-core/references/phase-argument-parsing.md +61 -0
- package/gsd-core/references/planner-antipatterns.md +89 -0
- package/gsd-core/references/planner-chunked.md +49 -0
- package/gsd-core/references/planner-gap-closure.md +62 -0
- package/gsd-core/references/planner-graphify-auto-update.md +67 -0
- package/gsd-core/references/planner-human-verify-mode.md +57 -0
- package/gsd-core/references/planner-interface-context.md +62 -0
- package/gsd-core/references/planner-load-graph-context.md +36 -0
- package/gsd-core/references/planner-mvp-mode.md +53 -0
- package/gsd-core/references/planner-reviews.md +39 -0
- package/gsd-core/references/planner-revision.md +87 -0
- package/gsd-core/references/planner-source-audit.md +73 -0
- package/gsd-core/references/planning-config.md +473 -0
- package/gsd-core/references/product-discovery.md +49 -0
- package/gsd-core/references/project-skills-discovery.md +19 -0
- package/gsd-core/references/questioning.md +162 -0
- package/gsd-core/references/realistic-test-data.md +44 -0
- package/gsd-core/references/research-documentation-lookup.md +29 -0
- package/gsd-core/references/research-philosophy.md +29 -0
- package/gsd-core/references/research-verification-protocol.md +27 -0
- package/gsd-core/references/revision-loop.md +97 -0
- package/gsd-core/references/scout-codebase.md +51 -0
- package/gsd-core/references/skeleton-template.md +48 -0
- package/gsd-core/references/sketch-interactivity.md +41 -0
- package/gsd-core/references/sketch-theme-system.md +94 -0
- package/gsd-core/references/sketch-tooling.md +45 -0
- package/gsd-core/references/sketch-variant-patterns.md +81 -0
- package/gsd-core/references/spidr-splitting.md +69 -0
- package/gsd-core/references/tdd.md +330 -0
- package/gsd-core/references/test-containers.md +55 -0
- package/gsd-core/references/test-strategy.md +75 -0
- package/gsd-core/references/thinking-models-debug.md +44 -0
- package/gsd-core/references/thinking-models-execution.md +50 -0
- package/gsd-core/references/thinking-models-planning.md +62 -0
- package/gsd-core/references/thinking-models-research.md +50 -0
- package/gsd-core/references/thinking-models-verification.md +55 -0
- package/gsd-core/references/thinking-partner.md +96 -0
- package/gsd-core/references/ui-brand.md +162 -0
- package/gsd-core/references/universal-anti-patterns.md +63 -0
- package/gsd-core/references/user-profiling.md +681 -0
- package/gsd-core/references/user-story-template.md +58 -0
- package/gsd-core/references/verification-overrides.md +227 -0
- package/gsd-core/references/verification-patterns.md +612 -0
- package/gsd-core/references/verify-mvp-mode.md +85 -0
- package/gsd-core/references/workstream-flag.md +111 -0
- package/gsd-core/references/worktree-branch-check.md +38 -0
- package/gsd-core/references/worktree-path-safety.md +67 -0
- package/gsd-core/templates/AI-SPEC.md +246 -0
- package/gsd-core/templates/DEBUG.md +169 -0
- package/gsd-core/templates/README.md +77 -0
- package/gsd-core/templates/SECURITY.md +61 -0
- package/gsd-core/templates/UAT.md +265 -0
- package/gsd-core/templates/UI-SPEC.md +100 -0
- package/gsd-core/templates/VALIDATION.md +76 -0
- package/gsd-core/templates/adr.md +58 -0
- package/gsd-core/templates/claude-md.md +145 -0
- package/gsd-core/templates/codebase/architecture.md +255 -0
- package/gsd-core/templates/codebase/concerns.md +310 -0
- package/gsd-core/templates/codebase/conventions.md +307 -0
- package/gsd-core/templates/codebase/integrations.md +280 -0
- package/gsd-core/templates/codebase/stack.md +186 -0
- package/gsd-core/templates/codebase/structure.md +285 -0
- package/gsd-core/templates/codebase/testing.md +480 -0
- package/gsd-core/templates/config.json +62 -0
- package/gsd-core/templates/context.md +352 -0
- package/gsd-core/templates/continue-here.md +78 -0
- package/gsd-core/templates/copilot-instructions.md +7 -0
- package/gsd-core/templates/debug-subagent-prompt.md +91 -0
- package/gsd-core/templates/dev-preferences.md +21 -0
- package/gsd-core/templates/discovery.md +146 -0
- package/gsd-core/templates/discussion-log.md +63 -0
- package/gsd-core/templates/domain-model.md +54 -0
- package/gsd-core/templates/milestone-archive.md +123 -0
- package/gsd-core/templates/milestone.md +115 -0
- package/gsd-core/templates/phase-prompt.md +610 -0
- package/gsd-core/templates/planner-subagent-prompt.md +117 -0
- package/gsd-core/templates/product-brief.md +55 -0
- package/gsd-core/templates/project.md +186 -0
- package/gsd-core/templates/requirements.md +231 -0
- package/gsd-core/templates/research-project/ARCHITECTURE.md +204 -0
- package/gsd-core/templates/research-project/FEATURES.md +147 -0
- package/gsd-core/templates/research-project/PITFALLS.md +200 -0
- package/gsd-core/templates/research-project/STACK.md +120 -0
- package/gsd-core/templates/research-project/SUMMARY.md +170 -0
- package/gsd-core/templates/research.md +592 -0
- package/gsd-core/templates/retrospective.md +54 -0
- package/gsd-core/templates/roadmap.md +202 -0
- package/gsd-core/templates/spec.md +307 -0
- package/gsd-core/templates/state.md +195 -0
- package/gsd-core/templates/summary-complex.md +59 -0
- package/gsd-core/templates/summary-minimal.md +41 -0
- package/gsd-core/templates/summary-standard.md +48 -0
- package/gsd-core/templates/summary.md +248 -0
- package/gsd-core/templates/test-strategy.md +50 -0
- package/gsd-core/templates/user-profile.md +146 -0
- package/gsd-core/templates/user-setup.md +311 -0
- package/gsd-core/templates/verification-report.md +322 -0
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/gsd-core/workflows/add-backlog.md +91 -0
- package/gsd-core/workflows/add-phase.md +113 -0
- package/gsd-core/workflows/add-tests.md +355 -0
- package/gsd-core/workflows/add-todo.md +161 -0
- package/gsd-core/workflows/ai-integration-phase.md +295 -0
- package/gsd-core/workflows/analyze-dependencies.md +96 -0
- package/gsd-core/workflows/audit-fix.md +178 -0
- package/gsd-core/workflows/audit-milestone.md +360 -0
- package/gsd-core/workflows/audit-uat.md +110 -0
- package/gsd-core/workflows/autonomous.md +797 -0
- package/gsd-core/workflows/check-todos.md +180 -0
- package/gsd-core/workflows/cleanup.md +195 -0
- package/gsd-core/workflows/code-review-fix.md +502 -0
- package/gsd-core/workflows/code-review.md +658 -0
- package/gsd-core/workflows/complete-milestone.md +855 -0
- package/gsd-core/workflows/debug.md +237 -0
- package/gsd-core/workflows/diagnose-issues.md +245 -0
- package/gsd-core/workflows/discover-product.md +112 -0
- package/gsd-core/workflows/discovery-phase.md +291 -0
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +176 -0
- package/gsd-core/workflows/discuss-phase/modes/all.md +28 -0
- package/gsd-core/workflows/discuss-phase/modes/analyze.md +44 -0
- package/gsd-core/workflows/discuss-phase/modes/auto.md +57 -0
- package/gsd-core/workflows/discuss-phase/modes/batch.md +52 -0
- package/gsd-core/workflows/discuss-phase/modes/chain.md +98 -0
- package/gsd-core/workflows/discuss-phase/modes/default.md +141 -0
- package/gsd-core/workflows/discuss-phase/modes/power.md +44 -0
- package/gsd-core/workflows/discuss-phase/modes/text.md +55 -0
- package/gsd-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/gsd-core/workflows/discuss-phase/templates/context.md +136 -0
- package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/gsd-core/workflows/discuss-phase-assumptions.md +675 -0
- package/gsd-core/workflows/discuss-phase-power.md +291 -0
- package/gsd-core/workflows/discuss-phase.md +499 -0
- package/gsd-core/workflows/do.md +111 -0
- package/gsd-core/workflows/docs-update.md +1176 -0
- package/gsd-core/workflows/edit-phase.md +295 -0
- package/gsd-core/workflows/eval-review.md +156 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
- package/gsd-core/workflows/execute-phase.md +1752 -0
- package/gsd-core/workflows/execute-plan.md +526 -0
- package/gsd-core/workflows/explore.md +146 -0
- package/gsd-core/workflows/extract-learnings.md +243 -0
- package/gsd-core/workflows/fast.md +124 -0
- package/gsd-core/workflows/forensics.md +279 -0
- package/gsd-core/workflows/graduation.md +196 -0
- package/gsd-core/workflows/health.md +224 -0
- package/gsd-core/workflows/help/modes/brief.md +22 -0
- package/gsd-core/workflows/help/modes/default.md +50 -0
- package/gsd-core/workflows/help/modes/full.md +789 -0
- package/gsd-core/workflows/help/modes/topic.md +74 -0
- package/gsd-core/workflows/help.md +24 -0
- package/gsd-core/workflows/import.md +256 -0
- package/gsd-core/workflows/inbox.md +387 -0
- package/gsd-core/workflows/ingest-docs.md +340 -0
- package/gsd-core/workflows/insert-phase.md +152 -0
- package/gsd-core/workflows/list-phase-assumptions.md +178 -0
- package/gsd-core/workflows/list-workspaces.md +57 -0
- package/gsd-core/workflows/manager.md +393 -0
- package/gsd-core/workflows/map-codebase.md +446 -0
- package/gsd-core/workflows/milestone-summary.md +224 -0
- package/gsd-core/workflows/model-domain.md +162 -0
- package/gsd-core/workflows/mvp-phase.md +222 -0
- package/gsd-core/workflows/new-milestone.md +635 -0
- package/gsd-core/workflows/new-project.md +1555 -0
- package/gsd-core/workflows/new-workspace.md +240 -0
- package/gsd-core/workflows/next.md +299 -0
- package/gsd-core/workflows/node-repair.md +92 -0
- package/gsd-core/workflows/note.md +158 -0
- package/gsd-core/workflows/pause-work.md +244 -0
- package/gsd-core/workflows/plan-milestone-gaps.md +281 -0
- package/gsd-core/workflows/plan-phase.md +1814 -0
- package/gsd-core/workflows/plan-review-convergence.md +346 -0
- package/gsd-core/workflows/plant-seed.md +230 -0
- package/gsd-core/workflows/pr-branch.md +157 -0
- package/gsd-core/workflows/profile-user.md +453 -0
- package/gsd-core/workflows/progress.md +699 -0
- package/gsd-core/workflows/quick.md +1017 -0
- package/gsd-core/workflows/reapply-patches.md +426 -0
- package/gsd-core/workflows/recommend-architecture.md +135 -0
- package/gsd-core/workflows/remove-phase.md +156 -0
- package/gsd-core/workflows/remove-workspace.md +108 -0
- package/gsd-core/workflows/resume-project.md +332 -0
- package/gsd-core/workflows/review.md +748 -0
- package/gsd-core/workflows/scan.md +107 -0
- package/gsd-core/workflows/secure-phase.md +182 -0
- package/gsd-core/workflows/session-report.md +146 -0
- package/gsd-core/workflows/settings-advanced.md +810 -0
- package/gsd-core/workflows/settings-integrations.md +312 -0
- package/gsd-core/workflows/settings.md +566 -0
- package/gsd-core/workflows/ship.md +405 -0
- package/gsd-core/workflows/sketch-wrap-up.md +286 -0
- package/gsd-core/workflows/sketch.md +361 -0
- package/gsd-core/workflows/spec-phase.md +263 -0
- package/gsd-core/workflows/spike-wrap-up.md +307 -0
- package/gsd-core/workflows/spike.md +453 -0
- package/gsd-core/workflows/stats.md +80 -0
- package/gsd-core/workflows/sync-skills.md +182 -0
- package/gsd-core/workflows/testing-strategy.md +122 -0
- package/gsd-core/workflows/thread.md +222 -0
- package/gsd-core/workflows/transition.md +694 -0
- package/gsd-core/workflows/ui-phase.md +328 -0
- package/gsd-core/workflows/ui-review.md +193 -0
- package/gsd-core/workflows/ultraplan-phase.md +199 -0
- package/gsd-core/workflows/undo.md +314 -0
- package/gsd-core/workflows/update.md +496 -0
- package/gsd-core/workflows/validate-phase.md +181 -0
- package/gsd-core/workflows/verify-phase.md +544 -0
- package/gsd-core/workflows/verify-work.md +781 -0
- package/hooks/dist/gsd-check-update-worker.js +108 -0
- package/hooks/dist/gsd-check-update.js +66 -0
- package/hooks/dist/gsd-config-reload.js +133 -0
- package/hooks/dist/gsd-context-monitor.js +195 -0
- package/hooks/dist/gsd-cursor-post-tool.js +75 -0
- package/hooks/dist/gsd-cursor-session-start.js +52 -0
- package/hooks/dist/gsd-graphify-update.sh +158 -0
- package/hooks/dist/gsd-phase-boundary.sh +47 -0
- package/hooks/dist/gsd-prompt-guard.js +97 -0
- package/hooks/dist/gsd-read-guard.js +101 -0
- package/hooks/dist/gsd-read-injection-scanner.js +203 -0
- package/hooks/dist/gsd-session-state.sh +59 -0
- package/hooks/dist/gsd-statusline.js +566 -0
- package/hooks/dist/gsd-update-banner.js +138 -0
- package/hooks/dist/gsd-validate-commit.sh +57 -0
- package/hooks/dist/gsd-workflow-guard.js +167 -0
- package/hooks/dist/gsd-worktree-path-guard.js +169 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/dist/managed-hooks-registry.cjs +38 -0
- package/hooks/gsd-check-update-worker.js +108 -0
- package/hooks/gsd-check-update.js +66 -0
- package/hooks/gsd-config-reload.js +133 -0
- package/hooks/gsd-context-monitor.js +195 -0
- package/hooks/gsd-cursor-post-tool.js +75 -0
- package/hooks/gsd-cursor-session-start.js +52 -0
- package/hooks/gsd-graphify-update.sh +158 -0
- package/hooks/gsd-phase-boundary.sh +47 -0
- package/hooks/gsd-prompt-guard.js +97 -0
- package/hooks/gsd-read-guard.js +101 -0
- package/hooks/gsd-read-injection-scanner.js +203 -0
- package/hooks/gsd-session-state.sh +59 -0
- package/hooks/gsd-statusline.js +566 -0
- package/hooks/gsd-update-banner.js +138 -0
- package/hooks/gsd-validate-commit.sh +57 -0
- package/hooks/gsd-workflow-guard.js +167 -0
- package/hooks/gsd-worktree-path-guard.js +169 -0
- package/hooks/hooks.json +69 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +38 -0
- package/package.json +115 -0
- package/scripts/affected-tests-lib.cjs +542 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +351 -0
- package/scripts/build-hooks.js +247 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +590 -0
- package/scripts/changeset/github-release-notes.cjs +199 -0
- package/scripts/changeset/lint.cjs +111 -0
- package/scripts/changeset/new.cjs +137 -0
- package/scripts/changeset/parse.cjs +114 -0
- package/scripts/changeset/render.cjs +34 -0
- package/scripts/changeset/serialize.cjs +130 -0
- package/scripts/check-alias-drift.cjs +114 -0
- package/scripts/check-env.cjs +312 -0
- package/scripts/check-npm-integrity.cjs +215 -0
- package/scripts/ci-guard-runner.cjs +22 -0
- package/scripts/ci-prepare-test-scope.cjs +51 -0
- package/scripts/ci-rebase-check.cjs +86 -0
- package/scripts/ci-test-scope.cjs +431 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +155 -0
- package/scripts/fix-slash-commands.cjs +147 -0
- package/scripts/gen-inventory-manifest.cjs +115 -0
- package/scripts/gen-research-agents.cjs +276 -0
- package/scripts/generate-package-identity.cjs +125 -0
- package/scripts/issue-dedupe.cjs +278 -0
- package/scripts/lib/allowlist-ratchet.cjs +136 -0
- package/scripts/lib/cli-exit.cjs +56 -0
- package/scripts/lint-command-contract.cjs +114 -0
- package/scripts/lint-descriptions.cjs +87 -0
- package/scripts/lint-docs-required.cjs +222 -0
- package/scripts/lint-legacy-dir-name.cjs +160 -0
- package/scripts/lint-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +99 -0
- package/scripts/lint-shell-command-projection-drift.cjs +62 -0
- package/scripts/lint-skill-deps.cjs +185 -0
- package/scripts/lint-test-file-count.allowlist.json +135 -0
- package/scripts/lint-test-file-count.cjs +246 -0
- package/scripts/mutation-matrix.cjs +222 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +207 -0
- package/scripts/release-notes/discord-release-summary.cjs +373 -0
- package/scripts/release-notes/format-github-release-notes.cjs +261 -0
- package/scripts/release-tarball-smoke.cjs +629 -0
- package/scripts/research-profiles.cjs +149 -0
- package/scripts/run-affected-tests.cjs +7 -0
- package/scripts/run-cross-platform-tests.cjs +67 -0
- package/scripts/run-tests.cjs +315 -0
- package/scripts/secret-scan-lint.sh +231 -0
- package/scripts/secret-scan.sh +358 -0
- package/scripts/setup-branch-protection.sh +236 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-manifest-versions.cjs +119 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +399 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/verify-npm-publish.cjs +240 -0
- package/scripts/workflow-policy.cjs +450 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Create a pull request from completed phase/milestone work, generate a rich PR body from planning artifacts, optionally run code review, and prepare for merge. Closes the plan → execute → verify → ship loop.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="initialize">
|
|
12
|
+
Parse arguments and load project state:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @therocketcode/gsd-core@latest --claude --local" >&2; exit 1; fi
|
|
16
|
+
INIT=$(gsd_run query init.phase-op "${PHASE_ARG}")
|
|
17
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Parse from init JSON: `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `padded_phase`, `commit_docs`.
|
|
21
|
+
|
|
22
|
+
Also load config for branching strategy:
|
|
23
|
+
```bash
|
|
24
|
+
CONFIG=$(gsd_run query state.load)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Extract: `branching_strategy`, `branch_name`.
|
|
28
|
+
|
|
29
|
+
Detect base branch for PRs and merges:
|
|
30
|
+
```bash
|
|
31
|
+
BASE_BRANCH=$(gsd_run query config-get git.base_branch 2>/dev/null || echo "")
|
|
32
|
+
if [ -z "$BASE_BRANCH" ] || [ "$BASE_BRANCH" = "null" ]; then
|
|
33
|
+
BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|^refs/remotes/origin/||')
|
|
34
|
+
BASE_BRANCH="${BASE_BRANCH:-main}"
|
|
35
|
+
fi
|
|
36
|
+
```
|
|
37
|
+
</step>
|
|
38
|
+
|
|
39
|
+
<step name="preflight_checks">
|
|
40
|
+
Verify the work is ready to ship:
|
|
41
|
+
|
|
42
|
+
1. **Verification passed?**
|
|
43
|
+
```bash
|
|
44
|
+
VERIFICATION=$(gsd_run query verification.status "${PHASE_DIR}" 2>/dev/null)
|
|
45
|
+
STATUS=$(printf '%s' "$VERIFICATION" | jq -r '.status' 2>/dev/null || echo "")
|
|
46
|
+
NEXT_ACTION=$(printf '%s' "$VERIFICATION" | jq -r '.next_action' 2>/dev/null || echo "")
|
|
47
|
+
NEXT_COMMAND=$(printf '%s' "$VERIFICATION" | jq -r '.next_command' 2>/dev/null || echo "")
|
|
48
|
+
```
|
|
49
|
+
Only `passed` may ship. If `$STATUS` is `passed`, verification is complete — continue to the next preflight check. Any other value (including `gaps_found`, `human_needed`, `missing`, and `unknown`) blocks with `PHASE_VERIFICATION_INCOMPLETE`: present `$NEXT_ACTION` to the user and, when `$NEXT_COMMAND` is non-empty, show it as the command to run next. The query already handles missing files and unexpected values, so no per-status arm is needed.
|
|
50
|
+
|
|
51
|
+
2. **Clean working tree?**
|
|
52
|
+
```bash
|
|
53
|
+
git status --short
|
|
54
|
+
```
|
|
55
|
+
If uncommitted changes exist: ask user to commit or stash first.
|
|
56
|
+
|
|
57
|
+
3. **On correct branch?**
|
|
58
|
+
```bash
|
|
59
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
60
|
+
```
|
|
61
|
+
If on `${BASE_BRANCH}`: warn — should be on a feature branch.
|
|
62
|
+
If branching_strategy is `none`: offer to create a branch now.
|
|
63
|
+
|
|
64
|
+
4. **Remote configured?**
|
|
65
|
+
```bash
|
|
66
|
+
git remote -v | head -2
|
|
67
|
+
```
|
|
68
|
+
Detect `origin` remote. If no remote: error — can't create PR.
|
|
69
|
+
|
|
70
|
+
5. **`gh` CLI available?**
|
|
71
|
+
```bash
|
|
72
|
+
which gh && gh auth status 2>&1
|
|
73
|
+
```
|
|
74
|
+
If `gh` not found or not authenticated: provide setup instructions and exit.
|
|
75
|
+
</step>
|
|
76
|
+
|
|
77
|
+
<step name="push_branch">
|
|
78
|
+
Push the current branch to remote:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
git push origin ${CURRENT_BRANCH} 2>&1
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
If push fails (e.g., no upstream): set upstream:
|
|
85
|
+
```bash
|
|
86
|
+
git push --set-upstream origin ${CURRENT_BRANCH} 2>&1
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Report: "Pushed `{branch}` to origin ({commit_count} commits ahead of ${BASE_BRANCH})"
|
|
90
|
+
</step>
|
|
91
|
+
|
|
92
|
+
<step name="generate_pr_body">
|
|
93
|
+
Auto-generate a rich PR body from planning artifacts:
|
|
94
|
+
|
|
95
|
+
**1. Title:**
|
|
96
|
+
```
|
|
97
|
+
Phase {phase_number}: {phase_name}
|
|
98
|
+
```
|
|
99
|
+
Or for milestone: `Milestone {version}: {name}`
|
|
100
|
+
|
|
101
|
+
**2. Summary section:**
|
|
102
|
+
Read ROADMAP.md for phase goal. Read VERIFICATION.md for verification status.
|
|
103
|
+
|
|
104
|
+
```markdown
|
|
105
|
+
## Summary
|
|
106
|
+
|
|
107
|
+
**Phase {N}: {Name}**
|
|
108
|
+
**Goal:** {goal from ROADMAP.md}
|
|
109
|
+
**Status:** Verified ✓
|
|
110
|
+
|
|
111
|
+
{One paragraph synthesized from SUMMARY.md files — what was built}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**3. Changes section:**
|
|
115
|
+
For each SUMMARY.md in the phase directory:
|
|
116
|
+
```markdown
|
|
117
|
+
## Changes
|
|
118
|
+
|
|
119
|
+
### Plan {plan_id}: {plan_name}
|
|
120
|
+
{one_liner from SUMMARY.md frontmatter}
|
|
121
|
+
|
|
122
|
+
**Key files:**
|
|
123
|
+
{key-files.created and key-files.modified from SUMMARY.md frontmatter}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**4. Requirements section:**
|
|
127
|
+
```markdown
|
|
128
|
+
## Requirements Addressed
|
|
129
|
+
|
|
130
|
+
{REQ-IDs from plan frontmatter, linked to REQUIREMENTS.md descriptions}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**5. Testing section:**
|
|
134
|
+
```markdown
|
|
135
|
+
## Verification
|
|
136
|
+
|
|
137
|
+
- [x] Automated verification: {pass/fail from VERIFICATION.md}
|
|
138
|
+
- {human verification items from VERIFICATION.md, if any}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**6. Decisions section:**
|
|
142
|
+
```markdown
|
|
143
|
+
## Key Decisions
|
|
144
|
+
|
|
145
|
+
{Decisions from STATE.md accumulated context relevant to this phase}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**7. Configured project sections:**
|
|
149
|
+
Read append-only project-specific PRD/PR body sections from config:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
CUSTOM_PR_SECTIONS=$(gsd_run query config-get ship.pr_body_sections --default '[]' 2>/dev/null || echo '[]')
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
`ship.pr_body_sections` is an onboarding-time extension point for teams that need extra PRD-style sections such as `User Stories & Acceptance Criteria`, `Risks & Dependencies`, `Success Metrics`, `Release Criteria`, or `Stakeholder Review & Approval`.
|
|
156
|
+
|
|
157
|
+
Use these sections for lean/agile PRD material that should travel with the PR without making the core `/gsd:ship` body configurable:
|
|
158
|
+
|
|
159
|
+
- User stories and acceptance criteria that explain the functional increment from the user's point of view.
|
|
160
|
+
- Definition of Done or release criteria that make the completion standard explicit.
|
|
161
|
+
- Risks, dependencies, stakeholder review, and traceability notes needed by regulated or approval-heavy projects.
|
|
162
|
+
|
|
163
|
+
Rules:
|
|
164
|
+
|
|
165
|
+
- Treat configured sections as append-only. They are rendered after `Key Decisions` and cannot replace, remove, or reorder the required core sections: `Summary`, `Changes`, `Requirements Addressed`, `Verification`, and `Key Decisions`.
|
|
166
|
+
- Each entry must have `heading` plus at least one of `source`, `template`, or `fallback`.
|
|
167
|
+
- `enabled` defaults to `true`; when `enabled` is `false`, skip the section without warning. This lets onboarding seed optional sections that a project can enable later.
|
|
168
|
+
- `source` is a fallback chain of planning artifact headings: `PLAN.md ## Risks || VERIFICATION.md ## Manual Checks`. Allowed artifacts are `ROADMAP.md`, `PLAN.md`, `SUMMARY.md`, `VERIFICATION.md`, `STATE.md`, `REQUIREMENTS.md`, and `CONTEXT.md`.
|
|
169
|
+
- `template` is literal Markdown with a closed token namespace only: `{phase_number}`, `{phase_name}`, `{phase_dir}`, `{base_branch}`, `{padded_phase}`.
|
|
170
|
+
- `fallback` is literal Markdown used when `source` finds no content and no `template` is present.
|
|
171
|
+
- Omit sections whose final rendered body is empty after trimming.
|
|
172
|
+
|
|
173
|
+
Example configured sections:
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
[
|
|
177
|
+
{
|
|
178
|
+
"heading": "User Stories & Acceptance Criteria",
|
|
179
|
+
"enabled": true,
|
|
180
|
+
"source": "REQUIREMENTS.md ## User Stories || REQUIREMENTS.md ## Acceptance Criteria",
|
|
181
|
+
"fallback": "- Acceptance criteria are covered by the linked requirements and verification evidence."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"heading": "Risks & Dependencies",
|
|
185
|
+
"enabled": true,
|
|
186
|
+
"source": "PLAN.md ## Risks || PLAN.md ## Dependencies",
|
|
187
|
+
"fallback": "- No known high-risk rollout dependencies."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"heading": "Stakeholder Review & Approval",
|
|
191
|
+
"enabled": false,
|
|
192
|
+
"template": "- Product owner approval pending for {phase_name}."
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**8. TDD Audit section:**
|
|
198
|
+
|
|
199
|
+
Reconstruct the per-commit TDD gate trail before squash-merge discards it. Walk the PR branch's own commits (merges excluded) and read each commit's `gate_status:` trailer with Git's native trailer machinery — never a raw `%B` grep, which would also match the string written in prose:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Anchor on the merge-base so a stale local ${BASE_BRANCH} ref cannot over-count.
|
|
203
|
+
RANGE_BASE=$(git merge-base "${BASE_BRANCH}" HEAD)
|
|
204
|
+
git log "${RANGE_BASE}..HEAD" --no-merges --reverse \
|
|
205
|
+
--format='%H%x1f%s%x1f%(trailers:key=gate_status,valueonly,separator=%x2c)%x1e'
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Records are separated by `\x1e`; the fields inside each are `\x1f`-separated — `<sha>`, `<subject>`, `<gate_status value>`.
|
|
209
|
+
|
|
210
|
+
Pair commits by their conventional-commit type (the `type:` prefix of the subject):
|
|
211
|
+
|
|
212
|
+
- A `test:` commit is the RED row. Pair it with the next following **implementation** commit — a `feat:` or `fix:` — as its **Impl commit** (the GREEN step), skipping over any intervening `refactor:`, `docs:`, or `chore:` commits so they are never mistaken for the GREEN step.
|
|
213
|
+
- A `refactor:`, `docs:`, or `chore:` commit that is not consumed as an Impl pairing is a standalone row with Impl commit `—`.
|
|
214
|
+
- A `feat:`/`fix:` commit with no preceding unpaired `test:` is a standalone row.
|
|
215
|
+
|
|
216
|
+
Surface each commit's `gate_status:` value, normalized to exactly one of `skill`, `fallback`, `exempt`, or `missing` — never the raw trailer text. A commit whose trailer is absent, whose value is none of the first three, or which carries more than one `gate_status:` trailer (ambiguous) is counted as **missing** and still listed. This section is informational; it never blocks the ship.
|
|
217
|
+
|
|
218
|
+
Harden every table cell against injection, not just subjects: escape `|` as `\|` and strip `\r`/`\n` from both commit subjects and the rendered `gate_status` value. Prefer NUL (`-z` / `%x00`) record separation, and reject any record whose fields contain the `\x1f`/`\x1e` delimiters, so an adversarial commit message cannot corrupt record or field boundaries.
|
|
219
|
+
|
|
220
|
+
```markdown
|
|
221
|
+
## TDD Audit
|
|
222
|
+
|
|
223
|
+
| Test commit | Impl commit | gate_status |
|
|
224
|
+
|---|---|---|
|
|
225
|
+
| `a1b2c3d` test: failing parser test | `e4f5g6h` feat: implement parser | skill |
|
|
226
|
+
| `i7j8k9l` test: failing export test | `m0n1o2p` feat: implement export | fallback |
|
|
227
|
+
| `q3r4s5t` refactor: extract helper | — | exempt |
|
|
228
|
+
|
|
229
|
+
Aggregate: 2 skill, 1 fallback, 1 exempt — 0 missing.
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
This `## TDD Audit` section is the final body section — it renders after the configured `pr_body_sections`, immediately before the aggregate trailer — so the frozen core sections and the append-only configured sections both keep their existing order.
|
|
233
|
+
|
|
234
|
+
**9. Aggregate gate_status trailer (final line):**
|
|
235
|
+
|
|
236
|
+
After every other section — including any configured `pr_body_sections` — emit the audit aggregate as a single Git trailer on the **final line** of the PR body, preceded by a blank line so it parses as a valid trailer:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
gate_status: skill=2, fallback=1, exempt=1, missing=0
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Use the exact key order `skill=`, `fallback=`, `exempt=`, `missing=` so downstream tooling parses it stably. Keeping it last means a GitHub squash-merge that defaults its commit message to the PR description carries the aggregate into `${BASE_BRANCH}`, preserving the audit footprint in `git log` after the PR branch is deleted. (Best-effort: it depends on the repo's squash-message default; the in-body `## TDD Audit` section is the source of truth regardless.)
|
|
243
|
+
</step>
|
|
244
|
+
|
|
245
|
+
<step name="create_pr">
|
|
246
|
+
Create the PR using the generated body. Write the body to a temp file first so large generated PRD sections do not hit shell argument limits:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
PR_BODY_FILE=$(mktemp "${TMPDIR:-/tmp}/gsd-pr-body.XXXXXX.md")
|
|
250
|
+
trap 'rm -f "${PR_BODY_FILE:-}"' EXIT
|
|
251
|
+
printf '%s\n' "${PR_BODY}" > "${PR_BODY_FILE}"
|
|
252
|
+
|
|
253
|
+
gh pr create \
|
|
254
|
+
--title "Phase ${PHASE_NUMBER}: ${PHASE_NAME}" \
|
|
255
|
+
--body-file "${PR_BODY_FILE}" \
|
|
256
|
+
--base "${BASE_BRANCH}"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
If `--draft` flag was passed: add `--draft`.
|
|
260
|
+
|
|
261
|
+
Report: "PR #{number} created: {url}"
|
|
262
|
+
</step>
|
|
263
|
+
|
|
264
|
+
<step name="optional_review">
|
|
265
|
+
|
|
266
|
+
**External code review command (automated sub-step):**
|
|
267
|
+
|
|
268
|
+
Before prompting the user, check if an external review command is configured:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
REVIEW_CMD=$(gsd_run query config-get workflow.code_review_command 2>/dev/null | jq -r '.' 2>/dev/null || echo "")
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
If `REVIEW_CMD` is non-empty and not `"null"`, run the external review:
|
|
275
|
+
|
|
276
|
+
1. **Generate diff and stats:**
|
|
277
|
+
```bash
|
|
278
|
+
DIFF=$(git diff ${BASE_BRANCH}...HEAD)
|
|
279
|
+
DIFF_STATS=$(git diff --stat ${BASE_BRANCH}...HEAD)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
2. **Load phase context from STATE.md:**
|
|
283
|
+
```bash
|
|
284
|
+
STATE_STATUS=$(gsd_run query state.load 2>/dev/null | head -20)
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
3. **Build review prompt and pipe to command via stdin:**
|
|
288
|
+
Construct a review prompt containing the diff, diff stats, and phase context, then pipe it to the configured command:
|
|
289
|
+
```bash
|
|
290
|
+
REVIEW_PROMPT="You are reviewing a pull request.\n\nDiff stats:\n${DIFF_STATS}\n\nPhase context:\n${STATE_STATUS}\n\nFull diff:\n${DIFF}\n\nRespond with JSON: { \"verdict\": \"APPROVED\" or \"REVISE\", \"confidence\": 0-100, \"summary\": \"...\", \"issues\": [{\"severity\": \"...\", \"file\": \"...\", \"line_range\": \"...\", \"description\": \"...\", \"suggestion\": \"...\"}] }"
|
|
291
|
+
REVIEW_OUTPUT=$(echo "${REVIEW_PROMPT}" | timeout 120 ${REVIEW_CMD} 2>/tmp/gsd-review-stderr.log)
|
|
292
|
+
REVIEW_EXIT=$?
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
4. **Handle timeout (120s) and failure:**
|
|
296
|
+
If `REVIEW_EXIT` is non-zero or the command times out:
|
|
297
|
+
```bash
|
|
298
|
+
if [ $REVIEW_EXIT -ne 0 ]; then
|
|
299
|
+
REVIEW_STDERR=$(cat /tmp/gsd-review-stderr.log 2>/dev/null)
|
|
300
|
+
echo "WARNING: External review command failed (exit ${REVIEW_EXIT}). stderr: ${REVIEW_STDERR}"
|
|
301
|
+
echo "Continuing with manual review flow..."
|
|
302
|
+
fi
|
|
303
|
+
```
|
|
304
|
+
On failure, warn with stderr output and fall through to the manual review flow below.
|
|
305
|
+
|
|
306
|
+
5. **Parse JSON result:**
|
|
307
|
+
If the command succeeded, parse the JSON output and report the verdict:
|
|
308
|
+
```bash
|
|
309
|
+
# Parse verdict and summary from REVIEW_OUTPUT JSON
|
|
310
|
+
VERDICT=$(echo "${REVIEW_OUTPUT}" | node -e "
|
|
311
|
+
let d=''; process.stdin.on('data',c=>d+=c); process.stdin.on('end',()=>{
|
|
312
|
+
try { const r=JSON.parse(d); console.log(r.verdict); }
|
|
313
|
+
catch(e) { console.log('INVALID_JSON'); }
|
|
314
|
+
});
|
|
315
|
+
")
|
|
316
|
+
```
|
|
317
|
+
- If `verdict` is `"APPROVED"`: report approval with confidence and summary.
|
|
318
|
+
- If `verdict` is `"REVISE"`: report issues found, list each issue with severity, file, line_range, description, and suggestion.
|
|
319
|
+
- If JSON is invalid (`INVALID_JSON`): warn "External review returned invalid JSON" with stderr and continue.
|
|
320
|
+
|
|
321
|
+
Regardless of the external review result, fall through to the manual review options below.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
**Manual review options:**
|
|
326
|
+
|
|
327
|
+
Ask if user wants to trigger a code review:
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
331
|
+
|
|
332
|
+
```
|
|
333
|
+
AskUserQuestion:
|
|
334
|
+
question: "PR created. Run a code review before merge?"
|
|
335
|
+
options:
|
|
336
|
+
- label: "Skip review"
|
|
337
|
+
description: "PR is ready — merge when CI passes"
|
|
338
|
+
- label: "Self-review"
|
|
339
|
+
description: "I'll review the diff in the PR myself"
|
|
340
|
+
- label: "Request review"
|
|
341
|
+
description: "Request review from a teammate"
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**If "Request review":**
|
|
345
|
+
```bash
|
|
346
|
+
gh pr edit ${PR_NUMBER} --add-reviewer "${REVIEWER}"
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**If "Self-review":**
|
|
350
|
+
Report the PR URL and suggest: "Review the diff at {url}/files"
|
|
351
|
+
</step>
|
|
352
|
+
|
|
353
|
+
<step name="track_shipping">
|
|
354
|
+
Update STATE.md to reflect the shipping action:
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
gsd_run query state.update "Last Activity" "$(date +%Y-%m-%d)"
|
|
358
|
+
gsd_run query state.update "Status" "Phase ${PHASE_NUMBER} shipped — PR #${PR_NUMBER}"
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
If `commit_docs` is true:
|
|
362
|
+
```bash
|
|
363
|
+
gsd_run query commit "docs(${padded_phase}): ship phase ${PHASE_NUMBER} — PR #${PR_NUMBER}" --files .planning/STATE.md
|
|
364
|
+
```
|
|
365
|
+
</step>
|
|
366
|
+
|
|
367
|
+
<step name="report">
|
|
368
|
+
```
|
|
369
|
+
───────────────────────────────────────────────────────────────
|
|
370
|
+
|
|
371
|
+
## ✓ Phase {X}: {Name} — Shipped
|
|
372
|
+
|
|
373
|
+
PR: #{number} ({url})
|
|
374
|
+
Branch: {branch} → ${BASE_BRANCH}
|
|
375
|
+
Commits: {count}
|
|
376
|
+
Verification: ✓ Passed
|
|
377
|
+
Requirements: {N} REQ-IDs addressed
|
|
378
|
+
|
|
379
|
+
Next steps:
|
|
380
|
+
- Review/approve PR
|
|
381
|
+
- Merge when CI passes
|
|
382
|
+
- /gsd:complete-milestone (if last phase in milestone)
|
|
383
|
+
- /gsd:progress (to see what's next)
|
|
384
|
+
|
|
385
|
+
───────────────────────────────────────────────────────────────
|
|
386
|
+
```
|
|
387
|
+
</step>
|
|
388
|
+
|
|
389
|
+
</process>
|
|
390
|
+
|
|
391
|
+
<offer_next>
|
|
392
|
+
After shipping:
|
|
393
|
+
|
|
394
|
+
- /gsd:complete-milestone — if all phases in milestone are done
|
|
395
|
+
- /gsd:progress — see overall project state
|
|
396
|
+
- /gsd:execute-phase {next} — continue to next phase
|
|
397
|
+
</offer_next>
|
|
398
|
+
|
|
399
|
+
<success_criteria>
|
|
400
|
+
- [ ] Preflight checks passed (verification, clean tree, branch, remote, gh)
|
|
401
|
+
- [ ] Branch pushed to remote
|
|
402
|
+
- [ ] PR created with rich auto-generated body
|
|
403
|
+
- [ ] STATE.md updated with shipping status
|
|
404
|
+
- [ ] User knows PR number and next steps
|
|
405
|
+
</success_criteria>
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Curate sketch design findings and package them into a persistent project skill for future
|
|
3
|
+
UI implementation. Reads from `.planning/sketches/`, writes skill to `./.claude/skills/sketch-findings-[project]/`
|
|
4
|
+
(project-local) and summary to `.planning/sketches/WRAP-UP-SUMMARY.md`.
|
|
5
|
+
Companion to `/gsd:sketch`.
|
|
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 ► SKETCH WRAP-UP
|
|
18
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
```
|
|
20
|
+
</step>
|
|
21
|
+
|
|
22
|
+
<step name="gather">
|
|
23
|
+
## Gather Sketch Inventory
|
|
24
|
+
|
|
25
|
+
1. Read `.planning/sketches/MANIFEST.md` for the design direction and reference points
|
|
26
|
+
2. Glob `.planning/sketches/*/README.md` and parse YAML frontmatter from each
|
|
27
|
+
3. Check if `./.claude/skills/sketch-findings-*/SKILL.md` exists for this project
|
|
28
|
+
- If yes: read its `processed_sketches` list and filter those out
|
|
29
|
+
- If no: all sketches are candidates
|
|
30
|
+
|
|
31
|
+
If no unprocessed sketches exist:
|
|
32
|
+
```
|
|
33
|
+
No unprocessed sketches found in `.planning/sketches/`.
|
|
34
|
+
Run `/gsd:sketch` first to create design explorations.
|
|
35
|
+
```
|
|
36
|
+
Exit.
|
|
37
|
+
|
|
38
|
+
Check `commit_docs` config:
|
|
39
|
+
```bash
|
|
40
|
+
_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @therocketcode/gsd-core@latest --claude --local" >&2; exit 1; fi
|
|
41
|
+
COMMIT_DOCS=$(gsd_run query config-get commit_docs 2>/dev/null || echo "true")
|
|
42
|
+
```
|
|
43
|
+
</step>
|
|
44
|
+
|
|
45
|
+
<step name="curate">
|
|
46
|
+
## Curate Sketches One-at-a-Time
|
|
47
|
+
|
|
48
|
+
Present each unprocessed sketch in ascending order. For each sketch, show:
|
|
49
|
+
|
|
50
|
+
- **Sketch number and name**
|
|
51
|
+
- **Design question:** from frontmatter
|
|
52
|
+
- **Winner:** which variant was selected (if any)
|
|
53
|
+
- **Tags:** from frontmatter
|
|
54
|
+
- **Key decisions:** summarize what was decided visually
|
|
55
|
+
|
|
56
|
+
Then ask the user:
|
|
57
|
+
|
|
58
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
59
|
+
║ CHECKPOINT: Decision Required ║
|
|
60
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
61
|
+
|
|
62
|
+
Sketch {NNN}: {name} — Winner: Variant {X}
|
|
63
|
+
|
|
64
|
+
{key design decisions summary}
|
|
65
|
+
|
|
66
|
+
──────────────────────────────────────────────────────────────
|
|
67
|
+
→ Include / Exclude / Partial / Let me look at it
|
|
68
|
+
──────────────────────────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
**If "Let me look at it":**
|
|
71
|
+
1. Provide: `open .planning/sketches/NNN-name/index.html`
|
|
72
|
+
2. Remind them which variant won and what to look for
|
|
73
|
+
3. After they've looked, return to the include/exclude/partial decision
|
|
74
|
+
|
|
75
|
+
**If "Partial":**
|
|
76
|
+
Ask what specifically to include or exclude from this sketch's decisions.
|
|
77
|
+
</step>
|
|
78
|
+
|
|
79
|
+
<step name="group">
|
|
80
|
+
## Auto-Group by Design Area
|
|
81
|
+
|
|
82
|
+
After all sketches are curated:
|
|
83
|
+
|
|
84
|
+
1. Read all included sketches' tags, names, and content
|
|
85
|
+
2. Propose design-area groupings, e.g.:
|
|
86
|
+
- "**Layout & Navigation** — sketches 001, 004"
|
|
87
|
+
- "**Form Controls** — sketches 002, 005"
|
|
88
|
+
- "**Color & Typography** — sketches 003"
|
|
89
|
+
3. Present the grouping for approval — user may merge, split, rename, or rearrange
|
|
90
|
+
|
|
91
|
+
Each group becomes one reference file in the generated skill.
|
|
92
|
+
</step>
|
|
93
|
+
|
|
94
|
+
<step name="skill_name">
|
|
95
|
+
## Determine Output Skill Name
|
|
96
|
+
|
|
97
|
+
Derive from the project directory name: `./.claude/skills/sketch-findings-[project-dir-name]/`
|
|
98
|
+
|
|
99
|
+
If a skill already exists at that path (append mode), update in place.
|
|
100
|
+
</step>
|
|
101
|
+
|
|
102
|
+
<step name="copy_sources">
|
|
103
|
+
## Copy Source Files
|
|
104
|
+
|
|
105
|
+
For each included sketch:
|
|
106
|
+
|
|
107
|
+
1. Copy the winning variant's HTML file (or the full index.html with all variants) into `sources/NNN-sketch-name/`
|
|
108
|
+
2. Copy the winning theme.css into `sources/themes/`
|
|
109
|
+
3. Exclude node_modules, build artifacts, .DS_Store
|
|
110
|
+
</step>
|
|
111
|
+
|
|
112
|
+
<step name="synthesize">
|
|
113
|
+
## Synthesize Reference Files
|
|
114
|
+
|
|
115
|
+
For each design-area group, write a reference file at `references/[design-area-name].md`:
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
# [Design Area Name]
|
|
119
|
+
|
|
120
|
+
## Design Decisions
|
|
121
|
+
[For each validated decision: what was chosen, why it won over alternatives, the key visual properties (colors, spacing, border radius, typography)]
|
|
122
|
+
|
|
123
|
+
## CSS Patterns
|
|
124
|
+
[Key CSS snippets from winning variants — layout structures, component patterns, animation patterns. Extracted and cleaned up for reference.]
|
|
125
|
+
|
|
126
|
+
## HTML Structures
|
|
127
|
+
[Key HTML patterns from winning variants — page layout, component markup, navigation structures.]
|
|
128
|
+
|
|
129
|
+
## What to Avoid
|
|
130
|
+
[Design directions that were tried and rejected. Why they didn't work.]
|
|
131
|
+
|
|
132
|
+
## Origin
|
|
133
|
+
Synthesized from sketches: NNN, NNN
|
|
134
|
+
Source files available in: sources/NNN-sketch-name/
|
|
135
|
+
```
|
|
136
|
+
</step>
|
|
137
|
+
|
|
138
|
+
<step name="write_skill">
|
|
139
|
+
## Write SKILL.md
|
|
140
|
+
|
|
141
|
+
Create (or update) the generated skill's SKILL.md:
|
|
142
|
+
|
|
143
|
+
```markdown
|
|
144
|
+
---
|
|
145
|
+
name: sketch-findings-[project-dir-name]
|
|
146
|
+
description: Validated design decisions, CSS patterns, and visual direction from sketch experiments. Auto-loaded during UI implementation on [project-dir-name].
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
<context>
|
|
150
|
+
## Project: [project-dir-name]
|
|
151
|
+
|
|
152
|
+
[Design direction paragraph from MANIFEST.md]
|
|
153
|
+
[Reference points mentioned during intake]
|
|
154
|
+
|
|
155
|
+
Sketch sessions wrapped: [date(s)]
|
|
156
|
+
</context>
|
|
157
|
+
|
|
158
|
+
<design_direction>
|
|
159
|
+
## Overall Direction
|
|
160
|
+
|
|
161
|
+
[Summary of the validated visual direction: palette, typography, spacing system, layout approach, interaction patterns]
|
|
162
|
+
</design_direction>
|
|
163
|
+
|
|
164
|
+
<findings_index>
|
|
165
|
+
## Design Areas
|
|
166
|
+
|
|
167
|
+
| Area | Reference | Key Decision |
|
|
168
|
+
|------|-----------|--------------|
|
|
169
|
+
| [Name] | references/[name].md | [One-line summary] |
|
|
170
|
+
|
|
171
|
+
## Theme
|
|
172
|
+
|
|
173
|
+
The winning theme file is at `sources/themes/default.css`.
|
|
174
|
+
|
|
175
|
+
## Source Files
|
|
176
|
+
|
|
177
|
+
Original sketch HTML files are preserved in `sources/` for complete reference.
|
|
178
|
+
</findings_index>
|
|
179
|
+
|
|
180
|
+
<metadata>
|
|
181
|
+
## Processed Sketches
|
|
182
|
+
|
|
183
|
+
[List of sketch numbers wrapped up]
|
|
184
|
+
|
|
185
|
+
- 001-sketch-name
|
|
186
|
+
- 002-sketch-name
|
|
187
|
+
</metadata>
|
|
188
|
+
```
|
|
189
|
+
</step>
|
|
190
|
+
|
|
191
|
+
<step name="write_summary">
|
|
192
|
+
## Write Planning Summary
|
|
193
|
+
|
|
194
|
+
Write `.planning/sketches/WRAP-UP-SUMMARY.md` for project history:
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
# Sketch Wrap-Up Summary
|
|
198
|
+
|
|
199
|
+
**Date:** [date]
|
|
200
|
+
**Sketches processed:** [count]
|
|
201
|
+
**Design areas:** [list]
|
|
202
|
+
**Skill output:** `./.claude/skills/sketch-findings-[project]/`
|
|
203
|
+
|
|
204
|
+
## Included Sketches
|
|
205
|
+
| # | Name | Winner | Design Area |
|
|
206
|
+
|---|------|--------|-------------|
|
|
207
|
+
|
|
208
|
+
## Excluded Sketches
|
|
209
|
+
| # | Name | Reason |
|
|
210
|
+
|---|------|--------|
|
|
211
|
+
|
|
212
|
+
## Design Direction
|
|
213
|
+
[consolidated design direction summary]
|
|
214
|
+
|
|
215
|
+
## Key Decisions
|
|
216
|
+
[layout, palette, typography, spacing, interaction patterns]
|
|
217
|
+
```
|
|
218
|
+
</step>
|
|
219
|
+
|
|
220
|
+
<step name="update_claude_md">
|
|
221
|
+
## Update Project CLAUDE.md
|
|
222
|
+
|
|
223
|
+
Add an auto-load routing line:
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
- **Sketch findings for [project]** (design decisions, CSS patterns, visual direction) → `Skill("sketch-findings-[project-dir-name]")`
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
If this routing line already exists (append mode), leave it as-is.
|
|
230
|
+
</step>
|
|
231
|
+
|
|
232
|
+
<step name="commit">
|
|
233
|
+
Commit all artifacts (if `COMMIT_DOCS` is true):
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
gsd_run query commit "docs(sketch-wrap-up): package [N] sketch findings into project skill" --files .planning/sketches/WRAP-UP-SUMMARY.md
|
|
237
|
+
```
|
|
238
|
+
</step>
|
|
239
|
+
|
|
240
|
+
<step name="report">
|
|
241
|
+
```
|
|
242
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
243
|
+
GSD ► SKETCH WRAP-UP COMPLETE ✓
|
|
244
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
245
|
+
|
|
246
|
+
**Curated:** {N} sketches ({included} included, {excluded} excluded)
|
|
247
|
+
**Design areas:** {list}
|
|
248
|
+
**Skill:** `./.claude/skills/sketch-findings-[project]/`
|
|
249
|
+
**Summary:** `.planning/sketches/WRAP-UP-SUMMARY.md`
|
|
250
|
+
**CLAUDE.md:** routing line added
|
|
251
|
+
|
|
252
|
+
The sketch-findings skill will auto-load when building the UI.
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
───────────────────────────────────────────────────────────────
|
|
256
|
+
|
|
257
|
+
## ▶ Next Up
|
|
258
|
+
|
|
259
|
+
**Explore frontier sketches** — see what else is worth sketching based on what we've explored
|
|
260
|
+
|
|
261
|
+
`/gsd:sketch` (run with no argument — its frontier mode analyzes the sketch landscape and proposes consistency and frontier sketches)
|
|
262
|
+
|
|
263
|
+
───────────────────────────────────────────────────────────────
|
|
264
|
+
|
|
265
|
+
**Also available:**
|
|
266
|
+
- `/gsd:plan-phase` — start building the real UI
|
|
267
|
+
- `/gsd:ui-phase` — generate a UI design contract for a frontend phase
|
|
268
|
+
- `/gsd:sketch [idea]` — sketch a specific new design area
|
|
269
|
+
- `/gsd:explore` — continue exploring
|
|
270
|
+
|
|
271
|
+
───────────────────────────────────────────────────────────────
|
|
272
|
+
</step>
|
|
273
|
+
|
|
274
|
+
</process>
|
|
275
|
+
|
|
276
|
+
<success_criteria>
|
|
277
|
+
- [ ] Every unprocessed sketch presented for individual curation
|
|
278
|
+
- [ ] Design-area grouping proposed and approved
|
|
279
|
+
- [ ] Sketch-findings skill exists at `./.claude/skills/` with SKILL.md, references/, sources/
|
|
280
|
+
- [ ] Winning theme.css copied into skill sources
|
|
281
|
+
- [ ] Reference files contain design decisions, CSS patterns, HTML structures, anti-patterns
|
|
282
|
+
- [ ] `.planning/sketches/WRAP-UP-SUMMARY.md` written for project history
|
|
283
|
+
- [ ] Project CLAUDE.md has auto-load routing line
|
|
284
|
+
- [ ] Summary presented
|
|
285
|
+
- [ ] Next-step options presented (including frontier sketch exploration via `/gsd:sketch`)
|
|
286
|
+
</success_criteria>
|