specweave 0.28.34 → 0.28.42

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 (181) hide show
  1. package/CLAUDE.md +21 -0
  2. package/README.md +47 -33
  3. package/bin/specweave.js +2 -1
  4. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -6
  5. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  6. package/dist/src/cli/commands/archive.d.ts.map +1 -1
  7. package/dist/src/cli/commands/archive.js +2 -1
  8. package/dist/src/cli/commands/archive.js.map +1 -1
  9. package/dist/src/cli/commands/delete-feature.d.ts.map +1 -1
  10. package/dist/src/cli/commands/delete-feature.js +5 -4
  11. package/dist/src/cli/commands/delete-feature.js.map +1 -1
  12. package/dist/src/cli/commands/init.d.ts.map +1 -1
  13. package/dist/src/cli/commands/init.js +33 -0
  14. package/dist/src/cli/commands/init.js.map +1 -1
  15. package/dist/src/cli/helpers/ado-area-selector.d.ts +49 -0
  16. package/dist/src/cli/helpers/ado-area-selector.d.ts.map +1 -0
  17. package/dist/src/cli/helpers/ado-area-selector.js +161 -0
  18. package/dist/src/cli/helpers/ado-area-selector.js.map +1 -0
  19. package/dist/src/cli/helpers/init/config-detection.d.ts +5 -1
  20. package/dist/src/cli/helpers/init/config-detection.d.ts.map +1 -1
  21. package/dist/src/cli/helpers/init/config-detection.js +50 -17
  22. package/dist/src/cli/helpers/init/config-detection.js.map +1 -1
  23. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  24. package/dist/src/cli/helpers/init/external-import.js +32 -3
  25. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  26. package/dist/src/cli/helpers/init/repository-setup.d.ts +2 -0
  27. package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -1
  28. package/dist/src/cli/helpers/init/repository-setup.js +34 -2
  29. package/dist/src/cli/helpers/init/repository-setup.js.map +1 -1
  30. package/dist/src/cli/helpers/init/types.d.ts +3 -0
  31. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  32. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +10 -0
  33. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  34. package/dist/src/cli/helpers/issue-tracker/ado.js +107 -22
  35. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  36. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  37. package/dist/src/cli/helpers/issue-tracker/index.js +30 -10
  38. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  39. package/dist/src/cli/helpers/issue-tracker/types.d.ts +1 -0
  40. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  41. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  42. package/dist/src/core/feature-deleter/github-service.js +2 -2
  43. package/dist/src/core/feature-deleter/github-service.js.map +1 -1
  44. package/dist/src/core/increment/discipline-checker.js +1 -1
  45. package/dist/src/core/increment/increment-archiver.d.ts +56 -6
  46. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  47. package/dist/src/core/increment/increment-archiver.js +228 -77
  48. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  49. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  50. package/dist/src/core/living-docs/feature-archiver.js +75 -37
  51. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  52. package/dist/src/core/living-docs/feature-id-manager.d.ts +6 -0
  53. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  54. package/dist/src/core/living-docs/feature-id-manager.js +54 -8
  55. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  56. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  57. package/dist/src/core/living-docs/hierarchy-mapper.js +28 -17
  58. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  59. package/dist/src/core/living-docs/living-docs-sync.d.ts +2 -111
  60. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  61. package/dist/src/core/living-docs/living-docs-sync.js +31 -389
  62. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  63. package/dist/src/core/living-docs/sync-helpers/file-utils.d.ts +30 -0
  64. package/dist/src/core/living-docs/sync-helpers/file-utils.d.ts.map +1 -0
  65. package/dist/src/core/living-docs/sync-helpers/file-utils.js +107 -0
  66. package/dist/src/core/living-docs/sync-helpers/file-utils.js.map +1 -0
  67. package/dist/src/core/living-docs/sync-helpers/generators.d.ts +19 -0
  68. package/dist/src/core/living-docs/sync-helpers/generators.d.ts.map +1 -0
  69. package/dist/src/core/living-docs/sync-helpers/generators.js +146 -0
  70. package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -0
  71. package/dist/src/core/living-docs/sync-helpers/index.d.ts +8 -0
  72. package/dist/src/core/living-docs/sync-helpers/index.d.ts.map +1 -0
  73. package/dist/src/core/living-docs/sync-helpers/index.js +11 -0
  74. package/dist/src/core/living-docs/sync-helpers/index.js.map +1 -0
  75. package/dist/src/core/living-docs/sync-helpers/parsers.d.ts +19 -0
  76. package/dist/src/core/living-docs/sync-helpers/parsers.d.ts.map +1 -0
  77. package/dist/src/core/living-docs/sync-helpers/parsers.js +94 -0
  78. package/dist/src/core/living-docs/sync-helpers/parsers.js.map +1 -0
  79. package/dist/src/core/living-docs/types.d.ts +45 -0
  80. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  81. package/dist/src/core/types/config.d.ts +1 -1
  82. package/dist/src/core/types/config.js +2 -2
  83. package/dist/src/core/types/config.js.map +1 -1
  84. package/dist/src/core/validation/three-file-validator.js +8 -8
  85. package/dist/src/core/validation/three-file-validator.js.map +1 -1
  86. package/dist/src/generators/spec/spec-parser.d.ts.map +1 -1
  87. package/dist/src/generators/spec/spec-parser.js +4 -3
  88. package/dist/src/generators/spec/spec-parser.js.map +1 -1
  89. package/dist/src/generators/spec/task-parser.d.ts.map +1 -1
  90. package/dist/src/generators/spec/task-parser.js +11 -10
  91. package/dist/src/generators/spec/task-parser.js.map +1 -1
  92. package/dist/src/importers/ado-importer.d.ts.map +1 -1
  93. package/dist/src/importers/ado-importer.js +2 -0
  94. package/dist/src/importers/ado-importer.js.map +1 -1
  95. package/dist/src/importers/duplicate-detector.d.ts +5 -2
  96. package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
  97. package/dist/src/importers/duplicate-detector.js +8 -2
  98. package/dist/src/importers/duplicate-detector.js.map +1 -1
  99. package/dist/src/importers/github-importer.d.ts.map +1 -1
  100. package/dist/src/importers/github-importer.js +24 -1
  101. package/dist/src/importers/github-importer.js.map +1 -1
  102. package/dist/src/importers/item-converter.d.ts.map +1 -1
  103. package/dist/src/importers/item-converter.js +27 -3
  104. package/dist/src/importers/item-converter.js.map +1 -1
  105. package/dist/src/living-docs/fs-id-allocator.d.ts +5 -0
  106. package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
  107. package/dist/src/living-docs/fs-id-allocator.js +35 -6
  108. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  109. package/dist/src/utils/external-resource-validator.d.ts +5 -192
  110. package/dist/src/utils/external-resource-validator.d.ts.map +1 -1
  111. package/dist/src/utils/external-resource-validator.js +10 -1162
  112. package/dist/src/utils/external-resource-validator.js.map +1 -1
  113. package/dist/src/utils/feature-id-collision.d.ts +70 -0
  114. package/dist/src/utils/feature-id-collision.d.ts.map +1 -0
  115. package/dist/src/utils/feature-id-collision.js +142 -0
  116. package/dist/src/utils/feature-id-collision.js.map +1 -0
  117. package/dist/src/utils/validators/ado-validator.d.ts +86 -0
  118. package/dist/src/utils/validators/ado-validator.d.ts.map +1 -0
  119. package/dist/src/utils/validators/ado-validator.js +528 -0
  120. package/dist/src/utils/validators/ado-validator.js.map +1 -0
  121. package/dist/src/utils/validators/index.d.ts +11 -0
  122. package/dist/src/utils/validators/index.d.ts.map +1 -0
  123. package/dist/src/utils/validators/index.js +12 -0
  124. package/dist/src/utils/validators/index.js.map +1 -0
  125. package/dist/src/utils/validators/jira-validator.d.ts +70 -0
  126. package/dist/src/utils/validators/jira-validator.d.ts.map +1 -0
  127. package/dist/src/utils/validators/jira-validator.js +606 -0
  128. package/dist/src/utils/validators/jira-validator.js.map +1 -0
  129. package/dist/src/utils/validators/types.d.ts +82 -0
  130. package/dist/src/utils/validators/types.d.ts.map +1 -0
  131. package/dist/src/utils/validators/types.js +6 -0
  132. package/dist/src/utils/validators/types.js.map +1 -0
  133. package/package.json +3 -3
  134. package/plugins/specweave/.claude-plugin/plugin.json +7 -62
  135. package/plugins/specweave/commands/specweave-archive.md +3 -3
  136. package/plugins/specweave/commands/specweave-increment.md +18 -19
  137. package/plugins/specweave/hooks/hooks.json +3 -49
  138. package/plugins/specweave/hooks/hooks.json.bak +72 -0
  139. package/plugins/specweave/hooks/hooks.json.v1-backup +16 -0
  140. package/plugins/specweave/hooks/lib/update-status-line.sh +39 -15
  141. package/plugins/specweave/hooks/post-task-edit.sh +10 -0
  142. package/plugins/specweave/hooks/user-prompt-submit.sh +27 -8
  143. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +44 -0
  144. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +24 -0
  145. package/plugins/specweave/hooks/v2/handlers/ac-validation-handler.sh +46 -0
  146. package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +54 -0
  147. package/plugins/specweave/hooks/v2/handlers/living-docs-handler.sh +46 -0
  148. package/plugins/specweave/hooks/v2/handlers/status-update.sh +50 -0
  149. package/plugins/specweave/hooks/v2/hooks.json +16 -0
  150. package/plugins/specweave/hooks/v2/queue/dequeue.sh +30 -0
  151. package/plugins/specweave/hooks/v2/queue/enqueue.sh +41 -0
  152. package/plugins/specweave/hooks/v2/queue/processor.sh +72 -0
  153. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js +11 -10
  154. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -1
  155. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
  156. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +20 -1262
  157. package/plugins/specweave-github/lib/user-story-issue-builder.js +4 -4
  158. package/plugins/specweave-github/lib/user-story-issue-builder.ts +6 -6
  159. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  160. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +30 -1254
  161. package/src/templates/tasks.md.template +2 -0
  162. package/plugins/specweave/hooks/docs-changed.sh.backup +0 -79
  163. package/plugins/specweave/hooks/human-input-required.sh.backup +0 -75
  164. package/plugins/specweave/hooks/post-first-increment.sh.backup +0 -61
  165. package/plugins/specweave/hooks/post-increment-change.sh.backup +0 -98
  166. package/plugins/specweave/hooks/post-increment-completion.sh.backup +0 -231
  167. package/plugins/specweave/hooks/post-increment-planning.sh.backup +0 -1048
  168. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +0 -147
  169. package/plugins/specweave/hooks/post-spec-update.sh.backup +0 -158
  170. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +0 -179
  171. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +0 -83
  172. package/plugins/specweave/hooks/pre-implementation.sh.backup +0 -67
  173. package/plugins/specweave/hooks/pre-task-completion.sh.backup +0 -194
  174. package/plugins/specweave/hooks/pre-tool-use.sh.backup +0 -133
  175. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +0 -386
  176. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +0 -353
  177. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +0 -172
  178. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
  179. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +0 -258
  180. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +0 -172
  181. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +0 -110
@@ -0,0 +1,30 @@
1
+ /**
2
+ * File utilities for Living Docs Sync
3
+ * @module core/living-docs/sync-helpers/file-utils
4
+ */
5
+ import type { Logger } from '../../../utils/logger.js';
6
+ /**
7
+ * Check if a path exists
8
+ */
9
+ export declare function pathExists(filePath: string): Promise<boolean>;
10
+ /**
11
+ * Read and parse JSON file
12
+ */
13
+ export declare function readJson(filePath: string): Promise<any>;
14
+ /**
15
+ * Ensure directory exists
16
+ */
17
+ export declare function ensureDir(dirPath: string): Promise<void>;
18
+ /**
19
+ * Find existing user story file in feature folder
20
+ */
21
+ export declare function findExistingUserStoryFile(projectPath: string, userStoryId: string, logger: Logger): Promise<string | null>;
22
+ /**
23
+ * Clean up duplicate user story files
24
+ */
25
+ export declare function cleanupDuplicateFiles(projectPath: string, logger: Logger): Promise<void>;
26
+ /**
27
+ * Clean up temporary files
28
+ */
29
+ export declare function cleanupTempFiles(projectPath: string, logger: Logger): Promise<void>;
30
+ //# sourceMappingURL=file-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/file-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * File utilities for Living Docs Sync
3
+ * @module core/living-docs/sync-helpers/file-utils
4
+ */
5
+ import { promises as fs } from 'fs';
6
+ import path from 'path';
7
+ /**
8
+ * Check if a path exists
9
+ */
10
+ export async function pathExists(filePath) {
11
+ try {
12
+ await fs.access(filePath);
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ /**
20
+ * Read and parse JSON file
21
+ */
22
+ export async function readJson(filePath) {
23
+ const content = await fs.readFile(filePath, 'utf-8');
24
+ return JSON.parse(content);
25
+ }
26
+ /**
27
+ * Ensure directory exists
28
+ */
29
+ export async function ensureDir(dirPath) {
30
+ await fs.mkdir(dirPath, { recursive: true });
31
+ }
32
+ /**
33
+ * Find existing user story file in feature folder
34
+ */
35
+ export async function findExistingUserStoryFile(projectPath, userStoryId, logger) {
36
+ try {
37
+ const files = await fs.readdir(projectPath);
38
+ const usIdLower = userStoryId.toLowerCase();
39
+ const matchingFiles = files.filter(f => {
40
+ const match = f.match(/^(us-\d+)-/);
41
+ return match && match[1] === usIdLower;
42
+ });
43
+ if (matchingFiles.length === 0) {
44
+ return null;
45
+ }
46
+ if (matchingFiles.length === 1) {
47
+ return matchingFiles[0];
48
+ }
49
+ logger.warn(` ⚠️ Found ${matchingFiles.length} files for ${userStoryId}, using most recent`);
50
+ const fileTimes = await Promise.all(matchingFiles.map(async (f) => ({
51
+ file: f,
52
+ mtime: (await fs.stat(path.join(projectPath, f))).mtime.getTime()
53
+ })));
54
+ fileTimes.sort((a, b) => b.mtime - a.mtime);
55
+ return fileTimes[0].file;
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ /**
62
+ * Clean up duplicate user story files
63
+ */
64
+ export async function cleanupDuplicateFiles(projectPath, logger) {
65
+ const files = await fs.readdir(projectPath);
66
+ const filesByStory = new Map();
67
+ for (const file of files) {
68
+ const match = file.match(/^(us-\d+)-/);
69
+ if (match) {
70
+ const storyId = match[1].toUpperCase();
71
+ if (!filesByStory.has(storyId)) {
72
+ filesByStory.set(storyId, []);
73
+ }
74
+ filesByStory.get(storyId).push(file);
75
+ }
76
+ }
77
+ for (const [storyId, storyFiles] of filesByStory.entries()) {
78
+ if (storyFiles.length > 1) {
79
+ logger.warn(` ⚠️ Found ${storyFiles.length} duplicate files for ${storyId}`);
80
+ const fileTimes = await Promise.all(storyFiles.map(async (f) => ({
81
+ file: f,
82
+ mtime: (await fs.stat(path.join(projectPath, f))).mtime.getTime()
83
+ })));
84
+ fileTimes.sort((a, b) => b.mtime - a.mtime);
85
+ const keepFile = fileTimes[0].file;
86
+ const deleteFiles = fileTimes.slice(1).map(f => f.file);
87
+ logger.warn(` → Keeping: ${keepFile} (most recent)`);
88
+ for (const file of deleteFiles) {
89
+ await fs.rm(path.join(projectPath, file), { force: true, recursive: true });
90
+ logger.warn(` ✅ Deleted: ${file}`);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Clean up temporary files
97
+ */
98
+ export async function cleanupTempFiles(projectPath, logger) {
99
+ const files = await fs.readdir(projectPath);
100
+ for (const file of files) {
101
+ if (file.endsWith('.tmp') || file.endsWith('.backup')) {
102
+ await fs.rm(path.join(projectPath, file), { force: true });
103
+ logger.log(` 🧹 Cleaned up: ${file}`);
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=file-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/file-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Generator utilities for Living Docs Sync
3
+ * Generates markdown files for features, READMEs, and user stories
4
+ * @module core/living-docs/sync-helpers/generators
5
+ */
6
+ import type { ParsedSpec, UserStoryData } from '../types.js';
7
+ /**
8
+ * Generate FEATURE.md content
9
+ */
10
+ export declare function generateFeatureFile(featureId: string, parsed: ParsedSpec, incrementId: string): string;
11
+ /**
12
+ * Generate README.md content
13
+ */
14
+ export declare function generateReadmeFile(featureId: string, parsed: ParsedSpec, _incrementId: string): string;
15
+ /**
16
+ * Generate user story file content
17
+ */
18
+ export declare function generateUserStoryFile(story: UserStoryData, featureId: string, incrementId: string, parsed: ParsedSpec): string;
19
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/generators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CA2CR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,CA8BR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,GACjB,MAAM,CA0ER"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Generator utilities for Living Docs Sync
3
+ * Generates markdown files for features, READMEs, and user stories
4
+ * @module core/living-docs/sync-helpers/generators
5
+ */
6
+ /**
7
+ * Generate FEATURE.md content
8
+ */
9
+ export function generateFeatureFile(featureId, parsed, incrementId) {
10
+ const lines = [];
11
+ lines.push('---');
12
+ lines.push('id: ' + featureId);
13
+ lines.push('title: "' + parsed.title + '"');
14
+ lines.push('type: feature');
15
+ lines.push('status: ' + parsed.status);
16
+ lines.push('priority: ' + parsed.priority);
17
+ lines.push('created: ' + parsed.created);
18
+ lines.push('lastUpdated: ' + new Date().toISOString().split('T')[0]);
19
+ lines.push('---');
20
+ lines.push('');
21
+ lines.push('# ' + parsed.title);
22
+ lines.push('');
23
+ if (parsed.overview) {
24
+ lines.push('## Overview');
25
+ lines.push('');
26
+ lines.push(parsed.overview);
27
+ lines.push('');
28
+ }
29
+ lines.push('## Implementation History');
30
+ lines.push('');
31
+ lines.push('| Increment | Status | Completion Date |');
32
+ lines.push('|-----------|--------|----------------|');
33
+ const statusEmoji = parsed.status === 'completed' ? '✅' : '⏳';
34
+ lines.push('| [' + incrementId + '](../../../../increments/' + incrementId + '/spec.md) | ' + statusEmoji + ' ' + parsed.status + ' | ' + parsed.created + ' |');
35
+ lines.push('');
36
+ if (parsed.userStories.length > 0) {
37
+ lines.push('## User Stories');
38
+ lines.push('');
39
+ for (const story of parsed.userStories) {
40
+ const storySlug = story.title.toLowerCase().replace(/[^a-z0-9]+/g, '-');
41
+ const storyFile = '../../specweave/' + featureId + '/' + story.id.toLowerCase() + '-' + storySlug + '.md';
42
+ lines.push('- [' + story.id + ': ' + story.title + '](' + storyFile + ')');
43
+ }
44
+ lines.push('');
45
+ }
46
+ return lines.join('\n');
47
+ }
48
+ /**
49
+ * Generate README.md content
50
+ */
51
+ export function generateReadmeFile(featureId, parsed, _incrementId) {
52
+ const lines = [];
53
+ lines.push('---');
54
+ lines.push('id: ' + featureId + '-specweave');
55
+ lines.push('title: "' + parsed.title + ' - SpecWeave Implementation"');
56
+ lines.push('feature: ' + featureId);
57
+ lines.push('project: specweave');
58
+ lines.push('type: feature-context');
59
+ lines.push('status: ' + parsed.status);
60
+ lines.push('---');
61
+ lines.push('');
62
+ lines.push('# ' + parsed.title);
63
+ lines.push('');
64
+ lines.push('**Feature**: [' + featureId + '](./FEATURE.md)');
65
+ lines.push('');
66
+ if (parsed.overview) {
67
+ lines.push('## Overview');
68
+ lines.push('');
69
+ lines.push(parsed.overview);
70
+ lines.push('');
71
+ }
72
+ lines.push('## User Stories');
73
+ lines.push('');
74
+ lines.push('See user story files in this directory.');
75
+ lines.push('');
76
+ return lines.join('\n');
77
+ }
78
+ /**
79
+ * Generate user story file content
80
+ */
81
+ export function generateUserStoryFile(story, featureId, incrementId, parsed) {
82
+ const lines = [];
83
+ lines.push('---');
84
+ lines.push('id: ' + story.id);
85
+ lines.push('feature: ' + featureId);
86
+ lines.push('title: "' + story.title + '"');
87
+ lines.push('status: ' + (story.status || parsed.status));
88
+ lines.push('priority: ' + parsed.priority);
89
+ lines.push('created: ' + parsed.created);
90
+ if (story.format_preservation !== undefined) {
91
+ lines.push('format_preservation: ' + story.format_preservation);
92
+ }
93
+ if (story.external_title) {
94
+ lines.push('external_title: "' + story.external_title + '"');
95
+ }
96
+ if (story.external_source) {
97
+ lines.push('external_source: ' + story.external_source);
98
+ }
99
+ if (story.external_id) {
100
+ lines.push('external_id: "' + story.external_id + '"');
101
+ }
102
+ if (story.external_url) {
103
+ lines.push('external_url: "' + story.external_url + '"');
104
+ }
105
+ if (story.imported_at) {
106
+ lines.push('imported_at: "' + story.imported_at + '"');
107
+ }
108
+ if (story.origin) {
109
+ lines.push('origin: ' + story.origin);
110
+ }
111
+ lines.push('---');
112
+ lines.push('');
113
+ lines.push('# ' + story.id + ': ' + story.title);
114
+ lines.push('');
115
+ lines.push('**Feature**: [' + featureId + '](./FEATURE.md)');
116
+ lines.push('');
117
+ if (story.description) {
118
+ lines.push(story.description);
119
+ lines.push('');
120
+ }
121
+ lines.push('---');
122
+ lines.push('');
123
+ lines.push('## Acceptance Criteria');
124
+ lines.push('');
125
+ const storyCriteria = parsed.acceptanceCriteria.filter(ac => ac.userStoryId === story.id);
126
+ if (storyCriteria.length > 0) {
127
+ for (const ac of storyCriteria) {
128
+ const checkbox = ac.completed ? '[x]' : '[ ]';
129
+ lines.push('- ' + checkbox + ' **' + ac.id + '**: ' + ac.description);
130
+ }
131
+ }
132
+ else {
133
+ lines.push('No acceptance criteria defined.');
134
+ }
135
+ lines.push('');
136
+ lines.push('---');
137
+ lines.push('');
138
+ lines.push('## Implementation');
139
+ lines.push('');
140
+ lines.push('**Increment**: [' + incrementId + '](../../../../increments/' + incrementId + '/spec.md)');
141
+ lines.push('');
142
+ lines.push('**Tasks**: See increment tasks.md for implementation details.');
143
+ lines.push('');
144
+ return lines.join('\n');
145
+ }
146
+ //# sourceMappingURL=generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/generators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Sync Helpers - Extracted utilities from LivingDocsSync
3
+ * @module core/living-docs/sync-helpers
4
+ */
5
+ export { calculateUSStatus, extractUserStories, extractAcceptanceCriteria, } from './parsers.js';
6
+ export { generateFeatureFile, generateReadmeFile, generateUserStoryFile, } from './generators.js';
7
+ export { pathExists, readJson, ensureDir, findExistingUserStoryFile, cleanupDuplicateFiles, cleanupTempFiles, } from './file-utils.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sync Helpers - Extracted utilities from LivingDocsSync
3
+ * @module core/living-docs/sync-helpers
4
+ */
5
+ // Parsers
6
+ export { calculateUSStatus, extractUserStories, extractAcceptanceCriteria, } from './parsers.js';
7
+ // Generators
8
+ export { generateFeatureFile, generateReadmeFile, generateUserStoryFile, } from './generators.js';
9
+ // File utilities
10
+ export { pathExists, readJson, ensureDir, findExistingUserStoryFile, cleanupDuplicateFiles, cleanupTempFiles, } from './file-utils.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,aAAa;AACb,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,iBAAiB;AACjB,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Parser utilities for Living Docs Sync
3
+ * Extracts user stories and acceptance criteria from spec content
4
+ * @module core/living-docs/sync-helpers/parsers
5
+ */
6
+ import type { UserStoryData, AcceptanceCriterionData } from '../types.js';
7
+ /**
8
+ * Calculate user story status based on AC completion
9
+ */
10
+ export declare function calculateUSStatus(totalACs: number, completedACs: number): string;
11
+ /**
12
+ * Extract user stories from spec content
13
+ */
14
+ export declare function extractUserStories(content: string): UserStoryData[];
15
+ /**
16
+ * Extract acceptance criteria from spec content
17
+ */
18
+ export declare function extractAcceptanceCriteria(content: string): AcceptanceCriterionData[];
19
+ //# sourceMappingURL=parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/parsers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE1E;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAchF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAiDnE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAyBpF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Parser utilities for Living Docs Sync
3
+ * Extracts user stories and acceptance criteria from spec content
4
+ * @module core/living-docs/sync-helpers/parsers
5
+ */
6
+ /**
7
+ * Calculate user story status based on AC completion
8
+ */
9
+ export function calculateUSStatus(totalACs, completedACs) {
10
+ if (totalACs === 0) {
11
+ return 'not_started';
12
+ }
13
+ const percentage = (completedACs / totalACs) * 100;
14
+ if (percentage === 0) {
15
+ return 'not_started';
16
+ }
17
+ else if (percentage === 100) {
18
+ return 'completed';
19
+ }
20
+ else {
21
+ return 'in_progress';
22
+ }
23
+ }
24
+ /**
25
+ * Extract user stories from spec content
26
+ */
27
+ export function extractUserStories(content) {
28
+ const stories = [];
29
+ const lines = content.split('\n');
30
+ for (let i = 0; i < lines.length; i++) {
31
+ const headingMatch = lines[i].match(/^###+\s+(US-\d+):\s+(.+)/);
32
+ if (!headingMatch)
33
+ continue;
34
+ const id = headingMatch[1];
35
+ const title = headingMatch[2];
36
+ // Collect all lines until next US heading or end
37
+ const storyLines = [];
38
+ for (let j = i + 1; j < lines.length; j++) {
39
+ if (lines[j].match(/^###+\s+US-\d+:/)) {
40
+ break;
41
+ }
42
+ storyLines.push(lines[j]);
43
+ }
44
+ const storyContent = storyLines.join('\n');
45
+ // Extract description
46
+ let description = '';
47
+ const descMatch = storyContent.match(/\*\*As a\*\*\s*([^\n]+)\s*\n\*\*I want\*\*\s*([^\n]+)\s*\n\*\*So that\*\*\s*([^\n]+)/i);
48
+ if (descMatch) {
49
+ description = `**As a** ${descMatch[1].trim()}\n**I want** ${descMatch[2].trim()}\n**So that** ${descMatch[3].trim()}`;
50
+ }
51
+ // Extract acceptance criteria IDs
52
+ const acIds = [];
53
+ const acPattern = /AC-US\d+-\d+/g;
54
+ let acMatch;
55
+ while ((acMatch = acPattern.exec(storyContent)) !== null) {
56
+ if (!acIds.includes(acMatch[0])) {
57
+ acIds.push(acMatch[0]);
58
+ }
59
+ }
60
+ stories.push({
61
+ id,
62
+ title,
63
+ description,
64
+ acceptanceCriteria: acIds,
65
+ status: undefined
66
+ });
67
+ }
68
+ return stories;
69
+ }
70
+ /**
71
+ * Extract acceptance criteria from spec content
72
+ */
73
+ export function extractAcceptanceCriteria(content) {
74
+ const criteria = [];
75
+ // Pattern: - [x] AC-US1-01: Description
76
+ const acPattern = /^[-*]\s+\[([ x])\]\s+\*{0,2}(AC-US\d+-\d+)\*{0,2}:\s+(.+?)$/gm;
77
+ let match;
78
+ while ((match = acPattern.exec(content)) !== null) {
79
+ const completed = match[1] === 'x';
80
+ const id = match[2];
81
+ const description = match[3];
82
+ // Extract user story ID (AC-US1-01 → US-001)
83
+ const usMatch = id.match(/AC-US(\d+)-\d+/);
84
+ const userStoryId = usMatch ? `US-${usMatch[1].padStart(3, '0')}` : '';
85
+ criteria.push({
86
+ id,
87
+ userStoryId,
88
+ description,
89
+ completed
90
+ });
91
+ }
92
+ return criteria;
93
+ }
94
+ //# sourceMappingURL=parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/sync-helpers/parsers.ts"],"names":[],"mappings":"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"}
@@ -111,4 +111,49 @@ export interface FeatureMapping {
111
111
  projectPaths?: Record<string, string>;
112
112
  epic?: string;
113
113
  }
114
+ export interface SyncOptions {
115
+ dryRun?: boolean;
116
+ force?: boolean;
117
+ explicitFeatureId?: string;
118
+ }
119
+ export interface SyncResult {
120
+ success: boolean;
121
+ featureId: string;
122
+ incrementId: string;
123
+ filesCreated: string[];
124
+ filesUpdated: string[];
125
+ errors: string[];
126
+ }
127
+ export interface ParsedSpec {
128
+ title: string;
129
+ overview: string;
130
+ status: string;
131
+ priority: string;
132
+ created: string;
133
+ userStories: UserStoryData[];
134
+ acceptanceCriteria: AcceptanceCriterionData[];
135
+ frontmatter: Record<string, any>;
136
+ }
137
+ export interface UserStoryData {
138
+ id: string;
139
+ title: string;
140
+ description: string;
141
+ acceptanceCriteria: string[];
142
+ phase?: string;
143
+ status?: string;
144
+ format_preservation?: boolean;
145
+ external_title?: string;
146
+ external_source?: 'github' | 'jira' | 'ado';
147
+ external_id?: string;
148
+ external_url?: string;
149
+ imported_at?: string;
150
+ origin?: 'internal' | 'external';
151
+ }
152
+ export interface AcceptanceCriterionData {
153
+ id: string;
154
+ userStoryId: string;
155
+ description: string;
156
+ completed: boolean;
157
+ priority?: string;
158
+ }
114
159
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/types.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ import { IncrementType } from './increment-metadata.js';
16
16
  export interface LimitsConfig {
17
17
  /** Maximum active increments at any time (default: 1 for focus) */
18
18
  maxActiveIncrements?: number;
19
- /** Absolute maximum active increments, never exceeded (default: 2) */
19
+ /** Maximum active increments with warning (default: 3, negotiable) */
20
20
  hardCap?: number;
21
21
  /** Allow 2nd active increment for hotfix/bug emergencies (default: true) */
22
22
  allowEmergencyInterrupt?: boolean;
@@ -29,7 +29,7 @@ export const DEFAULT_CONFIG = {
29
29
  },
30
30
  limits: {
31
31
  maxActiveIncrements: 1, // v0.7.0+: 1 active increment (maximum focus)
32
- hardCap: 2, // Emergency ceiling (never >2)
32
+ hardCap: 3, // Soft ceiling with warning (negotiable)
33
33
  allowEmergencyInterrupt: true, // Allow hotfix/bug to interrupt
34
34
  typeBehaviors: {
35
35
  canInterrupt: [IncrementType.HOTFIX, IncrementType.BUG], // Only emergencies can interrupt
@@ -50,7 +50,7 @@ export const DEFAULT_CONFIG = {
50
50
  cleanupIntervalMs: 60000, // Cleanup every minute
51
51
  },
52
52
  archiving: {
53
- keepLast: 10, // Keep last 10 increments in main folder
53
+ keepLast: 5, // Keep last 5 increments in main folder
54
54
  autoArchive: false, // Manual archiving by default
55
55
  archiveAfterDays: 60, // Archive after 60 days of inactivity
56
56
  preserveActive: true, // Never archive active/paused increments
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/core/types/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/core/types/config.ts"],"names":[],"mappings":"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"}