specweave 0.26.13 → 0.27.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.
Files changed (176) hide show
  1. package/CLAUDE.md +73 -1
  2. package/README.md +111 -466
  3. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +1 -1
  4. package/dist/plugins/specweave-jira/lib/setup-wizard.js +57 -78
  5. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -1
  6. package/dist/src/cli/commands/import-docs.d.ts.map +1 -1
  7. package/dist/src/cli/commands/import-docs.js +23 -31
  8. package/dist/src/cli/commands/import-docs.js.map +1 -1
  9. package/dist/src/cli/commands/import-external.d.ts.map +1 -1
  10. package/dist/src/cli/commands/import-external.js +6 -10
  11. package/dist/src/cli/commands/import-external.js.map +1 -1
  12. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  13. package/dist/src/cli/commands/init-multiproject.js +58 -73
  14. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  15. package/dist/src/cli/commands/init.d.ts +17 -11
  16. package/dist/src/cli/commands/init.d.ts.map +1 -1
  17. package/dist/src/cli/commands/init.js +221 -1874
  18. package/dist/src/cli/commands/init.js.map +1 -1
  19. package/dist/src/cli/commands/install.d.ts.map +1 -1
  20. package/dist/src/cli/commands/install.js +14 -22
  21. package/dist/src/cli/commands/install.js.map +1 -1
  22. package/dist/src/cli/commands/migrate-config.d.ts.map +1 -1
  23. package/dist/src/cli/commands/migrate-config.js +6 -10
  24. package/dist/src/cli/commands/migrate-config.js.map +1 -1
  25. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  26. package/dist/src/cli/commands/switch-project.js.map +1 -1
  27. package/dist/src/cli/helpers/ado-area-path-mapper.d.ts.map +1 -1
  28. package/dist/src/cli/helpers/ado-area-path-mapper.js +36 -49
  29. package/dist/src/cli/helpers/ado-area-path-mapper.js.map +1 -1
  30. package/dist/src/cli/helpers/github/increment-profile-selector.d.ts.map +1 -1
  31. package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
  32. package/dist/src/cli/helpers/github/profile-manager.d.ts.map +1 -1
  33. package/dist/src/cli/helpers/github/profile-manager.js +8 -11
  34. package/dist/src/cli/helpers/github/profile-manager.js.map +1 -1
  35. package/dist/src/cli/helpers/github-repo-selector.d.ts.map +1 -1
  36. package/dist/src/cli/helpers/github-repo-selector.js +26 -50
  37. package/dist/src/cli/helpers/github-repo-selector.js.map +1 -1
  38. package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -1
  39. package/dist/src/cli/helpers/import-strategy-prompter.js +39 -52
  40. package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -1
  41. package/dist/src/cli/helpers/init/config-detection.d.ts +40 -0
  42. package/dist/src/cli/helpers/init/config-detection.d.ts.map +1 -0
  43. package/dist/src/cli/helpers/init/config-detection.js +125 -0
  44. package/dist/src/cli/helpers/init/config-detection.js.map +1 -0
  45. package/dist/src/cli/helpers/init/directory-structure.d.ts +26 -0
  46. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -0
  47. package/dist/src/cli/helpers/init/directory-structure.js +190 -0
  48. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -0
  49. package/dist/src/cli/helpers/init/external-import.d.ts +15 -0
  50. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -0
  51. package/dist/src/cli/helpers/init/external-import.js +251 -0
  52. package/dist/src/cli/helpers/init/external-import.js.map +1 -0
  53. package/dist/src/cli/helpers/init/index.d.ts +15 -0
  54. package/dist/src/cli/helpers/init/index.d.ts.map +1 -0
  55. package/dist/src/cli/helpers/init/index.js +26 -0
  56. package/dist/src/cli/helpers/init/index.js.map +1 -0
  57. package/dist/src/cli/helpers/init/next-steps.d.ts +15 -0
  58. package/dist/src/cli/helpers/init/next-steps.d.ts.map +1 -0
  59. package/dist/src/cli/helpers/init/next-steps.js +72 -0
  60. package/dist/src/cli/helpers/init/next-steps.js.map +1 -0
  61. package/dist/src/cli/helpers/init/path-utils.d.ts +41 -0
  62. package/dist/src/cli/helpers/init/path-utils.d.ts.map +1 -0
  63. package/dist/src/cli/helpers/init/path-utils.js +146 -0
  64. package/dist/src/cli/helpers/init/path-utils.js.map +1 -0
  65. package/dist/src/cli/helpers/init/plugin-installer.d.ts +28 -0
  66. package/dist/src/cli/helpers/init/plugin-installer.d.ts.map +1 -0
  67. package/dist/src/cli/helpers/init/plugin-installer.js +238 -0
  68. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -0
  69. package/dist/src/cli/helpers/init/repository-setup.d.ts +28 -0
  70. package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -0
  71. package/dist/src/cli/helpers/init/repository-setup.js +78 -0
  72. package/dist/src/cli/helpers/init/repository-setup.js.map +1 -0
  73. package/dist/src/cli/helpers/init/smart-reinit.d.ts +30 -0
  74. package/dist/src/cli/helpers/init/smart-reinit.d.ts.map +1 -0
  75. package/dist/src/cli/helpers/init/smart-reinit.js +140 -0
  76. package/dist/src/cli/helpers/init/smart-reinit.js.map +1 -0
  77. package/dist/src/cli/helpers/init/testing-config.d.ts +27 -0
  78. package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -0
  79. package/dist/src/cli/helpers/init/testing-config.js +131 -0
  80. package/dist/src/cli/helpers/init/testing-config.js.map +1 -0
  81. package/dist/src/cli/helpers/init/types.d.ts +86 -0
  82. package/dist/src/cli/helpers/init/types.d.ts.map +1 -0
  83. package/dist/src/cli/helpers/init/types.js +5 -0
  84. package/dist/src/cli/helpers/init/types.js.map +1 -0
  85. package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts.map +1 -1
  86. package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js +10 -12
  87. package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js.map +1 -1
  88. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  89. package/dist/src/cli/helpers/issue-tracker/ado.js +43 -60
  90. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  91. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  92. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +193 -230
  93. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  94. package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
  95. package/dist/src/cli/helpers/issue-tracker/github.js +43 -54
  96. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
  97. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  98. package/dist/src/cli/helpers/issue-tracker/index.js +27 -40
  99. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  100. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  101. package/dist/src/cli/helpers/issue-tracker/jira.js +54 -70
  102. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  103. package/dist/src/cli/helpers/smart-filter.d.ts.map +1 -1
  104. package/dist/src/cli/helpers/smart-filter.js +62 -85
  105. package/dist/src/cli/helpers/smart-filter.js.map +1 -1
  106. package/dist/src/core/increment/auto-transition-manager.d.ts +12 -0
  107. package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -1
  108. package/dist/src/core/increment/auto-transition-manager.js +45 -0
  109. package/dist/src/core/increment/auto-transition-manager.js.map +1 -1
  110. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  111. package/dist/src/core/increment/metadata-manager.js +46 -0
  112. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  113. package/dist/src/core/increment/status-change-sync-trigger.d.ts +12 -0
  114. package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
  115. package/dist/src/core/increment/status-change-sync-trigger.js +48 -2
  116. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  117. package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -0
  118. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  119. package/dist/src/core/living-docs/living-docs-sync.js +40 -0
  120. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  121. package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
  122. package/dist/src/core/repo-structure/repo-bulk-discovery.js +63 -83
  123. package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
  124. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  125. package/dist/src/core/repo-structure/repo-structure-manager.js +339 -424
  126. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  127. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
  128. package/dist/src/core/sync/bidirectional-engine.js +21 -29
  129. package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
  130. package/dist/src/init/InitFlow.js +15 -19
  131. package/dist/src/init/InitFlow.js.map +1 -1
  132. package/dist/src/init/repo/types.d.ts +1 -1
  133. package/dist/src/integrations/ado/area-path-mapper.d.ts.map +1 -1
  134. package/dist/src/integrations/ado/area-path-mapper.js +19 -23
  135. package/dist/src/integrations/ado/area-path-mapper.js.map +1 -1
  136. package/dist/src/utils/external-resource-validator.d.ts.map +1 -1
  137. package/dist/src/utils/external-resource-validator.js +41 -65
  138. package/dist/src/utils/external-resource-validator.js.map +1 -1
  139. package/dist/src/utils/project-detection.d.ts.map +1 -1
  140. package/dist/src/utils/project-detection.js +19 -21
  141. package/dist/src/utils/project-detection.js.map +1 -1
  142. package/dist/src/utils/project-validator.d.ts.map +1 -1
  143. package/dist/src/utils/project-validator.js +5 -7
  144. package/dist/src/utils/project-validator.js.map +1 -1
  145. package/package.json +2 -3
  146. package/plugins/PLUGINS-INDEX.md +120 -0
  147. package/plugins/specweave/agents/tech-lead/AGENT.md +9 -0
  148. package/plugins/specweave/commands/specweave-increment.md +1 -1
  149. package/plugins/specweave/commands/specweave-update-scope.md +2 -2
  150. package/plugins/specweave/hooks/post-user-story-complete.sh +86 -35
  151. package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +62 -1
  152. package/plugins/specweave/lib/hooks/us-completion-orchestrator.ts +106 -3
  153. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.d.ts +12 -0
  154. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js +45 -0
  155. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js.map +1 -1
  156. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +46 -0
  157. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
  158. package/plugins/specweave/skills/SKILLS-INDEX.md +69 -225
  159. package/plugins/specweave/skills/increment-planner/SKILL.md +10 -5
  160. package/plugins/specweave/skills/specweave-framework/SKILL.md +6 -4
  161. package/plugins/specweave/templates/coding-standards.md.template +36 -0
  162. package/plugins/specweave-ado/commands/specweave-ado-import-projects.md +1 -1
  163. package/plugins/specweave-ado/lib/project-selector.js +56 -67
  164. package/plugins/specweave-ado/lib/project-selector.ts +72 -85
  165. package/plugins/specweave-ado/skills/ado-resource-validator/SKILL.md +1 -1
  166. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +6 -0
  167. package/plugins/specweave-github/lib/repo-selector.js +55 -66
  168. package/plugins/specweave-github/lib/repo-selector.ts +73 -84
  169. package/plugins/specweave-jira/commands/import-projects.js +3 -5
  170. package/plugins/specweave-jira/commands/import-projects.ts +3 -5
  171. package/plugins/specweave-jira/lib/project-selector.js +60 -71
  172. package/plugins/specweave-jira/lib/project-selector.ts +78 -91
  173. package/plugins/specweave-jira/lib/setup-wizard.js +51 -72
  174. package/plugins/specweave-jira/lib/setup-wizard.ts +56 -74
  175. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +9 -0
  176. package/src/templates/CLAUDE.md.template +14 -0
@@ -0,0 +1,120 @@
1
+ # SpecWeave Plugins Index
2
+
3
+ **Purpose**: Lightweight plugin manifest for progressive disclosure. Load plugin content only when triggers match.
4
+
5
+ **Total Plugins**: 27 | **Last Updated**: 2025-11-24
6
+
7
+ ---
8
+
9
+ ## Progressive Loading Pattern
10
+
11
+ 1. **Scan this index** at session start (~5KB)
12
+ 2. **Match triggers** to user intent
13
+ 3. **Load plugin content** only when matched
14
+ 4. **Savings**: ~95% (index only vs all plugins)
15
+
16
+ ---
17
+
18
+ ## Core Plugins (Essential)
19
+
20
+ | Plugin | Triggers | Description |
21
+ |--------|----------|-------------|
22
+ | **specweave** | increment, feature, plan, spec, tasks, TDD, PM, architect | Core framework. Planning, specs, TDD, living docs. |
23
+
24
+ ## Integration Plugins
25
+
26
+ | Plugin | Triggers | Description |
27
+ |--------|----------|-------------|
28
+ | **specweave-github** | GitHub, issues, gh, sync to GitHub, GitHub sync | Bidirectional GitHub Issues sync |
29
+ | **specweave-jira** | JIRA, Jira, epics, stories, sync to JIRA | JIRA integration and sync |
30
+ | **specweave-ado** | Azure DevOps, ADO, work items, Azure boards | Azure DevOps integration |
31
+
32
+ ## Infrastructure Plugins
33
+
34
+ | Plugin | Triggers | Description |
35
+ |--------|----------|-------------|
36
+ | **specweave-infrastructure** | deploy, terraform, kubernetes, docker, CI/CD, devops, AWS, Azure, GCP | Infrastructure-as-Code, DevOps, SRE |
37
+ | **specweave-kubernetes** | k8s, kubernetes, EKS, AKS, GKE, pods, helm, GitOps | Kubernetes architecture, GitOps |
38
+ | **specweave-kafka** | Kafka, event streaming, MSK, Event Hubs, kcat, topics | Apache Kafka integration |
39
+ | **specweave-kafka-streams** | Kafka Streams, KStream, KTable, stream processing | Kafka Streams topology |
40
+ | **specweave-confluent** | Confluent, eCKU, Schema Registry, ksqlDB | Confluent Cloud architecture |
41
+
42
+ ## Frontend Plugins
43
+
44
+ | Plugin | Triggers | Description |
45
+ |--------|----------|-------------|
46
+ | **specweave-frontend** | React, Vue, Angular, Next.js, frontend, UI, components | Frontend architecture, design systems |
47
+ | **specweave-ui** | UI components, design system, Storybook, Figma | UI component development |
48
+ | **specweave-figma** | Figma, design tokens, design-to-code | Figma integration |
49
+ | **specweave-mobile** | React Native, mobile, iOS, Android | Mobile app development |
50
+
51
+ ## Backend Plugins
52
+
53
+ | Plugin | Triggers | Description |
54
+ |--------|----------|-------------|
55
+ | **specweave-backend** | backend, API, REST, GraphQL, database, microservices | Backend architecture |
56
+ | **specweave-payments** | Stripe, PayPal, payments, checkout, subscription, PCI | Payment integration |
57
+
58
+ ## ML/AI Plugins
59
+
60
+ | Plugin | Triggers | Description |
61
+ |--------|----------|-------------|
62
+ | **specweave-ml** | ML, machine learning, model, training, MLOps | ML pipelines, model deployment |
63
+
64
+ ## Quality & Testing
65
+
66
+ | Plugin | Triggers | Description |
67
+ |--------|----------|-------------|
68
+ | **specweave-testing** | test, E2E, Playwright, Vitest, Jest, QA | Test automation, QA strategy |
69
+
70
+ ## Documentation & Release
71
+
72
+ | Plugin | Triggers | Description |
73
+ |--------|----------|-------------|
74
+ | **specweave-docs** | documentation, README, API docs, technical writing | Documentation generation |
75
+ | **specweave-docs-preview** | docs site, Docusaurus, preview, build docs | Documentation preview server |
76
+ | **specweave-release** | release, version, npm publish, changelog, RC | Release management |
77
+
78
+ ## Specialized Plugins
79
+
80
+ | Plugin | Triggers | Description |
81
+ |--------|----------|-------------|
82
+ | **specweave-diagrams** | diagram, Mermaid, C4, architecture diagram | Mermaid diagram generation |
83
+ | **specweave-n8n** | n8n, workflow, automation, no-code | n8n workflow templates |
84
+ | **specweave-alternatives** | alternative, compare, evaluation, technology choice | Technology comparison |
85
+ | **specweave-cost-optimizer** | cost, optimize, reduce cost, cloud cost | Cloud cost optimization |
86
+
87
+ ## Development Plugins
88
+
89
+ | Plugin | Triggers | Description |
90
+ |--------|----------|-------------|
91
+ | **specweave-core** | core utilities, shared, common | Core shared utilities |
92
+ | **specweave-plugin-dev** | create plugin, plugin development | Plugin development guide |
93
+ | **specweave-tooling** | tooling, skill create, agent create | SpecWeave tooling |
94
+
95
+ ---
96
+
97
+ ## Quick Lookup Table
98
+
99
+ | User Intent | Load Plugin |
100
+ |-------------|-------------|
101
+ | "Plan a feature" | `specweave` |
102
+ | "Sync to GitHub" | `specweave-github` |
103
+ | "Deploy to AWS" | `specweave-infrastructure` |
104
+ | "Create React app" | `specweave-frontend` |
105
+ | "Add Stripe payments" | `specweave-payments` |
106
+ | "Set up Kafka" | `specweave-kafka` |
107
+ | "Create K8s manifest" | `specweave-kubernetes` |
108
+ | "ML pipeline" | `specweave-ml` |
109
+ | "Write E2E tests" | `specweave-testing` |
110
+ | "Create release" | `specweave-release` |
111
+
112
+ ---
113
+
114
+ ## Token Efficiency
115
+
116
+ - **This index**: ~150 lines (~3KB)
117
+ - **All plugins loaded**: ~24.6 MB markdown
118
+ - **Savings**: ~99.98% by loading on-demand
119
+
120
+ **Pattern**: Load index → Match triggers → Load only matched plugin content
@@ -36,6 +36,15 @@ Task({
36
36
 
37
37
  **VIOLATION CAUSES CLAUDE CODE CRASHES!** (Incident: 2025-11-24, tech-lead identified as HIGH RISK for 2000+ line implementations)
38
38
 
39
+ ### 🚨 CRITICAL: NEVER SPAWN MULTIPLE TECH-LEAD AGENTS IN PARALLEL
40
+
41
+ **Context is SHARED, not isolated!** Spawning 4 tech-lead agents for "parallel migration" caused 144k token crash on 2025-11-24.
42
+
43
+ ```
44
+ āŒ FORBIDDEN: "Large migration... let me use parallel agents"
45
+ āœ… CORRECT: Single agent, ONE FILE AT A TIME, sequential execution
46
+ ```
47
+
39
48
  When implementing features with multiple files, you MUST create **ONE FILE AT A TIME**:
40
49
 
41
50
  1. **First Response**: Analyze task, list all files needed, ASK which to start with (< 500 tokens)
@@ -236,7 +236,7 @@ if (activeCount >= limits.maxActiveIncrements) {
236
236
  console.log(chalk.dim(' Accept productivity cost (20% slower)\n'));
237
237
 
238
238
  const choice = await prompt({
239
- type: 'list',
239
+ type: 'select',
240
240
  message: 'Choose an option:',
241
241
  choices: [
242
242
  { name: 'Complete current work', value: 'complete' },
@@ -87,7 +87,7 @@ if (active.length === 0) {
87
87
  if (active.length > 1) {
88
88
  // Multiple active - ask which one
89
89
  const choice = await prompt({
90
- type: 'list',
90
+ type: 'select',
91
91
  message: 'Which increment to update?',
92
92
  choices: active.map(inc => ({ name: inc.id, value: inc.id }))
93
93
  });
@@ -120,7 +120,7 @@ const report = fs.readFileSync(reportPath, 'utf-8');
120
120
 
121
121
  ```typescript
122
122
  const changeType = await prompt({
123
- type: 'list',
123
+ type: 'select',
124
124
  message: 'What changed?',
125
125
  choices: [
126
126
  'Added user story',
@@ -45,17 +45,50 @@ echo "šŸŽ‰ Post-User-Story-Complete Hook"
45
45
  echo " Spec: $SPEC_ID"
46
46
  echo " User Story: $USER_STORY_ID"
47
47
 
48
- # Find spec file
49
- SPEC_FILE=""
50
- if [[ -f ".specweave/docs/internal/specs/$SPEC_ID.md" ]]; then
51
- SPEC_FILE=".specweave/docs/internal/specs/$SPEC_ID.md"
52
- elif [[ -f ".specweave/docs/internal/projects/default/specs/$SPEC_ID.md" ]]; then
53
- SPEC_FILE=".specweave/docs/internal/projects/default/specs/$SPEC_ID.md"
54
- else
55
- echo "āŒ Error: Spec file not found for $SPEC_ID"
48
+ # Find user story file in living docs
49
+ # Input: SPEC_ID = increment ID (e.g., "0059-context-optimization-crash-prevention")
50
+ # USER_STORY_ID = US ID (e.g., "US-001")
51
+ # Search in: .specweave/docs/internal/specs/**/us-*.md
52
+
53
+ # STEP 1: Get feature ID from increment spec.md
54
+ INCREMENT_SPEC=".specweave/increments/$SPEC_ID/spec.md"
55
+ FEATURE_ID=""
56
+
57
+ if [[ -f "$INCREMENT_SPEC" ]]; then
58
+ FEATURE_ID=$(head -20 "$INCREMENT_SPEC" | grep "^feature_id:" | head -1 | sed 's/feature_id: *//; s/ *$//' || echo "")
59
+ fi
60
+
61
+ echo " šŸ” Looking for $USER_STORY_ID in feature $FEATURE_ID"
62
+
63
+ # STEP 2: Find user story file by ID AND feature
64
+ # Prioritize files in the correct feature folder
65
+ US_FILE=""
66
+ while IFS= read -r file; do
67
+ # Check if file has matching user story ID in frontmatter
68
+ if head -20 "$file" 2>/dev/null | grep -q "^id: $USER_STORY_ID"; then
69
+ # If feature ID is known, verify the file is in the correct feature folder
70
+ if [[ -n "$FEATURE_ID" ]]; then
71
+ FILE_FEATURE=$(head -20 "$file" 2>/dev/null | grep "^feature:" | head -1 | sed 's/feature: *//; s/ *$//' || echo "")
72
+ if [[ "$FILE_FEATURE" == "$FEATURE_ID" ]]; then
73
+ US_FILE="$file"
74
+ break
75
+ fi
76
+ else
77
+ # No feature filter - take first match
78
+ US_FILE="$file"
79
+ break
80
+ fi
81
+ fi
82
+ done < <(find .specweave/docs/internal/specs -name "us-*.md" -type f 2>/dev/null)
83
+
84
+ if [[ -z "$US_FILE" ]]; then
85
+ echo "āŒ Error: User story file not found for $USER_STORY_ID (feature: $FEATURE_ID) in increment $SPEC_ID"
56
86
  exit 1
57
87
  fi
58
88
 
89
+ echo " šŸ“„ Found user story file: $US_FILE"
90
+ SPEC_FILE="$US_FILE"
91
+
59
92
  # Load config to check if auto-sync is enabled
60
93
  CONFIG_FILE=".specweave/config.json"
61
94
  if [[ ! -f "$CONFIG_FILE" ]]; then
@@ -71,41 +104,48 @@ if [[ "$AUTO_SYNC" != "true" ]]; then
71
104
  exit 0
72
105
  fi
73
106
 
74
- # Parse spec frontmatter to detect external links
75
- # Check if GitHub link exists
76
- GITHUB_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE" | grep -A 5 "github:" | grep "projectId:" | sed 's/.*projectId: *//; s/ *$//' || echo "")
107
+ # Parse user story frontmatter to detect external links
108
+ # User story files have format:
109
+ # external:
110
+ # github:
111
+ # issue: 745
112
+ # url: https://github.com/...
113
+
114
+ # Extract GitHub issue number from frontmatter
115
+ GITHUB_ISSUE=$(head -20 "$SPEC_FILE" | grep -A 5 "github:" | grep "issue:" | head -1 | sed 's/.*issue: *//; s/ *$//' || echo "")
77
116
 
78
- # Check if Jira link exists
79
- JIRA_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE" | grep -A 5 "jira:" | grep "epicKey:" | sed 's/.*epicKey: *//; s/ *$//' || echo "")
117
+ # Extract Jira issue from frontmatter
118
+ JIRA_ISSUE=$(head -20 "$SPEC_FILE" | grep -A 5 "jira:" | grep "issue:" | head -1 | sed 's/.*issue: *//; s/ *$//' || echo "")
80
119
 
81
- # Check if ADO link exists
82
- ADO_LINK=$(grep -A 10 "^externalLinks:" "$SPEC_FILE" | grep -A 5 "ado:" | grep "featureId:" | sed 's/.*featureId: *//; s/ *$//' || echo "")
120
+ # Extract ADO work item from frontmatter
121
+ ADO_ITEM=$(head -20 "$SPEC_FILE" | grep -A 5 "ado:" | grep "item:" | head -1 | sed 's/.*item: *//; s/ *$//' || echo "")
83
122
 
84
123
  # Determine which provider to sync
85
124
  PROVIDER=""
86
- if [[ -n "$GITHUB_LINK" ]]; then
125
+ EXTERNAL_ID=""
126
+ if [[ -n "$GITHUB_ISSUE" ]]; then
87
127
  PROVIDER="github"
88
- EXTERNAL_ID="$GITHUB_LINK"
89
- elif [[ -n "$JIRA_LINK" ]]; then
128
+ EXTERNAL_ID="$GITHUB_ISSUE"
129
+ elif [[ -n "$JIRA_ISSUE" ]]; then
90
130
  PROVIDER="jira"
91
- EXTERNAL_ID="$JIRA_LINK"
92
- elif [[ -n "$ADO_LINK" ]]; then
131
+ EXTERNAL_ID="$JIRA_ISSUE"
132
+ elif [[ -n "$ADO_ITEM" ]]; then
93
133
  PROVIDER="ado"
94
- EXTERNAL_ID="$ADO_LINK"
134
+ EXTERNAL_ID="$ADO_ITEM"
95
135
  fi
96
136
 
97
137
  # No external link found - skip sync
98
138
  if [[ -z "$PROVIDER" ]]; then
99
- echo " ā„¹ļø Spec not linked to external tool, skipping sync"
139
+ echo " ā„¹ļø User story not linked to external tool, skipping sync"
100
140
  exit 0
101
141
  fi
102
142
 
103
- echo " šŸ”— Detected external link: $PROVIDER"
143
+ echo " šŸ”— Detected external link: $PROVIDER (ID: $EXTERNAL_ID)"
104
144
 
105
145
  # Update external tool based on provider
106
146
  case "$PROVIDER" in
107
147
  github)
108
- echo " šŸ”„ Updating GitHub Issue for $USER_STORY_ID..."
148
+ echo " šŸ”„ Updating GitHub Issue #$EXTERNAL_ID for $USER_STORY_ID..."
109
149
 
110
150
  # Check if GitHub CLI is available
111
151
  if ! command -v gh &> /dev/null; then
@@ -113,26 +153,37 @@ case "$PROVIDER" in
113
153
  exit 0
114
154
  fi
115
155
 
116
- # Find GitHub Issue for this user story
117
- # Search for issue with title pattern "[USER_STORY_ID]"
156
+ # Use issue number from frontmatter (EXTERNAL_ID = issue number)
157
+ ISSUE_NUMBER="$EXTERNAL_ID"
118
158
  REPO=$(git remote get-url origin | sed -E 's/.*github\.com[:/]([^/]+\/[^/]+)(\.git)?$/\1/')
119
159
 
120
- # Search for issue
121
- ISSUE_NUMBER=$(gh issue list --repo "$REPO" --search "\"[$USER_STORY_ID]\" in:title" --json number --jq '.[0].number' 2>/dev/null || echo "")
160
+ if [[ -z "$ISSUE_NUMBER" || "$ISSUE_NUMBER" == "null" ]]; then
161
+ echo " āš ļø No GitHub Issue number found in user story metadata"
162
+ exit 0
163
+ fi
164
+
165
+ echo " šŸ“ Using GitHub Issue #$ISSUE_NUMBER from metadata"
122
166
 
123
- if [[ -z "$ISSUE_NUMBER" ]]; then
124
- echo " āš ļø GitHub Issue not found for $USER_STORY_ID"
167
+ # Check if issue is already closed
168
+ ISSUE_STATE=$(gh issue view "$ISSUE_NUMBER" --repo "$REPO" --json state --jq '.state' 2>/dev/null || echo "")
169
+ if [[ "$ISSUE_STATE" == "CLOSED" ]]; then
170
+ echo " āœ… GitHub Issue #$ISSUE_NUMBER already closed"
125
171
  exit 0
126
172
  fi
127
173
 
128
- echo " šŸ“ Found GitHub Issue #$ISSUE_NUMBER"
174
+ # Close issue with completion comment
175
+ gh issue close "$ISSUE_NUMBER" --repo "$REPO" --comment "āœ… **User Story Verified Complete**
176
+
177
+ šŸ“Š **Completion Status**:
178
+ - āœ… All Acceptance Criteria satisfied
179
+ - āœ… All implementation tasks complete
129
180
 
130
- # Close issue
131
- gh issue close "$ISSUE_NUMBER" --repo "$REPO" --comment "āœ… User story completed
181
+ **User Story**: $USER_STORY_ID
182
+ **Increment**: $SPEC_ID
132
183
 
133
- šŸ¤– Auto-closed by SpecWeave hook
184
+ šŸ¤– Auto-closed by SpecWeave US Completion Hook
134
185
  Completed at: $(date -u +%Y-%m-%dT%H:%M:%SZ)" 2>/dev/null || {
135
- echo " āš ļø Failed to close issue"
186
+ echo " āš ļø Failed to close issue (may already be closed)"
136
187
  exit 0
137
188
  }
138
189
 
@@ -3,6 +3,59 @@ import { USCompletionDetector } from "../../../../dist/src/core/us-completion-de
3
3
  import { LivingDocsSync } from "../../../../dist/src/core/living-docs/living-docs-sync.js";
4
4
  import { USSyncThrottle } from "../../../../dist/src/core/us-sync-throttle.js";
5
5
  import { consoleLogger } from "../vendor/utils/logger.js";
6
+ import { spawn } from "child_process";
7
+ import { existsSync } from "fs";
8
+ import * as path from "path";
9
+ async function triggerUserStoryCompleteHook(incrementId, usId, projectRoot) {
10
+ const hookPaths = [
11
+ path.join(projectRoot, "plugins/specweave/hooks/post-user-story-complete.sh"),
12
+ path.join(projectRoot, ".claude/hooks/post-user-story-complete.sh")
13
+ ];
14
+ let hookPath = null;
15
+ for (const p of hookPaths) {
16
+ if (existsSync(p)) {
17
+ hookPath = p;
18
+ break;
19
+ }
20
+ }
21
+ if (!hookPath) {
22
+ console.log(` \u2139\uFE0F post-user-story-complete.sh hook not found (skipping external sync)`);
23
+ return;
24
+ }
25
+ return new Promise((resolve, reject) => {
26
+ const hookProcess = spawn("bash", [hookPath, incrementId, usId], {
27
+ cwd: projectRoot,
28
+ env: {
29
+ ...process.env,
30
+ SPECWEAVE_INCREMENT_ID: incrementId,
31
+ SPECWEAVE_USER_STORY_ID: usId
32
+ },
33
+ stdio: ["ignore", "pipe", "pipe"]
34
+ });
35
+ let stdout = "";
36
+ let stderr = "";
37
+ hookProcess.stdout.on("data", (data) => {
38
+ stdout += data.toString();
39
+ });
40
+ hookProcess.stderr.on("data", (data) => {
41
+ stderr += data.toString();
42
+ });
43
+ hookProcess.on("close", (code) => {
44
+ if (code === 0) {
45
+ resolve();
46
+ } else {
47
+ reject(new Error(`Hook exited with code ${code}: ${stderr || stdout}`));
48
+ }
49
+ });
50
+ hookProcess.on("error", (error) => {
51
+ reject(new Error(`Hook spawn failed: ${error.message}`));
52
+ });
53
+ setTimeout(() => {
54
+ hookProcess.kill("SIGTERM");
55
+ reject(new Error("Hook timed out after 30s"));
56
+ }, 3e4);
57
+ });
58
+ }
6
59
  async function syncCompletedUserStories(incrementId) {
7
60
  try {
8
61
  console.log(`
@@ -52,7 +105,15 @@ async function syncCompletedUserStories(incrementId) {
52
105
  console.log(` Feature: ${syncResult.featureId}`);
53
106
  console.log(` Files updated: ${syncResult.filesCreated.length + syncResult.filesUpdated.length}`);
54
107
  console.log(`
55
- \u{1F4E1} External tool sync completed (GitHub/JIRA/ADO updated if configured)`);
108
+ \u{1F4E1} Triggering external tool updates for ${newlyCompleted.length} completed user stories...`);
109
+ for (const us of newlyCompleted) {
110
+ try {
111
+ await triggerUserStoryCompleteHook(incrementId, us.usId, projectRoot);
112
+ console.log(` \u2705 ${us.usId}: External tool updated`);
113
+ } catch (hookError) {
114
+ console.warn(` \u26A0\uFE0F ${us.usId}: Hook failed (${hookError.message})`);
115
+ }
116
+ }
56
117
  throttle.recordSync(incrementId);
57
118
  console.log(` \u23F1\uFE0F Throttle recorded (next sync allowed in 60s)`);
58
119
  } else {
@@ -39,6 +39,88 @@ import { USCompletionDetector } from '../../../../dist/src/core/us-completion-de
39
39
  import { LivingDocsSync } from '../../../../dist/src/core/living-docs/living-docs-sync.js';
40
40
  import { USSyncThrottle } from '../../../../dist/src/core/us-sync-throttle.js';
41
41
  import { consoleLogger } from '../vendor/utils/logger.js';
42
+ import { spawn } from 'child_process';
43
+ import { existsSync } from 'fs';
44
+ import * as path from 'path';
45
+
46
+ /**
47
+ * Trigger post-user-story-complete hook for external tool updates
48
+ *
49
+ * This bridges the orchestrator to the shell hook that handles:
50
+ * - GitHub issue closure with completion comment
51
+ * - JIRA story transition (if implemented)
52
+ * - ADO work item completion (if implemented)
53
+ *
54
+ * @param incrementId - Increment ID (e.g., "0059-context-optimization")
55
+ * @param usId - User story ID (e.g., "US-003")
56
+ * @param projectRoot - Project root path
57
+ */
58
+ async function triggerUserStoryCompleteHook(
59
+ incrementId: string,
60
+ usId: string,
61
+ projectRoot: string
62
+ ): Promise<void> {
63
+ // Find the hook in multiple possible locations
64
+ const hookPaths = [
65
+ path.join(projectRoot, 'plugins/specweave/hooks/post-user-story-complete.sh'),
66
+ path.join(projectRoot, '.claude/hooks/post-user-story-complete.sh'),
67
+ ];
68
+
69
+ let hookPath: string | null = null;
70
+ for (const p of hookPaths) {
71
+ if (existsSync(p)) {
72
+ hookPath = p;
73
+ break;
74
+ }
75
+ }
76
+
77
+ if (!hookPath) {
78
+ console.log(` ā„¹ļø post-user-story-complete.sh hook not found (skipping external sync)`);
79
+ return;
80
+ }
81
+
82
+ return new Promise((resolve, reject) => {
83
+ // Call hook with spec-id and user-story-id as arguments
84
+ const hookProcess = spawn('bash', [hookPath, incrementId, usId], {
85
+ cwd: projectRoot,
86
+ env: {
87
+ ...process.env,
88
+ SPECWEAVE_INCREMENT_ID: incrementId,
89
+ SPECWEAVE_USER_STORY_ID: usId,
90
+ },
91
+ stdio: ['ignore', 'pipe', 'pipe'],
92
+ });
93
+
94
+ let stdout = '';
95
+ let stderr = '';
96
+
97
+ hookProcess.stdout.on('data', (data) => {
98
+ stdout += data.toString();
99
+ });
100
+
101
+ hookProcess.stderr.on('data', (data) => {
102
+ stderr += data.toString();
103
+ });
104
+
105
+ hookProcess.on('close', (code) => {
106
+ if (code === 0) {
107
+ resolve();
108
+ } else {
109
+ reject(new Error(`Hook exited with code ${code}: ${stderr || stdout}`));
110
+ }
111
+ });
112
+
113
+ hookProcess.on('error', (error) => {
114
+ reject(new Error(`Hook spawn failed: ${error.message}`));
115
+ });
116
+
117
+ // Timeout after 30 seconds
118
+ setTimeout(() => {
119
+ hookProcess.kill('SIGTERM');
120
+ reject(new Error('Hook timed out after 30s'));
121
+ }, 30000);
122
+ });
123
+ }
42
124
 
43
125
  export interface USSyncResult {
44
126
  success: boolean;
@@ -146,9 +228,30 @@ export async function syncCompletedUserStories(incrementId: string): Promise<USS
146
228
  console.log(` Feature: ${syncResult.featureId}`);
147
229
  console.log(` Files updated: ${syncResult.filesCreated.length + syncResult.filesUpdated.length}`);
148
230
 
149
- // External tool sync happens automatically inside livingDocsSync.syncIncrement()
150
- // It calls syncToExternalTools() which handles GitHub/JIRA/ADO
151
- console.log(`\nšŸ“” External tool sync completed (GitHub/JIRA/ADO updated if configured)`);
231
+ // ========================================================================
232
+ // EXTERNAL TOOL SYNC: Close issues for completed user stories (v0.26.15)
233
+ // ========================================================================
234
+ // livingDocsSync.syncIncrement() updates CONTENT but doesn't CLOSE issues.
235
+ // We need to explicitly trigger post-user-story-complete hook for each US.
236
+ //
237
+ // Flow:
238
+ // 1. For each newly completed US
239
+ // 2. Call post-user-story-complete.sh with spec-id and us-id
240
+ // 3. Hook handles: find issue, add completion comment, close issue
241
+ //
242
+ // Gate checks happen inside the hook based on config flags.
243
+
244
+ console.log(`\nšŸ“” Triggering external tool updates for ${newlyCompleted.length} completed user stories...`);
245
+
246
+ for (const us of newlyCompleted) {
247
+ try {
248
+ await triggerUserStoryCompleteHook(incrementId, us.usId, projectRoot);
249
+ console.log(` āœ… ${us.usId}: External tool updated`);
250
+ } catch (hookError: any) {
251
+ // Non-blocking: Log but continue with next US
252
+ console.warn(` āš ļø ${us.usId}: Hook failed (${hookError.message})`);
253
+ }
254
+ }
152
255
 
153
256
  // Record successful sync for throttling
154
257
  throttle.recordSync(incrementId);
@@ -36,8 +36,20 @@ export declare class AutoTransitionManager {
36
36
  /**
37
37
  * Handle tasks.md creation event
38
38
  * PLANNING/BACKLOG → ACTIVE
39
+ *
40
+ * CRITICAL FIX (2025-11-24): Also trigger living docs sync if feature_id is null
41
+ * In single-prompt scenarios, increment may be created with "active" status
42
+ * directly, bypassing the normal transition flow. When tasks.md is created,
43
+ * we know spec.md exists and can safely sync living docs.
39
44
  */
40
45
  handleTasksCreated(incrementId: string): Promise<AutoTransitionResult>;
46
+ /**
47
+ * Trigger living docs sync if feature_id is missing
48
+ *
49
+ * Called when tasks.md is created but increment is already ACTIVE.
50
+ * At this point spec.md exists, so sync will succeed.
51
+ */
52
+ private triggerLivingDocsSyncIfNeeded;
41
53
  /**
42
54
  * Handle first task started event
43
55
  * PLANNING → ACTIVE
@@ -55,6 +55,11 @@ export class AutoTransitionManager {
55
55
  /**
56
56
  * Handle tasks.md creation event
57
57
  * PLANNING/BACKLOG → ACTIVE
58
+ *
59
+ * CRITICAL FIX (2025-11-24): Also trigger living docs sync if feature_id is null
60
+ * In single-prompt scenarios, increment may be created with "active" status
61
+ * directly, bypassing the normal transition flow. When tasks.md is created,
62
+ * we know spec.md exists and can safely sync living docs.
58
63
  */
59
64
  async handleTasksCreated(incrementId) {
60
65
  try {
@@ -64,6 +69,7 @@ export class AutoTransitionManager {
64
69
  const from = metadata.status;
65
70
  validateTransition(from, IncrementStatus.ACTIVE);
66
71
  MetadataManager.updateStatus(incrementId, IncrementStatus.ACTIVE);
72
+ // Note: updateStatus() triggers StatusChangeSyncTrigger which handles living docs sync
67
73
  return {
68
74
  transitioned: true,
69
75
  from,
@@ -71,6 +77,11 @@ export class AutoTransitionManager {
71
77
  reason: 'tasks.md created - execution phase started'
72
78
  };
73
79
  }
80
+ // CRITICAL FIX: Even if already ACTIVE, check if living docs need sync
81
+ // This handles single-prompt scenarios where increment was created with "active" status
82
+ if (metadata.status === IncrementStatus.ACTIVE) {
83
+ await this.triggerLivingDocsSyncIfNeeded(incrementId);
84
+ }
74
85
  return {
75
86
  transitioned: false,
76
87
  reason: `Already in ${metadata.status} - no transition needed`
@@ -83,6 +94,40 @@ export class AutoTransitionManager {
83
94
  };
84
95
  }
85
96
  }
97
+ /**
98
+ * Trigger living docs sync if feature_id is missing
99
+ *
100
+ * Called when tasks.md is created but increment is already ACTIVE.
101
+ * At this point spec.md exists, so sync will succeed.
102
+ */
103
+ async triggerLivingDocsSyncIfNeeded(incrementId) {
104
+ try {
105
+ const metadataPath = path.join(this.projectRoot, '.specweave/increments', incrementId, 'metadata.json');
106
+ if (!fs.existsSync(metadataPath)) {
107
+ return;
108
+ }
109
+ const content = fs.readFileSync(metadataPath, 'utf-8');
110
+ const metadata = JSON.parse(content);
111
+ // Only sync if feature_id is missing
112
+ if (!metadata.feature_id) {
113
+ console.log(`šŸ“š Increment ${incrementId} missing feature_id - triggering living docs sync...`);
114
+ // Dynamic import to avoid circular dependency
115
+ const { LivingDocsSync } = await import('../living-docs/living-docs-sync.js');
116
+ const sync = new LivingDocsSync(this.projectRoot);
117
+ const result = await sync.syncIncrement(incrementId);
118
+ if (result.success) {
119
+ console.log(`āœ… Living docs synced for ${incrementId} → ${result.featureId}`);
120
+ }
121
+ else {
122
+ console.warn(`āš ļø Living docs sync completed with errors for ${incrementId}`);
123
+ }
124
+ }
125
+ }
126
+ catch (error) {
127
+ // Non-fatal - log warning but don't fail the transition
128
+ console.warn(`āš ļø Failed to check/trigger living docs sync: ${error}`);
129
+ }
130
+ }
86
131
  /**
87
132
  * Handle first task started event
88
133
  * PLANNING → ACTIVE
@@ -1 +1 @@
1
- {"version":3,"file":"auto-transition-manager.js","sourceRoot":"","sources":["../../../../src/core/increment/auto-transition-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-transition-manager.js","sourceRoot":"","sources":["../../../../src/core/increment/auto-transition-manager.ts"],"names":[],"mappings":"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"}