Daily Sentry triage
A read-only Sentry route that clusters unresolved errors, suppresses known tracked noise, opens only new actionable ENG bugs, and posts a compact daily summary.
Operating model
timed jobThe timer creates one report issue each morning. Symphony fetches unresolved Sentry issues with read-only credentials, groups effective clusters, checks Linear idempotency labels, and creates follow-up bugs only for genuinely new actionable clusters.
The route may create Linear issues and labels, but it never resolves, assigns, annotates, or changes Sentry state. Sentry mutations belong to merge-stage issue resolution, not daily triage.
System shape
click the nodesThe route intentionally avoids helper-path fragility. It can use an installed helper when healthy, but read-only CLI or API fallbacks are first-class paths.
Cadence design
compare modesEach timed job has a small set of modes that decide whether the run is healthy, degraded, or ready to create follow-up work. Use the controls to compare the operating contract.
Prove access without mutating Sentry
The run validates Slack and Sentry access, forces env-token auth, and records helper fallback decisions early.
- SENTRY_AUTH_TOKEN present
- SENTRY_FORCE_ENV_TOKEN=1
- Slack destination available or fallback planned
- helper path not pinned
The run can close when Sentry, Linear dedupe, Slack or fallback, and run-health rows are complete.
Execution tracks
interactiveThe tracks make each run inspectable. They separate inputs, outputs, and failure modes so reports do not collapse into vague status updates.
Error clusters
Group unresolved Sentry issues into effective clusters and decide whether each is new, tracked, canceled, duplicate, or noise.
- org issues endpoint
- project filters
- issue metadata
- effective clusters
- new bug candidates
- tracked cluster count
Triage risk map
priority mapThese are the common ways a daily error triage can create noise or miss important work.
969284807062Output rubric
ticket rulesThe run should create follow-up work only when the output is concrete. Use the rubric to keep reports, bug tickets, and operational follow-ups separated.
New cluster
Use when the unresolved cluster is not already tracked and has a concrete user-facing or operational impact.
- new backend exception
- frontend crash with users
- auth callback failure
Run contract
evidence rowsThe daily Sentry workpad must separate raw counts, effective clusters, new tickets, tracked tickets, warning signals, and fallback paths.
Timed issue
Title format is Daily Sentry triage - YYYY-MM-DD with report:sentry-triage, sentry, and observability labels.
Linear-only writes
Sentry stays read-only. Allowed writes are new Linear labels or bugs, one report comment, one Slack summary, and Symphony state changes.
Current window UTCPrevious window UTCSlack preflightSentry preflightRaw unresolved issue countEffective cluster countNew ticket countTracked cluster countTransaction warning countEarly-warning signal countRun-health retrospectiveSlack URL or stdout fallbackCommand plan
operator pathThe daily timer depends on read-only Sentry auth and the Linear CLI seeder.
sudo -u symphony /opt/symphony/elixir/scripts/create_sentry_triage_issue.sh --dry-run --date 2026-05-21sudo systemctl enable --now symphony-sentry-triage.timersystemctl list-timers | grep symphony-sentry-triageSENTRY_FORCE_ENV_TOKEN=1 sentry-cli issues list --org agencycore --project ac-python-apiCache-keyed helper paths are brittle. Discover helpers dynamically and switch to equivalent read-only API or CLI calls after the first helper failure for an endpoint.
Rollout path
ship safelyDry-run the seeder no writes
Confirm labels, title, state, active cycle behavior, report contract, and workpad rows.
Enable read-only access preflight
Install tokens and verify the Sentry CLI or API path works without interactive login.
Allow ticket creation idempotent
Create only untracked actionable clusters, then verify every label and state.
Tune noise filters daily review
Use repeated tracked or benign clusters to refine idempotency and summary rules.