@danieljvdm/dev-kit 1.0.2 → 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 (329) hide show
  1. package/README.md +6 -6
  2. package/package.json +1 -1
  3. package/skill-sources.jsonc +2 -33
  4. package/skill-sources.lock.json +15 -117
  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 +10 -70
  45. package/skills/open-pull-request/references/evidence.md +22 -0
  46. package/skills/open-pull-request/references/explanation.md +21 -0
  47. package/skills/open-pull-request/references/publication.md +21 -0
  48. package/skills/sentry/LICENSE +202 -0
  49. package/skills/sentry/LICENSE-UPSTREAM +21 -0
  50. package/skills/sentry/NOTICE +14 -0
  51. package/skills/sentry/SKILL.md +33 -0
  52. package/skills/sentry/references/alert-payloads.md +105 -0
  53. package/skills/sentry/references/alerts.md +17 -0
  54. package/skills/sentry/references/artifacts.md +25 -0
  55. package/skills/sentry/references/auth-token.md +65 -0
  56. package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
  57. package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
  58. package/skills/sentry/references/concepts/crons.md +50 -0
  59. package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
  60. package/skills/sentry/references/concepts/errors.md +40 -0
  61. package/skills/sentry/references/concepts/logging.md +85 -0
  62. package/skills/sentry/references/concepts/metrics.md +49 -0
  63. package/skills/sentry/references/concepts/monitors.md +78 -0
  64. package/skills/sentry/references/concepts/profiling.md +38 -0
  65. package/skills/sentry/references/concepts/reduce-volume.md +49 -0
  66. package/skills/sentry/references/concepts/releases.md +43 -0
  67. package/skills/sentry/references/concepts/session-replay.md +35 -0
  68. package/skills/sentry/references/concepts/tracing.md +54 -0
  69. package/skills/sentry/references/concepts/user-feedback.md +36 -0
  70. package/skills/sentry/references/debug-artifacts/android.md +68 -0
  71. package/skills/sentry/references/debug-artifacts/apple.md +96 -0
  72. package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
  73. package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
  74. package/skills/sentry/references/debug-artifacts/index.md +75 -0
  75. package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
  76. package/skills/sentry/references/debug-artifacts/matching.md +73 -0
  77. package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
  78. package/skills/sentry/references/first-error-setup.md +25 -0
  79. package/skills/sentry/references/instrumentation.md +30 -0
  80. package/skills/sentry/references/issues.md +32 -0
  81. package/skills/sentry/references/new-project.md +17 -0
  82. package/skills/sentry/references/otel-exporter.md +30 -0
  83. package/skills/sentry/references/release-workflow.md +31 -0
  84. package/skills/sentry/references/releases/ci-pipeline.md +214 -0
  85. package/skills/sentry/references/releases/index.md +93 -0
  86. package/skills/sentry/references/releases/suspect-commits.md +155 -0
  87. package/skills/sentry/references/releases/tagging.md +131 -0
  88. package/skills/sentry/references/releases/troubleshooting.md +67 -0
  89. package/skills/sentry/references/sdks/android/crons.md +305 -0
  90. package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
  91. package/skills/sentry/references/sdks/android/index.md +748 -0
  92. package/skills/sentry/references/sdks/android/integrations.md +48 -0
  93. package/skills/sentry/references/sdks/android/logging.md +374 -0
  94. package/skills/sentry/references/sdks/android/metrics.md +288 -0
  95. package/skills/sentry/references/sdks/android/profiling.md +397 -0
  96. package/skills/sentry/references/sdks/android/session-replay.md +406 -0
  97. package/skills/sentry/references/sdks/android/tracing.md +861 -0
  98. package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
  99. package/skills/sentry/references/sdks/browser/index.md +714 -0
  100. package/skills/sentry/references/sdks/browser/logging.md +315 -0
  101. package/skills/sentry/references/sdks/browser/profiling.md +236 -0
  102. package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
  103. package/skills/sentry/references/sdks/browser/tracing.md +561 -0
  104. package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
  105. package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
  106. package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
  107. package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
  108. package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
  109. package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
  110. package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
  111. package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
  112. package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
  113. package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
  114. package/skills/sentry/references/sdks/cocoa/index.md +497 -0
  115. package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
  116. package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
  117. package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
  118. package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
  119. package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
  120. package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
  121. package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
  122. package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
  123. package/skills/sentry/references/sdks/dotnet/index.md +614 -0
  124. package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
  125. package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
  126. package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
  127. package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
  128. package/skills/sentry/references/sdks/elixir/crons.md +371 -0
  129. package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
  130. package/skills/sentry/references/sdks/elixir/index.md +383 -0
  131. package/skills/sentry/references/sdks/elixir/logging.md +239 -0
  132. package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
  133. package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
  134. package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
  135. package/skills/sentry/references/sdks/flutter/index.md +728 -0
  136. package/skills/sentry/references/sdks/flutter/logging.md +387 -0
  137. package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
  138. package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
  139. package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
  140. package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
  141. package/skills/sentry/references/sdks/go/crons.md +270 -0
  142. package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
  143. package/skills/sentry/references/sdks/go/index.md +324 -0
  144. package/skills/sentry/references/sdks/go/logging.md +354 -0
  145. package/skills/sentry/references/sdks/go/metrics.md +273 -0
  146. package/skills/sentry/references/sdks/go/profiling.md +46 -0
  147. package/skills/sentry/references/sdks/go/tracing.md +366 -0
  148. package/skills/sentry/references/sdks/index.md +41 -0
  149. package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
  150. package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
  151. package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
  152. package/skills/sentry/references/sdks/nestjs/index.md +699 -0
  153. package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
  154. package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
  155. package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
  156. package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
  157. package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
  158. package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
  159. package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
  160. package/skills/sentry/references/sdks/nextjs/index.md +491 -0
  161. package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
  162. package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
  163. package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
  164. package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
  165. package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
  166. package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
  167. package/skills/sentry/references/sdks/node/crons.md +432 -0
  168. package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
  169. package/skills/sentry/references/sdks/node/index.md +942 -0
  170. package/skills/sentry/references/sdks/node/logging.md +380 -0
  171. package/skills/sentry/references/sdks/node/metrics.md +278 -0
  172. package/skills/sentry/references/sdks/node/profiling.md +373 -0
  173. package/skills/sentry/references/sdks/node/tracing.md +878 -0
  174. package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
  175. package/skills/sentry/references/sdks/php/crons.md +265 -0
  176. package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
  177. package/skills/sentry/references/sdks/php/index.md +362 -0
  178. package/skills/sentry/references/sdks/php/laravel.md +542 -0
  179. package/skills/sentry/references/sdks/php/logging.md +242 -0
  180. package/skills/sentry/references/sdks/php/metrics.md +193 -0
  181. package/skills/sentry/references/sdks/php/profiling.md +115 -0
  182. package/skills/sentry/references/sdks/php/symfony.md +552 -0
  183. package/skills/sentry/references/sdks/php/tracing.md +516 -0
  184. package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
  185. package/skills/sentry/references/sdks/python/crons.md +218 -0
  186. package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
  187. package/skills/sentry/references/sdks/python/index.md +361 -0
  188. package/skills/sentry/references/sdks/python/logging.md +234 -0
  189. package/skills/sentry/references/sdks/python/metrics.md +154 -0
  190. package/skills/sentry/references/sdks/python/profiling.md +120 -0
  191. package/skills/sentry/references/sdks/python/tracing.md +364 -0
  192. package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
  193. package/skills/sentry/references/sdks/react/index.md +492 -0
  194. package/skills/sentry/references/sdks/react/logging.md +364 -0
  195. package/skills/sentry/references/sdks/react/profiling.md +322 -0
  196. package/skills/sentry/references/sdks/react/react-features.md +1272 -0
  197. package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
  198. package/skills/sentry/references/sdks/react/tracing.md +1415 -0
  199. package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
  200. package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
  201. package/skills/sentry/references/sdks/react-native/index.md +1030 -0
  202. package/skills/sentry/references/sdks/react-native/logging.md +444 -0
  203. package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
  204. package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
  205. package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
  206. package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
  207. package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
  208. package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
  209. package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
  210. package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
  211. package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
  212. package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
  213. package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
  214. package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
  215. package/skills/sentry/references/sdks/ruby/crons.md +184 -0
  216. package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
  217. package/skills/sentry/references/sdks/ruby/index.md +297 -0
  218. package/skills/sentry/references/sdks/ruby/logging.md +168 -0
  219. package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
  220. package/skills/sentry/references/sdks/ruby/migration.md +321 -0
  221. package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
  222. package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
  223. package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
  224. package/skills/sentry/references/sdks/svelte/index.md +467 -0
  225. package/skills/sentry/references/sdks/svelte/logging.md +344 -0
  226. package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
  227. package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
  228. package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
  229. package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
  230. package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
  231. package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
  232. package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
  233. package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
  234. package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
  235. package/skills/sentry/references/search-query-language.md +226 -0
  236. package/skills/sentry/references/semantics/angular.md +7 -0
  237. package/skills/sentry/references/semantics/app.md +28 -0
  238. package/skills/sentry/references/semantics/art.md +17 -0
  239. package/skills/sentry/references/semantics/aws.md +43 -0
  240. package/skills/sentry/references/semantics/browser.md +34 -0
  241. package/skills/sentry/references/semantics/cache.md +12 -0
  242. package/skills/sentry/references/semantics/client.md +8 -0
  243. package/skills/sentry/references/semantics/cloud.md +12 -0
  244. package/skills/sentry/references/semantics/cloudflare.md +23 -0
  245. package/skills/sentry/references/semantics/code.md +11 -0
  246. package/skills/sentry/references/semantics/culture.md +11 -0
  247. package/skills/sentry/references/semantics/db.md +21 -0
  248. package/skills/sentry/references/semantics/device.md +43 -0
  249. package/skills/sentry/references/semantics/error.md +7 -0
  250. package/skills/sentry/references/semantics/event.md +8 -0
  251. package/skills/sentry/references/semantics/exception.md +10 -0
  252. package/skills/sentry/references/semantics/faas.md +19 -0
  253. package/skills/sentry/references/semantics/file.md +8 -0
  254. package/skills/sentry/references/semantics/flag.md +7 -0
  255. package/skills/sentry/references/semantics/gcp.md +16 -0
  256. package/skills/sentry/references/semantics/gen_ai.md +53 -0
  257. package/skills/sentry/references/semantics/general.md +11 -0
  258. package/skills/sentry/references/semantics/graphql.md +9 -0
  259. package/skills/sentry/references/semantics/grpc.md +19 -0
  260. package/skills/sentry/references/semantics/http.md +34 -0
  261. package/skills/sentry/references/semantics/index.md +63 -0
  262. package/skills/sentry/references/semantics/jsonrpc.md +8 -0
  263. package/skills/sentry/references/semantics/jvm.md +12 -0
  264. package/skills/sentry/references/semantics/koa.md +7 -0
  265. package/skills/sentry/references/semantics/logger.md +7 -0
  266. package/skills/sentry/references/semantics/mcp.md +37 -0
  267. package/skills/sentry/references/semantics/mdc.md +7 -0
  268. package/skills/sentry/references/semantics/messaging.md +23 -0
  269. package/skills/sentry/references/semantics/middleware.md +7 -0
  270. package/skills/sentry/references/semantics/navigation.md +9 -0
  271. package/skills/sentry/references/semantics/nel.md +11 -0
  272. package/skills/sentry/references/semantics/network.md +17 -0
  273. package/skills/sentry/references/semantics/os.md +15 -0
  274. package/skills/sentry/references/semantics/otel.md +10 -0
  275. package/skills/sentry/references/semantics/params.md +7 -0
  276. package/skills/sentry/references/semantics/process.md +14 -0
  277. package/skills/sentry/references/semantics/react.md +7 -0
  278. package/skills/sentry/references/semantics/remix.md +7 -0
  279. package/skills/sentry/references/semantics/resource.md +7 -0
  280. package/skills/sentry/references/semantics/rpc.md +10 -0
  281. package/skills/sentry/references/semantics/score.md +10 -0
  282. package/skills/sentry/references/semantics/sentry.md +69 -0
  283. package/skills/sentry/references/semantics/server.md +8 -0
  284. package/skills/sentry/references/semantics/service.md +8 -0
  285. package/skills/sentry/references/semantics/session.md +7 -0
  286. package/skills/sentry/references/semantics/state.md +7 -0
  287. package/skills/sentry/references/semantics/thread.md +8 -0
  288. package/skills/sentry/references/semantics/timber.md +7 -0
  289. package/skills/sentry/references/semantics/trpc.md +8 -0
  290. package/skills/sentry/references/semantics/ui.md +18 -0
  291. package/skills/sentry/references/semantics/url.md +15 -0
  292. package/skills/sentry/references/semantics/user.md +17 -0
  293. package/skills/sentry/references/semantics/user_agent.md +7 -0
  294. package/skills/sentry/references/semantics/vercel.md +42 -0
  295. package/skills/sentry/references/setup-verification.md +39 -0
  296. package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
  297. package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
  298. package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
  299. package/skills/sentry/references/snapshots/index.md +19 -0
  300. package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
  301. package/skills/sentry/references/snapshots/snapshots.md +123 -0
  302. package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
  303. package/skills/testing/LICENSE +21 -0
  304. package/skills/testing/NOTICE +7 -0
  305. package/skills/testing/SKILL.md +13 -19
  306. package/skills/testing/agents/openai.yaml +1 -2
  307. package/skills/testing/references/selection.md +23 -0
  308. package/skills/testing/references/tdd.md +19 -0
  309. package/skills/testing/references/test-design.md +17 -0
  310. package/src/catalog.ts +1 -7
  311. package/skills/build-effect-apis/SKILL.md +0 -81
  312. package/skills/build-effect-apis/agents/openai.yaml +0 -4
  313. package/skills/build-effect-clis/SKILL.md +0 -92
  314. package/skills/build-effect-clis/agents/openai.yaml +0 -4
  315. package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
  316. package/skills/effect-atom-state/SKILL.md +0 -97
  317. package/skills/effect-atom-state/agents/openai.yaml +0 -4
  318. package/skills/effect-ts/SKILL.md +0 -35
  319. package/skills/effect-ts/agents/openai.yaml +0 -4
  320. /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
  321. /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
  322. /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
  323. /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
  324. /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
  325. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
  326. /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
  327. /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
  328. /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
  329. /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
@@ -0,0 +1,628 @@
1
+ # Tracing — Sentry Next.js SDK
2
+
3
+ > Minimum SDK: `@sentry/nextjs` ≥8.0.0\
4
+ > `withServerActionInstrumentation`: ≥8.0.0\
5
+ > `enableLongAnimationFrame`: ≥8.18.0\
6
+ > `ignoreSpans`: ≥10.2.0
7
+
8
+ ---
9
+
10
+ ## How Tracing Is Activated
11
+
12
+ Tracing is enabled by setting **`tracesSampleRate`** or **`tracesSampler`** in all three
13
+ runtime config files.
14
+ Without one of these, no spans are created.
15
+
16
+ | Config file | Runtime | What it traces |
17
+ | --------------------------- | ------- | -------------------------------------------------------------- |
18
+ | `instrumentation-client.ts` | Browser | Page loads, navigations, fetch/XHR, Web Vitals, INP |
19
+ | `sentry.server.config.ts` | Node.js | API routes, RSC renders, `getServerSideProps`, background work |
20
+ | `sentry.edge.config.ts` | Edge | Next.js middleware |
21
+
22
+ > ⚠️ **All three must have tracing configured.** Missing one means that runtime produces
23
+ > no spans.
24
+
25
+ ---
26
+
27
+ ## `tracesSampleRate` — Uniform Sampling
28
+
29
+ A number between `0.0` and `1.0`. Set the same option in all three configs:
30
+
31
+ ```typescript
32
+ // Recommended: 100% in development, lower in production
33
+ tracesSampleRate: process.env.NODE_ENV === "development" ? 1.0 : 0.1,
34
+ ```
35
+
36
+ > **To disable tracing entirely:** omit both `tracesSampleRate` and `tracesSampler`.
37
+ > Setting `tracesSampleRate: 0` is not the same — it still activates instrumentation but
38
+ > sends nothing.
39
+
40
+ ---
41
+
42
+ ## `tracesSampler` — Dynamic Per-Request Sampling
43
+
44
+ When defined, `tracesSampler` takes **precedence** over `tracesSampleRate`. Receives a
45
+ `SamplingContext` and returns a number (0–1) or boolean.
46
+
47
+ ```typescript
48
+ // TypeScript: SamplingContext shape
49
+ interface SamplingContext {
50
+ name: string; // e.g. "GET /api/users"
51
+ attributes: SpanAttributes | undefined;
52
+ parentSampled: boolean | undefined; // parent's sampling decision
53
+ parentSampleRate: number | undefined;
54
+ inheritOrSampleWith: (fallbackRate: number) => number;
55
+ }
56
+ ```
57
+
58
+ ### Route-Based Sampling
59
+
60
+ ```typescript
61
+ Sentry.init({
62
+ tracesSampler: ({ name, inheritOrSampleWith }) => {
63
+ // Always drop health checks
64
+ if (name.includes("/health") || name.includes("/ping")) return 0;
65
+
66
+ // Always sample critical flows
67
+ if (name.includes("/checkout") || name.includes("/payment")) return 1.0;
68
+
69
+ // Sample admin routes at 50%
70
+ if (name.includes("/admin")) return 0.5;
71
+
72
+ // For everything else: honor parent's decision, fall back to 10%
73
+ return inheritOrSampleWith(0.1);
74
+ },
75
+ });
76
+ ```
77
+
78
+ ### With Parent Trace Inheritance
79
+
80
+ ```typescript
81
+ Sentry.init({
82
+ tracesSampler: ({ name, parentSampled, inheritOrSampleWith }) => {
83
+ if (name.includes("healthcheck")) return 0;
84
+ if (name.includes("auth")) return 1;
85
+ // inheritOrSampleWith: respects parent decision if present, else uses fallback
86
+ return inheritOrSampleWith(0.5);
87
+ },
88
+ });
89
+ ```
90
+
91
+ **Why use `inheritOrSampleWith` instead of checking `parentSampled` directly?**\
92
+ It ensures consistent rates flow through distributed traces, enables accurate metric
93
+ extrapolation, and sets the correct `sentry-sampled` value in downstream `baggage`.
94
+
95
+ ### Sampling Precedence
96
+
97
+ 1. `tracesSampler` function (if defined) — evaluated first
98
+ 2. Parent’s sampling decision (propagated via `sentry-trace` header)
99
+ 3. `tracesSampleRate` (uniform fallback)
100
+
101
+ ---
102
+
103
+ ## Auto-Instrumented Operations
104
+
105
+ ### Client-Side (Browser)
106
+
107
+ | Operation | Op | What’s captured |
108
+ | ---------------------- | ------------------------- | --------------------------------------------------------- |
109
+ | Initial page load | `pageload` | LCP, CLS, FCP, TTFB Web Vitals; resource load child spans |
110
+ | Client-side navigation | `navigation` | Route change duration; child fetch/XHR spans |
111
+ | `fetch()` requests | `http.client` | URL, method, status code, duration, HTTP timings |
112
+ | `XMLHttpRequest` | `http.client` | Same as fetch |
113
+ | User interactions | `ui.interaction` | INP (Interaction to Next Paint) — emitted on page hide |
114
+ | Long Tasks (> 50ms) | `ui.long-task` | Main-thread blocking events |
115
+ | Long Animation Frames | `ui.long-animation-frame` | LoAF rendering work — SDK ≥8.18.0 |
116
+
117
+ ### Server-Side (Node.js)
118
+
119
+ | Operation | Op | Notes |
120
+ | --------------------------------- | ------------- | ---------------------------------------- |
121
+ | API route handlers (App Router) | `http.server` | `app/api/*/route.ts` — auto-instrumented |
122
+ | API route handlers (Pages Router) | `http.server` | `pages/api/*.ts` — auto-instrumented |
123
+ | React Server Components | `http.server` | RSC render times |
124
+ | `getServerSideProps` | `http.server` | Pages Router SSR data fetching |
125
+ | Edge Middleware | `http.server` | Via `sentry.edge.config.ts` |
126
+
127
+ > ⚠️ **Server Actions are NOT auto-instrumented.** Wrap each with
128
+ > `withServerActionInstrumentation()` — see below.
129
+
130
+ ---
131
+
132
+ ## `browserTracingIntegration` Options
133
+
134
+ ```typescript
135
+ // instrumentation-client.ts
136
+ Sentry.init({
137
+ integrations: [
138
+ Sentry.browserTracingIntegration({
139
+ // Page Load & Navigation
140
+ instrumentPageLoad: true, // default: true
141
+ instrumentNavigation: true, // default: true
142
+
143
+ // HTTP spans
144
+ traceFetch: true, // default: true
145
+ traceXHR: true, // default: true
146
+ enableHTTPTimings: true, // default: true
147
+ shouldCreateSpanForRequest: (url) => !url.includes("/health"),
148
+
149
+ // Performance observations
150
+ enableLongTask: true, // default: true
151
+ enableLongAnimationFrame: true, // default: true (SDK ≥8.18.0)
152
+ enableInp: true, // INP spans
153
+
154
+ // Span lifecycle
155
+ idleTimeout: 1000, // ms: wait after last child before ending
156
+ finalTimeout: 30000, // ms: hard cap on span duration
157
+ childSpanTimeout: 15000, // ms: max time for child spans
158
+
159
+ // Span naming — parameterize URLs
160
+ beforeStartSpan: (context) => ({
161
+ ...context,
162
+ name: context.name.replace(/\/\d+/g, "/<id>"),
163
+ }),
164
+
165
+ // Span filtering
166
+ ignoreResourceSpans: ["resource.css", "resource.script", "resource.img"],
167
+ }),
168
+ ],
169
+ });
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Custom Spans
175
+
176
+ ### `Sentry.startSpan()` — Active, Auto-Ending (Recommended)
177
+
178
+ Wraps a block of work.
179
+ The span becomes active (children nest under it) and ends automatically when the
180
+ callback returns or resolves:
181
+
182
+ ```typescript
183
+ // Async
184
+ const data = await Sentry.startSpan(
185
+ {
186
+ name: "fetchUserProfile",
187
+ op: "http.client",
188
+ attributes: { "user.id": userId, "cache.hit": false },
189
+ },
190
+ async () => {
191
+ const res = await fetch(`/api/users/${userId}`);
192
+ return res.json();
193
+ },
194
+ );
195
+
196
+ // Sync
197
+ const result = Sentry.startSpan({ name: "computeRecommendations", op: "function" }, () =>
198
+ expensiveComputation(),
199
+ );
200
+ ```
201
+
202
+ ### Nested Spans (Parent–Child Hierarchy)
203
+
204
+ ```typescript
205
+ await Sentry.startSpan({ name: "checkout-flow", op: "function" }, async () => {
206
+ // These are automatically children of "checkout-flow"
207
+ const cart = await Sentry.startSpan({ name: "fetchCart", op: "db.query" }, () =>
208
+ db.cart.findUnique({ where: { userId } }),
209
+ );
210
+
211
+ const payment = await Sentry.startSpan({ name: "processPayment", op: "http.client" }, () =>
212
+ stripe.paymentIntents.create({ amount: cart.total }),
213
+ );
214
+
215
+ return { cart, payment };
216
+ });
217
+ ```
218
+
219
+ ### `Sentry.startSpanManual()` — Active, Manual End
220
+
221
+ Use when the span lifetime cannot be enclosed in a callback:
222
+
223
+ ```typescript
224
+ function authMiddleware(req: Request, res: Response, next: NextFunction) {
225
+ return Sentry.startSpanManual({ name: "auth.verify", op: "middleware" }, (span) => {
226
+ res.once("finish", () => {
227
+ span.setStatus({ code: res.statusCode < 400 ? 1 : 2 });
228
+ span.end(); // ← required
229
+ });
230
+ return next();
231
+ });
232
+ }
233
+ ```
234
+
235
+ ### `Sentry.startInactiveSpan()` — Not Active, Manual End
236
+
237
+ Creates a span that is **never** automatically made active.
238
+ Use for parallel work or event-based tracking:
239
+
240
+ ```typescript
241
+ // Parallel independent operations
242
+ const spanA = Sentry.startInactiveSpan({ name: "operation-a" });
243
+ const spanB = Sentry.startInactiveSpan({ name: "operation-b" });
244
+
245
+ await Promise.all([doA(), doB()]);
246
+
247
+ spanA.end();
248
+ spanB.end();
249
+
250
+ // Explicit parent assignment
251
+ const parent = Sentry.startInactiveSpan({ name: "parent" });
252
+ const child = Sentry.startInactiveSpan({ name: "child", parentSpan: parent });
253
+ child.end();
254
+ parent.end();
255
+ ```
256
+
257
+ ### Browser: `setActiveSpanInBrowser()` — Persistent Active Span
258
+
259
+ When a callback-based API isn’t practical (e.g., UI event handlers), keep a span active
260
+ across event calls. Available since SDK v10.15.0:
261
+
262
+ ```typescript
263
+ let checkoutSpan: Sentry.Span | undefined;
264
+
265
+ onCheckoutStart(() => {
266
+ checkoutSpan = Sentry.startInactiveSpan({ name: "checkout-flow" });
267
+ Sentry.setActiveSpanInBrowser(checkoutSpan);
268
+ });
269
+
270
+ onCheckoutComplete(() => {
271
+ checkoutSpan?.end();
272
+ });
273
+ ```
274
+
275
+ > ⚠️ `setActiveSpanInBrowser` is **browser-only**.
276
+
277
+ ---
278
+
279
+ ## Span Options Reference
280
+
281
+ ```typescript
282
+ interface StartSpanOptions {
283
+ name: string; // Required: label shown in the UI
284
+ op?: string; // Operation category (see table below)
285
+ attributes?: Record<string, string | number | boolean>;
286
+ parentSpan?: Span; // Override automatic parent
287
+ onlyIfParent?: boolean; // Skip span if no active parent exists
288
+ forceTransaction?: boolean; // Force display as root transaction in UI
289
+ startTime?: number; // Unix timestamp in seconds
290
+ }
291
+ ```
292
+
293
+ **Common `op` values:**
294
+
295
+ | `op` | Use for |
296
+ | --------------------------------- | ---------------------------------------- |
297
+ | `http.client` | Outgoing HTTP requests (fetch, XHR) |
298
+ | `http.server` | Incoming HTTP requests (API routes, SSR) |
299
+ | `db` / `db.query` | Database queries |
300
+ | `db.redis` | Redis operations |
301
+ | `function` | General function calls |
302
+ | `ui.render` | Component render time |
303
+ | `ui.action.click` | Click event handling |
304
+ | `cache.get` / `cache.put` | Cache reads/writes |
305
+ | `queue.publish` / `queue.process` | Message queue operations |
306
+ | `task` | Background / scheduled work |
307
+
308
+ ---
309
+
310
+ ## Span Enrichment
311
+
312
+ ```typescript
313
+ // Set attributes on the currently active span
314
+ const span = Sentry.getActiveSpan();
315
+ if (span) {
316
+ span.setAttribute("db.table", "users");
317
+ span.setAttributes({
318
+ "http.method": "POST",
319
+ "order.total": 99.99,
320
+ "user.tier": "premium",
321
+ });
322
+
323
+ // Status: 0=unset, 1=ok, 2=error
324
+ span.setStatus({ code: 1 });
325
+ span.setStatus({ code: 2, message: "Payment declined" });
326
+ }
327
+
328
+ // Rename a span at runtime
329
+ const span = Sentry.getActiveSpan();
330
+ if (span) Sentry.updateSpanName(span, "GET /users/:id");
331
+
332
+ // Modify all spans globally before sending
333
+ Sentry.init({
334
+ beforeSendSpan(span) {
335
+ span.data = {
336
+ ...span.data,
337
+ "deployment.region": process.env.AWS_REGION ?? "unknown",
338
+ };
339
+ return span; // return null to drop (but prefer ignoreSpans for that)
340
+ },
341
+ });
342
+ ```
343
+
344
+ ---
345
+
346
+ ## Server Actions — `withServerActionInstrumentation()`
347
+
348
+ Server Actions are not auto-instrumented.
349
+ Wrap each with `withServerActionInstrumentation()`:
350
+
351
+ ```typescript
352
+ // app/actions/order.ts
353
+ "use server";
354
+ import * as Sentry from "@sentry/nextjs";
355
+ import { headers } from "next/headers";
356
+
357
+ export async function createOrder(formData: FormData) {
358
+ return Sentry.withServerActionInstrumentation(
359
+ "createOrder", // Action name (becomes span name)
360
+ {
361
+ headers: await headers(), // Enables distributed trace continuation
362
+ formData, // Logged as span data
363
+ recordResponse: true, // Capture the return value
364
+ },
365
+ async () => {
366
+ const order = await db.orders.create({
367
+ data: { items: formData.get("items"), userId: getCurrentUser() },
368
+ });
369
+ return { success: true, orderId: order.id };
370
+ },
371
+ );
372
+ }
373
+ ```
374
+
375
+ **Options:**
376
+
377
+ | Option | Type | Description |
378
+ | ---------------- | ---------- | --------------------------------------------------------------------------- |
379
+ | `formData` | `FormData` | Logged with the span |
380
+ | `headers` | `Headers` | Required for distributed trace continuation — always pass `await headers()` |
381
+ | `recordResponse` | `boolean` | Whether to capture the return value as span data |
382
+
383
+ ---
384
+
385
+ ## Distributed Tracing
386
+
387
+ ### How It Works
388
+
389
+ Sentry injects two HTTP headers into outgoing requests:
390
+
391
+ | Header | Format | Purpose |
392
+ | -------------- | -------------------------------- | ------------------------------------ |
393
+ | `sentry-trace` | `{traceId}-{spanId}-{sampled}` | Carries trace context |
394
+ | `baggage` | W3C Baggage with `sentry-*` keys | Carries sampling decision + metadata |
395
+
396
+ Backends must allowlist these headers for CORS:
397
+
398
+ ```
399
+ Access-Control-Allow-Headers: sentry-trace, baggage
400
+ ```
401
+
402
+ ### `tracePropagationTargets`
403
+
404
+ Controls which outgoing requests get trace headers.
405
+ Accepts strings (substring match) and/or RegExp:
406
+
407
+ ```typescript
408
+ // instrumentation-client.ts
409
+ Sentry.init({
410
+ tracePropagationTargets: [
411
+ "localhost", // any URL containing "localhost"
412
+ /^https:\/\/api\.yourapp\.com/, // your API
413
+ /^https:\/\/auth\.yourapp\.com/, // auth service
414
+ /^\//, // all same-origin relative paths
415
+ ],
416
+ });
417
+ ```
418
+
419
+ **Default:** `['localhost', /^\//]` — only localhost and same-origin requests.\
420
+ **Disable entirely:** `tracePropagationTargets: []`
421
+
422
+ > ⚠️ If your API is at `http://localhost:3001`, use `"localhost:3001"` or a regex
423
+ > matching the port — `"localhost"` alone won’t match.
424
+
425
+ ### Automatic SSR → Client Trace Continuation
426
+
427
+ When Next.js server-renders a page, Sentry emits trace context as `<meta>` tags in
428
+ `<head>`. The browser SDK reads them automatically to continue the same trace:
429
+
430
+ ```html
431
+ <!-- Auto-injected by Next.js SDK — no configuration needed -->
432
+ <meta name="sentry-trace" content="12345678...-1234567890123456-1" />
433
+ <meta name="baggage" content="sentry-trace_id=12345678...,sentry-sample_rate=0.1,..." />
434
+ ```
435
+
436
+ This means a single distributed trace spans the server render **and** subsequent
437
+ client-side activity.
438
+
439
+ ### Manual Trace Propagation (Non-HTTP Channels)
440
+
441
+ For WebSockets, message queues, or other protocols:
442
+
443
+ ```typescript
444
+ // Sender — extract current trace context
445
+ const traceData = Sentry.getTraceData();
446
+ // Returns: { "sentry-trace": "...", "baggage": "..." }
447
+
448
+ webSocket.send(
449
+ JSON.stringify({
450
+ payload: myData,
451
+ _sentryMeta: {
452
+ sentryTrace: traceData["sentry-trace"],
453
+ baggage: traceData["baggage"],
454
+ },
455
+ }),
456
+ );
457
+
458
+ // Receiver — continue the trace
459
+ const { sentryTrace, baggage } = message._sentryMeta;
460
+
461
+ Sentry.continueTrace({ sentryTrace, baggage }, () => {
462
+ return Sentry.startSpan({ name: "handleWebSocketMessage" }, () => {
463
+ processMessage(message);
464
+ });
465
+ });
466
+ ```
467
+
468
+ ### Head-Based Sampling
469
+
470
+ The originating (head) service makes the sampling decision.
471
+ That decision propagates to all downstream services via `sentry-trace`. All services
472
+ either all sample or all drop the trace — ensuring complete traces, never partial ones.
473
+
474
+ ---
475
+
476
+ ## Advanced Span APIs
477
+
478
+ ### `continueTrace()` — Continue Incoming Trace
479
+
480
+ ```typescript
481
+ // When receiving trace headers from a message queue, cron trigger, etc.
482
+ Sentry.continueTrace(
483
+ {
484
+ sentryTrace: incomingHeaders["sentry-trace"],
485
+ baggage: incomingHeaders["baggage"],
486
+ },
487
+ () => {
488
+ return Sentry.startSpan({ name: "processJob", op: "function" }, () => doWork());
489
+ },
490
+ );
491
+ ```
492
+
493
+ ### `startNewTrace()` — Force a New Trace
494
+
495
+ ```typescript
496
+ // Break the distributed chain — start a completely independent trace
497
+ Sentry.startNewTrace(() => {
498
+ return Sentry.startSpan({ name: "isolated-operation" }, () => doWork());
499
+ });
500
+ ```
501
+
502
+ ### `suppressTracing()` — Prevent Span Capture
503
+
504
+ ```typescript
505
+ // Prevent spans inside this callback from being sent to Sentry
506
+ const result = Sentry.suppressTracing(() => {
507
+ return fetch("/internal/health"); // No span created
508
+ });
509
+ ```
510
+
511
+ ### `getActiveSpan()`, `getRootSpan()`
512
+
513
+ ```typescript
514
+ const span = Sentry.getActiveSpan();
515
+ if (span) {
516
+ span.setAttribute("custom.key", "value");
517
+ const root = Sentry.getRootSpan(span);
518
+ console.log(Sentry.spanToJSON(root).name);
519
+ }
520
+ ```
521
+
522
+ ### `withActiveSpan()` — Run Code with a Specific Active Span
523
+
524
+ ```typescript
525
+ const mySpan = Sentry.startInactiveSpan({ name: "background-task" });
526
+
527
+ await Sentry.withActiveSpan(mySpan, async (scope) => {
528
+ scope.setTag("task.type", "email");
529
+ await sendEmails(); // Errors associate with mySpan
530
+ });
531
+
532
+ mySpan.end();
533
+ ```
534
+
535
+ ### `forceTransaction` and `onlyIfParent`
536
+
537
+ ```typescript
538
+ // Forces span to appear as root transaction in Sentry UI
539
+ Sentry.startSpan({ name: "background-job", op: "function", forceTransaction: true }, () =>
540
+ runBackgroundJob(),
541
+ );
542
+
543
+ // Only creates span when an active parent exists (drops orphan spans)
544
+ Sentry.startSpan({ name: "optional-metric", onlyIfParent: true }, () => measureSomething());
545
+ ```
546
+
547
+ ### Browser Flat Span Hierarchy
548
+
549
+ In browsers, all child spans are attached flat to the root span by default.
550
+ To opt into true nesting (use with care — can produce incorrect data with concurrent
551
+ async operations):
552
+
553
+ ```typescript
554
+ Sentry.init({
555
+ parentSpanIsAlwaysRootSpan: false,
556
+ });
557
+ ```
558
+
559
+ ---
560
+
561
+ ## Complete Config Example (All Three Runtimes)
562
+
563
+ ```typescript
564
+ // instrumentation-client.ts (Browser)
565
+ import * as Sentry from "@sentry/nextjs";
566
+
567
+ Sentry.init({
568
+ dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
569
+ environment: process.env.NODE_ENV,
570
+
571
+ integrations: [
572
+ Sentry.browserTracingIntegration({
573
+ shouldCreateSpanForRequest: (url) => !url.match(/\/health$/),
574
+ }),
575
+ ],
576
+
577
+ tracesSampler: ({ name, inheritOrSampleWith }) => {
578
+ if (name.includes("health")) return 0;
579
+ if (name.includes("/checkout")) return 1.0;
580
+ return inheritOrSampleWith(0.1);
581
+ },
582
+
583
+ tracePropagationTargets: ["localhost", /^https:\/\/api\.myapp\.com/],
584
+ });
585
+ ```
586
+
587
+ ```typescript
588
+ // sentry.server.config.ts (Node.js)
589
+ import * as Sentry from "@sentry/nextjs";
590
+
591
+ Sentry.init({
592
+ dsn: process.env.SENTRY_DSN,
593
+ environment: process.env.NODE_ENV,
594
+
595
+ tracesSampler: ({ name, inheritOrSampleWith }) => {
596
+ if (name.includes("healthcheck")) return 0;
597
+ return inheritOrSampleWith(0.1);
598
+ },
599
+ });
600
+ ```
601
+
602
+ ```typescript
603
+ // sentry.edge.config.ts (Edge)
604
+ import * as Sentry from "@sentry/nextjs";
605
+
606
+ Sentry.init({
607
+ dsn: process.env.SENTRY_DSN,
608
+ tracesSampleRate: 0.1,
609
+ });
610
+ ```
611
+
612
+ ---
613
+
614
+ ## Troubleshooting
615
+
616
+ | Issue | Solution |
617
+ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
618
+ | No transactions in Performance dashboard | Verify `tracesSampleRate` or `tracesSampler` is set; confirm it’s set in all three runtime configs |
619
+ | Server Actions not traced | Wrap each with `withServerActionInstrumentation()`; it’s not auto-instrumented |
620
+ | Distributed trace not linking frontend → backend | Add backend URL to `tracePropagationTargets`; verify `Access-Control-Allow-Headers: sentry-trace, baggage` on the backend |
621
+ | SSR page load not linked to server trace | This is automatic — verify both client and server use the same DSN |
622
+ | API requests missing `sentry-trace` header | Check CORS preflight — backend must allow `sentry-trace` and `baggage` |
623
+ | Transaction names show raw URLs (`/users/42`) | Use `beforeStartSpan` to parameterize: replace `/\d+/g` with `/<id>` |
624
+ | `tracesSampler` not working | When both `tracesSampler` and `tracesSampleRate` are set, `tracesSampler` wins — expected behavior |
625
+ | Spans missing after async gap (browser) | Browser uses flat hierarchy; use `startInactiveSpan` with explicit `parentSpan` across async boundaries |
626
+ | `tracePropagationTargets` port not matching | `"localhost"` won’t match `localhost:3001` — use `"localhost:3001"` or a regex |
627
+ | High transaction volume | Use `tracesSampler` to return `0` for health checks; lower default rate with `inheritOrSampleWith(0.02)` |
628
+ | Server-only spans not appearing | Verify `instrumentation.ts` exports `onRequestError = Sentry.captureRequestError` and loads the server config |