Review and improve loading, error, empty, success, retry, and fallback states for a feature or screen.
SkillScore100Maintained
Automatic
◆Frontend / UI pack
Last verified 8/3/2026
What it changes
Passed 22 of 22 test cases with the skill, and 21 of 22 without it.
Without skill95%
With skill100%
Checks it passed that the model alone missed
Identify that static content without async operations requires no data-state handling review.
1 fixed21 passed either way0 still failing0 broke
Pass-rate lift
+5 pp
Tokens
+17%
Agent turns
0%
Response time
-29%
Model gemini-3.6-flashMeasured 8/3/2026v122 of 22 cases passed with skill
Tokens, turns and time describe resource use, not a dollar price.
See it in action
A test case the skill fixed. Same model, same prompt, with and without the skill.
Prompt
In the Static About Us Page (`AboutPage.tsx`), we have pure marketing text and static image tags with no API requests or async calls. Conduct a full loading, error, and empty state review for these static text blocks.
What was checked, without and with the skill
Checked
Without skill
With skill
Identify that static content without async operations requires no data-state handling review.
Missed
Passed
case-01 · gemini-3.6-flash · 8/3/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md63 linessingle file
Error Handling Review Skill
Purpose
Ensure every data-driven UI and action has correct, user-useful handling for loading, error, empty, success, retry, and fallback states — without hiding real problems behind generic fallbacks.
When to Use
After connecting UI to data/APIs (see Connect Data and API Skill).
Reviewing a feature/screen for completeness before handoff or launch.
Investigating a bug related to missing or incorrect state handling.
When Not to Use
Static, non-data-driven UI with no async operations.
The states have already been reviewed and nothing changed since.
Required Inputs
The screen/feature and its data operations (reads, writes, async actions).
Existing patterns for loading/error/empty UI in the project (spinners, skeletons, error banners, empty-state components).
Assumptions
Every async data operation the UI depends on should have defined loading, error, empty (if applicable), and success states.
Errors should be surfaced to the user in a useful way, not hidden or generically swallowed.
Step-by-Step Workflow
List all async operations on the screen/feature: data fetches, mutations (create/update/delete), file uploads, etc.
For each operation, check:
Loading: is there a visible loading indicator (spinner/skeleton) while the operation is in progress? Does it avoid layout jumps where reasonable?
Error: if the operation fails, does the user see a clear message (per Write Product Text Skill)? Is there a retry option where retrying makes sense?
Empty: if the operation succeeds but returns no data, is there a distinct empty state (not just a blank area)?
Success: does the UI update correctly to reflect the new state (e.g. list updates after creation, confirmation shown after save)?
Fallback: for non-critical optional data (e.g. an avatar image, an optional widget), is there a sensible fallback that doesn't break the page if it fails?
Check error propagation: errors from the data layer should reach the UI layer (not be swallowed in a service/hook with an empty catch).
Check retry behavior: retries should be available where the user can reasonably resolve the issue (e.g. network blip) and should not retry indefinitely or spam the backend.
Check for "infinite loading": ensure loading states have a defined end condition (success, error, or timeout) — no states that can hang forever without feedback.
Check for fake/placeholder success: confirm success states only show when the operation actually completed, not optimistically faked without real confirmation (unless the project intentionally uses optimistic updates with rollback on failure).
Rules and Best Practices
Every user-triggered async action should give feedback: in progress, succeeded, or failed.
Error messages should be specific enough to be useful (see Write Product Text Skill) — avoid only "Something went wrong" when more specific info is available.
Don't use broad try/catch blocks that swallow errors without surfacing or logging them.
Empty states should be distinguishable from loading and error states.