All Docs
FeaturesCalmony Sanctions MonitorUpdated March 12, 2026

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:

  1. An error banner appears above the table, clearly indicating that data could not be loaded.
  2. The banner uses a distinct visual treatment — an amber or red border — so it cannot be confused with an empty-state message.
  3. A "Try again" button is shown inline, allowing the user to immediately retry the fetch without refreshing the entire page.

Behaviour comparison

ScenarioBefore v0.1.123From v0.1.123
Fetch succeeds, no resultsEmpty tableEmpty table (unchanged)
Fetch fails (network error)Empty table, no messageError banner with retry button
Fetch fails (server error)Empty table, no messageError banner with retry button
User retries after failureFull page refresh requiredInline "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.