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

kobotoolbox / kpi / 35646217562
83%
master: 76%

Build:
Build:
LAST BUILD BRANCH: beccagraber/dev-2857-external-choices
DEFAULT BRANCH: master
Ran 21 Sep 2026 07:44PM UTC
Jobs 10
Files 909
Run time 3min
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

21 Sep 2026 07:39PM UTC coverage: 82.922% (+1.1%) from 81.844%
35646217562

push

github

web-flow
feat(frontend): improve error handling DEV-2795 (#7561)

### đŸ“Ŗ Summary

Error messages no longer dump raw server output: you either get the
message the server actually wrote, or a plain "An error occurred".

### 💭 Notes

When something went wrong on the server, a notification could contain a
whole error page or a traceback. Same for a few screens that print the
error instead of toasting it. Those now fall back to a short generic
message, with the full response kept in the browser console for support.

Validation errors read as sentences too. A form that failed on a field
used to produce `{"name":["This field is required."]}`; it now says
`name: This field is required.`

Changes here:
- `api/flattenErrorBody.ts` (new) — parsed body into one line - replaces
the old "unwrap a lone `detail` key" trick in `notify()`
- `api/ServerError.ts` — a body that fails `JSON.parse` no longer lands
in `detail`, only on `parsedResponse` for logging
- `api/onErrorDefaultHandler.ts` — `getApiErrorMessage` is now a single
call to `flattenErrorBody`
- `api.ts` (`handleApiFail`), three things:
- the docstring already claimed HTML was suppressed, but only the
Werkzeug `.errormsg` pluck existed, so production pages fell right
through. Order is now Werkzeug pluck (development only) → JSON body →
generic
- Sentry gets `${status} ${statusText}` as the title with the body in
`extra`
- `utils.ts` — `getErrorMessage()` is now flattened and escaped
- Fixed screens that print the body instead of toasting it
- Tests added

### 👀 Preview steps

1. â„šī¸ have an account and a project with some submissions, and browser
DevTools open on the Network tab
2. trigger any error notification you can reproduce — Project → Settings
→ Sharing and inviting a username that doesn't exist is an easy one
3. đŸŸĸ notice the notification still uses the server's own wording;
genuine error messages are untouched
4. â„šī¸ now play broken server: right-click that failed request in Network
→ **Override content**, repl... (continued)

10246 of 13582 branches covered (75.44%)

32775 of 39525 relevant lines covered (82.92%)

5.51 hits per line

Coverage Regressions

Lines Coverage ∆ File
12
52.81
6.52% kobo/apps/audit_log/models.py
1
78.57
44.05% kobo/apps/audit_log/base_views.py
Jobs
ID Job ID Ran Files Coverage
1 35646217562.1 21 Sep 2026 07:44PM UTC 904
43.76
2 35646217562.2 21 Sep 2026 07:44PM UTC 904
52.7
3 35646217562.3 21 Sep 2026 07:44PM UTC 904
49.36
4 35646217562.4 21 Sep 2026 07:45PM UTC 906
45.05
5 35646217562.5 21 Sep 2026 07:45PM UTC 906
50.63
6 35646217562.6 21 Sep 2026 07:46PM UTC 906
53.96
7 35646217562.7 21 Sep 2026 07:47PM UTC 904
58.54
8 35646217562.8 21 Sep 2026 07:48PM UTC 907
68.0
9 35646217562.9 21 Sep 2026 07:49PM UTC 906
59.63
10 35646217562.10 21 Sep 2026 07:51PM UTC 909
70.35
Source Files on build 35646217562
  • Tree
  • List 909
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • a3c71cb2 on github
  • Prev Build on main (#35384953391)
  • Next Build on main (#35684197183)
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