Summary
Three distinct root causes are each currently fragmented across multiple separate Sentry issues, which dilutes their apparent severity (each fragment individually looks small) and defeats "existing issue" alert-trigger logic (each fragment is technically a separate "new" issue the first time it appears).
Evidence
- "Error: analyzer_timeout" — 3 issues (GITTENSORY-V, 18, 13), same culprit
POST /v1/enrich, 21 combined events.
- "AI review did not produce public notes for the PR head" — 2 issues (GITTENSORY-C, W), same culprit
runAiReviewForAdvisory, 434 combined events.
- "PR public-surface publish failed — review produced output but nothing was posted to the PR" — 2 issues (GITTENSORY-5, 10), two different culprits shown (
finishPublicSurfacePublication vs maybePublishPrPublicSurface) — confirm whether these are genuinely the same failure mode from two call sites (in which case still worth a shared fingerprint) or meaningfully different.
Requirements
- Find the capture site(s) for each of these three event families (likely all going through the same
forwardStructuredLogToSentry-style path, or the analyzer/enrichment service's own exception capture).
- Add an explicit Sentry
fingerprint at capture time so repeat occurrences of the same underlying condition group into one issue, instead of relying on Sentry's default message-based grouping (which is being defeated by some dynamic value in the message/context).
- For the "PR public-surface publish failed" pair specifically: confirm same-vs-different-root-cause before merging the fingerprint — don't force two genuinely distinct bugs into one issue just because the message text matches.
- Consider whether Sentry's server-side Fingerprinting Rules (project settings, no code change) are sufficient for these three cases instead of a code-level fingerprint call — cheaper to maintain if so.
Deliverables
Part of #5007.
Summary
Three distinct root causes are each currently fragmented across multiple separate Sentry issues, which dilutes their apparent severity (each fragment individually looks small) and defeats "existing issue" alert-trigger logic (each fragment is technically a separate "new" issue the first time it appears).
Evidence
POST /v1/enrich, 21 combined events.runAiReviewForAdvisory, 434 combined events.finishPublicSurfacePublicationvsmaybePublishPrPublicSurface) — confirm whether these are genuinely the same failure mode from two call sites (in which case still worth a shared fingerprint) or meaningfully different.Requirements
forwardStructuredLogToSentry-style path, or the analyzer/enrichment service's own exception capture).fingerprintat capture time so repeat occurrences of the same underlying condition group into one issue, instead of relying on Sentry's default message-based grouping (which is being defeated by some dynamic value in the message/context).Deliverables
Part of #5007.