specweave 0.22.14 → 0.23.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.
Files changed (150) hide show
  1. package/CLAUDE.md +178 -1
  2. package/dist/src/cli/commands/import-external.d.ts +22 -0
  3. package/dist/src/cli/commands/import-external.d.ts.map +1 -0
  4. package/dist/src/cli/commands/import-external.js +282 -0
  5. package/dist/src/cli/commands/import-external.js.map +1 -0
  6. package/dist/src/cli/commands/init.d.ts.map +1 -1
  7. package/dist/src/cli/commands/init.js +46 -0
  8. package/dist/src/cli/commands/init.js.map +1 -1
  9. package/dist/src/cli/helpers/github-repo-selector.d.ts +59 -0
  10. package/dist/src/cli/helpers/github-repo-selector.d.ts.map +1 -0
  11. package/dist/src/cli/helpers/github-repo-selector.js +265 -0
  12. package/dist/src/cli/helpers/github-repo-selector.js.map +1 -0
  13. package/dist/src/config/types.d.ts +16 -16
  14. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
  15. package/dist/src/core/increment/ac-status-manager.js +4 -2
  16. package/dist/src/core/increment/ac-status-manager.js.map +1 -1
  17. package/dist/src/core/increment/completion-validator.d.ts +30 -1
  18. package/dist/src/core/increment/completion-validator.d.ts.map +1 -1
  19. package/dist/src/core/increment/completion-validator.js +151 -3
  20. package/dist/src/core/increment/completion-validator.js.map +1 -1
  21. package/dist/src/core/increment/increment-archiver.d.ts +25 -0
  22. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  23. package/dist/src/core/increment/increment-archiver.js +130 -3
  24. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  25. package/dist/src/core/living-docs/feature-archiver.d.ts +37 -0
  26. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  27. package/dist/src/core/living-docs/feature-archiver.js +262 -18
  28. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  29. package/dist/src/core/living-docs/feature-id-manager.d.ts +17 -0
  30. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  31. package/dist/src/core/living-docs/feature-id-manager.js +25 -0
  32. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  33. package/dist/src/core/living-docs/living-docs-sync.d.ts +14 -0
  34. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  35. package/dist/src/core/living-docs/living-docs-sync.js +46 -0
  36. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  37. package/dist/src/core/sync/sync-event-logger.d.ts +15 -1
  38. package/dist/src/core/sync/sync-event-logger.d.ts.map +1 -1
  39. package/dist/src/core/sync/sync-event-logger.js +39 -1
  40. package/dist/src/core/sync/sync-event-logger.js.map +1 -1
  41. package/dist/src/core/types/sync-config-validator.d.ts +57 -0
  42. package/dist/src/core/types/sync-config-validator.d.ts.map +1 -0
  43. package/dist/src/core/types/sync-config-validator.js +116 -0
  44. package/dist/src/core/types/sync-config-validator.js.map +1 -0
  45. package/dist/src/importers/duplicate-detector.d.ts +107 -0
  46. package/dist/src/importers/duplicate-detector.d.ts.map +1 -0
  47. package/dist/src/importers/duplicate-detector.js +189 -0
  48. package/dist/src/importers/duplicate-detector.js.map +1 -0
  49. package/dist/src/importers/import-coordinator.d.ts +15 -0
  50. package/dist/src/importers/import-coordinator.d.ts.map +1 -1
  51. package/dist/src/importers/import-coordinator.js +43 -1
  52. package/dist/src/importers/import-coordinator.js.map +1 -1
  53. package/dist/src/importers/item-converter.d.ts +5 -0
  54. package/dist/src/importers/item-converter.d.ts.map +1 -1
  55. package/dist/src/importers/item-converter.js +27 -2
  56. package/dist/src/importers/item-converter.js.map +1 -1
  57. package/dist/src/importers/rate-limiter.d.ts +128 -0
  58. package/dist/src/importers/rate-limiter.d.ts.map +1 -0
  59. package/dist/src/importers/rate-limiter.js +200 -0
  60. package/dist/src/importers/rate-limiter.js.map +1 -0
  61. package/dist/src/init/compliance/types.d.ts +2 -2
  62. package/dist/src/integrations/ado/ado-client.d.ts +6 -0
  63. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
  64. package/dist/src/integrations/ado/ado-client.js +23 -0
  65. package/dist/src/integrations/ado/ado-client.js.map +1 -1
  66. package/dist/src/integrations/jira/jira-client.d.ts +6 -0
  67. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
  68. package/dist/src/integrations/jira/jira-client.js +38 -0
  69. package/dist/src/integrations/jira/jira-client.js.map +1 -1
  70. package/dist/src/sync/external-item-sync-service.d.ts +150 -0
  71. package/dist/src/sync/external-item-sync-service.d.ts.map +1 -0
  72. package/dist/src/sync/external-item-sync-service.js +241 -0
  73. package/dist/src/sync/external-item-sync-service.js.map +1 -0
  74. package/dist/src/sync/format-preservation-sync.d.ts +90 -0
  75. package/dist/src/sync/format-preservation-sync.d.ts.map +1 -0
  76. package/dist/src/sync/format-preservation-sync.js +173 -0
  77. package/dist/src/sync/format-preservation-sync.js.map +1 -0
  78. package/dist/src/sync/index.d.ts +8 -0
  79. package/dist/src/sync/index.d.ts.map +1 -0
  80. package/dist/src/sync/index.js +6 -0
  81. package/dist/src/sync/index.js.map +1 -0
  82. package/dist/src/sync/sync-coordinator.d.ts +49 -0
  83. package/dist/src/sync/sync-coordinator.d.ts.map +1 -0
  84. package/dist/src/sync/sync-coordinator.js +248 -0
  85. package/dist/src/sync/sync-coordinator.js.map +1 -0
  86. package/dist/src/sync/sync-metadata.d.ts +75 -0
  87. package/dist/src/sync/sync-metadata.d.ts.map +1 -0
  88. package/dist/src/sync/sync-metadata.js +100 -0
  89. package/dist/src/sync/sync-metadata.js.map +1 -0
  90. package/dist/src/types/living-docs-us-file.d.ts +63 -0
  91. package/dist/src/types/living-docs-us-file.d.ts.map +1 -0
  92. package/dist/src/types/living-docs-us-file.js +27 -0
  93. package/dist/src/types/living-docs-us-file.js.map +1 -0
  94. package/dist/src/validators/format-preservation-validator.d.ts +127 -0
  95. package/dist/src/validators/format-preservation-validator.d.ts.map +1 -0
  96. package/dist/src/validators/format-preservation-validator.js +187 -0
  97. package/dist/src/validators/format-preservation-validator.js.map +1 -0
  98. package/package.json +3 -2
  99. package/plugins/specweave/.claude-plugin/plugin.json +20 -0
  100. package/plugins/specweave/commands/specweave-archive-features.md +11 -1
  101. package/plugins/specweave/commands/specweave-import-docs.md +88 -278
  102. package/plugins/specweave/commands/specweave-import-external.md +407 -0
  103. package/plugins/specweave/hooks/post-edit-spec.sh +41 -0
  104. package/plugins/specweave/hooks/post-increment-completion.sh +0 -0
  105. package/plugins/specweave/hooks/post-spec-update.sh +0 -0
  106. package/plugins/specweave/hooks/post-task-completion.sh +13 -3
  107. package/plugins/specweave/hooks/post-write-spec.sh +37 -0
  108. package/plugins/specweave/lib/hooks/auto-transition.js +1 -1
  109. package/plugins/specweave/lib/hooks/auto-transition.ts +1 -1
  110. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +1 -1
  111. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +1 -1
  112. package/plugins/specweave/lib/hooks/sync-living-docs.js +35 -1
  113. package/plugins/specweave/lib/hooks/sync-us-tasks.js +179 -3
  114. package/plugins/specweave/lib/hooks/translate-file.js +1 -1
  115. package/plugins/specweave/lib/hooks/translate-file.ts +1 -1
  116. package/plugins/specweave/lib/hooks/update-ac-status.js +1 -1
  117. package/plugins/specweave/lib/hooks/update-ac-status.ts +1 -1
  118. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.d.ts +115 -0
  119. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +345 -0
  120. package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -0
  121. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.d.ts +106 -0
  122. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js +220 -0
  123. package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js.map +1 -0
  124. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.d.ts +60 -0
  125. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js +192 -0
  126. package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js.map +1 -0
  127. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.d.ts +52 -0
  128. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +276 -0
  129. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -0
  130. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +163 -0
  131. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +541 -0
  132. package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -0
  133. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +157 -0
  134. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js +191 -0
  135. package/plugins/specweave/lib/vendor/core/types/increment-metadata.js.map +1 -0
  136. package/plugins/specweave/lib/vendor/generators/spec/task-parser.d.ts +95 -0
  137. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js +301 -0
  138. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -0
  139. package/plugins/specweave/lib/vendor/utils/logger.d.ts +48 -0
  140. package/plugins/specweave/lib/vendor/utils/logger.js +53 -0
  141. package/plugins/specweave/lib/vendor/utils/logger.js.map +1 -0
  142. package/plugins/specweave/lib/vendor/utils/translation.d.ts +187 -0
  143. package/plugins/specweave/lib/vendor/utils/translation.js +414 -0
  144. package/plugins/specweave/lib/vendor/utils/translation.js.map +1 -0
  145. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
  146. package/plugins/specweave-github/commands/specweave-github-update-user-story.md +1 -1
  147. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +1 -1
  148. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  149. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
  150. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +0 -5694
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Metadata Manager
3
+ *
4
+ * Handles CRUD operations for increment metadata (status, type, timestamps).
5
+ * Part of increment 0007: Smart Status Management
6
+ */
7
+ import { IncrementMetadata, IncrementMetadataExtended, IncrementStatus, IncrementType } from '../types/increment-metadata.js';
8
+ import { Logger } from '../../utils/logger.js';
9
+ /**
10
+ * Error thrown when metadata operations fail
11
+ */
12
+ export declare class MetadataError extends Error {
13
+ incrementId: string;
14
+ cause?: Error;
15
+ constructor(message: string, incrementId: string, cause?: Error);
16
+ }
17
+ /**
18
+ * Metadata Manager
19
+ *
20
+ * Provides CRUD operations and queries for increment metadata
21
+ */
22
+ export declare class MetadataManager {
23
+ /**
24
+ * Logger instance (injectable for testing)
25
+ */
26
+ private static logger;
27
+ /**
28
+ * Set logger instance (primarily for testing with silentLogger)
29
+ *
30
+ * @param logger - Logger instance to use
31
+ */
32
+ static setLogger(logger: Logger): void;
33
+ /**
34
+ * Get metadata file path for increment
35
+ */
36
+ private static getMetadataPath;
37
+ /**
38
+ * Get increment directory path
39
+ */
40
+ private static getIncrementPath;
41
+ /**
42
+ * Check if metadata file exists
43
+ */
44
+ static exists(incrementId: string): boolean;
45
+ /**
46
+ * Read metadata from file
47
+ * Creates default metadata if file doesn't exist (lazy initialization)
48
+ */
49
+ static read(incrementId: string): IncrementMetadata;
50
+ /**
51
+ * Reserved increment IDs that cannot be used
52
+ * These are status values, special folders, and state files
53
+ */
54
+ private static readonly RESERVED_INCREMENT_IDS;
55
+ /**
56
+ * Validate increment ID is not a reserved name
57
+ * Throws if ID is reserved
58
+ */
59
+ private static validateNotReserved;
60
+ /**
61
+ * Validate increment before creation (check for duplicates and reserved names)
62
+ * Throws if duplicates exist in other locations or ID is reserved
63
+ */
64
+ static validateBeforeCreate(incrementId: string, rootDir?: string): Promise<void>;
65
+ /**
66
+ * Write metadata to file
67
+ * Uses atomic write (temp file → rename)
68
+ */
69
+ static write(incrementId: string, metadata: IncrementMetadata): void;
70
+ /**
71
+ * Delete metadata file
72
+ */
73
+ static delete(incrementId: string): void;
74
+ /**
75
+ * Update increment status
76
+ * Validates transition and updates timestamps
77
+ *
78
+ * **CRITICAL**: Also updates active increment state automatically!
79
+ *
80
+ * NOTE: This method is now SYNCHRONOUS to ensure spec.md is updated
81
+ * before returning. This prevents race conditions in tests and ensures
82
+ * data consistency.
83
+ */
84
+ static updateStatus(incrementId: string, newStatus: IncrementStatus, reason?: string): IncrementMetadata;
85
+ /**
86
+ * Update spec.md status synchronously (used by updateStatus)
87
+ *
88
+ * This is a private helper to avoid async/await in updateStatus() which would
89
+ * break backward compatibility with callers expecting sync behavior.
90
+ */
91
+ private static updateSpecMdStatusSync;
92
+ /**
93
+ * Update increment type
94
+ */
95
+ static updateType(incrementId: string, type: IncrementType): IncrementMetadata;
96
+ /**
97
+ * Touch increment (update lastActivity)
98
+ */
99
+ static touch(incrementId: string): IncrementMetadata;
100
+ /**
101
+ * Get all increments
102
+ */
103
+ static getAll(): IncrementMetadata[];
104
+ /**
105
+ * Get increments by status
106
+ */
107
+ static getByStatus(status: IncrementStatus): IncrementMetadata[];
108
+ /**
109
+ * Get active increments (FAST: cache-first strategy)
110
+ *
111
+ * **PERFORMANCE UPGRADE**: Uses ActiveIncrementManager cache instead of scanning all increments
112
+ * - Old: Scan 31 metadata files (~50ms)
113
+ * - New: Read 1 cache file + 1-2 metadata files (~5ms) = **10x faster**
114
+ *
115
+ * Fallback to full scan if cache is stale or missing
116
+ */
117
+ static getActive(): IncrementMetadata[];
118
+ /**
119
+ * Get backlog increments
120
+ */
121
+ static getBacklog(): IncrementMetadata[];
122
+ /**
123
+ * Get paused increments
124
+ */
125
+ static getPaused(): IncrementMetadata[];
126
+ /**
127
+ * Get completed increments
128
+ */
129
+ static getCompleted(): IncrementMetadata[];
130
+ /**
131
+ * Get abandoned increments
132
+ */
133
+ static getAbandoned(): IncrementMetadata[];
134
+ /**
135
+ * Get increments by type
136
+ */
137
+ static getByType(type: IncrementType): IncrementMetadata[];
138
+ /**
139
+ * Get stale increments (paused >7 days or active >30 days)
140
+ */
141
+ static getStale(): IncrementMetadata[];
142
+ /**
143
+ * Get increments that should be auto-abandoned (experiments inactive >14 days)
144
+ */
145
+ static getShouldAutoAbandon(): IncrementMetadata[];
146
+ /**
147
+ * Get extended metadata with computed fields (progress, age, etc.)
148
+ */
149
+ static getExtended(incrementId: string): IncrementMetadataExtended;
150
+ /**
151
+ * Validate metadata schema
152
+ */
153
+ static validate(metadata: IncrementMetadata): boolean;
154
+ /**
155
+ * Check if status transition is allowed
156
+ */
157
+ static canTransition(from: IncrementStatus, to: IncrementStatus): boolean;
158
+ /**
159
+ * Get human-readable status transition error message
160
+ */
161
+ static getTransitionError(from: IncrementStatus, to: IncrementStatus): string;
162
+ }
163
+ //# sourceMappingURL=metadata-manager.d.ts.map