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,119 @@
1
+ # Input Variables for GCP Cloud Functions + Firestore
2
+ # Generated by SpecWeave Serverless Architecture Intelligence
3
+
4
+ variable "project_id" {
5
+ description = "GCP Project ID"
6
+ type = string
7
+ default = "{{projectId}}"
8
+ }
9
+
10
+ variable "region" {
11
+ description = "GCP region for all resources"
12
+ type = string
13
+ default = "{{region}}"
14
+ }
15
+
16
+ variable "function_name" {
17
+ description = "Cloud Function name"
18
+ type = string
19
+ default = "{{functionName}}"
20
+ }
21
+
22
+ variable "runtime" {
23
+ description = "Cloud Function runtime (nodejs20, python312, go121, etc.)"
24
+ type = string
25
+ default = "{{runtime}}"
26
+ }
27
+
28
+ variable "entry_point" {
29
+ description = "Function entry point (handler function name)"
30
+ type = string
31
+ default = "{{entryPoint}}"
32
+ }
33
+
34
+ variable "memory_mb" {
35
+ description = "Memory allocation in MB (128-32768)"
36
+ type = number
37
+ default = {{memoryMb}}
38
+ }
39
+
40
+ variable "timeout_seconds" {
41
+ description = "Function timeout in seconds (1-3600)"
42
+ type = number
43
+ default = {{timeoutSeconds}}
44
+ }
45
+
46
+ variable "min_instances" {
47
+ description = "Minimum number of instances (0 for auto-scale to zero)"
48
+ type = number
49
+ default = {{minInstances}}
50
+ }
51
+
52
+ variable "max_instances" {
53
+ description = "Maximum number of instances"
54
+ type = number
55
+ default = {{maxInstances}}
56
+ }
57
+
58
+ variable "environment" {
59
+ description = "Environment name (dev, staging, prod)"
60
+ type = string
61
+ default = "{{environment}}"
62
+ }
63
+
64
+ variable "database_id" {
65
+ description = "Firestore database ID"
66
+ type = string
67
+ default = "{{databaseId}}"
68
+ }
69
+
70
+ variable "collection_id" {
71
+ description = "Firestore collection ID"
72
+ type = string
73
+ default = "{{collectionId}}"
74
+ }
75
+
76
+ variable "service_account_id" {
77
+ description = "Service Account ID for Cloud Function"
78
+ type = string
79
+ default = "{{serviceAccountId}}"
80
+ }
81
+
82
+ variable "cors_origins" {
83
+ description = "List of allowed CORS origins"
84
+ type = list(string)
85
+ default = {{tfList corsOrigins}}
86
+ }
87
+
88
+ variable "project_name" {
89
+ description = "Project name for resource labeling"
90
+ type = string
91
+ default = "{{projectName}}"
92
+ }
93
+
94
+ variable "bucket_name" {
95
+ description = "Storage bucket name for function source code"
96
+ type = string
97
+ default = "{{bucketName}}"
98
+ }
99
+
100
+ variable "bucket_location" {
101
+ description = "Storage bucket location (US, EU, ASIA, or region)"
102
+ type = string
103
+ default = "{{bucketLocation}}"
104
+ }
105
+
106
+ {{#if enableConcurrency}}
107
+ variable "max_concurrent_requests" {
108
+ description = "Maximum concurrent requests per instance"
109
+ type = number
110
+ default = {{maxConcurrentRequests}}
111
+ }
112
+ {{/if}}
113
+
114
+ {{#if enableVpc}}
115
+ variable "vpc_network" {
116
+ description = "VPC network name for private networking"
117
+ type = string
118
+ }
119
+ {{/if}}
@@ -0,0 +1,15 @@
1
+ {
2
+ "projectName": "my-supabase-project",
3
+ "orgId": "your-org-id",
4
+ "region": "us-east-1",
5
+ "databasePassword": "changeme123",
6
+ "planType": "free",
7
+ "environment": "dev",
8
+ "enableAuth": true,
9
+ "enableStorage": true,
10
+ "enableRealtime": true,
11
+ "enableEdgeFunctions": true,
12
+ "storageBuckets": ["avatars", "documents"],
13
+ "authProviders": ["email"],
14
+ "postgresVersion": "15"
15
+ }
@@ -0,0 +1,46 @@
1
+ # Supabase (PostgreSQL + Auth + Storage + Edge Functions) Configuration
2
+
3
+ **Generated by SpecWeave Serverless Architecture Intelligence**
4
+
5
+ Supabase provides complete backend-as-a-service:
6
+ - PostgreSQL database (Postgres {{postgresVersion}})
7
+ - Built-in Auth ({{authProviders}})
8
+ - Object Storage
9
+ - Edge Functions (Deno runtime)
10
+ - Realtime subscriptions
11
+
12
+ ## Prerequisites
13
+
14
+ 1. Install Supabase CLI: `npm install -g supabase`
15
+ 2. Login: `supabase login`
16
+ 3. Get Org ID: `supabase orgs list`
17
+
18
+ ## Deployment
19
+
20
+ ```bash
21
+ # Initialize Supabase
22
+ supabase init
23
+
24
+ # Link to project
25
+ supabase link --project-ref {{projectName}}
26
+
27
+ # Deploy database migrations
28
+ supabase db push
29
+
30
+ # Deploy edge functions
31
+ supabase functions deploy
32
+ ```
33
+
34
+ ## Cost: $0/month (Free Tier)
35
+
36
+ Supabase free tier includes:
37
+ - 500 MB database storage
38
+ - 1 GB file storage
39
+ - 2 GB bandwidth
40
+ - 50,000 monthly active users
41
+ - 500,000 Edge Function invocations
42
+
43
+ ## Support
44
+
45
+ - Supabase Docs: https://supabase.com/docs
46
+ - SpecWeave: https://spec-weave.com
@@ -0,0 +1,50 @@
1
+ # Supabase (Database + Auth + Storage + Edge Functions) Configuration
2
+ # Generated by SpecWeave Serverless Architecture Intelligence
3
+ #
4
+ # Note: Supabase doesn't have official Terraform provider yet.
5
+ # This uses Supabase CLI with null_resource provisioners.
6
+ # For production, use Supabase Management API or wait for official provider.
7
+
8
+ # Supabase Project (using CLI)
9
+ resource "null_resource" "supabase_project" {
10
+ provisioner "local-exec" {
11
+ command = <<-EOT
12
+ supabase projects create {{projectName}} \
13
+ --org-id {{orgId}} \
14
+ --region {{region}} \
15
+ --plan {{planType}} \
16
+ --db-password '{{databasePassword}}'
17
+ EOT
18
+ }
19
+
20
+ provisioner "local-exec" {
21
+ when = destroy
22
+ command = "supabase projects delete {{projectName}} --org-id {{orgId}}"
23
+ }
24
+ }
25
+
26
+ # Storage Buckets
27
+ {{#each storageBuckets}}
28
+ resource "null_resource" "storage_bucket_{{this}}" {
29
+ provisioner "local-exec" {
30
+ command = <<-EOT
31
+ supabase storage create {{this}} \
32
+ --project-ref {{projectName}} \
33
+ --public
34
+ EOT
35
+ }
36
+
37
+ depends_on = [null_resource.supabase_project]
38
+ }
39
+ {{/each}}
40
+
41
+ # Edge Functions
42
+ {{#if enableEdgeFunctions}}
43
+ resource "null_resource" "edge_functions" {
44
+ provisioner "local-exec" {
45
+ command = "supabase functions deploy --project-ref {{projectName}}"
46
+ }
47
+
48
+ depends_on = [null_resource.supabase_project]
49
+ }
50
+ {{/if}}
@@ -1,6 +1,38 @@
1
1
  # GitHub Manager Agent
2
2
 
3
- **Role**: GitHub integration specialist for SpecWeave increments
3
+ ⚠️ **DEPRECATED: Use Living Docs Sync Instead** ⚠️
4
+
5
+ **CRITICAL**: This agent creates GitHub issues using the OLD `[Increment XXXX]` format,
6
+ which violates SpecWeave's data flow architecture.
7
+
8
+ **CORRECT DATA FLOW**:
9
+ ```
10
+ Increment → Living Docs → GitHub
11
+ (source of truth)
12
+ ```
13
+
14
+ **USE INSTEAD**:
15
+ - `/specweave:sync-docs update` - Generate living docs from increments
16
+ - `/specweave-github:sync` - Sync living docs to GitHub Issues
17
+ - Result: Issues use correct `US-XXX` or `FS-YY-MM-DD` format
18
+
19
+ **WHY THIS IS DEPRECATED**:
20
+ 1. Creates issues with `[Increment XXXX]` format (rejected by validation)
21
+ 2. Bypasses living docs (source of truth)
22
+ 3. No traceability to User Stories/Feature Specs
23
+ 4. Cannot sync bidirectionally with living docs
24
+
25
+ **IF YOU USE THIS AGENT**: GitHub client will REJECT issue creation with error:
26
+ ```
27
+ ❌ DEPRECATED FORMAT DETECTED: "[Increment 0043] Title"
28
+ GitHub issues MUST use living docs format:
29
+ ✅ CORRECT: "US-XXX: Title" (User Story)
30
+ ✅ CORRECT: "FS-YY-MM-DD: Title" (Feature Spec)
31
+ ```
32
+
33
+ ---
34
+
35
+ **Role**: GitHub integration specialist for SpecWeave increments (DEPRECATED)
4
36
 
5
37
  **Expertise**: GitHub CLI, GitHub API, issue management, project boards, automation, webhooks, Actions
6
38
 
@@ -143,9 +175,9 @@ Invoke the github-manager agent (via Task tool) for:
143
175
  ### Issue Management
144
176
 
145
177
  ```bash
146
- # Create issue
178
+ # ❌ DEPRECATED - Create issue (OLD FORMAT - DO NOT USE)
147
179
  gh issue create \
148
- --title "[Increment 0004] Plugin Architecture" \
180
+ --title "[Increment 0004] Plugin Architecture" \ # ❌ DEPRECATED
149
181
  --body "$(cat issue-body.md)" \
150
182
  --label "specweave,increment,P1" \
151
183
  --milestone "v0.4.0"
@@ -384,10 +416,10 @@ When a new increment is created:
384
416
  - Parse `tasks.md` for task checklist
385
417
  - Format using issue template
386
418
 
387
- 4. **Create GitHub Issue**
419
+ 4. **Create GitHub Issue** (❌ DEPRECATED - DO NOT USE)
388
420
  ```bash
389
421
  gh issue create \
390
- --title "[Increment 0004] Plugin Architecture" \
422
+ --title "[Increment 0004] Plugin Architecture" \ # ❌ DEPRECATED
391
423
  --body "$(cat /tmp/issue-body.md)" \
392
424
  --label "specweave,increment,P1" \
393
425
  --milestone "v0.4.0"
@@ -680,9 +712,9 @@ GitHub Manager Agent:
680
712
  5. Updating metadata...
681
713
  ✓ Saved to .metadata.yaml
682
714
 
683
- ✅ GitHub Issue Created!
715
+ ✅ GitHub Issue Created! (❌ DEPRECATED FORMAT)
684
716
 
685
- Issue #130: [Increment 0004] Plugin Architecture
717
+ Issue #130: [Increment 0004] Plugin Architecture # ❌ DEPRECATED
686
718
  URL: https://github.com/owner/repo/issues/130
687
719
 
688
720
  You can now:
@@ -175,9 +175,9 @@ Creating issue...
175
175
  ✓ Milestone set: v0.4.0
176
176
  ✓ Metadata updated
177
177
 
178
- ✅ GitHub Issue Created!
178
+ ✅ GitHub Issue Created! (❌ DEPRECATED FORMAT)
179
179
 
180
- Issue #130: [Increment 0004] Plugin Architecture
180
+ Issue #130: [Increment 0004] Plugin Architecture # ❌ DEPRECATED
181
181
  URL: https://github.com/owner/repo/issues/130
182
182
 
183
183
  Auto-sync enabled: progress will update automatically after each task.
@@ -274,15 +274,15 @@ Preview issue body before creating:
274
274
 
275
275
  Output:
276
276
  ```
277
- 📄 Preview: Issue body for increment 0004
277
+ 📄 Preview: Issue body for increment 0004 (❌ DEPRECATED FORMAT)
278
278
 
279
- Title: [Increment 0004] Plugin Architecture
279
+ Title: [Increment 0004] Plugin Architecture # ❌ DEPRECATED
280
280
  Labels: specweave, increment, P1
281
281
  Milestone: v0.4.0
282
282
 
283
283
  Body:
284
284
  ---
285
- # [Increment 0004] Plugin Architecture
285
+ # [Increment 0004] Plugin Architecture # ❌ DEPRECATED
286
286
 
287
287
  **Status**: Planning
288
288
  **Priority**: P1
@@ -7,7 +7,7 @@
7
7
  * - Files are empty or have trivial content
8
8
  * - Implementation is incomplete
9
9
  *
10
- * Used by ThreeLayerSyncManager to enforce code-completion discipline.
10
+ * Used by GitHub sync to enforce code-completion discipline.
11
11
  *
12
12
  * @module CodeValidator
13
13
  */
@@ -134,10 +134,39 @@ class GitHubClientV2 {
134
134
  // ==========================================================================
135
135
  // Issues
136
136
  // ==========================================================================
137
+ /**
138
+ * Validate issue title format
139
+ *
140
+ * CRITICAL: Enforces correct data flow architecture
141
+ * - ✅ CORRECT: "US-XXX: Title" or "FS-YY-MM-DD: Title"
142
+ * - ❌ WRONG: "[Increment XXXX] Title" (deprecated old format)
143
+ *
144
+ * @throws Error if title uses deprecated [Increment XXXX] format
145
+ */
146
+ validateIssueTitle(title) {
147
+ const deprecatedPattern = /\[Increment\s+\d+\]/i;
148
+ if (deprecatedPattern.test(title)) {
149
+ throw new Error(
150
+ `\u274C DEPRECATED FORMAT DETECTED: "${title}"
151
+
152
+ GitHub issues MUST use living docs format:
153
+ \u2705 CORRECT: "US-XXX: Title" (User Story)
154
+ \u2705 CORRECT: "FS-YY-MM-DD: Title" (Feature Spec)
155
+ \u274C WRONG: "[Increment XXXX] Title" (old format)
156
+
157
+ WHY: Correct data flow is: Increment \u2192 Living Docs \u2192 GitHub
158
+ Living docs are the source of truth for GitHub sync.
159
+
160
+ FIX: Use /specweave:sync-docs to generate living docs, then sync to GitHub.
161
+ OR: Use US/FS ID format directly if creating issues manually.`
162
+ );
163
+ }
164
+ }
137
165
  /**
138
166
  * Create epic issue (increment-level)
139
167
  */
140
168
  async createEpicIssue(title, body, milestone, labels = []) {
169
+ this.validateIssueTitle(title);
141
170
  const args = [
142
171
  "issue",
143
172
  "create",
@@ -192,6 +192,34 @@ export class GitHubClientV2 {
192
192
  // Issues
193
193
  // ==========================================================================
194
194
 
195
+ /**
196
+ * Validate issue title format
197
+ *
198
+ * CRITICAL: Enforces correct data flow architecture
199
+ * - ✅ CORRECT: "US-XXX: Title" or "FS-YY-MM-DD: Title"
200
+ * - ❌ WRONG: "[Increment XXXX] Title" (deprecated old format)
201
+ *
202
+ * @throws Error if title uses deprecated [Increment XXXX] format
203
+ */
204
+ private validateIssueTitle(title: string): void {
205
+ // Check for deprecated [Increment XXXX] format
206
+ const deprecatedPattern = /\[Increment\s+\d+\]/i;
207
+
208
+ if (deprecatedPattern.test(title)) {
209
+ throw new Error(
210
+ `❌ DEPRECATED FORMAT DETECTED: "${title}"\n\n` +
211
+ `GitHub issues MUST use living docs format:\n` +
212
+ ` ✅ CORRECT: "US-XXX: Title" (User Story)\n` +
213
+ ` ✅ CORRECT: "FS-YY-MM-DD: Title" (Feature Spec)\n` +
214
+ ` ❌ WRONG: "[Increment XXXX] Title" (old format)\n\n` +
215
+ `WHY: Correct data flow is: Increment → Living Docs → GitHub\n` +
216
+ ` Living docs are the source of truth for GitHub sync.\n\n` +
217
+ `FIX: Use /specweave:sync-docs to generate living docs, then sync to GitHub.\n` +
218
+ ` OR: Use US/FS ID format directly if creating issues manually.`
219
+ );
220
+ }
221
+ }
222
+
195
223
  /**
196
224
  * Create epic issue (increment-level)
197
225
  */
@@ -201,6 +229,8 @@ export class GitHubClientV2 {
201
229
  milestone?: number | string,
202
230
  labels: string[] = []
203
231
  ): Promise<GitHubIssue> {
232
+ // Validate title format before creating
233
+ this.validateIssueTitle(title);
204
234
  const args = [
205
235
  'issue',
206
236
  'create',
@@ -192,6 +192,10 @@ ${phaseChecklist}
192
192
 
193
193
  ## SpecWeave Increment
194
194
 
195
+ \u26A0\uFE0F **DEPRECATED FORMAT**: This issue was created using the old increment-based sync.
196
+
197
+ **Correct data flow**: Increment \u2192 Living Docs \u2192 GitHub
198
+
195
199
  This epic tracks SpecWeave increment \`${metadata.id}\`.
196
200
 
197
201
  - **Spec**: [\`spec.md\`](${this.getGitHubFileURL("spec.md")})
@@ -219,6 +219,9 @@ export class TaskSync {
219
219
  });
220
220
  }
221
221
 
222
+ // DEPRECATED: This method generates old [Increment XXX] format
223
+ // It will be blocked by github-client-v2.ts validation
224
+ // TODO: Remove task-sync.ts entirely - use living docs sync instead
222
225
  return `# [Increment ${metadata.id}] ${metadata.title}
223
226
 
224
227
  **Status**: ${metadata.status}
@@ -234,6 +237,10 @@ ${phaseChecklist}
234
237
 
235
238
  ## SpecWeave Increment
236
239
 
240
+ ⚠️ **DEPRECATED FORMAT**: This issue was created using the old increment-based sync.
241
+
242
+ **Correct data flow**: Increment → Living Docs → GitHub
243
+
237
244
  This epic tracks SpecWeave increment \`${metadata.id}\`.
238
245
 
239
246
  - **Spec**: [\`spec.md\`](${this.getGitHubFileURL('spec.md')})
@@ -1,6 +1,6 @@
1
- import { EnhancedContentBuilder } from "../../../src/core/sync/enhanced-content-builder.js";
2
- import { SpecIncrementMapper } from "../../../src/core/sync/spec-increment-mapper.js";
3
- import { parseSpecContent } from "../../../src/core/spec-content-sync.js";
1
+ import { EnhancedContentBuilder } from "../../../dist/src/core/sync/enhanced-content-builder.js";
2
+ import { SpecIncrementMapper } from "../../../dist/src/core/sync/spec-increment-mapper.js";
3
+ import { parseSpecContent } from "../../../dist/src/core/spec-content-sync.js";
4
4
  import * as path from "path";
5
5
  import * as fs from "fs/promises";
6
6
  async function syncSpecToJiraWithEnhancedContent(options) {