@danieljvdm/dev-kit 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/README.md +6 -6
  2. package/package.json +1 -1
  3. package/skill-sources.jsonc +6 -29
  4. package/skill-sources.lock.json +23 -109
  5. package/skills/animate/LICENSE +21 -0
  6. package/skills/animate/NOTICE +10 -0
  7. package/skills/animate/SKILL.md +34 -0
  8. package/skills/animate/references/gestures.md +27 -0
  9. package/skills/animate/references/glossary.md +136 -0
  10. package/skills/animate/references/implementation.md +22 -0
  11. package/skills/animate/references/opportunities.md +18 -0
  12. package/skills/animate/references/principles.md +48 -0
  13. package/skills/animate/references/review.md +19 -0
  14. package/skills/cloudflare-workers/LICENSE +202 -0
  15. package/skills/cloudflare-workers/NOTICE +9 -0
  16. package/skills/cloudflare-workers/SKILL.md +26 -0
  17. package/skills/cloudflare-workers/references/durable-objects.md +68 -0
  18. package/skills/cloudflare-workers/references/sandbox.md +48 -0
  19. package/skills/cloudflare-workers/references/workers.md +63 -0
  20. package/skills/cloudflare-workers/references/wrangler.md +56 -0
  21. package/skills/design-ui/LICENSE +21 -0
  22. package/skills/design-ui/NOTICE +8 -0
  23. package/skills/design-ui/SKILL.md +29 -0
  24. package/skills/design-ui/references/appearance.md +22 -0
  25. package/skills/design-ui/references/components.md +33 -0
  26. package/skills/design-ui/references/exploration.md +50 -0
  27. package/skills/design-ui/references/libraries.md +39 -0
  28. package/skills/design-ui/references/themes.md +23 -0
  29. package/skills/dev-kit/SKILL.md +19 -38
  30. package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
  31. package/skills/dev-kit/references/skills.md +2 -2
  32. package/skills/effect-development/SKILL.md +27 -0
  33. package/skills/effect-development/agents/openai.yaml +4 -0
  34. package/skills/effect-development/references/api/index.md +32 -0
  35. package/skills/effect-development/references/api/schema-codecs.md +15 -0
  36. package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
  37. package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
  38. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
  39. package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
  40. package/skills/effect-development/references/atom/index.md +40 -0
  41. package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
  42. package/skills/effect-development/references/cli/index.md +39 -0
  43. package/skills/effect-development/references/setup.md +15 -0
  44. package/skills/open-pull-request/SKILL.md +11 -115
  45. package/skills/open-pull-request/agents/openai.yaml +3 -3
  46. package/skills/open-pull-request/references/evidence.md +22 -0
  47. package/skills/open-pull-request/references/explanation.md +21 -0
  48. package/skills/open-pull-request/references/publication.md +21 -0
  49. package/skills/sentry/LICENSE +202 -0
  50. package/skills/sentry/LICENSE-UPSTREAM +21 -0
  51. package/skills/sentry/NOTICE +14 -0
  52. package/skills/sentry/SKILL.md +33 -0
  53. package/skills/sentry/references/alert-payloads.md +105 -0
  54. package/skills/sentry/references/alerts.md +17 -0
  55. package/skills/sentry/references/artifacts.md +25 -0
  56. package/skills/sentry/references/auth-token.md +65 -0
  57. package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
  58. package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
  59. package/skills/sentry/references/concepts/crons.md +50 -0
  60. package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
  61. package/skills/sentry/references/concepts/errors.md +40 -0
  62. package/skills/sentry/references/concepts/logging.md +85 -0
  63. package/skills/sentry/references/concepts/metrics.md +49 -0
  64. package/skills/sentry/references/concepts/monitors.md +78 -0
  65. package/skills/sentry/references/concepts/profiling.md +38 -0
  66. package/skills/sentry/references/concepts/reduce-volume.md +49 -0
  67. package/skills/sentry/references/concepts/releases.md +43 -0
  68. package/skills/sentry/references/concepts/session-replay.md +35 -0
  69. package/skills/sentry/references/concepts/tracing.md +54 -0
  70. package/skills/sentry/references/concepts/user-feedback.md +36 -0
  71. package/skills/sentry/references/debug-artifacts/android.md +68 -0
  72. package/skills/sentry/references/debug-artifacts/apple.md +96 -0
  73. package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
  74. package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
  75. package/skills/sentry/references/debug-artifacts/index.md +75 -0
  76. package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
  77. package/skills/sentry/references/debug-artifacts/matching.md +73 -0
  78. package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
  79. package/skills/sentry/references/first-error-setup.md +25 -0
  80. package/skills/sentry/references/instrumentation.md +30 -0
  81. package/skills/sentry/references/issues.md +32 -0
  82. package/skills/sentry/references/new-project.md +17 -0
  83. package/skills/sentry/references/otel-exporter.md +30 -0
  84. package/skills/sentry/references/release-workflow.md +31 -0
  85. package/skills/sentry/references/releases/ci-pipeline.md +214 -0
  86. package/skills/sentry/references/releases/index.md +93 -0
  87. package/skills/sentry/references/releases/suspect-commits.md +155 -0
  88. package/skills/sentry/references/releases/tagging.md +131 -0
  89. package/skills/sentry/references/releases/troubleshooting.md +67 -0
  90. package/skills/sentry/references/sdks/android/crons.md +305 -0
  91. package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
  92. package/skills/sentry/references/sdks/android/index.md +748 -0
  93. package/skills/sentry/references/sdks/android/integrations.md +48 -0
  94. package/skills/sentry/references/sdks/android/logging.md +374 -0
  95. package/skills/sentry/references/sdks/android/metrics.md +288 -0
  96. package/skills/sentry/references/sdks/android/profiling.md +397 -0
  97. package/skills/sentry/references/sdks/android/session-replay.md +406 -0
  98. package/skills/sentry/references/sdks/android/tracing.md +861 -0
  99. package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
  100. package/skills/sentry/references/sdks/browser/index.md +714 -0
  101. package/skills/sentry/references/sdks/browser/logging.md +315 -0
  102. package/skills/sentry/references/sdks/browser/profiling.md +236 -0
  103. package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
  104. package/skills/sentry/references/sdks/browser/tracing.md +561 -0
  105. package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
  106. package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
  107. package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
  108. package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
  109. package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
  110. package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
  111. package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
  112. package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
  113. package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
  114. package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
  115. package/skills/sentry/references/sdks/cocoa/index.md +497 -0
  116. package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
  117. package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
  118. package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
  119. package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
  120. package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
  121. package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
  122. package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
  123. package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
  124. package/skills/sentry/references/sdks/dotnet/index.md +614 -0
  125. package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
  126. package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
  127. package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
  128. package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
  129. package/skills/sentry/references/sdks/elixir/crons.md +371 -0
  130. package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
  131. package/skills/sentry/references/sdks/elixir/index.md +383 -0
  132. package/skills/sentry/references/sdks/elixir/logging.md +239 -0
  133. package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
  134. package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
  135. package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
  136. package/skills/sentry/references/sdks/flutter/index.md +728 -0
  137. package/skills/sentry/references/sdks/flutter/logging.md +387 -0
  138. package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
  139. package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
  140. package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
  141. package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
  142. package/skills/sentry/references/sdks/go/crons.md +270 -0
  143. package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
  144. package/skills/sentry/references/sdks/go/index.md +324 -0
  145. package/skills/sentry/references/sdks/go/logging.md +354 -0
  146. package/skills/sentry/references/sdks/go/metrics.md +273 -0
  147. package/skills/sentry/references/sdks/go/profiling.md +46 -0
  148. package/skills/sentry/references/sdks/go/tracing.md +366 -0
  149. package/skills/sentry/references/sdks/index.md +41 -0
  150. package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
  151. package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
  152. package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
  153. package/skills/sentry/references/sdks/nestjs/index.md +699 -0
  154. package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
  155. package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
  156. package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
  157. package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
  158. package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
  159. package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
  160. package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
  161. package/skills/sentry/references/sdks/nextjs/index.md +491 -0
  162. package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
  163. package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
  164. package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
  165. package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
  166. package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
  167. package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
  168. package/skills/sentry/references/sdks/node/crons.md +432 -0
  169. package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
  170. package/skills/sentry/references/sdks/node/index.md +942 -0
  171. package/skills/sentry/references/sdks/node/logging.md +380 -0
  172. package/skills/sentry/references/sdks/node/metrics.md +278 -0
  173. package/skills/sentry/references/sdks/node/profiling.md +373 -0
  174. package/skills/sentry/references/sdks/node/tracing.md +878 -0
  175. package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
  176. package/skills/sentry/references/sdks/php/crons.md +265 -0
  177. package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
  178. package/skills/sentry/references/sdks/php/index.md +362 -0
  179. package/skills/sentry/references/sdks/php/laravel.md +542 -0
  180. package/skills/sentry/references/sdks/php/logging.md +242 -0
  181. package/skills/sentry/references/sdks/php/metrics.md +193 -0
  182. package/skills/sentry/references/sdks/php/profiling.md +115 -0
  183. package/skills/sentry/references/sdks/php/symfony.md +552 -0
  184. package/skills/sentry/references/sdks/php/tracing.md +516 -0
  185. package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
  186. package/skills/sentry/references/sdks/python/crons.md +218 -0
  187. package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
  188. package/skills/sentry/references/sdks/python/index.md +361 -0
  189. package/skills/sentry/references/sdks/python/logging.md +234 -0
  190. package/skills/sentry/references/sdks/python/metrics.md +154 -0
  191. package/skills/sentry/references/sdks/python/profiling.md +120 -0
  192. package/skills/sentry/references/sdks/python/tracing.md +364 -0
  193. package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
  194. package/skills/sentry/references/sdks/react/index.md +492 -0
  195. package/skills/sentry/references/sdks/react/logging.md +364 -0
  196. package/skills/sentry/references/sdks/react/profiling.md +322 -0
  197. package/skills/sentry/references/sdks/react/react-features.md +1272 -0
  198. package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
  199. package/skills/sentry/references/sdks/react/tracing.md +1415 -0
  200. package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
  201. package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
  202. package/skills/sentry/references/sdks/react-native/index.md +1030 -0
  203. package/skills/sentry/references/sdks/react-native/logging.md +444 -0
  204. package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
  205. package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
  206. package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
  207. package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
  208. package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
  209. package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
  210. package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
  211. package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
  212. package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
  213. package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
  214. package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
  215. package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
  216. package/skills/sentry/references/sdks/ruby/crons.md +184 -0
  217. package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
  218. package/skills/sentry/references/sdks/ruby/index.md +297 -0
  219. package/skills/sentry/references/sdks/ruby/logging.md +168 -0
  220. package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
  221. package/skills/sentry/references/sdks/ruby/migration.md +321 -0
  222. package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
  223. package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
  224. package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
  225. package/skills/sentry/references/sdks/svelte/index.md +467 -0
  226. package/skills/sentry/references/sdks/svelte/logging.md +344 -0
  227. package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
  228. package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
  229. package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
  230. package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
  231. package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
  232. package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
  233. package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
  234. package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
  235. package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
  236. package/skills/sentry/references/search-query-language.md +226 -0
  237. package/skills/sentry/references/semantics/angular.md +7 -0
  238. package/skills/sentry/references/semantics/app.md +28 -0
  239. package/skills/sentry/references/semantics/art.md +17 -0
  240. package/skills/sentry/references/semantics/aws.md +43 -0
  241. package/skills/sentry/references/semantics/browser.md +34 -0
  242. package/skills/sentry/references/semantics/cache.md +12 -0
  243. package/skills/sentry/references/semantics/client.md +8 -0
  244. package/skills/sentry/references/semantics/cloud.md +12 -0
  245. package/skills/sentry/references/semantics/cloudflare.md +23 -0
  246. package/skills/sentry/references/semantics/code.md +11 -0
  247. package/skills/sentry/references/semantics/culture.md +11 -0
  248. package/skills/sentry/references/semantics/db.md +21 -0
  249. package/skills/sentry/references/semantics/device.md +43 -0
  250. package/skills/sentry/references/semantics/error.md +7 -0
  251. package/skills/sentry/references/semantics/event.md +8 -0
  252. package/skills/sentry/references/semantics/exception.md +10 -0
  253. package/skills/sentry/references/semantics/faas.md +19 -0
  254. package/skills/sentry/references/semantics/file.md +8 -0
  255. package/skills/sentry/references/semantics/flag.md +7 -0
  256. package/skills/sentry/references/semantics/gcp.md +16 -0
  257. package/skills/sentry/references/semantics/gen_ai.md +53 -0
  258. package/skills/sentry/references/semantics/general.md +11 -0
  259. package/skills/sentry/references/semantics/graphql.md +9 -0
  260. package/skills/sentry/references/semantics/grpc.md +19 -0
  261. package/skills/sentry/references/semantics/http.md +34 -0
  262. package/skills/sentry/references/semantics/index.md +63 -0
  263. package/skills/sentry/references/semantics/jsonrpc.md +8 -0
  264. package/skills/sentry/references/semantics/jvm.md +12 -0
  265. package/skills/sentry/references/semantics/koa.md +7 -0
  266. package/skills/sentry/references/semantics/logger.md +7 -0
  267. package/skills/sentry/references/semantics/mcp.md +37 -0
  268. package/skills/sentry/references/semantics/mdc.md +7 -0
  269. package/skills/sentry/references/semantics/messaging.md +23 -0
  270. package/skills/sentry/references/semantics/middleware.md +7 -0
  271. package/skills/sentry/references/semantics/navigation.md +9 -0
  272. package/skills/sentry/references/semantics/nel.md +11 -0
  273. package/skills/sentry/references/semantics/network.md +17 -0
  274. package/skills/sentry/references/semantics/os.md +15 -0
  275. package/skills/sentry/references/semantics/otel.md +10 -0
  276. package/skills/sentry/references/semantics/params.md +7 -0
  277. package/skills/sentry/references/semantics/process.md +14 -0
  278. package/skills/sentry/references/semantics/react.md +7 -0
  279. package/skills/sentry/references/semantics/remix.md +7 -0
  280. package/skills/sentry/references/semantics/resource.md +7 -0
  281. package/skills/sentry/references/semantics/rpc.md +10 -0
  282. package/skills/sentry/references/semantics/score.md +10 -0
  283. package/skills/sentry/references/semantics/sentry.md +69 -0
  284. package/skills/sentry/references/semantics/server.md +8 -0
  285. package/skills/sentry/references/semantics/service.md +8 -0
  286. package/skills/sentry/references/semantics/session.md +7 -0
  287. package/skills/sentry/references/semantics/state.md +7 -0
  288. package/skills/sentry/references/semantics/thread.md +8 -0
  289. package/skills/sentry/references/semantics/timber.md +7 -0
  290. package/skills/sentry/references/semantics/trpc.md +8 -0
  291. package/skills/sentry/references/semantics/ui.md +18 -0
  292. package/skills/sentry/references/semantics/url.md +15 -0
  293. package/skills/sentry/references/semantics/user.md +17 -0
  294. package/skills/sentry/references/semantics/user_agent.md +7 -0
  295. package/skills/sentry/references/semantics/vercel.md +42 -0
  296. package/skills/sentry/references/setup-verification.md +39 -0
  297. package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
  298. package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
  299. package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
  300. package/skills/sentry/references/snapshots/index.md +19 -0
  301. package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
  302. package/skills/sentry/references/snapshots/snapshots.md +123 -0
  303. package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
  304. package/skills/testing/LICENSE +21 -0
  305. package/skills/testing/NOTICE +7 -0
  306. package/skills/testing/SKILL.md +13 -19
  307. package/skills/testing/agents/openai.yaml +1 -2
  308. package/skills/testing/references/selection.md +23 -0
  309. package/skills/testing/references/tdd.md +19 -0
  310. package/skills/testing/references/test-design.md +17 -0
  311. package/src/catalog.ts +1 -7
  312. package/skills/build-effect-apis/SKILL.md +0 -81
  313. package/skills/build-effect-apis/agents/openai.yaml +0 -4
  314. package/skills/build-effect-clis/SKILL.md +0 -92
  315. package/skills/build-effect-clis/agents/openai.yaml +0 -4
  316. package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
  317. package/skills/effect-atom-state/SKILL.md +0 -97
  318. package/skills/effect-atom-state/agents/openai.yaml +0 -4
  319. package/skills/effect-ts/SKILL.md +0 -35
  320. package/skills/effect-ts/agents/openai.yaml +0 -4
  321. /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
  322. /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
  323. /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
  324. /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
  325. /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
  326. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
  327. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
  328. /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
  329. /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
  330. /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
@@ -0,0 +1,273 @@
1
+ # Metrics — Sentry Go SDK
2
+
3
+ > Minimum SDK: `github.com/getsentry/sentry-go` v0.42.0+
4
+
5
+ ## Configuration
6
+
7
+ ```go
8
+ sentry.Init(sentry.ClientOptions{
9
+ Dsn: os.Getenv("SENTRY_DSN"),
10
+ // Metrics are enabled by default. Disable with:
11
+ DisableMetrics: false,
12
+ // Filter or mutate metrics before sending:
13
+ BeforeSendMetric: func(metric *sentry.Metric) *sentry.Metric {
14
+ return metric // return nil to drop
15
+ },
16
+ })
17
+ ```
18
+
19
+ | Option | Type | Default | Purpose |
20
+ | ------------------ | ----------------------- | ------- | ------------------------------------------ |
21
+ | `DisableMetrics` | `bool` | `false` | Set `true` to disable all metrics emission |
22
+ | `BeforeSendMetric` | `func(*Metric) *Metric` | `nil` | Mutate or drop individual metrics |
23
+
24
+ ## Meter API
25
+
26
+ Create a `Meter` from any context:
27
+
28
+ ```go
29
+ meter := sentry.NewMeter(ctx)
30
+ ```
31
+
32
+ Returns a no-op `Meter` (silently drops all calls) if no client is bound to the hub or
33
+ `DisableMetrics: true`.
34
+
35
+ ### Meter interface
36
+
37
+ ```go
38
+ type Meter interface {
39
+ Count(name string, count int64, opts ...MeterOption)
40
+ Gauge(name string, value float64, opts ...MeterOption)
41
+ Distribution(name string, sample float64, opts ...MeterOption)
42
+ WithCtx(ctx context.Context) Meter // returns meter linked to new context/span
43
+ SetAttributes(attrs ...attribute.Builder) // permanent attributes on all metrics from this meter
44
+ }
45
+ ```
46
+
47
+ > **The Go SDK has exactly three metric types: `Count`, `Gauge`, `Distribution`. Sets
48
+ > and timing helpers are not implemented.**
49
+
50
+ ## Code Examples
51
+
52
+ ### Basic metrics
53
+
54
+ ```go
55
+ import (
56
+ "context"
57
+ "time"
58
+ "github.com/getsentry/sentry-go"
59
+ "github.com/getsentry/sentry-go/attribute"
60
+ )
61
+
62
+ func main() {
63
+ sentry.Init(sentry.ClientOptions{Dsn: os.Getenv("SENTRY_DSN")})
64
+ defer sentry.Flush(2 * time.Second)
65
+
66
+ meter := sentry.NewMeter(context.Background())
67
+
68
+ // Counter — integer increments
69
+ meter.Count("emails.sent", 3,
70
+ sentry.WithAttributes(
71
+ attribute.String("provider", "sendgrid"),
72
+ attribute.Bool("transactional", true),
73
+ ),
74
+ )
75
+
76
+ // Gauge — current snapshot value
77
+ meter.Gauge("queue.depth", 142.0,
78
+ sentry.WithAttributes(
79
+ attribute.String("queue.name", "orders"),
80
+ ),
81
+ )
82
+
83
+ // Distribution — histogram / percentile-friendly samples
84
+ meter.Distribution("api.response_time", 187.5,
85
+ sentry.WithUnit(sentry.UnitMillisecond),
86
+ sentry.WithAttributes(
87
+ attribute.String("endpoint", "/checkout"),
88
+ attribute.String("method", "POST"),
89
+ ),
90
+ )
91
+ }
92
+ ```
93
+
94
+ ### Permanent meter attributes
95
+
96
+ ```go
97
+ meter := sentry.NewMeter(context.Background())
98
+ meter.SetAttributes(
99
+ attribute.String("service", "payment-api"),
100
+ attribute.String("region", "us-east-1"),
101
+ )
102
+
103
+ // All metrics from this meter include service and region
104
+ meter.Count("orders.created", 1)
105
+ meter.Gauge("cpu.usage", 0.73, sentry.WithUnit(sentry.UnitRatio))
106
+ ```
107
+
108
+ ### Trace-linked metrics
109
+
110
+ Associate metrics with the current request’s trace span using `WithCtx`:
111
+
112
+ ```go
113
+ http.HandleFunc("/checkout", func(w http.ResponseWriter, r *http.Request) {
114
+ // meter.WithCtx links metrics to the active span in r.Context()
115
+ meter.WithCtx(r.Context()).Count("checkout.attempts", 1,
116
+ sentry.WithAttributes(
117
+ attribute.String("method", r.Method),
118
+ ),
119
+ )
120
+ // ... handler logic
121
+ })
122
+ ```
123
+
124
+ ### Timing a operation with Distribution
125
+
126
+ There is no built-in timer — measure elapsed time manually:
127
+
128
+ ```go
129
+ func processOrder(ctx context.Context, orderID string) error {
130
+ start := time.Now()
131
+
132
+ err := doWork(ctx, orderID)
133
+
134
+ elapsed := float64(time.Since(start).Milliseconds())
135
+ meter.WithCtx(ctx).Distribution("order.processing_time", elapsed,
136
+ sentry.WithUnit(sentry.UnitMillisecond),
137
+ sentry.WithAttributes(
138
+ attribute.String("order.id", orderID),
139
+ attribute.Bool("success", err == nil),
140
+ ),
141
+ )
142
+ return err
143
+ }
144
+ ```
145
+
146
+ ### Filtering metrics with BeforeSendMetric
147
+
148
+ ```go
149
+ sentry.Init(sentry.ClientOptions{
150
+ Dsn: os.Getenv("SENTRY_DSN"),
151
+ BeforeSendMetric: func(m *sentry.Metric) *sentry.Metric {
152
+ // Drop sub-millisecond distributions (noise)
153
+ if m.Type == sentry.MetricTypeDistribution {
154
+ if v, ok := m.Value.Float64(); ok && v < 1.0 {
155
+ return nil
156
+ }
157
+ }
158
+ // Drop metrics from test environment
159
+ if env, ok := m.Attributes["sentry.environment"]; ok && env.String() == "test" {
160
+ return nil
161
+ }
162
+ return m
163
+ },
164
+ })
165
+ ```
166
+
167
+ ### Scope override
168
+
169
+ Override per-metric user/environment context without changing the global scope:
170
+
171
+ ```go
172
+ customScope := sentry.NewScope()
173
+ customScope.SetUser(sentry.User{ID: "user-42"})
174
+
175
+ meter.Gauge("memory.usage", 512.0,
176
+ sentry.WithUnit(sentry.UnitMebibyte),
177
+ sentry.WithScopeOverride(customScope),
178
+ )
179
+ ```
180
+
181
+ ## MeterOption Reference
182
+
183
+ ```go
184
+ sentry.WithUnit(unit string) // set measurement unit
185
+ sentry.WithAttributes(attrs ...attribute.Builder) // per-call attributes
186
+ sentry.WithScopeOverride(scope *sentry.Scope) // override scope for this metric
187
+ ```
188
+
189
+ ## Unit Constants
190
+
191
+ **Duration:**
192
+
193
+ | Constant | Value |
194
+ | ----------------- | --------------- |
195
+ | `UnitNanosecond` | `"nanosecond"` |
196
+ | `UnitMicrosecond` | `"microsecond"` |
197
+ | `UnitMillisecond` | `"millisecond"` |
198
+ | `UnitSecond` | `"second"` |
199
+ | `UnitMinute` | `"minute"` |
200
+ | `UnitHour` | `"hour"` |
201
+ | `UnitDay` | `"day"` |
202
+ | `UnitWeek` | `"week"` |
203
+
204
+ **Information:**
205
+
206
+ | Constant | Value |
207
+ | -------------- | ------------ |
208
+ | `UnitByte` | `"byte"` |
209
+ | `UnitKilobyte` | `"kilobyte"` |
210
+ | `UnitMegabyte` | `"megabyte"` |
211
+ | `UnitGigabyte` | `"gigabyte"` |
212
+ | `UnitMebibyte` | `"mebibyte"` |
213
+ | `UnitGibibyte` | `"gibibyte"` |
214
+
215
+ **Fraction:**
216
+
217
+ | Constant | Value |
218
+ | ------------- | ----------- |
219
+ | `UnitRatio` | `"ratio"` |
220
+ | `UnitPercent` | `"percent"` |
221
+
222
+ ## Attribute Package
223
+
224
+ ```go
225
+ import "github.com/getsentry/sentry-go/attribute"
226
+
227
+ attribute.String(key, value string) Builder
228
+ attribute.Int(key string, value int) Builder
229
+ attribute.Int64(key string, value int64) Builder
230
+ attribute.Float64(key string, v float64) Builder
231
+ attribute.Bool(key string, v bool) Builder
232
+ ```
233
+
234
+ ## Auto-Attached Attributes
235
+
236
+ | Attribute | Source |
237
+ | ------------------------------ | --------------------------------------------- |
238
+ | `sentry.release` | `ClientOptions.Release` |
239
+ | `sentry.environment` | `ClientOptions.Environment` |
240
+ | `sentry.server.address` | `ClientOptions.ServerName` or `os.Hostname()` |
241
+ | `sentry.sdk.name` / `.version` | SDK identifier |
242
+
243
+ ## Metric Type Reference
244
+
245
+ | Method | Value type | Use for |
246
+ | -------------- | ---------- | ------------------------------------------------------------------ |
247
+ | `Count` | `int64` | Incrementing counters (events, errors, requests) |
248
+ | `Gauge` | `float64` | Current state snapshot (queue depth, memory, connections) |
249
+ | `Distribution` | `float64` | Variable measurements supporting percentiles (latency, file sizes) |
250
+
251
+ Note: `Count` takes `int64`, not `int`. `IntervalSchedule` also takes `int64`.
252
+
253
+ ## Best Practices
254
+
255
+ - Use `Count` for events that accumulate (requests served, emails sent, errors thrown)
256
+ - Use `Gauge` for values that represent current state (queue depth, active connections,
257
+ cache size)
258
+ - Use `Distribution` for latency and sizes — it enables P50/P95/P99 analysis
259
+ - Keep metric names lowercase, dot-separated (`api.response_time`, `queue.depth`)
260
+ - Avoid high-cardinality tag values (user IDs, request IDs) — prefer categorical values
261
+ - Call `meter.SetAttributes()` once with service-level tags rather than repeating them
262
+ on every call
263
+ - Use `meter.WithCtx(ctx)` inside HTTP handlers to link metrics to the active trace span
264
+
265
+ ## Troubleshooting
266
+
267
+ | Issue | Solution |
268
+ | ------------------------- | ---------------------------------------------------------------------------------------- |
269
+ | Metrics not appearing | Check `DisableMetrics` is not `true`; verify `sentry.Flush()` is called |
270
+ | `NewMeter` returns no-op | No client bound to hub; check `sentry.Init` was called |
271
+ | `Count` type error | `count` parameter is `int64`, not `int` — use explicit `int64(n)` cast |
272
+ | Missing attributes | Use `meter.SetAttributes()` for permanent attributes; they apply to all subsequent calls |
273
+ | High-cardinality warnings | Avoid using dynamic values (user IDs, UUIDs) as tag values |
@@ -0,0 +1,46 @@
1
+ # Profiling — Sentry Go SDK
2
+
3
+ > **⚠️ Profiling is not available for Go.**
4
+ >
5
+ > Profiling support was added in v0.22.0 as an alpha feature and **removed in v0.31.0**
6
+ > (breaking change). As of v0.43.0, `ProfilesSampleRate` does not exist in
7
+ > `ClientOptions` and the field will not compile.
8
+
9
+ ## Current Status
10
+
11
+ The Sentry Go SDK **does not support** transaction-based or continuous profiling.
12
+ The `/platforms/go/profiling/` documentation page returns 404.
13
+
14
+ ```go
15
+ // ❌ This does NOT compile on v0.31.0+
16
+ sentry.Init(sentry.ClientOptions{
17
+ EnableTracing: true,
18
+ TracesSampleRate: 1.0,
19
+ ProfilesSampleRate: 1.0, // unknown field — compile error
20
+ })
21
+ ```
22
+
23
+ ## Alternatives
24
+
25
+ For Go application profiling, use these standard approaches independently of Sentry:
26
+
27
+ **pprof (stdlib):**
28
+
29
+ ```go
30
+ import _ "net/http/pprof"
31
+
32
+ // Exposes /debug/pprof/ on your HTTP server
33
+ http.ListenAndServe(":6060", nil)
34
+ ```
35
+
36
+ **Continuous profiling services:**
37
+
38
+ - [Pyroscope](https://pyroscope.io/) — open-source continuous profiling
39
+ - [Google Cloud Profiler](https://cloud.google.com/profiler)
40
+ - [Datadog Continuous Profiler](https://docs.datadoghq.com/profiler/)
41
+
42
+ ## Check for Future Support
43
+
44
+ Monitor the [sentry-go releases](https://github.com/getsentry/sentry-go/releases) and
45
+ [docs.sentry.io/platforms/go/](https://docs.sentry.io/platforms/go/) for profiling to be
46
+ re-introduced.
@@ -0,0 +1,366 @@
1
+ # Tracing — Sentry Go SDK
2
+
3
+ > Minimum SDK: `github.com/getsentry/sentry-go` v0.9.0+
4
+
5
+ ## Configuration
6
+
7
+ ```go
8
+ sentry.Init(sentry.ClientOptions{
9
+ Dsn: os.Getenv("SENTRY_DSN"),
10
+ EnableTracing: true, // REQUIRED — tracing is off by default
11
+ TracesSampleRate: 1.0, // start at 1.0 for dev; lower in production
12
+ })
13
+ ```
14
+
15
+ Key tracing fields in `ClientOptions`:
16
+
17
+ | Option | Type | Default | Purpose |
18
+ | ------------------------- | --------------- | --------- | ------------------------------------------------------------- |
19
+ | `EnableTracing` | `bool` | `false` | Must be `true` to enable tracing |
20
+ | `TracesSampleRate` | `float64` | `0.0` | Uniform sample rate [0.0–1.0] |
21
+ | `TracesSampler` | `TracesSampler` | `nil` | Custom per-transaction sampling; overrides `TracesSampleRate` |
22
+ | `MaxSpans` | `int` | `1000` | Max child spans per transaction |
23
+ | `TracePropagationTargets` | `[]string` | `nil` | URLs to inject trace headers into (nil = all) |
24
+ | `PropagateTraceparent` | `bool` | `false` | Also propagate W3C `traceparent` header |
25
+ | `TraceIgnoreStatusCodes` | `[][]int` | `[[404]]` | HTTP codes that skip trace creation |
26
+ | `BeforeSendTransaction` | `func` | `nil` | Mutate or drop transaction events |
27
+
28
+ ## Code Examples
29
+
30
+ ### Custom sampler
31
+
32
+ Use `TracesSampler` instead of `TracesSampleRate` for per-transaction control.
33
+ Setting both — sampler wins.
34
+
35
+ ```go
36
+ sentry.Init(sentry.ClientOptions{
37
+ Dsn: os.Getenv("SENTRY_DSN"),
38
+ EnableTracing: true,
39
+ TracesSampler: sentry.TracesSampler(func(ctx sentry.SamplingContext) float64 {
40
+ switch ctx.Span.Name {
41
+ case "GET /healthz", "GET /metrics":
42
+ return 0.0 // never sample
43
+ case "POST /checkout":
44
+ return 1.0 // always sample
45
+ default:
46
+ return 0.1 // 10% of everything else
47
+ }
48
+ }),
49
+ })
50
+ ```
51
+
52
+ `SamplingContext` fields:
53
+
54
+ - `ctx.Span` — current span (always non-nil)
55
+ - `ctx.Parent` — parent span (nil for root transactions)
56
+
57
+ ### Manual transactions and spans
58
+
59
+ ```go
60
+ // Start a root transaction
61
+ tx := sentry.StartTransaction(ctx, "process-order",
62
+ sentry.WithOpName("task"),
63
+ sentry.WithTransactionSource(sentry.SourceCustom),
64
+ )
65
+ defer tx.Finish()
66
+
67
+ // Start a child span — pass tx.Context() to nest under the transaction
68
+ dbSpan := sentry.StartSpan(tx.Context(), "db.query")
69
+ dbSpan.Description = "INSERT INTO orders (user_id, total) VALUES (?, ?)"
70
+ dbSpan.SetData("db.system", "postgresql")
71
+ dbSpan.SetData("db.rows_affected", 1)
72
+ defer dbSpan.Finish()
73
+
74
+ // Alternative: StartChild on the parent span directly
75
+ cacheSpan := tx.StartChild("cache.get",
76
+ sentry.WithDescription("get:user:42"),
77
+ )
78
+ defer cacheSpan.Finish()
79
+ ```
80
+
81
+ ### HTTP handler with manual transaction
82
+
83
+ ```go
84
+ http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
85
+ hub := sentry.CurrentHub().Clone()
86
+ ctx := sentry.SetHubOnContext(r.Context(), hub)
87
+
88
+ tx := sentry.StartTransaction(ctx,
89
+ fmt.Sprintf("%s %s", r.Method, r.URL.Path),
90
+ sentry.WithOpName("http.server"),
91
+ sentry.ContinueFromRequest(r), // link to incoming distributed trace
92
+ sentry.WithTransactionSource(sentry.SourceURL),
93
+ )
94
+ defer tx.Finish()
95
+
96
+ users, err := fetchUsers(tx.Context())
97
+ if err != nil {
98
+ hub.CaptureException(err)
99
+ http.Error(w, "internal error", 500)
100
+ return
101
+ }
102
+ fmt.Fprintf(w, "%d users", len(users))
103
+ })
104
+
105
+ func fetchUsers(ctx context.Context) ([]string, error) {
106
+ span := sentry.StartSpan(ctx, "db.query")
107
+ span.Description = "SELECT id, name FROM users"
108
+ span.SetData("db.system", "postgresql")
109
+ defer span.Finish()
110
+
111
+ time.Sleep(10 * time.Millisecond)
112
+ span.Status = sentry.SpanStatusOK
113
+ return []string{"alice", "bob"}, nil
114
+ }
115
+ ```
116
+
117
+ ### Setting span status and data
118
+
119
+ ```go
120
+ span := sentry.StartSpan(ctx, "http.client")
121
+ span.Description = "GET https://api.stripe.com/v1/charges"
122
+ span.SetData("http.request.method", "GET")
123
+ span.SetData("server.address", "api.stripe.com")
124
+
125
+ req, _ := http.NewRequestWithContext(span.Context(), "GET", "https://api.stripe.com/v1/charges", nil)
126
+ resp, err := http.DefaultClient.Do(req)
127
+ if err != nil {
128
+ span.Status = sentry.SpanStatusInternalError
129
+ } else {
130
+ span.Status = sentry.HTTPtoSpanStatus(resp.StatusCode)
131
+ span.SetData("http.response.status_code", resp.StatusCode)
132
+ }
133
+ defer span.Finish()
134
+ ```
135
+
136
+ > `span.Status` is set **directly** — there is no `SetStatus()` method.
137
+
138
+ ### Retrieving active transaction or span from context
139
+
140
+ ```go
141
+ // Root transaction
142
+ tx := sentry.TransactionFromContext(ctx)
143
+ if tx != nil {
144
+ tx.SetTag("user_id", "42")
145
+ tx.Name = "custom-name"
146
+ }
147
+
148
+ // Innermost span (may be a child)
149
+ span := sentry.SpanFromContext(ctx)
150
+ span.SetData("result_count", 47)
151
+ ```
152
+
153
+ ## Framework Middleware
154
+
155
+ All framework middlewares automatically start a root transaction per request and
156
+ continue incoming distributed traces.
157
+
158
+ | Framework | Import | Middleware call | Transaction source |
159
+ | ---------- | ----------------- | ---------------------------------- | ------------------ |
160
+ | `net/http` | `sentry-go/http` | `sentryhttp.New(opts).Handle(mux)` | `SourceURL` |
161
+ | Gin | `sentry-go/gin` | `router.Use(sentrygin.New(opts))` | `SourceRoute` |
162
+ | Echo | `sentry-go/echo` | `e.Use(sentryecho.New(opts))` | `SourceRoute` |
163
+ | Fiber | `sentry-go/fiber` | `app.Use(sentryfiber.New(opts))` | `SourceURL` |
164
+ | Iris | `sentry-go/iris` | `app.Use(sentryiris.New(opts))` | `SourceRoute` |
165
+
166
+ Accessing the current transaction in a framework handler:
167
+
168
+ ```go
169
+ // net/http — use the standard context
170
+ tx := sentry.TransactionFromContext(r.Context())
171
+
172
+ // Gin
173
+ tx := sentrygin.GetSpanFromContext(c)
174
+
175
+ // Echo
176
+ tx := sentryecho.GetSpanFromContext(c)
177
+
178
+ // Fiber
179
+ tx := sentryfiber.GetSpanFromContext(c)
180
+
181
+ // Iris
182
+ tx := sentryiris.GetSpanFromContext(c)
183
+ ```
184
+
185
+ Adding a child span in a Gin handler:
186
+
187
+ ```go
188
+ router.GET("/users/:id", func(c *gin.Context) {
189
+ tx := sentrygin.GetSpanFromContext(c)
190
+
191
+ dbSpan := sentry.StartSpan(tx.Context(), "db.query")
192
+ dbSpan.Description = "SELECT * FROM users WHERE id = ?"
193
+ defer dbSpan.Finish()
194
+
195
+ // handler logic...
196
+ })
197
+ ```
198
+
199
+ ## Distributed Tracing
200
+
201
+ Sentry propagates two headers:
202
+
203
+ | Header | Constant | Purpose |
204
+ | -------------- | ---------------------------- | --------------------------- |
205
+ | `sentry-trace` | `sentry.SentryTraceHeader` | Links spans across services |
206
+ | `baggage` | `sentry.SentryBaggageHeader` | Dynamic Sampling Context |
207
+
208
+ **Consuming an incoming trace (downstream service):**
209
+
210
+ ```go
211
+ // ContinueFromRequest reads both sentry-trace and baggage headers automatically
212
+ tx := sentry.StartTransaction(ctx, "GET /api/check",
213
+ sentry.WithOpName("http.server"),
214
+ sentry.ContinueFromRequest(r),
215
+ sentry.WithTransactionSource(sentry.SourceRoute),
216
+ )
217
+ defer tx.Finish()
218
+ ```
219
+
220
+ **Propagating to an outgoing request (upstream service):**
221
+
222
+ ```go
223
+ func callDownstream(ctx context.Context, url string) {
224
+ hub := sentry.GetHubFromContext(ctx)
225
+
226
+ req, _ := http.NewRequest("GET", url, nil)
227
+ req.Header.Set(sentry.SentryTraceHeader, hub.GetTraceparent())
228
+ req.Header.Set(sentry.SentryBaggageHeader, hub.GetBaggage())
229
+
230
+ http.DefaultClient.Do(req)
231
+ }
232
+ ```
233
+
234
+ **Hub header methods:**
235
+
236
+ ```go
237
+ hub.GetTraceparent() // sentry-trace format: "traceID-spanID-sampled"
238
+ hub.GetTraceparentW3C() // W3C format: "00-traceID-spanID-01"
239
+ hub.GetBaggage() // "sentry-trace_id=...,sentry-environment=production,..."
240
+ ```
241
+
242
+ Both `sentry-trace` AND `baggage` headers must be propagated for correct Dynamic
243
+ Sampling Context.
244
+
245
+ ### OpenTelemetry bridge
246
+
247
+ For projects already using OpenTelemetry, forward OTel spans to Sentry without changing
248
+ instrumentation:
249
+
250
+ ```go
251
+ import (
252
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
253
+ sentryotel "github.com/getsentry/sentry-go/otel"
254
+ "go.opentelemetry.io/otel"
255
+ "go.opentelemetry.io/otel/propagation"
256
+ )
257
+
258
+ sentry.Init(sentry.ClientOptions{
259
+ Dsn: os.Getenv("SENTRY_DSN"),
260
+ EnableTracing: true,
261
+ TracesSampleRate: 1.0,
262
+ })
263
+
264
+ tp := sdktrace.NewTracerProvider(
265
+ sdktrace.WithSpanProcessor(sentryotel.NewSentrySpanProcessor()),
266
+ )
267
+ otel.SetTracerProvider(tp)
268
+ otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(
269
+ propagation.TraceContext{},
270
+ propagation.Baggage{},
271
+ sentryotel.NewSentryPropagator(),
272
+ ))
273
+ ```
274
+
275
+ When using OTel, pass the OTel context explicitly when capturing errors — global
276
+ `sentry.CaptureException` does not auto-link:
277
+
278
+ ```go
279
+ hub := sentry.CurrentHub()
280
+ hub.Client().CaptureException(
281
+ err,
282
+ &sentry.EventHint{Context: otelCtx},
283
+ hub.Scope(),
284
+ )
285
+ ```
286
+
287
+ ## SpanOption Reference
288
+
289
+ ```go
290
+ sentry.WithOpName("http.server") // sets span.Op
291
+ sentry.WithDescription("SELECT * FROM users") // sets span.Description
292
+ sentry.WithTransactionName("checkout") // sets root span name
293
+ sentry.WithTransactionSource(sentry.SourceRoute) // transaction naming source
294
+ sentry.WithSpanSampled(sentry.SampledTrue) // force-sample this span
295
+ sentry.ContinueFromRequest(r *http.Request) // read sentry-trace + baggage from request
296
+ sentry.ContinueFromHeaders(trace, baggage string)// pass raw header strings
297
+ sentry.ContinueTrace(hub, traceparent, baggage) // hub-aware form
298
+ ```
299
+
300
+ ## TransactionSource Constants
301
+
302
+ | Constant | Value | Use when … |
303
+ | -------------- | ---------- | --------------------------------------------------------- |
304
+ | `SourceURL` | `"url"` | Raw URL path (low-cardinality risk) |
305
+ | `SourceRoute` | `"route"` | Parameterised template, e.g. `/users/:id` — **preferred** |
306
+ | `SourceView` | `"view"` | View/controller name |
307
+ | `SourceCustom` | `"custom"` | Manually set name |
308
+ | `SourceTask` | `"task"` | Background task name |
309
+
310
+ Use `SourceRoute` with parameterised paths to prevent high-cardinality grouping in
311
+ Sentry’s Performance UI.
312
+
313
+ ## SpanStatus Constants
314
+
315
+ Set directly: `span.Status = sentry.SpanStatusOK`
316
+
317
+ | Constant | When to use |
318
+ | ---------------------------- | ---------------------- |
319
+ | `SpanStatusOK` | Success |
320
+ | `SpanStatusInternalError` | Unhandled server error |
321
+ | `SpanStatusNotFound` | Resource not found |
322
+ | `SpanStatusPermissionDenied` | Auth failure |
323
+ | `SpanStatusDeadlineExceeded` | Timeout |
324
+ | `SpanStatusInvalidArgument` | Bad input |
325
+ | `SpanStatusUnavailable` | Service unavailable |
326
+
327
+ Or derive from HTTP response: `span.Status = sentry.HTTPtoSpanStatus(resp.StatusCode)`
328
+
329
+ ## Common Span Op Values
330
+
331
+ | Op | Usage |
332
+ | --------------------------------- | ------------------------------- |
333
+ | `http.server` | Incoming HTTP requests |
334
+ | `http.client` | Outgoing HTTP calls |
335
+ | `db.query` | SQL SELECT/INSERT/UPDATE/DELETE |
336
+ | `db` | Generic database operation |
337
+ | `cache.get` / `cache.set` | Cache reads/writes |
338
+ | `queue.publish` / `queue.process` | Message queues |
339
+ | `function` | Generic function call |
340
+ | `task` | Background job |
341
+ | `grpc.server` / `grpc.client` | gRPC spans |
342
+
343
+ ## Best Practices
344
+
345
+ - Set `EnableTracing: true` explicitly — it defaults to `false`
346
+ - Use `TracesSampler` (not `TracesSampleRate`) for any environment-specific or
347
+ route-specific sampling logic
348
+ - Always `defer span.Finish()` — unfinished spans are silently dropped
349
+ - Use `SourceRoute` with parameterised route templates to avoid high-cardinality
350
+ transaction names
351
+ - Use `ContinueFromRequest(r)` in every HTTP handler to preserve distributed traces
352
+ - Propagate both `sentry-trace` AND `baggage` headers on outgoing requests
353
+ - Don’t set `MaxSpans` below the number of expected child spans in your largest
354
+ transactions
355
+
356
+ ## Troubleshooting
357
+
358
+ | Issue | Solution |
359
+ | ---------------------------------- | ----------------------------------------------------------------------------------- |
360
+ | No transactions appearing | Ensure `EnableTracing: true` and `TracesSampleRate > 0` |
361
+ | Spans missing from transaction | Ensure `defer span.Finish()` is called on every span |
362
+ | High-cardinality transaction names | Use `WithTransactionSource(SourceRoute)` with parameterised route templates |
363
+ | Distributed trace not linked | Propagate both `sentry-trace` and `baggage` headers; use `ContinueFromRequest` |
364
+ | Health checks polluting data | Use `TracesSampler` to return `0.0` for health endpoints |
365
+ | Too many spans | Lower `MaxSpans`; coalesce high-frequency child spans (e.g., N+1 DB calls) |
366
+ | OTel errors not linked to trace | Pass OTel `ctx` via `EventHint.Context`; don’t use global `sentry.CaptureException` |