You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The post-CHAOS-F1 fix means the row is now counted as a Failure (will eventually dead-letter and fire PropagationDeadLettered above) — but the operator should investigate the schema/state drift NOW. Find the row in pending_propagations, walk back to the api caller, and decide whether the missing resource should be inserted, the propagation row should be aborted, or the underlying race condition should be patched.
"name": "instant-worker — brevo_send_errors_total spike (SEND-side of email pipeline broken)",
3
+
"type": "NRQL",
4
+
"description": "P1 page. The SEND-side complement to email-delivery-ratio-low.json: that alert measures Brevo → /webhooks/brevo (RECEIVE), this one measures worker → Brevo /v3/smtp/email (SEND). Brevo's transactional API returns 201 the instant it accepts the POST, so a degraded send path (auth failure, rate limit, network) NEVER affects the delivery-ratio alert — the messages simply never queue at Brevo. The classification label separates fixable-by-key-rotation (permanent: 401/403) from fixable-by-backoff (transient: 5xx, 429) so the operator knows which runbook to follow. Source: worker/internal/metrics/metrics.go (BrevoSendErrorsTotal), emit site worker/internal/email/brevo/brevo.go.",
5
+
"enabled": true,
6
+
"nrql": {
7
+
"query": "SELECT sum(brevo_send_errors_total) FROM Metric WHERE metricName = 'brevo_send_errors_total' FACET classification, status_code"
"name": "instant-worker — email_missing_renderer (no Go renderer for an email kind — silent user-facing breakage)",
3
+
"type": "NRQL",
4
+
"description": "P0 page. email_missing_renderer_total{kind} ticks every time the worker tries to send an email whose `kind` is not in the eventEmailBuilders registry. After the 2026-05-15 expiry-email retro the platform moved 18 email kinds off Brevo templates and onto Go-side renderers; this metric is the registry-iteration sentinel for that decision. ANY tick means a customer-facing email path is broken silently — no body content, no fallback, just a worker ERROR log + a missed message. Runbook: search NR Logs for `worker.email.missing_renderer` with the offending kind, then add the renderer to worker/internal/email/renderers/ AND add the kind to the coverage test that iterates eventEmailBuilders. Source: worker/internal/metrics/metrics.go (EmailMissingRendererTotal), emit site worker/internal/email/forwarder.go.",
5
+
"enabled": true,
6
+
"nrql": {
7
+
"query": "SELECT sum(email_missing_renderer_total) FROM Metric WHERE metricName = 'email_missing_renderer_total' FACET kind"
"name": "instant-api — magic_link_email_rate_limited spike (legitimate user being throttled)",
3
+
"type": "NRQL",
4
+
"description": "P2 warning. instant_magic_link_email_rate_limited_total ticks every time the magic-link rate limiter denies a /auth/login request (per-email or per-IP). Modal harmless cause: a user double-clicking the login button. Modal harmful cause: an upstream bot sweep wedging the per-IP quota for legitimate users sharing the same NAT or office network, OR a bug in the dashboard re-firing the magic-link request on a hot retry path (BugBash 2026-05-20 found one such case). Threshold here is intentionally noisier than a page — fire WARNING on >10 events in 10 minutes so the operator can correlate against a /auth/login spike. Source: api/internal/metrics/metrics.go (MagicLinkEmailRateLimitedTotal), emit site api/internal/handlers/auth.go.",
5
+
"enabled": true,
6
+
"nrql": {
7
+
"query": "SELECT sum(instant_magic_link_email_rate_limited_total) FROM Metric WHERE metricName = 'instant_magic_link_email_rate_limited_total'"
"name": "instant-worker — orphan_sweep reaped instant-deploy-* ns with no backing deployments row (P0-3 atomic-provision)",
3
+
"type": "NRQL",
4
+
"description": "P0 page. instant_orphan_sweep_reaped_total{reason='no_db_row'} > 0 sustained for >1h. A no_db_row event means the orphan_sweep reconciler found an instant-deploy-<appID> namespace in the live cluster with NO matching deployments row in the platform DB. That can only happen if the api created the k8s namespace but the INSERT into deployments never committed — the P0-3 atomic-provision symptom surfacing in prod. Runbook: search NR Logs for `jobs.orphan_sweep.proposed_reap` with reason=no_db_row, capture the app_id, then trace back through the api POST /deploy/new logs for the same time window to find the partial-commit path that needs the atomic-rollback fix. Source: worker/internal/metrics/metrics.go (OrphanSweepReapedTotal), emit site worker/internal/jobs/orphan_sweep_reconciler.go.",
5
+
"enabled": true,
6
+
"nrql": {
7
+
"query": "SELECT sum(instant_orphan_sweep_reaped_total) FROM Metric WHERE metricName = 'instant_orphan_sweep_reaped_total' AND reason = 'no_db_row'"
0 commit comments