specweave 0.33.2 → 0.33.4
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 +133 -19
- package/dist/plugins/specweave-ado/lib/per-us-sync.d.ts +120 -0
- package/dist/plugins/specweave-ado/lib/per-us-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/per-us-sync.js +276 -0
- package/dist/plugins/specweave-ado/lib/per-us-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +4 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +13 -3
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/per-us-sync.d.ts +97 -0
- package/dist/plugins/specweave-github/lib/per-us-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/per-us-sync.js +274 -0
- package/dist/plugins/specweave-github/lib/per-us-sync.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.d.ts +113 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.js +254 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.js.map +1 -0
- package/dist/src/cli/cleanup-zombies.js +8 -5
- package/dist/src/cli/cleanup-zombies.js.map +1 -1
- package/dist/src/config/types.d.ts +203 -1208
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/config/config-manager.d.ts.map +1 -1
- package/dist/src/core/config/config-manager.js +58 -0
- package/dist/src/core/config/config-manager.js.map +1 -1
- package/dist/src/core/config/types.d.ts +80 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.d.ts +87 -15
- package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.js +147 -28
- package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +26 -22
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/types.d.ts +24 -3
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/types/config.d.ts +79 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/importers/jira-importer.d.ts +10 -0
- package/dist/src/importers/jira-importer.d.ts.map +1 -1
- package/dist/src/importers/jira-importer.js +55 -5
- package/dist/src/importers/jira-importer.js.map +1 -1
- package/dist/src/init/architecture/types.d.ts +33 -140
- package/dist/src/init/architecture/types.d.ts.map +1 -1
- package/dist/src/init/compliance/types.d.ts +30 -27
- package/dist/src/init/compliance/types.d.ts.map +1 -1
- package/dist/src/init/repo/types.d.ts +11 -34
- package/dist/src/init/repo/types.d.ts.map +1 -1
- package/dist/src/init/research/src/config/types.d.ts +15 -82
- package/dist/src/init/research/src/config/types.d.ts.map +1 -1
- package/dist/src/init/research/types.d.ts +38 -93
- package/dist/src/init/research/types.d.ts.map +1 -1
- package/dist/src/init/team/types.d.ts +4 -42
- package/dist/src/init/team/types.d.ts.map +1 -1
- package/dist/src/sync/closure-metrics.d.ts +102 -0
- package/dist/src/sync/closure-metrics.d.ts.map +1 -0
- package/dist/src/sync/closure-metrics.js +267 -0
- package/dist/src/sync/closure-metrics.js.map +1 -0
- package/dist/src/sync/sync-coordinator.d.ts +49 -0
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +399 -37
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/dist/src/utils/notification-constants.d.ts +85 -0
- package/dist/src/utils/notification-constants.d.ts.map +1 -0
- package/dist/src/utils/notification-constants.js +129 -0
- package/dist/src/utils/notification-constants.js.map +1 -0
- package/dist/src/utils/platform-utils.d.ts +13 -3
- package/dist/src/utils/platform-utils.d.ts.map +1 -1
- package/dist/src/utils/platform-utils.js +17 -6
- package/dist/src/utils/platform-utils.js.map +1 -1
- package/dist/src/utils/project-resolver.d.ts +156 -0
- package/dist/src/utils/project-resolver.d.ts.map +1 -0
- package/dist/src/utils/project-resolver.js +587 -0
- package/dist/src/utils/project-resolver.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-increment.md +46 -0
- package/plugins/specweave/commands/specweave-jobs.md +153 -8
- package/plugins/specweave/hooks/hooks.json +10 -0
- package/plugins/specweave/hooks/spec-project-validator.sh +24 -2
- package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -26
- package/plugins/specweave/hooks/universal/session-start.cmd +16 -16
- package/plugins/specweave/hooks/universal/session-start.ps1 +16 -16
- package/plugins/specweave/hooks/user-prompt-submit.sh +105 -3
- package/plugins/specweave/hooks/v2/guards/per-us-project-validator.sh +281 -0
- package/plugins/specweave/hooks/v2/handlers/living-specs-handler.sh +29 -0
- package/plugins/specweave/scripts/session-watchdog.sh +278 -130
- package/plugins/specweave/skills/increment-planner/SKILL.md +48 -18
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +27 -14
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +16 -5
- package/plugins/specweave/skills/spec-generator/SKILL.md +74 -15
- package/plugins/specweave-ado/lib/per-us-sync.js +247 -0
- package/plugins/specweave-ado/lib/per-us-sync.ts +410 -0
- package/plugins/specweave-github/lib/github-client-v2.js +10 -3
- package/plugins/specweave-github/lib/github-client-v2.ts +15 -3
- package/plugins/specweave-github/lib/per-us-sync.js +241 -0
- package/plugins/specweave-github/lib/per-us-sync.ts +375 -0
- package/plugins/specweave-jira/lib/per-us-sync.js +224 -0
- package/plugins/specweave-jira/lib/per-us-sync.ts +366 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +0 -738
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +0 -1107
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Resolver
|
|
3
|
+
*
|
|
4
|
+
* Smart utility that auto-resolves project/board for user stories
|
|
5
|
+
* based on context analysis:
|
|
6
|
+
* - Single project → auto-select
|
|
7
|
+
* - Keyword matching → suggest with confidence
|
|
8
|
+
* - Cross-cutting detection → split across projects
|
|
9
|
+
* - Learned patterns from existing specs
|
|
10
|
+
*
|
|
11
|
+
* Part of increment 0137: Per-US Project/Board Enforcement
|
|
12
|
+
*
|
|
13
|
+
* @module utils/project-resolver
|
|
14
|
+
* @since v0.34.0
|
|
15
|
+
*/
|
|
16
|
+
import { type ProjectInfo, type BoardInfo } from './structure-level-detector.js';
|
|
17
|
+
import { Logger } from './logger.js';
|
|
18
|
+
import { CrossCuttingDetector, type CrossCuttingResult, type DetectedPattern } from './cross-cutting-detector.js';
|
|
19
|
+
/**
|
|
20
|
+
* Resolution result for a single user story
|
|
21
|
+
*/
|
|
22
|
+
export interface ProjectResolution {
|
|
23
|
+
/** Whether project was successfully resolved */
|
|
24
|
+
resolved: boolean;
|
|
25
|
+
/** Resolved project ID (if resolved) */
|
|
26
|
+
projectId?: string;
|
|
27
|
+
/** Resolved board ID (for 2-level structures) */
|
|
28
|
+
boardId?: string;
|
|
29
|
+
/** Confidence level */
|
|
30
|
+
confidence: 'high' | 'medium' | 'low';
|
|
31
|
+
/** Reason for resolution decision */
|
|
32
|
+
reason: string;
|
|
33
|
+
/** Keywords that matched (if any) */
|
|
34
|
+
matchedKeywords?: string[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolution result for an entire increment
|
|
38
|
+
*/
|
|
39
|
+
export interface IncrementResolution {
|
|
40
|
+
/** Whether this is a cross-project increment */
|
|
41
|
+
isCrossProject: boolean;
|
|
42
|
+
/** Default project for USs without explicit assignment */
|
|
43
|
+
defaultProject: string;
|
|
44
|
+
/** Default board for 2-level (optional) */
|
|
45
|
+
defaultBoard?: string;
|
|
46
|
+
/** Suggested project for each US type */
|
|
47
|
+
suggestions: Map<string, ProjectResolution>;
|
|
48
|
+
/** Structure level detected */
|
|
49
|
+
structureLevel: 1 | 2;
|
|
50
|
+
/** Cross-cutting detection result (when detected) */
|
|
51
|
+
crossCuttingResult?: CrossCuttingResult;
|
|
52
|
+
/** Detected patterns for display/logging */
|
|
53
|
+
detectedPatterns?: DetectedPattern[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Project Resolver
|
|
57
|
+
*
|
|
58
|
+
* Resolves project/board context for user stories based on:
|
|
59
|
+
* 1. Single project auto-selection
|
|
60
|
+
* 2. Learned patterns from existing specs
|
|
61
|
+
* 3. Keyword-based matching
|
|
62
|
+
* 4. Cross-cutting detection
|
|
63
|
+
*/
|
|
64
|
+
export declare class ProjectResolver {
|
|
65
|
+
private projectRoot;
|
|
66
|
+
private logger;
|
|
67
|
+
private structureConfig;
|
|
68
|
+
private learnedPatterns;
|
|
69
|
+
private keywordPatterns;
|
|
70
|
+
private crossCuttingDetector;
|
|
71
|
+
constructor(projectRoot: string, options?: {
|
|
72
|
+
logger?: Logger;
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* Get structure level (1 or 2)
|
|
76
|
+
*/
|
|
77
|
+
getStructureLevel(): 1 | 2;
|
|
78
|
+
/**
|
|
79
|
+
* Get available projects
|
|
80
|
+
*/
|
|
81
|
+
getProjects(): ProjectInfo[];
|
|
82
|
+
/**
|
|
83
|
+
* Get boards for a project (2-level only)
|
|
84
|
+
*/
|
|
85
|
+
getBoards(projectId: string): BoardInfo[];
|
|
86
|
+
/**
|
|
87
|
+
* Learn keyword patterns from existing spec.md files
|
|
88
|
+
*/
|
|
89
|
+
learnFromExistingSpecs(): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Extract keyword → project patterns from a spec file
|
|
92
|
+
*/
|
|
93
|
+
private extractPatternsFromSpec;
|
|
94
|
+
/**
|
|
95
|
+
* Check if word is in default patterns
|
|
96
|
+
*/
|
|
97
|
+
private isDefaultPattern;
|
|
98
|
+
/**
|
|
99
|
+
* Resolve project for a single user story
|
|
100
|
+
*/
|
|
101
|
+
resolveForUserStory(usContent: string): ProjectResolution;
|
|
102
|
+
/**
|
|
103
|
+
* Map suggested project type (frontend, backend, etc.) to actual project ID
|
|
104
|
+
*/
|
|
105
|
+
private mapSuggestedTypeToProject;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve board for a user story (2-level structures only)
|
|
108
|
+
*/
|
|
109
|
+
resolveBoard(usContent: string, projectId: string): ProjectResolution;
|
|
110
|
+
/**
|
|
111
|
+
* Match content against project keywords
|
|
112
|
+
*/
|
|
113
|
+
private matchProjectsByKeywords;
|
|
114
|
+
/**
|
|
115
|
+
* Resolve project context for an entire increment description
|
|
116
|
+
*/
|
|
117
|
+
resolveForIncrement(incrementDescription: string): IncrementResolution;
|
|
118
|
+
/**
|
|
119
|
+
* Detect if description indicates cross-project work
|
|
120
|
+
*/
|
|
121
|
+
private detectCrossProject;
|
|
122
|
+
/**
|
|
123
|
+
* Check if content matches any keywords
|
|
124
|
+
*/
|
|
125
|
+
private matchesKeywords;
|
|
126
|
+
/**
|
|
127
|
+
* Detect cross-cutting concerns using the integrated detector
|
|
128
|
+
* Returns full detection result for advanced use cases
|
|
129
|
+
*/
|
|
130
|
+
detectCrossCuttingConcerns(description: string): CrossCuttingResult;
|
|
131
|
+
/**
|
|
132
|
+
* Get the cross-cutting detector instance for direct access
|
|
133
|
+
*/
|
|
134
|
+
getCrossCuttingDetector(): CrossCuttingDetector;
|
|
135
|
+
/**
|
|
136
|
+
* Format available projects for display
|
|
137
|
+
*/
|
|
138
|
+
formatProjectsForDisplay(): string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create a project resolver instance (sync - no pattern learning)
|
|
142
|
+
*/
|
|
143
|
+
export declare function createProjectResolver(projectRoot: string, options?: {
|
|
144
|
+
logger?: Logger;
|
|
145
|
+
}): ProjectResolver;
|
|
146
|
+
/**
|
|
147
|
+
* Create a project resolver instance with pattern learning (async)
|
|
148
|
+
*
|
|
149
|
+
* This awaits learnFromExistingSpecs() to ensure patterns are available
|
|
150
|
+
* before the resolver is used.
|
|
151
|
+
*/
|
|
152
|
+
export declare function createProjectResolverWithPatterns(projectRoot: string, options?: {
|
|
153
|
+
logger?: Logger;
|
|
154
|
+
}): Promise<ProjectResolver>;
|
|
155
|
+
export type { CrossCuttingResult, DetectedPattern };
|
|
156
|
+
//# sourceMappingURL=project-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-resolver.d.ts","sourceRoot":"","sources":["../../../src/utils/project-resolver.ts"],"names":[],"mappings":"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"}
|