specweave 0.32.3 → 0.32.5

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 (62) hide show
  1. package/CLAUDE.md +12 -9
  2. package/dist/src/cli/commands/init-multiproject.js +1 -1
  3. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  4. package/dist/src/cli/commands/migrate-to-multiproject.js +2 -2
  5. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  6. package/dist/src/core/living-docs/cross-project-sync.d.ts +97 -0
  7. package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -0
  8. package/dist/src/core/living-docs/cross-project-sync.js +135 -0
  9. package/dist/src/core/living-docs/cross-project-sync.js.map +1 -0
  10. package/dist/src/core/living-docs/external-sync-orchestrator.d.ts +106 -0
  11. package/dist/src/core/living-docs/external-sync-orchestrator.d.ts.map +1 -0
  12. package/dist/src/core/living-docs/external-sync-orchestrator.js +146 -0
  13. package/dist/src/core/living-docs/external-sync-orchestrator.js.map +1 -0
  14. package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
  15. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  16. package/dist/src/core/living-docs/living-docs-sync.js +77 -2
  17. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  18. package/dist/src/core/living-docs/sync-helpers/generators.d.ts +8 -1
  19. package/dist/src/core/living-docs/sync-helpers/generators.d.ts.map +1 -1
  20. package/dist/src/core/living-docs/sync-helpers/generators.js +18 -1
  21. package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -1
  22. package/dist/src/core/living-docs/sync-helpers/index.d.ts +1 -1
  23. package/dist/src/core/living-docs/sync-helpers/index.d.ts.map +1 -1
  24. package/dist/src/core/living-docs/sync-helpers/index.js.map +1 -1
  25. package/dist/src/core/living-docs/sync-helpers/parsers.d.ts +3 -1
  26. package/dist/src/core/living-docs/sync-helpers/parsers.d.ts.map +1 -1
  27. package/dist/src/core/living-docs/sync-helpers/parsers.js +24 -2
  28. package/dist/src/core/living-docs/sync-helpers/parsers.js.map +1 -1
  29. package/dist/src/core/living-docs/types.d.ts +6 -0
  30. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  31. package/dist/src/core/living-docs/validators/index.d.ts +7 -0
  32. package/dist/src/core/living-docs/validators/index.d.ts.map +1 -0
  33. package/dist/src/core/living-docs/validators/index.js +7 -0
  34. package/dist/src/core/living-docs/validators/index.js.map +1 -0
  35. package/dist/src/core/living-docs/validators/project-validator.d.ts +92 -0
  36. package/dist/src/core/living-docs/validators/project-validator.d.ts.map +1 -0
  37. package/dist/src/core/living-docs/validators/project-validator.js +142 -0
  38. package/dist/src/core/living-docs/validators/project-validator.js.map +1 -0
  39. package/dist/src/core/project/project-manager.d.ts.map +1 -1
  40. package/dist/src/core/project/project-manager.js +19 -17
  41. package/dist/src/core/project/project-manager.js.map +1 -1
  42. package/dist/src/core/types/config.d.ts +4 -2
  43. package/dist/src/core/types/config.d.ts.map +1 -1
  44. package/dist/src/core/types/config.js.map +1 -1
  45. package/dist/src/core/types/increment-metadata.d.ts +34 -0
  46. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  47. package/dist/src/utils/cross-cutting-detector.d.ts +66 -0
  48. package/dist/src/utils/cross-cutting-detector.d.ts.map +1 -0
  49. package/dist/src/utils/cross-cutting-detector.js +179 -0
  50. package/dist/src/utils/cross-cutting-detector.js.map +1 -0
  51. package/dist/src/utils/project-detection.d.ts +12 -8
  52. package/dist/src/utils/project-detection.d.ts.map +1 -1
  53. package/dist/src/utils/project-detection.js +13 -19
  54. package/dist/src/utils/project-detection.js.map +1 -1
  55. package/package.json +1 -1
  56. package/plugins/specweave/commands/specweave-status.md +64 -0
  57. package/plugins/specweave/hooks/hooks.json +1 -1
  58. package/plugins/specweave/hooks/spec-project-validator.sh +2 -1
  59. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +34 -0
  60. package/plugins/specweave/skills/increment-planner/SKILL.md +77 -2
  61. package/plugins/specweave/skills/spec-generator/SKILL.md +78 -7
  62. package/plugins/specweave/commands/specweave-switch-project.md +0 -168
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Cross-Cutting Feature Detector
3
+ *
4
+ * Detects when a feature spans multiple projects based on keywords,
5
+ * tech stack mentions, and component references.
6
+ *
7
+ * @module utils/cross-cutting-detector
8
+ * @since v0.33.0
9
+ */
10
+ import { consoleLogger } from './logger.js';
11
+ /**
12
+ * Cross-cutting detection keywords and mappings
13
+ */
14
+ const CROSS_CUTTING_PATTERNS = {
15
+ // Frontend indicators
16
+ frontend: ['frontend', 'ui', 'react', 'vue', 'angular', 'next.js', 'nuxt', 'svelte', 'client-side', 'browser'],
17
+ // Backend indicators
18
+ backend: ['backend', 'api', 'server', 'node', 'express', 'fastify', 'django', 'flask', 'rails', 'spring', 'graphql', 'rest api'],
19
+ // Infrastructure indicators
20
+ infrastructure: ['infrastructure', 'infra', 'devops', 'ci/cd', 'pipeline', 'kubernetes', 'k8s', 'docker', 'terraform', 'aws', 'azure', 'gcp'],
21
+ // Database indicators
22
+ database: ['database', 'db', 'postgres', 'mysql', 'mongodb', 'redis', 'elasticsearch', 'migration', 'schema'],
23
+ // Security indicators
24
+ security: ['security', 'auth', 'oauth', 'authentication', 'authorization', 'rbac', 'permissions', 'jwt', 'sso'],
25
+ // Mobile indicators
26
+ mobile: ['mobile', 'ios', 'android', 'react native', 'flutter', 'app store', 'play store'],
27
+ // Shared/common indicators
28
+ shared: ['shared', 'common', 'library', 'sdk', 'package', 'module', 'types', 'models']
29
+ };
30
+ /**
31
+ * Explicit cross-cutting phrases
32
+ */
33
+ const EXPLICIT_CROSS_CUTTING = [
34
+ 'across projects',
35
+ 'multiple repos',
36
+ 'cross-project',
37
+ 'cross-team',
38
+ 'frontend and backend',
39
+ 'end-to-end',
40
+ 'full-stack',
41
+ 'fullstack',
42
+ 'from ui to api',
43
+ 'from client to server',
44
+ 'all services',
45
+ 'all teams',
46
+ 'affects multiple',
47
+ 'impacts all'
48
+ ];
49
+ /**
50
+ * Cross-Cutting Detector
51
+ */
52
+ export class CrossCuttingDetector {
53
+ constructor(options = {}) {
54
+ this.customMappings = {};
55
+ this.logger = options.logger ?? consoleLogger;
56
+ this.customMappings = options.customMappings ?? {};
57
+ }
58
+ /**
59
+ * Detect if a description indicates cross-cutting concerns
60
+ */
61
+ detect(description) {
62
+ const normalized = description.toLowerCase();
63
+ const detectedPatterns = [];
64
+ const suggestedProjects = new Set();
65
+ // 1. Check explicit cross-cutting phrases (high confidence)
66
+ for (const phrase of EXPLICIT_CROSS_CUTTING) {
67
+ if (normalized.includes(phrase)) {
68
+ detectedPatterns.push({
69
+ type: 'explicit',
70
+ matched: phrase
71
+ });
72
+ }
73
+ }
74
+ // 2. Check keyword patterns
75
+ const allPatterns = { ...CROSS_CUTTING_PATTERNS, ...this.customMappings };
76
+ for (const [project, keywords] of Object.entries(allPatterns)) {
77
+ for (const keyword of keywords) {
78
+ // Use word boundary matching for more accuracy
79
+ const regex = new RegExp(`\\b${this.escapeRegex(keyword)}\\b`, 'i');
80
+ if (regex.test(description)) {
81
+ detectedPatterns.push({
82
+ type: 'keyword',
83
+ matched: keyword,
84
+ suggestedProject: project
85
+ });
86
+ suggestedProjects.add(project);
87
+ }
88
+ }
89
+ }
90
+ // 3. Determine if cross-cutting
91
+ const uniqueProjects = [...suggestedProjects];
92
+ const isCrossCutting = uniqueProjects.length >= 2 || detectedPatterns.some(p => p.type === 'explicit');
93
+ // 4. Calculate confidence
94
+ let confidence = 'low';
95
+ if (detectedPatterns.some(p => p.type === 'explicit')) {
96
+ confidence = 'high';
97
+ }
98
+ else if (uniqueProjects.length >= 3) {
99
+ confidence = 'high';
100
+ }
101
+ else if (uniqueProjects.length === 2) {
102
+ // Check if multiple keywords matched per project
103
+ const projectKeywordCounts = new Map();
104
+ for (const pattern of detectedPatterns) {
105
+ if (pattern.suggestedProject) {
106
+ projectKeywordCounts.set(pattern.suggestedProject, (projectKeywordCounts.get(pattern.suggestedProject) || 0) + 1);
107
+ }
108
+ }
109
+ const minMatches = Math.min(...projectKeywordCounts.values());
110
+ confidence = minMatches >= 2 ? 'high' : 'medium';
111
+ }
112
+ // 5. Generate reason
113
+ let reason;
114
+ if (isCrossCutting) {
115
+ if (detectedPatterns.some(p => p.type === 'explicit')) {
116
+ const explicit = detectedPatterns.find(p => p.type === 'explicit');
117
+ reason = `Explicit cross-cutting phrase detected: "${explicit?.matched}"`;
118
+ }
119
+ else {
120
+ reason = `Multiple project domains detected: ${uniqueProjects.join(', ')}`;
121
+ }
122
+ }
123
+ return {
124
+ isCrossCutting,
125
+ confidence,
126
+ suggestedProjects: uniqueProjects,
127
+ detectedPatterns,
128
+ reason
129
+ };
130
+ }
131
+ /**
132
+ * Add custom project mappings
133
+ */
134
+ addCustomMapping(project, keywords) {
135
+ this.customMappings[project] = [
136
+ ...(this.customMappings[project] || []),
137
+ ...keywords
138
+ ];
139
+ }
140
+ /**
141
+ * Load custom mappings from config
142
+ */
143
+ loadMappingsFromConfig(projectMappings) {
144
+ // Extract project IDs as potential mapping targets
145
+ for (const projectId of Object.keys(projectMappings)) {
146
+ // Add the project ID itself as a keyword
147
+ if (!this.customMappings[projectId]) {
148
+ this.customMappings[projectId] = [projectId];
149
+ }
150
+ }
151
+ }
152
+ /**
153
+ * Escape regex special characters
154
+ */
155
+ escapeRegex(str) {
156
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
157
+ }
158
+ }
159
+ /**
160
+ * Convenience function for one-off detection
161
+ */
162
+ export function detectCrossCutting(description, options) {
163
+ const detector = new CrossCuttingDetector(options);
164
+ return detector.detect(description);
165
+ }
166
+ /**
167
+ * Get suggested project for a single-project feature
168
+ */
169
+ export function suggestSingleProject(description) {
170
+ const result = detectCrossCutting(description);
171
+ if (result.isCrossCutting) {
172
+ return null; // Ambiguous - needs user selection
173
+ }
174
+ if (result.suggestedProjects.length === 1) {
175
+ return result.suggestedProjects[0];
176
+ }
177
+ return null; // No clear suggestion
178
+ }
179
+ //# sourceMappingURL=cross-cutting-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-cutting-detector.js","sourceRoot":"","sources":["../../../src/utils/cross-cutting-detector.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,14 @@
2
2
  * Project ID Auto-Detection Utilities
3
3
  *
4
4
  * Detects project ID from (priority order):
5
- * 1. multiProject.activeProject (explicit project folder config)
6
- * 2. sync.activeProfile (ONLY for legacy umbrella repos without multiProject)
7
- * 3. Git remote (GitHub repo name)
8
- * 4. Sync configuration (JIRA project key, ADO project name)
9
- * 5. User prompt (fallback)
5
+ * 1. sync.activeProfile (for multi-profile monorepos)
6
+ * 2. Git remote (GitHub repo name)
7
+ * 3. Sync configuration (JIRA project key, ADO project name)
8
+ * 4. User prompt (fallback)
9
+ *
10
+ * NOTE (v0.33.0): multiProject.activeProject has been REMOVED!
11
+ * Per-US project targeting replaces global activeProject.
12
+ * See: 0125-cross-project-user-story-targeting
10
13
  *
11
14
  * Also provides repo name parsing for domain context understanding.
12
15
  */
@@ -44,10 +47,11 @@ export declare function parseRepoName(repoName: string): ParsedRepoName;
44
47
  /**
45
48
  * Detect active project ID from configuration
46
49
  *
50
+ * NOTE (v0.33.0): multiProject.activeProject has been REMOVED!
51
+ * This function now only uses sync.activeProfile for legacy umbrella repos.
52
+ *
47
53
  * Priority:
48
- * 1. multiProject.activeProject - explicit project folder configuration
49
- * 2. sync.activeProfile - ONLY for umbrella repos where profile maps to folder
50
- * (skipped if profile name differs from multiProject.activeProject)
54
+ * 1. sync.activeProfile - for umbrella repos where profile maps to folder
51
55
  *
52
56
  * @param projectRoot - Project root directory
53
57
  * @returns Active project ID or null if not configured
@@ -1 +1 @@
1
- {"version":3,"file":"project-detection.d.ts","sourceRoot":"","sources":["../../../src/utils/project-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAyC9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0DxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkCzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsD1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,MAAM,CAgCR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB3D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAkBlE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,YAAY,EAAE,eAAe,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;IACxE,oEAAoE;IACpE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC;CACV;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAqErE"}
1
+ {"version":3,"file":"project-detection.d.ts","sourceRoot":"","sources":["../../../src/utils/project-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAyC9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8CxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkCzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsD1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,MAAM,CAgCR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB3D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAkBlE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,YAAY,EAAE,eAAe,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;IACxE,oEAAoE;IACpE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC;CACV;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAqErE"}
@@ -2,11 +2,14 @@
2
2
  * Project ID Auto-Detection Utilities
3
3
  *
4
4
  * Detects project ID from (priority order):
5
- * 1. multiProject.activeProject (explicit project folder config)
6
- * 2. sync.activeProfile (ONLY for legacy umbrella repos without multiProject)
7
- * 3. Git remote (GitHub repo name)
8
- * 4. Sync configuration (JIRA project key, ADO project name)
9
- * 5. User prompt (fallback)
5
+ * 1. sync.activeProfile (for multi-profile monorepos)
6
+ * 2. Git remote (GitHub repo name)
7
+ * 3. Sync configuration (JIRA project key, ADO project name)
8
+ * 4. User prompt (fallback)
9
+ *
10
+ * NOTE (v0.33.0): multiProject.activeProject has been REMOVED!
11
+ * Per-US project targeting replaces global activeProject.
12
+ * See: 0125-cross-project-user-story-targeting
10
13
  *
11
14
  * Also provides repo name parsing for domain context understanding.
12
15
  */
@@ -79,10 +82,11 @@ export function parseRepoName(repoName) {
79
82
  /**
80
83
  * Detect active project ID from configuration
81
84
  *
85
+ * NOTE (v0.33.0): multiProject.activeProject has been REMOVED!
86
+ * This function now only uses sync.activeProfile for legacy umbrella repos.
87
+ *
82
88
  * Priority:
83
- * 1. multiProject.activeProject - explicit project folder configuration
84
- * 2. sync.activeProfile - ONLY for umbrella repos where profile maps to folder
85
- * (skipped if profile name differs from multiProject.activeProject)
89
+ * 1. sync.activeProfile - for umbrella repos where profile maps to folder
86
90
  *
87
91
  * @param projectRoot - Project root directory
88
92
  * @returns Active project ID or null if not configured
@@ -91,20 +95,10 @@ export function detectActiveProfileId(projectRoot) {
91
95
  try {
92
96
  const configManager = new ConfigManager(projectRoot);
93
97
  const config = configManager.load();
94
- // Priority 1: Explicit multiProject.activeProject (most reliable)
95
- if (config.multiProject?.activeProject && config.multiProject.activeProject !== 'default') {
96
- return config.multiProject.activeProject.toLowerCase();
97
- }
98
- // Priority 2: sync.activeProfile ONLY for umbrella repos
98
+ // sync.activeProfile for umbrella repos
99
99
  // where profile IS a folder (like "be", "fe", "shared")
100
- // Skip if multiProject is configured (activeProfile is just a sync config name)
101
100
  if (config.sync?.activeProfile && config.sync?.profiles) {
102
101
  const activeProfileId = config.sync.activeProfile;
103
- // If multiProject is enabled, sync.activeProfile is just a connection name
104
- // NOT a project folder - skip it
105
- if (config.multiProject?.enabled) {
106
- return null;
107
- }
108
102
  // CRITICAL FIX (2025-11-30): Provider-prefixed profile IDs are NOT folder names
109
103
  // ProfileIds like "ado-myproject", "jira-webapp" are sync connection identifiers
110
104
  // NOT project folders! The actual folder name comes from profile.config.project
@@ -1 +1 @@
1
- {"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../../src/utils/project-detection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../../src/utils/project-detection.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.32.3",
3
+ "version": "0.32.5",
4
4
  "description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -262,6 +262,70 @@ Experiments inactive >14 days → warning:
262
262
 
263
263
  ---
264
264
 
265
+ ## Cross-Project View (v0.33.0+)
266
+
267
+ When an increment has user stories targeting multiple projects, show grouped view:
268
+
269
+ ```bash
270
+ /specweave:status 0125
271
+
272
+ 📊 Increment Status: 0125-cross-project-targeting
273
+
274
+ 🔀 Cross-Project Increment (spans 3 projects):
275
+
276
+ ┌───────────────┬────────────┬──────────┬────────────────┬─────────────────────┐
277
+ │ Project │ Provider │ USs │ Status │ External Issues │
278
+ ├───────────────┼────────────┼──────────┼────────────────┼─────────────────────┤
279
+ │ frontend-app │ github │ US-001, │ ✅ Synced │ #45, #46 │
280
+ │ │ │ US-003 │ │ github.com/org/fe │
281
+ ├───────────────┼────────────┼──────────┼────────────────┼─────────────────────┤
282
+ │ backend-api │ jira │ US-002 │ ✅ Synced │ SEC-123 │
283
+ │ │ │ │ │ jira.com/browse │
284
+ ├───────────────┼────────────┼──────────┼────────────────┼─────────────────────┤
285
+ │ shared-lib │ ⚠️ None │ US-004 │ Not mapped │ — │
286
+ │ │ │ │ │ │
287
+ └───────────────┴────────────┴──────────┴────────────────┴─────────────────────┘
288
+
289
+ 📋 Progress by Project:
290
+ frontend-app: 75% (3/4 tasks)
291
+ backend-api: 50% (2/4 tasks)
292
+ shared-lib: 100% (2/2 tasks)
293
+
294
+ 💡 Unmapped project 'shared-lib':
295
+ Add to .specweave/config.json projectMappings or create issues manually
296
+ ```
297
+
298
+ ### Cross-Project Implementation
299
+
300
+ ```typescript
301
+ import { CrossProjectSync } from '../src/core/living-docs/cross-project-sync';
302
+ import { ExternalSyncOrchestrator } from '../src/core/living-docs/external-sync-orchestrator';
303
+
304
+ // Detect cross-project
305
+ const crossProjectSync = new CrossProjectSync(projectRoot);
306
+ const userStories = parseUserStories(specContent);
307
+ const isCrossProject = crossProjectSync.isCrossProject(userStories, defaultProject);
308
+
309
+ if (isCrossProject) {
310
+ // Group by project
311
+ const groups = crossProjectSync.groupByProject(userStories, defaultProject);
312
+
313
+ // Load project mappings
314
+ const orchestrator = new ExternalSyncOrchestrator(projectRoot);
315
+ await orchestrator.loadProjectMappings();
316
+
317
+ // Display per-project status
318
+ for (const [projectId, stories] of groups) {
319
+ const mapping = orchestrator.getProjectMapping(projectId);
320
+ const provider = mapping?.github ? 'github' : mapping?.jira ? 'jira' : mapping?.ado ? 'ado' : null;
321
+
322
+ console.log(`│ ${projectId.padEnd(13)} │ ${(provider || '⚠️ None').padEnd(10)} │ ...`);
323
+ }
324
+ }
325
+ ```
326
+
327
+ ---
328
+
265
329
  ## Filters
266
330
 
267
331
  ### --active
@@ -42,7 +42,7 @@
42
42
  },
43
43
  {
44
44
  "matcher": "Write",
45
- "matcher_content": "\\.specweave/increments/\\d{4}-[^/]+/spec\\.md",
45
+ "matcher_content": "\\.specweave/increments/\\d{3,4}E?-[^/]+/spec\\.md",
46
46
  "hooks": [
47
47
  {
48
48
  "type": "command",
@@ -43,7 +43,8 @@ fi
43
43
  FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // ""')
44
44
 
45
45
  # Only validate spec.md files in increments folder
46
- if [[ ! "$FILE_PATH" =~ \.specweave/increments/[0-9]{4}E?-[^/]+/spec\.md$ ]]; then
46
+ # Match: 3-4 digits, optional E suffix, kebab-case name, spec.md
47
+ if [[ ! "$FILE_PATH" =~ \.specweave/increments/[0-9]{3,4}E?-[^/]+/spec\.md$ ]]; then
47
48
  echo '{"decision": "allow"}'
48
49
  exit 0
49
50
  fi
@@ -245,6 +245,34 @@ export interface ExternalContainerContext {
245
245
  /** Area path (ADO only) */
246
246
  areaPath?: string;
247
247
  }
248
+ /**
249
+ * External reference for a single US in a single external tool
250
+ * @since v0.33.0
251
+ */
252
+ export interface USExternalRef {
253
+ /** External tool type */
254
+ provider: 'github' | 'jira' | 'ado';
255
+ /** Issue/work item number */
256
+ issueNumber: number | string;
257
+ /** Issue URL */
258
+ url: string;
259
+ /** Target project/repo for this US (from projectMappings) */
260
+ targetProject: string;
261
+ /** Last sync timestamp */
262
+ lastSynced?: string;
263
+ }
264
+ /**
265
+ * Per-US external references map
266
+ * Maps US-ID → provider → reference
267
+ * @since v0.33.0
268
+ */
269
+ export interface USExternalRefsMap {
270
+ [usId: string]: {
271
+ github?: USExternalRef;
272
+ jira?: USExternalRef;
273
+ ado?: USExternalRef;
274
+ };
275
+ }
248
276
  /**
249
277
  * Extended increment metadata with multi-project support (v0.29.0+)
250
278
  *
@@ -262,5 +290,11 @@ export interface IncrementMetadataV2 extends IncrementMetadata {
262
290
  externalContainer?: ExternalContainerContext;
263
291
  /** Epic ID if part of an epic */
264
292
  epicId?: string;
293
+ /**
294
+ * Per-US external references (v0.33.0+)
295
+ * Replaces the single external_ref for cross-project increments
296
+ * Maps: US-001 → { github: {...}, jira: {...} }
297
+ */
298
+ externalRefs?: USExternalRefsMap;
265
299
  }
266
300
  //# sourceMappingURL=increment-metadata.d.ts.map
@@ -246,6 +246,70 @@ specweave context boards --project=acme-corp
246
246
 
247
247
  ---
248
248
 
249
+ ### RULE 0: LEVERAGE ALL AVAILABLE CONTEXT (v0.33.0+ CRITICAL!)
250
+
251
+ **🧠 YOU ARE AN LLM WITH FULL CONTEXT ACCESS - USE IT!**
252
+
253
+ Before asking the user ANYTHING about project/board, you MUST analyze:
254
+
255
+ **1. Living Docs Structure** (`.specweave/docs/internal/specs/`):
256
+ ```bash
257
+ # List existing project folders
258
+ ls -la .specweave/docs/internal/specs/
259
+ # Example output: frontend-app/, backend-api/, mobile-app/, shared-lib/
260
+ ```
261
+ → These ARE the actual project IDs! Use them directly.
262
+
263
+ **2. Existing Increment Patterns** (`.specweave/increments/`):
264
+ ```bash
265
+ # Read recent increments to see project assignments
266
+ grep -r "^\*\*Project\*\*:" .specweave/increments/*/spec.md | tail -20
267
+ ```
268
+ → Learn from how past USs were assigned to projects.
269
+
270
+ **3. Config projectMappings** (`.specweave/config.json`):
271
+ ```bash
272
+ cat .specweave/config.json | jq '.projectMappings'
273
+ ```
274
+ → Use ACTUAL project IDs from config, not generic keywords.
275
+
276
+ **4. Git Remotes** (for repo-based projects):
277
+ ```bash
278
+ git remote -v | head -2
279
+ ```
280
+ → If repo is `myorg/frontend-app`, that's likely the project.
281
+
282
+ **5. Feature Description + US Content**:
283
+ - Analyze the feature user is describing
284
+ - Match against project patterns from above sources
285
+ - Map generic terms to actual project IDs
286
+
287
+ **MAPPING EXAMPLE:**
288
+ ```
289
+ User says: "Add login form to the frontend"
290
+ You detect: "frontend" keyword
291
+
292
+ WRONG: Assign project = "frontend" (generic, may not exist!)
293
+ RIGHT: Check living docs → find "frontend-app" folder → Assign project = "frontend-app"
294
+ ```
295
+
296
+ **RESOLUTION PRIORITY:**
297
+ ```
298
+ 1. Exact match in projectMappings keys → USE IT
299
+ 2. Exact match in living docs folders → USE IT
300
+ 3. Pattern match in recent increment specs → USE SAME PROJECT
301
+ 4. Keyword → Map to closest projectMappings/folder
302
+ 5. ONLY IF ALL ABOVE FAIL → Ask user with dropdown of valid options
303
+ ```
304
+
305
+ **FORBIDDEN:**
306
+ - ❌ Inventing project names not in config/folders
307
+ - ❌ Using generic keywords ("frontend") when actual ID exists ("frontend-app")
308
+ - ❌ Asking user when context provides clear answer
309
+ - ❌ Assigning `{{PROJECT_ID}}` placeholder
310
+
311
+ ---
312
+
249
313
  ### SMART SELECTION DECISION TREE
250
314
 
251
315
  **RULE 1: NO QUESTION IF ONLY 1 OPTION**
@@ -254,9 +318,20 @@ IF 1-level AND only 1 project → AUTO-SELECT silently
254
318
  IF 2-level AND only 1 project AND only 1 board → AUTO-SELECT silently
255
319
  ```
256
320
 
257
- **RULE 2: KEYWORD-BASED AUTO-DETECTION**
321
+ **RULE 2: KEYWORD-BASED AUTO-DETECTION (v0.33.0+)**
322
+
323
+ Use `CrossCuttingDetector` utility for programmatic detection:
324
+
325
+ ```typescript
326
+ import { detectCrossCutting } from 'src/utils/cross-cutting-detector.js';
327
+
328
+ const result = detectCrossCutting("OAuth with React frontend and Node backend");
329
+ // result.isCrossCutting = true
330
+ // result.suggestedProjects = ["frontend", "backend"]
331
+ // result.confidence = "high"
332
+ ```
258
333
 
259
- Analyze feature description and US content for keywords:
334
+ Or analyze feature description and US content for keywords:
260
335
 
261
336
  **Project-Level Keywords (1-level and 2-level):**
262
337
  ```