specweave 0.21.3 → 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 (235) hide show
  1. package/CLAUDE.md +409 -6
  2. package/README.md +38 -8
  3. package/bin/specweave.js +5 -8
  4. package/dist/plugins/specweave-github/lib/CodeValidator.d.ts +101 -0
  5. package/dist/plugins/specweave-github/lib/CodeValidator.d.ts.map +1 -0
  6. package/dist/plugins/specweave-github/lib/CodeValidator.js +219 -0
  7. package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -0
  8. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +182 -0
  9. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -0
  10. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +603 -0
  11. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -0
  12. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +10 -0
  13. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  14. package/dist/plugins/specweave-github/lib/github-client-v2.js +26 -0
  15. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  16. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/task-sync.js +7 -0
  18. package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
  19. package/dist/plugins/specweave-github/lib/types.d.ts +34 -0
  20. package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
  21. package/dist/src/cli/commands/init.d.ts.map +1 -1
  22. package/dist/src/cli/commands/init.js +60 -5
  23. package/dist/src/cli/commands/init.js.map +1 -1
  24. package/dist/src/cli/commands/migrate-to-profiles.d.ts +1 -0
  25. package/dist/src/cli/commands/migrate-to-profiles.d.ts.map +1 -1
  26. package/dist/src/cli/commands/migrate-to-profiles.js +12 -1
  27. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
  28. package/dist/src/cli/commands/next-command.d.ts +52 -0
  29. package/dist/src/cli/commands/next-command.d.ts.map +1 -0
  30. package/dist/src/cli/commands/next-command.js +204 -0
  31. package/dist/src/cli/commands/next-command.js.map +1 -0
  32. package/dist/src/cli/commands/sync-specs.d.ts +16 -0
  33. package/dist/src/cli/commands/sync-specs.d.ts.map +1 -0
  34. package/dist/src/cli/commands/sync-specs.js +130 -0
  35. package/dist/src/cli/commands/sync-specs.js.map +1 -0
  36. package/dist/src/cli/count-tasks.d.ts +20 -0
  37. package/dist/src/cli/count-tasks.d.ts.map +1 -0
  38. package/dist/src/cli/count-tasks.js +50 -0
  39. package/dist/src/cli/count-tasks.js.map +1 -0
  40. package/dist/src/config/ConfigManager.d.ts.map +1 -1
  41. package/dist/src/config/ConfigManager.js +2 -1
  42. package/dist/src/config/ConfigManager.js.map +1 -1
  43. package/dist/src/config/types.d.ts +58 -58
  44. package/dist/src/core/cicd/state-manager.d.ts +8 -0
  45. package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
  46. package/dist/src/core/cicd/state-manager.js +60 -15
  47. package/dist/src/core/cicd/state-manager.js.map +1 -1
  48. package/dist/src/core/cost-tracker.d.ts.map +1 -1
  49. package/dist/src/core/cost-tracker.js +2 -1
  50. package/dist/src/core/cost-tracker.js.map +1 -1
  51. package/dist/src/core/iac/template-engine.d.ts.map +1 -1
  52. package/dist/src/core/iac/template-engine.js +28 -0
  53. package/dist/src/core/iac/template-engine.js.map +1 -1
  54. package/dist/src/core/iac/template-generator.d.ts +53 -0
  55. package/dist/src/core/iac/template-generator.d.ts.map +1 -0
  56. package/dist/src/core/iac/template-generator.js +125 -0
  57. package/dist/src/core/iac/template-generator.js.map +1 -0
  58. package/dist/src/core/increment/status-auto-transition.js +3 -3
  59. package/dist/src/core/increment/status-auto-transition.js.map +1 -1
  60. package/dist/src/core/living-docs/CodeValidator.js +1 -1
  61. package/dist/src/core/living-docs/CodeValidator.js.map +1 -1
  62. package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -1
  63. package/dist/src/core/living-docs/CompletionPropagator.js +4 -3
  64. package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -1
  65. package/dist/src/core/living-docs/SpecDistributor.d.ts +5 -0
  66. package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -1
  67. package/dist/src/core/living-docs/SpecDistributor.js +12 -0
  68. package/dist/src/core/living-docs/SpecDistributor.js.map +1 -1
  69. package/dist/src/core/living-docs/content-distributor.d.ts.map +1 -1
  70. package/dist/src/core/living-docs/content-distributor.js +11 -1
  71. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  72. package/dist/src/core/living-docs/living-docs-sync.d.ts +166 -0
  73. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -0
  74. package/dist/src/core/living-docs/living-docs-sync.js +726 -0
  75. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -0
  76. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  77. package/dist/src/core/living-docs/project-detector.js +38 -0
  78. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  79. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +7 -3
  80. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -1
  81. package/dist/src/core/living-docs/task-project-specific-generator.js +40 -24
  82. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
  83. package/dist/src/core/plugin-loader.d.ts +7 -0
  84. package/dist/src/core/plugin-loader.d.ts.map +1 -1
  85. package/dist/src/core/plugin-loader.js +18 -1
  86. package/dist/src/core/plugin-loader.js.map +1 -1
  87. package/dist/src/core/serverless/platform-data-loader.d.ts +8 -0
  88. package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -1
  89. package/dist/src/core/serverless/platform-data-loader.js +14 -0
  90. package/dist/src/core/serverless/platform-data-loader.js.map +1 -1
  91. package/dist/src/core/serverless/types.d.ts +1 -1
  92. package/dist/src/core/serverless/types.d.ts.map +1 -1
  93. package/dist/src/core/status-line/status-line-manager.d.ts +6 -2
  94. package/dist/src/core/status-line/status-line-manager.d.ts.map +1 -1
  95. package/dist/src/core/status-line/status-line-manager.js +11 -5
  96. package/dist/src/core/status-line/status-line-manager.js.map +1 -1
  97. package/dist/src/core/status-line/task-counter.d.ts +69 -0
  98. package/dist/src/core/status-line/task-counter.d.ts.map +1 -0
  99. package/dist/src/core/status-line/task-counter.js +107 -0
  100. package/dist/src/core/status-line/task-counter.js.map +1 -0
  101. package/dist/src/core/types/config.d.ts +23 -0
  102. package/dist/src/core/types/config.d.ts.map +1 -1
  103. package/dist/src/core/types/config.js +10 -0
  104. package/dist/src/core/types/config.js.map +1 -1
  105. package/dist/src/core/workflow/autonomous-executor.d.ts +111 -0
  106. package/dist/src/core/workflow/autonomous-executor.d.ts.map +1 -0
  107. package/dist/src/core/workflow/autonomous-executor.js +275 -0
  108. package/dist/src/core/workflow/autonomous-executor.js.map +1 -0
  109. package/dist/src/core/workflow/backlog-scanner.d.ts +94 -0
  110. package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -0
  111. package/dist/src/core/workflow/backlog-scanner.js +170 -0
  112. package/dist/src/core/workflow/backlog-scanner.js.map +1 -0
  113. package/dist/src/core/workflow/command-invoker.d.ts +86 -0
  114. package/dist/src/core/workflow/command-invoker.d.ts.map +1 -0
  115. package/dist/src/core/workflow/command-invoker.js +131 -0
  116. package/dist/src/core/workflow/command-invoker.js.map +1 -0
  117. package/dist/src/core/workflow/cost-estimator.d.ts +120 -0
  118. package/dist/src/core/workflow/cost-estimator.d.ts.map +1 -0
  119. package/dist/src/core/workflow/cost-estimator.js +222 -0
  120. package/dist/src/core/workflow/cost-estimator.js.map +1 -0
  121. package/dist/src/core/workflow/index.d.ts +20 -0
  122. package/dist/src/core/workflow/index.d.ts.map +1 -0
  123. package/dist/src/core/workflow/index.js +24 -0
  124. package/dist/src/core/workflow/index.js.map +1 -0
  125. package/dist/src/core/workflow/state-manager.d.ts +107 -0
  126. package/dist/src/core/workflow/state-manager.d.ts.map +1 -0
  127. package/dist/src/core/workflow/state-manager.js +126 -0
  128. package/dist/src/core/workflow/state-manager.js.map +1 -0
  129. package/dist/src/core/workflow/workflow-orchestrator.d.ts +93 -0
  130. package/dist/src/core/workflow/workflow-orchestrator.d.ts.map +1 -0
  131. package/dist/src/core/workflow/workflow-orchestrator.js +195 -0
  132. package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -0
  133. package/dist/src/init/ArchitecturePresenter.d.ts +47 -0
  134. package/dist/src/init/ArchitecturePresenter.d.ts.map +1 -0
  135. package/dist/src/init/ArchitecturePresenter.js +180 -0
  136. package/dist/src/init/ArchitecturePresenter.js.map +1 -0
  137. package/dist/src/init/InitFlow.d.ts.map +1 -1
  138. package/dist/src/init/InitFlow.js +30 -1
  139. package/dist/src/init/InitFlow.js.map +1 -1
  140. package/dist/src/init/architecture/CostEstimator.d.ts +52 -0
  141. package/dist/src/init/architecture/CostEstimator.d.ts.map +1 -0
  142. package/dist/src/init/architecture/CostEstimator.js +107 -0
  143. package/dist/src/init/architecture/CostEstimator.js.map +1 -0
  144. package/dist/src/init/architecture/InfrastructureMapper.d.ts +41 -0
  145. package/dist/src/init/architecture/InfrastructureMapper.d.ts.map +1 -0
  146. package/dist/src/init/architecture/InfrastructureMapper.js +140 -0
  147. package/dist/src/init/architecture/InfrastructureMapper.js.map +1 -0
  148. package/dist/src/init/architecture/ProjectGenerator.d.ts +44 -0
  149. package/dist/src/init/architecture/ProjectGenerator.d.ts.map +1 -0
  150. package/dist/src/init/architecture/ProjectGenerator.js +216 -0
  151. package/dist/src/init/architecture/ProjectGenerator.js.map +1 -0
  152. package/dist/src/init/architecture/types.d.ts +10 -10
  153. package/dist/src/init/research/src/config/types.d.ts +8 -8
  154. package/dist/src/metrics/dora-calculator.js +2 -2
  155. package/dist/src/metrics/dora-calculator.js.map +1 -1
  156. package/dist/src/utils/pricing-constants.d.ts +5 -2
  157. package/dist/src/utils/pricing-constants.d.ts.map +1 -1
  158. package/dist/src/utils/pricing-constants.js +3 -2
  159. package/dist/src/utils/pricing-constants.js.map +1 -1
  160. package/package.json +9 -8
  161. package/plugins/specweave/agents/infrastructure/AGENT.md +88 -46
  162. package/plugins/specweave/agents/pm/AGENT.md +58 -1
  163. package/plugins/specweave/commands/specweave-archive-features.md +1 -1
  164. package/plugins/specweave/commands/specweave-archive-increments.md +1 -1
  165. package/plugins/specweave/commands/specweave-check-hooks.md +5 -0
  166. package/plugins/specweave/commands/specweave-done.md +12 -0
  167. package/plugins/specweave/commands/specweave-plan.md +1 -1
  168. package/plugins/specweave/commands/specweave-progress.md +108 -379
  169. package/plugins/specweave/commands/specweave-reopen.md +1 -1
  170. package/plugins/specweave/commands/specweave-restore-feature.md +1 -1
  171. package/plugins/specweave/commands/specweave-sync-specs.md +20 -48
  172. package/plugins/specweave/hooks/lib/update-status-line.sh +44 -35
  173. package/plugins/specweave/hooks/lib/validate-spec-status.sh +163 -0
  174. package/plugins/specweave/hooks/user-prompt-submit.sh +17 -35
  175. package/plugins/specweave/lib/hooks/update-tasks-md.js +52 -9
  176. package/plugins/specweave/lib/hooks/update-tasks-md.ts +77 -16
  177. package/plugins/specweave/templates/iac/aws-lambda/defaults.json +24 -0
  178. package/plugins/specweave/templates/iac/aws-lambda/templates/README.md.hbs +260 -0
  179. package/plugins/specweave/templates/iac/aws-lambda/templates/environments/dev.tfvars.hbs +34 -0
  180. package/plugins/specweave/templates/iac/aws-lambda/templates/environments/prod.tfvars.hbs +37 -0
  181. package/plugins/specweave/templates/iac/aws-lambda/templates/environments/staging.tfvars.hbs +35 -0
  182. package/plugins/specweave/templates/iac/aws-lambda/templates/outputs.tf.hbs +77 -0
  183. package/plugins/specweave/templates/iac/aws-lambda/templates/providers.tf.hbs +36 -0
  184. package/plugins/specweave/templates/iac/aws-lambda/templates/variables.tf.hbs +115 -0
  185. package/plugins/specweave/templates/iac/azure-functions/defaults.json +25 -0
  186. package/plugins/specweave/templates/iac/azure-functions/templates/README.md.hbs +268 -0
  187. package/plugins/specweave/templates/iac/azure-functions/templates/environments/dev.tfvars.hbs +34 -0
  188. package/plugins/specweave/templates/iac/azure-functions/templates/environments/prod.tfvars.hbs +46 -0
  189. package/plugins/specweave/templates/iac/azure-functions/templates/environments/staging.tfvars.hbs +34 -0
  190. package/plugins/specweave/templates/iac/azure-functions/templates/main.tf.hbs +225 -0
  191. package/plugins/specweave/templates/iac/azure-functions/templates/outputs.tf.hbs +89 -0
  192. package/plugins/specweave/templates/iac/azure-functions/templates/provider.tf.hbs +27 -0
  193. package/plugins/specweave/templates/iac/azure-functions/templates/providers.tf.hbs +35 -0
  194. package/plugins/specweave/templates/iac/azure-functions/templates/variables.tf.hbs +124 -0
  195. package/plugins/specweave/templates/iac/firebase/defaults.json +29 -0
  196. package/plugins/specweave/templates/iac/firebase/templates/README.md.hbs +35 -0
  197. package/plugins/specweave/templates/iac/firebase/templates/environments/dev.tfvars.hbs +7 -0
  198. package/plugins/specweave/templates/iac/firebase/templates/environments/prod.tfvars.hbs +7 -0
  199. package/plugins/specweave/templates/iac/firebase/templates/environments/staging.tfvars.hbs +7 -0
  200. package/plugins/specweave/templates/iac/firebase/templates/main.tf.hbs +90 -0
  201. package/plugins/specweave/templates/iac/firebase/templates/outputs.tf.hbs +15 -0
  202. package/plugins/specweave/templates/iac/firebase/templates/providers.tf.hbs +23 -0
  203. package/plugins/specweave/templates/iac/firebase/templates/variables.tf.hbs +42 -0
  204. package/plugins/specweave/templates/iac/gcp-cloud-functions/defaults.json +26 -0
  205. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/README.md.hbs +299 -0
  206. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/dev.tfvars.hbs +36 -0
  207. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/prod.tfvars.hbs +48 -0
  208. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/staging.tfvars.hbs +41 -0
  209. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/main.tf.hbs +192 -0
  210. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/outputs.tf.hbs +66 -0
  211. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/providers.tf.hbs +25 -0
  212. package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/variables.tf.hbs +119 -0
  213. package/plugins/specweave/templates/iac/supabase/defaults.json +15 -0
  214. package/plugins/specweave/templates/iac/supabase/templates/README.md.hbs +46 -0
  215. package/plugins/specweave/templates/iac/supabase/templates/main.tf.hbs +50 -0
  216. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  217. package/plugins/specweave-github/agents/github-manager/AGENT.md +39 -7
  218. package/plugins/specweave-github/commands/specweave-github-create-issue.md +5 -5
  219. package/plugins/specweave-github/lib/CodeValidator.js +195 -0
  220. package/plugins/specweave-github/lib/CodeValidator.ts +284 -0
  221. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +545 -0
  222. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +809 -0
  223. package/plugins/specweave-github/lib/github-client-v2.js +29 -0
  224. package/plugins/specweave-github/lib/github-client-v2.ts +30 -0
  225. package/plugins/specweave-github/lib/task-sync.js +4 -0
  226. package/plugins/specweave-github/lib/task-sync.ts +7 -0
  227. package/plugins/specweave-github/lib/types.ts +38 -0
  228. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  229. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +3222 -0
  230. package/src/templates/AGENTS.md.template +22 -1
  231. package/src/templates/CLAUDE.md.template +31 -0
  232. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +0 -116
  233. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +0 -1
  234. package/dist/src/core/living-docs/ThreeLayerSyncManager.js +0 -356
  235. package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +0 -1
@@ -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`
@@ -55,6 +55,18 @@ You are acting as the Product Manager to validate increment completion before cl
55
55
 
56
56
  **šŸ”„ CRITICAL: PM agent MUST validate all 3 gates before allowing closure!**
57
57
 
58
+ **ā›” CRITICAL: PM Validation Report File Location**
59
+
60
+ When the PM agent writes the validation report, it MUST go in the `reports/` subfolder:
61
+ - āœ… **CORRECT**: `.specweave/increments/####-name/reports/PM-VALIDATION-REPORT.md`
62
+ - āŒ **WRONG**: `.specweave/increments/####-name/PM-VALIDATION-REPORT.md`
63
+
64
+ **Folder structure rules**:
65
+ - ONLY spec.md, plan.md, tasks.md allowed in increment root
66
+ - ALL reports MUST go in `reports/` subfolder
67
+ - ALL scripts MUST go in `scripts/` subfolder
68
+ - ALL logs MUST go in `logs/` subfolder
69
+
58
70
  Invoke PM agent with validation task:
59
71
 
60
72
  ```
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-plan
2
+ name: specweave:plan
3
3
  description: Generate plan.md and tasks.md for PLANNING increment using Architect Agent
4
4
  ---
5
5
 
@@ -1,407 +1,136 @@
1
1
  ---
2
2
  name: specweave:progress
3
- description: Show progress for ALL active increments (up to 2), task completion %, PM gates, and next actions
3
+ description: Show progress for all active increments with task completion status
4
4
  ---
5
5
 
6
6
  # Progress Tracking
7
7
 
8
- **Quick Status Check**: See exactly where you are in ALL your active increments.
9
-
10
- **NEW**: Now shows **ALL active increments** (max 2) with full progress for each!
11
-
12
- Shows:
13
- - **ALL active increment statuses** (not just one!)
14
- - Task completion percentage (per increment)
15
- - PM gate preview (tasks, tests, docs)
16
- - Next action to take
17
- - Time tracking
18
- - WIP limit warnings (if >2 active)
19
-
20
- ---
21
-
22
- ## Quick Start
23
-
24
- ```bash
25
- # Check progress for all active increments (recommended)
26
- specweave progress
27
-
28
- # Or use the full command name
29
- specweave status --verbose
30
-
31
- # Filter by increment type
32
- specweave progress --type feature
33
- ```
34
-
35
- **Note**: `progress` is an alias for `status --verbose` with automatic verbose mode enabled.
36
-
37
- ---
8
+ Simple, fast progress check for all active increments.
38
9
 
39
10
  ## Usage
40
11
 
41
12
  ```bash
42
- # Check current progress
43
13
  /specweave:progress
44
-
45
- # Show progress for specific increment
46
- /specweave:progress 0001
47
- ```
48
-
49
- ---
50
-
51
- ## What It Shows
52
-
53
- ### 1. Active Increment Info
54
- - Increment ID and name
55
- - Current status (planned, in-progress, completed)
56
- - Time started and last activity
57
-
58
- ### 2. Task Progress (with %)
59
- - Visual task list with completion indicators
60
- - Percentage complete (P1 tasks weighted higher)
61
- - Next incomplete task highlighted
62
- - Stuck/blocked task warnings
63
-
64
- ### 3. PM Gates Preview
65
- - **Gate 1**: Tasks completed (P1 required)
66
- - **Gate 2**: Tests passing (>80% coverage)
67
- - **Gate 3**: Documentation updated
68
-
69
- ### 4. Next Action Guidance
70
- - Suggests exact command to run next
71
- - Warns about WIP limit violations
72
- - Alerts for long-inactive increments
73
-
74
- ---
75
-
76
- ## Example Output
77
-
78
- ### Normal Progress
79
-
80
- ```
81
- šŸ“Š Current Progress
82
-
83
- Active Increment: 0001-user-authentication
84
- Status: in-progress (started 2 hours ago)
85
-
86
- Task Progress: 3/12 completed (25%)
87
- ā”œā”€ [āœ…] T001: Setup auth module (P1) - 5 min ago
88
- ā”œā”€ [āœ…] T002: Create user model (P1) - 10 min ago
89
- ā”œā”€ [āœ…] T003: Implement JWT tokens (P1) - 15 min ago
90
- ā”œā”€ [ā³] T004: Add password hashing (P1) ← NEXT
91
- ā”œā”€ [ ] T005: Create login endpoint (P1)
92
- ā”œā”€ [ ] T006: Add logout endpoint (P2)
93
- └─ 6 more tasks...
94
-
95
- PM Gates Preview:
96
- ā”œā”€ Gate 1 (Tasks): 3/8 P1 tasks done (38%) ā³
97
- ā”œā”€ Gate 2 (Tests): 2/5 passing (40%) ā³
98
- └─ Gate 3 (Docs): CLAUDE.md āœ…, README.md ā³
99
-
100
- Last Activity: 5 minutes ago
101
- Next Action: Run `/do 0001` to resume at T004
102
-
103
- šŸ’” Tip: `/do` auto-resumes from last incomplete task!
104
- ```
105
-
106
- ### No Active Work
107
-
108
- ```
109
- šŸ“Š Current Progress
110
-
111
- No active increment found.
112
-
113
- Recent Increments:
114
- ā”œā”€ 0003-payment-flow (completed) - 1 day ago
115
- ā”œā”€ 0002-user-profile (completed) - 2 days ago
116
- └─ 0001-auth (closed) - 3 days ago
117
-
118
- Next Action: Run `/specweave inc "feature description"` to start new work
119
-
120
- šŸ’” Tip: `/inc` is your starting point for all new features
121
- ```
122
-
123
- ### Multiple In-Progress (WIP Limit Warning)
124
-
125
- ```
126
- šŸ“Š Current Progress
127
-
128
- āš ļø Warning: 2 increments in-progress (exceeds recommended WIP limit: 1)
129
-
130
- Active Increments:
131
- 1. 0002-payment-flow (in-progress)
132
- └─ Task Progress: 5/10 completed (50%)
133
-
134
- 2. 0003-notifications (in-progress)
135
- └─ Task Progress: 2/8 completed (25%)
136
-
137
- Recommendation: Focus on completing 0002 before starting new work.
138
-
139
- Next Action: Run `/do 0002` to continue payment-flow
140
- ```
141
-
142
- ### Stuck/Inactive Increment
143
-
144
- ```
145
- šŸ“Š Current Progress
146
-
147
- Active Increment: 0001-user-authentication
148
- Status: in-progress (started 2 days ago)
149
-
150
- āš ļø Warning: Last activity was 6 hours ago
151
- └─ Current task T005 may be stuck or blocked
152
-
153
- Task Progress: 4/12 completed (33%)
154
- ā”œā”€ [āœ…] T001: Setup auth module (P1)
155
- ā”œā”€ [āœ…] T002: Create user model (P1)
156
- ā”œā”€ [āœ…] T003: Implement JWT tokens (P1)
157
- ā”œā”€ [āœ…] T004: Add password hashing (P1)
158
- ā”œā”€ [šŸ”„] T005: Create login endpoint (P1) ← STUCK? (6 hours)
159
- ā”œā”€ [ ] T006: Add logout endpoint (P2)
160
- └─ 6 more tasks...
161
-
162
- Next Action:
163
- 1. Run `/do 0001` to retry T005
164
- 2. Or manually review T005 for blockers
165
- 3. Or skip T005 and defer to next increment
166
-
167
- šŸ’” Tip: Long-running tasks may need breaking down
168
14
  ```
169
15
 
170
- ---
171
-
172
16
  ## Implementation
173
17
 
174
- **How `/progress` works** (UPGRADED for multi-active support):
175
-
176
- ### Step 1: Find ALL Active Increments (FAST!)
177
-
178
- ```typescript
179
- // NEW: Use ActiveIncrementManager cache (10x faster!)
180
- import { MetadataManager } from './src/core/increment/metadata-manager.js';
181
-
182
- // Get ALL active increments (from cache, not scan!)
183
- const activeIncrements = MetadataManager.getActive();
184
-
185
- // Performance:
186
- // - OLD: Scan 31 metadata files (~50ms)
187
- // - NEW: Read 1 cache + 1-2 metadata files (~5ms) āœ…
188
- ```
189
-
190
- ### Step 2: Parse Tasks and Calculate %
191
-
192
- ```bash
193
- # Read tasks.md
194
- # Count completed vs total
195
- # Weight P1 tasks higher (2x), P2 (1.5x), P3 (1x)
196
- # Calculate percentage
197
-
198
- Example:
199
- - P1 tasks: 3/8 complete = 3*2 / 8*2 = 6/16 (37.5%)
200
- - P2 tasks: 2/3 complete = 2*1.5 / 3*1.5 = 3/4.5 (66%)
201
- - P3 tasks: 1/1 complete = 1*1 / 1*1 = 1/1 (100%)
202
-
203
- Overall: (6 + 3 + 1) / (16 + 4.5 + 1) = 10/21.5 = 46.5%
204
- ```
205
-
206
- ### Step 3: Check PM Gates
207
-
208
18
  ```bash
209
- # Gate 1: Tasks
210
- # - Count P1 tasks completed
211
- # - Status: āœ… all done, ā³ in progress, āŒ blocked
212
-
213
- # Gate 2: Tests
214
- # - Run test suite (npm test or equivalent)
215
- # - Check coverage report
216
- # - Status: āœ… >80%, ā³ 50-80%, āŒ <50%
217
-
218
- # Gate 3: Docs
219
- # - Check if CLAUDE.md updated recently
220
- # - Check if README.md mentions new feature
221
- # - Status: āœ… updated, ā³ partial, āŒ outdated
19
+ #!/bin/bash
20
+
21
+ echo ""
22
+ echo "šŸ“Š Increment Progress"
23
+ echo "================================"
24
+ echo ""
25
+
26
+ # Counters
27
+ active_count=0
28
+ other_count=0
29
+
30
+ # Scan all increments
31
+ for dir in .specweave/increments/*/; do
32
+ [ ! -d "$dir" ] && continue
33
+
34
+ increment=$(basename "$dir")
35
+ metadata="$dir/metadata.json"
36
+
37
+ # Skip if no metadata
38
+ [ ! -f "$metadata" ] && continue
39
+
40
+ # Get status
41
+ inc_status=$(jq -r '.status' "$metadata" 2>/dev/null)
42
+
43
+ # Skip completed/archived
44
+ [ "$inc_status" = "completed" ] && continue
45
+ [ "$inc_status" = "archived" ] && continue
46
+
47
+ # Count for summary
48
+ if [ "$inc_status" = "in-progress" ]; then
49
+ active_count=$((active_count + 1))
50
+ else
51
+ other_count=$((other_count + 1))
52
+ fi
53
+
54
+ # Get task stats from tasks.md
55
+ tasks_file="$dir/tasks.md"
56
+ if [ -f "$tasks_file" ]; then
57
+ # Count tasks (headers with T-NNN format - both ### and ####)
58
+ total=$(grep -cE '^#{3,4}\s*T-[0-9]' "$tasks_file" 2>/dev/null | tr -d '\n' || echo "0")
59
+ # Count completed (various formats)
60
+ completed=$(grep -cE '(āœ… COMPLETE|\[COMPLETED\]|\[x\] Completed)' "$tasks_file" 2>/dev/null | tr -d '\n' || echo "0")
61
+
62
+ # Ensure we have valid numbers (fallback to 0 if empty)
63
+ total=${total:-0}
64
+ completed=${completed:-0}
65
+
66
+ if [ "$total" -gt 0 ] 2>/dev/null; then
67
+ percent=$((completed * 100 / total))
68
+ else
69
+ percent=0
70
+ fi
71
+ else
72
+ total=0
73
+ completed=0
74
+ percent=0
75
+ fi
76
+
77
+ # Display based on status
78
+ if [ "$inc_status" = "in-progress" ]; then
79
+ echo "🟢 ACTIVE: $increment"
80
+ echo " Status: $inc_status"
81
+ echo " Tasks: $completed/$total completed ($percent%)"
82
+ echo " Next: /specweave:do $increment"
83
+ echo ""
84
+ else
85
+ echo "āøļø $inc_status: $increment"
86
+ echo " Tasks: $completed/$total ($percent%)"
87
+ echo ""
88
+ fi
89
+ done
90
+
91
+ echo "================================"
92
+ echo "Summary:"
93
+ echo " Active increments: $active_count"
94
+ echo " Other non-completed: $other_count"
95
+
96
+ if [ "$active_count" -eq 0 ]; then
97
+ echo ""
98
+ echo "šŸ’” No active work. Run /specweave:increment to start new work"
99
+ elif [ "$active_count" -gt 0 ]; then
100
+ echo ""
101
+ echo "šŸ’” Continue with /specweave:do"
102
+ fi
103
+
104
+ echo ""
222
105
  ```
223
106
 
224
- ### Step 4: Display ALL Active Increments
225
-
226
- ```typescript
227
- // NEW: Display progress for EACH active increment
228
- for (const increment of activeIncrements) {
229
- console.log(`\nšŸ“Š ${increment.id}`);
230
- console.log(`Status: ${increment.status}`);
231
- console.log(`Task Progress: ${completed}/${total} (${percent}%)`);
232
- console.log(`Next: /specweave:do ${increment.id}`);
233
- }
107
+ ## Example Output
234
108
 
235
- // Show WIP limit info
236
- if (activeIncrements.length === 0) {
237
- console.log('No active increments. Run /specweave:increment to start new work.');
238
- } else if (activeIncrements.length === 1) {
239
- console.log('āœ… 1 active increment (optimal focus)');
240
- } else if (activeIncrements.length === 2) {
241
- console.log('āœ… 2 active increments (at WIP limit, but OK)');
242
- } else if (activeIncrements.length > 2) {
243
- console.log('āš ļø >2 active increments (exceeds WIP limit!)');
244
- }
245
109
  ```
110
+ šŸ“Š Increment Progress
111
+ ================================
246
112
 
247
- ---
113
+ 🟢 ACTIVE: 0037-project-specific-tasks
114
+ Status: in-progress
115
+ Tasks: 72/85 completed (84%)
116
+ Next: /specweave:do 0037-project-specific-tasks
248
117
 
249
- ## When to Use `/specweave:progress`
118
+ āøļø planning: 0039-ultra-smart-next-command
119
+ Tasks: 0/45 (0%)
250
120
 
251
- Use `/specweave:progress` when you:
252
- - āœ… Come back after a break and need context
253
- - āœ… Want to see overall completion status
254
- - āœ… Need to know which task to work on next
255
- - āœ… Forgot which increment you're working on
256
- - āœ… Want to check if PM gates will pass
257
- - āœ… Suspect a task is stuck or blocked
258
- - āœ… Have multiple increments and need to prioritize
121
+ ================================
122
+ Summary:
123
+ Active increments: 1
124
+ Other non-completed: 1
259
125
 
260
- **Typical workflow**:
261
- ```bash
262
- # Morning: Check what you were working on
263
- /specweave:progress
264
-
265
- # Shows: "Active: 0002-payments, Task 5/10 (50%)"
266
- # Shows: "Next: /specweave:do 0002 to resume at T006"
267
-
268
- /specweave:do 0002
269
- # Auto-resumes from T006
126
+ šŸ’” Continue with /specweave:do
270
127
  ```
271
128
 
272
- ---
273
-
274
- ## Pro Tips
275
-
276
- 1. **Shows ALL active increments** - `/specweave:progress` displays up to 2 active increments with full progress
277
- 2. **10x faster** - Uses cache instead of scanning 31 metadata files (5ms vs 50ms)
278
- 3. **Smart resume** - `/specweave:do` picks up where you left off (no task ID needed)
279
- 4. **WIP limits** - 2 active increments allowed (feature + hotfix/bug)
280
- 5. **Completion %** - P1 tasks weighted higher (they're critical path)
281
- 6. **Time tracking** - Warns if tasks are stuck (>2 hours inactive)
282
-
283
- ---
284
-
285
- ## Related Commands
286
-
287
- - `/inc` - Start new increment (auto-closes previous if ready)
288
- - `/do` - Execute tasks (auto-resumes from next incomplete)
289
- - `/validate` - Run quality checks (optional)
290
- - `/done` - Explicitly close increment (optional if `/inc` auto-closes)
291
-
292
- ---
293
-
294
- **šŸ’” Remember**: `/progress` is your "where am I?" command. Use it anytime you need orientation!
295
-
296
- ---
297
-
298
- ## Executable Implementation
299
-
300
- ```typescript
301
- import { Task } from '@claude/types';
302
-
303
- const task = new Task('progress-check', 'Show progress for all active increments');
304
-
305
- task.run(async () => {
306
- const { MetadataManager } = await import('../../../dist/src/core/increment/metadata-manager.js');
307
- const fs = await import('fs-extra');
308
- const path = await import('path');
309
-
310
- // Step 1: Get ALL active increments (FAST via cache!)
311
- const activeIncrements = MetadataManager.getActive();
312
-
313
- // Step 2: Check if specific increment requested
314
- const requestedId = process.argv[2]?.replace(/^0+/, '').padStart(4, '0');
315
- const increments = requestedId
316
- ? activeIncrements.filter(inc => inc.id === requestedId)
317
- : activeIncrements;
318
-
319
- // Step 3: Display results
320
- console.log('\nšŸ“Š Current Progress\n');
321
-
322
- if (increments.length === 0) {
323
- if (requestedId) {
324
- console.log(`āŒ Increment ${requestedId} is not active`);
325
- } else {
326
- console.log('No active increments found.\n');
327
- console.log('Recent Increments:');
328
- const allIncrements = MetadataManager.getAll()
329
- .filter(m => m.status === 'completed' || m.status === 'closed')
330
- .sort((a, b) => new Date(b.lastActivity).getTime() - new Date(a.lastActivity).getTime())
331
- .slice(0, 3);
332
-
333
- allIncrements.forEach(inc => {
334
- const age = Math.floor((Date.now() - new Date(inc.lastActivity).getTime()) / (1000 * 60 * 60 * 24));
335
- console.log(`ā”œā”€ ${inc.id} (${inc.status}) - ${age} day${age === 1 ? '' : 's'} ago`);
336
- });
337
-
338
- console.log('\nNext Action: Run /specweave:increment "feature description" to start new work');
339
- }
340
- return;
341
- }
342
-
343
- // Step 4: Show progress for each active increment
344
- for (const increment of increments) {
345
- console.log(`šŸ“¦ Increment: ${increment.id}`);
346
- console.log(`Status: ${increment.status}`);
347
-
348
- const started = new Date(increment.created);
349
- const lastActivity = new Date(increment.lastActivity);
350
- const ageHours = Math.floor((Date.now() - started.getTime()) / (1000 * 60 * 60));
351
- const lastActivityHours = Math.floor((Date.now() - lastActivity.getTime()) / (1000 * 60 * 60));
352
-
353
- console.log(`Started: ${ageHours} hours ago`);
354
- console.log(`Last Activity: ${lastActivityHours} hours ago`);
355
-
356
- // Try to read tasks.md for progress
357
- const incrementPath = path.default.join(process.cwd(), '.specweave/increments', increment.id);
358
- const tasksPath = path.default.join(incrementPath, 'tasks.md');
359
-
360
- if (await fs.default.pathExists(tasksPath)) {
361
- const tasksContent = await fs.default.readFile(tasksPath, 'utf-8');
362
-
363
- // Count tasks
364
- const taskLines = tasksContent.split('\n').filter(line =>
365
- line.match(/^#+\s+(T-?\d+|Task-?\d+):/i)
366
- );
367
- const completedTasks = tasksContent.split('\n').filter(line =>
368
- line.includes('[āœ…]') || line.includes('[x]') || line.includes('[X]')
369
- );
370
-
371
- const total = taskLines.length;
372
- const completed = completedTasks.length;
373
- const percent = total > 0 ? Math.round((completed / total) * 100) : 0;
374
-
375
- console.log(`\nTask Progress: ${completed}/${total} completed (${percent}%)`);
376
-
377
- if (total > 0) {
378
- console.log('\nTasks:');
379
- taskLines.slice(0, 10).forEach(line => {
380
- const isComplete = line.includes('[āœ…]') || line.includes('[x]') || line.includes('[X]');
381
- const marker = isComplete ? 'āœ…' : 'ā³';
382
- const taskName = line.replace(/^#+\s+/, '').replace(/\s*\[.*?\]\s*/, '').trim();
383
- console.log(` ${marker} ${taskName}`);
384
- });
385
-
386
- if (taskLines.length > 10) {
387
- console.log(` ... and ${taskLines.length - 10} more tasks`);
388
- }
389
- }
390
- }
391
-
392
- console.log(`\nNext Action: Run /specweave:do ${increment.id} to continue work\n`);
393
- }
129
+ ## What It Shows
394
130
 
395
- // Step 5: Show WIP limit warnings
396
- if (activeIncrements.length > 2) {
397
- console.log('āš ļø Warning: More than 2 active increments (exceeds WIP limit)');
398
- console.log('šŸ’” Recommendation: Focus on completing one increment before starting new work\n');
399
- } else if (activeIncrements.length === 2) {
400
- console.log('āœ… 2 active increments (at WIP limit, but OK)\n');
401
- } else if (activeIncrements.length === 1) {
402
- console.log('āœ… 1 active increment (optimal focus)\n');
403
- }
404
- });
131
+ - **Active increments** (in-progress): Shown first with green indicator
132
+ - **Other non-completed**: planning, paused, blocked, etc.
133
+ - **Task completion**: X/Y completed (Z%)
134
+ - **Next action**: Which command to run
405
135
 
406
- export default task;
407
- ```
136
+ **Note**: Skips completed and archived increments.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-reopen
2
+ name: specweave:reopen
3
3
  description: |
4
4
  Reopen completed increments, tasks, or user stories when issues are discovered.
5
5
  Validates WIP limits, creates audit trail, and syncs to external tools.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: specweave-restore-feature
2
+ name: specweave:restore-feature
3
3
  description: Restore a feature or epic from archive back to active status
4
4
  ---
5
5