specweave 0.3.13 → 0.4.1

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 (168) hide show
  1. package/CLAUDE.md +506 -17
  2. package/README.md +100 -58
  3. package/bin/install-all.sh +9 -2
  4. package/bin/install-hooks.sh +57 -0
  5. package/bin/specweave.js +16 -0
  6. package/dist/adapters/adapter-base.d.ts +21 -0
  7. package/dist/adapters/adapter-base.d.ts.map +1 -1
  8. package/dist/adapters/adapter-base.js +28 -0
  9. package/dist/adapters/adapter-base.js.map +1 -1
  10. package/dist/adapters/adapter-interface.d.ts +41 -0
  11. package/dist/adapters/adapter-interface.d.ts.map +1 -1
  12. package/dist/adapters/claude/adapter.d.ts +36 -0
  13. package/dist/adapters/claude/adapter.d.ts.map +1 -1
  14. package/dist/adapters/claude/adapter.js +135 -0
  15. package/dist/adapters/claude/adapter.js.map +1 -1
  16. package/dist/adapters/copilot/adapter.d.ts +25 -0
  17. package/dist/adapters/copilot/adapter.d.ts.map +1 -1
  18. package/dist/adapters/copilot/adapter.js +112 -0
  19. package/dist/adapters/copilot/adapter.js.map +1 -1
  20. package/dist/adapters/cursor/adapter.d.ts +36 -0
  21. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  22. package/dist/adapters/cursor/adapter.js +140 -0
  23. package/dist/adapters/cursor/adapter.js.map +1 -1
  24. package/dist/adapters/generic/adapter.d.ts +25 -0
  25. package/dist/adapters/generic/adapter.d.ts.map +1 -1
  26. package/dist/adapters/generic/adapter.js +111 -0
  27. package/dist/adapters/generic/adapter.js.map +1 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +103 -1
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/plugin.d.ts +37 -0
  32. package/dist/cli/commands/plugin.d.ts.map +1 -0
  33. package/dist/cli/commands/plugin.js +296 -0
  34. package/dist/cli/commands/plugin.js.map +1 -0
  35. package/dist/core/agent-model-manager.d.ts +52 -0
  36. package/dist/core/agent-model-manager.d.ts.map +1 -0
  37. package/dist/core/agent-model-manager.js +120 -0
  38. package/dist/core/agent-model-manager.js.map +1 -0
  39. package/dist/core/cost-tracker.d.ts +108 -0
  40. package/dist/core/cost-tracker.d.ts.map +1 -0
  41. package/dist/core/cost-tracker.js +281 -0
  42. package/dist/core/cost-tracker.js.map +1 -0
  43. package/dist/core/model-selector.d.ts +57 -0
  44. package/dist/core/model-selector.d.ts.map +1 -0
  45. package/dist/core/model-selector.js +115 -0
  46. package/dist/core/model-selector.js.map +1 -0
  47. package/dist/core/phase-detector.d.ts +62 -0
  48. package/dist/core/phase-detector.d.ts.map +1 -0
  49. package/dist/core/phase-detector.js +229 -0
  50. package/dist/core/phase-detector.js.map +1 -0
  51. package/dist/core/plugin-detector.d.ts +96 -0
  52. package/dist/core/plugin-detector.d.ts.map +1 -0
  53. package/dist/core/plugin-detector.js +349 -0
  54. package/dist/core/plugin-detector.js.map +1 -0
  55. package/dist/core/plugin-loader.d.ts +111 -0
  56. package/dist/core/plugin-loader.d.ts.map +1 -0
  57. package/dist/core/plugin-loader.js +319 -0
  58. package/dist/core/plugin-loader.js.map +1 -0
  59. package/dist/core/plugin-manager.d.ts +144 -0
  60. package/dist/core/plugin-manager.d.ts.map +1 -0
  61. package/dist/core/plugin-manager.js +393 -0
  62. package/dist/core/plugin-manager.js.map +1 -0
  63. package/dist/core/schemas/plugin-manifest.schema.json +253 -0
  64. package/dist/core/types/plugin.d.ts +252 -0
  65. package/dist/core/types/plugin.d.ts.map +1 -0
  66. package/dist/core/types/plugin.js +48 -0
  67. package/dist/core/types/plugin.js.map +1 -0
  68. package/dist/integrations/jira/jira-mapper.d.ts +2 -2
  69. package/dist/integrations/jira/jira-mapper.js +2 -2
  70. package/dist/types/cost-tracking.d.ts +43 -0
  71. package/dist/types/cost-tracking.d.ts.map +1 -0
  72. package/dist/types/cost-tracking.js +8 -0
  73. package/dist/types/cost-tracking.js.map +1 -0
  74. package/dist/types/model-selection.d.ts +53 -0
  75. package/dist/types/model-selection.d.ts.map +1 -0
  76. package/dist/types/model-selection.js +12 -0
  77. package/dist/types/model-selection.js.map +1 -0
  78. package/dist/utils/cost-reporter.d.ts +58 -0
  79. package/dist/utils/cost-reporter.d.ts.map +1 -0
  80. package/dist/utils/cost-reporter.js +224 -0
  81. package/dist/utils/cost-reporter.js.map +1 -0
  82. package/dist/utils/pricing-constants.d.ts +70 -0
  83. package/dist/utils/pricing-constants.d.ts.map +1 -0
  84. package/dist/utils/pricing-constants.js +71 -0
  85. package/dist/utils/pricing-constants.js.map +1 -0
  86. package/package.json +13 -9
  87. package/src/adapters/adapter-base.ts +33 -0
  88. package/src/adapters/adapter-interface.ts +46 -0
  89. package/src/adapters/claude/adapter.ts +164 -0
  90. package/src/adapters/copilot/adapter.ts +138 -0
  91. package/src/adapters/cursor/adapter.ts +170 -0
  92. package/src/adapters/generic/adapter.ts +137 -0
  93. package/src/agents/architect/AGENT.md +3 -0
  94. package/src/agents/code-reviewer.md +156 -0
  95. package/src/agents/data-scientist/AGENT.md +181 -0
  96. package/src/agents/database-optimizer/AGENT.md +147 -0
  97. package/src/agents/devops/AGENT.md +3 -0
  98. package/src/agents/diagrams-architect/AGENT.md +3 -0
  99. package/src/agents/docs-writer/AGENT.md +3 -0
  100. package/src/agents/kubernetes-architect/AGENT.md +142 -0
  101. package/src/agents/ml-engineer/AGENT.md +150 -0
  102. package/src/agents/mlops-engineer/AGENT.md +201 -0
  103. package/src/agents/network-engineer/AGENT.md +149 -0
  104. package/src/agents/observability-engineer/AGENT.md +213 -0
  105. package/src/agents/payment-integration/AGENT.md +35 -0
  106. package/src/agents/performance/AGENT.md +3 -0
  107. package/src/agents/performance-engineer/AGENT.md +153 -0
  108. package/src/agents/pm/AGENT.md +3 -0
  109. package/src/agents/qa-lead/AGENT.md +3 -0
  110. package/src/agents/security/AGENT.md +3 -0
  111. package/src/agents/sre/AGENT.md +3 -0
  112. package/src/agents/tdd-orchestrator/AGENT.md +169 -0
  113. package/src/agents/tech-lead/AGENT.md +3 -0
  114. package/src/commands/specweave.costs.md +261 -0
  115. package/src/commands/specweave.increment.md +48 -4
  116. package/src/commands/specweave.ml-pipeline.md +292 -0
  117. package/src/commands/specweave.monitor-setup.md +501 -0
  118. package/src/commands/specweave.slo-implement.md +1055 -0
  119. package/src/commands/specweave.sync-github.md +1 -1
  120. package/src/commands/specweave.tdd-cycle.md +199 -0
  121. package/src/commands/specweave.tdd-green.md +842 -0
  122. package/src/commands/specweave.tdd-red.md +135 -0
  123. package/src/commands/specweave.tdd-refactor.md +165 -0
  124. package/src/hooks/post-increment-plugin-detect.sh +142 -0
  125. package/src/hooks/post-task-completion.sh +53 -11
  126. package/src/hooks/pre-task-plugin-detect.sh +96 -0
  127. package/src/skills/SKILLS-INDEX.md +18 -10
  128. package/src/skills/billing-automation/SKILL.md +559 -0
  129. package/src/skills/distributed-tracing/SKILL.md +438 -0
  130. package/src/skills/e2e-playwright/README.md +1 -1
  131. package/src/skills/e2e-playwright/package.json +1 -1
  132. package/src/skills/gitops-workflow/SKILL.md +285 -0
  133. package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
  134. package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
  135. package/src/skills/grafana-dashboards/SKILL.md +369 -0
  136. package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
  137. package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  138. package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  139. package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  140. package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  141. package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
  142. package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  143. package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  144. package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  145. package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  146. package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  147. package/src/skills/k8s-security-policies/SKILL.md +334 -0
  148. package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  149. package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  150. package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
  151. package/src/skills/paypal-integration/SKILL.md +467 -0
  152. package/src/skills/pci-compliance/SKILL.md +466 -0
  153. package/src/skills/prometheus-configuration/SKILL.md +392 -0
  154. package/src/skills/slo-implementation/SKILL.md +329 -0
  155. package/src/skills/stripe-integration/SKILL.md +442 -0
  156. package/src/skills/tdd-workflow/SKILL.md +378 -0
  157. package/src/templates/README.md.template +1 -1
  158. package/src/skills/bmad-method-expert/SKILL.md +0 -626
  159. package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  160. package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  161. package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  162. package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  163. package/src/skills/context-optimizer/SKILL.md +0 -588
  164. package/src/skills/figma-designer/SKILL.md +0 -149
  165. package/src/skills/figma-implementer/SKILL.md +0 -148
  166. package/src/skills/figma-mcp-connector/SKILL.md +0 -136
  167. package/src/skills/figma-to-code/SKILL.md +0 -128
  168. package/src/skills/spec-kit-expert/SKILL.md +0 -1010
@@ -0,0 +1,438 @@
1
+ ---
2
+ name: distributed-tracing
3
+ description: Implement distributed tracing with Jaeger and Tempo to track requests across microservices and identify performance bottlenecks. Use when debugging microservices, analyzing request flows, or implementing observability for distributed systems.
4
+ ---
5
+
6
+ # Distributed Tracing
7
+
8
+ Implement distributed tracing with Jaeger and Tempo for request flow visibility across microservices.
9
+
10
+ ## Purpose
11
+
12
+ Track requests across distributed systems to understand latency, dependencies, and failure points.
13
+
14
+ ## When to Use
15
+
16
+ - Debug latency issues
17
+ - Understand service dependencies
18
+ - Identify bottlenecks
19
+ - Trace error propagation
20
+ - Analyze request paths
21
+
22
+ ## Distributed Tracing Concepts
23
+
24
+ ### Trace Structure
25
+ ```
26
+ Trace (Request ID: abc123)
27
+
28
+ Span (frontend) [100ms]
29
+
30
+ Span (api-gateway) [80ms]
31
+ ├→ Span (auth-service) [10ms]
32
+ └→ Span (user-service) [60ms]
33
+ └→ Span (database) [40ms]
34
+ ```
35
+
36
+ ### Key Components
37
+ - **Trace** - End-to-end request journey
38
+ - **Span** - Single operation within a trace
39
+ - **Context** - Metadata propagated between services
40
+ - **Tags** - Key-value pairs for filtering
41
+ - **Logs** - Timestamped events within a span
42
+
43
+ ## Jaeger Setup
44
+
45
+ ### Kubernetes Deployment
46
+
47
+ ```bash
48
+ # Deploy Jaeger Operator
49
+ kubectl create namespace observability
50
+ kubectl create -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.51.0/jaeger-operator.yaml -n observability
51
+
52
+ # Deploy Jaeger instance
53
+ kubectl apply -f - <<EOF
54
+ apiVersion: jaegertracing.io/v1
55
+ kind: Jaeger
56
+ metadata:
57
+ name: jaeger
58
+ namespace: observability
59
+ spec:
60
+ strategy: production
61
+ storage:
62
+ type: elasticsearch
63
+ options:
64
+ es:
65
+ server-urls: http://elasticsearch:9200
66
+ ingress:
67
+ enabled: true
68
+ EOF
69
+ ```
70
+
71
+ ### Docker Compose
72
+
73
+ ```yaml
74
+ version: '3.8'
75
+ services:
76
+ jaeger:
77
+ image: jaegertracing/all-in-one:latest
78
+ ports:
79
+ - "5775:5775/udp"
80
+ - "6831:6831/udp"
81
+ - "6832:6832/udp"
82
+ - "5778:5778"
83
+ - "16686:16686" # UI
84
+ - "14268:14268" # Collector
85
+ - "14250:14250" # gRPC
86
+ - "9411:9411" # Zipkin
87
+ environment:
88
+ - COLLECTOR_ZIPKIN_HOST_PORT=:9411
89
+ ```
90
+
91
+ **Reference:** See `references/jaeger-setup.md`
92
+
93
+ ## Application Instrumentation
94
+
95
+ ### OpenTelemetry (Recommended)
96
+
97
+ #### Python (Flask)
98
+ ```python
99
+ from opentelemetry import trace
100
+ from opentelemetry.exporter.jaeger.thrift import JaegerExporter
101
+ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
102
+ from opentelemetry.sdk.trace import TracerProvider
103
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
104
+ from opentelemetry.instrumentation.flask import FlaskInstrumentor
105
+ from flask import Flask
106
+
107
+ # Initialize tracer
108
+ resource = Resource(attributes={SERVICE_NAME: "my-service"})
109
+ provider = TracerProvider(resource=resource)
110
+ processor = BatchSpanProcessor(JaegerExporter(
111
+ agent_host_name="jaeger",
112
+ agent_port=6831,
113
+ ))
114
+ provider.add_span_processor(processor)
115
+ trace.set_tracer_provider(provider)
116
+
117
+ # Instrument Flask
118
+ app = Flask(__name__)
119
+ FlaskInstrumentor().instrument_app(app)
120
+
121
+ @app.route('/api/users')
122
+ def get_users():
123
+ tracer = trace.get_tracer(__name__)
124
+
125
+ with tracer.start_as_current_span("get_users") as span:
126
+ span.set_attribute("user.count", 100)
127
+ # Business logic
128
+ users = fetch_users_from_db()
129
+ return {"users": users}
130
+
131
+ def fetch_users_from_db():
132
+ tracer = trace.get_tracer(__name__)
133
+
134
+ with tracer.start_as_current_span("database_query") as span:
135
+ span.set_attribute("db.system", "postgresql")
136
+ span.set_attribute("db.statement", "SELECT * FROM users")
137
+ # Database query
138
+ return query_database()
139
+ ```
140
+
141
+ #### Node.js (Express)
142
+ ```javascript
143
+ const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
144
+ const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
145
+ const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-base');
146
+ const { registerInstrumentations } = require('@opentelemetry/instrumentation');
147
+ const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
148
+ const { ExpressInstrumentation } = require('@opentelemetry/instrumentation-express');
149
+
150
+ // Initialize tracer
151
+ const provider = new NodeTracerProvider({
152
+ resource: { attributes: { 'service.name': 'my-service' } }
153
+ });
154
+
155
+ const exporter = new JaegerExporter({
156
+ endpoint: 'http://jaeger:14268/api/traces'
157
+ });
158
+
159
+ provider.addSpanProcessor(new BatchSpanProcessor(exporter));
160
+ provider.register();
161
+
162
+ // Instrument libraries
163
+ registerInstrumentations({
164
+ instrumentations: [
165
+ new HttpInstrumentation(),
166
+ new ExpressInstrumentation(),
167
+ ],
168
+ });
169
+
170
+ const express = require('express');
171
+ const app = express();
172
+
173
+ app.get('/api/users', async (req, res) => {
174
+ const tracer = trace.getTracer('my-service');
175
+ const span = tracer.startSpan('get_users');
176
+
177
+ try {
178
+ const users = await fetchUsers();
179
+ span.setAttributes({ 'user.count': users.length });
180
+ res.json({ users });
181
+ } finally {
182
+ span.end();
183
+ }
184
+ });
185
+ ```
186
+
187
+ #### Go
188
+ ```go
189
+ package main
190
+
191
+ import (
192
+ "context"
193
+ "go.opentelemetry.io/otel"
194
+ "go.opentelemetry.io/otel/exporters/jaeger"
195
+ "go.opentelemetry.io/otel/sdk/resource"
196
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
197
+ semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
198
+ )
199
+
200
+ func initTracer() (*sdktrace.TracerProvider, error) {
201
+ exporter, err := jaeger.New(jaeger.WithCollectorEndpoint(
202
+ jaeger.WithEndpoint("http://jaeger:14268/api/traces"),
203
+ ))
204
+ if err != nil {
205
+ return nil, err
206
+ }
207
+
208
+ tp := sdktrace.NewTracerProvider(
209
+ sdktrace.WithBatcher(exporter),
210
+ sdktrace.WithResource(resource.NewWithAttributes(
211
+ semconv.SchemaURL,
212
+ semconv.ServiceNameKey.String("my-service"),
213
+ )),
214
+ )
215
+
216
+ otel.SetTracerProvider(tp)
217
+ return tp, nil
218
+ }
219
+
220
+ func getUsers(ctx context.Context) ([]User, error) {
221
+ tracer := otel.Tracer("my-service")
222
+ ctx, span := tracer.Start(ctx, "get_users")
223
+ defer span.End()
224
+
225
+ span.SetAttributes(attribute.String("user.filter", "active"))
226
+
227
+ users, err := fetchUsersFromDB(ctx)
228
+ if err != nil {
229
+ span.RecordError(err)
230
+ return nil, err
231
+ }
232
+
233
+ span.SetAttributes(attribute.Int("user.count", len(users)))
234
+ return users, nil
235
+ }
236
+ ```
237
+
238
+ **Reference:** See `references/instrumentation.md`
239
+
240
+ ## Context Propagation
241
+
242
+ ### HTTP Headers
243
+ ```
244
+ traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
245
+ tracestate: congo=t61rcWkgMzE
246
+ ```
247
+
248
+ ### Propagation in HTTP Requests
249
+
250
+ #### Python
251
+ ```python
252
+ from opentelemetry.propagate import inject
253
+
254
+ headers = {}
255
+ inject(headers) # Injects trace context
256
+
257
+ response = requests.get('http://downstream-service/api', headers=headers)
258
+ ```
259
+
260
+ #### Node.js
261
+ ```javascript
262
+ const { propagation } = require('@opentelemetry/api');
263
+
264
+ const headers = {};
265
+ propagation.inject(context.active(), headers);
266
+
267
+ axios.get('http://downstream-service/api', { headers });
268
+ ```
269
+
270
+ ## Tempo Setup (Grafana)
271
+
272
+ ### Kubernetes Deployment
273
+
274
+ ```yaml
275
+ apiVersion: v1
276
+ kind: ConfigMap
277
+ metadata:
278
+ name: tempo-config
279
+ data:
280
+ tempo.yaml: |
281
+ server:
282
+ http_listen_port: 3200
283
+
284
+ distributor:
285
+ receivers:
286
+ jaeger:
287
+ protocols:
288
+ thrift_http:
289
+ grpc:
290
+ otlp:
291
+ protocols:
292
+ http:
293
+ grpc:
294
+
295
+ storage:
296
+ trace:
297
+ backend: s3
298
+ s3:
299
+ bucket: tempo-traces
300
+ endpoint: s3.amazonaws.com
301
+
302
+ querier:
303
+ frontend_worker:
304
+ frontend_address: tempo-query-frontend:9095
305
+ ---
306
+ apiVersion: apps/v1
307
+ kind: Deployment
308
+ metadata:
309
+ name: tempo
310
+ spec:
311
+ replicas: 1
312
+ template:
313
+ spec:
314
+ containers:
315
+ - name: tempo
316
+ image: grafana/tempo:latest
317
+ args:
318
+ - -config.file=/etc/tempo/tempo.yaml
319
+ volumeMounts:
320
+ - name: config
321
+ mountPath: /etc/tempo
322
+ volumes:
323
+ - name: config
324
+ configMap:
325
+ name: tempo-config
326
+ ```
327
+
328
+ **Reference:** See `assets/jaeger-config.yaml.template`
329
+
330
+ ## Sampling Strategies
331
+
332
+ ### Probabilistic Sampling
333
+ ```yaml
334
+ # Sample 1% of traces
335
+ sampler:
336
+ type: probabilistic
337
+ param: 0.01
338
+ ```
339
+
340
+ ### Rate Limiting Sampling
341
+ ```yaml
342
+ # Sample max 100 traces per second
343
+ sampler:
344
+ type: ratelimiting
345
+ param: 100
346
+ ```
347
+
348
+ ### Adaptive Sampling
349
+ ```python
350
+ from opentelemetry.sdk.trace.sampling import ParentBased, TraceIdRatioBased
351
+
352
+ # Sample based on trace ID (deterministic)
353
+ sampler = ParentBased(root=TraceIdRatioBased(0.01))
354
+ ```
355
+
356
+ ## Trace Analysis
357
+
358
+ ### Finding Slow Requests
359
+
360
+ **Jaeger Query:**
361
+ ```
362
+ service=my-service
363
+ duration > 1s
364
+ ```
365
+
366
+ ### Finding Errors
367
+
368
+ **Jaeger Query:**
369
+ ```
370
+ service=my-service
371
+ error=true
372
+ tags.http.status_code >= 500
373
+ ```
374
+
375
+ ### Service Dependency Graph
376
+
377
+ Jaeger automatically generates service dependency graphs showing:
378
+ - Service relationships
379
+ - Request rates
380
+ - Error rates
381
+ - Average latencies
382
+
383
+ ## Best Practices
384
+
385
+ 1. **Sample appropriately** (1-10% in production)
386
+ 2. **Add meaningful tags** (user_id, request_id)
387
+ 3. **Propagate context** across all service boundaries
388
+ 4. **Log exceptions** in spans
389
+ 5. **Use consistent naming** for operations
390
+ 6. **Monitor tracing overhead** (<1% CPU impact)
391
+ 7. **Set up alerts** for trace errors
392
+ 8. **Implement distributed context** (baggage)
393
+ 9. **Use span events** for important milestones
394
+ 10. **Document instrumentation** standards
395
+
396
+ ## Integration with Logging
397
+
398
+ ### Correlated Logs
399
+ ```python
400
+ import logging
401
+ from opentelemetry import trace
402
+
403
+ logger = logging.getLogger(__name__)
404
+
405
+ def process_request():
406
+ span = trace.get_current_span()
407
+ trace_id = span.get_span_context().trace_id
408
+
409
+ logger.info(
410
+ "Processing request",
411
+ extra={"trace_id": format(trace_id, '032x')}
412
+ )
413
+ ```
414
+
415
+ ## Troubleshooting
416
+
417
+ **No traces appearing:**
418
+ - Check collector endpoint
419
+ - Verify network connectivity
420
+ - Check sampling configuration
421
+ - Review application logs
422
+
423
+ **High latency overhead:**
424
+ - Reduce sampling rate
425
+ - Use batch span processor
426
+ - Check exporter configuration
427
+
428
+ ## Reference Files
429
+
430
+ - `references/jaeger-setup.md` - Jaeger installation
431
+ - `references/instrumentation.md` - Instrumentation patterns
432
+ - `assets/jaeger-config.yaml.template` - Jaeger configuration
433
+
434
+ ## Related Skills
435
+
436
+ - `prometheus-configuration` - For metrics
437
+ - `grafana-dashboards` - For visualization
438
+ - `slo-implementation` - For latency SLOs
@@ -490,7 +490,7 @@ MIT License - See LICENSE file for details
490
490
 
491
491
  - **Documentation**: See SKILL.md for complete API reference
492
492
  - **Issues**: Report bugs or request features via GitHub issues
493
- - **SpecWeave**: See [SpecWeave documentation](https://github.com/specweave/specweave) for framework details
493
+ - **SpecWeave**: See [SpecWeave documentation](https://github.com/anton-abyzov/specweave) for framework details
494
494
 
495
495
  ## Version History
496
496
 
@@ -28,6 +28,6 @@
28
28
  },
29
29
  "repository": {
30
30
  "type": "git",
31
- "url": "https://github.com/specweave/specweave"
31
+ "url": "https://github.com/anton-abyzov/specweave"
32
32
  }
33
33
  }