specweave 0.21.3 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +198 -6
- package/README.md +33 -3
- package/dist/plugins/specweave-github/lib/CodeValidator.d.ts +101 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.js +219 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +182 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +603 -0
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -0
- package/dist/plugins/specweave-github/lib/types.d.ts +34 -0
- package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +60 -5
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/config/types.d.ts +8 -8
- package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -1
- package/dist/src/core/living-docs/CompletionPropagator.js +4 -3
- package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -1
- package/dist/src/core/living-docs/SpecDistributor.d.ts +5 -0
- package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -1
- package/dist/src/core/living-docs/SpecDistributor.js +12 -0
- package/dist/src/core/living-docs/SpecDistributor.js.map +1 -1
- package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/project-detector.js +38 -0
- package/dist/src/core/living-docs/project-detector.js.map +1 -1
- package/dist/src/core/types/config.d.ts +23 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +10 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/init/ArchitecturePresenter.d.ts +47 -0
- package/dist/src/init/ArchitecturePresenter.d.ts.map +1 -0
- package/dist/src/init/ArchitecturePresenter.js +180 -0
- package/dist/src/init/ArchitecturePresenter.js.map +1 -0
- package/dist/src/init/InitFlow.d.ts.map +1 -1
- package/dist/src/init/InitFlow.js +30 -1
- package/dist/src/init/InitFlow.js.map +1 -1
- package/dist/src/init/architecture/CostEstimator.d.ts +52 -0
- package/dist/src/init/architecture/CostEstimator.d.ts.map +1 -0
- package/dist/src/init/architecture/CostEstimator.js +107 -0
- package/dist/src/init/architecture/CostEstimator.js.map +1 -0
- package/dist/src/init/architecture/InfrastructureMapper.d.ts +41 -0
- package/dist/src/init/architecture/InfrastructureMapper.d.ts.map +1 -0
- package/dist/src/init/architecture/InfrastructureMapper.js +140 -0
- package/dist/src/init/architecture/InfrastructureMapper.js.map +1 -0
- package/dist/src/init/architecture/ProjectGenerator.d.ts +44 -0
- package/dist/src/init/architecture/ProjectGenerator.d.ts.map +1 -0
- package/dist/src/init/architecture/ProjectGenerator.js +216 -0
- package/dist/src/init/architecture/ProjectGenerator.js.map +1 -0
- package/dist/src/init/research/src/config/types.d.ts +8 -8
- package/package.json +9 -8
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-github/lib/CodeValidator.js +195 -0
- package/plugins/specweave-github/lib/CodeValidator.ts +284 -0
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +545 -0
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +809 -0
- package/plugins/specweave-github/lib/types.ts +38 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1200 -0
- package/src/templates/AGENTS.md.template +22 -1
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Three-Layer Bidirectional Sync Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles synchronization across three layers:
|
|
5
|
+
* - Layer 1: GitHub Issue (stakeholder UI)
|
|
6
|
+
* - Layer 2: Living Docs User Story files (intermediate representation)
|
|
7
|
+
* - Layer 3: Increment spec.md + tasks.md (source of truth)
|
|
8
|
+
*
|
|
9
|
+
* Supports two sync flows:
|
|
10
|
+
* 1. GitHub → Living Docs → Increment (stakeholder checks checkbox)
|
|
11
|
+
* 2. Increment → Living Docs → GitHub (developer completes work)
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Code validation (reopen tasks if code doesn't exist)
|
|
15
|
+
* - Completion propagation (Tasks → ACs → User Stories)
|
|
16
|
+
* - Conflict resolution (Increment always wins)
|
|
17
|
+
*
|
|
18
|
+
* @module ThreeLayerSyncManager
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Acceptance Criterion with completion state
|
|
22
|
+
*/
|
|
23
|
+
export interface AcceptanceCriterion {
|
|
24
|
+
id: string;
|
|
25
|
+
userStoryId: string;
|
|
26
|
+
description: string;
|
|
27
|
+
completed: boolean;
|
|
28
|
+
projects: string[];
|
|
29
|
+
rawLine: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Task with completion state and AC references
|
|
33
|
+
*/
|
|
34
|
+
export interface Task {
|
|
35
|
+
id: string;
|
|
36
|
+
title: string;
|
|
37
|
+
completed: boolean;
|
|
38
|
+
completedDate?: string;
|
|
39
|
+
acIds: string[];
|
|
40
|
+
filePaths?: string[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Change detected during sync
|
|
44
|
+
*/
|
|
45
|
+
export interface SyncChange {
|
|
46
|
+
type: 'ac' | 'task';
|
|
47
|
+
id: string;
|
|
48
|
+
completed: boolean;
|
|
49
|
+
layer: 'github' | 'living-docs' | 'increment';
|
|
50
|
+
userStoryPath?: string;
|
|
51
|
+
incrementPath?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Sync result
|
|
55
|
+
*/
|
|
56
|
+
export interface SyncResult {
|
|
57
|
+
acsUpdated: number;
|
|
58
|
+
tasksUpdated: number;
|
|
59
|
+
tasksReopened: number;
|
|
60
|
+
conflicts: string[];
|
|
61
|
+
errors: string[];
|
|
62
|
+
}
|
|
63
|
+
export declare class ThreeLayerSyncManager {
|
|
64
|
+
private codeValidator;
|
|
65
|
+
private userStoryFileCache;
|
|
66
|
+
private projectRoot;
|
|
67
|
+
constructor(projectRoot?: string);
|
|
68
|
+
/**
|
|
69
|
+
* Clear User Story file cache
|
|
70
|
+
* Call this when file structure changes or for testing
|
|
71
|
+
*/
|
|
72
|
+
clearCache(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Sync from GitHub to Increment (Flow 1: GitHub → Living Docs → Increment)
|
|
75
|
+
*
|
|
76
|
+
* Triggered when stakeholder checks AC/Task checkbox in GitHub issue.
|
|
77
|
+
*/
|
|
78
|
+
syncGitHubToIncrement(issueNumber: number, incrementPath: string, livingDocsPath: string): Promise<SyncResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Sync from Increment to GitHub (Flow 2: Increment → Living Docs → GitHub)
|
|
81
|
+
*
|
|
82
|
+
* Triggered when developer completes work and updates increment files.
|
|
83
|
+
*/
|
|
84
|
+
syncIncrementToGitHub(incrementPath: string, livingDocsPath: string, issueNumber: number): Promise<SyncResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Validate that code exists for completed task
|
|
87
|
+
* Uses CodeValidator for comprehensive validation
|
|
88
|
+
*/
|
|
89
|
+
private validateCodeExists;
|
|
90
|
+
/**
|
|
91
|
+
* Reopen task if code validation fails
|
|
92
|
+
*/
|
|
93
|
+
private reopenTask;
|
|
94
|
+
/**
|
|
95
|
+
* Propagate completion from Tasks → ACs → User Stories (bottom-up)
|
|
96
|
+
*/
|
|
97
|
+
propagateCompletion(incrementPath: string, livingDocsPath: string): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Fetch GitHub issue state
|
|
100
|
+
*/
|
|
101
|
+
private fetchGitHubIssueState;
|
|
102
|
+
/**
|
|
103
|
+
* Extract ACs from GitHub issue body
|
|
104
|
+
*/
|
|
105
|
+
private extractAcsFromIssue;
|
|
106
|
+
/**
|
|
107
|
+
* Extract Tasks from GitHub issue body
|
|
108
|
+
*/
|
|
109
|
+
private extractTasksFromIssue;
|
|
110
|
+
/**
|
|
111
|
+
* Parse ACs from spec.md
|
|
112
|
+
*/
|
|
113
|
+
private parseAcceptanceCriteria;
|
|
114
|
+
/**
|
|
115
|
+
* Parse Tasks from tasks.md
|
|
116
|
+
*/
|
|
117
|
+
private parseTasks;
|
|
118
|
+
/**
|
|
119
|
+
* Group ACs by User Story ID
|
|
120
|
+
*/
|
|
121
|
+
private groupAcsByUserStory;
|
|
122
|
+
/**
|
|
123
|
+
* Filter tasks by AC IDs
|
|
124
|
+
*/
|
|
125
|
+
private filterTasksByAcIds;
|
|
126
|
+
/**
|
|
127
|
+
* Find User Story file by ID (with caching for performance)
|
|
128
|
+
*/
|
|
129
|
+
private findUserStoryFile;
|
|
130
|
+
/**
|
|
131
|
+
* Find User Story file that contains specific task
|
|
132
|
+
*/
|
|
133
|
+
private findUserStoryFileForTask;
|
|
134
|
+
/**
|
|
135
|
+
* Update AC in User Story file
|
|
136
|
+
*/
|
|
137
|
+
private updateUserStoryAc;
|
|
138
|
+
/**
|
|
139
|
+
* Update Task in User Story file
|
|
140
|
+
*/
|
|
141
|
+
private updateUserStoryTask;
|
|
142
|
+
/**
|
|
143
|
+
* Update multiple ACs in User Story file
|
|
144
|
+
*/
|
|
145
|
+
private updateUserStoryAcs;
|
|
146
|
+
/**
|
|
147
|
+
* Update multiple Tasks in User Story file
|
|
148
|
+
*/
|
|
149
|
+
private updateUserStoryTasks;
|
|
150
|
+
/**
|
|
151
|
+
* Update AC in increment spec.md
|
|
152
|
+
*/
|
|
153
|
+
private updateIncrementAc;
|
|
154
|
+
/**
|
|
155
|
+
* Update multiple ACs in increment spec.md
|
|
156
|
+
*/
|
|
157
|
+
private updateIncrementAcs;
|
|
158
|
+
/**
|
|
159
|
+
* Update multiple Tasks in increment tasks.md
|
|
160
|
+
*/
|
|
161
|
+
private updateIncrementTasks;
|
|
162
|
+
/**
|
|
163
|
+
* Update ACs in increment with conflict resolution (Increment wins)
|
|
164
|
+
*
|
|
165
|
+
* If GitHub and Increment disagree, Increment state wins as it's the source of truth.
|
|
166
|
+
* Conflicts are logged for transparency.
|
|
167
|
+
*/
|
|
168
|
+
private updateIncrementAcsWithConflictResolution;
|
|
169
|
+
/**
|
|
170
|
+
* Update Tasks in increment with conflict resolution (Increment wins)
|
|
171
|
+
*/
|
|
172
|
+
private updateIncrementTasksWithConflictResolution;
|
|
173
|
+
/**
|
|
174
|
+
* Update GitHub issue with ACs and Tasks
|
|
175
|
+
*/
|
|
176
|
+
private updateGitHubIssue;
|
|
177
|
+
/**
|
|
178
|
+
* Add comment to GitHub issue
|
|
179
|
+
*/
|
|
180
|
+
private addGitHubComment;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=ThreeLayerSyncManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreeLayerSyncManager.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/ThreeLayerSyncManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,WAAW,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAyC;IACnE,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAsB;IAK/C;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;OAIG;IACG,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC;IAuEtB;;;;OAIG;IACG,qBAAqB,CACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC;IAuDtB;;;OAGG;YACW,kBAAkB;IAMhC;;OAEG;YACW,UAAU;IA6BxB;;OAEG;IACG,mBAAmB,CACvB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IA4ChB;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;IACH,OAAO,CAAC,UAAU;IA6ClB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;YACW,iBAAiB;IAuB/B;;OAEG;YACW,wBAAwB;IAgBtC;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;YACW,oBAAoB;IAYlC;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;YACW,kBAAkB;IAahC;;OAEG;YACW,oBAAoB;IAqBlC;;;;;OAKG;YACW,wCAAwC;IAmCtD;;OAEG;YACW,0CAA0C;IAyCxD;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;YACW,gBAAgB;CAS/B"}
|