• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / supabase / 41885944037
87%

Build:
DEFAULT BRANCH: master
Ran 04 Nov 2026 06:24PM UTC
Jobs 1
Files 189
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

04 Nov 2026 06:19PM UTC coverage: 87.003% (+0.2%) from 86.839%
41885944037

push

github

web-flow
feat(studio): classify errors with fault, reason, and per-tag Sentry sampling (#52730)

Follows #52707 (rename `ResponseError` to `StudioError`).

Resolves FE-4772.

## What

Introduces the error core for Studio error classification.

- **Tagged errors.** `lib/errors/studio-errors.ts` defines
`Data.TaggedError` classes (`RequestAborted`, `NetworkUnreachable`,
`MalformedResponse`, `PlatformError`, `UnclassifiedApiError`,
`DbConnectionTimeout`, `UnexpectedError`). Each carries `fault`,
`reason`, `classifiedBy` (`rule` or `default`), `retryable`, and
`service`. `StudioError` is the union type; use `isStudioError` instead
of `instanceof`.
- **Two classifiers** in `data/error-classification.ts`:
- `classifyResponseError` is only for errors from an API response: known
message patterns first, then defaults by status (5xx `PlatformError`,
4xx `UnclassifiedApiError`, no status `UnexpectedError`).
- `classifyError` is for everything else: aborts, browser fetch failures
(matched by message, so ordinary `TypeError` bugs stay
`UnexpectedError`), and unexpected errors.
- `handleError` picks between them, reports, and rethrows the same
instance so React Query receives the classified error.
- **Routing and sampling.** `lib/errors/error-routing.ts` maps every tag
to a Sentry sample rate (`SAMPLE_NEVER`, `SAMPLE_OTHER`, `SAMPLE_OWNED`,
`SAMPLE_ALWAYS`). `reportStudioError` tags events with `sample_rate`,
and `beforeSend` applies it. `alwaysCapture` reports at rate 1. The
global Sentry error `sampleRate` stays unset so the rates don't
multiply.
- **Network failures.** A fetch failure is a `user` fault with reason
`offline` when the browser reports being offline, and a `platform` fault
otherwise.
- **Hand-built errors.** Call sites that wrapped caught exceptions or
made up status codes now use `classifyError` or a specific class instead
of `classifyResponseError`.

## Behavior changes

- Errors that previously went unreported, including unexpected errors
with a message, ... (continued)

2042 of 2411 branches covered (84.7%)

Branch coverage included in aggregate %.

52 of 54 new or added lines in 11 files covered. (96.3%)

1 existing line in 1 file now uncovered.

2838 of 3198 relevant lines covered (88.74%)

198.0 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
54.79
0.0% apps/studio/lib/api/self-hosted/mcp.ts
1
75.56
0.97% apps/studio/lib/sentry-client-options.ts

Coverage Regressions

Lines Coverage ∆ File
1
87.5
-12.5% apps/studio/lib/telemetry/use-track-funnel-error.ts
Subprojects
ID Flag name Job ID Ran Files Coverage
1 studio-tests 41885944037.1 04 Nov 2026 06:24PM UTC 756
38.18
GitHub Action Run
Source Files on build 41885944037
  • Tree
  • List 189
  • Changed 154
  • Source Changed 10
  • Coverage Changed 154
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #41885944037
  • b3dd6612 on github
  • Prev Build on master (#41869272496)
  • Next Build on master (#41909685063)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc