specweave 0.1.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/INSTALL.md +848 -0
- package/LICENSE +21 -0
- package/README.md +675 -0
- package/SPECWEAVE.md +665 -0
- package/bin/install-agents.sh +57 -0
- package/bin/install-all.sh +49 -0
- package/bin/install-commands.sh +56 -0
- package/bin/install-skills.sh +57 -0
- package/bin/specweave.js +81 -0
- package/dist/adapters/adapter-base.d.ts +50 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -0
- package/dist/adapters/adapter-base.js +146 -0
- package/dist/adapters/adapter-base.js.map +1 -0
- package/dist/adapters/adapter-interface.d.ts +108 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -0
- package/dist/adapters/adapter-interface.js +9 -0
- package/dist/adapters/adapter-interface.js.map +1 -0
- package/dist/adapters/claude/adapter.d.ts +54 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -0
- package/dist/adapters/claude/adapter.js +184 -0
- package/dist/adapters/claude/adapter.js.map +1 -0
- package/dist/adapters/copilot/adapter.d.ts +42 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -0
- package/dist/adapters/copilot/adapter.js +239 -0
- package/dist/adapters/copilot/adapter.js.map +1 -0
- package/dist/adapters/cursor/adapter.d.ts +42 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -0
- package/dist/adapters/cursor/adapter.js +297 -0
- package/dist/adapters/cursor/adapter.js.map +1 -0
- package/dist/adapters/generic/adapter.d.ts +40 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -0
- package/dist/adapters/generic/adapter.js +155 -0
- package/dist/adapters/generic/adapter.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +247 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +7 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +160 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +154 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/package.json +90 -0
- package/src/adapters/README.md +312 -0
- package/src/adapters/adapter-base.ts +146 -0
- package/src/adapters/adapter-interface.ts +120 -0
- package/src/adapters/claude/README.md +241 -0
- package/src/adapters/claude/adapter.ts +157 -0
- package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
- package/src/adapters/copilot/README.md +200 -0
- package/src/adapters/copilot/adapter.ts +210 -0
- package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
- package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
- package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
- package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
- package/src/adapters/cursor/.cursorrules +325 -0
- package/src/adapters/cursor/README.md +243 -0
- package/src/adapters/cursor/adapter.ts +268 -0
- package/src/adapters/generic/README.md +277 -0
- package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
- package/src/adapters/generic/adapter.ts +159 -0
- package/src/adapters/registry.yaml +126 -0
- package/src/agents/architect/AGENT.md +416 -0
- package/src/agents/devops/AGENT.md +1738 -0
- package/src/agents/docs-writer/AGENT.md +239 -0
- package/src/agents/performance/AGENT.md +228 -0
- package/src/agents/pm/AGENT.md +751 -0
- package/src/agents/qa-lead/AGENT.md +150 -0
- package/src/agents/security/AGENT.md +179 -0
- package/src/agents/sre/AGENT.md +582 -0
- package/src/agents/sre/modules/backend-diagnostics.md +481 -0
- package/src/agents/sre/modules/database-diagnostics.md +509 -0
- package/src/agents/sre/modules/infrastructure.md +561 -0
- package/src/agents/sre/modules/monitoring.md +439 -0
- package/src/agents/sre/modules/security-incidents.md +421 -0
- package/src/agents/sre/modules/ui-diagnostics.md +302 -0
- package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
- package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
- package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
- package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
- package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
- package/src/agents/sre/playbooks/06-disk-full.md +314 -0
- package/src/agents/sre/playbooks/07-service-down.md +333 -0
- package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
- package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
- package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
- package/src/agents/sre/scripts/health-check.sh +230 -0
- package/src/agents/sre/scripts/log-analyzer.py +213 -0
- package/src/agents/sre/scripts/metrics-collector.sh +294 -0
- package/src/agents/sre/scripts/trace-analyzer.js +257 -0
- package/src/agents/sre/templates/incident-report.md +249 -0
- package/src/agents/sre/templates/mitigation-plan.md +375 -0
- package/src/agents/sre/templates/post-mortem.md +418 -0
- package/src/agents/sre/templates/runbook-template.md +412 -0
- package/src/agents/tech-lead/AGENT.md +263 -0
- package/src/commands/add-tasks.md +176 -0
- package/src/commands/close-increment.md +347 -0
- package/src/commands/create-increment.md +223 -0
- package/src/commands/create-project.md +528 -0
- package/src/commands/generate-docs.md +623 -0
- package/src/commands/list-increments.md +180 -0
- package/src/commands/review-docs.md +331 -0
- package/src/commands/start-increment.md +139 -0
- package/src/commands/sync-github.md +115 -0
- package/src/commands/validate-increment.md +800 -0
- package/src/hooks/README.md +252 -0
- package/src/hooks/docs-changed.sh +59 -0
- package/src/hooks/human-input-required.sh +55 -0
- package/src/hooks/post-task-completion.sh +57 -0
- package/src/hooks/pre-implementation.sh +47 -0
- package/src/skills/ado-sync/README.md +449 -0
- package/src/skills/ado-sync/SKILL.md +245 -0
- package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
- package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
- package/src/skills/bmad-method-expert/SKILL.md +628 -0
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
- package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
- package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
- package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/SKILL.md +523 -0
- package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
- package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/SKILL.md +625 -0
- package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/context-loader/SKILL.md +734 -0
- package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
- package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
- package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
- package/src/skills/context-optimizer/SKILL.md +618 -0
- package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
- package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
- package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
- package/src/skills/cost-optimizer/SKILL.md +190 -0
- package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
- package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
- package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
- package/src/skills/cost-optimizer/test-results/README.md +46 -0
- package/src/skills/design-system-architect/SKILL.md +107 -0
- package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
- package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
- package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
- package/src/skills/diagrams-architect/SKILL.md +763 -0
- package/src/skills/diagrams-generator/SKILL.md +25 -0
- package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
- package/src/skills/docs-updater/README.md +48 -0
- package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/dotnet-backend/SKILL.md +250 -0
- package/src/skills/e2e-playwright/README.md +506 -0
- package/src/skills/e2e-playwright/SKILL.md +457 -0
- package/src/skills/e2e-playwright/execute.js +373 -0
- package/src/skills/e2e-playwright/lib/utils.js +514 -0
- package/src/skills/e2e-playwright/package.json +33 -0
- package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
- package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
- package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
- package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
- package/src/skills/figma-designer/SKILL.md +149 -0
- package/src/skills/figma-implementer/SKILL.md +148 -0
- package/src/skills/figma-mcp-connector/SKILL.md +136 -0
- package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
- package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
- package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
- package/src/skills/figma-to-code/SKILL.md +128 -0
- package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
- package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
- package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
- package/src/skills/frontend/SKILL.md +177 -0
- package/src/skills/github-sync/SKILL.md +252 -0
- package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/hetzner-provisioner/README.md +308 -0
- package/src/skills/hetzner-provisioner/SKILL.md +251 -0
- package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
- package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
- package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
- package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
- package/src/skills/increment-planner/SKILL.md +889 -0
- package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
- package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
- package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
- package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
- package/src/skills/increment-quality-judge/SKILL.md +566 -0
- package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
- package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
- package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
- package/src/skills/jira-sync/README.md +328 -0
- package/src/skills/jira-sync/SKILL.md +209 -0
- package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
- package/src/skills/nextjs/SKILL.md +176 -0
- package/src/skills/nodejs-backend/SKILL.md +181 -0
- package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/python-backend/SKILL.md +226 -0
- package/src/skills/role-orchestrator/README.md +197 -0
- package/src/skills/role-orchestrator/SKILL.md +1184 -0
- package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
- package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
- package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
- package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
- package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
- package/src/skills/skill-creator/LICENSE.txt +202 -0
- package/src/skills/skill-creator/SKILL.md +209 -0
- package/src/skills/skill-creator/scripts/init_skill.py +303 -0
- package/src/skills/skill-creator/scripts/package_skill.py +110 -0
- package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/skill-router/SKILL.md +497 -0
- package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
- package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
- package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
- package/src/skills/spec-driven-brainstorming/README.md +264 -0
- package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
- package/src/skills/spec-driven-debugging/README.md +479 -0
- package/src/skills/spec-driven-debugging/SKILL.md +652 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
- package/src/skills/spec-kit-expert/SKILL.md +1012 -0
- package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
- package/src/skills/specweave-detector/SKILL.md +420 -0
- package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
- package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
- package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/task-builder/README.md +90 -0
- package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/templates/.env.example +144 -0
- package/src/templates/.gitignore.template +81 -0
- package/src/templates/CLAUDE.md.template +383 -0
- package/src/templates/README.md.template +240 -0
- package/src/templates/config.yaml +333 -0
- package/src/templates/docs/README.md +124 -0
- package/src/templates/docs/adr-template.md +118 -0
- package/src/templates/docs/hld-template.md +220 -0
- package/src/templates/docs/lld-template.md +580 -0
- package/src/templates/docs/prd-template.md +132 -0
- package/src/templates/docs/rfc-template.md +229 -0
- package/src/templates/docs/runbook-template.md +298 -0
- package/src/templates/environments/minimal/.env.production +16 -0
- package/src/templates/environments/minimal/README.md +54 -0
- package/src/templates/environments/minimal/deploy-production.yml +52 -0
- package/src/templates/environments/progressive/.env.qa +28 -0
- package/src/templates/environments/progressive/README.md +129 -0
- package/src/templates/environments/progressive/deploy-production.yml +93 -0
- package/src/templates/environments/progressive/deploy-qa.yml +62 -0
- package/src/templates/environments/progressive/deploy-staging.yml +67 -0
- package/src/templates/environments/standard/.env.development +20 -0
- package/src/templates/environments/standard/.env.production +30 -0
- package/src/templates/environments/standard/.env.staging +23 -0
- package/src/templates/environments/standard/README.md +97 -0
- package/src/templates/environments/standard/deploy-production.yml +68 -0
- package/src/templates/environments/standard/deploy-staging.yml +61 -0
- package/src/templates/environments/standard/docker-compose.yml +43 -0
- package/src/templates/increment-metadata-template.yaml +138 -0
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-ado-mapper
|
|
3
|
+
description: Expert in bidirectional conversion between SpecWeave increments and Azure DevOps (ADO) Epics/Features/User Stories/Tasks. Handles export (increment → ADO), import (ADO → increment), and bidirectional sync with conflict resolution. Activates for ADO sync, Azure DevOps sync, work item creation, import from ADO.
|
|
4
|
+
tools: Read, Write, Edit, Bash
|
|
5
|
+
model: claude-sonnet-4-5-20250929
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Specweave Ado Mapper Skill
|
|
9
|
+
|
|
10
|
+
You are an expert in mapping SpecWeave concepts to Azure DevOps (ADO) and vice versa with precision and traceability.
|
|
11
|
+
|
|
12
|
+
## Core Responsibilities
|
|
13
|
+
|
|
14
|
+
1. **Export SpecWeave increments to ADO** (Increment → Epic + Features + User Stories + Tasks)
|
|
15
|
+
2. **Import ADO Epics as SpecWeave increments** (Epic → Increment structure)
|
|
16
|
+
3. **Bidirectional sync** with conflict detection and resolution
|
|
17
|
+
4. **Maintain traceability** (store IDs, URLs, timestamps)
|
|
18
|
+
5. **Validate mapping accuracy** using test cases
|
|
19
|
+
6. **Handle edge cases** (missing fields, custom workflows, API errors)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Azure DevOps Work Item Hierarchy
|
|
24
|
+
|
|
25
|
+
ADO uses a **4-level hierarchy** (one more level than JIRA):
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Epic
|
|
29
|
+
└── Feature
|
|
30
|
+
└── User Story
|
|
31
|
+
└── Task
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Key Difference from JIRA**: ADO has **Feature** between Epic and User Story.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Concept Mappings
|
|
39
|
+
|
|
40
|
+
### SpecWeave → ADO
|
|
41
|
+
|
|
42
|
+
| SpecWeave Concept | ADO Concept | Mapping Rules |
|
|
43
|
+
|-------------------|-------------|---------------|
|
|
44
|
+
| **Increment** | Epic | Title: `[Increment ###] [Title]` |
|
|
45
|
+
| **User Story** (from spec.md) | Feature (if large) OR User Story | Decision based on size |
|
|
46
|
+
| **Task** (from tasks.md) | Task | Work Item Type: Task |
|
|
47
|
+
| **Acceptance Criteria** (TC-0001) | Acceptance Criteria field | Formatted as checkboxes |
|
|
48
|
+
| **Priority P1** | Priority: 1 | Highest priority |
|
|
49
|
+
| **Priority P2** | Priority: 2 | High priority |
|
|
50
|
+
| **Priority P3** | Priority: 3 | Medium priority |
|
|
51
|
+
| **Status: planned** | State: New | Not started |
|
|
52
|
+
| **Status: in-progress** | State: Active | Active work |
|
|
53
|
+
| **Status: completed** | State: Closed | Finished |
|
|
54
|
+
| **spec.md** | Epic Description | Summary + link to spec (if repo) |
|
|
55
|
+
|
|
56
|
+
### ADO → SpecWeave
|
|
57
|
+
|
|
58
|
+
| ADO Concept | SpecWeave Concept | Import Rules |
|
|
59
|
+
|-------------|-------------------|--------------|
|
|
60
|
+
| **Epic** | Increment | Auto-number next available |
|
|
61
|
+
| **Feature** | User Story (large) | Extract title, description |
|
|
62
|
+
| **User Story** | User Story (small) | Extract acceptance criteria |
|
|
63
|
+
| **Task** | Task | Map to tasks.md checklist |
|
|
64
|
+
| **Acceptance Criteria** | TC-0001 format | Parse as test cases |
|
|
65
|
+
| **Priority 1** | Priority P1 | Critical |
|
|
66
|
+
| **Priority 2** | Priority P2 | Important |
|
|
67
|
+
| **Priority 3/4** | Priority P3 | Nice to have |
|
|
68
|
+
| **State: New** | Status: planned | Not started |
|
|
69
|
+
| **State: Active** | Status: in-progress | Active |
|
|
70
|
+
| **State: Closed** | Status: completed | Finished |
|
|
71
|
+
| **Area Path** | Context metadata | Store in frontmatter |
|
|
72
|
+
| **Iteration** | Context metadata | Store in frontmatter |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Conversion Workflows
|
|
77
|
+
|
|
78
|
+
### 1. Export: Increment → ADO Epic
|
|
79
|
+
|
|
80
|
+
**Input**: `.specweave/increments/0001-feature-name/`
|
|
81
|
+
|
|
82
|
+
**Prerequisites**:
|
|
83
|
+
- Increment folder exists
|
|
84
|
+
- `spec.md` exists with valid frontmatter
|
|
85
|
+
- `tasks.md` exists
|
|
86
|
+
- ADO connection configured (PAT, organization, project)
|
|
87
|
+
|
|
88
|
+
**Process**:
|
|
89
|
+
|
|
90
|
+
1. **Read increment files**:
|
|
91
|
+
```bash
|
|
92
|
+
# Read spec.md
|
|
93
|
+
- Extract frontmatter (title, description, priority)
|
|
94
|
+
- Extract user stories (US1-001, US1-002)
|
|
95
|
+
- Extract acceptance criteria (TC-0001, TC-0002)
|
|
96
|
+
|
|
97
|
+
# Read tasks.md
|
|
98
|
+
- Extract task checklist
|
|
99
|
+
- Group tasks by user story
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
2. **Create ADO Epic**:
|
|
103
|
+
```
|
|
104
|
+
Title: [Increment 0001] Feature Name
|
|
105
|
+
Description:
|
|
106
|
+
{spec.md summary}
|
|
107
|
+
|
|
108
|
+
Specification: {link to spec.md if Azure Repos}
|
|
109
|
+
|
|
110
|
+
Work Item Type: Epic
|
|
111
|
+
Priority: 1 (P1) / 2 (P2) / 3 (P3)
|
|
112
|
+
State: New
|
|
113
|
+
Area Path: {project_area}
|
|
114
|
+
Iteration: {current_iteration}
|
|
115
|
+
Tags: specweave, increment-0001
|
|
116
|
+
Custom Fields:
|
|
117
|
+
- SpecWeave.IncrementID: 0001-feature-name
|
|
118
|
+
- SpecWeave.SpecURL: https://dev.azure.com/.../spec.md
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
3. **Create ADO Features OR User Stories**:
|
|
122
|
+
|
|
123
|
+
**Decision Logic**:
|
|
124
|
+
- If user story has >5 acceptance criteria → Create as Feature (large work)
|
|
125
|
+
- If user story has ≤5 acceptance criteria → Create as User Story (small work)
|
|
126
|
+
|
|
127
|
+
**Feature (large user story)**:
|
|
128
|
+
```
|
|
129
|
+
Title: {User Story title}
|
|
130
|
+
Description:
|
|
131
|
+
**As a** {role}
|
|
132
|
+
**I want to** {goal}
|
|
133
|
+
**So that** {benefit}
|
|
134
|
+
|
|
135
|
+
Acceptance Criteria:
|
|
136
|
+
- TC-0001: {criteria}
|
|
137
|
+
- TC-0002: {criteria}
|
|
138
|
+
...
|
|
139
|
+
|
|
140
|
+
Work Item Type: Feature
|
|
141
|
+
Parent: {Epic ID}
|
|
142
|
+
Tags: specweave, user-story
|
|
143
|
+
Custom Fields:
|
|
144
|
+
- SpecWeave.UserStoryID: US1-001
|
|
145
|
+
- SpecWeave.TestCaseIDs: TC-0001, TC-0002
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**User Story (small user story)**:
|
|
149
|
+
```
|
|
150
|
+
(Same structure as Feature, but Work Item Type: User Story)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
4. **Create ADO Tasks**:
|
|
154
|
+
```
|
|
155
|
+
Title: {Task description}
|
|
156
|
+
Work Item Type: Task
|
|
157
|
+
Parent: {Feature or User Story ID}
|
|
158
|
+
State: New
|
|
159
|
+
Tags: specweave, task
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
5. **Update increment frontmatter**:
|
|
163
|
+
```yaml
|
|
164
|
+
ado:
|
|
165
|
+
epic_id: "12345"
|
|
166
|
+
epic_url: "https://dev.azure.com/{org}/{project}/_workitems/edit/12345"
|
|
167
|
+
features:
|
|
168
|
+
- id: "12346"
|
|
169
|
+
user_story_id: "US1-001"
|
|
170
|
+
- id: "12347"
|
|
171
|
+
user_story_id: "US1-002"
|
|
172
|
+
area_path: "MyProject\\TeamA"
|
|
173
|
+
iteration: "Sprint 24"
|
|
174
|
+
last_sync: "2025-10-26T14:00:00Z"
|
|
175
|
+
sync_direction: "export"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Output**:
|
|
179
|
+
```
|
|
180
|
+
✅ Exported to Azure DevOps!
|
|
181
|
+
|
|
182
|
+
Epic: 12345
|
|
183
|
+
URL: https://dev.azure.com/{org}/{project}/_workitems/edit/12345
|
|
184
|
+
Features: 3 created
|
|
185
|
+
User Stories: 2 created
|
|
186
|
+
Tasks: 12 created
|
|
187
|
+
Area Path: MyProject\TeamA
|
|
188
|
+
Iteration: Sprint 24
|
|
189
|
+
Last Sync: 2025-10-26T14:00:00Z
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 2. Import: ADO Epic → Increment
|
|
195
|
+
|
|
196
|
+
**Input**: ADO Epic ID (e.g., `12345`)
|
|
197
|
+
|
|
198
|
+
**Prerequisites**:
|
|
199
|
+
- Valid ADO Epic ID
|
|
200
|
+
- Epic exists and is accessible
|
|
201
|
+
- ADO connection configured
|
|
202
|
+
|
|
203
|
+
**Process**:
|
|
204
|
+
|
|
205
|
+
1. **Fetch Epic details** (via ADO REST API):
|
|
206
|
+
```
|
|
207
|
+
- Epic title, description, tags
|
|
208
|
+
- Epic custom fields (if SpecWeave ID exists)
|
|
209
|
+
- Priority, state, area path, iteration
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
2. **Fetch hierarchy** (Epic → Features → User Stories → Tasks):
|
|
213
|
+
```
|
|
214
|
+
- All Features/User Stories linked to Epic
|
|
215
|
+
- All Tasks linked to each Feature/User Story
|
|
216
|
+
- Acceptance criteria fields
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
3. **Auto-number next increment**:
|
|
220
|
+
```bash
|
|
221
|
+
# Scan .specweave/increments/ for highest number
|
|
222
|
+
ls .specweave/increments/ | grep -E '^[0-9]{4}' | sort -n | tail -1
|
|
223
|
+
# Increment by 1 → 0003
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
4. **Create increment folder**:
|
|
227
|
+
```
|
|
228
|
+
.specweave/increments/0003-imported-feature/
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
5. **Generate spec.md**:
|
|
232
|
+
```yaml
|
|
233
|
+
---
|
|
234
|
+
increment_id: "0003"
|
|
235
|
+
title: "{Epic title}"
|
|
236
|
+
status: "{mapped from ADO state}"
|
|
237
|
+
priority: "{mapped from ADO priority}"
|
|
238
|
+
created_at: "{Epic created date}"
|
|
239
|
+
ado:
|
|
240
|
+
epic_id: "12345"
|
|
241
|
+
epic_url: "https://dev.azure.com/{org}/{project}/_workitems/edit/12345"
|
|
242
|
+
features:
|
|
243
|
+
- id: "12346"
|
|
244
|
+
user_story_id: "US3-001"
|
|
245
|
+
area_path: "{area path}"
|
|
246
|
+
iteration: "{iteration}"
|
|
247
|
+
imported_at: "2025-10-26T14:00:00Z"
|
|
248
|
+
sync_direction: "import"
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
# {Epic title}
|
|
252
|
+
|
|
253
|
+
{Epic description}
|
|
254
|
+
|
|
255
|
+
## Context
|
|
256
|
+
|
|
257
|
+
- **Area Path**: {area_path}
|
|
258
|
+
- **Iteration**: {iteration}
|
|
259
|
+
- **ADO Epic**: [12345](https://dev.azure.com/.../12345)
|
|
260
|
+
|
|
261
|
+
## User Stories
|
|
262
|
+
|
|
263
|
+
### US3-001: {Feature/User Story title}
|
|
264
|
+
|
|
265
|
+
**As a** {extracted from description}
|
|
266
|
+
**I want to** {extracted}
|
|
267
|
+
**So that** {extracted}
|
|
268
|
+
|
|
269
|
+
**Acceptance Criteria**:
|
|
270
|
+
- [ ] TC-0001: {parsed from Acceptance Criteria field}
|
|
271
|
+
- [ ] TC-0002: {parsed}
|
|
272
|
+
|
|
273
|
+
**ADO Feature**: [12346](https://dev.azure.com/.../12346)
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
6. **Generate tasks.md**:
|
|
277
|
+
```markdown
|
|
278
|
+
# Tasks: {Increment title}
|
|
279
|
+
|
|
280
|
+
## User Story: US3-001
|
|
281
|
+
|
|
282
|
+
- [ ] {Task 1 title} (ADO: 12350)
|
|
283
|
+
- [ ] {Task 2 title} (ADO: 12351)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
7. **Generate context-manifest.yaml** (default)
|
|
287
|
+
|
|
288
|
+
8. **Update ADO Epic** (add custom field):
|
|
289
|
+
```
|
|
290
|
+
Custom Field: SpecWeave.IncrementID = 0003-imported-feature
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Output**:
|
|
294
|
+
```
|
|
295
|
+
✅ Imported from Azure DevOps!
|
|
296
|
+
|
|
297
|
+
Increment: 0003-imported-feature
|
|
298
|
+
Location: .specweave/increments/0003-imported-feature/
|
|
299
|
+
User Stories: 5 imported
|
|
300
|
+
Tasks: 12 imported
|
|
301
|
+
ADO Epic: 12345
|
|
302
|
+
Area Path: MyProject\TeamA
|
|
303
|
+
Iteration: Sprint 24
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
### 3. Bidirectional Sync
|
|
309
|
+
|
|
310
|
+
**Process**: Similar to JIRA sync, with ADO-specific fields:
|
|
311
|
+
|
|
312
|
+
- Sync Area Path changes
|
|
313
|
+
- Sync Iteration changes
|
|
314
|
+
- Handle ADO-specific states (New, Active, Resolved, Closed)
|
|
315
|
+
- Sync Acceptance Criteria field
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## ADO-Specific Concepts
|
|
320
|
+
|
|
321
|
+
### Area Path
|
|
322
|
+
|
|
323
|
+
**Definition**: Organizational hierarchy (e.g., `MyProject\TeamA\Backend`)
|
|
324
|
+
|
|
325
|
+
**Mapping**:
|
|
326
|
+
- Store in increment frontmatter: `ado.area_path`
|
|
327
|
+
- Not a direct SpecWeave concept
|
|
328
|
+
- Used for organizational context
|
|
329
|
+
|
|
330
|
+
### Iteration
|
|
331
|
+
|
|
332
|
+
**Definition**: Sprint/time period (e.g., `Sprint 24`)
|
|
333
|
+
|
|
334
|
+
**Mapping**:
|
|
335
|
+
- Store in increment frontmatter: `ado.iteration`
|
|
336
|
+
- Not a direct SpecWeave concept
|
|
337
|
+
- Used for planning context
|
|
338
|
+
|
|
339
|
+
### Work Item States
|
|
340
|
+
|
|
341
|
+
ADO uses **State** (not Status):
|
|
342
|
+
|
|
343
|
+
| ADO State | SpecWeave Status |
|
|
344
|
+
|-----------|------------------|
|
|
345
|
+
| New | planned |
|
|
346
|
+
| Active | in-progress |
|
|
347
|
+
| Resolved | in-progress (testing) |
|
|
348
|
+
| Closed | completed |
|
|
349
|
+
|
|
350
|
+
### Priority Values
|
|
351
|
+
|
|
352
|
+
ADO uses numeric priorities:
|
|
353
|
+
|
|
354
|
+
| ADO Priority | SpecWeave Priority |
|
|
355
|
+
|--------------|-------------------|
|
|
356
|
+
| 1 | P1 |
|
|
357
|
+
| 2 | P2 |
|
|
358
|
+
| 3 | P3 |
|
|
359
|
+
| 4 | P3 |
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Edge Cases and Error Handling
|
|
364
|
+
|
|
365
|
+
### Feature vs User Story Decision
|
|
366
|
+
|
|
367
|
+
**Problem**: SpecWeave user story → Should it be ADO Feature or User Story?
|
|
368
|
+
|
|
369
|
+
**Solution**:
|
|
370
|
+
```
|
|
371
|
+
Decision Logic:
|
|
372
|
+
- User story has >5 acceptance criteria → Feature (large work)
|
|
373
|
+
- User story has ≤5 acceptance criteria → User Story (small work)
|
|
374
|
+
- User can override with flag: --force-feature or --force-user-story
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Custom Area Paths
|
|
378
|
+
|
|
379
|
+
**Problem**: Project has custom Area Path structure
|
|
380
|
+
|
|
381
|
+
**Solution**:
|
|
382
|
+
```
|
|
383
|
+
Ask user:
|
|
384
|
+
"Select Area Path for this increment:
|
|
385
|
+
[1] MyProject\TeamA
|
|
386
|
+
[2] MyProject\TeamB
|
|
387
|
+
[3] Custom (enter path)"
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Custom Iterations
|
|
391
|
+
|
|
392
|
+
**Problem**: Sprint naming varies
|
|
393
|
+
|
|
394
|
+
**Solution**:
|
|
395
|
+
```
|
|
396
|
+
Ask user:
|
|
397
|
+
"Select Iteration for this increment:
|
|
398
|
+
[1] Sprint 24 (current)
|
|
399
|
+
[2] Sprint 25 (next)
|
|
400
|
+
[3] Backlog
|
|
401
|
+
[4] Custom (enter iteration)"
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### ADO API Errors
|
|
405
|
+
|
|
406
|
+
**Problem**: Rate limit, authentication failure, network error
|
|
407
|
+
|
|
408
|
+
**Solution**:
|
|
409
|
+
```
|
|
410
|
+
❌ ADO API Error: Unauthorized (401)
|
|
411
|
+
|
|
412
|
+
Check your Personal Access Token (PAT):
|
|
413
|
+
1. Go to https://dev.azure.com/{org}/_usersSettings/tokens
|
|
414
|
+
2. Create new PAT with Work Items (Read, Write) scope
|
|
415
|
+
3. Update .env: ADO_PAT=your-token
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Templates
|
|
421
|
+
|
|
422
|
+
Use templates in `templates/` folder:
|
|
423
|
+
|
|
424
|
+
- `epic-from-increment.md` - Epic creation template
|
|
425
|
+
- `feature-from-user-story.md` - Feature creation template
|
|
426
|
+
- `user-story-from-small-story.md` - User Story creation template
|
|
427
|
+
- `increment-from-epic.md` - Increment import template
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## References
|
|
432
|
+
|
|
433
|
+
Consult references in `references/` folder:
|
|
434
|
+
|
|
435
|
+
- `ado-concepts.md` - ADO structure (Epic, Feature, User Story, Task)
|
|
436
|
+
- `specweave-concepts.md` - SpecWeave structure
|
|
437
|
+
- `mapping-examples.md` - Real-world conversions with Area Paths and Iterations
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## Test Cases
|
|
442
|
+
|
|
443
|
+
Validate all conversions using test cases in `test-cases/`:
|
|
444
|
+
|
|
445
|
+
1. **test-1-increment-to-epic.yaml** - Export with Feature/User Story decision
|
|
446
|
+
2. **test-2-epic-to-increment.yaml** - Import with Area Path and Iteration
|
|
447
|
+
3. **test-3-bidirectional-sync.yaml** - Sync with ADO-specific fields
|
|
448
|
+
|
|
449
|
+
**Run tests**:
|
|
450
|
+
```bash
|
|
451
|
+
npm run test:agents:specweave-ado-mapper
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## Best Practices
|
|
457
|
+
|
|
458
|
+
1. **Respect ADO hierarchy** - Use Feature for large work, User Story for small
|
|
459
|
+
2. **Store Area Path and Iteration** - Important for organizational context
|
|
460
|
+
3. **Handle custom workflows** - Many ADO projects customize states
|
|
461
|
+
4. **Use PAT securely** - Store in .env, never commit
|
|
462
|
+
5. **Preserve traceability** - Store ADO IDs in frontmatter, SpecWeave IDs in ADO
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## Usage Examples
|
|
467
|
+
|
|
468
|
+
### Export to ADO
|
|
469
|
+
|
|
470
|
+
```
|
|
471
|
+
User: "Export increment 0001 to Azure DevOps"
|
|
472
|
+
|
|
473
|
+
You:
|
|
474
|
+
1. Read increment files
|
|
475
|
+
2. Ask: "Area Path? [TeamA] [TeamB] [Custom]"
|
|
476
|
+
3. Ask: "Iteration? [Sprint 24] [Sprint 25] [Backlog]"
|
|
477
|
+
4. Create Epic
|
|
478
|
+
5. Decide Feature vs User Story (based on size)
|
|
479
|
+
6. Create Work Items
|
|
480
|
+
7. Update frontmatter
|
|
481
|
+
8. Present summary
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Import from ADO
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
User: "Import ADO epic 12345"
|
|
488
|
+
|
|
489
|
+
You:
|
|
490
|
+
1. Fetch Epic + hierarchy
|
|
491
|
+
2. Extract Area Path and Iteration
|
|
492
|
+
3. Auto-number increment
|
|
493
|
+
4. Generate spec.md with ADO metadata
|
|
494
|
+
5. Generate tasks.md
|
|
495
|
+
6. Update ADO Epic with SpecWeave ID
|
|
496
|
+
7. Present summary
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
**You are the authoritative mapper between SpecWeave and Azure DevOps. Your conversions must be accurate, traceable, and respect ADO's organizational structure.**
|