@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,231 @@
1
+ # Crons / Job Monitoring — Sentry Cloudflare SDK
2
+
3
+ > Minimum SDK: `@sentry/cloudflare` v8.0.0+ (`captureCheckIn`, `withMonitor`)
4
+ > Auto-instrumented `scheduled` handler: v10.x+ Status: ✅ **Generally Available**
5
+
6
+ ---
7
+
8
+ ## Overview
9
+
10
+ Sentry Crons tracks whether scheduled tasks run on time, succeed, and complete within
11
+ expected durations. Sentry alerts when a job:
12
+
13
+ - Misses its scheduled start time (checkin margin exceeded)
14
+ - Takes too long to complete (maxRuntime exceeded)
15
+ - Fails (status `"error"`)
16
+
17
+ Cloudflare Workers support cron triggers via the `scheduled` handler.
18
+ When wrapped with `withSentry`, the scheduled handler is automatically instrumented with
19
+ a `faas.cron` span that includes:
20
+
21
+ - `faas.cron` — the cron expression
22
+ - `faas.time` — the scheduled time (ISO 8601)
23
+ - `faas.trigger` — `"timer"`
24
+
25
+ ---
26
+
27
+ ## Automatic Scheduled Handler Instrumentation
28
+
29
+ When you use `withSentry`, the `scheduled` handler is automatically wrapped.
30
+ Errors are captured and the span records duration:
31
+
32
+ ```typescript
33
+ import * as Sentry from "@sentry/cloudflare";
34
+
35
+ export default Sentry.withSentry(
36
+ (env: Env) => ({
37
+ dsn: env.SENTRY_DSN,
38
+ tracesSampleRate: 1.0,
39
+ }),
40
+ {
41
+ async fetch(request, env, ctx) {
42
+ return new Response("OK");
43
+ },
44
+
45
+ async scheduled(controller, env, ctx) {
46
+ // Automatically instrumented — errors captured, spans created
47
+ await cleanupOldRecords(env.DB);
48
+ },
49
+ } satisfies ExportedHandler<Env>,
50
+ );
51
+ ```
52
+
53
+ Configure the cron trigger in `wrangler.toml`:
54
+
55
+ ```toml
56
+ [triggers]
57
+ crons = ["*/5 * * * *"] # Every 5 minutes
58
+ ```
59
+
60
+ ---
61
+
62
+ ## `Sentry.withMonitor` — Named Monitor Tracking
63
+
64
+ For fine-grained monitoring with named monitors (visible in the Sentry Crons dashboard):
65
+
66
+ ```typescript
67
+ async scheduled(controller, env, ctx) {
68
+ ctx.waitUntil(
69
+ Sentry.withMonitor("cleanup-old-records", async () => {
70
+ await cleanupOldRecords(env.DB);
71
+ }),
72
+ );
73
+ },
74
+ ```
75
+
76
+ ### With Monitor Config (Upsert)
77
+
78
+ Supply a config to auto-create or update the monitor in Sentry:
79
+
80
+ ```typescript
81
+ const monitorConfig = {
82
+ schedule: {
83
+ type: "crontab",
84
+ value: "*/5 * * * *",
85
+ },
86
+ checkinMargin: 2, // In minutes — how late is "missed"
87
+ maxRuntime: 10, // In minutes — when to alert for "timed out"
88
+ timezone: "America/Los_Angeles",
89
+ };
90
+
91
+ async scheduled(controller, env, ctx) {
92
+ ctx.waitUntil(
93
+ Sentry.withMonitor(
94
+ "cleanup-old-records",
95
+ async () => {
96
+ await cleanupOldRecords(env.DB);
97
+ },
98
+ monitorConfig,
99
+ ),
100
+ );
101
+ },
102
+ ```
103
+
104
+ ---
105
+
106
+ ## `Sentry.captureCheckIn` — Manual Check-Ins
107
+
108
+ For more control over the check-in lifecycle:
109
+
110
+ ### Heartbeat (Single-Shot)
111
+
112
+ ```typescript
113
+ // Report success
114
+ Sentry.captureCheckIn({ monitorSlug: "health-check", status: "ok" });
115
+
116
+ // Report failure
117
+ Sentry.captureCheckIn({ monitorSlug: "health-check", status: "error" });
118
+ ```
119
+
120
+ ### In-Progress + Completion
121
+
122
+ ```typescript
123
+ // Signal start
124
+ const checkInId = Sentry.captureCheckIn({
125
+ monitorSlug: "data-sync",
126
+ status: "in_progress",
127
+ });
128
+
129
+ try {
130
+ await syncData(env.DB);
131
+
132
+ // Signal success
133
+ Sentry.captureCheckIn({
134
+ checkInId,
135
+ monitorSlug: "data-sync",
136
+ status: "ok",
137
+ });
138
+ } catch (error) {
139
+ // Signal failure
140
+ Sentry.captureCheckIn({
141
+ checkInId,
142
+ monitorSlug: "data-sync",
143
+ status: "error",
144
+ });
145
+ throw error;
146
+ }
147
+ ```
148
+
149
+ ### With Upsert Config
150
+
151
+ ```typescript
152
+ const checkInId = Sentry.captureCheckIn(
153
+ { monitorSlug: "data-sync", status: "in_progress" },
154
+ {
155
+ schedule: { type: "crontab", value: "0 * * * *" },
156
+ checkinMargin: 5,
157
+ maxRuntime: 30,
158
+ timezone: "UTC",
159
+ },
160
+ );
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Schedule Types
166
+
167
+ | Type | Format | Example |
168
+ | ---------- | ------------------------ | ------------------------------- |
169
+ | `crontab` | Standard cron expression | `"*/5 * * * *"` (every 5 min) |
170
+ | `interval` | Repeated interval | `{ value: 10, unit: "minute" }` |
171
+
172
+ ### Interval Schedule
173
+
174
+ ```typescript
175
+ const monitorConfig = {
176
+ schedule: {
177
+ type: "interval",
178
+ value: 10,
179
+ unit: "minute", // "minute", "hour", "day", "week", "month", "year"
180
+ },
181
+ checkinMargin: 2,
182
+ maxRuntime: 10,
183
+ };
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Monitor Config Options
189
+
190
+ | Option | Type | Default | Notes |
191
+ | ----------------------- | ------------------------- | ------- | --------------------------------------------------------- |
192
+ | `schedule.type` | `"crontab" \| "interval"` | — | Required |
193
+ | `schedule.value` | `string \| number` | — | Cron expression or interval value |
194
+ | `schedule.unit` | `string` | — | Required for `interval` type |
195
+ | `checkinMargin` | `number` | — | Minutes before a check-in is considered missed |
196
+ | `maxRuntime` | `number` | — | Minutes before a running job is considered timed out |
197
+ | `timezone` | `string` | `"UTC"` | IANA timezone for crontab schedules |
198
+ | `failureIssueThreshold` | `number` | — | Number of consecutive failures before creating an issue |
199
+ | `recoveryThreshold` | `number` | — | Number of consecutive successes before resolving an issue |
200
+
201
+ ---
202
+
203
+ ## Best Practices
204
+
205
+ 1. **Use `withMonitor` for most cases** — it handles the check-in lifecycle
206
+ automatically and records duration.
207
+
208
+ 2. **Use `ctx.waitUntil`** — wrap `withMonitor` in `ctx.waitUntil()` to ensure the
209
+ check-in is flushed before the worker terminates.
210
+
211
+ 3. **Use upsert configs** — supply `monitorConfig` to auto-create monitors.
212
+ This avoids manual configuration in the Sentry UI.
213
+
214
+ 4. **Name monitors clearly** — use descriptive slugs like `"daily-cleanup"` or
215
+ `"hourly-sync"`, not `"cron-1"`.
216
+
217
+ 5. **Set reasonable thresholds** — `checkinMargin` should be slightly larger than
218
+ typical scheduling jitter.
219
+ `maxRuntime` should be longer than the 99th percentile duration.
220
+
221
+ ---
222
+
223
+ ## Troubleshooting
224
+
225
+ | Issue | Solution |
226
+ | ---------------------------------------- | ------------------------------------------------------------------------------------------- |
227
+ | Monitor not appearing in Crons dashboard | Ensure `captureCheckIn` or `withMonitor` is called at least once with a valid `monitorSlug` |
228
+ | Check-in always shows “missed” | Verify `checkinMargin` is large enough for scheduling jitter |
229
+ | Check-in shows “timed out” | Verify `maxRuntime` exceeds expected job duration |
230
+ | In-progress check-in never completes | Ensure both `in_progress` and `ok`/`error` check-ins use the same `checkInId` |
231
+ | Schedule mismatch | Ensure `schedule.value` in config matches the actual cron expression in `wrangler.toml` |
@@ -0,0 +1,381 @@
1
+ # Durable Objects, Workflows, and D1 — Sentry Cloudflare SDK
2
+
3
+ > Minimum SDK: `@sentry/cloudflare` v8.0.0+ Durable Object instrumentation: v8.x+
4
+ > `instrumentPrototypeMethods`: v10.x+ Workflow instrumentation: v10.x+ D1 automatic
5
+ > (`env`-based) instrumentation: v10.x+ Durable Object Storage instrumentation: v10.x+
6
+ > Agents SDK instrumentation (`instrumentAgentWithSentry`): v10.69.0+ RPC trace
7
+ > propagation (`enableRpcTracePropagation`): v10.52.0+
8
+
9
+ ---
10
+
11
+ ## Durable Objects
12
+
13
+ ### Overview
14
+
15
+ `instrumentDurableObjectWithSentry` wraps a Durable Object class to automatically:
16
+
17
+ - Initialize the Sentry SDK per-request
18
+ - Capture unhandled errors in all DO methods
19
+ - Create spans for fetch, alarm, WebSocket, and RPC methods
20
+ - Track Durable Object Storage operations (get, put, delete, list)
21
+
22
+ ### Setup
23
+
24
+ ```typescript
25
+ import * as Sentry from "@sentry/cloudflare";
26
+ import { DurableObject } from "cloudflare:workers";
27
+
28
+ class MyDurableObjectBase extends DurableObject<Env> {
29
+ async fetch(request: Request): Promise<Response> {
30
+ const url = new URL(request.url);
31
+
32
+ if (url.pathname === "/process") {
33
+ await this.processData();
34
+ return new Response("Processed");
35
+ }
36
+
37
+ return new Response("OK");
38
+ }
39
+
40
+ async alarm(): Promise<void> {
41
+ await this.runMaintenance();
42
+ }
43
+
44
+ async processData(): Promise<void> {
45
+ // Business logic — automatically instrumented as RPC span
46
+ await this.ctx.storage.put("last-processed", Date.now());
47
+ }
48
+ }
49
+
50
+ // Wrap the class with Sentry instrumentation
51
+ export const MyDurableObject = Sentry.instrumentDurableObjectWithSentry(
52
+ (env: Env) => ({
53
+ dsn: env.SENTRY_DSN,
54
+ tracesSampleRate: 1.0,
55
+ dataCollection: {
56
+ // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
57
+ // https://docs.sentry.io/platforms/javascript/guides/cloudflare/configuration/options/#dataCollection
58
+ // userInfo: false,
59
+ // httpBodies: [],
60
+ },
61
+ }),
62
+ MyDurableObjectBase,
63
+ );
64
+ ```
65
+
66
+ > **Important:** Export the wrapped class, not the base class.
67
+ > The wrapped class must be the one referenced in `wrangler.toml`.
68
+
69
+ ### Instrumented Methods
70
+
71
+ | Method | Span Op | Auto-captured |
72
+ | ---------------------- | ---------------------------- | ---------------------------------------- |
73
+ | `fetch` | `http.server` | ✅ Errors and spans |
74
+ | `alarm` | — (named `alarm`) | ✅ Errors and spans |
75
+ | `webSocketMessage` | — (named `webSocketMessage`) | ✅ Errors and spans |
76
+ | `webSocketClose` | — (named `webSocketClose`) | ✅ Errors and spans |
77
+ | `webSocketError` | — (named `webSocketError`) | ✅ Errors captured with `handled: false` |
78
+ | Instance methods (RPC) | `rpc` | ✅ Errors and spans |
79
+
80
+ ### Prototype Method Instrumentation
81
+
82
+ By default, only instance methods (defined directly on the object) are instrumented.
83
+ To also instrument methods defined on the prototype chain (useful for RPC methods
84
+ defined in a base class), enable `instrumentPrototypeMethods`:
85
+
86
+ ```typescript
87
+ export const MyDurableObject = Sentry.instrumentDurableObjectWithSentry(
88
+ (env: Env) => ({
89
+ dsn: env.SENTRY_DSN,
90
+ tracesSampleRate: 1.0,
91
+ instrumentPrototypeMethods: true, // Instrument ALL prototype methods
92
+ }),
93
+ MyDurableObjectBase,
94
+ );
95
+ ```
96
+
97
+ Or instrument only specific methods:
98
+
99
+ ```typescript
100
+ export const MyDurableObject = Sentry.instrumentDurableObjectWithSentry(
101
+ (env: Env) => ({
102
+ dsn: env.SENTRY_DSN,
103
+ tracesSampleRate: 1.0,
104
+ instrumentPrototypeMethods: ["myRpcMethod", "anotherMethod"],
105
+ }),
106
+ MyDurableObjectBase,
107
+ );
108
+ ```
109
+
110
+ ### Durable Object Storage Instrumentation
111
+
112
+ Durable Object Storage operations (`get`, `put`, `delete`, `list`) are automatically
113
+ instrumented when using `instrumentDurableObjectWithSentry`. Each storage operation
114
+ creates a span.
115
+
116
+ > Framework-internal storage operations are filtered out automatically (v10.69.0+): keys
117
+ > prefixed with `cf_`, `cf:`, `__ps_`, or `/` (used internally by the Agents SDK and
118
+ > PartyServer) don’t create spans, so your traces show only your own storage access.
119
+
120
+ ```typescript
121
+ class MyDurableObjectBase extends DurableObject<Env> {
122
+ async fetch(request: Request): Promise<Response> {
123
+ // These storage operations are automatically traced
124
+ await this.ctx.storage.put("key", "value");
125
+ const value = await this.ctx.storage.get("key");
126
+ await this.ctx.storage.delete("key");
127
+ const entries = await this.ctx.storage.list();
128
+
129
+ return new Response("OK");
130
+ }
131
+ }
132
+ ```
133
+
134
+ ### Cloudflare Agents SDK (`instrumentAgentWithSentry`)
135
+
136
+ > `instrumentAgentWithSentry`: v10.69.0+
137
+
138
+ For classes built on the
139
+ [Cloudflare Agents SDK](https://developers.cloudflare.com/agents/) (`Agent` from
140
+ `agents`, `AIChatAgent` from `@cloudflare/ai-chat`, `McpAgent` from `agents/mcp`), use
141
+ the dedicated `instrumentAgentWithSentry` wrapper.
142
+ Agents are Durable Objects under the hood, so it applies everything
143
+ `instrumentDurableObjectWithSentry` does (request transactions, `alarm`, WebSocket
144
+ handlers, RPC trace propagation, SQL spans) **plus** Agent-specific telemetry:
145
+
146
+ - **Callable RPC spans** — a span (op `rpc`) for each `@callable()` method invoked over
147
+ WebSocket, with `cloudflare.agent.class` / `cloudflare.agent.name` attributes
148
+ - **Automatic conversation IDs** — sets the conversation ID on the scope for each chat
149
+ turn (`onChatMessage`) and each callable RPC call, defaulting to the agent instance
150
+ name, so `gen_ai` spans group in Conversations without any `setConversationId` call
151
+ - **Conversation rotation on chat clear** — when the chat is cleared (`clearHistory()`
152
+ from `useAgentChat`, or anything that emits the
153
+ [`message:clear` observability event](https://developers.cloudflare.com/agents/runtime/operations/observability/#channels)),
154
+ the SDK rotates to a fresh conversation ID while the instance (and its MCP/OAuth
155
+ state) stays put
156
+
157
+ ```typescript
158
+ import { Agent, callable } from "agents";
159
+ import * as Sentry from "@sentry/cloudflare";
160
+
161
+ class MyAgentBase extends Agent<Env> {
162
+ @callable()
163
+ async greet(name: string): Promise<string> {
164
+ return `Hello, ${name}!`;
165
+ }
166
+ }
167
+
168
+ export const MyAgent = Sentry.instrumentAgentWithSentry(
169
+ (env: Env) => ({
170
+ dsn: env.SENTRY_DSN,
171
+ tracesSampleRate: 1.0,
172
+ enableRpcTracePropagation: true,
173
+ }),
174
+ MyAgentBase,
175
+ );
176
+ ```
177
+
178
+ When building with the Sentry Vite plugin’s `autoInstrumentation`, Agent classes are
179
+ detected and wrapped with `instrumentAgentWithSentry` automatically (v10.69.0+) — see
180
+ `./ai-monitoring.md`.
181
+
182
+ The automatic conversation ID uses the agent instance name — correct when one instance
183
+ is one chat session (e.g. `useAgent({ name: chatSessionId })`). If your instances are
184
+ per-user or a shared singleton like `"default"`, override it with your own chat session
185
+ ID via `Sentry.setConversationId(id)` at the start of `onChatMessage` — see
186
+ `./ai-monitoring.md`.
187
+
188
+ On SDK versions before 10.69.0, wrap Agent classes with
189
+ `instrumentDurableObjectWithSentry` instead and call `Sentry.setConversationId()`
190
+ manually in the handler.
191
+
192
+ ### RPC Trace Propagation
193
+
194
+ Trace context isn’t propagated across Durable Object RPC calls by default.
195
+ To connect a caller Worker and a DO into a single distributed trace, set
196
+ `enableRpcTracePropagation: true` on **both** the caller (`withSentry`) and the DO
197
+ (`instrumentDurableObjectWithSentry`) — recommended whenever you use Durable Objects.
198
+ See [RPC Trace Propagation in `./tracing.md`](./tracing.md#rpc-trace-propagation) for
199
+ the full setup.
200
+
201
+ ---
202
+
203
+ ## Workflows
204
+
205
+ ### Overview
206
+
207
+ `instrumentWorkflowWithSentry` wraps a Workflow class to automatically:
208
+
209
+ - Initialize the Sentry SDK for each workflow run
210
+ - Create a consistent trace ID derived from the workflow instance ID
211
+ - Create spans for each `step.do()` call
212
+ - Capture errors in workflow steps with `handled: true` (since steps may retry)
213
+ - Disable the dedupe integration (to capture all step failures, even duplicates)
214
+
215
+ ### Setup
216
+
217
+ ```typescript
218
+ import * as Sentry from "@sentry/cloudflare";
219
+ import { WorkflowEntrypoint } from "cloudflare:workers";
220
+
221
+ class MyWorkflowBase extends WorkflowEntrypoint<Env, { orderId: string }> {
222
+ async run(event, step) {
223
+ const order = await step.do("fetch-order", async () => {
224
+ return await fetchOrder(event.payload.orderId);
225
+ });
226
+
227
+ await step.do("process-payment", { retries: { limit: 3, delay: "1s" } }, async () => {
228
+ return await processPayment(order);
229
+ });
230
+
231
+ await step.do("send-confirmation", async () => {
232
+ return await sendEmail(order.email);
233
+ });
234
+ }
235
+ }
236
+
237
+ export const MyWorkflow = Sentry.instrumentWorkflowWithSentry(
238
+ (env: Env) => ({
239
+ dsn: env.SENTRY_DSN,
240
+ tracesSampleRate: 1.0,
241
+ }),
242
+ MyWorkflowBase,
243
+ );
244
+ ```
245
+
246
+ ### Step Span Attributes
247
+
248
+ Each `step.do()` creates a span with:
249
+
250
+ | Attribute | Value |
251
+ | ------------------------------------- | --------------------------------------------- |
252
+ | `op` | `function.step.do` |
253
+ | `name` | The step name (first argument to `step.do()`) |
254
+ | `cloudflare.workflow.timeout` | Step timeout config (if set) |
255
+ | `cloudflare.workflow.retries.limit` | Max retries (if set) |
256
+ | `cloudflare.workflow.retries.delay` | Retry delay (if set) |
257
+ | `cloudflare.workflow.retries.backoff` | Backoff strategy (if set) |
258
+
259
+ ### Trace Consistency
260
+
261
+ The SDK generates a deterministic trace ID from the workflow instance ID. This means:
262
+
263
+ - All steps in the same workflow instance share the same trace
264
+ - Retried steps appear as separate spans within the same trace
265
+ - The sampling decision is consistent across steps
266
+
267
+ ### Other Step Types
268
+
269
+ `step.sleep()`, `step.sleepUntil()`, and `step.waitForEvent()` are passed through
270
+ without instrumentation (they don’t execute user code).
271
+
272
+ ---
273
+
274
+ ## D1 Database Instrumentation
275
+
276
+ ### Overview
277
+
278
+ D1 bindings are **automatically instrumented** when accessed through the handler’s
279
+ `env`. As long as your Worker is wrapped with `withSentry` (or the DO/Workflow is
280
+ wrapped), every query on `env.DB` creates spans and breadcrumbs — no manual wrapping
281
+ needed.
282
+
283
+ ### Setup
284
+
285
+ ```typescript
286
+ import * as Sentry from "@sentry/cloudflare";
287
+
288
+ export default Sentry.withSentry(
289
+ (env: Env) => ({
290
+ dsn: env.SENTRY_DSN,
291
+ tracesSampleRate: 1.0,
292
+ }),
293
+ {
294
+ async fetch(request, env, ctx) {
295
+ // env.DB is already instrumented — use it directly
296
+ const users = await env.DB.prepare("SELECT * FROM users WHERE active = ?").bind(1).all();
297
+
298
+ return new Response(JSON.stringify(users.results));
299
+ },
300
+ } satisfies ExportedHandler<Env>,
301
+ );
302
+ ```
303
+
304
+ > **Deprecated:** the explicit `Sentry.instrumentD1WithSentry(env.DB)` wrapper still
305
+ > works but is **deprecated and will be removed in v11**. Access `env.DB` directly
306
+ > instead — it’s instrumented automatically.
307
+
308
+ ### Instrumented Methods
309
+
310
+ | Method | Span Name | Notes |
311
+ | ------------------- | ----------------------------- | ----------------------------------------------- |
312
+ | `statement.first()` | SQL query text | Returns first row |
313
+ | `statement.run()` | SQL query text | Execute with metadata return |
314
+ | `statement.all()` | SQL query text | Returns all rows with metadata |
315
+ | `statement.raw()` | SQL query text | Returns raw row arrays |
316
+ | `db.batch([...])` | SQL of the batched statements | Executes multiple statements in one transaction |
317
+ | `db.exec(sql)` | SQL query text | Executes raw SQL |
318
+
319
+ All methods create:
320
+
321
+ - A `db.query` span with the SQL statement as the span name
322
+ - A breadcrumb in the `query` category
323
+ - Span attributes: `cloudflare.d1.query_type`, `cloudflare.d1.duration`,
324
+ `cloudflare.d1.rows_read`, `cloudflare.d1.rows_written`
325
+
326
+ `db.batch()` and `db.exec()` additionally set:
327
+
328
+ - `db.operation.name` — `batch` or `exec`
329
+ - `db.operation.batch.size` — number of statements (for `batch`)
330
+
331
+ ### Bind Support
332
+
333
+ The instrumentation follows through `statement.bind()`:
334
+
335
+ ```typescript
336
+ // bind() returns a new statement — it's also instrumented
337
+ const result = await env.DB.prepare("INSERT INTO users (name, email) VALUES (?, ?)")
338
+ .bind("Alice", "alice@example.com")
339
+ .run();
340
+ ```
341
+
342
+ ### Limitations
343
+
344
+ - Query parameters are not captured in span data (to avoid PII leakage)
345
+
346
+ ---
347
+
348
+ ## Best Practices
349
+
350
+ 1. **Access D1 via `env`** — use `env.DB` directly; it’s auto-instrumented.
351
+ Don’t reach for the deprecated `instrumentD1WithSentry` wrapper.
352
+
353
+ 2. **Export wrapped classes** — always export the instrumented class
354
+ (`Sentry.instrumentDurableObjectWithSentry(...)`) as the binding target, not the base
355
+ class.
356
+
357
+ 3. **Use `instrumentPrototypeMethods` selectively** — it wraps all prototype methods
358
+ which adds overhead.
359
+ Use an array of method names if you only need specific RPC methods.
360
+
361
+ 4. **Enable RPC trace propagation for cross-Worker traces** — set
362
+ `enableRpcTracePropagation: true` on both caller and receiver when you want
363
+ DO/service-binding RPC calls in one trace (see
364
+ [RPC Trace Propagation](#rpc-trace-propagation)).
365
+
366
+ 5. **Workflow error handling** — step errors are captured with `handled: true` since
367
+ Workflows may retry steps.
368
+ The dedupe integration is automatically disabled.
369
+
370
+ ---
371
+
372
+ ## Troubleshooting
373
+
374
+ | Issue | Solution |
375
+ | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
376
+ | DO errors not captured | Ensure you exported the instrumented class, not the base class |
377
+ | RPC methods not creating spans | Enable `instrumentPrototypeMethods: true` or list specific methods |
378
+ | D1 queries not traced | Access the binding via `env.DB` (auto-instrumented by `withSentry`) and ensure `tracesSampleRate` is set |
379
+ | Workflow spans disconnected | Verify all steps in the same workflow instance share the same trace (automatic) |
380
+ | Storage operations not traced | Ensure you’re using `instrumentDurableObjectWithSentry` — storage instrumentation is included |
381
+ | DO / service-binding RPC calls in separate traces | Set `enableRpcTracePropagation: true` on both caller and receiver |