<observations>
Date: May 1, 2026
* 🟡 (06:15) User suggested span-based graphs make more sense than logs-based for Stripe Projects dashboard
* 🟡 (06:15) Agent found `getsentry.stripe_projects` logger uses 12 files, all under `getsentry/web/stripe_projects/` — 11 use logger name `"getsentry.stripe_projects"`, 1 (accounts.py) uses `"getsentry.stripe_projects.accounts"`
* 🟡 (06:15) Agent found logging root cause: `"getsentry"` logger in `getsentry/conf/settings/defaults.py` has `"level": "INFO"` but NO handlers specified — inherits root logger's `"console"` only. No `"internal"` or `"internal:force"` handler (which routes to Sentry SDK → ourlogs). Compare: `"stripe.payments"` explicitly has `"handlers": ["console", "internal:force"]`
* 🟡 (06:15) Agent confirmed: `getsentry.stripe_projects` inherits from `getsentry` → console only → logs go to stdout but never reach ourlogs pipeline. The 2 events that DID appear (deep_link.created, resource.service_updated) may have used a different code path or brief config change
* 🟡 (06:16) User requested filtering spans by success/failure to remove noise from dashboard
* 🟡 (06:16) Agent found span status breakdown (7d): span.status=None/http=None: 10,418; span.status=ok/http=200: 1,726; span.status=ok/http=302: 154
* 🟡 (06:16) Agent found successful spans per endpoint (7d): account_requests: 1,030; resources: 0; services: 696; deep-link-login: 154; oauth/token: 0; deep_links: 0
* 🟡 (06:17) Agent found resources endpoint has 1,423 total spans ALL with status=None/http=None — zero successful requests; all failing at permission/middleware layer
* 🟡 (06:17) Full span breakdown by endpoint (7d): account_requests None/None=6,695 + ok/200=1,030; services None/None=1,684 + ok/200=696; resources None/None=1,423; deep-link-login None/None=616 + ok/302=154
* 🟡 (06:17) Agent removed 12 log-based widgets from dashboard 4510068, leaving 2 (Account Request Flows + Activity by Endpoint)
* 🟡 (06:20) Agent rebuilt dashboard 4510068 ...