@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,351 @@
1
+ # AI Monitoring — Sentry Python SDK
2
+
3
+ > Minimum SDK: `sentry-sdk` >=2.64.0 (Gen AI span streaming is on by default at this
4
+ > version; the `stream_gen_ai_spans` option is available since 2.60.0).
5
+
6
+ ## Prerequisites
7
+
8
+ Tracing must be enabled — AI spans require an active transaction:
9
+
10
+ ```python
11
+ sentry_sdk.init(
12
+ dsn="...",
13
+ traces_sample_rate=1.0,
14
+ stream_gen_ai_spans=True,
15
+ send_default_pii=True,
16
+ )
17
+ ```
18
+
19
+ ## Integration Matrix
20
+
21
+ | Integration | Package | Min Library | Auto-Enabled | Status |
22
+ | ----------------- | ------------ | ----------------------- | ------------ | ------- |
23
+ | OpenAI | `sentry-sdk` | openai 1.0+ | ✅ Yes | Stable |
24
+ | Anthropic | `sentry-sdk` | anthropic 0.16.0+ | ✅ Yes | Stable |
25
+ | LangChain | `sentry-sdk` | langchain 0.1.0+ | ✅ Yes | Stable |
26
+ | LangGraph | `sentry-sdk` | langgraph 0.6.6+ | ✅ Yes | Stable |
27
+ | OpenAI Agents SDK | `sentry-sdk` | agents 0.0.19+ | ✅ Yes | ⚠️ Beta |
28
+ | Google GenAI | `sentry-sdk` | google-genai 1.29.0+ | ✅ Yes | Stable |
29
+ | HuggingFace Hub | `sentry-sdk` | huggingface_hub 0.24.7+ | ✅ Yes | Stable |
30
+ | LiteLLM | `sentry-sdk` | litellm 1.77.5+ | ❌ **No** | Stable |
31
+ | MCP | `sentry-sdk` | mcp 1.15.0+ | ✅ Yes | Stable |
32
+ | Pydantic AI | `sentry-sdk` | pydantic-ai 1.0.0+ | ✅ Yes | ⚠️ Beta |
33
+
34
+ **LiteLLM MUST be explicitly added to `integrations=[]`.**
35
+
36
+ ## PII Control
37
+
38
+ Every integration follows the same two-layer control:
39
+
40
+ | `send_default_pii` | `include_prompts` | Prompts/outputs sent? |
41
+ | ------------------ | ----------------- | --------------------- |
42
+ | `False` (default) | `True` (default) | ❌ No |
43
+ | `True` | `True` (default) | ✅ Yes |
44
+ | `True` | `False` | ❌ No |
45
+
46
+ Set `send_default_pii=True` in `sentry_sdk.init()` and leave `include_prompts` at its
47
+ default `True`. Use `include_prompts=False` per integration only to opt out.
48
+
49
+ ## Configuration Examples
50
+
51
+ ### Auto-enabled integrations (OpenAI, Anthropic, LangChain, etc.)
52
+
53
+ ```python
54
+ import sentry_sdk
55
+
56
+ sentry_sdk.init(
57
+ dsn="https://<key>@<org>.ingest.sentry.io/<project>",
58
+ traces_sample_rate=1.0,
59
+ stream_gen_ai_spans=True,
60
+ send_default_pii=True, # required to capture prompts/outputs
61
+ )
62
+
63
+ # OpenAI, Anthropic, LangChain, LangGraph, HuggingFace Hub activate automatically
64
+ ```
65
+
66
+ ### Explicit configuration with `include_prompts` override
67
+
68
+ ```python
69
+ import sentry_sdk
70
+ from sentry_sdk.integrations.openai import OpenAIIntegration
71
+ from sentry_sdk.integrations.anthropic import AnthropicIntegration
72
+
73
+ sentry_sdk.init(
74
+ dsn="...",
75
+ traces_sample_rate=1.0,
76
+ stream_gen_ai_spans=True,
77
+ send_default_pii=True,
78
+ integrations=[
79
+ OpenAIIntegration(
80
+ include_prompts=True,
81
+ tiktoken_encoding_name="o200k_base", # for gpt-4o streaming token counts
82
+ ),
83
+ AnthropicIntegration(include_prompts=True),
84
+ ],
85
+ )
86
+ ```
87
+
88
+ ### Integrations that require explicit registration
89
+
90
+ ```python
91
+ import sentry_sdk
92
+ from sentry_sdk.integrations.litellm import LiteLLMIntegration
93
+
94
+ sentry_sdk.init(
95
+ dsn="...",
96
+ traces_sample_rate=1.0,
97
+ stream_gen_ai_spans=True,
98
+ send_default_pii=True,
99
+ integrations=[
100
+ LiteLLMIntegration(include_prompts=True), # 100+ providers via proxy
101
+ ],
102
+ )
103
+ ```
104
+
105
+ ### Usage examples
106
+
107
+ ```python
108
+ from openai import OpenAI
109
+ import sentry_sdk
110
+
111
+ client = OpenAI()
112
+
113
+ with sentry_sdk.start_transaction(name="AI inference", op="ai-inference"):
114
+ response = client.chat.completions.create(
115
+ model="gpt-4o",
116
+ messages=[{"role": "user", "content": "Say hello"}],
117
+ )
118
+ ```
119
+
120
+ ```python
121
+ import anthropic, sentry_sdk
122
+
123
+ client = anthropic.Anthropic()
124
+
125
+ with sentry_sdk.start_transaction(name="claude-request"):
126
+ message = client.messages.create(
127
+ model="claude-opus-4-5",
128
+ max_tokens=1024,
129
+ messages=[{"role": "user", "content": "Explain async/await"}],
130
+ )
131
+ ```
132
+
133
+ ## Manual Instrumentation — `gen_ai.*` Spans
134
+
135
+ Use when the library isn’t supported, or for wrapping custom AI logic.
136
+
137
+ ### `gen_ai.request` — Raw LLM call
138
+
139
+ ```python
140
+ import sentry_sdk, json
141
+
142
+ messages = [{"role": "user", "content": "Tell me a joke"}]
143
+
144
+ with sentry_sdk.start_span(op="gen_ai.request", name="chat gpt-4o") as span:
145
+ span.set_data("gen_ai.request.model", "gpt-4o")
146
+ span.set_data("gen_ai.request.messages", json.dumps(messages)) # must JSON-stringify
147
+ span.set_data("gen_ai.request.temperature", 0.7)
148
+ span.set_data("gen_ai.request.max_tokens", 500)
149
+
150
+ result = my_llm_client.chat(model="gpt-4o", messages=messages)
151
+
152
+ span.set_data("gen_ai.response.text", json.dumps([result.choices[0].message.content]))
153
+ span.set_data("gen_ai.usage.input_tokens", result.usage.prompt_tokens)
154
+ span.set_data("gen_ai.usage.output_tokens", result.usage.completion_tokens)
155
+ span.set_data("gen_ai.usage.total_tokens", result.usage.total_tokens)
156
+ ```
157
+
158
+ ### `gen_ai.invoke_agent` — Full agent lifecycle
159
+
160
+ ```python
161
+ import sentry_sdk
162
+
163
+ with sentry_sdk.start_span(op="gen_ai.invoke_agent",
164
+ name="invoke_agent Weather Agent") as span:
165
+ span.set_data("gen_ai.request.model", "gpt-4o")
166
+ span.set_data("gen_ai.agent.name", "Weather Agent")
167
+
168
+ final_output = my_agent.run(task="What's the weather in Paris?")
169
+
170
+ span.set_data("gen_ai.response.text", str(final_output))
171
+ span.set_data("gen_ai.usage.input_tokens", my_agent.usage.input_tokens)
172
+ span.set_data("gen_ai.usage.output_tokens", my_agent.usage.output_tokens)
173
+ ```
174
+
175
+ ### `gen_ai.execute_tool` — Tool/function call
176
+
177
+ ```python
178
+ import sentry_sdk, json
179
+
180
+ with sentry_sdk.start_span(op="gen_ai.execute_tool",
181
+ name="execute_tool get_weather") as span:
182
+ span.set_data("gen_ai.tool.name", "get_weather")
183
+ span.set_data("gen_ai.tool.type", "function") # "function"|"extension"|"datastore"
184
+ span.set_data("gen_ai.tool.input", json.dumps({"location": "Paris"}))
185
+
186
+ result = get_weather(location="Paris")
187
+
188
+ span.set_data("gen_ai.tool.output", json.dumps(result))
189
+ ```
190
+
191
+ ### `gen_ai.handoff` — Agent-to-agent transition
192
+
193
+ ```python
194
+ import sentry_sdk
195
+
196
+ with sentry_sdk.start_span(op="gen_ai.handoff",
197
+ name="handoff Billing → Refund Agent") as span:
198
+ span.set_data("gen_ai.agent.name", "Refund Agent")
199
+ result = refund_agent.run(context=billing_context)
200
+ ```
201
+
202
+ ## Span Attribute Reference
203
+
204
+ ### Common attributes
205
+
206
+ | Attribute | Type | Required | Description |
207
+ | ----------------------- | ------ | -------- | ---------------------------------------------------- |
208
+ | `gen_ai.request.model` | string | ✅ | Model identifier (e.g., `gpt-4o`, `claude-opus-4-5`) |
209
+ | `gen_ai.operation.name` | string | No | Human-readable operation label |
210
+ | `gen_ai.agent.name` | string | No | Agent name (for agent spans) |
211
+
212
+ ### Model config attributes
213
+
214
+ | Attribute | Type |
215
+ | ---------------------------------- | ------ |
216
+ | `gen_ai.request.temperature` | float |
217
+ | `gen_ai.request.max_tokens` | int |
218
+ | `gen_ai.request.top_p` | float |
219
+ | `gen_ai.request.frequency_penalty` | float |
220
+ | `gen_ai.request.presence_penalty` | float |
221
+ | `gen_ai.request.reasoning_effort` | string |
222
+
223
+ ### Content attributes (PII-gated — only when `send_default_pii=True` + `include_prompts=True`)
224
+
225
+ | Attribute | Type | Description |
226
+ | -------------------------------- | ------ | ------------------------------------- |
227
+ | `gen_ai.request.messages` | string | **JSON-stringified** message array |
228
+ | `gen_ai.request.available_tools` | string | **JSON-stringified** tool definitions |
229
+ | `gen_ai.response.text` | string | **JSON-stringified** response array |
230
+ | `gen_ai.response.tool_calls` | string | **JSON-stringified** tool call array |
231
+
232
+ > ⚠️ Span attributes only accept primitives — arrays/objects must be JSON-stringified
233
+ > before calling `span.set_data()`.
234
+
235
+ ### Token usage attributes
236
+
237
+ | Attribute | Type | Description |
238
+ | --------------------------------------- | ---- | ----------------------------------------- |
239
+ | `gen_ai.usage.input_tokens` | int | Total input tokens (including cached) |
240
+ | `gen_ai.usage.input_tokens.cached` | int | Subset served from cache |
241
+ | `gen_ai.usage.input_tokens.cache_write` | int | Tokens written to cache (Anthropic) |
242
+ | `gen_ai.usage.output_tokens` | int | Total output tokens (including reasoning) |
243
+ | `gen_ai.usage.output_tokens.reasoning` | int | Subset for chain-of-thought reasoning |
244
+ | `gen_ai.usage.total_tokens` | int | Sum of input + output |
245
+
246
+ > ⚠️ Cached and reasoning tokens are **subsets** of totals, not additive.
247
+ > Incorrect reporting produces wrong cost calculations in the dashboard.
248
+
249
+ ## Agent Workflow Hierarchy
250
+
251
+ ```
252
+ Transaction
253
+ └── gen_ai.invoke_agent "Weather Agent"
254
+ ├── gen_ai.request "chat gpt-4o"
255
+ ├── gen_ai.execute_tool "get_weather"
256
+ ├── gen_ai.request "chat gpt-4o" ← follow-up
257
+ └── gen_ai.handoff "→ Report Writer"
258
+ └── gen_ai.invoke_agent "Report Writer"
259
+ ├── gen_ai.request "chat gpt-4o"
260
+ └── gen_ai.execute_tool "format_report"
261
+ ```
262
+
263
+ This populates the **AI Agents Dashboard** in Sentry with per-agent latency, tool call
264
+ rates, token consumption, and model cost attribution.
265
+
266
+ ### Conversation Tracking
267
+
268
+ Link AI spans across turns in a multi-turn conversation.
269
+ Sentry groups spans by `gen_ai.conversation.id` into a chat-style timeline at **Explore
270
+ \> Conversations**.
271
+
272
+ **Prerequisites:** SDK >=2.64.0 (where `stream_gen_ai_spans` defaults to `True`, so AI
273
+ spans stream as standalone items) and `send_default_pii=True` — Conversations
274
+ reconstructs the chat from input/output attributes, so without PII capture the view will
275
+ be empty.
276
+
277
+ ```python
278
+ import sentry_sdk.ai
279
+
280
+ # Set at the start of a conversation
281
+ sentry_sdk.ai.set_conversation_id("conv_abc123")
282
+ # All subsequent AI spans carry gen_ai.conversation.id = "conv_abc123"
283
+ ```
284
+
285
+ Some integrations infer the conversation ID automatically.
286
+ For example, the OpenAI integration picks it up when you use the `conversation`
287
+ parameter:
288
+
289
+ ```python
290
+ import openai
291
+ import sentry_sdk
292
+
293
+ sentry_sdk.init(...)
294
+
295
+ conversation = openai.conversations.create()
296
+ response = openai.responses.create(
297
+ model="gpt-5.4",
298
+ input=[{"role": "user", "content": "What are the 5 Ds of dodgeball?"}],
299
+ conversation=conversation.id # automatically sets gen_ai.conversation.id
300
+ )
301
+ ```
302
+
303
+ A single conversation can span multiple traces, and a single trace can contain multiple
304
+ conversations.
305
+
306
+ ### User Attribution
307
+
308
+ To populate the **User** column in Conversations, call `set_user` once per request or
309
+ session before any AI calls:
310
+
311
+ ```python
312
+ sentry_sdk.set_user({"id": "user_123", "email": "jane@example.com", "username": "jane"})
313
+ ```
314
+
315
+ ## Streaming
316
+
317
+ | Integration | Streaming | Token counts in streams |
318
+ | ----------------- | --------- | -------------------------------------------------------- |
319
+ | OpenAI | ✅ | Requires `tiktoken>=0.3.0`; set `tiktoken_encoding_name` |
320
+ | Anthropic | ✅ | Automatic |
321
+ | LangChain | ✅ | Tracked |
322
+ | LiteLLM | ✅ | Tracked |
323
+ | Manual `gen_ai.*` | ✅ | Set token counts after stream completes |
324
+
325
+ ## Unsupported Providers
326
+
327
+ | Provider | Workaround |
328
+ | ----------- | --------------------------------------------------- |
329
+ | Cohere | Use `LiteLLMIntegration` or manual `gen_ai.*` spans |
330
+ | AWS Bedrock | Manual instrumentation |
331
+ | Mistral | `LiteLLMIntegration` |
332
+ | Groq | `LiteLLMIntegration` |
333
+ | Vertex AI | `GoogleGenAIIntegration` or `LiteLLMIntegration` |
334
+
335
+ ## Sampling Strategy
336
+
337
+ If your `traces_sample_rate` is below 1.0, you may be losing entire agent runs.
338
+ Use a `traces_sampler` that keeps 100% of gen_ai-related transactions while sampling
339
+ other traffic at a lower rate.
340
+
341
+ ## Troubleshooting
342
+
343
+ | Issue | Solution |
344
+ | ----------------------------------------- | -------------------------------------------------------------------------------------- |
345
+ | No AI spans appearing | Verify `traces_sample_rate > 0`; wrap calls in a transaction |
346
+ | Prompts not captured | Set `send_default_pii=True` and verify `include_prompts=True` (default) |
347
+ | LiteLLM not tracked | LiteLLM is NOT auto-enabled — add `LiteLLMIntegration` to `integrations=[]` explicitly |
348
+ | Token counts missing for OpenAI streaming | Install `tiktoken>=0.3.0` and set `tiktoken_encoding_name` |
349
+ | AI Agents Dashboard empty | Wrap agent runs in `gen_ai.invoke_agent` spans |
350
+ | User column shows “Unknown” | Call `sentry_sdk.set_user()` once per request or session |
351
+ | Wrong cost calculations | Ensure cached/reasoning token counts are subsets of totals, not additions |
@@ -0,0 +1,218 @@
1
+ # Crons — Sentry Python SDK
2
+
3
+ > Minimum SDK: `sentry-sdk` 1.x+ (stable); 1.44.1+ for async `@monitor`; 1.45.0+ for
4
+ > `MonitorConfig` upsert
5
+
6
+ ## Overview
7
+
8
+ Sentry Crons monitors scheduled jobs by receiving check-ins at job start, success, and
9
+ failure. Three approaches:
10
+
11
+ | Approach | Use when |
12
+ | -------------------------------------------- | ----------------------------------------------- |
13
+ | `@monitor` decorator | Simple wrapping of any function |
14
+ | `capture_checkin()` manually | Need control over timing, status, or heartbeats |
15
+ | `CeleryIntegration(monitor_beat_tasks=True)` | Celery Beat tasks — zero boilerplate |
16
+
17
+ ## Code Examples
18
+
19
+ ### `@monitor` decorator (simplest)
20
+
21
+ ```python
22
+ import sentry_sdk
23
+ from sentry_sdk.crons import monitor
24
+
25
+ @monitor(monitor_slug="nightly-report")
26
+ def generate_report():
27
+ # Sends IN_PROGRESS on start, OK on success, ERROR on exception
28
+ run_report()
29
+
30
+ # Async support (SDK 1.44.1+)
31
+ @monitor(monitor_slug="async-job")
32
+ async def async_task():
33
+ await do_async_work()
34
+
35
+ # Context manager syntax
36
+ def generate_report():
37
+ with monitor(monitor_slug="nightly-report"):
38
+ run_report()
39
+ ```
40
+
41
+ ### `@monitor` with `MonitorConfig` — upsert monitor definition (SDK 1.45.0+)
42
+
43
+ ```python
44
+ from sentry_sdk.crons import monitor
45
+
46
+ # Crontab schedule
47
+ @monitor(
48
+ monitor_slug="nightly-report",
49
+ monitor_config={
50
+ "schedule": {"type": "crontab", "value": "0 2 * * *"},
51
+ "timezone": "Europe/Vienna",
52
+ "checkin_margin": 10, # minutes late before MISSED alert
53
+ "max_runtime": 30, # minutes before TIMEOUT alert
54
+ "failure_issue_threshold": 3,
55
+ "recovery_threshold": 3,
56
+ },
57
+ )
58
+ def nightly_report():
59
+ generate_report()
60
+
61
+ # Interval schedule
62
+ @monitor(
63
+ monitor_slug="sync-job",
64
+ monitor_config={
65
+ "schedule": {
66
+ "type": "interval",
67
+ "value": 2,
68
+ "unit": "hour", # minute | hour | day | week | month | year
69
+ },
70
+ "checkin_margin": 5,
71
+ "max_runtime": 20,
72
+ },
73
+ )
74
+ def sync_data():
75
+ sync()
76
+ ```
77
+
78
+ ### Manual check-ins with `capture_checkin()`
79
+
80
+ ```python
81
+ from sentry_sdk.crons import capture_checkin
82
+ from sentry_sdk.crons.consts import MonitorStatus
83
+
84
+ # 1. Signal job started
85
+ check_in_id = capture_checkin(
86
+ monitor_slug="my-cron-job",
87
+ status=MonitorStatus.IN_PROGRESS,
88
+ )
89
+
90
+ try:
91
+ run_job()
92
+
93
+ # 2a. Signal success
94
+ capture_checkin(
95
+ monitor_slug="my-cron-job",
96
+ check_in_id=check_in_id, # links back to IN_PROGRESS
97
+ status=MonitorStatus.OK,
98
+ )
99
+ except Exception:
100
+ # 2b. Signal failure
101
+ capture_checkin(
102
+ monitor_slug="my-cron-job",
103
+ check_in_id=check_in_id,
104
+ status=MonitorStatus.ERROR,
105
+ )
106
+ raise
107
+ ```
108
+
109
+ ### Heartbeat pattern for long-running jobs
110
+
111
+ ```python
112
+ from sentry_sdk.crons import capture_checkin
113
+ from sentry_sdk.crons.consts import MonitorStatus
114
+ import time
115
+
116
+ def long_running_job():
117
+ check_in_id = capture_checkin(
118
+ monitor_slug="data-pipeline",
119
+ status=MonitorStatus.IN_PROGRESS,
120
+ )
121
+
122
+ for batch in get_batches():
123
+ process_batch(batch)
124
+ # Send periodic heartbeat to prevent TIMEOUT
125
+ capture_checkin(
126
+ monitor_slug="data-pipeline",
127
+ check_in_id=check_in_id,
128
+ status=MonitorStatus.IN_PROGRESS,
129
+ )
130
+
131
+ capture_checkin(
132
+ monitor_slug="data-pipeline",
133
+ check_in_id=check_in_id,
134
+ status=MonitorStatus.OK,
135
+ )
136
+ ```
137
+
138
+ ### Celery Beat auto-discovery
139
+
140
+ ```python
141
+ import sentry_sdk
142
+ from sentry_sdk.integrations.celery import CeleryIntegration
143
+
144
+ sentry_sdk.init(
145
+ dsn="...",
146
+ integrations=[
147
+ CeleryIntegration(
148
+ monitor_beat_tasks=True, # enables auto-discovery
149
+ exclude_beat_tasks=[
150
+ "some-noisy-task", # exact match
151
+ "health-check-.*", # regex pattern
152
+ ],
153
+ ),
154
+ ],
155
+ )
156
+
157
+ # In celery config — monitor slug = beat schedule entry name
158
+ from celery.schedules import crontab
159
+
160
+ app.conf.beat_schedule = {
161
+ "nightly-cleanup": { # → monitor slug: "nightly-cleanup"
162
+ "task": "tasks.cleanup_old_records",
163
+ "schedule": crontab(hour="1", minute="0"),
164
+ },
165
+ }
166
+ ```
167
+
168
+ Celery Beat constraints:
169
+
170
+ | Rule | Detail |
171
+ | -------------------- | ------------------------------------------------------------ |
172
+ | Auto-parses | `crontab` schedules only |
173
+ | First-run creation | Monitor created lazily on first task execution |
174
+ | No double-decoration | Don’t use `@monitor` on tasks with `monitor_beat_tasks=True` |
175
+ | Default | `monitor_beat_tasks=False` — must be explicitly enabled |
176
+
177
+ ## `MonitorStatus` Reference
178
+
179
+ ```python
180
+ from sentry_sdk.crons.consts import MonitorStatus
181
+
182
+ MonitorStatus.IN_PROGRESS # job has started
183
+ MonitorStatus.OK # job completed successfully
184
+ MonitorStatus.ERROR # job failed
185
+ # MISSED and TIMEOUT are generated server-side — not sent by SDK
186
+ ```
187
+
188
+ ## `MonitorConfig` Fields
189
+
190
+ | Field | Type | Required | Description |
191
+ | ------------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------ |
192
+ | `schedule` | `dict` | ✅ | `{"type": "crontab", "value": "* * * * *"}` or `{"type": "interval", "value": N, "unit": "..."}` |
193
+ | `timezone` | `str` | No | IANA timezone name, default `"UTC"` |
194
+ | `checkin_margin` | `int` | No | Minutes late before MISSED alert |
195
+ | `max_runtime` | `int` | No | Minutes after IN_PROGRESS before TIMEOUT |
196
+ | `failure_issue_threshold` | `int` | No | Consecutive failures before opening an issue |
197
+ | `recovery_threshold` | `int` | No | Consecutive successes to resolve an issue |
198
+
199
+ ## Best Practices
200
+
201
+ - Use `@monitor` with `monitor_config` so monitors are created automatically on first
202
+ run — no Sentry UI setup needed
203
+ - For Celery Beat, prefer `monitor_beat_tasks=True` over decorating individual tasks
204
+ - Send `IN_PROGRESS` before starting work so TIMEOUT detection starts immediately
205
+ - For jobs longer than `max_runtime`, send periodic `IN_PROGRESS` check-ins as
206
+ heartbeats
207
+ - Sentry enforces a rate limit of **6 check-ins/minute per monitor-environment** —
208
+ excess are dropped silently
209
+
210
+ ## Troubleshooting
211
+
212
+ | Issue | Solution |
213
+ | ------------------------------------ | ---------------------------------------------------------------------------------------- |
214
+ | Monitor not created in Sentry | Provide `monitor_config` — monitors are not auto-created without it (unless Celery Beat) |
215
+ | MISSED alerts firing too early | Increase `checkin_margin` to allow for job startup time |
216
+ | TIMEOUT alerts on slow jobs | Increase `max_runtime` or send periodic `IN_PROGRESS` heartbeats |
217
+ | Duplicate check-ins for Celery tasks | Remove `@monitor` decorator from tasks that use `monitor_beat_tasks=True` |
218
+ | Async `@monitor` not working | Upgrade SDK to ≥ 1.44.1 |