@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,186 @@
|
|
|
1
|
+
# AI Framework Decision Matrix
|
|
2
|
+
|
|
3
|
+
> Reference used by `gsd-framework-selector` and `gsd-ai-researcher`.
|
|
4
|
+
> Distilled from official docs, benchmarks, and developer reports (2026).
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Quick Picks
|
|
9
|
+
|
|
10
|
+
| Situation | Pick |
|
|
11
|
+
|-----------|------|
|
|
12
|
+
| Simplest path to a working agent (OpenAI) | OpenAI Agents SDK |
|
|
13
|
+
| Simplest path to a working agent (model-agnostic) | CrewAI |
|
|
14
|
+
| Production RAG / document Q&A | LlamaIndex |
|
|
15
|
+
| Complex stateful workflows with branching | LangGraph |
|
|
16
|
+
| Multi-agent teams with defined roles | CrewAI |
|
|
17
|
+
| Code-aware autonomous agents (Anthropic) | Claude Agent SDK |
|
|
18
|
+
| "I don't know my requirements yet" | LangChain |
|
|
19
|
+
| Regulated / audit-trail required | LangGraph |
|
|
20
|
+
| Enterprise Microsoft/.NET shops | AutoGen/AG2 |
|
|
21
|
+
| Google Cloud / Gemini-committed teams | Google ADK |
|
|
22
|
+
| Pure NLP pipelines with explicit control | Haystack |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Framework Profiles
|
|
27
|
+
|
|
28
|
+
### CrewAI
|
|
29
|
+
- **Type:** Multi-agent orchestration
|
|
30
|
+
- **Language:** Python only
|
|
31
|
+
- **Model support:** Model-agnostic
|
|
32
|
+
- **Learning curve:** Beginner (role/task/crew maps to real teams)
|
|
33
|
+
- **Best for:** Content pipelines, research automation, business process workflows, rapid prototyping
|
|
34
|
+
- **Avoid if:** Fine-grained state management, TypeScript, fault-tolerant checkpointing, complex conditional branching
|
|
35
|
+
- **Strengths:** Fastest multi-agent prototyping, 5.76x faster than LangGraph on QA tasks, built-in memory (short/long/entity/contextual), Flows architecture, standalone (no LangChain dep)
|
|
36
|
+
- **Weaknesses:** Limited checkpointing, coarse error handling, Python only
|
|
37
|
+
- **Eval concerns:** Task decomposition accuracy, inter-agent handoff, goal completion rate, loop detection
|
|
38
|
+
|
|
39
|
+
### LlamaIndex
|
|
40
|
+
- **Type:** RAG and data ingestion
|
|
41
|
+
- **Language:** Python + TypeScript
|
|
42
|
+
- **Model support:** Model-agnostic
|
|
43
|
+
- **Learning curve:** Intermediate
|
|
44
|
+
- **Best for:** Legal research, internal knowledge assistants, enterprise document search, any system where retrieval quality is the #1 priority
|
|
45
|
+
- **Avoid if:** Primary need is agent orchestration, multi-agent collaboration, or chatbot conversation flow
|
|
46
|
+
- **Strengths:** Best-in-class document parsing (LlamaParse), 35% retrieval accuracy improvement, 20-30% faster queries, mixed retrieval strategies (vector + graph + reranker)
|
|
47
|
+
- **Weaknesses:** Data framework first — agent orchestration is secondary
|
|
48
|
+
- **Eval concerns:** Context faithfulness, hallucination, answer relevance, retrieval precision/recall
|
|
49
|
+
|
|
50
|
+
### LangChain
|
|
51
|
+
- **Type:** General-purpose LLM framework
|
|
52
|
+
- **Language:** Python + TypeScript
|
|
53
|
+
- **Model support:** Model-agnostic (widest ecosystem)
|
|
54
|
+
- **Learning curve:** Intermediate–Advanced
|
|
55
|
+
- **Best for:** Evolving requirements, many third-party integrations, teams wanting one framework for everything, RAG + agents + chains
|
|
56
|
+
- **Avoid if:** Simple well-defined use case, RAG-primary (use LlamaIndex), complex stateful workflows (use LangGraph), performance at scale is critical
|
|
57
|
+
- **Strengths:** Largest community and integration ecosystem, 25% faster development vs scratch, covers RAG/agents/chains/memory
|
|
58
|
+
- **Weaknesses:** Abstraction overhead, p99 latency degrades under load, complexity creep risk
|
|
59
|
+
- **Eval concerns:** End-to-end task completion, chain correctness, retrieval quality
|
|
60
|
+
|
|
61
|
+
### LangGraph
|
|
62
|
+
- **Type:** Stateful agent workflows (graph-based)
|
|
63
|
+
- **Language:** Python + TypeScript (full parity)
|
|
64
|
+
- **Model support:** Model-agnostic (inherits LangChain integrations)
|
|
65
|
+
- **Learning curve:** Intermediate–Advanced (graph mental model)
|
|
66
|
+
- **Best for:** Production-grade stateful workflows, regulated industries, audit trails, human-in-the-loop flows, fault-tolerant multi-step agents
|
|
67
|
+
- **Avoid if:** Simple chatbot, purely linear workflow, rapid prototyping
|
|
68
|
+
- **Strengths:** Best checkpointing (every node), time-travel debugging, native Postgres/Redis persistence, streaming support, chosen by 62% of developers for stateful agent work (2026)
|
|
69
|
+
- **Weaknesses:** More upfront scaffolding, steeper curve, overkill for simple cases
|
|
70
|
+
- **Eval concerns:** State transition correctness, goal completion rate, tool use accuracy, safety guardrails
|
|
71
|
+
|
|
72
|
+
### OpenAI Agents SDK
|
|
73
|
+
- **Type:** Native OpenAI agent framework
|
|
74
|
+
- **Language:** Python + TypeScript
|
|
75
|
+
- **Model support:** Optimized for OpenAI (supports 100+ via Chat Completions compatibility)
|
|
76
|
+
- **Learning curve:** Beginner (4 primitives: Agents, Handoffs, Guardrails, Tracing)
|
|
77
|
+
- **Best for:** OpenAI-committed teams, rapid agent prototyping, voice agents (gpt-realtime), teams wanting visual builder (AgentKit)
|
|
78
|
+
- **Avoid if:** Model flexibility needed, complex multi-agent collaboration, persistent state management required, vendor lock-in concern
|
|
79
|
+
- **Strengths:** Simplest mental model, built-in tracing and guardrails, Handoffs for agent delegation, Realtime Agents for voice
|
|
80
|
+
- **Weaknesses:** OpenAI vendor lock-in, no built-in persistent state, younger ecosystem
|
|
81
|
+
- **Eval concerns:** Instruction following, safety guardrails, escalation accuracy, tone consistency
|
|
82
|
+
|
|
83
|
+
### Claude Agent SDK (Anthropic)
|
|
84
|
+
- **Type:** Code-aware autonomous agent framework
|
|
85
|
+
- **Language:** Python + TypeScript
|
|
86
|
+
- **Model support:** Claude models only
|
|
87
|
+
- **Learning curve:** Intermediate (18 hook events, MCP, tool decorators)
|
|
88
|
+
- **Best for:** Developer tooling, code generation/review agents, autonomous coding assistants, MCP-heavy architectures, safety-critical applications
|
|
89
|
+
- **Avoid if:** Model flexibility needed, stable/mature API required, use case unrelated to code/tool-use
|
|
90
|
+
- **Strengths:** Deepest MCP integration, built-in filesystem/shell access, 18 lifecycle hooks, automatic context compaction, extended thinking, safety-first design
|
|
91
|
+
- **Weaknesses:** Claude-only vendor lock-in, newer/evolving API, smaller community
|
|
92
|
+
- **Eval concerns:** Tool use correctness, safety, code quality, instruction following
|
|
93
|
+
|
|
94
|
+
### AutoGen / AG2 / Microsoft Agent Framework
|
|
95
|
+
- **Type:** Multi-agent conversational framework
|
|
96
|
+
- **Language:** Python (AG2), Python + .NET (Microsoft Agent Framework)
|
|
97
|
+
- **Model support:** Model-agnostic
|
|
98
|
+
- **Learning curve:** Intermediate–Advanced
|
|
99
|
+
- **Best for:** Research applications, conversational problem-solving, code generation + execution loops, Microsoft/.NET shops
|
|
100
|
+
- **Avoid if:** You want ecosystem stability, deterministic workflows, or "safest long-term bet" (fragmentation risk)
|
|
101
|
+
- **Strengths:** Most sophisticated conversational agent patterns, code generation + execution loop, async event-driven (v0.4+), cross-language interop (Microsoft Agent Framework)
|
|
102
|
+
- **Weaknesses:** Ecosystem fragmented (AutoGen maintenance mode, AG2 fork, Microsoft Agent Framework preview) — genuine long-term risk
|
|
103
|
+
- **Eval concerns:** Conversation goal completion, consensus quality, code execution correctness
|
|
104
|
+
|
|
105
|
+
### Google ADK (Agent Development Kit)
|
|
106
|
+
- **Type:** Multi-agent orchestration framework
|
|
107
|
+
- **Language:** Python + Java
|
|
108
|
+
- **Model support:** Optimized for Gemini; supports other models via LiteLLM
|
|
109
|
+
- **Learning curve:** Intermediate (agent/tool/session model, familiar if you know LangGraph)
|
|
110
|
+
- **Best for:** Google Cloud / Vertex AI shops, multi-agent workflows needing built-in session management and memory, teams already committed to Gemini, agent pipelines that need Google Search / BigQuery tool integration
|
|
111
|
+
- **Avoid if:** Model flexibility is required beyond Gemini, no Google Cloud dependency acceptable, TypeScript-only stack
|
|
112
|
+
- **Strengths:** First-party Google support, built-in session/memory/artifact management, tight Vertex AI and Google Search integration, own eval framework (RAGAS-compatible), multi-agent by design (sequential, parallel, loop patterns), Java SDK for enterprise teams
|
|
113
|
+
- **Weaknesses:** Gemini vendor lock-in in practice, younger community than LangChain/LlamaIndex, less third-party integration depth
|
|
114
|
+
- **Eval concerns:** Multi-agent task decomposition, tool use correctness, session state consistency, goal completion rate
|
|
115
|
+
|
|
116
|
+
### Haystack
|
|
117
|
+
- **Type:** NLP pipeline framework
|
|
118
|
+
- **Language:** Python
|
|
119
|
+
- **Model support:** Model-agnostic
|
|
120
|
+
- **Learning curve:** Intermediate
|
|
121
|
+
- **Best for:** Explicit, auditable NLP pipelines, document processing with fine-grained control, enterprise search, regulated industries needing transparency
|
|
122
|
+
- **Avoid if:** Rapid prototyping, multi-agent workflows, or you want a large community
|
|
123
|
+
- **Strengths:** Explicit pipeline control, strong for structured data pipelines, good documentation
|
|
124
|
+
- **Weaknesses:** Smaller community, less agent-oriented than alternatives
|
|
125
|
+
- **Eval concerns:** Extraction accuracy, pipeline output validity, retrieval quality
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Decision Dimensions
|
|
130
|
+
|
|
131
|
+
### By System Type
|
|
132
|
+
|
|
133
|
+
| System Type | Primary Framework(s) | Key Eval Concerns |
|
|
134
|
+
|-------------|---------------------|-------------------|
|
|
135
|
+
| RAG / Knowledge Q&A | LlamaIndex, LangChain | Context faithfulness, hallucination, retrieval precision/recall |
|
|
136
|
+
| Multi-agent orchestration | CrewAI, LangGraph, Google ADK | Task decomposition, handoff quality, goal completion |
|
|
137
|
+
| Conversational assistants | OpenAI Agents SDK, Claude Agent SDK | Tone, safety, instruction following, escalation |
|
|
138
|
+
| Structured data extraction | LangChain, LlamaIndex | Schema compliance, extraction accuracy |
|
|
139
|
+
| Autonomous task agents | LangGraph, OpenAI Agents SDK | Safety guardrails, tool correctness, cost adherence |
|
|
140
|
+
| Content generation | Claude Agent SDK, OpenAI Agents SDK | Brand voice, factual accuracy, tone |
|
|
141
|
+
| Code automation | Claude Agent SDK | Code correctness, safety, test pass rate |
|
|
142
|
+
|
|
143
|
+
### By Team Size and Stage
|
|
144
|
+
|
|
145
|
+
| Context | Recommendation |
|
|
146
|
+
|---------|----------------|
|
|
147
|
+
| Solo dev, prototyping | OpenAI Agents SDK or CrewAI (fastest to running) |
|
|
148
|
+
| Solo dev, RAG | LlamaIndex (batteries included) |
|
|
149
|
+
| Team, production, stateful | LangGraph (best fault tolerance) |
|
|
150
|
+
| Team, evolving requirements | LangChain (broadest escape hatches) |
|
|
151
|
+
| Team, multi-agent | CrewAI (simplest role abstraction) |
|
|
152
|
+
| Enterprise, .NET | AutoGen AG2 / Microsoft Agent Framework |
|
|
153
|
+
|
|
154
|
+
### By Model Commitment
|
|
155
|
+
|
|
156
|
+
| Preference | Framework |
|
|
157
|
+
|-----------|-----------|
|
|
158
|
+
| OpenAI-only | OpenAI Agents SDK |
|
|
159
|
+
| Anthropic/Claude-only | Claude Agent SDK |
|
|
160
|
+
| Google/Gemini-committed | Google ADK |
|
|
161
|
+
| Model-agnostic (full flexibility) | LangChain, LlamaIndex, CrewAI, LangGraph, Haystack |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Anti-Patterns
|
|
166
|
+
|
|
167
|
+
1. **Using LangChain for simple chatbots** — Direct SDK call is less code, faster, and easier to debug
|
|
168
|
+
2. **Using CrewAI for complex stateful workflows** — Checkpointing gaps will bite you in production
|
|
169
|
+
3. **Using OpenAI Agents SDK with non-OpenAI models** — Loses the integration benefits you chose it for
|
|
170
|
+
4. **Using LlamaIndex as a multi-agent framework** — It can do agents, but that's not its strength
|
|
171
|
+
5. **Defaulting to LangChain without evaluating alternatives** — "Everyone uses it" ≠ right for your use case
|
|
172
|
+
6. **Starting a new project on AutoGen (not AG2)** — AutoGen is in maintenance mode; use AG2 or wait for Microsoft Agent Framework GA
|
|
173
|
+
7. **Choosing LangGraph for simple linear flows** — The graph overhead is not worth it; use LangChain chains instead
|
|
174
|
+
8. **Ignoring vendor lock-in** — Provider-native SDKs (OpenAI, Claude) trade flexibility for integration depth; decide consciously
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Combination Plays (Multi-Framework Stacks)
|
|
179
|
+
|
|
180
|
+
| Production Pattern | Stack |
|
|
181
|
+
|-------------------|-------|
|
|
182
|
+
| RAG with observability | LlamaIndex + LangSmith or Langfuse |
|
|
183
|
+
| Stateful agent with RAG | LangGraph + LlamaIndex |
|
|
184
|
+
| Multi-agent with tracing | CrewAI + Langfuse |
|
|
185
|
+
| OpenAI agents with evals | OpenAI Agents SDK + Promptfoo or Braintrust |
|
|
186
|
+
| Claude agents with MCP | Claude Agent SDK + LangSmith or Arize Phoenix |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Architecture Decision — Two-Axis, Complexity-Matched
|
|
2
|
+
|
|
3
|
+
Reference for `/gsd:recommend-architecture`. Recommends an architecture that **matches complexity** — explicitly avoiding both over- and under-engineering. Consumes `DOMAIN-MODEL.md` (subdomain complexity). Recommends; the user decides.
|
|
4
|
+
|
|
5
|
+
## Core principle: two INDEPENDENT axes
|
|
6
|
+
|
|
7
|
+
Keep these separate — conflating them is the #1 architecture error.
|
|
8
|
+
|
|
9
|
+
- **Axis A — domain-logic organization:** Transaction Script → Domain Model → (Hexagonal/Clean wrapper) → CQRS → Event Sourcing. Driven by **domain complexity** (decide *per subdomain*, using DOMAIN-MODEL).
|
|
10
|
+
- **Axis B — deployment topology:** Modular Monolith → Microservices. Driven by **team structure + NFRs + ops maturity** — *not* by complexity.
|
|
11
|
+
|
|
12
|
+
The common sweet spot is a **Domain Model inside a modular monolith**. High scale does not imply a Domain Model; rich domain logic does not imply microservices.
|
|
13
|
+
|
|
14
|
+
## Axis A — domain logic (decide per subdomain)
|
|
15
|
+
|
|
16
|
+
Use the core subdomain's complexity from DOMAIN-MODEL. Apply per subdomain: the complex core may warrant a Domain Model (± Hexagonal); supporting/generic subdomains stay Transaction Script.
|
|
17
|
+
|
|
18
|
+
| Rung | Move up when | Over-engineering tell |
|
|
19
|
+
|------|--------------|-----------------------|
|
|
20
|
+
| **Transaction Script / simple layered CRUD** (floor) | "validate → persist → return"; few rules; supporting/generic subdomains | — |
|
|
21
|
+
| **Domain Model** | business rules multiply and tangle; the same invariant is duplicated across scripts; rich conditional behavior; long-lived core | rich aggregates wrapping what is really CRUD; anemic getter-bag "domain" objects |
|
|
22
|
+
| **Hexagonal / Clean wrapper** (orthogonal — wraps either above) | real domain logic worth isolating; multiple/swappable adapters (DB, queue, 3rd-party APIs); high testability need; long lifespan | ports/interfaces with exactly one forever-implementation; DTO-mapping boilerplate around a CRUD endpoint |
|
|
23
|
+
| **CQRS** | read and write models genuinely diverge; reads ≫ writes; write model under strain | separate read/write stacks where one model serves both fine |
|
|
24
|
+
| **Event Sourcing** | audit/temporal history is a hard requirement (finance, compliance, "reconstruct past state") | ES on a simple entity with no audit/temporal need |
|
|
25
|
+
|
|
26
|
+
## Axis B — deployment topology
|
|
27
|
+
|
|
28
|
+
- **Modular Monolith — the DEFAULT for greenfield.** One team; domain still being learned; few moving parts; fast to change. This is the recommended floor. Enforce internal module boundaries (separate schemas, dependency rules).
|
|
29
|
+
- **Microservices — only when ALL "you must be this tall" gates pass:**
|
|
30
|
+
1. **Multiple independent teams** needing independent deploy cadence (Conway / Team Topologies).
|
|
31
|
+
2. **CD / monitoring / DevOps maturity** already in place.
|
|
32
|
+
3. **Bounded contexts well-understood** already (not still being discovered).
|
|
33
|
+
If **any** is "no" → recommend **modular monolith and stop**, regardless of complexity. (The "microservice premium": below a complexity+org threshold the distributed tax is pure loss.)
|
|
34
|
+
- **Component-level split (Hard Parts):** for a specific component, score the **6 disintegrators** (low cohesion · divergent volatility · divergent scalability · fault isolation · differential security · independent extensibility) against the **4 integrators** (ACID across the data · tightly-coupled workflow · heavy shared code · tight data relationships). Net disintegrators ≫ integrators → candidate extraction; otherwise keep it in the monolith.
|
|
35
|
+
- **Distributed monolith** (services that can't deploy independently) is the failure mode — you pay the premium and get none of the autonomy. Avoid.
|
|
36
|
+
|
|
37
|
+
## Non-functional drivers (quick matrix)
|
|
38
|
+
|
|
39
|
+
| Driver | Low → | High → pushes toward |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Domain complexity | Transaction Script | Domain Model (+ Hexagonal) |
|
|
42
|
+
| Read/write asymmetry | single model | CQRS |
|
|
43
|
+
| Audit / temporal requirement | normal persistence | Event Sourcing |
|
|
44
|
+
| Scale (uniform) | monolith + replicas | still monolith — scale ≠ microservices |
|
|
45
|
+
| Scale (divergent per component) | modular monolith | extract that component (disintegrator) |
|
|
46
|
+
| Availability / fault isolation | monolith | isolate failure-prone component |
|
|
47
|
+
| Differential security | one trust boundary | separate the stricter-security component |
|
|
48
|
+
| Integration count (adapters) | direct calls | Hexagonal ports & adapters |
|
|
49
|
+
| Expected lifespan | short → keep simple (sacrificial) | long → Domain Model + Hexagonal + fitness functions |
|
|
50
|
+
| Team count / ops maturity | 1 team / low → monolith | many independent teams / high → microservices viable |
|
|
51
|
+
|
|
52
|
+
## Over- AND under-engineering
|
|
53
|
+
|
|
54
|
+
**Over-engineering tells:** one-implementation ports; rich aggregates over structural CRUD; CQRS/ES with no asymmetry or audit need; "microservice envy"; distributed monolith; elaborate config/abstraction "wanting all options all the time."
|
|
55
|
+
|
|
56
|
+
**Under-engineering tells:** the same invariant duplicated across many transaction scripts; a big-ball-of-mud monolith with no enforced module boundaries; a complex/regulated domain modeled as thin CRUD; no audit trail where compliance needs it; no ADRs / no fitness functions.
|
|
57
|
+
|
|
58
|
+
**The meta-tell (use this to settle every rung):** if you cannot point to a **current, concrete** requirement — a real second adapter, a real divergent-scaling component, a real second team, a real audit mandate — that justifies a rung, you are **over-engineering**. If such a requirement exists and you ignored it, you are **under-engineering**.
|
|
59
|
+
|
|
60
|
+
## Default baseline (when in doubt)
|
|
61
|
+
|
|
62
|
+
**Modular monolith + Domain Model only in the complex core bounded contexts + Transaction Script in the simple/CRUD ones + ADRs + boundary fitness functions.** This is the modern consensus starting point.
|
|
63
|
+
|
|
64
|
+
## Always
|
|
65
|
+
|
|
66
|
+
- Record the decision as an **ADR** — capture the *why*, the trade-offs, and the alternatives rejected (*why* matters more than *how*).
|
|
67
|
+
- Recommend **fitness functions** to enforce the chosen boundaries (e.g., "no cross-module DB access," module dependency rules) so a modular monolith doesn't rot.
|
|
68
|
+
- Frame as a **sacrificial architecture** where appropriate (a monolith you may later split is fine if it gets you to market and teaches the boundaries).
|
|
69
|
+
- **Recommend, don't dictate.** Present the trade-offs and your recommended option with rationale; the user has context you lack — let them choose.
|
|
70
|
+
|
|
71
|
+
## Consumes / produces
|
|
72
|
+
|
|
73
|
+
- **Consumes** `DOMAIN-MODEL.md` (core/supporting/generic + complexity) → Axis A per subdomain. If absent, ask the complexity questions directly (and suggest running `/gsd:model-domain` first).
|
|
74
|
+
- **Produces** `.planning/adr/NNNN-architecture.md` (the decision) + an architectural-decisions table. Feeds `testing-strategy` (test shape follows architecture) and `plan-phase`.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# GSD Artifact Types
|
|
2
|
+
|
|
3
|
+
This reference documents all artifact types in the GSD planning taxonomy. Each type has a defined
|
|
4
|
+
shape, lifecycle, location, and consumption mechanism. A well-formatted artifact that no workflow
|
|
5
|
+
reads is inert — the consumption mechanism is what gives an artifact meaning.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Core Artifacts
|
|
10
|
+
|
|
11
|
+
### ROADMAP.md
|
|
12
|
+
- **Shape**: Milestone + phase listing with goals and canonical refs
|
|
13
|
+
- **Lifecycle**: Created → Updated per milestone → Archived
|
|
14
|
+
- **Location**: `.planning/ROADMAP.md`
|
|
15
|
+
- **Consumed by**: `plan-phase`, `discuss-phase`, `execute-phase`, `progress`, `state` commands
|
|
16
|
+
|
|
17
|
+
### STATE.md
|
|
18
|
+
- **Shape**: Current position tracker (phase, plan, progress, decisions)
|
|
19
|
+
- **Lifecycle**: Continuously updated throughout the project
|
|
20
|
+
- **Location**: `.planning/STATE.md`
|
|
21
|
+
- **Consumed by**: All orchestration workflows; `resume-project`, `progress`, `next` commands
|
|
22
|
+
|
|
23
|
+
### REQUIREMENTS.md
|
|
24
|
+
- **Shape**: Numbered acceptance criteria with traceability table
|
|
25
|
+
- **Lifecycle**: Created at project start → Updated as requirements are satisfied
|
|
26
|
+
- **Location**: `.planning/REQUIREMENTS.md`
|
|
27
|
+
- **Consumed by**: `discuss-phase`, `plan-phase`, CONTEXT.md generation; executor marks complete
|
|
28
|
+
|
|
29
|
+
### CONTEXT.md (per-phase)
|
|
30
|
+
- **Shape**: 6-section format: domain, decisions, canonical_refs, code_context, specifics, deferred
|
|
31
|
+
- **Lifecycle**: Created before planning → Used during planning and execution → Superseded by next phase
|
|
32
|
+
- **Location**: `.planning/phases/XX-name/XX-CONTEXT.md`
|
|
33
|
+
- **Consumed by**: `plan-phase` (reads decisions), `execute-phase` (reads code_context and canonical_refs)
|
|
34
|
+
|
|
35
|
+
### PLAN.md (per-plan)
|
|
36
|
+
- **Shape**: Frontmatter + objective + tasks with types + success criteria + output spec
|
|
37
|
+
- **Lifecycle**: Created by planner → Executed → SUMMARY.md produced
|
|
38
|
+
- **Location**: `.planning/phases/XX-name/XX-YY-PLAN.md`
|
|
39
|
+
- **Consumed by**: `execute-phase` executor; task commits reference plan IDs
|
|
40
|
+
|
|
41
|
+
### SUMMARY.md (per-plan)
|
|
42
|
+
- **Shape**: Frontmatter with dependency graph + narrative + deviations + self-check
|
|
43
|
+
- **Lifecycle**: Created at plan completion → Read by subsequent plans in same phase
|
|
44
|
+
- **Location**: `.planning/phases/XX-name/XX-YY-SUMMARY.md`
|
|
45
|
+
- **Consumed by**: Orchestrator (progress), planner (context for future plans), `milestone-summary`
|
|
46
|
+
|
|
47
|
+
### HANDOFF.json / .continue-here.md
|
|
48
|
+
- **Shape**: Structured pause state (JSON machine-readable + Markdown human-readable)
|
|
49
|
+
- **Lifecycle**: Created on pause → Consumed on resume → Replaced by next pause
|
|
50
|
+
- **Location**: `.planning/HANDOFF.json` + `.planning/phases/XX-name/.continue-here.md` (or spike/deliberation path)
|
|
51
|
+
- **Consumed by**: `resume-project` workflow
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Extended Artifacts
|
|
56
|
+
|
|
57
|
+
### DISCUSSION-LOG.md (per-phase)
|
|
58
|
+
- **Shape**: Audit trail of assumptions and corrections from discuss-phase
|
|
59
|
+
- **Lifecycle**: Created at discussion time → Read-only audit record
|
|
60
|
+
- **Location**: `.planning/phases/XX-name/XX-DISCUSSION-LOG.md`
|
|
61
|
+
- **Consumed by**: Human review; not read by automated workflows
|
|
62
|
+
|
|
63
|
+
### USER-PROFILE.md
|
|
64
|
+
- **Shape**: Calibration tier and preferences profile
|
|
65
|
+
- **Lifecycle**: Created by `profile-user` → Updated as preferences are observed
|
|
66
|
+
- **Location**: `~/.claude/gsd-core/USER-PROFILE.md`
|
|
67
|
+
- **Consumed by**: `discuss-phase-assumptions` (calibration tier), `plan-phase`
|
|
68
|
+
|
|
69
|
+
### SPIKE.md / DESIGN.md (per-spike)
|
|
70
|
+
- **Shape**: Research question + methodology + findings + recommendation
|
|
71
|
+
- **Lifecycle**: Created → Investigated → Decided → Archived
|
|
72
|
+
- **Location**: `.planning/spikes/SPIKE-NNN/`
|
|
73
|
+
- **Consumed by**: Planner when spike is referenced; `pause-work` for spike context handoff
|
|
74
|
+
|
|
75
|
+
### Spike README.md / MANIFEST.md (per-spike, via /gsd:spike)
|
|
76
|
+
- **Shape**: YAML frontmatter (spike, name, validates, verdict, related, tags) + run instructions + results
|
|
77
|
+
- **Lifecycle**: Created by `/gsd:spike` → Verified → Wrapped up by `/gsd-spike-wrap-up`
|
|
78
|
+
- **Location**: `.planning/spikes/NNN-name/README.md`, `.planning/spikes/MANIFEST.md`
|
|
79
|
+
- **Consumed by**: `/gsd-spike-wrap-up` for curation; `pause-work` for spike context handoff
|
|
80
|
+
|
|
81
|
+
### Sketch README.md / MANIFEST.md / index.html (per-sketch)
|
|
82
|
+
- **Shape**: YAML frontmatter (sketch, name, question, winner, tags) + variants as tabbed HTML
|
|
83
|
+
- **Lifecycle**: Created by `/gsd:sketch` → Evaluated → Wrapped up by `/gsd-sketch-wrap-up`
|
|
84
|
+
- **Location**: `.planning/sketches/NNN-name/README.md`, `.planning/sketches/NNN-name/index.html`, `.planning/sketches/MANIFEST.md`
|
|
85
|
+
- **Consumed by**: `/gsd-sketch-wrap-up` for curation; `pause-work` for sketch context handoff
|
|
86
|
+
|
|
87
|
+
### WRAP-UP-SUMMARY.md (per wrap-up session)
|
|
88
|
+
- **Shape**: Curation results, included/excluded items, feature/design area groupings
|
|
89
|
+
- **Lifecycle**: Created by `/gsd-spike-wrap-up` or `/gsd-sketch-wrap-up`
|
|
90
|
+
- **Location**: `.planning/spikes/WRAP-UP-SUMMARY.md` or `.planning/sketches/WRAP-UP-SUMMARY.md`
|
|
91
|
+
- **Consumed by**: Project history; not read by automated workflows
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Standing Reference Artifacts
|
|
96
|
+
|
|
97
|
+
### METHODOLOGY.md
|
|
98
|
+
|
|
99
|
+
- **Shape**: Standing reference — reusable interpretive frameworks (lenses) that apply across phases
|
|
100
|
+
- **Lifecycle**: Created → Active → Superseded (when a lens is replaced by a better one)
|
|
101
|
+
- **Location**: `.planning/METHODOLOGY.md` (project-scoped, not phase-scoped)
|
|
102
|
+
- **Contents**: Named lenses, each documenting:
|
|
103
|
+
- What it diagnoses (the class of problem it detects)
|
|
104
|
+
- What it recommends (the class of response it prescribes)
|
|
105
|
+
- When to apply (triggering conditions)
|
|
106
|
+
- Example: Bayesian updating, STRIDE threat modeling, Cost-of-delay prioritization
|
|
107
|
+
- **Consumed by**:
|
|
108
|
+
- `discuss-phase-assumptions` — reads METHODOLOGY.md (if it exists) and applies active lenses
|
|
109
|
+
to the current assumption analysis before surfacing findings to the user
|
|
110
|
+
- `plan-phase` — reads METHODOLOGY.md to inform methodology selection for each plan
|
|
111
|
+
- `pause-work` — includes METHODOLOGY.md in the Required Reading section of `.continue-here.md`
|
|
112
|
+
so resuming agents inherit the project's analytical orientation
|
|
113
|
+
|
|
114
|
+
**Why consumption matters:** A METHODOLOGY.md that no workflow reads is inert. The lenses only
|
|
115
|
+
take effect when an agent loads them into its reasoning context before analysis. This is why
|
|
116
|
+
both the discuss-phase-assumptions and pause-work workflows explicitly reference this file.
|
|
117
|
+
|
|
118
|
+
**Example lens entry:**
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
## Bayesian Updating
|
|
122
|
+
|
|
123
|
+
**Diagnoses:** Decisions made with stale priors — assumptions formed early that evidence has since
|
|
124
|
+
contradicted, but which remain embedded in the plan.
|
|
125
|
+
|
|
126
|
+
**Recommends:** Before confirming an assumption, ask: "What evidence would make me change this?"
|
|
127
|
+
If no evidence could change it, it's a belief, not an assumption. Flag for user review.
|
|
128
|
+
|
|
129
|
+
**Apply when:** Any assumption carries Confident label but was formed before recent architectural
|
|
130
|
+
changes, library upgrades, or scope corrections.
|
|
131
|
+
```
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Authentication in Integration & E2E Tests
|
|
2
|
+
|
|
3
|
+
How-to reference for the thing AIs struggle with: auth in tests. Read this when a test needs an authenticated user. Goal: authenticate once, reuse the session, handle roles — without re-logging-in every test.
|
|
4
|
+
|
|
5
|
+
## Core rules
|
|
6
|
+
|
|
7
|
+
1. **Authenticate once, reuse the session.** Never drive the login UI in every test.
|
|
8
|
+
2. **Drive the real login UI in exactly ONE test** (prove it works); **mint the session programmatically everywhere else.**
|
|
9
|
+
3. **One account per parallel worker** to avoid collisions.
|
|
10
|
+
4. **Secrets from env/CI**, never committed; gitignore the auth-state files (`.auth/`).
|
|
11
|
+
|
|
12
|
+
## Playwright — setup project + storageState (canonical)
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
// auth.setup.ts — runs once, persists the authenticated state
|
|
16
|
+
import { test as setup } from '@playwright/test';
|
|
17
|
+
const authFile = 'playwright/.auth/user.json';
|
|
18
|
+
setup('authenticate', async ({ request }) => {
|
|
19
|
+
await request.post('/api/login', { form: { user: process.env.E2E_USER!, password: process.env.E2E_PASS! } });
|
|
20
|
+
await request.storageState({ path: authFile }); // saves cookies + origin localStorage
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
```ts
|
|
24
|
+
// playwright.config.ts
|
|
25
|
+
projects: [
|
|
26
|
+
{ name: 'setup', testMatch: /.*\.setup\.ts/ },
|
|
27
|
+
{ name: 'chromium', use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/user.json' }, dependencies: ['setup'] },
|
|
28
|
+
]
|
|
29
|
+
```
|
|
30
|
+
Opt a test OUT of auth (e.g. the login-page test): `test.use({ storageState: { cookies: [], origins: [] } })`.
|
|
31
|
+
|
|
32
|
+
## Cypress — cy.session
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
Cypress.Commands.add('login', (username, password) => {
|
|
36
|
+
cy.session([username, password], () => { // array id keys the cache per credential/role
|
|
37
|
+
cy.request('POST', '/api/login', { username, password })
|
|
38
|
+
.then(({ body }) => window.localStorage.setItem('authToken', body.token));
|
|
39
|
+
}, { validate() { cy.request('/api/whoami').its('status').should('eq', 200); }, // re-login when stale
|
|
40
|
+
cacheAcrossSpecs: true }); // log in once for the whole run
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Multi-role (RBAC) — one storageState per role
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
for (const role of ['admin', 'user']) {
|
|
48
|
+
setup(`auth ${role}`, async ({ request }) => {
|
|
49
|
+
await request.post('/api/login', { data: creds(role) });
|
|
50
|
+
await request.storageState({ path: `playwright/.auth/${role}.json` });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// pick a role per test: test.use({ storageState: 'playwright/.auth/admin.json' })
|
|
54
|
+
// cross-role in ONE test: open two browser contexts, one per role file
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## JWT vs cookie/session (different injection)
|
|
58
|
+
|
|
59
|
+
| | JWT / Bearer | Cookie / session |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| **API test** | `request.newContext({ extraHTTPHeaders: { Authorization: 'Bearer '+t } })` | cookie jar / `Cookie` header |
|
|
62
|
+
| **Browser test** | seed `localStorage` via `addInitScript` / storageState | `context.addCookies()` / storageState |
|
|
63
|
+
| **CSRF** | bearer-in-header is CSRF-immune | forward a CSRF token in a custom header on mutating requests |
|
|
64
|
+
|
|
65
|
+
## Parallel-safe accounts (one per worker)
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
const id = test.info().parallelIndex; // 0..workers-1
|
|
69
|
+
const file = `playwright/.auth/${id}.json`; // reuse within the worker
|
|
70
|
+
// acquireAccount(id) returns a pre-seeded account from a pool sized >= worker count
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Managed providers
|
|
74
|
+
|
|
75
|
+
- **Clerk:** `clerk.signIn()` (server-side, bypasses MFA), `+clerk_test` emails, Testing Tokens for bot-detection bypass.
|
|
76
|
+
- **Supabase:** `POST /auth/v1/token?grant_type=password`; inject the session into `localStorage` key `sb-<projectRef>-auth-token` (supabase-js v2; v1 used `supabase.auth.token` — detect at runtime).
|
|
77
|
+
- **Auth.js / NextAuth:** a dev-only Credentials provider, or self-hosted Keycloak.
|
|
78
|
+
|
|
79
|
+
## Mock vs real IdP
|
|
80
|
+
|
|
81
|
+
- **Unit/integration:** mocking a 3rd-party IdP you can't seed (Auth0/Okta) is OK — but keep one real-token test (mocks skip signature validation).
|
|
82
|
+
- **E2E:** use a real test instance (provider dev tenant, Firebase Auth emulator, self-hosted Keycloak/FusionAuth).
|
|
83
|
+
- **MFA:** authenticate once and persist the session (sessions don't re-trigger MFA); generate the TOTP in setup, or `codegen --save-storage` once.
|
|
84
|
+
|
|
85
|
+
## Anti-patterns
|
|
86
|
+
|
|
87
|
+
- Logging in through the UI in every test (slow, flaky).
|
|
88
|
+
- Sharing one account across parallel workers (collisions).
|
|
89
|
+
- Committing tokens / auth-state files (gitignore `.auth/`).
|
|
90
|
+
|
|
91
|
+
*Sources: Playwright & Cypress official auth docs; Clerk/Supabase/Auth.js testing guides; OWASP CSRF. Caveats: (1) `request.storageState()` **does** capture cookies including HttpOnly — but localStorage is only captured from a real browser context/page; an API-only context has no localStorage, so a token your client JS stores in localStorage won't be in it. (2) storageState is a point-in-time session — if tokens expire during a long run, regenerate it in the setup project rather than reusing a stale file (Cypress's `validate()` handles staleness; Playwright does not, so re-run setup). Always verify the saved state actually authenticates before trusting it.*
|