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.
- package/CLAUDE.md +12 -9
- package/dist/src/cli/commands/init-multiproject.js +1 -1
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +2 -2
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.d.ts +97 -0
- package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -0
- package/dist/src/core/living-docs/cross-project-sync.js +135 -0
- package/dist/src/core/living-docs/cross-project-sync.js.map +1 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.d.ts +106 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.d.ts.map +1 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.js +146 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.js.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +77 -2
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/generators.d.ts +8 -1
- package/dist/src/core/living-docs/sync-helpers/generators.d.ts.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/generators.js +18 -1
- package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/index.d.ts +1 -1
- package/dist/src/core/living-docs/sync-helpers/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/index.js.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/parsers.d.ts +3 -1
- package/dist/src/core/living-docs/sync-helpers/parsers.d.ts.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/parsers.js +24 -2
- package/dist/src/core/living-docs/sync-helpers/parsers.js.map +1 -1
- package/dist/src/core/living-docs/types.d.ts +6 -0
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/validators/index.d.ts +7 -0
- package/dist/src/core/living-docs/validators/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/validators/index.js +7 -0
- package/dist/src/core/living-docs/validators/index.js.map +1 -0
- package/dist/src/core/living-docs/validators/project-validator.d.ts +92 -0
- package/dist/src/core/living-docs/validators/project-validator.d.ts.map +1 -0
- package/dist/src/core/living-docs/validators/project-validator.js +142 -0
- package/dist/src/core/living-docs/validators/project-validator.js.map +1 -0
- package/dist/src/core/project/project-manager.d.ts.map +1 -1
- package/dist/src/core/project/project-manager.js +19 -17
- package/dist/src/core/project/project-manager.js.map +1 -1
- package/dist/src/core/types/config.d.ts +4 -2
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +34 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/utils/cross-cutting-detector.d.ts +66 -0
- package/dist/src/utils/cross-cutting-detector.d.ts.map +1 -0
- package/dist/src/utils/cross-cutting-detector.js +179 -0
- package/dist/src/utils/cross-cutting-detector.js.map +1 -0
- package/dist/src/utils/project-detection.d.ts +12 -8
- package/dist/src/utils/project-detection.d.ts.map +1 -1
- package/dist/src/utils/project-detection.js +13 -19
- package/dist/src/utils/project-detection.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-status.md +64 -0
- package/plugins/specweave/hooks/hooks.json +1 -1
- package/plugins/specweave/hooks/spec-project-validator.sh +2 -1
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +34 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +77 -2
- package/plugins/specweave/skills/spec-generator/SKILL.md +78 -7
- 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.
|
|
6
|
-
* 2.
|
|
7
|
-
* 3.
|
|
8
|
-
* 4.
|
|
9
|
-
*
|
|
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.
|
|
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
|
|
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.
|
|
6
|
-
* 2.
|
|
7
|
-
* 3.
|
|
8
|
-
* 4.
|
|
9
|
-
*
|
|
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.
|
|
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
|
-
//
|
|
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
|
+
"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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
334
|
+
Or analyze feature description and US content for keywords:
|
|
260
335
|
|
|
261
336
|
**Project-Level Keywords (1-level and 2-level):**
|
|
262
337
|
```
|