specweave 0.22.0 → 0.22.2

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 (184) hide show
  1. package/CLAUDE.md +211 -0
  2. package/README.md +5 -5
  3. package/bin/specweave.js +5 -8
  4. package/dist/plugins/specweave-github/lib/CodeValidator.d.ts +1 -1
  5. package/dist/plugins/specweave-github/lib/CodeValidator.js +1 -1
  6. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +10 -0
  7. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  8. package/dist/plugins/specweave-github/lib/github-client-v2.js +26 -0
  9. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  10. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
  11. package/dist/plugins/specweave-github/lib/task-sync.js +7 -0
  12. package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
  13. package/dist/src/cli/commands/migrate-to-profiles.d.ts +1 -0
  14. package/dist/src/cli/commands/migrate-to-profiles.d.ts.map +1 -1
  15. package/dist/src/cli/commands/migrate-to-profiles.js +12 -1
  16. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  17. package/dist/src/cli/commands/next-command.d.ts +52 -0
  18. package/dist/src/cli/commands/next-command.d.ts.map +1 -0
  19. package/dist/src/cli/commands/next-command.js +204 -0
  20. package/dist/src/cli/commands/next-command.js.map +1 -0
  21. package/dist/src/cli/commands/sync-specs.d.ts +16 -0
  22. package/dist/src/cli/commands/sync-specs.d.ts.map +1 -0
  23. package/dist/src/cli/commands/sync-specs.js +130 -0
  24. package/dist/src/cli/commands/sync-specs.js.map +1 -0
  25. package/dist/src/cli/count-tasks.d.ts +20 -0
  26. package/dist/src/cli/count-tasks.d.ts.map +1 -0
  27. package/dist/src/cli/count-tasks.js +50 -0
  28. package/dist/src/cli/count-tasks.js.map +1 -0
  29. package/dist/src/config/ConfigManager.d.ts.map +1 -1
  30. package/dist/src/config/ConfigManager.js +2 -1
  31. package/dist/src/config/ConfigManager.js.map +1 -1
  32. package/dist/src/config/types.d.ts +50 -50
  33. package/dist/src/core/cicd/state-manager.d.ts +8 -0
  34. package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
  35. package/dist/src/core/cicd/state-manager.js +60 -15
  36. package/dist/src/core/cicd/state-manager.js.map +1 -1
  37. package/dist/src/core/cost-tracker.d.ts.map +1 -1
  38. package/dist/src/core/cost-tracker.js +2 -1
  39. package/dist/src/core/cost-tracker.js.map +1 -1
  40. package/dist/src/core/iac/template-engine.d.ts.map +1 -1
  41. package/dist/src/core/iac/template-engine.js +28 -0
  42. package/dist/src/core/iac/template-engine.js.map +1 -1
  43. package/dist/src/core/iac/template-generator.d.ts +53 -0
  44. package/dist/src/core/iac/template-generator.d.ts.map +1 -0
  45. package/dist/src/core/iac/template-generator.js +125 -0
  46. package/dist/src/core/iac/template-generator.js.map +1 -0
  47. package/dist/src/core/increment/status-auto-transition.js +3 -3
  48. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  49. package/dist/src/core/living-docs/CodeValidator.js +1 -1
  50. package/dist/src/core/living-docs/CodeValidator.js.map +1 -1
  51. package/dist/src/core/living-docs/content-distributor.d.ts.map +1 -1
  52. package/dist/src/core/living-docs/content-distributor.js +11 -1
  53. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  54. package/dist/src/core/living-docs/living-docs-sync.d.ts +166 -0
  55. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -0
  56. package/dist/src/core/living-docs/living-docs-sync.js +726 -0
  57. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -0
  58. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +7 -3
  59. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -1
  60. package/dist/src/core/living-docs/task-project-specific-generator.js +40 -24
  61. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
  62. package/dist/src/core/plugin-loader.d.ts +7 -0
  63. package/dist/src/core/plugin-loader.d.ts.map +1 -1
  64. package/dist/src/core/plugin-loader.js +18 -1
  65. package/dist/src/core/plugin-loader.js.map +1 -1
  66. package/dist/src/core/serverless/platform-data-loader.d.ts +8 -0
  67. package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -1
  68. package/dist/src/core/serverless/platform-data-loader.js +14 -0
  69. package/dist/src/core/serverless/platform-data-loader.js.map +1 -1
  70. package/dist/src/core/serverless/types.d.ts +1 -1
  71. package/dist/src/core/serverless/types.d.ts.map +1 -1
  72. package/dist/src/core/status-line/status-line-manager.d.ts +6 -2
  73. package/dist/src/core/status-line/status-line-manager.d.ts.map +1 -1
  74. package/dist/src/core/status-line/status-line-manager.js +11 -5
  75. package/dist/src/core/status-line/status-line-manager.js.map +1 -1
  76. package/dist/src/core/status-line/task-counter.d.ts +69 -0
  77. package/dist/src/core/status-line/task-counter.d.ts.map +1 -0
  78. package/dist/src/core/status-line/task-counter.js +107 -0
  79. package/dist/src/core/status-line/task-counter.js.map +1 -0
  80. package/dist/src/core/workflow/autonomous-executor.d.ts +111 -0
  81. package/dist/src/core/workflow/autonomous-executor.d.ts.map +1 -0
  82. package/dist/src/core/workflow/autonomous-executor.js +275 -0
  83. package/dist/src/core/workflow/autonomous-executor.js.map +1 -0
  84. package/dist/src/core/workflow/backlog-scanner.d.ts +94 -0
  85. package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -0
  86. package/dist/src/core/workflow/backlog-scanner.js +170 -0
  87. package/dist/src/core/workflow/backlog-scanner.js.map +1 -0
  88. package/dist/src/core/workflow/command-invoker.d.ts +86 -0
  89. package/dist/src/core/workflow/command-invoker.d.ts.map +1 -0
  90. package/dist/src/core/workflow/command-invoker.js +131 -0
  91. package/dist/src/core/workflow/command-invoker.js.map +1 -0
  92. package/dist/src/core/workflow/cost-estimator.d.ts +120 -0
  93. package/dist/src/core/workflow/cost-estimator.d.ts.map +1 -0
  94. package/dist/src/core/workflow/cost-estimator.js +222 -0
  95. package/dist/src/core/workflow/cost-estimator.js.map +1 -0
  96. package/dist/src/core/workflow/index.d.ts +20 -0
  97. package/dist/src/core/workflow/index.d.ts.map +1 -0
  98. package/dist/src/core/workflow/index.js +24 -0
  99. package/dist/src/core/workflow/index.js.map +1 -0
  100. package/dist/src/core/workflow/state-manager.d.ts +107 -0
  101. package/dist/src/core/workflow/state-manager.d.ts.map +1 -0
  102. package/dist/src/core/workflow/state-manager.js +126 -0
  103. package/dist/src/core/workflow/state-manager.js.map +1 -0
  104. package/dist/src/core/workflow/workflow-orchestrator.d.ts +93 -0
  105. package/dist/src/core/workflow/workflow-orchestrator.d.ts.map +1 -0
  106. package/dist/src/core/workflow/workflow-orchestrator.js +195 -0
  107. package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -0
  108. package/dist/src/init/architecture/types.d.ts +10 -10
  109. package/dist/src/metrics/dora-calculator.js +2 -2
  110. package/dist/src/metrics/dora-calculator.js.map +1 -1
  111. package/dist/src/utils/pricing-constants.d.ts +5 -2
  112. package/dist/src/utils/pricing-constants.d.ts.map +1 -1
  113. package/dist/src/utils/pricing-constants.js +3 -2
  114. package/dist/src/utils/pricing-constants.js.map +1 -1
  115. package/package.json +4 -4
  116. package/plugins/specweave/agents/infrastructure/AGENT.md +88 -46
  117. package/plugins/specweave/agents/pm/AGENT.md +58 -1
  118. package/plugins/specweave/commands/specweave-archive-features.md +1 -1
  119. package/plugins/specweave/commands/specweave-archive-increments.md +1 -1
  120. package/plugins/specweave/commands/specweave-check-hooks.md +5 -0
  121. package/plugins/specweave/commands/specweave-done.md +12 -0
  122. package/plugins/specweave/commands/specweave-plan.md +1 -1
  123. package/plugins/specweave/commands/specweave-progress.md +108 -379
  124. package/plugins/specweave/commands/specweave-reopen.md +1 -1
  125. package/plugins/specweave/commands/specweave-restore-feature.md +1 -1
  126. package/plugins/specweave/commands/specweave-sync-specs.md +20 -48
  127. package/plugins/specweave/hooks/lib/update-status-line.sh +44 -35
  128. package/plugins/specweave/hooks/lib/validate-spec-status.sh +163 -0
  129. package/plugins/specweave/hooks/user-prompt-submit.sh +17 -35
  130. package/plugins/specweave/lib/hooks/update-tasks-md.js +52 -9
  131. package/plugins/specweave/lib/hooks/update-tasks-md.ts +77 -16
  132. package/plugins/specweave/templates/iac/aws-lambda/defaults.json +24 -0
  133. package/plugins/specweave/templates/iac/aws-lambda/templates/README.md.hbs +260 -0
  134. package/plugins/specweave/templates/iac/aws-lambda/templates/environments/dev.tfvars.hbs +34 -0
  135. package/plugins/specweave/templates/iac/aws-lambda/templates/environments/prod.tfvars.hbs +37 -0
  136. package/plugins/specweave/templates/iac/aws-lambda/templates/environments/staging.tfvars.hbs +35 -0
  137. package/plugins/specweave/templates/iac/aws-lambda/templates/outputs.tf.hbs +77 -0
  138. package/plugins/specweave/templates/iac/aws-lambda/templates/providers.tf.hbs +36 -0
  139. package/plugins/specweave/templates/iac/aws-lambda/templates/variables.tf.hbs +115 -0
  140. package/plugins/specweave/templates/iac/azure-functions/defaults.json +25 -0
  141. package/plugins/specweave/templates/iac/azure-functions/templates/README.md.hbs +268 -0
  142. package/plugins/specweave/templates/iac/azure-functions/templates/environments/dev.tfvars.hbs +34 -0
  143. package/plugins/specweave/templates/iac/azure-functions/templates/environments/prod.tfvars.hbs +46 -0
  144. package/plugins/specweave/templates/iac/azure-functions/templates/environments/staging.tfvars.hbs +34 -0
  145. package/plugins/specweave/templates/iac/azure-functions/templates/main.tf.hbs +225 -0
  146. package/plugins/specweave/templates/iac/azure-functions/templates/outputs.tf.hbs +89 -0
  147. package/plugins/specweave/templates/iac/azure-functions/templates/provider.tf.hbs +27 -0
  148. package/plugins/specweave/templates/iac/azure-functions/templates/providers.tf.hbs +35 -0
  149. package/plugins/specweave/templates/iac/azure-functions/templates/variables.tf.hbs +124 -0
  150. package/plugins/specweave/templates/iac/firebase/defaults.json +29 -0
  151. package/plugins/specweave/templates/iac/firebase/templates/README.md.hbs +35 -0
  152. package/plugins/specweave/templates/iac/firebase/templates/environments/dev.tfvars.hbs +7 -0
  153. package/plugins/specweave/templates/iac/firebase/templates/environments/prod.tfvars.hbs +7 -0
  154. package/plugins/specweave/templates/iac/firebase/templates/environments/staging.tfvars.hbs +7 -0
  155. package/plugins/specweave/templates/iac/firebase/templates/main.tf.hbs +90 -0
  156. package/plugins/specweave/templates/iac/firebase/templates/outputs.tf.hbs +15 -0
  157. package/plugins/specweave/templates/iac/firebase/templates/providers.tf.hbs +23 -0
  158. package/plugins/specweave/templates/iac/firebase/templates/variables.tf.hbs +42 -0
  159. package/plugins/specweave/templates/iac/gcp-cloud-functions/defaults.json +26 -0
  160. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/README.md.hbs +299 -0
  161. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/dev.tfvars.hbs +36 -0
  162. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/prod.tfvars.hbs +48 -0
  163. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/staging.tfvars.hbs +41 -0
  164. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/main.tf.hbs +192 -0
  165. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/outputs.tf.hbs +66 -0
  166. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/providers.tf.hbs +25 -0
  167. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/variables.tf.hbs +119 -0
  168. package/plugins/specweave/templates/iac/supabase/defaults.json +15 -0
  169. package/plugins/specweave/templates/iac/supabase/templates/README.md.hbs +46 -0
  170. package/plugins/specweave/templates/iac/supabase/templates/main.tf.hbs +50 -0
  171. package/plugins/specweave-github/agents/github-manager/AGENT.md +39 -7
  172. package/plugins/specweave-github/commands/specweave-github-create-issue.md +5 -5
  173. package/plugins/specweave-github/lib/CodeValidator.ts +1 -1
  174. package/plugins/specweave-github/lib/github-client-v2.js +29 -0
  175. package/plugins/specweave-github/lib/github-client-v2.ts +30 -0
  176. package/plugins/specweave-github/lib/task-sync.js +4 -0
  177. package/plugins/specweave-github/lib/task-sync.ts +7 -0
  178. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  179. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +2022 -0
  180. package/src/templates/CLAUDE.md.template +31 -0
  181. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +0 -116
  182. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +0 -1
  183. package/dist/src/core/living-docs/ThreeLayerSyncManager.js +0 -356
  184. package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +0 -1
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Workflow Orchestrator - Core orchestration logic for /specweave:next
3
+ *
4
+ * Coordinates workflow execution by detecting current phase and
5
+ * invoking appropriate commands.
6
+ *
7
+ * Part of increment 0039: Ultra-Smart Next Command
8
+ *
9
+ * @module core/workflow/workflow-orchestrator
10
+ * @since v0.22.0
11
+ */
12
+ import { PhaseDetector } from './phase-detector.js';
13
+ import { WorkflowPhase } from './types.js';
14
+ import { ActiveIncrementManager } from '../increment/active-increment-manager.js';
15
+ /**
16
+ * Workflow Orchestrator - Coordinates intelligent workflow execution
17
+ *
18
+ * This is a simplified initial implementation focusing on core phase detection.
19
+ * Full autonomous execution will be added in future tasks.
20
+ */
21
+ export class WorkflowOrchestrator {
22
+ constructor() {
23
+ this.phaseDetector = new PhaseDetector();
24
+ this.activeIncrementManager = new ActiveIncrementManager();
25
+ }
26
+ /**
27
+ * Execute next step in workflow (interactive mode)
28
+ *
29
+ * Detects current phase and suggests/executes appropriate action.
30
+ *
31
+ * @param incrementId - Optional increment ID (auto-detects if not provided)
32
+ * @param options - Execution options
33
+ * @returns Workflow execution result
34
+ */
35
+ async executeNext(incrementId, options = {}) {
36
+ try {
37
+ // Phase 1: Detect current workflow phase
38
+ const detection = await this.detectCurrentPhase(incrementId);
39
+ // Phase 2: Determine action based on phase and confidence
40
+ const action = this.determineAction(detection, options);
41
+ // Format reasoning from detection evidence
42
+ const reasoning = this.formatReasoning(detection);
43
+ // Phase 3: Execute action (or return suggestion)
44
+ if (options.dryRun) {
45
+ return {
46
+ success: true,
47
+ phase: detection.phase,
48
+ confidence: detection.confidence,
49
+ action: action.description,
50
+ reasoning: `[DRY RUN] Would execute: ${action.description}\n\n${reasoning}`
51
+ };
52
+ }
53
+ // For now, return suggestion (actual execution will be added in later tasks)
54
+ return {
55
+ success: true,
56
+ phase: detection.phase,
57
+ confidence: detection.confidence,
58
+ action: action.description,
59
+ command: action.command,
60
+ reasoning
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ success: false,
66
+ phase: WorkflowPhase.UNKNOWN,
67
+ confidence: 0,
68
+ error: error instanceof Error ? error.message : String(error),
69
+ reasoning: 'Failed to detect workflow phase or execute action'
70
+ };
71
+ }
72
+ }
73
+ /**
74
+ * Format reasoning from phase detection result
75
+ */
76
+ formatReasoning(detection) {
77
+ const parts = [];
78
+ // Add suggestion reason if present
79
+ if (detection.suggestionReason) {
80
+ parts.push(detection.suggestionReason);
81
+ }
82
+ // Add evidence summary
83
+ if (detection.evidence && detection.evidence.length > 0) {
84
+ parts.push('\nEvidence:');
85
+ detection.evidence.forEach(ev => {
86
+ parts.push(`- ${ev.description} (${(ev.weight * 100).toFixed(0)}% weight)`);
87
+ });
88
+ }
89
+ return parts.join('\n');
90
+ }
91
+ /**
92
+ * Detect current workflow phase for increment
93
+ *
94
+ * @param incrementId - Increment ID (auto-detects if not provided)
95
+ * @returns Phase detection result
96
+ */
97
+ async detectCurrentPhase(incrementId) {
98
+ // If no increment ID provided, try to auto-detect active increment
99
+ if (!incrementId) {
100
+ incrementId = await this.detectActiveIncrement();
101
+ }
102
+ // Build detection context
103
+ const context = {
104
+ userPrompt: 'Detect current workflow phase',
105
+ incrementId,
106
+ workingDirectory: process.cwd()
107
+ };
108
+ // Detect phase using PhaseDetector
109
+ return this.phaseDetector.detect(context);
110
+ }
111
+ /**
112
+ * Auto-detect active increment
113
+ *
114
+ * @returns Increment ID or throws if none found
115
+ */
116
+ async detectActiveIncrement() {
117
+ const activeIds = this.activeIncrementManager.getActive();
118
+ if (activeIds.length === 0) {
119
+ throw new Error('No active increments found. Use /specweave:increment to create one.');
120
+ }
121
+ if (activeIds.length === 1) {
122
+ return activeIds[0];
123
+ }
124
+ // Multiple active increments - return primary (first)
125
+ console.log(`Multiple active increments detected: ${activeIds.join(', ')}`);
126
+ console.log(`Using primary increment: ${activeIds[0]}`);
127
+ return activeIds[0];
128
+ }
129
+ /**
130
+ * Determine action based on phase and confidence
131
+ *
132
+ * @param detection - Phase detection result
133
+ * @param options - Execution options
134
+ * @returns Suggested action
135
+ */
136
+ determineAction(detection, options) {
137
+ const { phase, confidence } = detection;
138
+ // Low confidence - prompt user
139
+ if (confidence < 0.7 && !options.force) {
140
+ return {
141
+ description: `Phase detection confidence is low (${(confidence * 100).toFixed(0)}%). Please specify action manually.`,
142
+ command: undefined
143
+ };
144
+ }
145
+ // Map phase to action
146
+ switch (phase) {
147
+ case WorkflowPhase.PLAN_GENERATION:
148
+ return {
149
+ description: 'Generate implementation plan',
150
+ command: '/specweave:plan'
151
+ };
152
+ case WorkflowPhase.IMPLEMENTATION:
153
+ return {
154
+ description: 'Execute tasks',
155
+ command: '/specweave:do'
156
+ };
157
+ case WorkflowPhase.TESTING:
158
+ return {
159
+ description: 'Run tests',
160
+ command: 'npm test'
161
+ };
162
+ case WorkflowPhase.REVIEW:
163
+ return {
164
+ description: 'Run quality assessment',
165
+ command: '/specweave:qa'
166
+ };
167
+ case WorkflowPhase.COMPLETION:
168
+ return {
169
+ description: 'Close increment',
170
+ command: '/specweave:done'
171
+ };
172
+ case WorkflowPhase.SPEC_WRITING:
173
+ return {
174
+ description: 'Complete spec.md and generate plan',
175
+ command: '/specweave:plan'
176
+ };
177
+ case WorkflowPhase.TASK_BREAKDOWN:
178
+ return {
179
+ description: 'Create tasks and start implementation',
180
+ command: '/specweave:do'
181
+ };
182
+ case WorkflowPhase.DOCUMENTATION:
183
+ return {
184
+ description: 'Update living documentation',
185
+ command: '/specweave:sync-docs update'
186
+ };
187
+ default:
188
+ return {
189
+ description: 'Phase detection unclear - please specify action manually',
190
+ command: undefined
191
+ };
192
+ }
193
+ }
194
+ }
195
+ //# sourceMappingURL=workflow-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-orchestrator.js","sourceRoot":"","sources":["../../../../src/core/workflow/workflow-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -199,6 +199,11 @@ export declare const ArchitectureRecommendationSchema: z.ZodObject<{
199
199
  description?: string;
200
200
  }[];
201
201
  infrastructure?: string[];
202
+ alternatives?: {
203
+ architecture?: "serverless" | "traditional-monolith" | "microservices" | "modular-monolith" | "jamstack" | "hybrid";
204
+ pros?: string[];
205
+ cons?: string[];
206
+ }[];
202
207
  rationale?: string;
203
208
  costEstimate?: {
204
209
  at1K?: string;
@@ -214,11 +219,6 @@ export declare const ArchitectureRecommendationSchema: z.ZodObject<{
214
219
  duration?: string;
215
220
  }[];
216
221
  methodology?: "agile" | "waterfall";
217
- alternatives?: {
218
- architecture?: "serverless" | "traditional-monolith" | "microservices" | "modular-monolith" | "jamstack" | "hybrid";
219
- pros?: string[];
220
- cons?: string[];
221
- }[];
222
222
  }, {
223
223
  architecture?: "serverless" | "traditional-monolith" | "microservices" | "modular-monolith" | "jamstack" | "hybrid";
224
224
  projects?: {
@@ -227,6 +227,11 @@ export declare const ArchitectureRecommendationSchema: z.ZodObject<{
227
227
  description?: string;
228
228
  }[];
229
229
  infrastructure?: string[];
230
+ alternatives?: {
231
+ architecture?: "serverless" | "traditional-monolith" | "microservices" | "modular-monolith" | "jamstack" | "hybrid";
232
+ pros?: string[];
233
+ cons?: string[];
234
+ }[];
230
235
  rationale?: string;
231
236
  costEstimate?: {
232
237
  at1K?: string;
@@ -242,10 +247,5 @@ export declare const ArchitectureRecommendationSchema: z.ZodObject<{
242
247
  duration?: string;
243
248
  }[];
244
249
  methodology?: "agile" | "waterfall";
245
- alternatives?: {
246
- architecture?: "serverless" | "traditional-monolith" | "microservices" | "modular-monolith" | "jamstack" | "hybrid";
247
- pros?: string[];
248
- cons?: string[];
249
- }[];
250
250
  }>;
251
251
  //# sourceMappingURL=types.d.ts.map
@@ -94,12 +94,12 @@ async function main() {
94
94
  const client = new GitHubClient(config);
95
95
  const result = await calculateDORAMetrics(client);
96
96
  // Write JSON file
97
- const jsonOutputPath = path.join(process.cwd(), 'metrics', 'dora-latest.json');
97
+ const jsonOutputPath = path.join(process.cwd(), '.specweave', 'metrics', 'dora-latest.json');
98
98
  writeMetricsJSON(result.metrics, jsonOutputPath);
99
99
  // Generate and write markdown report
100
100
  console.log('\n📝 Generating detailed report...');
101
101
  const report = generateMarkdownReport(result.metrics, result.releases, result.issues);
102
- const reportOutputPath = path.join(process.cwd(), 'metrics', 'dora-report.md');
102
+ const reportOutputPath = path.join(process.cwd(), '.specweave', 'metrics', 'dora-report.md');
103
103
  writeReport(report, reportOutputPath);
104
104
  console.log('\n🎉 DORA metrics calculation complete!');
105
105
  console.log(` 📊 JSON: ${jsonOutputPath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"dora-calculator.js","sourceRoot":"","sources":["../../../src/metrics/dora-calculator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dora-calculator.js","sourceRoot":"","sources":["../../../src/metrics/dora-calculator.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,10 @@ export declare function getModelPricing(model: 'sonnet' | 'haiku' | 'opus'): {
64
64
  * @param actualModel - Model actually used
65
65
  * @param inputTokens - Input tokens
66
66
  * @param outputTokens - Output tokens
67
- * @returns Savings amount in dollars (positive = saved money)
67
+ * @returns Object with savedAmount (dollars) and savedPercent (percentage)
68
68
  */
69
- export declare function calculateSavings(actualModel: 'sonnet' | 'haiku' | 'opus', inputTokens: number, outputTokens: number): number;
69
+ export declare function calculateSavings(actualModel: 'sonnet' | 'haiku' | 'opus', inputTokens: number, outputTokens: number): {
70
+ savedAmount: number;
71
+ savedPercent: number;
72
+ };
70
73
  //# sourceMappingURL=pricing-constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pricing-constants.d.ts","sourceRoot":"","sources":["../../../src/utils/pricing-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;CAaV,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,EAClC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM;;;;;;;;;EAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,EACxC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CAMR"}
1
+ {"version":3,"file":"pricing-constants.d.ts","sourceRoot":"","sources":["../../../src/utils/pricing-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;CAaV,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,EAClC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM;;;;;;;;;EAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,EACxC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAO/C"}
@@ -60,12 +60,13 @@ export function getModelPricing(model) {
60
60
  * @param actualModel - Model actually used
61
61
  * @param inputTokens - Input tokens
62
62
  * @param outputTokens - Output tokens
63
- * @returns Savings amount in dollars (positive = saved money)
63
+ * @returns Object with savedAmount (dollars) and savedPercent (percentage)
64
64
  */
65
65
  export function calculateSavings(actualModel, inputTokens, outputTokens) {
66
66
  const actualCost = calculateCost(actualModel, inputTokens, outputTokens);
67
67
  const baselineCost = calculateCost('sonnet', inputTokens, outputTokens);
68
68
  const savedAmount = baselineCost - actualCost;
69
- return savedAmount;
69
+ const savedPercent = baselineCost > 0 ? (savedAmount / baselineCost) * 100 : 0;
70
+ return { savedAmount, savedPercent };
70
71
  }
71
72
  //# sourceMappingURL=pricing-constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pricing-constants.js","sourceRoot":"","sources":["../../../src/utils/pricing-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ,EAAI,yBAAyB;QAC5C,MAAM,EAAE,QAAQ,EAAG,2BAA2B;KAC/C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,QAAQ,EAAI,yBAAyB;QAC5C,MAAM,EAAE,QAAQ,EAAG,0BAA0B;KAC9C;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,QAAQ,EAAI,0BAA0B;QAC7C,MAAM,EAAE,QAAQ,EAAG,2BAA2B;KAC/C;CACO,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAkC,EAClC,WAAmB,EACnB,YAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkC;IAChE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAwC,EACxC,WAAmB,EACnB,YAAoB;IAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;IAE9C,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"pricing-constants.js","sourceRoot":"","sources":["../../../src/utils/pricing-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ,EAAI,yBAAyB;QAC5C,MAAM,EAAE,QAAQ,EAAG,2BAA2B;KAC/C;IACD,KAAK,EAAE;QACL,KAAK,EAAE,QAAQ,EAAI,yBAAyB;QAC5C,MAAM,EAAE,QAAQ,EAAG,0BAA0B;KAC9C;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,QAAQ,EAAI,0BAA0B;QAC7C,MAAM,EAAE,QAAQ,EAAG,2BAA2B;KAC/C;CACO,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAkC,EAClC,WAAmB,EACnB,YAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkC;IAChE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAwC,EACxC,WAAmB,EACnB,YAAoB;IAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;IAC9C,MAAM,YAAY,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.22.0",
3
+ "version": "0.22.2",
4
4
  "description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -97,13 +97,13 @@
97
97
  "@types/inquirer": "^9.0.7",
98
98
  "@types/js-yaml": "^4.0.9",
99
99
  "@types/node": "^24.10.0",
100
- "@vitest/coverage-v8": "^2.1.0",
101
- "@vitest/ui": "^2.1.0",
100
+ "@vitest/coverage-v8": "^2.1.9",
101
+ "@vitest/ui": "^2.1.9",
102
102
  "ajv": "^8.17.1",
103
103
  "ajv-formats": "^3.0.1",
104
104
  "dotenv": "^17.2.3",
105
105
  "gray-matter": "^4.0.3",
106
106
  "typescript": "^5.3.0",
107
- "vitest": "^2.1.0"
107
+ "vitest": "^2.1.9"
108
108
  }
109
109
  }
@@ -60,24 +60,38 @@ I generate Terraform configurations for 5 serverless platforms:
60
60
 
61
61
  ### 2. Template Engine Integration
62
62
 
63
- I use the **TerraformTemplateEngine** to render Handlebars templates:
64
-
65
- **Template Location**: `plugins/specweave/iac-templates/{platform-id}/`
66
-
67
- **Template Files**:
68
- - `main.tf.hbs` - Core infrastructure resources
69
- - `variables.tf.hbs` - Input variables with defaults
70
- - `outputs.tf.hbs` - Output values (URLs, ARNs, IDs)
71
- - `provider.tf.hbs` - Cloud provider configuration
72
- - `iam.tf.hbs` - IAM roles, policies, service accounts (security)
73
- - `README.md.hbs` - Deployment instructions and documentation
74
-
75
- **Custom Helpers**:
76
- - `{{snakeCase name}}` - Convert to snake_case
77
- - `{{kebabCase name}}` - Convert to kebab-case
78
- - `{{tfList items}}` - Format as Terraform list
79
- - `{{tfMap obj}}` - Format as Terraform map
63
+ I use the **TerraformTemplateEngine** to render Handlebars templates with full serverless platform support:
64
+
65
+ **Template Location**: `plugins/specweave/templates/iac/{platform}/`
66
+
67
+ **Supported Platforms**:
68
+ - `aws-lambda/` - AWS Lambda + API Gateway + DynamoDB
69
+ - `azure-functions/` - Azure Functions + Cosmos DB
70
+ - `gcp-cloud-functions/` - GCP Cloud Functions + Firestore
71
+ - `firebase/` - Firebase Hosting + Functions + Firestore
72
+ - `supabase/` - Supabase (PostgreSQL + Auth + Storage)
73
+
74
+ **Template Files** (each platform has):
75
+ - `templates/main.tf.hbs` - Core infrastructure resources
76
+ - `templates/variables.tf.hbs` - Input variables with defaults
77
+ - `templates/outputs.tf.hbs` - Output values (URLs, ARNs, IDs)
78
+ - `templates/providers.tf.hbs` - Cloud provider configuration
79
+ - `templates/iam.tf.hbs` - IAM roles, policies, service accounts (AWS/GCP)
80
+ - `templates/README.md.hbs` - Deployment instructions and cost estimates
81
+ - `templates/environments/dev.tfvars.hbs` - Development config (free tier optimized)
82
+ - `templates/environments/staging.tfvars.hbs` - Staging config
83
+ - `templates/environments/prod.tfvars.hbs` - Production config (HA, backup)
84
+ - `defaults.json` - Default values for template variables
85
+
86
+ **Custom Handlebars Helpers**:
87
+ - `{{snakeCase name}}` - Convert to snake_case (e.g., "myFunction" → "my_function")
88
+ - `{{kebabCase name}}` - Convert to kebab-case (e.g., "myFunction" → "my-function")
89
+ - `{{tfList items}}` - Format array as Terraform list (e.g., ["a","b"] → `["a", "b"]`)
90
+ - `{{tfMap obj}}` - Format object as Terraform map
80
91
  - `{{#if (eq var "value")}}...{{/if}}` - Conditional rendering
92
+ - `{{#each items}}...{{/each}}` - Loop over arrays
93
+ - `{{multiply a b}}` - Arithmetic operations
94
+ - `{{add a b}}` - Addition for cost calculations
81
95
 
82
96
  ### 3. Environment-Specific Configurations
83
97
 
@@ -156,37 +170,65 @@ Architect Agent: → Recommends: AWS Lambda for startup project
156
170
 
157
171
  Infrastructure Agent (me):
158
172
  1. Load Templates:
159
- - Locate: plugins/specweave/iac-templates/aws-lambda/
160
- - Read: main.tf.hbs, variables.tf.hbs, outputs.tf.hbs, provider.tf.hbs, iam.tf.hbs, README.md.hbs
173
+ - Locate: plugins/specweave/templates/iac/aws-lambda/
174
+ - Read all template files:
175
+ * templates/main.tf.hbs
176
+ * templates/variables.tf.hbs
177
+ * templates/outputs.tf.hbs
178
+ * templates/providers.tf.hbs
179
+ * templates/iam.tf.hbs
180
+ * templates/README.md.hbs
181
+ * templates/environments/*.tfvars.hbs
161
182
 
162
183
  2. Merge Defaults:
163
- - Load: aws-lambda/defaults.json
164
- - Merge: defaults + project metadata
165
- - Result: Complete variable set
184
+ - Load: defaults.json from aws-lambda/
185
+ - Merge: defaults + architect recommendation metadata
186
+ - Result: Complete variable set with all required values
166
187
 
167
188
  3. Render Templates:
168
- - Use: TerraformTemplateEngine
169
- - Render: Each .hbs file → .tf file
170
- - Apply: Custom helpers (snakeCase, conditionals)
189
+ - Use: Handlebars template engine
190
+ - Render: Each .hbs file → corresponding output file
191
+ - Apply: Custom helpers (snakeCase, tfList, conditionals, loops)
192
+ - Substitute: All {{variableName}} placeholders with actual values
171
193
 
172
194
  4. Generate Environment Configs:
173
- - Load: environments/dev.defaults.json
174
- - Generate: environments/dev.tfvars
175
- - Load: environments/staging.defaults.json
176
- - Generate: environments/staging.tfvars
177
- - Load: environments/prod.defaults.json
178
- - Generate: environments/prod.tfvars
195
+ - Dev environment:
196
+ * Render: templates/environments/dev.tfvars.hbs → dev.tfvars
197
+ * Optimize: Free tier settings (min resources, pay-per-request)
198
+ - Staging environment:
199
+ * Render: templates/environments/staging.tfvars.hbs → staging.tfvars
200
+ * Balance: Performance vs cost
201
+ - Production environment:
202
+ * Render: templates/environments/prod.tfvars.hbs → prod.tfvars
203
+ * Maximize: Availability, backup, multi-region
179
204
 
180
205
  5. Write Files:
181
- - Create: .infrastructure/aws-lambda/ directory
182
- - Write: main.tf, variables.tf, outputs.tf, provider.tf, iam.tf
183
- - Write: README.md (deployment instructions)
184
- - Write: environments/*.tfvars
206
+ - Create: .infrastructure/aws-lambda/ directory in project root
207
+ - Write Terraform files:
208
+ * main.tf (infrastructure resources)
209
+ * variables.tf (input variables)
210
+ * outputs.tf (output values)
211
+ * providers.tf (AWS provider config)
212
+ * iam.tf (IAM roles and policies)
213
+ - Write documentation:
214
+ * README.md (deployment instructions, cost estimates, troubleshooting)
215
+ - Write environment configs:
216
+ * environments/dev.tfvars
217
+ * environments/staging.tfvars
218
+ * environments/prod.tfvars
185
219
 
186
220
  6. Output Summary:
187
221
  ✅ Generated 9 files in .infrastructure/aws-lambda/
188
- 📄 Review files before deploying
189
- 🚀 Next steps: terraform init plan → apply
222
+ 📄 Review generated files:
223
+ - main.tf: Lambda, API Gateway, DynamoDB resources
224
+ - iam.tf: Least-privilege IAM roles
225
+ - README.md: Deployment guide with cost estimates
226
+ 💰 Estimated cost (dev): $0/month (free tier)
227
+ 🚀 Next steps:
228
+ 1. Review infrastructure files
229
+ 2. Run: terraform init
230
+ 3. Run: terraform plan -var-file="environments/dev.tfvars"
231
+ 4. Run: terraform apply -var-file="environments/dev.tfvars"
190
232
  ```
191
233
 
192
234
  ### Workflow 2: Multi-Environment Deployment
@@ -239,12 +281,12 @@ Infrastructure Agent:
239
281
  **My Process**:
240
282
  ```
241
283
  1. Load Templates:
242
- ✅ plugins/specweave/iac-templates/aws-lambda/main.tf.hbs
243
- ✅ plugins/specweave/iac-templates/aws-lambda/variables.tf.hbs
244
- ✅ plugins/specweave/iac-templates/aws-lambda/outputs.tf.hbs
245
- ✅ plugins/specweave/iac-templates/aws-lambda/provider.tf.hbs
246
- ✅ plugins/specweave/iac-templates/aws-lambda/iam.tf.hbs
247
- ✅ plugins/specweave/iac-templates/aws-lambda/README.md.hbs
284
+ ✅ plugins/specweave/templates/iac/aws-lambda/main.tf.hbs
285
+ ✅ plugins/specweave/templates/iac/aws-lambda/variables.tf.hbs
286
+ ✅ plugins/specweave/templates/iac/aws-lambda/outputs.tf.hbs
287
+ ✅ plugins/specweave/templates/iac/aws-lambda/provider.tf.hbs
288
+ ✅ plugins/specweave/templates/iac/aws-lambda/iam.tf.hbs
289
+ ✅ plugins/specweave/templates/iac/aws-lambda/README.md.hbs
248
290
 
249
291
  2. Render with Variables:
250
292
  - projectName: "my-startup-api"
@@ -362,7 +404,7 @@ import { TerraformTemplateEngine } from '@specweave/core/iac/template-engine';
362
404
 
363
405
  const engine = new TerraformTemplateEngine();
364
406
  const result = await engine.render({
365
- templatePath: 'plugins/specweave/iac-templates/aws-lambda',
407
+ templatePath: 'plugins/specweave/templates/iac/aws-lambda',
366
408
  variables: {
367
409
  projectName: 'my-api',
368
410
  functionName: 'my-handler',
@@ -406,7 +448,7 @@ const platformTemplateMap = {
406
448
  'supabase': 'supabase'
407
449
  };
408
450
 
409
- const templateDir = `plugins/specweave/iac-templates/${platformTemplateMap[platformId]}`;
451
+ const templateDir = `plugins/specweave/templates/iac/${platformTemplateMap[platformId]}`;
410
452
  ```
411
453
 
412
454
  **Required Files**:
@@ -694,7 +736,7 @@ for (const env of environments) {
694
736
  **Solution**:
695
737
  ```bash
696
738
  # Verify template exists
697
- ls plugins/specweave/iac-templates/aws-lambda/
739
+ ls plugins/specweave/templates/iac/aws-lambda/
698
740
 
699
741
  # Check platform ID mapping
700
742
  # Valid IDs: aws-lambda, azure-functions, gcp-cloud-functions, firebase, supabase
@@ -10,6 +10,50 @@ fallback_behavior: strict
10
10
 
11
11
  # PM Agent - Product Manager AI Assistant
12
12
 
13
+ ## ⛔ CRITICAL: Increment Folder Structure (MANDATORY)
14
+
15
+ **ALL files created by this agent MUST follow this structure**:
16
+
17
+ ### Allowed Files in Increment Root
18
+ **ONLY these 3 files are allowed** in `.specweave/increments/####-name/`:
19
+ 1. ✅ `spec.md` - Specification
20
+ 2. ✅ `plan.md` - Implementation plan
21
+ 3. ✅ `tasks.md` - Tasks with embedded tests
22
+
23
+ ### ALL Other Files Go in Subfolders
24
+
25
+ **MANDATORY subfolder organization**:
26
+ ```
27
+ .specweave/increments/####-name/
28
+ ├── spec.md # ✅ ONLY core file 1
29
+ ├── plan.md # ✅ ONLY core file 2
30
+ ├── tasks.md # ✅ ONLY core file 3
31
+ ├── reports/ # ✅ ALL reports here
32
+ │ ├── PM-VALIDATION-REPORT.md
33
+ │ ├── COMPLETION-SUMMARY.md
34
+ │ ├── SESSION-NOTES.md
35
+ │ └── ANALYSIS-*.md
36
+ ├── scripts/ # ✅ ALL scripts here
37
+ │ └── helper-*.sh
38
+ └── logs/ # ✅ ALL logs here
39
+ └── execution.log
40
+ ```
41
+
42
+ **When writing ANY file**:
43
+ - ❌ **NEVER** write `.md` files to increment root (except spec.md, plan.md, tasks.md)
44
+ - ✅ **ALWAYS** write reports to `reports/` subfolder
45
+ - ✅ **ALWAYS** write scripts to `scripts/` subfolder
46
+ - ✅ **ALWAYS** write logs to `logs/` subfolder
47
+
48
+ **Example correct paths**:
49
+ - ✅ `.specweave/increments/0001-auth/reports/PM-VALIDATION-REPORT.md`
50
+ - ✅ `.specweave/increments/0001-auth/reports/COMPLETION-SUMMARY.md`
51
+ - ❌ `.specweave/increments/0001-auth/PM-VALIDATION-REPORT.md` (WRONG!)
52
+
53
+ **This is NON-NEGOTIABLE**. Violations will be flagged and files will be moved by maintainers.
54
+
55
+ ---
56
+
13
57
  ## 📚 Required Reading (LOAD FIRST)
14
58
 
15
59
  **CRITICAL**: Before planning features or increments, read these guides:
@@ -1164,10 +1208,23 @@ When creating metadata.json, extract values from spec.md frontmatter:
1164
1208
  - `priority`: Look for `priority: P1|P2|P3`
1165
1209
  - `testMode`: Look for `test_mode: TDD|BDD|Standard` (default: "TDD")
1166
1210
  - `coverageTarget`: Look for `coverage_target: 80|85|90|95|100` (default: 95)
1167
- - `epic`: Look for `epic: FS-YY-MM-DD` (optional)
1211
+ - `epic`: **CRITICAL - Format depends on increment type**:
1212
+ - **Greenfield** (SpecWeave-native): Leave EMPTY (auto-generated as `FS-{increment-number}` during sync)
1213
+ - **Brownfield** (imported from Jira/GitHub/ADO): Use `epic: FS-YY-MM-DD-name` + add `imported: true`
1168
1214
 
1169
1215
  **DO NOT hardcode values** - always extract from spec.md when possible!
1170
1216
 
1217
+ **⛔ CRITICAL: Epic Field Rules**
1218
+
1219
+ When creating spec.md frontmatter:
1220
+ - **NEW increments** (greenfield): DO NOT add `epic:` field (leave it empty for auto-generation)
1221
+ - **Imported work** (brownfield): Add `epic: FS-YY-MM-DD-name` AND `imported: true`
1222
+
1223
+ **Why this matters**:
1224
+ - Greenfield increments use `FS-{increment-number}` format (e.g., `FS-031`, `FS-043`)
1225
+ - Brownfield increments use `FS-YY-MM-DD-name` format (e.g., `FS-25-11-14-jira-epic`)
1226
+ - Mixing formats pollutes living docs and breaks feature tracking
1227
+
1171
1228
  ### Code Reference (TypeScript Pseudocode)
1172
1229
 
1173
1230
  This is what you're executing with Read/Write tools:
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-archive-features
2
+ name: specweave:archive-features
3
3
  description: Archive features and epics when all related increments are archived
4
4
  ---
5
5
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-archive-increments
2
+ name: specweave:archive-increments
3
3
  description: Archive completed increments to keep workspace clean
4
4
  ---
5
5
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: specweave:check-hooks
3
+ description: Comprehensive health check for hooks - detects import errors, runtime failures, performance issues, and provides auto-fix suggestions
4
+ ---
5
+
1
6
  # Check Hook Health
2
7
 
3
8
  **Command**: `/specweave:check-hooks`