specweave 0.1.9 → 0.3.1
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.md +600 -0
- package/README.md +263 -81
- package/bin/install-all.sh +1 -1
- package/bin/install-commands.sh +3 -3
- package/bin/specweave.js +39 -9
- package/dist/adapters/adapter-base.d.ts +1 -1
- package/dist/adapters/adapter-base.d.ts.map +1 -1
- package/dist/adapters/adapter-base.js +6 -41
- package/dist/adapters/adapter-base.js.map +1 -1
- package/dist/adapters/adapter-interface.js +1 -2
- package/dist/adapters/adapter-interface.js.map +1 -1
- package/dist/adapters/adapter-loader.d.ts +86 -0
- package/dist/adapters/adapter-loader.d.ts.map +1 -0
- package/dist/adapters/adapter-loader.js +216 -0
- package/dist/adapters/adapter-loader.js.map +1 -0
- package/dist/adapters/agents-md-generator.d.ts +48 -0
- package/dist/adapters/agents-md-generator.d.ts.map +1 -0
- package/dist/adapters/agents-md-generator.js +132 -0
- package/dist/adapters/agents-md-generator.js.map +1 -0
- package/dist/adapters/claude/adapter.d.ts +2 -2
- package/dist/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.js +5 -42
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/adapters/claude-md-generator.d.ts +78 -0
- package/dist/adapters/claude-md-generator.d.ts.map +1 -0
- package/dist/adapters/claude-md-generator.js +246 -0
- package/dist/adapters/claude-md-generator.js.map +1 -0
- package/dist/adapters/codex/adapter.d.ts +50 -0
- package/dist/adapters/codex/adapter.d.ts.map +1 -0
- package/dist/adapters/codex/adapter.js +316 -0
- package/dist/adapters/codex/adapter.js.map +1 -0
- package/dist/adapters/copilot/adapter.d.ts +10 -9
- package/dist/adapters/copilot/adapter.d.ts.map +1 -1
- package/dist/adapters/copilot/adapter.js +35 -100
- package/dist/adapters/copilot/adapter.js.map +1 -1
- package/dist/adapters/cursor/adapter.d.ts +8 -6
- package/dist/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/adapters/cursor/adapter.js +47 -130
- package/dist/adapters/cursor/adapter.js.map +1 -1
- package/dist/adapters/doc-generator.d.ts +69 -0
- package/dist/adapters/doc-generator.d.ts.map +1 -0
- package/dist/adapters/doc-generator.js +247 -0
- package/dist/adapters/doc-generator.js.map +1 -0
- package/dist/adapters/gemini/adapter.d.ts +50 -0
- package/dist/adapters/gemini/adapter.d.ts.map +1 -0
- package/dist/adapters/gemini/adapter.js +281 -0
- package/dist/adapters/gemini/adapter.js.map +1 -0
- package/dist/adapters/generic/adapter.d.ts +7 -4
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +60 -59
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts +3 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +327 -177
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +22 -58
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +27 -64
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/core/credentials-manager.d.ts +90 -0
- package/dist/core/credentials-manager.d.ts.map +1 -0
- package/dist/core/credentials-manager.js +271 -0
- package/dist/core/credentials-manager.js.map +1 -0
- package/dist/core/project-structure-detector.d.ts +92 -0
- package/dist/core/project-structure-detector.d.ts.map +1 -0
- package/dist/core/project-structure-detector.js +289 -0
- package/dist/core/project-structure-detector.js.map +1 -0
- package/dist/core/rfc-generator-v2.d.ts +149 -0
- package/dist/core/rfc-generator-v2.d.ts.map +1 -0
- package/dist/core/rfc-generator-v2.js +399 -0
- package/dist/core/rfc-generator-v2.js.map +1 -0
- package/dist/core/rfc-generator.d.ts +147 -0
- package/dist/core/rfc-generator.d.ts.map +1 -0
- package/dist/core/rfc-generator.js +434 -0
- package/dist/core/rfc-generator.js.map +1 -0
- package/dist/integrations/ado/ado-client.d.ts +123 -0
- package/dist/integrations/ado/ado-client.d.ts.map +1 -0
- package/dist/integrations/ado/ado-client.js +398 -0
- package/dist/integrations/ado/ado-client.js.map +1 -0
- package/dist/integrations/jira/jira-client.d.ts +139 -0
- package/dist/integrations/jira/jira-client.d.ts.map +1 -0
- package/dist/integrations/jira/jira-client.js +386 -0
- package/dist/integrations/jira/jira-client.js.map +1 -0
- package/dist/integrations/jira/jira-incremental-mapper.d.ts +75 -0
- package/dist/integrations/jira/jira-incremental-mapper.d.ts.map +1 -0
- package/dist/integrations/jira/jira-incremental-mapper.js +474 -0
- package/dist/integrations/jira/jira-incremental-mapper.js.map +1 -0
- package/dist/integrations/jira/jira-mapper.d.ts +105 -0
- package/dist/integrations/jira/jira-mapper.d.ts.map +1 -0
- package/dist/integrations/jira/jira-mapper.js +494 -0
- package/dist/integrations/jira/jira-mapper.js.map +1 -0
- package/dist/testing/test-generator.d.ts +117 -0
- package/dist/testing/test-generator.d.ts.map +1 -0
- package/dist/testing/test-generator.js +370 -0
- package/dist/testing/test-generator.js.map +1 -0
- package/dist/utils/auto-install.d.ts +3 -0
- package/dist/utils/auto-install.d.ts.map +1 -1
- package/dist/utils/auto-install.js +16 -82
- package/dist/utils/auto-install.js.map +1 -1
- package/dist/utils/esm-helpers.d.ts +50 -0
- package/dist/utils/esm-helpers.d.ts.map +1 -0
- package/dist/utils/esm-helpers.js +57 -0
- package/dist/utils/esm-helpers.js.map +1 -0
- package/package.json +16 -7
- package/src/adapters/README.md +1 -2
- package/src/adapters/adapter-base.ts +6 -3
- package/src/adapters/adapter-loader.ts +261 -0
- package/src/adapters/agents-md-generator.ts +162 -0
- package/src/adapters/claude/README.md +6 -14
- package/src/adapters/claude/adapter.ts +4 -4
- package/src/adapters/claude-md-generator.ts +311 -0
- package/src/adapters/codex/README.md +105 -0
- package/src/adapters/codex/adapter.ts +333 -0
- package/src/adapters/copilot/adapter.ts +36 -65
- package/src/adapters/cursor/README.md +0 -2
- package/src/adapters/cursor/adapter.ts +46 -92
- package/src/adapters/doc-generator.ts +331 -0
- package/src/adapters/gemini/README.md +97 -0
- package/src/adapters/gemini/adapter.ts +298 -0
- package/src/adapters/generic/adapter.ts +61 -57
- package/src/adapters/registry.yaml +86 -25
- package/src/agents/devops/AGENT.md +16 -18
- package/src/agents/docs-writer/AGENT.md +2 -2
- package/src/agents/pm/AGENT.md +1 -50
- package/src/commands/README.md +134 -111
- package/src/commands/{build.md → specweave.do.md} +141 -69
- package/src/commands/{done.md → specweave.done.md} +3 -3
- package/src/commands/{inc.md → specweave.inc.md} +4 -4
- package/src/commands/{increment.md → specweave.increment.md} +143 -76
- package/src/commands/specweave.md +430 -0
- package/src/commands/specweave.next.md +495 -0
- package/src/commands/{progress.md → specweave.progress.md} +12 -12
- package/src/commands/specweave.sync-docs.md +665 -0
- package/src/commands/specweave.sync-github.md +269 -0
- package/src/commands/specweave.sync-jira.md +197 -0
- package/src/commands/{validate.md → specweave.validate.md} +4 -4
- package/src/hooks/README.md +19 -29
- package/src/hooks/post-task-completion.sh +25 -30
- package/src/skills/ado-sync/README.md +1 -36
- package/src/skills/bmad-method-expert/SKILL.md +1 -3
- package/src/skills/brownfield-analyzer/SKILL.md +429 -23
- package/src/skills/brownfield-onboarder/SKILL.md +221 -8
- package/src/skills/context-loader/SKILL.md +239 -617
- package/src/skills/context-optimizer/SKILL.md +0 -30
- package/src/skills/github-sync/SKILL.md +1 -19
- package/src/skills/increment-planner/SKILL.md +64 -18
- package/src/skills/increment-quality-judge/SKILL.md +1 -36
- package/src/skills/jira-sync/README.md +1 -38
- package/src/skills/role-orchestrator/README.md +1 -22
- package/src/skills/role-orchestrator/SKILL.md +1 -59
- package/src/skills/skill-router/SKILL.md +0 -18
- package/src/skills/spec-kit-expert/SKILL.md +1 -3
- package/src/skills/specweave-detector/SKILL.md +225 -275
- package/src/skills/task-builder/README.md +1 -7
- package/src/templates/AGENTS.md.template +334 -0
- package/src/templates/CLAUDE.md.template +131 -298
- package/src/templates/README.md.template +115 -23
- package/src/templates/environments/minimal/README.md +0 -1
- package/INSTALL.md +0 -848
- package/SPECWEAVE.md +0 -743
- package/src/adapters/copilot/.github/copilot/instructions.md +0 -376
- package/src/adapters/cursor/.cursorrules +0 -325
- package/src/adapters/generic/SPECWEAVE-MANUAL.md +0 -676
- package/src/commands/create-project.md +0 -528
- package/src/commands/generate-docs.md +0 -623
- package/src/commands/review-docs.md +0 -331
- package/src/commands/sync-github.md +0 -115
- package/src/skills/ado-sync/test-cases/test-1.yaml +0 -9
- package/src/skills/ado-sync/test-cases/test-2.yaml +0 -8
- package/src/skills/ado-sync/test-cases/test-3.yaml +0 -9
- package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +0 -48
- package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +0 -39
- package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +0 -44
- package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +0 -45
- package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +0 -97
- package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +0 -109
- package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +0 -98
- package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +0 -75
- package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +0 -52
- package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +0 -63
- package/src/skills/cost-optimizer/test-results/README.md +0 -46
- package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +0 -23
- package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +0 -24
- package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +0 -23
- package/src/skills/diagrams-architect/test-cases/test-1-c4-context.yaml +0 -13
- package/src/skills/diagrams-architect/test-cases/test-2-sequence-diagram.yaml +0 -13
- package/src/skills/diagrams-architect/test-cases/test-3-er-diagram.yaml +0 -13
- package/src/skills/diagrams-generator/test-cases/test-1.yaml +0 -9
- package/src/skills/diagrams-generator/test-cases/test-2.yaml +0 -9
- package/src/skills/diagrams-generator/test-cases/test-3.yaml +0 -8
- package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/dotnet-backend/test-cases/test-1-rest-api.yaml +0 -14
- package/src/skills/dotnet-backend/test-cases/test-2-authentication.yaml +0 -13
- package/src/skills/dotnet-backend/test-cases/test-3-minimal-api.yaml +0 -13
- package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +0 -54
- package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +0 -64
- package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +0 -74
- package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +0 -98
- package/src/skills/figma-designer/test-cases/test-1-design-system.yaml +0 -13
- package/src/skills/figma-designer/test-cases/test-2-component-library.yaml +0 -13
- package/src/skills/figma-designer/test-cases/test-3-responsive-layout.yaml +0 -13
- package/src/skills/figma-implementer/test-cases/test-1-design-to-react.yaml +0 -13
- package/src/skills/figma-implementer/test-cases/test-2-storybook.yaml +0 -13
- package/src/skills/figma-implementer/test-cases/test-3-design-tokens.yaml +0 -13
- package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +0 -22
- package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +0 -21
- package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +0 -18
- package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +0 -29
- package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +0 -27
- package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +0 -28
- package/src/skills/frontend/test-cases/test-1-react-component.yaml +0 -13
- package/src/skills/frontend/test-cases/test-2-form-validation.yaml +0 -13
- package/src/skills/frontend/test-cases/test-3-state-management.yaml +0 -13
- package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +0 -71
- package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +0 -85
- package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +0 -126
- package/src/skills/hetzner-provisioner/test-results/README.md +0 -259
- package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +0 -27
- package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +0 -30
- package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +0 -24
- package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +0 -95
- package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +0 -108
- package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +0 -87
- package/src/skills/jira-sync/test-cases/test-1.yaml +0 -9
- package/src/skills/jira-sync/test-cases/test-2.yaml +0 -9
- package/src/skills/jira-sync/test-cases/test-3.yaml +0 -10
- package/src/skills/nextjs/test-cases/test-1-app-router.yaml +0 -13
- package/src/skills/nextjs/test-cases/test-2-server-actions.yaml +0 -13
- package/src/skills/nextjs/test-cases/test-3-api-routes.yaml +0 -13
- package/src/skills/nodejs-backend/test-cases/test-1-express-api.yaml +0 -13
- package/src/skills/nodejs-backend/test-cases/test-2-prisma-orm.yaml +0 -13
- package/src/skills/nodejs-backend/test-cases/test-3-authentication.yaml +0 -13
- package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/python-backend/test-cases/test-1-fastapi-crud.yaml +0 -13
- package/src/skills/python-backend/test-cases/test-2-sqlalchemy.yaml +0 -13
- package/src/skills/python-backend/test-cases/test-3-authentication.yaml +0 -13
- package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +0 -98
- package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +0 -73
- package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +0 -121
- package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +0 -145
- package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +0 -149
- package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +0 -33
- package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +0 -42
- package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +0 -50
- package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +0 -148
- package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +0 -190
- package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +0 -233
- package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +0 -212
- package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +0 -461
- package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +0 -366
- package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/specweave-ado-mapper/test-cases/test-1-export-to-ado.yaml +0 -13
- package/src/skills/specweave-ado-mapper/test-cases/test-2-import-from-ado.yaml +0 -13
- package/src/skills/specweave-ado-mapper/test-cases/test-3-bidirectional-sync.yaml +0 -13
- package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +0 -37
- package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +0 -37
- package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +0 -34
- package/src/skills/specweave-jira-mapper/test-cases/test-1-export-to-jira.yaml +0 -13
- package/src/skills/specweave-jira-mapper/test-cases/test-2-import-from-jira.yaml +0 -13
- package/src/skills/specweave-jira-mapper/test-cases/test-3-sync-status.yaml +0 -13
- package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +0 -12
- package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +0 -12
- package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +0 -12
- package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +0 -12
- package/src/templates/config.yaml +0 -351
- /package/src/commands/{list-increments.md → specweave.list-increments.md} +0 -0
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Brownfield Bug with Missing Spec"
|
|
3
|
-
description: "Debug legacy code with no documentation, requiring retroactive spec creation before fixing"
|
|
4
|
-
skill: spec-driven-debugging
|
|
5
|
-
priority: P2
|
|
6
|
-
estimated_time: "30-40 minutes"
|
|
7
|
-
|
|
8
|
-
input:
|
|
9
|
-
prompt: "Payment webhook is randomly failing with 'Invalid signature' error for some Stripe events"
|
|
10
|
-
context:
|
|
11
|
-
project_type: "Node.js + Express (brownfield, 2 years old)"
|
|
12
|
-
increment: null # No increment exists for this code
|
|
13
|
-
documentation: null # No spec.md or plan.md
|
|
14
|
-
files_exist:
|
|
15
|
-
- "src/webhooks/stripe.ts" # legacy code, no comments
|
|
16
|
-
- "src/services/payment-processor.ts"
|
|
17
|
-
error_pattern: "Intermittent - fails for ~20% of webhook events"
|
|
18
|
-
reproduction: "Inconsistent - seems related to event type"
|
|
19
|
-
legacy_context: "Original developer left, no documentation"
|
|
20
|
-
|
|
21
|
-
expected_output:
|
|
22
|
-
phase_0_context_loading:
|
|
23
|
-
announcement: "This is brownfield code with no SpecWeave increment. I'll need to create retroactive documentation before debugging."
|
|
24
|
-
|
|
25
|
-
increment_search:
|
|
26
|
-
search_result: "No increment found for src/webhooks/stripe.ts"
|
|
27
|
-
strategy_docs: "No strategy docs for payment/webhooks"
|
|
28
|
-
architecture_docs: "No ADRs for webhook processing"
|
|
29
|
-
|
|
30
|
-
bug_classification: "Missing spec - undocumented legacy code"
|
|
31
|
-
|
|
32
|
-
retroactive_spec_needed: true
|
|
33
|
-
reason: "Cannot debug without understanding intended behavior"
|
|
34
|
-
|
|
35
|
-
approach: |
|
|
36
|
-
1. Analyze code to understand CURRENT behavior (as-is)
|
|
37
|
-
2. Create retroactive spec documenting intended behavior
|
|
38
|
-
3. THEN debug the discrepancy between spec and actual behavior
|
|
39
|
-
|
|
40
|
-
phase_1_root_cause:
|
|
41
|
-
step_1_understand_current_code:
|
|
42
|
-
file_analyzed: "src/webhooks/stripe.ts"
|
|
43
|
-
code_structure:
|
|
44
|
-
- "POST /webhooks/stripe endpoint"
|
|
45
|
-
- "Validates Stripe signature using stripe.webhooks.constructEvent()"
|
|
46
|
-
- "Routes different event types to handlers"
|
|
47
|
-
- "Event types: payment_intent.succeeded, charge.failed, customer.subscription.updated"
|
|
48
|
-
|
|
49
|
-
observations:
|
|
50
|
-
- "No comments or documentation"
|
|
51
|
-
- "Signature validation uses Stripe SDK method"
|
|
52
|
-
- "Different event types handled differently"
|
|
53
|
-
- "Some events logged, others not"
|
|
54
|
-
- "No tests found in codebase"
|
|
55
|
-
|
|
56
|
-
step_2_gather_business_context:
|
|
57
|
-
questions_to_ask_user:
|
|
58
|
-
- "What SHOULD happen when a payment webhook is received?"
|
|
59
|
-
- "Which event types are critical vs informational?"
|
|
60
|
-
- "What's the acceptable failure rate?"
|
|
61
|
-
|
|
62
|
-
user_answers:
|
|
63
|
-
- "All webhook events should be processed successfully"
|
|
64
|
-
- "payment_intent.succeeded is critical (confirms payment)"
|
|
65
|
-
- "charge.failed is critical (notifies user of failure)"
|
|
66
|
-
- "customer.subscription.updated is informational only"
|
|
67
|
-
- "Failure rate should be 0% (currently 20% failing)"
|
|
68
|
-
|
|
69
|
-
step_3_create_retroactive_spec:
|
|
70
|
-
action: "Create .specweave/increments/0012-webhook-processing/ with retroactive spec"
|
|
71
|
-
file: ".specweave/increments/0012-webhook-processing/spec.md"
|
|
72
|
-
content: |
|
|
73
|
-
# Webhook Processing (Retroactive Spec)
|
|
74
|
-
|
|
75
|
-
## Purpose
|
|
76
|
-
Process Stripe webhook events to confirm payments and update order status.
|
|
77
|
-
|
|
78
|
-
## Functional Requirements
|
|
79
|
-
|
|
80
|
-
### FR-001: Signature Validation
|
|
81
|
-
All webhook events MUST validate Stripe signature to prevent spoofing.
|
|
82
|
-
- Use Stripe SDK: stripe.webhooks.constructEvent()
|
|
83
|
-
- Signature header: stripe-signature
|
|
84
|
-
- Webhook secret: STRIPE_WEBHOOK_SECRET env var
|
|
85
|
-
|
|
86
|
-
### FR-002: Event Type Handling
|
|
87
|
-
System MUST handle these event types:
|
|
88
|
-
- payment_intent.succeeded → Mark order as paid
|
|
89
|
-
- charge.failed → Notify customer of payment failure
|
|
90
|
-
- customer.subscription.updated → Update subscription status
|
|
91
|
-
|
|
92
|
-
### FR-003: Idempotency
|
|
93
|
-
Webhooks MAY be delivered multiple times (Stripe guarantee: at-least-once).
|
|
94
|
-
System MUST handle duplicate events gracefully (idempotency).
|
|
95
|
-
|
|
96
|
-
## Non-Functional Requirements
|
|
97
|
-
|
|
98
|
-
### NFR-001: Reliability
|
|
99
|
-
Success rate MUST be >99.9% (currently failing: need to fix)
|
|
100
|
-
|
|
101
|
-
### NFR-002: Response Time
|
|
102
|
-
Webhook endpoint MUST respond within 5 seconds (Stripe timeout)
|
|
103
|
-
|
|
104
|
-
## Acceptance Criteria
|
|
105
|
-
- TC-001: Valid webhook with correct signature → 200 OK
|
|
106
|
-
- TC-002: Invalid signature → 400 Bad Request
|
|
107
|
-
- TC-003: Duplicate event → Processed once, returns 200 OK
|
|
108
|
-
- TC-004: All critical event types processed correctly
|
|
109
|
-
|
|
110
|
-
retroactive_spec_created: true
|
|
111
|
-
|
|
112
|
-
step_4_now_debug_with_spec:
|
|
113
|
-
error_analysis:
|
|
114
|
-
message: "Invalid signature"
|
|
115
|
-
frequency: "20% of events"
|
|
116
|
-
pattern_observed: "Fails for customer.subscription.updated events mostly"
|
|
117
|
-
|
|
118
|
-
reproduction:
|
|
119
|
-
approach: "Examine Stripe webhook logs for failed events"
|
|
120
|
-
findings:
|
|
121
|
-
- "Failed events all have event type: customer.subscription.*"
|
|
122
|
-
- "Successful events are payment_intent.* and charge.*"
|
|
123
|
-
- "Signature validation fails BEFORE event type check"
|
|
124
|
-
|
|
125
|
-
spec_comparison:
|
|
126
|
-
spec_says: "FR-001: All events must validate signature using stripe.webhooks.constructEvent()"
|
|
127
|
-
actual_behavior: "customer.subscription.* events fail signature validation"
|
|
128
|
-
discrepancy: "Signature validation works for some events, not others"
|
|
129
|
-
|
|
130
|
-
data_flow_trace:
|
|
131
|
-
step_1: "Stripe sends POST to /webhooks/stripe"
|
|
132
|
-
step_2: "Express receives raw body"
|
|
133
|
-
step_3: "Code calls stripe.webhooks.constructEvent(body, signature, secret)"
|
|
134
|
-
step_4_success: "payment_intent.* events → signature valid ✓"
|
|
135
|
-
step_4_failure: "customer.subscription.* events → signature invalid ✗"
|
|
136
|
-
|
|
137
|
-
hypothesis_forming: "Something different about how subscription events are sent or received"
|
|
138
|
-
|
|
139
|
-
phase_2_pattern_analysis:
|
|
140
|
-
working_examples:
|
|
141
|
-
event_type: "payment_intent.succeeded"
|
|
142
|
-
body_format: "Raw JSON string"
|
|
143
|
-
content_type: "application/json"
|
|
144
|
-
signature_valid: true
|
|
145
|
-
|
|
146
|
-
broken_examples:
|
|
147
|
-
event_type: "customer.subscription.updated"
|
|
148
|
-
body_format: "Parsed JSON object (not raw string!)"
|
|
149
|
-
content_type: "application/json"
|
|
150
|
-
signature_valid: false
|
|
151
|
-
|
|
152
|
-
difference_identified:
|
|
153
|
-
issue: "Body parsing middleware is parsing SOME events but not others"
|
|
154
|
-
root_cause: "Express body parser middleware conditionally parsing based on Content-Type or event size"
|
|
155
|
-
|
|
156
|
-
code_inspection:
|
|
157
|
-
file: "src/server.ts"
|
|
158
|
-
middleware_config: |
|
|
159
|
-
app.use(express.json()); // Parses all JSON bodies
|
|
160
|
-
app.post('/webhooks/stripe', stripeWebhookHandler);
|
|
161
|
-
|
|
162
|
-
problem: |
|
|
163
|
-
Stripe signature validation requires RAW body (Buffer), not parsed JSON.
|
|
164
|
-
Express middleware is parsing body BEFORE webhook handler,
|
|
165
|
-
making signature validation impossible.
|
|
166
|
-
|
|
167
|
-
But why does it work for payment_intent.* events?
|
|
168
|
-
Hypothesis: Those events are smaller, parsed differently by Express?
|
|
169
|
-
|
|
170
|
-
investigation_deeper:
|
|
171
|
-
finding: |
|
|
172
|
-
Express json() middleware has a "verify" option that can be used
|
|
173
|
-
to access raw body before parsing. Current code doesn't use this.
|
|
174
|
-
|
|
175
|
-
Stripe documentation says: "You must pass the raw request body"
|
|
176
|
-
Current code passes parsed body → signature always fails
|
|
177
|
-
BUT: Why do some events succeed?
|
|
178
|
-
|
|
179
|
-
aha_moment: |
|
|
180
|
-
Checked Express middleware order:
|
|
181
|
-
1. app.use(express.json()) - parses ALL bodies
|
|
182
|
-
2. app.use('/api', apiRoutes) - other routes
|
|
183
|
-
3. app.post('/webhooks/stripe', stripeWebhookHandler) - webhook
|
|
184
|
-
|
|
185
|
-
Wait... there's ANOTHER middleware defined ABOVE:
|
|
186
|
-
app.use(express.raw({ type: 'application/json', limit: '5mb' }))
|
|
187
|
-
|
|
188
|
-
This raw middleware runs FIRST, but only for bodies <5mb.
|
|
189
|
-
Subscription events are >5mb (include full customer object),
|
|
190
|
-
so they get parsed by json() middleware instead!
|
|
191
|
-
|
|
192
|
-
phase_3_hypothesis:
|
|
193
|
-
hypothesis: "Express middleware parsing bodies >5mb as JSON instead of keeping raw Buffer, breaking Stripe signature validation"
|
|
194
|
-
|
|
195
|
-
classification: "Code bug + Config bug - middleware misconfiguration"
|
|
196
|
-
|
|
197
|
-
minimal_test:
|
|
198
|
-
approach: "Send test webhook with >5mb payload"
|
|
199
|
-
result: "Signature validation fails for large events, succeeds for small events"
|
|
200
|
-
confirmed: true
|
|
201
|
-
|
|
202
|
-
phase_4_implementation:
|
|
203
|
-
fix_level: "Code-level fix (middleware configuration)"
|
|
204
|
-
|
|
205
|
-
retroactive_spec_update:
|
|
206
|
-
file: ".specweave/increments/0012-webhook-processing/spec.md"
|
|
207
|
-
addition: |
|
|
208
|
-
### FR-004: Raw Body Requirement
|
|
209
|
-
Webhook endpoint MUST receive raw request body (Buffer) for signature validation.
|
|
210
|
-
Middleware MUST NOT parse body before signature validation.
|
|
211
|
-
|
|
212
|
-
test_creation:
|
|
213
|
-
level: "Level 3: Code Tests (Integration)"
|
|
214
|
-
file: "tests/integration/webhooks.test.ts"
|
|
215
|
-
test_case: |
|
|
216
|
-
describe('Stripe Webhooks', () => {
|
|
217
|
-
it('should validate signature for small events (<5mb)', async () => {
|
|
218
|
-
const event = createTestEvent('payment_intent.succeeded', { size: '1kb' });
|
|
219
|
-
const signature = generateStripeSignature(event);
|
|
220
|
-
|
|
221
|
-
const response = await request(app)
|
|
222
|
-
.post('/webhooks/stripe')
|
|
223
|
-
.set('stripe-signature', signature)
|
|
224
|
-
.send(event);
|
|
225
|
-
|
|
226
|
-
expect(response.status).toBe(200);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it('should validate signature for large events (>5mb)', async () => {
|
|
230
|
-
const event = createTestEvent('customer.subscription.updated', { size: '6mb' });
|
|
231
|
-
const signature = generateStripeSignature(event);
|
|
232
|
-
|
|
233
|
-
const response = await request(app)
|
|
234
|
-
.post('/webhooks/stripe')
|
|
235
|
-
.set('stripe-signature', signature)
|
|
236
|
-
.send(event);
|
|
237
|
-
|
|
238
|
-
expect(response.status).toBe(200); // Currently fails
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
test_fails_before_fix: true
|
|
243
|
-
|
|
244
|
-
code_fix:
|
|
245
|
-
file: "src/server.ts"
|
|
246
|
-
before: |
|
|
247
|
-
app.use(express.raw({ type: 'application/json', limit: '5mb' })); // Only for small bodies
|
|
248
|
-
app.use(express.json()); // Parses large bodies as JSON
|
|
249
|
-
app.post('/webhooks/stripe', stripeWebhookHandler);
|
|
250
|
-
|
|
251
|
-
after: |
|
|
252
|
-
// Webhook route FIRST (before body parsing middleware)
|
|
253
|
-
app.post('/webhooks/stripe',
|
|
254
|
-
express.raw({ type: 'application/json', limit: '10mb' }), // Raw body for webhooks
|
|
255
|
-
stripeWebhookHandler
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
// Body parsing for other routes
|
|
259
|
-
app.use(express.json());
|
|
260
|
-
|
|
261
|
-
verification:
|
|
262
|
-
test_passes: true
|
|
263
|
-
production_test: "Sent test webhook with 6mb payload → signature valid ✓"
|
|
264
|
-
spec_aligned: true
|
|
265
|
-
failure_rate: "0% (was 20%)"
|
|
266
|
-
|
|
267
|
-
attempts_count: 1 # fixed after understanding the retroactive spec
|
|
268
|
-
ultrathink_needed: false # straightforward once spec was created
|
|
269
|
-
|
|
270
|
-
phase_5_documentation:
|
|
271
|
-
increment_updates:
|
|
272
|
-
- file: ".specweave/increments/0012-webhook-processing/spec.md"
|
|
273
|
-
change: "Created retroactive spec + added FR-004 for raw body requirement"
|
|
274
|
-
|
|
275
|
-
- file: ".specweave/increments/0012-webhook-processing/plan.md"
|
|
276
|
-
change: "Documented middleware configuration approach"
|
|
277
|
-
|
|
278
|
-
- file: ".specweave/increments/0012-webhook-processing/tests.md"
|
|
279
|
-
change: "Added TC-005 and TC-006 for signature validation with different payload sizes"
|
|
280
|
-
|
|
281
|
-
architecture_updates:
|
|
282
|
-
- file: ".specweave/docs/internal/architecture/adr/0013-webhook-middleware-order.md"
|
|
283
|
-
content: |
|
|
284
|
-
# ADR-0013: Webhook Endpoints Must Bypass Body Parsing
|
|
285
|
-
|
|
286
|
-
## Context
|
|
287
|
-
Express body parsing middleware (json()) parses request bodies,
|
|
288
|
-
but Stripe signature validation requires raw Buffer.
|
|
289
|
-
|
|
290
|
-
## Decision
|
|
291
|
-
Webhook routes defined BEFORE global body parsing middleware,
|
|
292
|
-
with route-specific express.raw() middleware.
|
|
293
|
-
|
|
294
|
-
## Consequences
|
|
295
|
-
- Webhooks receive raw body for signature validation
|
|
296
|
-
- Other routes still get parsed JSON bodies
|
|
297
|
-
- Must remember this pattern for future webhook integrations
|
|
298
|
-
|
|
299
|
-
strategy_updates:
|
|
300
|
-
- file: ".specweave/docs/internal/strategy/payments/webhooks.md"
|
|
301
|
-
change: "Created strategy doc for payment webhook processing (retroactive)"
|
|
302
|
-
|
|
303
|
-
new_increment_needed: false # retroactive spec created, no new increment
|
|
304
|
-
|
|
305
|
-
commit_message: |
|
|
306
|
-
fix(webhooks): support large Stripe webhook events (>5mb)
|
|
307
|
-
|
|
308
|
-
Root cause: Express middleware parsing large webhook bodies as JSON
|
|
309
|
-
instead of keeping raw Buffer, breaking Stripe signature validation.
|
|
310
|
-
|
|
311
|
-
Context: This is brownfield code with no documentation. Created
|
|
312
|
-
retroactive spec (.specweave/increments/0012-webhook-processing/)
|
|
313
|
-
to document intended behavior before debugging.
|
|
314
|
-
|
|
315
|
-
Retroactive spec revealed:
|
|
316
|
-
- FR-001: All events must validate signature
|
|
317
|
-
- FR-004: Raw body required for signature validation
|
|
318
|
-
- Current implementation violated both for events >5mb
|
|
319
|
-
|
|
320
|
-
Solution: Moved webhook route BEFORE global body parsing middleware.
|
|
321
|
-
Webhook now uses route-specific express.raw() middleware with 10mb limit.
|
|
322
|
-
|
|
323
|
-
Spec alignment: Now implements FR-001 and FR-004 correctly.
|
|
324
|
-
|
|
325
|
-
Test coverage:
|
|
326
|
-
- Added: TC-005 (small events <5mb)
|
|
327
|
-
- Added: TC-006 (large events >5mb)
|
|
328
|
-
- Verified: Signature validation works for all event sizes
|
|
329
|
-
|
|
330
|
-
Documentation created (brownfield):
|
|
331
|
-
- spec.md: Retroactive spec for webhook processing
|
|
332
|
-
- plan.md: Middleware configuration documented
|
|
333
|
-
- tests.md: Test cases for regression prevention
|
|
334
|
-
- ADR-0013: Webhook middleware pattern documented
|
|
335
|
-
- webhooks.md: Strategy doc for payment webhooks
|
|
336
|
-
|
|
337
|
-
Production impact: Failure rate reduced from 20% to 0%
|
|
338
|
-
|
|
339
|
-
Fixes: #156
|
|
340
|
-
|
|
341
|
-
🤖 Generated with Claude Code
|
|
342
|
-
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
343
|
-
|
|
344
|
-
validation:
|
|
345
|
-
- "Phase 0: Identified missing spec (brownfield code)"
|
|
346
|
-
- "Phase 0: Created retroactive spec before debugging"
|
|
347
|
-
- "Phase 1: Analyzed legacy code to understand current behavior"
|
|
348
|
-
- "Phase 1: Gathered business context from user"
|
|
349
|
-
- "Phase 1: Compared actual behavior vs retroactive spec"
|
|
350
|
-
- "Phase 2: Identified middleware configuration issue"
|
|
351
|
-
- "Phase 3: Formed hypothesis about large event handling"
|
|
352
|
-
- "Phase 4: Updated retroactive spec with FR-004"
|
|
353
|
-
- "Phase 4: Fixed with middleware reordering"
|
|
354
|
-
- "Phase 5: Created comprehensive documentation (spec, plan, tests, ADR, strategy)"
|
|
355
|
-
- "Brownfield approach: Document first, debug second"
|
|
356
|
-
|
|
357
|
-
expected_errors: []
|
|
358
|
-
|
|
359
|
-
success_criteria:
|
|
360
|
-
- "Retroactive spec created before debugging"
|
|
361
|
-
- "Root cause identified (middleware order)"
|
|
362
|
-
- "Fix verified (0% failure rate)"
|
|
363
|
-
- "Comprehensive documentation for legacy code"
|
|
364
|
-
- "ADR created for pattern reuse"
|
|
365
|
-
- "Living documentation bootstrapped for brownfield"
|
|
366
|
-
---
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
name: "Export SpecWeave Increment to Azure DevOps"
|
|
2
|
-
description: "Test exporting a SpecWeave increment to ADO Epic/Features/Stories"
|
|
3
|
-
user_input: "Export increment 0001-user-auth to Azure DevOps"
|
|
4
|
-
expected_behavior:
|
|
5
|
-
- Creates Epic from increment spec
|
|
6
|
-
- Creates Features from main sections
|
|
7
|
-
- Creates User Stories from tasks
|
|
8
|
-
- Maps test cases to Test Cases in ADO
|
|
9
|
-
validation:
|
|
10
|
-
- Epic title matches increment name
|
|
11
|
-
- Features map to spec sections
|
|
12
|
-
- User Stories have acceptance criteria
|
|
13
|
-
- Work item IDs stored in SpecWeave
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
name: "Import Azure DevOps Epic to SpecWeave"
|
|
2
|
-
description: "Test importing ADO Epic as a SpecWeave increment"
|
|
3
|
-
user_input: "Import ADO Epic #12345 into SpecWeave"
|
|
4
|
-
expected_behavior:
|
|
5
|
-
- Creates increment folder with ADO Epic name
|
|
6
|
-
- Generates spec.md from Epic description
|
|
7
|
-
- Converts Features to sections in spec
|
|
8
|
-
- Creates tasks.md from User Stories
|
|
9
|
-
validation:
|
|
10
|
-
- Increment follows SpecWeave structure
|
|
11
|
-
- spec.md has proper sections
|
|
12
|
-
- tasks.md includes all stories
|
|
13
|
-
- ADO references preserved
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
name: "Bidirectional Sync with Conflict Resolution"
|
|
2
|
-
description: "Test syncing changes between SpecWeave and ADO"
|
|
3
|
-
user_input: "Sync increment 0002-payment with ADO, handle conflicts"
|
|
4
|
-
expected_behavior:
|
|
5
|
-
- Detects changes in both systems
|
|
6
|
-
- Shows conflicts for manual resolution
|
|
7
|
-
- Syncs approved changes bidirectionally
|
|
8
|
-
- Maintains traceability
|
|
9
|
-
validation:
|
|
10
|
-
- Conflict detection works
|
|
11
|
-
- User can choose resolution strategy
|
|
12
|
-
- Sync maintains data integrity
|
|
13
|
-
- Audit log of sync operations
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Basic SpecWeave Project Detection"
|
|
3
|
-
description: "Tests if specweave-detector can identify a SpecWeave project by presence of .specweave/ directory"
|
|
4
|
-
input:
|
|
5
|
-
prompt: "User opens Claude Code in a SpecWeave project directory"
|
|
6
|
-
files:
|
|
7
|
-
- ".specweave/config.yaml"
|
|
8
|
-
context:
|
|
9
|
-
cwd: "/path/to/specweave-project"
|
|
10
|
-
files_present:
|
|
11
|
-
- ".specweave/"
|
|
12
|
-
- ".specweave/config.yaml"
|
|
13
|
-
- "features/"
|
|
14
|
-
- "specifications/"
|
|
15
|
-
expected_output:
|
|
16
|
-
type: "skill_activation"
|
|
17
|
-
activates: true
|
|
18
|
-
reason: "Detected .specweave/config.yaml"
|
|
19
|
-
actions:
|
|
20
|
-
- "Load project configuration"
|
|
21
|
-
- "Enable SpecWeave-specific commands"
|
|
22
|
-
- "Activate SpecWeave workflow"
|
|
23
|
-
contains:
|
|
24
|
-
- "SpecWeave project detected"
|
|
25
|
-
- "Loading configuration"
|
|
26
|
-
validation:
|
|
27
|
-
- "Skill activates proactively (without user request)"
|
|
28
|
-
- "Detects .specweave/ directory"
|
|
29
|
-
- "Reads config.yaml successfully"
|
|
30
|
-
- "Enables SpecWeave commands"
|
|
31
|
-
- "Does not activate in non-SpecWeave projects"
|
|
32
|
-
success_criteria:
|
|
33
|
-
- "Proactive activation works (proactive: true in SKILL.md)"
|
|
34
|
-
- "Configuration loaded correctly"
|
|
35
|
-
- "SpecWeave workflows enabled"
|
|
36
|
-
- "No false positives (activates only in SpecWeave projects)"
|
|
37
|
-
---
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Detection with Missing Configuration"
|
|
3
|
-
description: "Tests edge case where .specweave/ exists but config.yaml is missing or invalid"
|
|
4
|
-
input:
|
|
5
|
-
prompt: "User opens Claude Code in directory with incomplete SpecWeave setup"
|
|
6
|
-
files:
|
|
7
|
-
- ".specweave/" # directory exists but empty
|
|
8
|
-
context:
|
|
9
|
-
cwd: "/path/to/incomplete-project"
|
|
10
|
-
files_present:
|
|
11
|
-
- ".specweave/"
|
|
12
|
-
files_missing:
|
|
13
|
-
- ".specweave/config.yaml"
|
|
14
|
-
expected_output:
|
|
15
|
-
type: "error_handling"
|
|
16
|
-
activates: true
|
|
17
|
-
reason: "Detected .specweave/ but missing config"
|
|
18
|
-
actions:
|
|
19
|
-
- "Warn user about missing config.yaml"
|
|
20
|
-
- "Offer to initialize SpecWeave project"
|
|
21
|
-
- "Provide sample config.yaml"
|
|
22
|
-
contains:
|
|
23
|
-
- "SpecWeave directory detected"
|
|
24
|
-
- "Missing config.yaml"
|
|
25
|
-
- "Initialize project?"
|
|
26
|
-
validation:
|
|
27
|
-
- "Detects incomplete setup"
|
|
28
|
-
- "Provides helpful error message"
|
|
29
|
-
- "Offers initialization option"
|
|
30
|
-
- "Does not crash or fail silently"
|
|
31
|
-
- "Suggests next steps"
|
|
32
|
-
success_criteria:
|
|
33
|
-
- "Graceful error handling"
|
|
34
|
-
- "User-friendly error message"
|
|
35
|
-
- "Actionable recommendations"
|
|
36
|
-
- "No silent failures"
|
|
37
|
-
---
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "No Activation in Non-SpecWeave Projects"
|
|
3
|
-
description: "Tests that specweave-detector does NOT activate in regular projects without .specweave/"
|
|
4
|
-
input:
|
|
5
|
-
prompt: "User opens Claude Code in a regular Node.js project"
|
|
6
|
-
files:
|
|
7
|
-
- "package.json"
|
|
8
|
-
- "src/"
|
|
9
|
-
- "README.md"
|
|
10
|
-
context:
|
|
11
|
-
cwd: "/path/to/regular-project"
|
|
12
|
-
files_present:
|
|
13
|
-
- "package.json"
|
|
14
|
-
- "src/"
|
|
15
|
-
files_missing:
|
|
16
|
-
- ".specweave/"
|
|
17
|
-
- ".specweave/config.yaml"
|
|
18
|
-
expected_output:
|
|
19
|
-
type: "no_activation"
|
|
20
|
-
activates: false
|
|
21
|
-
reason: "No .specweave/ directory found"
|
|
22
|
-
actions: []
|
|
23
|
-
contains: []
|
|
24
|
-
validation:
|
|
25
|
-
- "Does NOT activate in non-SpecWeave projects"
|
|
26
|
-
- "No false positives"
|
|
27
|
-
- "No unnecessary warnings"
|
|
28
|
-
- "Does not interfere with normal Claude Code operation"
|
|
29
|
-
success_criteria:
|
|
30
|
-
- "Zero false positives"
|
|
31
|
-
- "Only activates when .specweave/ present"
|
|
32
|
-
- "Silent when not applicable"
|
|
33
|
-
- "No performance impact on non-SpecWeave projects"
|
|
34
|
-
---
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
name: "Export SpecWeave Increment to JIRA"
|
|
2
|
-
description: "Test exporting a SpecWeave increment to JIRA Epic/Stories/Subtasks"
|
|
3
|
-
user_input: "Export increment 0003-dashboard to JIRA"
|
|
4
|
-
expected_behavior:
|
|
5
|
-
- Creates JIRA Epic from increment spec
|
|
6
|
-
- Creates Stories from main sections
|
|
7
|
-
- Creates Subtasks from tasks
|
|
8
|
-
- Maps test cases to JIRA Test issues
|
|
9
|
-
validation:
|
|
10
|
-
- Epic summary matches increment name
|
|
11
|
-
- Stories have proper descriptions
|
|
12
|
-
- Subtasks linked to Stories
|
|
13
|
-
- JIRA keys stored in SpecWeave
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
name: "Import JIRA Epic to SpecWeave"
|
|
2
|
-
description: "Test importing JIRA Epic as a SpecWeave increment"
|
|
3
|
-
user_input: "Import JIRA Epic PROJ-123 into SpecWeave"
|
|
4
|
-
expected_behavior:
|
|
5
|
-
- Creates increment folder from Epic key
|
|
6
|
-
- Generates spec.md from Epic description
|
|
7
|
-
- Converts Stories to spec sections
|
|
8
|
-
- Creates tasks.md from Subtasks
|
|
9
|
-
validation:
|
|
10
|
-
- Increment follows naming convention
|
|
11
|
-
- spec.md includes Epic details
|
|
12
|
-
- tasks.md has all subtasks
|
|
13
|
-
- JIRA links preserved
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
name: "Sync Status Updates Between Systems"
|
|
2
|
-
description: "Test syncing task status between SpecWeave and JIRA"
|
|
3
|
-
user_input: "Sync status updates for increment 0004-notifications"
|
|
4
|
-
expected_behavior:
|
|
5
|
-
- Detects status changes in SpecWeave (tasks.md)
|
|
6
|
-
- Updates JIRA issue status accordingly
|
|
7
|
-
- Syncs JIRA status back to SpecWeave
|
|
8
|
-
- Handles workflow state mapping
|
|
9
|
-
validation:
|
|
10
|
-
- Status mapping works correctly
|
|
11
|
-
- Bidirectional sync maintains consistency
|
|
12
|
-
- Workflow transitions respected
|
|
13
|
-
- Sync logs available
|