Context
The UI is built against the current happy path: two protocols, each with accumulated history. Several states aren't handled — a freshly deployed environment with no runs recorded, a newly added protocol with a single score, a protocol whose only runs have failed. A history chart with one data point, or a registry with zero rows, shouldn't render as a broken layout or an empty box with no explanation.
Scope
In scope: audit every data-driven view for empty, single-point, and all-failed states, and give each a deliberate rendering with an explanation of what's happening.
Out of scope: changing the API contract or what data gets returned.
Acceptance criteria
Difficulty
Intermediate — needs familiarity with the codebase or methodology
Notes / open questions
The fourth criterion is the important one. A user misreading "no data yet" as "this protocol scored zero" would be actively misleading, which matters more here than in most products.
Context
The UI is built against the current happy path: two protocols, each with accumulated history. Several states aren't handled — a freshly deployed environment with no runs recorded, a newly added protocol with a single score, a protocol whose only runs have failed. A history chart with one data point, or a registry with zero rows, shouldn't render as a broken layout or an empty box with no explanation.
Scope
In scope: audit every data-driven view for empty, single-point, and all-failed states, and give each a deliberate rendering with an explanation of what's happening.
Out of scope: changing the API contract or what data gets returned.
Acceptance criteria
Difficulty
Intermediate — needs familiarity with the codebase or methodology
Notes / open questions
The fourth criterion is the important one. A user misreading "no data yet" as "this protocol scored zero" would be actively misleading, which matters more here than in most products.