Five states, five treatments

Loading
Empty
No routines yet.
Not found
That routine could not be found.
Hint
Minute hour day month weekday, in UTC.
Error
We couldn't load your routines.

The rule

Never

Inbox

Nothing needs your attention right now.

The request failed. Nobody knows whether anything needs attention — least of all the interface, which just said it didn't.

Always

Inbox

We couldn't load your inbox.

Anything waiting on you is still waiting.

Try again

Says what is unknown, and does not spend the user's trust on a claim it cannot make.

A failed read must never render as an empty state. "Nothing here" is a claim about the world; a failed request is an admission that we cannot see the world. In a supervisory interface the two are not merely different in tone — telling someone that nothing needs them, when in truth an agent is blocked and waiting, is the single most damaging thing the product can say. Branch on the error before the empty case, always.

Two implementation notes. A polling query reports itself pending again while it retries, so branching on "is loading" before "has errored" makes the message flicker on the poll interval — hold the error steady from the second failure onward. And distinguish only authentication failure from everything else: one unreachable server surfaces under three or four different transport codes depending on what sits in the path, and no member has ever been helped by being told which.