specweave 0.30.19 → 0.32.2

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 (242) hide show
  1. package/CLAUDE.md +176 -2
  2. package/README.md +22 -0
  3. package/bin/specweave.js +18 -1
  4. package/dist/src/cli/commands/cache.d.ts +17 -0
  5. package/dist/src/cli/commands/cache.d.ts.map +1 -0
  6. package/dist/src/cli/commands/cache.js +126 -0
  7. package/dist/src/cli/commands/cache.js.map +1 -0
  8. package/dist/src/cli/commands/init.js +1 -1
  9. package/dist/src/cli/commands/init.js.map +1 -1
  10. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  11. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  12. package/dist/src/cli/commands/sync-spec-commits.js +1 -1
  13. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  14. package/dist/src/cli/commands/sync-specs.js +2 -2
  15. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  16. package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
  17. package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
  18. package/dist/src/cli/workers/living-docs-worker.js +66 -1
  19. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  20. package/dist/src/config/types.d.ts +203 -1208
  21. package/dist/src/config/types.d.ts.map +1 -1
  22. package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -1
  23. package/dist/src/core/discrepancy/increment-generator.js +5 -2
  24. package/dist/src/core/discrepancy/increment-generator.js.map +1 -1
  25. package/dist/src/core/external-tools/external-items-counter.d.ts +62 -0
  26. package/dist/src/core/external-tools/external-items-counter.d.ts.map +1 -0
  27. package/dist/src/core/external-tools/external-items-counter.js +206 -0
  28. package/dist/src/core/external-tools/external-items-counter.js.map +1 -0
  29. package/dist/src/core/external-tools/external-items-display.d.ts +39 -0
  30. package/dist/src/core/external-tools/external-items-display.d.ts.map +1 -0
  31. package/dist/src/core/external-tools/external-items-display.js +185 -0
  32. package/dist/src/core/external-tools/external-items-display.js.map +1 -0
  33. package/dist/src/core/external-tools/index.d.ts +8 -0
  34. package/dist/src/core/external-tools/index.d.ts.map +1 -0
  35. package/dist/src/core/external-tools/index.js +8 -0
  36. package/dist/src/core/external-tools/index.js.map +1 -0
  37. package/dist/src/core/external-tools/providers/ado-items-adapter.d.ts +39 -0
  38. package/dist/src/core/external-tools/providers/ado-items-adapter.d.ts.map +1 -0
  39. package/dist/src/core/external-tools/providers/ado-items-adapter.js +188 -0
  40. package/dist/src/core/external-tools/providers/ado-items-adapter.js.map +1 -0
  41. package/dist/src/core/external-tools/providers/github-items-adapter.d.ts +38 -0
  42. package/dist/src/core/external-tools/providers/github-items-adapter.d.ts.map +1 -0
  43. package/dist/src/core/external-tools/providers/github-items-adapter.js +136 -0
  44. package/dist/src/core/external-tools/providers/github-items-adapter.js.map +1 -0
  45. package/dist/src/core/external-tools/providers/index.d.ts +7 -0
  46. package/dist/src/core/external-tools/providers/index.d.ts.map +1 -0
  47. package/dist/src/core/external-tools/providers/index.js +7 -0
  48. package/dist/src/core/external-tools/providers/index.js.map +1 -0
  49. package/dist/src/core/external-tools/providers/jira-items-adapter.d.ts +42 -0
  50. package/dist/src/core/external-tools/providers/jira-items-adapter.d.ts.map +1 -0
  51. package/dist/src/core/external-tools/providers/jira-items-adapter.js +153 -0
  52. package/dist/src/core/external-tools/providers/jira-items-adapter.js.map +1 -0
  53. package/dist/src/core/external-tools/types.d.ts +78 -0
  54. package/dist/src/core/external-tools/types.d.ts.map +1 -0
  55. package/dist/src/core/external-tools/types.js +19 -0
  56. package/dist/src/core/external-tools/types.js.map +1 -0
  57. package/dist/src/core/increment/duplicate-detector.js +2 -2
  58. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  59. package/dist/src/core/increment/increment-archiver.d.ts +24 -0
  60. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  61. package/dist/src/core/increment/increment-archiver.js +59 -2
  62. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  63. package/dist/src/core/increment/increment-status.js +2 -2
  64. package/dist/src/core/increment/increment-status.js.map +1 -1
  65. package/dist/src/core/increment/increment-utils.d.ts +98 -37
  66. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  67. package/dist/src/core/increment/increment-utils.js +119 -68
  68. package/dist/src/core/increment/increment-utils.js.map +1 -1
  69. package/dist/src/core/increment/metadata-validator.js +1 -1
  70. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  71. package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
  72. package/dist/src/core/increment/status-change-sync-trigger.js +4 -0
  73. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  74. package/dist/src/core/living-docs/feature-id-manager.js +1 -1
  75. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  76. package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
  77. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  78. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts +18 -0
  79. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -0
  80. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +247 -0
  81. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -0
  82. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts +15 -0
  83. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -0
  84. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +138 -0
  85. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -0
  86. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts +24 -0
  87. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts.map +1 -0
  88. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js +198 -0
  89. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js.map +1 -0
  90. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +17 -0
  91. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -0
  92. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +241 -0
  93. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -0
  94. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +28 -0
  95. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -0
  96. package/dist/src/core/living-docs/intelligent-analyzer/index.js +197 -0
  97. package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -0
  98. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts +18 -0
  99. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -0
  100. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +154 -0
  101. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -0
  102. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts +42 -0
  103. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts.map +1 -0
  104. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js +343 -0
  105. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js.map +1 -0
  106. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +146 -0
  107. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -0
  108. package/dist/src/core/living-docs/intelligent-analyzer/types.js +7 -0
  109. package/dist/src/core/living-docs/intelligent-analyzer/types.js.map +1 -0
  110. package/dist/src/core/living-docs/living-docs-sync.d.ts +5 -0
  111. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  112. package/dist/src/core/living-docs/living-docs-sync.js +36 -2
  113. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  114. package/dist/src/core/llm/providers/azure-openai-provider.d.ts.map +1 -1
  115. package/dist/src/core/llm/providers/azure-openai-provider.js +1 -0
  116. package/dist/src/core/llm/providers/azure-openai-provider.js.map +1 -1
  117. package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
  118. package/dist/src/core/llm/providers/bedrock-provider.js +2 -0
  119. package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
  120. package/dist/src/core/llm/providers/openai-provider.d.ts.map +1 -1
  121. package/dist/src/core/llm/providers/openai-provider.js +1 -0
  122. package/dist/src/core/llm/providers/openai-provider.js.map +1 -1
  123. package/dist/src/core/llm/providers/vertex-ai-provider.d.ts.map +1 -1
  124. package/dist/src/core/llm/providers/vertex-ai-provider.js +1 -0
  125. package/dist/src/core/llm/providers/vertex-ai-provider.js.map +1 -1
  126. package/dist/src/core/sync/spec-increment-mapper.js +3 -3
  127. package/dist/src/core/sync/spec-increment-mapper.js.map +1 -1
  128. package/dist/src/importers/item-converter.d.ts +25 -0
  129. package/dist/src/importers/item-converter.d.ts.map +1 -1
  130. package/dist/src/importers/item-converter.js +135 -5
  131. package/dist/src/importers/item-converter.js.map +1 -1
  132. package/dist/src/init/architecture/types.d.ts +33 -140
  133. package/dist/src/init/architecture/types.d.ts.map +1 -1
  134. package/dist/src/init/compliance/types.d.ts +30 -27
  135. package/dist/src/init/compliance/types.d.ts.map +1 -1
  136. package/dist/src/init/repo/types.d.ts +11 -34
  137. package/dist/src/init/repo/types.d.ts.map +1 -1
  138. package/dist/src/init/research/src/config/types.d.ts +15 -82
  139. package/dist/src/init/research/src/config/types.d.ts.map +1 -1
  140. package/dist/src/init/research/types.d.ts +38 -93
  141. package/dist/src/init/research/types.d.ts.map +1 -1
  142. package/dist/src/init/team/types.d.ts +4 -42
  143. package/dist/src/init/team/types.d.ts.map +1 -1
  144. package/dist/src/types/dashboard-cache.d.ts +181 -0
  145. package/dist/src/types/dashboard-cache.d.ts.map +1 -0
  146. package/dist/src/types/dashboard-cache.js +65 -0
  147. package/dist/src/types/dashboard-cache.js.map +1 -0
  148. package/dist/src/utils/docs-validator.d.ts +131 -0
  149. package/dist/src/utils/docs-validator.d.ts.map +1 -0
  150. package/dist/src/utils/docs-validator.js +529 -0
  151. package/dist/src/utils/docs-validator.js.map +1 -0
  152. package/dist/src/utils/feature-id-collision.js +1 -1
  153. package/dist/src/utils/feature-id-collision.js.map +1 -1
  154. package/dist/src/utils/html-to-mdx.d.ts +1 -0
  155. package/dist/src/utils/html-to-mdx.d.ts.map +1 -1
  156. package/dist/src/utils/html-to-mdx.js +43 -5
  157. package/dist/src/utils/html-to-mdx.js.map +1 -1
  158. package/package.json +1 -5
  159. package/plugins/specweave/agents/pm/AGENT.md +10 -7
  160. package/plugins/specweave/commands/specweave-archive-features.md +5 -7
  161. package/plugins/specweave/commands/specweave-archive.md +2 -1
  162. package/plugins/specweave/commands/specweave-do.md +35 -1
  163. package/plugins/specweave/commands/specweave-done.md +96 -0
  164. package/plugins/specweave/commands/specweave-external.md +150 -0
  165. package/plugins/specweave/commands/specweave-import-external.md +45 -18
  166. package/plugins/specweave/commands/specweave-increment.md +331 -33
  167. package/plugins/specweave/commands/specweave-jobs.md +2 -2
  168. package/plugins/specweave/commands/specweave-progress.md +4 -4
  169. package/plugins/specweave/commands/specweave-restore-feature.md +5 -4
  170. package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
  171. package/plugins/specweave/commands/specweave-sync-specs.md +216 -322
  172. package/plugins/specweave/commands/specweave-validate-features.md +13 -8
  173. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  174. package/plugins/specweave/hooks/hooks.json +33 -4
  175. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  176. package/plugins/specweave/hooks/lib/common-setup.sh +375 -0
  177. package/plugins/specweave/hooks/lib/crash-prevention.sh +336 -0
  178. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  179. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  180. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  181. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  182. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  183. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  184. package/plugins/specweave/hooks/post-task-completion.sh +4 -23
  185. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  186. package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -6
  187. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  188. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  189. package/plugins/specweave/hooks/pre-task-completion.sh +8 -37
  190. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  191. package/plugins/specweave/hooks/pre-tool-use.sh +2 -11
  192. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  193. package/plugins/specweave/hooks/universal/dispatcher.mjs +135 -42
  194. package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
  195. package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -26
  196. package/plugins/specweave/hooks/universal/session-start.cmd +16 -16
  197. package/plugins/specweave/hooks/universal/session-start.ps1 +16 -16
  198. package/plugins/specweave/hooks/user-prompt-submit.sh +140 -38
  199. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  200. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +12 -0
  201. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +89 -0
  202. package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +211 -0
  203. package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +163 -0
  204. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +26 -28
  205. package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +50 -0
  206. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +2 -2
  207. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  208. package/plugins/specweave/scripts/README.md +166 -0
  209. package/plugins/specweave/scripts/cleanup-state.sh +142 -0
  210. package/plugins/specweave/scripts/force-kill.sh +142 -0
  211. package/plugins/specweave/scripts/jobs.js +171 -0
  212. package/plugins/specweave/scripts/progress.js +170 -0
  213. package/plugins/specweave/scripts/read-costs.sh +132 -0
  214. package/plugins/specweave/scripts/read-jobs.sh +324 -0
  215. package/plugins/specweave/scripts/read-progress.sh +185 -0
  216. package/plugins/specweave/scripts/read-status.sh +146 -0
  217. package/plugins/specweave/scripts/read-workflow.sh +173 -0
  218. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +327 -0
  219. package/plugins/specweave/scripts/session-watchdog.sh +192 -0
  220. package/plugins/specweave/scripts/status.js +154 -0
  221. package/plugins/specweave/scripts/update-dashboard-cache.sh +281 -0
  222. package/plugins/specweave/skills/increment-planner/SKILL.md +333 -24
  223. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -9
  224. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -2
  225. package/plugins/specweave/skills/instant-status/SKILL.md +70 -0
  226. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  227. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  228. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  229. package/plugins/specweave-docs/commands/build.md +32 -4
  230. package/plugins/specweave-docs/commands/preview.md +43 -1
  231. package/plugins/specweave-docs/commands/validate.md +250 -0
  232. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1262 -626
  233. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  234. package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
  235. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  236. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
  237. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -939
  238. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
  239. package/plugins/specweave/hooks/post-edit-spec.sh +0 -265
  240. package/plugins/specweave/hooks/post-write-spec.sh +0 -267
  241. package/plugins/specweave/hooks/pre-edit-spec.sh +0 -151
  242. package/plugins/specweave/hooks/pre-write-spec.sh +0 -151
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Strategy Generator
3
+ *
4
+ * Extracts strategic insights from codebase analysis:
5
+ * - Tech debt catalog
6
+ * - Business domain mapping
7
+ * - Modernization candidates
8
+ */
9
+ import * as fs from 'fs';
10
+ import * as path from 'path';
11
+ export async function generateStrategy(repoAnalyses, orgResult, inconsistencyResult, llmProvider, onProgress, log) {
12
+ log('PHASE F: Strategy Generation');
13
+ onProgress('strategy', 0, 100, 'Analyzing strategic landscape');
14
+ // Collect all tech debt
15
+ onProgress('strategy', 20, 100, 'Cataloging tech debt');
16
+ const techDebtCatalog = collectTechDebt(repoAnalyses, inconsistencyResult);
17
+ log(' Collected ' + techDebtCatalog.length + ' tech debt items');
18
+ // Map business domains
19
+ onProgress('strategy', 40, 100, 'Mapping business domains');
20
+ const domainMap = mapBusinessDomains(repoAnalyses, orgResult);
21
+ log(' Mapped ' + domainMap.length + ' business domains');
22
+ // Identify modernization candidates
23
+ onProgress('strategy', 60, 100, 'Identifying modernization candidates');
24
+ const modernizationCandidates = identifyModernizationCandidates(repoAnalyses, techDebtCatalog);
25
+ log(' Found ' + modernizationCandidates.length + ' modernization candidates');
26
+ // Generate recommendations
27
+ onProgress('strategy', 80, 100, 'Generating recommendations');
28
+ const recommendations = generateRecommendations(techDebtCatalog, domainMap, modernizationCandidates, orgResult);
29
+ log(' Generated ' + recommendations.length + ' strategic recommendations');
30
+ return { techDebtCatalog, domainMap, modernizationCandidates, recommendations };
31
+ }
32
+ function collectTechDebt(analyses, inconsistencyResult) {
33
+ const debt = [...inconsistencyResult.techDebt];
34
+ let debtNum = debt.length + 1;
35
+ for (const [name, analysis] of analyses) {
36
+ // Check for outdated patterns
37
+ const outdatedPatterns = analysis.patternsUsed.filter(p => isOutdatedPattern(p.pattern));
38
+ if (outdatedPatterns.length > 0) {
39
+ debt.push({
40
+ id: 'DEBT-' + String(debtNum++).padStart(3, '0'),
41
+ title: 'Update outdated patterns in ' + name,
42
+ description: 'Found ' + outdatedPatterns.length + ' outdated patterns: ' +
43
+ outdatedPatterns.map(p => p.pattern).join(', '),
44
+ severity: 'medium',
45
+ effort: 'medium',
46
+ repos: [name],
47
+ category: 'legacy',
48
+ });
49
+ }
50
+ // Check for missing tests (heuristic: no test files in sample)
51
+ if (analysis.filesAnalyzed < 5 && analysis.confidence === 'low') {
52
+ debt.push({
53
+ id: 'DEBT-' + String(debtNum++).padStart(3, '0'),
54
+ title: 'Improve test coverage for ' + name,
55
+ description: 'Low file count and confidence suggests missing tests',
56
+ severity: 'medium',
57
+ effort: 'medium',
58
+ repos: [name],
59
+ category: 'missing-tests',
60
+ });
61
+ }
62
+ }
63
+ return debt;
64
+ }
65
+ function isOutdatedPattern(pattern) {
66
+ const outdated = [
67
+ 'callback',
68
+ 'jquery',
69
+ 'angular.js',
70
+ 'backbone',
71
+ 'grunt',
72
+ 'bower',
73
+ ];
74
+ return outdated.some(o => pattern.toLowerCase().includes(o));
75
+ }
76
+ function mapBusinessDomains(analyses, orgResult) {
77
+ const domains = [];
78
+ // Use organization domains if available
79
+ for (const domain of orgResult.domains) {
80
+ const repoAnalysesList = domain.repos
81
+ .map(r => analyses.get(r))
82
+ .filter((a) => a !== undefined);
83
+ const avgConfidence = repoAnalysesList.length > 0
84
+ ? repoAnalysesList.reduce((sum, a) => sum + (a.confidence === 'high' ? 100 : a.confidence === 'medium' ? 70 : 40), 0) / repoAnalysesList.length
85
+ : 50;
86
+ const concerns = [];
87
+ if (avgConfidence < 60)
88
+ concerns.push('Low documentation quality');
89
+ if (repoAnalysesList.some(a => a.filesAnalyzed < 3))
90
+ concerns.push('Some repos poorly structured');
91
+ domains.push({
92
+ domain: domain.name,
93
+ description: domain.description,
94
+ repos: domain.repos,
95
+ healthScore: Math.round(avgConfidence),
96
+ concerns,
97
+ });
98
+ }
99
+ // If no domains from org, create from key concepts
100
+ if (domains.length === 0) {
101
+ const conceptGroups = new Map();
102
+ for (const [name, analysis] of analyses) {
103
+ for (const concept of analysis.keyConcepts.slice(0, 3)) {
104
+ const normalized = concept.toLowerCase();
105
+ if (!conceptGroups.has(normalized)) {
106
+ conceptGroups.set(normalized, []);
107
+ }
108
+ conceptGroups.get(normalized).push(name);
109
+ }
110
+ }
111
+ for (const [concept, repos] of conceptGroups) {
112
+ if (repos.length >= 2) {
113
+ domains.push({
114
+ domain: concept,
115
+ description: 'Repos sharing ' + concept + ' concept',
116
+ repos,
117
+ healthScore: 70,
118
+ concerns: [],
119
+ });
120
+ }
121
+ }
122
+ }
123
+ return domains;
124
+ }
125
+ function identifyModernizationCandidates(analyses, techDebt) {
126
+ const candidates = [];
127
+ const debtByRepo = new Map();
128
+ // Count debt items per repo
129
+ for (const item of techDebt) {
130
+ for (const repo of item.repos) {
131
+ debtByRepo.set(repo, (debtByRepo.get(repo) || 0) + 1);
132
+ }
133
+ }
134
+ for (const [name, analysis] of analyses) {
135
+ const debtCount = debtByRepo.get(name) || 0;
136
+ const hasLowConfidence = analysis.confidence === 'low';
137
+ const hasOutdatedPatterns = analysis.patternsUsed.some(p => isOutdatedPattern(p.pattern));
138
+ const hasFewerFiles = analysis.filesAnalyzed < 5;
139
+ // Score for modernization need
140
+ let score = 0;
141
+ const reasons = [];
142
+ if (debtCount >= 3) {
143
+ score += 3;
144
+ reasons.push('High tech debt (' + debtCount + ' items)');
145
+ }
146
+ if (hasLowConfidence) {
147
+ score += 2;
148
+ reasons.push('Poor documentation');
149
+ }
150
+ if (hasOutdatedPatterns) {
151
+ score += 2;
152
+ reasons.push('Outdated patterns');
153
+ }
154
+ if (hasFewerFiles) {
155
+ score += 1;
156
+ reasons.push('Minimal codebase');
157
+ }
158
+ if (score >= 3) {
159
+ candidates.push({
160
+ repo: name,
161
+ reason: reasons.join(', '),
162
+ priority: score >= 5 ? 'high' : score >= 4 ? 'medium' : 'low',
163
+ suggestedApproach: suggestApproach(reasons),
164
+ estimatedEffort: score >= 5 ? 'large' : score >= 4 ? 'medium' : 'small',
165
+ });
166
+ }
167
+ }
168
+ return candidates.sort((a, b) => {
169
+ const priorityOrder = { high: 0, medium: 1, low: 2 };
170
+ return priorityOrder[a.priority] - priorityOrder[b.priority];
171
+ });
172
+ }
173
+ function suggestApproach(reasons) {
174
+ if (reasons.some(r => r.includes('Outdated patterns'))) {
175
+ return 'Incremental migration to modern patterns with feature flags';
176
+ }
177
+ if (reasons.some(r => r.includes('Poor documentation'))) {
178
+ return 'Documentation sprint followed by gradual refactoring';
179
+ }
180
+ if (reasons.some(r => r.includes('High tech debt'))) {
181
+ return 'Dedicated tech debt reduction sprint';
182
+ }
183
+ return 'Evaluate for rewrite vs refactor based on business criticality';
184
+ }
185
+ function generateRecommendations(techDebt, domains, candidates, orgResult) {
186
+ const recommendations = [];
187
+ let recNum = 1;
188
+ // High priority modernization
189
+ const highPriorityCandidates = candidates.filter(c => c.priority === 'high');
190
+ if (highPriorityCandidates.length > 0) {
191
+ recommendations.push({
192
+ id: 'REC-' + String(recNum++).padStart(3, '0'),
193
+ title: 'Address high-priority modernization candidates',
194
+ description: highPriorityCandidates.length + ' repositories need immediate attention: ' +
195
+ highPriorityCandidates.map(c => c.repo).join(', '),
196
+ impact: 'high',
197
+ effort: 'large',
198
+ category: 'architecture',
199
+ });
200
+ }
201
+ // Documentation debt
202
+ const docDebt = techDebt.filter(d => d.category === 'documentation');
203
+ if (docDebt.length >= 3) {
204
+ recommendations.push({
205
+ id: 'REC-' + String(recNum++).padStart(3, '0'),
206
+ title: 'Launch documentation improvement initiative',
207
+ description: docDebt.length + ' repos have documentation issues. ' +
208
+ 'Consider a team-wide doc sprint.',
209
+ impact: 'medium',
210
+ effort: 'medium',
211
+ category: 'process',
212
+ });
213
+ }
214
+ // Domain health
215
+ const unhealthyDomains = domains.filter(d => d.healthScore < 60);
216
+ if (unhealthyDomains.length > 0) {
217
+ recommendations.push({
218
+ id: 'REC-' + String(recNum++).padStart(3, '0'),
219
+ title: 'Improve health of critical domains',
220
+ description: unhealthyDomains.length + ' business domains have low health scores: ' +
221
+ unhealthyDomains.map(d => d.domain + ' (' + d.healthScore + '%)').join(', '),
222
+ impact: 'high',
223
+ effort: 'medium',
224
+ category: 'architecture',
225
+ });
226
+ }
227
+ // Team ownership
228
+ if (orgResult.hypotheses.length > 0) {
229
+ recommendations.push({
230
+ id: 'REC-' + String(recNum++).padStart(3, '0'),
231
+ title: 'Clarify team ownership and boundaries',
232
+ description: 'Organization analysis identified uncertainties: ' +
233
+ orgResult.hypotheses.slice(0, 2).join('; '),
234
+ impact: 'medium',
235
+ effort: 'small',
236
+ category: 'team',
237
+ });
238
+ }
239
+ // Pattern standardization
240
+ const patternInconsistencies = techDebt.filter(d => d.description.toLowerCase().includes('pattern'));
241
+ if (patternInconsistencies.length > 0) {
242
+ recommendations.push({
243
+ id: 'REC-' + String(recNum++).padStart(3, '0'),
244
+ title: 'Standardize development patterns',
245
+ description: 'Multiple inconsistent patterns detected. ' +
246
+ 'Create and enforce architectural guidelines.',
247
+ impact: 'medium',
248
+ effort: 'medium',
249
+ category: 'tooling',
250
+ });
251
+ }
252
+ return recommendations;
253
+ }
254
+ export async function saveStrategy(projectPath, result) {
255
+ const savedFiles = [];
256
+ const strategyPath = path.join(projectPath, '.specweave/docs/internal/strategy');
257
+ fs.mkdirSync(strategyPath, { recursive: true });
258
+ // Tech Debt Catalog
259
+ const debtFile = path.join(strategyPath, 'tech-debt-catalog.md');
260
+ const debtLines = [
261
+ '# Tech Debt Catalog',
262
+ '',
263
+ '*Auto-generated by Intelligent Analyzer*',
264
+ '',
265
+ '## Summary',
266
+ '',
267
+ '| Severity | Count |',
268
+ '|----------|-------|',
269
+ '| High | ' + result.techDebtCatalog.filter(d => d.severity === 'high').length + ' |',
270
+ '| Medium | ' + result.techDebtCatalog.filter(d => d.severity === 'medium').length + ' |',
271
+ '| Low | ' + result.techDebtCatalog.filter(d => d.severity === 'low').length + ' |',
272
+ '',
273
+ '## Items',
274
+ '',
275
+ ];
276
+ for (const item of result.techDebtCatalog) {
277
+ debtLines.push('### ' + item.id + ': ' + item.title, '', item.description, '', '- **Severity**: ' + item.severity, '- **Effort**: ' + item.effort, '- **Category**: ' + item.category, '- **Repos**: ' + item.repos.join(', '), '');
278
+ }
279
+ fs.writeFileSync(debtFile, debtLines.join('\n'));
280
+ savedFiles.push(debtFile);
281
+ // Domain Map
282
+ const domainFile = path.join(strategyPath, 'domain-map.md');
283
+ const domainLines = [
284
+ '# Business Domain Map',
285
+ '',
286
+ '*Auto-generated by Intelligent Analyzer*',
287
+ '',
288
+ ];
289
+ for (const domain of result.domainMap) {
290
+ domainLines.push('## ' + domain.domain, '', domain.description, '', '- **Health Score**: ' + domain.healthScore + '%', '- **Repos**: ' + domain.repos.join(', '), '');
291
+ if (domain.concerns.length > 0) {
292
+ domainLines.push('**Concerns**:', '');
293
+ for (const concern of domain.concerns) {
294
+ domainLines.push('- ' + concern);
295
+ }
296
+ domainLines.push('');
297
+ }
298
+ }
299
+ fs.writeFileSync(domainFile, domainLines.join('\n'));
300
+ savedFiles.push(domainFile);
301
+ // Modernization Candidates
302
+ if (result.modernizationCandidates.length > 0) {
303
+ const modernFile = path.join(strategyPath, 'modernization-candidates.md');
304
+ const modernLines = [
305
+ '# Modernization Candidates',
306
+ '',
307
+ '*Auto-generated by Intelligent Analyzer*',
308
+ '',
309
+ '## Priority Summary',
310
+ '',
311
+ '| Priority | Count |',
312
+ '|----------|-------|',
313
+ '| High | ' + result.modernizationCandidates.filter(c => c.priority === 'high').length + ' |',
314
+ '| Medium | ' + result.modernizationCandidates.filter(c => c.priority === 'medium').length + ' |',
315
+ '| Low | ' + result.modernizationCandidates.filter(c => c.priority === 'low').length + ' |',
316
+ '',
317
+ '## Candidates',
318
+ '',
319
+ ];
320
+ for (const candidate of result.modernizationCandidates) {
321
+ modernLines.push('### ' + candidate.repo + ' (' + candidate.priority.toUpperCase() + ')', '', '**Reason**: ' + candidate.reason, '', '**Suggested Approach**: ' + candidate.suggestedApproach, '', '**Estimated Effort**: ' + candidate.estimatedEffort, '');
322
+ }
323
+ fs.writeFileSync(modernFile, modernLines.join('\n'));
324
+ savedFiles.push(modernFile);
325
+ }
326
+ // Strategic Recommendations
327
+ if (result.recommendations.length > 0) {
328
+ const recFile = path.join(strategyPath, 'recommendations.md');
329
+ const recLines = [
330
+ '# Strategic Recommendations',
331
+ '',
332
+ '*Auto-generated by Intelligent Analyzer*',
333
+ '',
334
+ ];
335
+ for (const rec of result.recommendations) {
336
+ recLines.push('## ' + rec.id + ': ' + rec.title, '', rec.description, '', '| Aspect | Value |', '|--------|-------|', '| Impact | ' + rec.impact + ' |', '| Effort | ' + rec.effort + ' |', '| Category | ' + rec.category + ' |', '');
337
+ }
338
+ fs.writeFileSync(recFile, recLines.join('\n'));
339
+ savedFiles.push(recFile);
340
+ }
341
+ return savedFiles;
342
+ }
343
+ //# sourceMappingURL=strategy-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-generator.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/strategy-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Intelligent Analyzer Types
3
+ *
4
+ * Types for the deep codebase analysis and organization synthesis.
5
+ */
6
+ /**
7
+ * Analysis checkpoint for resume support
8
+ */
9
+ export interface IntelligentAnalysisCheckpoint {
10
+ phase: 'A' | 'B' | 'C' | 'D' | 'E' | 'F';
11
+ reposTotal: number;
12
+ reposCompleted: string[];
13
+ repoInProgress: string | null;
14
+ discoveryComplete: boolean;
15
+ deepAnalysisComplete: boolean;
16
+ clusteringComplete: boolean;
17
+ architectureComplete: boolean;
18
+ inconsistenciesComplete: boolean;
19
+ strategyComplete: boolean;
20
+ startedAt: string;
21
+ lastActivityAt: string;
22
+ estimatedCompletion: string | null;
23
+ }
24
+ /**
25
+ * Deep analysis result for a single repo
26
+ */
27
+ export interface RepoAnalysis {
28
+ name: string;
29
+ path: string;
30
+ purpose: string;
31
+ keyConcepts: string[];
32
+ mainApis: ApiSurface[];
33
+ patternsUsed: PatternUsage[];
34
+ internalDependencies: string[];
35
+ externalDependencies: string[];
36
+ filesAnalyzed: number;
37
+ confidence: 'high' | 'medium' | 'low';
38
+ analyzedAt: string;
39
+ observations: string[];
40
+ }
41
+ /**
42
+ * API surface detected in a repo
43
+ */
44
+ export interface ApiSurface {
45
+ name: string;
46
+ type: 'class' | 'function' | 'interface' | 'endpoint' | 'event';
47
+ description: string;
48
+ location: string;
49
+ }
50
+ /**
51
+ * Pattern usage detected in code
52
+ */
53
+ export interface PatternUsage {
54
+ pattern: string;
55
+ category: 'auth' | 'api' | 'data' | 'messaging' | 'architecture' | 'other';
56
+ evidence: string[];
57
+ confidence: 'high' | 'medium' | 'low';
58
+ }
59
+ /**
60
+ * Organization cluster (team, service, or domain)
61
+ */
62
+ export interface OrganizationCluster {
63
+ name: string;
64
+ type: 'team' | 'microservice' | 'domain';
65
+ description: string;
66
+ repos: string[];
67
+ confidence: 'high' | 'medium' | 'low';
68
+ reasoning: string;
69
+ }
70
+ /**
71
+ * Detected architectural decision
72
+ */
73
+ export interface DetectedADR {
74
+ id: string;
75
+ title: string;
76
+ pattern: string;
77
+ status: 'Detected';
78
+ context: string;
79
+ decision: string;
80
+ consequences: string[];
81
+ evidence: ADREvidence[];
82
+ confidence: 'high' | 'medium' | 'low';
83
+ }
84
+ /**
85
+ * Evidence for a detected ADR
86
+ */
87
+ export interface ADREvidence {
88
+ repo: string;
89
+ files: string[];
90
+ description: string;
91
+ }
92
+ /**
93
+ * Inconsistency or question found
94
+ */
95
+ export interface DetectedIssue {
96
+ id: string;
97
+ type: 'inconsistency' | 'duplicate' | 'ownership' | 'security' | 'question';
98
+ severity: 'critical' | 'important' | 'minor';
99
+ title: string;
100
+ description: string;
101
+ evidence: IssueEvidence[];
102
+ suggestedAction: string;
103
+ targetAudience: 'cto' | 'po' | 'team' | 'anyone';
104
+ }
105
+ /**
106
+ * Evidence for a detected issue
107
+ */
108
+ export interface IssueEvidence {
109
+ repo: string;
110
+ files: string[];
111
+ details: string;
112
+ }
113
+ /**
114
+ * Tech debt item
115
+ */
116
+ export interface TechDebtItem {
117
+ id: string;
118
+ title: string;
119
+ description: string;
120
+ severity: 'high' | 'medium' | 'low';
121
+ effort: 'small' | 'medium' | 'large';
122
+ repos: string[];
123
+ category: 'legacy' | 'duplication' | 'missing-tests' | 'outdated-deps' | 'documentation' | 'other';
124
+ }
125
+ /**
126
+ * File sample for LLM analysis
127
+ */
128
+ export interface FileSample {
129
+ path: string;
130
+ content: string;
131
+ type: 'readme' | 'config' | 'entry' | 'api' | 'model' | 'other';
132
+ truncated: boolean;
133
+ }
134
+ /**
135
+ * LLM provider interface (simplified)
136
+ */
137
+ export interface LLMProvider {
138
+ analyze(prompt: string): Promise<{
139
+ content: string;
140
+ }>;
141
+ }
142
+ /**
143
+ * Progress callback for long-running operations
144
+ */
145
+ export type ProgressCallback = (phase: string, current: number, total: number, message: string) => void;
146
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Intelligent Analyzer Types
3
+ *
4
+ * Types for the deep codebase analysis and organization synthesis.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -191,6 +191,11 @@ export declare class LivingDocsSync {
191
191
  * AC-US5-02: When GitHub configured, trigger GitHub sync
192
192
  * AC-US5-03: When no external tools configured, skip
193
193
  * AC-US5-05: External tool failures don't break living docs sync
194
+ *
195
+ * v0.32.2+ (AC-US3-01 to AC-US3-05): Permission checks before syncing
196
+ * - canUpsertInternalItems: Required for creating issues from SpecWeave increments
197
+ * - canUpdateExternalItems: Required for updating externally-imported items
198
+ * - canUpdateStatus: Required for updating issue status (open/closed)
194
199
  */
195
200
  private syncToExternalTools;
196
201
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"living-docs-sync.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/living-docs-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAO9D,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAoBpB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC;AAE5F,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IASlE;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;YACW,mBAAmB;IASjC;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8JxF;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,wBAAwB;IAkDtC;;;;;;;;;OASG;IACH,OAAO,CAAC,8BAA8B;IA+BtC;;;;;;;;;;;;;OAaG;YACW,2BAA2B;IAkEzC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;YACW,sBAAsB;IAKpC;;;;;;;;;;;;;;OAcG;YACW,kBAAkB;IA6GhC;;OAEG;YACW,uBAAuB;IAcrC;;OAEG;YACW,wBAAwB;IAmFtC;;;OAGG;YACW,sBAAsB;IAqGpC;;OAEG;YACW,iBAAiB;IA0C/B;;;;;;;;;;;OAWG;YACW,oBAAoB;IAwClC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;YACW,kBAAkB;IAmHhC;;;;OAIG;YACW,sBAAsB;IAkCpC;;OAEG;YACW,kBAAkB;IAmChC;;;;;;;OAOG;YACW,mBAAmB;IA8CjC;;;;;;OAMG;IACH;;;;;;;;;;;OAWG;YACW,mBAAmB;IAyIjC;;;;;;;;;OASG;YACW,YAAY;IA0F1B;;;;;;;;;;;;OAYG;YACW,UAAU;IAyFxB;;;;;;;;;;;;OAYG;YACW,SAAS;IAyFvB;;;;;;;;;OASG;YACW,4BAA4B;CAmB3C"}
1
+ {"version":3,"file":"living-docs-sync.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/living-docs-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAO9D,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAoBpB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC;AAE5F,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IASlE;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;YACW,mBAAmB;IASjC;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8JxF;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,wBAAwB;IAkDtC;;;;;;;;;OASG;IACH,OAAO,CAAC,8BAA8B;IA+BtC;;;;;;;;;;;;;OAaG;YACW,2BAA2B;IAkEzC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;YACW,sBAAsB;IAKpC;;;;;;;;;;;;;;OAcG;YACW,kBAAkB;IA6GhC;;OAEG;YACW,uBAAuB;IAcrC;;OAEG;YACW,wBAAwB;IAmFtC;;;OAGG;YACW,sBAAsB;IAqGpC;;OAEG;YACW,iBAAiB;IA0C/B;;;;;;;;;;;OAWG;YACW,oBAAoB;IAwClC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;YACW,kBAAkB;IAoHhC;;;;OAIG;YACW,sBAAsB;IAkCpC;;OAEG;YACW,kBAAkB;IAmChC;;;;;;;;;;;;OAYG;YACW,mBAAmB;IA6EjC;;;;;;OAMG;IACH;;;;;;;;;;;OAWG;YACW,mBAAmB;IAyIjC;;;;;;;;;OASG;YACW,YAAY;IA0F1B;;;;;;;;;;;;OAYG;YACW,UAAU;IAyFxB;;;;;;;;;;;;OAYG;YACW,SAAS;IAyFvB;;;;;;;;;OASG;YACW,4BAA4B;CAmB3C"}
@@ -849,7 +849,8 @@ export class LivingDocsSync {
849
849
  }
850
850
  }
851
851
  if (!title) {
852
- title = incrementId.replace(/^\d+-/, '').split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
852
+ // Handle both regular (0111-name) and external (0111E-name) increment IDs
853
+ title = incrementId.replace(/^\d+E?-/, '').split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
853
854
  }
854
855
  // Extract overview
855
856
  let overview = '';
@@ -952,6 +953,11 @@ export class LivingDocsSync {
952
953
  * AC-US5-02: When GitHub configured, trigger GitHub sync
953
954
  * AC-US5-03: When no external tools configured, skip
954
955
  * AC-US5-05: External tool failures don't break living docs sync
956
+ *
957
+ * v0.32.2+ (AC-US3-01 to AC-US3-05): Permission checks before syncing
958
+ * - canUpsertInternalItems: Required for creating issues from SpecWeave increments
959
+ * - canUpdateExternalItems: Required for updating externally-imported items
960
+ * - canUpdateStatus: Required for updating issue status (open/closed)
955
961
  */
956
962
  async syncToExternalTools(incrementId, featureId, projectPath) {
957
963
  try {
@@ -961,8 +967,36 @@ export class LivingDocsSync {
961
967
  // AC-US5-03: No external tools configured, skip
962
968
  return;
963
969
  }
970
+ // 2. Load sync settings and check permissions (v0.32.2+ AC-US3-01 to AC-US3-05)
971
+ const configPath = path.join(this.projectRoot, '.specweave/config.json');
972
+ let syncSettings = {
973
+ canUpsertInternalItems: false,
974
+ canUpdateExternalItems: false,
975
+ canUpdateStatus: false,
976
+ };
977
+ if (existsSync(configPath)) {
978
+ try {
979
+ const config = await readJson(configPath);
980
+ syncSettings = {
981
+ canUpsertInternalItems: config.sync?.settings?.canUpsertInternalItems ?? false,
982
+ canUpdateExternalItems: config.sync?.settings?.canUpdateExternalItems ?? false,
983
+ canUpdateStatus: config.sync?.settings?.canUpdateStatus ?? false,
984
+ };
985
+ }
986
+ catch (error) {
987
+ this.logger.warn(' ⚠️ Failed to load sync settings, using defaults (disabled)');
988
+ }
989
+ }
990
+ // 3. AC-US3-01: Check canUpsertInternalItems permission for creating issues
991
+ if (!syncSettings.canUpsertInternalItems) {
992
+ this.logger.log(' ⚠️ Skipping external sync - canUpsertInternalItems is disabled in config');
993
+ this.logger.log(' 💡 Enable in .specweave/config.json: sync.settings.canUpsertInternalItems: true');
994
+ return;
995
+ }
964
996
  this.logger.log(`\n📡 Syncing to external tools: ${externalTools.join(', ')}`);
965
- // 2. Sync to each configured external tool
997
+ this.logger.log(` 📋 Permissions: upsert=${syncSettings.canUpsertInternalItems}, ` +
998
+ `update=${syncSettings.canUpdateExternalItems}, status=${syncSettings.canUpdateStatus}`);
999
+ // 4. Sync to each configured external tool (passing permissions for granular control)
966
1000
  for (const tool of externalTools) {
967
1001
  try {
968
1002
  switch (tool) {