specweave 0.6.7 → 0.7.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/README.md +1 -1
- package/CLAUDE.md +920 -107
- package/README.md +143 -207
- package/bin/specweave.js +67 -0
- package/dist/adapters/adapter-interface.d.ts +11 -11
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/adapter-interface.js +1 -1
- package/dist/adapters/adapter-loader.d.ts +1 -2
- package/dist/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/adapters/adapter-loader.js +3 -6
- package/dist/adapters/adapter-loader.js.map +1 -1
- package/dist/adapters/agents-md-generator.d.ts +3 -3
- package/dist/adapters/agents-md-generator.js +3 -3
- package/dist/adapters/generic/adapter.d.ts +2 -2
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +28 -9
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/abandon.d.ts +13 -0
- package/dist/cli/commands/abandon.d.ts.map +1 -0
- package/dist/cli/commands/abandon.js +15 -0
- package/dist/cli/commands/abandon.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +141 -40
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +13 -0
- package/dist/cli/commands/pause.d.ts.map +1 -0
- package/dist/cli/commands/pause.js +15 -0
- package/dist/cli/commands/pause.js.map +1 -0
- package/dist/cli/commands/qa.d.ts +54 -0
- package/dist/cli/commands/qa.d.ts.map +1 -0
- package/dist/cli/commands/qa.js +98 -0
- package/dist/cli/commands/qa.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +12 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +14 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +23 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts +57 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.js +223 -0
- package/dist/cli/helpers/issue-tracker/ado.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts +65 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.js +284 -0
- package/dist/cli/helpers/issue-tracker/github.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts +22 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.js +270 -0
- package/dist/cli/helpers/issue-tracker/index.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts +61 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.js +265 -0
- package/dist/cli/helpers/issue-tracker/jira.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts +86 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.js +16 -0
- package/dist/cli/helpers/issue-tracker/types.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts +103 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.js +240 -0
- package/dist/cli/helpers/issue-tracker/utils.js.map +1 -0
- package/dist/core/increment/limits.d.ts +68 -0
- package/dist/core/increment/limits.d.ts.map +1 -0
- package/dist/core/increment/limits.js +224 -0
- package/dist/core/increment/limits.js.map +1 -0
- package/dist/core/increment/metadata-manager.d.ts +114 -0
- package/dist/core/increment/metadata-manager.d.ts.map +1 -0
- package/dist/core/increment/metadata-manager.js +320 -0
- package/dist/core/increment/metadata-manager.js.map +1 -0
- package/dist/core/increment/status-commands.d.ts +43 -0
- package/dist/core/increment/status-commands.d.ts.map +1 -0
- package/dist/core/increment/status-commands.js +277 -0
- package/dist/core/increment/status-commands.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +1 -0
- package/dist/core/plugin-detector.d.ts.map +1 -1
- package/dist/core/plugin-detector.js +25 -0
- package/dist/core/plugin-detector.js.map +1 -1
- package/dist/core/qa/qa-runner.d.ts +16 -0
- package/dist/core/qa/qa-runner.d.ts.map +1 -0
- package/dist/core/qa/qa-runner.js +404 -0
- package/dist/core/qa/qa-runner.js.map +1 -0
- package/dist/core/qa/quality-gate-decider.d.ts +53 -0
- package/dist/core/qa/quality-gate-decider.d.ts.map +1 -0
- package/dist/core/qa/quality-gate-decider.js +268 -0
- package/dist/core/qa/quality-gate-decider.js.map +1 -0
- package/dist/core/qa/risk-calculator.d.ts +126 -0
- package/dist/core/qa/risk-calculator.d.ts.map +1 -0
- package/dist/core/qa/risk-calculator.js +247 -0
- package/dist/core/qa/risk-calculator.js.map +1 -0
- package/dist/core/qa/types.d.ts +315 -0
- package/dist/core/qa/types.d.ts.map +1 -0
- package/dist/core/qa/types.js +8 -0
- package/dist/core/qa/types.js.map +1 -0
- package/dist/core/types/config.d.ts +37 -2
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js +16 -0
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/increment-metadata.d.ts +120 -0
- package/dist/core/types/increment-metadata.d.ts.map +1 -0
- package/dist/core/types/increment-metadata.js +138 -0
- package/dist/core/types/increment-metadata.js.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts +60 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.js +201 -0
- package/dist/hooks/lib/invoke-translator-skill.js.map +1 -0
- package/dist/hooks/lib/translate-file.d.ts +59 -0
- package/dist/hooks/lib/translate-file.d.ts.map +1 -0
- package/dist/hooks/lib/translate-file.js +350 -0
- package/dist/hooks/lib/translate-file.js.map +1 -0
- package/dist/locales/en/cli.json +3 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +22 -0
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -0
- package/dist/metrics/calculators/change-failure-rate.js +70 -0
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts +20 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.js +61 -0
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -0
- package/dist/metrics/calculators/lead-time.d.ts +22 -0
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -0
- package/dist/metrics/calculators/lead-time.js +82 -0
- package/dist/metrics/calculators/lead-time.js.map +1 -0
- package/dist/metrics/calculators/mttr.d.ts +21 -0
- package/dist/metrics/calculators/mttr.d.ts.map +1 -0
- package/dist/metrics/calculators/mttr.js +60 -0
- package/dist/metrics/calculators/mttr.js.map +1 -0
- package/dist/metrics/dora-calculator.d.ts +24 -0
- package/dist/metrics/dora-calculator.d.ts.map +1 -0
- package/dist/metrics/dora-calculator.js +104 -0
- package/dist/metrics/dora-calculator.js.map +1 -0
- package/dist/metrics/github-client.d.ts +51 -0
- package/dist/metrics/github-client.d.ts.map +1 -0
- package/dist/metrics/github-client.js +133 -0
- package/dist/metrics/github-client.js.map +1 -0
- package/dist/metrics/types.d.ts +112 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +10 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/metrics/utils/percentile.d.ts +25 -0
- package/dist/metrics/utils/percentile.d.ts.map +1 -0
- package/dist/metrics/utils/percentile.js +46 -0
- package/dist/metrics/utils/percentile.js.map +1 -0
- package/dist/metrics/utils/tier-classifier.d.ts +61 -0
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -0
- package/dist/metrics/utils/tier-classifier.js +100 -0
- package/dist/metrics/utils/tier-classifier.js.map +1 -0
- package/dist/utils/auth-helpers.d.ts +58 -0
- package/dist/utils/auth-helpers.d.ts.map +1 -0
- package/dist/utils/auth-helpers.js +108 -0
- package/dist/utils/auth-helpers.js.map +1 -0
- package/dist/utils/env-file.d.ts +88 -0
- package/dist/utils/env-file.d.ts.map +1 -0
- package/dist/utils/env-file.js +180 -0
- package/dist/utils/env-file.js.map +1 -0
- package/dist/utils/plugin-detection.d.ts +50 -0
- package/dist/utils/plugin-detection.d.ts.map +1 -0
- package/dist/utils/plugin-detection.js +229 -0
- package/dist/utils/plugin-detection.js.map +1 -0
- package/dist/utils/secrets-loader.d.ts +88 -0
- package/dist/utils/secrets-loader.d.ts.map +1 -0
- package/dist/utils/secrets-loader.js +271 -0
- package/dist/utils/secrets-loader.js.map +1 -0
- package/dist/utils/translation.d.ts +187 -0
- package/dist/utils/translation.d.ts.map +1 -0
- package/dist/utils/translation.js +414 -0
- package/dist/utils/translation.js.map +1 -0
- package/package.json +28 -44
- package/plugins/specweave/.claude-plugin/plugin.json +3 -3
- package/plugins/specweave/agents/pm/AGENT.md +330 -54
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +1035 -0
- package/plugins/specweave/agents/test-aware-planner/templates/README.md +118 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-non-testable.md.template +24 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-testable.md.template +53 -0
- package/plugins/specweave/agents/test-aware-planner/templates/tasks-frontmatter.md.template +11 -0
- package/plugins/specweave/commands/README.md +88 -163
- package/plugins/specweave/commands/specweave-abandon.md +314 -0
- package/plugins/specweave/commands/specweave-check-tests.md +546 -0
- package/plugins/specweave/commands/{do.md → specweave-do.md} +5 -5
- package/plugins/specweave/commands/{done.md → specweave-done.md} +2 -0
- package/plugins/specweave/commands/{increment.md → specweave-increment.md} +231 -4
- package/plugins/specweave/commands/specweave-pause.md +189 -0
- package/plugins/specweave/commands/specweave-qa.md +245 -0
- package/plugins/specweave/commands/specweave-resume.md +216 -0
- package/plugins/specweave/commands/specweave-status.md +397 -0
- package/plugins/specweave/commands/specweave-sync-tasks.md +256 -0
- package/plugins/specweave/commands/{translate.md → specweave-translate.md} +3 -3
- package/plugins/specweave/commands/specweave-update-scope.md +351 -0
- package/plugins/specweave/commands/{validate.md → specweave-validate.md} +2 -0
- package/plugins/specweave/commands/specweave.md +21 -21
- package/plugins/specweave/hooks/docs-changed.sh +23 -3
- package/plugins/specweave/hooks/human-input-required.sh +23 -3
- package/plugins/specweave/hooks/post-increment-planning.sh +335 -0
- package/plugins/specweave/hooks/post-task-completion.sh +161 -1
- package/plugins/specweave/hooks/pre-implementation.sh +23 -3
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +9 -9
- package/plugins/specweave/skills/increment-planner/SKILL.md +400 -212
- package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +499 -0
- package/plugins/specweave/skills/plugin-detector/SKILL.md +114 -1
- package/plugins/specweave/skills/project-kickstarter/SKILL.md +74 -1
- package/plugins/specweave/skills/{rfc-generator → spec-generator}/SKILL.md +22 -29
- package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
- package/plugins/specweave/skills/specweave-framework/SKILL.md +2 -2
- package/plugins/specweave-ado/.claude-plugin/plugin.json +18 -4
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +426 -0
- package/plugins/specweave-ado/commands/close-workitem.md +52 -0
- package/plugins/specweave-ado/commands/create-workitem.md +53 -0
- package/plugins/specweave-ado/commands/status.md +53 -0
- package/plugins/specweave-ado/commands/sync.md +55 -0
- package/plugins/specweave-ado/lib/ado-client.ts +361 -0
- package/plugins/specweave-ado/reference/ado-specweave-mapping.md +552 -0
- package/plugins/specweave-ado/skills/ado-sync/SKILL.md +344 -193
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +73 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +49 -0
- package/plugins/specweave-github/commands/{github-close-issue.md → close-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-create-issue.md → create-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-status.md → status.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync-tasks.md → sync-tasks.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync.md → sync.md} +1 -1
- package/plugins/specweave-github/reference/github-specweave-mapping.md +377 -0
- package/plugins/specweave-github/skills/github-sync/SKILL.md +11 -3
- package/plugins/specweave-infrastructure/commands/{specweave.monitor-setup.md → monitor-setup.md} +5 -0
- package/plugins/specweave-infrastructure/commands/{specweave.slo-implement.md → slo-implement.md} +5 -0
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +380 -0
- package/plugins/specweave-jira/commands/{specweave.sync-jira.md → sync.md} +1 -1
- package/plugins/specweave-jira/reference/jira-specweave-mapping.md +508 -0
- package/plugins/specweave-ml/commands/ml-deploy.md +1 -1
- package/plugins/specweave-ml/commands/ml-evaluate.md +1 -1
- package/plugins/specweave-ml/commands/ml-explain.md +1 -1
- package/plugins/specweave-ml/commands/{specweave.ml-pipeline.md → ml-pipeline.md} +5 -0
- package/src/templates/AGENTS.md.template +652 -1
- package/src/templates/CLAUDE.md.template +36 -21
- package/src/templates/COMPLETION-REPORT.template.md +128 -0
- package/src/templates/README.md.template +17 -16
- package/src/templates/docs/README.md +11 -9
- package/src/templates/docs/spec-template.md +229 -0
- package/dist/adapters/copilot/adapter.d.ts +0 -86
- package/dist/adapters/copilot/adapter.d.ts.map +0 -1
- package/dist/adapters/copilot/adapter.js +0 -396
- package/dist/adapters/copilot/adapter.js.map +0 -1
- package/plugins/.specweave/logs/hooks-debug.log +0 -24
- package/plugins/.specweave/logs/last-hook-fire +0 -1
- package/plugins/.specweave/logs/last-todowrite-time +0 -1
- package/plugins/.specweave/logs/tasks.log +0 -6
- package/plugins/specweave/commands/inc.md +0 -85
- package/plugins/specweave/commands/list-increments.md +0 -180
- package/src/adapters/README.md +0 -311
- package/src/adapters/adapter-base.ts +0 -182
- package/src/adapters/adapter-interface.ts +0 -166
- package/src/adapters/adapter-loader.ts +0 -259
- package/src/adapters/agents-md-generator.ts +0 -228
- package/src/adapters/claude/README.md +0 -233
- package/src/adapters/claude/adapter.ts +0 -468
- package/src/adapters/claude-md-generator.ts +0 -377
- package/src/adapters/codex/README.md +0 -105
- package/src/adapters/codex/adapter.ts +0 -333
- package/src/adapters/copilot/README.md +0 -240
- package/src/adapters/copilot/adapter.ts +0 -444
- package/src/adapters/cursor/.cursor/context/docs-context.md +0 -62
- package/src/adapters/cursor/.cursor/context/increments-context.md +0 -71
- package/src/adapters/cursor/.cursor/context/strategy-context.md +0 -73
- package/src/adapters/cursor/.cursor/context/tests-context.md +0 -89
- package/src/adapters/cursor/README.md +0 -283
- package/src/adapters/cursor/adapter.ts +0 -451
- package/src/adapters/doc-generator.ts +0 -331
- package/src/adapters/gemini/README.md +0 -97
- package/src/adapters/gemini/adapter.ts +0 -298
- package/src/adapters/generic/README.md +0 -277
- package/src/adapters/generic/adapter.ts +0 -359
- package/src/adapters/registry.yaml +0 -187
- /package/plugins/specweave/commands/{costs.md → specweave-costs.md} +0 -0
- /package/plugins/specweave/commands/{next.md → specweave-next.md} +0 -0
- /package/plugins/specweave/commands/{progress.md → specweave-progress.md} +0 -0
- /package/plugins/specweave/commands/{sync-docs.md → specweave-sync-docs.md} +0 -0
- /package/plugins/specweave/commands/{tdd-cycle.md → specweave-tdd-cycle.md} +0 -0
- /package/plugins/specweave/commands/{tdd-green.md → specweave-tdd-green.md} +0 -0
- /package/plugins/specweave/commands/{tdd-red.md → specweave-tdd-red.md} +0 -0
- /package/plugins/specweave/commands/{tdd-refactor.md → specweave-tdd-refactor.md} +0 -0
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
# Jira ↔ SpecWeave Concept Mapping
|
|
2
|
+
|
|
3
|
+
**Purpose**: Quick reference for mapping Jira concepts to SpecWeave architecture
|
|
4
|
+
|
|
5
|
+
**Source of Truth**: [.specweave/docs/internal/delivery/guides/tool-concept-mapping.md](../../../.specweave/docs/internal/delivery/guides/tool-concept-mapping.md)
|
|
6
|
+
|
|
7
|
+
**Last Synced**: 2025-11-04
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🚨 CRITICAL: Agents MUST Follow This Mapping
|
|
12
|
+
|
|
13
|
+
When syncing between Jira and SpecWeave, you **MUST** use these exact mappings. Do not deviate or create custom mappings.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Core Concept Mapping
|
|
18
|
+
|
|
19
|
+
| Jira Concept | SpecWeave Concept | Location | Mapping Rule |
|
|
20
|
+
|--------------|-------------------|----------|--------------|
|
|
21
|
+
| **Epic** | Increment | `.specweave/increments/####-{name}/` | 1 Epic = 1 Increment (1:1) |
|
|
22
|
+
| **Story (business)** | PRD | `.specweave/docs/internal/strategy/prd-{name}.md` | Business requirement stories |
|
|
23
|
+
| **Story (technical)** | RFC | `.specweave/docs/internal/architecture/rfc/####-{name}.md` | Technical design stories |
|
|
24
|
+
| **Task** | Task | `.specweave/increments/####-{name}/tasks.md` | Implementation tasks |
|
|
25
|
+
| **Subtask** | Subtask | Same as Task | Sub-items in tasks.md |
|
|
26
|
+
| **Bug** | Incident | `.specweave/docs/internal/operations/incidents/{id}.md` | Operational issues |
|
|
27
|
+
| **Sprint** | Release Plan | `.specweave/docs/internal/delivery/release-v{version}.md` | Sprint = Release iteration |
|
|
28
|
+
| **Component** | Module | `.specweave/docs/internal/architecture/{module}/` | Code/doc modules |
|
|
29
|
+
| **Label** | Tag | `metadata.json` → tags | Filtering/categorization |
|
|
30
|
+
| **Version** | Release | `.specweave/docs/internal/delivery/release-v{version}.md` | Release versions |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Epic → Increment Mapping (MANDATORY 1:1)
|
|
35
|
+
|
|
36
|
+
**Rule**: **ONE Jira Epic = ONE SpecWeave Increment**
|
|
37
|
+
|
|
38
|
+
This is the **MOST CRITICAL** mapping. Never deviate from this 1:1 relationship.
|
|
39
|
+
|
|
40
|
+
**Bidirectional Link**:
|
|
41
|
+
```yaml
|
|
42
|
+
# .specweave/increments/####-{name}/metadata.json
|
|
43
|
+
{
|
|
44
|
+
"external_ids": {
|
|
45
|
+
"jira": {
|
|
46
|
+
"epic": "PROJ-123",
|
|
47
|
+
"epic_url": "https://company.atlassian.net/browse/PROJ-123",
|
|
48
|
+
"project_key": "PROJ"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Example**:
|
|
55
|
+
```
|
|
56
|
+
Jira Epic: PROJ-123 "User Authentication"
|
|
57
|
+
↓
|
|
58
|
+
SpecWeave: .specweave/increments/0005-user-authentication/
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Story Type Detection (Context-Dependent)
|
|
64
|
+
|
|
65
|
+
**Critical Decision Tree** (use this EXACTLY):
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
Is the story primarily a business requirement?
|
|
69
|
+
├─ YES → PRD (.specweave/docs/internal/strategy/prd-{name}.md)
|
|
70
|
+
│ Example: "As a user, I want to log in with email so I can access my account"
|
|
71
|
+
│
|
|
72
|
+
└─ NO → Is it a technical design/API change?
|
|
73
|
+
├─ YES → RFC (.specweave/docs/internal/architecture/rfc/####-{name}.md)
|
|
74
|
+
│ Example: "Design OAuth 2.0 authentication API"
|
|
75
|
+
│
|
|
76
|
+
└─ NO → Is it an architecture decision?
|
|
77
|
+
├─ YES → ADR (.specweave/docs/internal/architecture/adr/####-{decision}.md)
|
|
78
|
+
│ Example: "Decide between OAuth 2.0 vs SAML"
|
|
79
|
+
│
|
|
80
|
+
└─ NO → Task (.specweave/increments/####-{name}/tasks.md)
|
|
81
|
+
Example: "Write unit tests for login endpoint"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Detection Rules** (use Jira fields):
|
|
85
|
+
1. **Business Story → PRD**:
|
|
86
|
+
- Issue type: Story
|
|
87
|
+
- Labels: `business`, `requirement`, `user-story`
|
|
88
|
+
- Description contains: "As a user", "I want to", "so that"
|
|
89
|
+
|
|
90
|
+
2. **Technical Story → RFC**:
|
|
91
|
+
- Issue type: Story
|
|
92
|
+
- Labels: `technical`, `design`, `api`, `architecture`
|
|
93
|
+
- Description contains: "Design", "Implement", "API", "Technical"
|
|
94
|
+
|
|
95
|
+
3. **Architecture Decision → ADR**:
|
|
96
|
+
- Issue type: Story or Task
|
|
97
|
+
- Labels: `decision`, `adr`, `architecture-decision`
|
|
98
|
+
- Summary starts with: "Decide", "Choose", "Select", "Evaluate"
|
|
99
|
+
|
|
100
|
+
4. **Implementation Task → Task**:
|
|
101
|
+
- Issue type: Task or Subtask
|
|
102
|
+
- No special labels
|
|
103
|
+
- Specific, actionable work
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Status Mapping (MUST BE EXACT)
|
|
108
|
+
|
|
109
|
+
| Jira Status | SpecWeave Status | Notes |
|
|
110
|
+
|-------------|------------------|-------|
|
|
111
|
+
| `To Do` | `planned` | Not started |
|
|
112
|
+
| `In Progress` | `in_progress` | Active development |
|
|
113
|
+
| `In Review` | `in_progress` | Code review, still in progress |
|
|
114
|
+
| `Done` | `completed` | Fully complete |
|
|
115
|
+
| `On Hold` | `on_hold` | Temporarily paused |
|
|
116
|
+
| `Won't Do` | `cancelled` | Decided not to do |
|
|
117
|
+
|
|
118
|
+
**Custom Statuses** (map to closest standard):
|
|
119
|
+
- `Backlog` → `planned`
|
|
120
|
+
- `Selected for Development` → `planned`
|
|
121
|
+
- `In Development` → `in_progress`
|
|
122
|
+
- `Code Review` → `in_progress`
|
|
123
|
+
- `Testing` → `in_progress`
|
|
124
|
+
- `Deployed` → `completed`
|
|
125
|
+
- `Rejected` → `cancelled`
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Priority Mapping
|
|
130
|
+
|
|
131
|
+
| Jira Priority | SpecWeave Priority | Description |
|
|
132
|
+
|---------------|-------------------|-------------|
|
|
133
|
+
| `Highest` | `P1` | Critical, must do now |
|
|
134
|
+
| `High` | `P2` | High priority |
|
|
135
|
+
| `Medium` | `P3` | Medium priority |
|
|
136
|
+
| `Low` | `P4` | Low priority, nice-to-have |
|
|
137
|
+
| (unset) | `P3` | Default to medium |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Sprint → Release Plan Mapping
|
|
142
|
+
|
|
143
|
+
**Mapping Rule**: 1 Jira Sprint = 1 SpecWeave Release Plan
|
|
144
|
+
|
|
145
|
+
**Example**:
|
|
146
|
+
```
|
|
147
|
+
Jira: Sprint 1 "Jan 1-14" (User Authentication)
|
|
148
|
+
↓
|
|
149
|
+
SpecWeave: .specweave/docs/internal/delivery/release-v1.0.md
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Release Plan Contents**:
|
|
153
|
+
- **What increments are included**: List of increment IDs (0005, 0006, 0007)
|
|
154
|
+
- **What features ship**: User-facing features (login, password reset, 2FA)
|
|
155
|
+
- **Testing strategy**: E2E, integration, unit test plans
|
|
156
|
+
- **Rollout plan**: Blue-green, canary, phased rollout
|
|
157
|
+
- **Rollback plan**: How to revert if issues
|
|
158
|
+
- **Success metrics**: DORA metrics, test coverage, uptime
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Task → Task Mapping (Direct)
|
|
163
|
+
|
|
164
|
+
**Mapping Rule**: Jira Tasks map directly to SpecWeave Tasks
|
|
165
|
+
|
|
166
|
+
**Format**:
|
|
167
|
+
```markdown
|
|
168
|
+
# tasks.md
|
|
169
|
+
|
|
170
|
+
## Implementation Tasks
|
|
171
|
+
|
|
172
|
+
- [ ] **T-001**: Set up OAuth 2.0 client config (Jira: PROJ-126)
|
|
173
|
+
- [ ] **T-002**: Implement login endpoint (Jira: PROJ-127)
|
|
174
|
+
- [ ] **T-003**: Write unit tests (Jira: PROJ-128)
|
|
175
|
+
- [ ] **T-004**: Write E2E tests (Jira: PROJ-129)
|
|
176
|
+
- [ ] **T-005**: Deploy to staging (Jira: PROJ-130)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Bidirectional Link**:
|
|
180
|
+
```yaml
|
|
181
|
+
# metadata.json
|
|
182
|
+
{
|
|
183
|
+
"external_ids": {
|
|
184
|
+
"jira": {
|
|
185
|
+
"tasks": [
|
|
186
|
+
{"id": "T-001", "jira_key": "PROJ-126"},
|
|
187
|
+
{"id": "T-002", "jira_key": "PROJ-127"},
|
|
188
|
+
{"id": "T-003", "jira_key": "PROJ-128"}
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Bug → Incident Mapping
|
|
198
|
+
|
|
199
|
+
**Rule**: Bugs are operational incidents, not development tasks
|
|
200
|
+
|
|
201
|
+
**Location**: `.specweave/docs/internal/operations/incidents/{id}.md`
|
|
202
|
+
|
|
203
|
+
**Why**: Bugs discovered in production are operational issues requiring postmortems, not feature work.
|
|
204
|
+
|
|
205
|
+
**Example**:
|
|
206
|
+
```markdown
|
|
207
|
+
# Incident: Login Failures on 2025-01-20
|
|
208
|
+
|
|
209
|
+
**Incident ID**: INC-001
|
|
210
|
+
**Jira Bug**: PROJ-999
|
|
211
|
+
**Severity**: P1 (Critical)
|
|
212
|
+
**Status**: Resolved
|
|
213
|
+
|
|
214
|
+
## Timeline
|
|
215
|
+
|
|
216
|
+
- 10:00 AM: Users report login failures
|
|
217
|
+
- 10:15 AM: On-call engineer investigates
|
|
218
|
+
- 10:30 AM: Root cause identified (expired SSL cert)
|
|
219
|
+
- 10:45 AM: SSL cert renewed
|
|
220
|
+
- 11:00 AM: Service restored
|
|
221
|
+
|
|
222
|
+
## Root Cause
|
|
223
|
+
|
|
224
|
+
SSL certificate expired, causing HTTPS handshake failures.
|
|
225
|
+
|
|
226
|
+
## Resolution
|
|
227
|
+
|
|
228
|
+
Renewed SSL cert via Let's Encrypt. Implemented automated renewal.
|
|
229
|
+
|
|
230
|
+
## Prevention
|
|
231
|
+
|
|
232
|
+
- [ ] Set up SSL cert expiration monitoring (created Jira story PROJ-1000)
|
|
233
|
+
- [ ] Automate cert renewal
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Component → Module Mapping
|
|
239
|
+
|
|
240
|
+
**Jira Component** maps to **SpecWeave Module** (architecture folder)
|
|
241
|
+
|
|
242
|
+
**Example**:
|
|
243
|
+
```
|
|
244
|
+
Jira Component: "Frontend - Authentication"
|
|
245
|
+
↓
|
|
246
|
+
SpecWeave: .specweave/docs/internal/architecture/frontend-auth/
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Module Contents**:
|
|
250
|
+
- HLD (High-Level Design)
|
|
251
|
+
- Component diagrams
|
|
252
|
+
- API contracts
|
|
253
|
+
- Data models
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Sync Scenarios (Step-by-Step)
|
|
258
|
+
|
|
259
|
+
### Scenario 1: New Jira Epic Created
|
|
260
|
+
|
|
261
|
+
**What Happens**:
|
|
262
|
+
1. Jira webhook fires: "Epic PROJ-123 created"
|
|
263
|
+
2. SpecWeave receives webhook
|
|
264
|
+
3. SpecWeave creates new increment:
|
|
265
|
+
```bash
|
|
266
|
+
.specweave/increments/0001-user-authentication/
|
|
267
|
+
├── metadata.json # external_ids.jira.epic = PROJ-123
|
|
268
|
+
├── spec.md
|
|
269
|
+
├── plan.md
|
|
270
|
+
└── tasks.md
|
|
271
|
+
```
|
|
272
|
+
4. SpecWeave creates PRD stub:
|
|
273
|
+
```bash
|
|
274
|
+
.specweave/docs/internal/strategy/prd-user-authentication.md
|
|
275
|
+
```
|
|
276
|
+
5. SpecWeave logs sync in `.specweave/logs/jira-sync.json`
|
|
277
|
+
|
|
278
|
+
### Scenario 2: Jira Epic Status Changed
|
|
279
|
+
|
|
280
|
+
**What Happens**:
|
|
281
|
+
1. Jira webhook: "Epic PROJ-123 status changed to In Progress"
|
|
282
|
+
2. SpecWeave receives webhook
|
|
283
|
+
3. SpecWeave updates `metadata.json`:
|
|
284
|
+
```json
|
|
285
|
+
{
|
|
286
|
+
"status": "in_progress",
|
|
287
|
+
"started": "2025-01-20T10:00:00Z",
|
|
288
|
+
"updated": "2025-01-20T10:00:00Z"
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
4. SpecWeave commits change: `sync: Epic PROJ-123 status → in_progress`
|
|
292
|
+
|
|
293
|
+
### Scenario 3: New Story Added to Epic
|
|
294
|
+
|
|
295
|
+
**What Happens**:
|
|
296
|
+
1. Jira: Story PROJ-124 created, linked to Epic PROJ-123
|
|
297
|
+
2. SpecWeave receives webhook
|
|
298
|
+
3. SpecWeave analyzes story:
|
|
299
|
+
- Is it business requirement? → Create PRD
|
|
300
|
+
- Is it technical design? → Create RFC
|
|
301
|
+
4. SpecWeave updates `metadata.json`:
|
|
302
|
+
```json
|
|
303
|
+
{
|
|
304
|
+
"external_ids": {
|
|
305
|
+
"jira": {
|
|
306
|
+
"stories": ["PROJ-124"]
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"docs": {
|
|
310
|
+
"prd": ".specweave/docs/internal/strategy/prd-user-authentication.md"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Scenario 4: SpecWeave ADR Created → Sync to Jira
|
|
316
|
+
|
|
317
|
+
**What Happens**:
|
|
318
|
+
1. Developer creates ADR locally:
|
|
319
|
+
```bash
|
|
320
|
+
.specweave/docs/internal/architecture/adr/0001-use-oauth2.md
|
|
321
|
+
```
|
|
322
|
+
2. Developer commits and pushes
|
|
323
|
+
3. SpecWeave post-commit hook detects new ADR
|
|
324
|
+
4. SpecWeave finds related increment (via `metadata.json` → docs.adrs)
|
|
325
|
+
5. SpecWeave creates Jira story:
|
|
326
|
+
- Title: "ADR 0001: Use OAuth 2.0"
|
|
327
|
+
- Type: Story
|
|
328
|
+
- Parent: Epic PROJ-123
|
|
329
|
+
- Link: URL to ADR in repo
|
|
330
|
+
6. SpecWeave updates `metadata.json`:
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"external_ids": {
|
|
334
|
+
"jira": {
|
|
335
|
+
"stories": ["PROJ-124", "PROJ-131"]
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
"docs": {
|
|
339
|
+
"adrs": [
|
|
340
|
+
".specweave/docs/internal/architecture/adr/0001-use-oauth2.md"
|
|
341
|
+
]
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Conflict Resolution
|
|
349
|
+
|
|
350
|
+
### Conflict: Both Jira and SpecWeave Changed Status
|
|
351
|
+
|
|
352
|
+
**Scenario**:
|
|
353
|
+
- Jira Epic PROJ-123: Status changed from "In Progress" → "Done" (at 10:00 AM)
|
|
354
|
+
- SpecWeave Increment 0001: Status changed from "in_progress" → "on_hold" (at 10:05 AM)
|
|
355
|
+
- Last sync: 9:00 AM
|
|
356
|
+
|
|
357
|
+
**Detection**:
|
|
358
|
+
- Sync runs at 10:15 AM
|
|
359
|
+
- Finds both changed since last sync
|
|
360
|
+
|
|
361
|
+
**Resolution Options**:
|
|
362
|
+
|
|
363
|
+
1. **Prompt User** (default):
|
|
364
|
+
```
|
|
365
|
+
Conflict detected for increment 0001-user-authentication:
|
|
366
|
+
- Jira Epic PROJ-123: Done (changed at 10:00 AM)
|
|
367
|
+
- SpecWeave: on_hold (changed at 10:05 AM)
|
|
368
|
+
|
|
369
|
+
Which version to keep?
|
|
370
|
+
1) Use Jira (Done)
|
|
371
|
+
2) Use SpecWeave (on_hold)
|
|
372
|
+
3) Merge manually
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
2. **Auto-Resolve (configured)**:
|
|
376
|
+
- SpecWeave wins (local is source of truth)
|
|
377
|
+
- Jira wins (team collaboration via Jira)
|
|
378
|
+
|
|
379
|
+
3. **Log Conflict**:
|
|
380
|
+
```json
|
|
381
|
+
// .specweave/logs/jira-sync.json
|
|
382
|
+
{
|
|
383
|
+
"conflicts": [
|
|
384
|
+
{
|
|
385
|
+
"increment": "0001",
|
|
386
|
+
"field": "status",
|
|
387
|
+
"jira_value": "Done",
|
|
388
|
+
"specweave_value": "on_hold",
|
|
389
|
+
"timestamp": "2025-01-20T10:15:00Z",
|
|
390
|
+
"resolution": "manual",
|
|
391
|
+
"resolved_by": "@john-doe",
|
|
392
|
+
"resolved_at": "2025-01-20T10:20:00Z",
|
|
393
|
+
"final_value": "on_hold"
|
|
394
|
+
}
|
|
395
|
+
]
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## Traceability Examples
|
|
402
|
+
|
|
403
|
+
### Example 1: From Jira Epic to Code
|
|
404
|
+
|
|
405
|
+
**Start**: Jira Epic PROJ-123 "User Authentication"
|
|
406
|
+
|
|
407
|
+
**Trace** (`specweave trace --jira PROJ-123`):
|
|
408
|
+
```
|
|
409
|
+
Jira Epic: PROJ-123 "User Authentication"
|
|
410
|
+
↓
|
|
411
|
+
SpecWeave Increment: 0001-user-authentication
|
|
412
|
+
↓
|
|
413
|
+
PRD: .specweave/docs/internal/strategy/prd-user-authentication.md
|
|
414
|
+
(Jira Story: PROJ-124)
|
|
415
|
+
↓
|
|
416
|
+
HLD: .specweave/docs/internal/architecture/hld-user-authentication.md
|
|
417
|
+
↓
|
|
418
|
+
ADR: .specweave/docs/internal/architecture/adr/0001-use-oauth2.md
|
|
419
|
+
(Jira Story: PROJ-131)
|
|
420
|
+
ADR: .specweave/docs/internal/architecture/adr/0002-use-auth0.md
|
|
421
|
+
(Jira Story: PROJ-132)
|
|
422
|
+
↓
|
|
423
|
+
RFC: .specweave/docs/internal/architecture/rfc/0001-auth-api.md
|
|
424
|
+
(Jira Story: PROJ-125)
|
|
425
|
+
↓
|
|
426
|
+
Code: src/services/auth/
|
|
427
|
+
↓
|
|
428
|
+
Tests: tests/e2e/auth.spec.ts
|
|
429
|
+
↓
|
|
430
|
+
Runbook: .specweave/docs/internal/operations/runbook-auth-service.md
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Example 2: From Code to Jira Epic
|
|
434
|
+
|
|
435
|
+
**Start**: Code file `src/services/auth/oauth.ts`
|
|
436
|
+
|
|
437
|
+
**Trace** (`specweave trace --file src/services/auth/oauth.ts`):
|
|
438
|
+
```
|
|
439
|
+
File: src/services/auth/oauth.ts
|
|
440
|
+
↓
|
|
441
|
+
Increment: 0001-user-authentication
|
|
442
|
+
↓
|
|
443
|
+
Jira Epic: PROJ-123 "User Authentication"
|
|
444
|
+
URL: https://company.atlassian.net/browse/PROJ-123
|
|
445
|
+
↓
|
|
446
|
+
PRD: .specweave/docs/internal/strategy/prd-user-authentication.md
|
|
447
|
+
HLD: .specweave/docs/internal/architecture/hld-user-authentication.md
|
|
448
|
+
ADRs:
|
|
449
|
+
- 0001-use-oauth2.md (Jira: PROJ-131)
|
|
450
|
+
- 0002-use-auth0.md (Jira: PROJ-132)
|
|
451
|
+
RFCs:
|
|
452
|
+
- 0001-auth-api.md (Jira: PROJ-125)
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## Validation Checklist
|
|
458
|
+
|
|
459
|
+
**Before syncing, verify**:
|
|
460
|
+
- [ ] Jira Epic exists and is accessible
|
|
461
|
+
- [ ] Increment metadata has valid Jira link
|
|
462
|
+
- [ ] Status mapping follows rules above (no custom mappings)
|
|
463
|
+
- [ ] Priority mapped correctly (P1/P2/P3/P4)
|
|
464
|
+
- [ ] Story type detection used decision tree (PRD vs RFC vs ADR vs Task)
|
|
465
|
+
- [ ] Bidirectional links are valid (Epic ↔ Increment)
|
|
466
|
+
- [ ] Task IDs match between Jira and SpecWeave
|
|
467
|
+
- [ ] Conflicts resolved (if any)
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## Security: Jira API Token
|
|
472
|
+
|
|
473
|
+
**Required**:
|
|
474
|
+
- Jira API Token (from https://id.atlassian.com/manage-profile/security/api-tokens)
|
|
475
|
+
- Jira Email
|
|
476
|
+
- Jira Domain (e.g., company.atlassian.net)
|
|
477
|
+
|
|
478
|
+
**Storage**:
|
|
479
|
+
```bash
|
|
480
|
+
# .env (gitignored)
|
|
481
|
+
JIRA_API_TOKEN=your-token-here
|
|
482
|
+
JIRA_EMAIL=your-email@example.com
|
|
483
|
+
JIRA_DOMAIN=company.atlassian.net
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Authentication**:
|
|
487
|
+
```bash
|
|
488
|
+
# Basic Auth: base64(email:token)
|
|
489
|
+
AUTH=$(echo -n "$JIRA_EMAIL:$JIRA_API_TOKEN" | base64)
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
**Never**:
|
|
493
|
+
- ❌ Log or commit API token
|
|
494
|
+
- ❌ Share token via Slack/email
|
|
495
|
+
- ❌ Use token with excessive permissions
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## Related Documentation
|
|
500
|
+
|
|
501
|
+
- **Full Mapping Guide**: [.specweave/docs/internal/delivery/guides/tool-concept-mapping.md](../../../.specweave/docs/internal/delivery/guides/tool-concept-mapping.md)
|
|
502
|
+
- **Jira Sync Skill**: [../skills/jira-sync/SKILL.md](../skills/jira-sync/SKILL.md)
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
**Last Updated**: 2025-11-04
|
|
507
|
+
**Version**: 1.0.0
|
|
508
|
+
**Plugin**: specweave-jira
|