specweave 0.17.16 → 0.18.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 +405 -2495
- package/README.md +92 -2
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +188 -36
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +54 -0
- package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-status-sync.js +86 -0
- package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +139 -0
- package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/duplicate-detector.js +389 -0
- package/dist/plugins/specweave-github/lib/duplicate-detector.js.map +1 -0
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +26 -0
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +249 -0
- package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client.d.ts +1 -1
- package/dist/plugins/specweave-github/lib/github-client.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client.js +25 -13
- package/dist/plugins/specweave-github/lib/github-client.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +83 -0
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-epic-sync.js +451 -0
- package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-status-sync.d.ts +43 -0
- package/dist/plugins/specweave-github/lib/github-status-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-status-sync.js +82 -0
- package/dist/plugins/specweave-github/lib/github-status-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/task-sync.d.ts +5 -0
- package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/task-sync.js +38 -2
- package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-epic-sync.d.ts +66 -0
- package/dist/plugins/specweave-jira/lib/jira-epic-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +274 -0
- package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +56 -0
- package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-status-sync.js +93 -0
- package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +48 -3
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts +142 -0
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.js +453 -0
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -0
- package/dist/src/core/living-docs/index.d.ts +10 -84
- package/dist/src/core/living-docs/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/index.js +10 -164
- package/dist/src/core/living-docs/index.js.map +1 -1
- package/dist/src/core/living-docs/spec-distributor.d.ts +106 -0
- package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -0
- package/dist/src/core/living-docs/spec-distributor.js +823 -0
- package/dist/src/core/living-docs/spec-distributor.js.map +1 -0
- package/dist/src/core/living-docs/types.d.ts +201 -0
- package/dist/src/core/living-docs/types.d.ts.map +1 -0
- package/dist/src/core/living-docs/types.js +15 -0
- package/dist/src/core/living-docs/types.js.map +1 -0
- package/dist/src/core/logging/prompt-logger.d.ts +70 -0
- package/dist/src/core/logging/prompt-logger.d.ts.map +1 -0
- package/dist/src/core/logging/prompt-logger.js +247 -0
- package/dist/src/core/logging/prompt-logger.js.map +1 -0
- package/dist/src/core/status-line/status-line-manager.d.ts +15 -24
- package/dist/src/core/status-line/status-line-manager.d.ts.map +1 -1
- package/dist/src/core/status-line/status-line-manager.js +33 -70
- package/dist/src/core/status-line/status-line-manager.js.map +1 -1
- package/dist/src/core/status-line/types.d.ts +19 -31
- package/dist/src/core/status-line/types.d.ts.map +1 -1
- package/dist/src/core/status-line/types.js +5 -9
- package/dist/src/core/status-line/types.js.map +1 -1
- package/dist/src/core/sync/conflict-resolver.d.ts +66 -0
- package/dist/src/core/sync/conflict-resolver.d.ts.map +1 -0
- package/dist/src/core/sync/conflict-resolver.js +108 -0
- package/dist/src/core/sync/conflict-resolver.js.map +1 -0
- package/dist/src/core/sync/enhanced-content-builder.d.ts +77 -0
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -0
- package/dist/src/core/sync/enhanced-content-builder.js +199 -0
- package/dist/src/core/sync/enhanced-content-builder.js.map +1 -0
- package/dist/src/core/sync/label-detector.d.ts +66 -0
- package/dist/src/core/sync/label-detector.d.ts.map +1 -0
- package/dist/src/core/sync/label-detector.js +211 -0
- package/dist/src/core/sync/label-detector.js.map +1 -0
- package/dist/src/core/sync/retry-logic.d.ts +64 -0
- package/dist/src/core/sync/retry-logic.d.ts.map +1 -0
- package/dist/src/core/sync/retry-logic.js +165 -0
- package/dist/src/core/sync/retry-logic.js.map +1 -0
- package/dist/src/core/sync/spec-increment-mapper.d.ts +100 -0
- package/dist/src/core/sync/spec-increment-mapper.d.ts.map +1 -0
- package/dist/src/core/sync/spec-increment-mapper.js +424 -0
- package/dist/src/core/sync/spec-increment-mapper.js.map +1 -0
- package/dist/src/core/sync/status-cache.d.ts +91 -0
- package/dist/src/core/sync/status-cache.d.ts.map +1 -0
- package/dist/src/core/sync/status-cache.js +140 -0
- package/dist/src/core/sync/status-cache.js.map +1 -0
- package/dist/src/core/sync/status-mapper.d.ts +69 -0
- package/dist/src/core/sync/status-mapper.d.ts.map +1 -0
- package/dist/src/core/sync/status-mapper.js +90 -0
- package/dist/src/core/sync/status-mapper.js.map +1 -0
- package/dist/src/core/sync/status-sync-engine.d.ts +162 -0
- package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -0
- package/dist/src/core/sync/status-sync-engine.js +347 -0
- package/dist/src/core/sync/status-sync-engine.js.map +1 -0
- package/dist/src/core/sync/sync-event-logger.d.ts +99 -0
- package/dist/src/core/sync/sync-event-logger.d.ts.map +1 -0
- package/dist/src/core/sync/sync-event-logger.js +103 -0
- package/dist/src/core/sync/sync-event-logger.js.map +1 -0
- package/dist/src/core/sync/workflow-detector.d.ts +95 -0
- package/dist/src/core/sync/workflow-detector.d.ts.map +1 -0
- package/dist/src/core/sync/workflow-detector.js +175 -0
- package/dist/src/core/sync/workflow-detector.js.map +1 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +31 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/utils/github-url.d.ts +53 -0
- package/dist/src/utils/github-url.d.ts.map +1 -0
- package/dist/src/utils/github-url.js +90 -0
- package/dist/src/utils/github-url.js.map +1 -0
- package/dist/src/utils/spec-parser.d.ts +145 -0
- package/dist/src/utils/spec-parser.d.ts.map +1 -0
- package/dist/src/utils/spec-parser.js +640 -0
- package/dist/src/utils/spec-parser.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/agents/pm/AGENT.md +1 -1
- package/plugins/specweave/agents/pm/templates/increment-spec.md +158 -0
- package/plugins/specweave/agents/pm/templates/living-docs-spec.md +113 -0
- package/plugins/specweave/commands/specweave-done.md +163 -0
- package/plugins/specweave/hooks/lib/update-status-line.sh +79 -111
- package/plugins/specweave/hooks/post-increment-planning.sh +107 -35
- package/plugins/specweave/lib/hooks/sync-living-docs.js +139 -34
- package/plugins/specweave/lib/hooks/sync-living-docs.ts +234 -38
- package/plugins/specweave/skills/SKILLS-INDEX.md +4 -24
- package/plugins/specweave/skills/increment-planner/SKILL.md +94 -0
- package/plugins/specweave/skills/increment-work-router/SKILL.md +466 -0
- package/plugins/specweave-ado/lib/ado-status-sync.js +80 -0
- package/plugins/specweave-ado/lib/ado-status-sync.ts +121 -0
- package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +205 -0
- package/plugins/specweave-github/commands/specweave-github-sync-epic.md +248 -0
- package/plugins/specweave-github/lib/duplicate-detector.js +370 -0
- package/plugins/specweave-github/lib/duplicate-detector.ts +525 -0
- package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
- package/plugins/specweave-github/lib/enhanced-github-sync.ts +322 -0
- package/plugins/specweave-github/lib/github-client.js +21 -10
- package/plugins/specweave-github/lib/github-client.ts +27 -16
- package/plugins/specweave-github/lib/github-epic-sync.js +489 -0
- package/plugins/specweave-github/lib/github-epic-sync.ts +690 -0
- package/plugins/specweave-github/lib/github-status-sync.js +71 -0
- package/plugins/specweave-github/lib/github-status-sync.ts +107 -0
- package/plugins/specweave-github/lib/task-sync.js +33 -2
- package/plugins/specweave-github/lib/task-sync.ts +44 -2
- package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +267 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.ts.disabled +222 -0
- package/plugins/specweave-jira/lib/jira-epic-sync.js +304 -0
- package/plugins/specweave-jira/lib/jira-epic-sync.ts +459 -0
- package/plugins/specweave-jira/lib/jira-status-sync.js +79 -0
- package/plugins/specweave-jira/lib/jira-status-sync.ts +139 -0
- package/src/templates/AGENTS.md.template +88 -1
- package/src/templates/CLAUDE.md.template +49 -0
- package/plugins/specweave/skills/increment-quality-judge/SKILL.md +0 -524
- package/plugins/specweave/skills/plugin-installer/SKILL.md +0 -353
|
@@ -1,169 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Living Docs Distribution Module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* - SpecDistributor: Distributes increment specs into hierarchical living docs
|
|
6
|
+
* - HierarchyMapper: Maps increments to FS-* epic folders (Universal Hierarchy)
|
|
7
|
+
* - Types: TypeScript interfaces for living docs structure
|
|
5
8
|
*
|
|
6
|
-
* @
|
|
9
|
+
* @author SpecWeave Team
|
|
10
|
+
* @version 3.0.0
|
|
7
11
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import { createContentClassifier, } from './content-classifier.js';
|
|
12
|
-
import { createProjectDetector, } from './project-detector.js';
|
|
13
|
-
import { createContentDistributor, } from './content-distributor.js';
|
|
14
|
-
import { createCrossLinker, } from './cross-linker.js';
|
|
15
|
-
/**
|
|
16
|
-
* Intelligent Living Docs Sync Orchestrator
|
|
17
|
-
*/
|
|
18
|
-
export class IntelligentLivingDocsSync {
|
|
19
|
-
constructor(options = {}) {
|
|
20
|
-
this.options = options;
|
|
21
|
-
// Initialize components
|
|
22
|
-
this.parser = createContentParser(options.parser);
|
|
23
|
-
this.classifier = createContentClassifier();
|
|
24
|
-
this.detector = createProjectDetector(options.detector);
|
|
25
|
-
this.distributor = createContentDistributor(options.distributor);
|
|
26
|
-
this.linker = createCrossLinker(options.linker);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Sync increment spec to living docs
|
|
30
|
-
*/
|
|
31
|
-
async syncIncrement(incrementId) {
|
|
32
|
-
const startTime = Date.now();
|
|
33
|
-
const errors = [];
|
|
34
|
-
try {
|
|
35
|
-
this.log(`🚀 Starting intelligent sync for increment: ${incrementId}`);
|
|
36
|
-
// 1. Load and parse spec
|
|
37
|
-
this.log('📖 Step 1: Parsing spec.md...');
|
|
38
|
-
const spec = await this.loadAndParseSpec(incrementId);
|
|
39
|
-
this.log(` ✅ Parsed ${spec.sections.length} top-level sections`);
|
|
40
|
-
// 2. Classify sections
|
|
41
|
-
this.log('🔍 Step 2: Classifying sections...');
|
|
42
|
-
const flatSections = this.parser.flattenSections(spec.sections);
|
|
43
|
-
const classifications = this.classifier.classifyAll(flatSections);
|
|
44
|
-
const stats = this.classifier.getStatistics(classifications);
|
|
45
|
-
this.log(` ✅ Classified ${classifications.length} sections`);
|
|
46
|
-
this.log(` Average confidence: ${(stats.averageConfidence * 100).toFixed(1)}%`);
|
|
47
|
-
this.log(` Low confidence (<60%): ${stats.lowConfidence}`);
|
|
48
|
-
// 3. Detect project
|
|
49
|
-
this.log('🎯 Step 3: Detecting project...');
|
|
50
|
-
const project = this.detector.detectProject(incrementId, spec);
|
|
51
|
-
this.log(` ✅ Project: ${project.name} (${(project.confidence * 100).toFixed(1)}% confidence)`);
|
|
52
|
-
if (project.reasoning.length > 0) {
|
|
53
|
-
this.log(` Reasoning: ${project.reasoning.join(', ')}`);
|
|
54
|
-
}
|
|
55
|
-
// 4. Ensure project structure exists
|
|
56
|
-
await this.detector.createProjectStructure(project.id);
|
|
57
|
-
// 5. Distribute content
|
|
58
|
-
this.log('📦 Step 4: Distributing content...');
|
|
59
|
-
const distribution = await this.distributor.distribute(incrementId, spec, classifications, project);
|
|
60
|
-
const distStats = this.distributor.getStatistics(distribution);
|
|
61
|
-
this.log(` ✅ Distribution complete:`);
|
|
62
|
-
this.log(` Created: ${distribution.summary.filesCreated} files`);
|
|
63
|
-
this.log(` Updated: ${distribution.summary.filesUpdated} files`);
|
|
64
|
-
this.log(` Skipped: ${distribution.summary.filesSkipped} files (unchanged)`);
|
|
65
|
-
this.log(` Errors: ${distribution.summary.errors}`);
|
|
66
|
-
this.log(` Total size: ${(distStats.totalSize / 1024).toFixed(1)} KB`);
|
|
67
|
-
if (distribution.errors.length > 0) {
|
|
68
|
-
errors.push(...distribution.errors.map((e) => e.error));
|
|
69
|
-
}
|
|
70
|
-
// 6. Generate cross-links
|
|
71
|
-
this.log('🔗 Step 5: Generating cross-links...');
|
|
72
|
-
const links = await this.linker.generateLinks(distribution);
|
|
73
|
-
const linkStats = this.linker.getStatistics();
|
|
74
|
-
this.log(` ✅ Generated ${links.length} cross-links`);
|
|
75
|
-
this.log(` Bidirectional: ${linkStats.bidirectional}`);
|
|
76
|
-
this.log(` By type: ${JSON.stringify(linkStats.byType)}`);
|
|
77
|
-
// 7. Generate index files
|
|
78
|
-
this.log('📑 Step 6: Generating index files...');
|
|
79
|
-
await this.generateIndexFiles(distribution, project.id);
|
|
80
|
-
this.log(` ✅ Index files generated`);
|
|
81
|
-
const duration = Date.now() - startTime;
|
|
82
|
-
this.log(`✅ Intelligent sync complete in ${duration}ms`);
|
|
83
|
-
return {
|
|
84
|
-
incrementId,
|
|
85
|
-
project,
|
|
86
|
-
spec,
|
|
87
|
-
classifications,
|
|
88
|
-
distribution,
|
|
89
|
-
links,
|
|
90
|
-
duration,
|
|
91
|
-
success: distribution.errors.length === 0,
|
|
92
|
-
errors,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
errors.push(String(error));
|
|
97
|
-
const duration = Date.now() - startTime;
|
|
98
|
-
this.log(`❌ Intelligent sync failed: ${error}`);
|
|
99
|
-
throw new Error(`Intelligent sync failed: ${error}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Load and parse increment spec
|
|
104
|
-
*/
|
|
105
|
-
async loadAndParseSpec(incrementId) {
|
|
106
|
-
const specPath = path.join(process.cwd(), '.specweave', 'increments', incrementId, 'spec.md');
|
|
107
|
-
if (!fs.existsSync(specPath)) {
|
|
108
|
-
throw new Error(`Spec not found: ${specPath}`);
|
|
109
|
-
}
|
|
110
|
-
const markdown = await fs.readFile(specPath, 'utf-8');
|
|
111
|
-
return this.parser.parse(markdown, specPath);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Generate index files for categories
|
|
115
|
-
*/
|
|
116
|
-
async generateIndexFiles(distribution, projectId) {
|
|
117
|
-
const allFiles = [...distribution.created, ...distribution.updated];
|
|
118
|
-
const byCategory = new Map();
|
|
119
|
-
for (const file of allFiles) {
|
|
120
|
-
if (!byCategory.has(file.category)) {
|
|
121
|
-
byCategory.set(file.category, []);
|
|
122
|
-
}
|
|
123
|
-
byCategory.get(file.category).push(file);
|
|
124
|
-
}
|
|
125
|
-
for (const [category, files] of byCategory.entries()) {
|
|
126
|
-
await this.distributor.generateIndex(category, projectId, files);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Logging helper
|
|
131
|
-
*/
|
|
132
|
-
log(message) {
|
|
133
|
-
if (this.options.verbose) {
|
|
134
|
-
console.log(message);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get component instances (for testing/advanced usage)
|
|
139
|
-
*/
|
|
140
|
-
getComponents() {
|
|
141
|
-
return {
|
|
142
|
-
parser: this.parser,
|
|
143
|
-
classifier: this.classifier,
|
|
144
|
-
detector: this.detector,
|
|
145
|
-
distributor: this.distributor,
|
|
146
|
-
linker: this.linker,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Factory function to create sync orchestrator
|
|
152
|
-
*/
|
|
153
|
-
export function createIntelligentSync(options) {
|
|
154
|
-
return new IntelligentLivingDocsSync(options);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Convenience function to sync an increment
|
|
158
|
-
*/
|
|
159
|
-
export async function syncIncrement(incrementId, options) {
|
|
160
|
-
const sync = createIntelligentSync(options);
|
|
161
|
-
return sync.syncIncrement(incrementId);
|
|
162
|
-
}
|
|
163
|
-
// Re-export all types and classes
|
|
164
|
-
export * from './content-parser.js';
|
|
165
|
-
export * from './content-classifier.js';
|
|
166
|
-
export * from './project-detector.js';
|
|
167
|
-
export * from './content-distributor.js';
|
|
168
|
-
export * from './cross-linker.js';
|
|
12
|
+
export { SpecDistributor } from './spec-distributor.js';
|
|
13
|
+
export { HierarchyMapper } from './hierarchy-mapper.js';
|
|
14
|
+
export * from './types.js';
|
|
169
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/living-docs/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/living-docs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecWeave Spec Distributor
|
|
3
|
+
*
|
|
4
|
+
* Distributes increment specs into hierarchical living docs structure:
|
|
5
|
+
* - Epic (SPEC-###.md) - High-level summary
|
|
6
|
+
* - User Stories (us-###.md) - Detailed requirements
|
|
7
|
+
* - Tasks (tasks.md) - Implementation details (already exists)
|
|
8
|
+
*
|
|
9
|
+
* @author SpecWeave Team
|
|
10
|
+
* @version 2.0.0
|
|
11
|
+
*/
|
|
12
|
+
import { DistributionResult, DistributionConfig } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* SpecDistributor - Distributes increment specs into hierarchical living docs
|
|
15
|
+
*/
|
|
16
|
+
export declare class SpecDistributor {
|
|
17
|
+
private config;
|
|
18
|
+
private projectRoot;
|
|
19
|
+
private hierarchyMapper;
|
|
20
|
+
private githubRemote;
|
|
21
|
+
constructor(projectRoot: string, config?: Partial<DistributionConfig>);
|
|
22
|
+
/**
|
|
23
|
+
* Distribute increment spec into epic + user story files
|
|
24
|
+
*/
|
|
25
|
+
distribute(incrementId: string): Promise<DistributionResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Parse increment spec into structured data
|
|
28
|
+
*/
|
|
29
|
+
private parseIncrementSpec;
|
|
30
|
+
/**
|
|
31
|
+
* Load external links from metadata.json (source of truth)
|
|
32
|
+
*/
|
|
33
|
+
private loadExternalLinks;
|
|
34
|
+
/**
|
|
35
|
+
* Extract user stories from increment spec
|
|
36
|
+
*/
|
|
37
|
+
private extractUserStories;
|
|
38
|
+
/**
|
|
39
|
+
* Extract acceptance criteria from user story content
|
|
40
|
+
*/
|
|
41
|
+
private extractAcceptanceCriteria;
|
|
42
|
+
/**
|
|
43
|
+
* Classify content into epic vs user-story level
|
|
44
|
+
*
|
|
45
|
+
* NEW (v0.18.0): Uses feature folder name as ID (e.g., FS-25-11-14-release-management)
|
|
46
|
+
*/
|
|
47
|
+
private classifyContent;
|
|
48
|
+
/**
|
|
49
|
+
* Generate epic file
|
|
50
|
+
*/
|
|
51
|
+
private generateEpicFile;
|
|
52
|
+
/**
|
|
53
|
+
* Generate user story files
|
|
54
|
+
*/
|
|
55
|
+
private generateUserStoryFiles;
|
|
56
|
+
/**
|
|
57
|
+
* Load task references from tasks.md (with AC-ID extraction)
|
|
58
|
+
*/
|
|
59
|
+
private loadTaskReferences;
|
|
60
|
+
/**
|
|
61
|
+
* Find tasks that implement a user story (using AC-ID based filtering)
|
|
62
|
+
*/
|
|
63
|
+
private findTasksForUserStory;
|
|
64
|
+
/**
|
|
65
|
+
* Generate task anchor
|
|
66
|
+
*/
|
|
67
|
+
private generateTaskAnchor;
|
|
68
|
+
/**
|
|
69
|
+
* Generate user story filename
|
|
70
|
+
*/
|
|
71
|
+
private generateUserStoryFilename;
|
|
72
|
+
/**
|
|
73
|
+
* Write feature file to disk (NEW: writes to FEATURE.md instead of README.md)
|
|
74
|
+
*/
|
|
75
|
+
private writeEpicFile;
|
|
76
|
+
/**
|
|
77
|
+
* Write user story files to disk (NEW: writes directly to feature folder)
|
|
78
|
+
*/
|
|
79
|
+
private writeUserStoryFiles;
|
|
80
|
+
/**
|
|
81
|
+
* Format epic file as markdown
|
|
82
|
+
*/
|
|
83
|
+
private formatEpicFile;
|
|
84
|
+
/**
|
|
85
|
+
* Format user story file as markdown
|
|
86
|
+
*/
|
|
87
|
+
private formatUserStoryFile;
|
|
88
|
+
/**
|
|
89
|
+
* Update tasks.md with bidirectional links to user stories (CRITICAL!)
|
|
90
|
+
*
|
|
91
|
+
* This creates bidirectional traceability:
|
|
92
|
+
* - User Story → Tasks (already done in us-*.md files)
|
|
93
|
+
* - Tasks → User Story (NEW - added here)
|
|
94
|
+
*
|
|
95
|
+
* When a task implements a user story, this adds a link in tasks.md:
|
|
96
|
+
* **User Story**: [US-001: Title](../../docs/internal/specs/{project}/{feature}/us-001-*.md)
|
|
97
|
+
*/
|
|
98
|
+
private updateTasksWithUserStoryLinks;
|
|
99
|
+
/**
|
|
100
|
+
* Map tasks to user stories using AC-IDs
|
|
101
|
+
*
|
|
102
|
+
* Extracts AC-IDs from tasks (e.g., AC-US1-01) and maps them to user stories (e.g., US-001)
|
|
103
|
+
*/
|
|
104
|
+
private mapTasksToUserStories;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=spec-distributor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-distributor.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/spec-distributor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EASnB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAA0B;gBAElC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IA4BrE;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2ElE;;OAEG;YACW,kBAAkB;IAqHhC;;OAEG;YACW,iBAAiB;IAgC/B;;OAEG;YACW,kBAAkB;IA+ChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA4BjC;;;;OAIG;YACW,eAAe;IA2B7B;;OAEG;YACW,gBAAgB;IAgC9B;;OAEG;YACW,sBAAsB;IA4CpC;;OAEG;YACW,kBAAkB;IAyChC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;YACW,aAAa;IAa3B;;OAEG;YACW,mBAAmB;IAqBjC;;OAEG;IACH,OAAO,CAAC,cAAc;IA6ItB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqF3B;;;;;;;;;OASG;YACW,6BAA6B;IAyE3C;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;CAiC9B"}
|