ERR-14: No More Silent Failures on List Pages
ERR-14: No More Silent Failures on List Pages
Version: v0.1.123
Category: Error UX
The Problem
In compliance tooling, ambiguity is dangerous. Prior to this release, if the People or Matches pages failed to load their data — due to a network timeout, a server error, or any other fetch failure — the dashboard would silently fall back to an empty table.
The loading spinner would disappear, and the user would be left staring at an empty list with no explanation. In a sanctions screening context, this creates a serious risk:
An empty Matches table could be misread as "no sanctions matches found" when the reality is "data failed to load".
Errors were only visible in the browser's developer console via console.error — invisible to the compliance officer using the dashboard.
The Fix
Both people/page.tsx and matches/page.tsx now include an explicit error state managed via React's useState. When a fetch fails, the error is captured and surfaced directly in the UI.
What users will see
When an error occurs loading the People or Matches list:
- An error banner appears above the table, clearly indicating that data could not be loaded.
- The banner uses a distinct visual treatment — an amber or red border — so it cannot be confused with an empty-state message.
- A "Try again" button is shown inline, allowing the user to immediately retry the fetch without refreshing the entire page.
Behaviour comparison
| Scenario | Before v0.1.123 | From v0.1.123 |
|---|---|---|
| Fetch succeeds, no results | Empty table | Empty table (unchanged) |
| Fetch fails (network error) | Empty table, no message | Error banner with retry button |
| Fetch fails (server error) | Empty table, no message | Error banner with retry button |
| User retries after failure | Full page refresh required | Inline "Try again" button |
Why This Matters for Compliance
The People and Matches pages are the primary surfaces compliance teams use to review screening results and manage monitored individuals. A failed load that looks like a clean result could cause a compliance officer to:
- Miss a sanctions match that was present but failed to render.
- Close a case prematurely based on an empty — but broken — list.
- Lose audit confidence in the dashboard's reliability.
By making fetch errors explicit and immediately actionable, the dashboard now clearly communicates its state at all times.
Affected Pages
/dashboard/people— List of monitored individuals./dashboard/matches— List of potential or confirmed sanctions matches.