diff --git a/backend/internal/web/admin_overview.go b/backend/internal/web/admin_overview.go index 9d1ca86..10b71a7 100644 --- a/backend/internal/web/admin_overview.go +++ b/backend/internal/web/admin_overview.go @@ -64,8 +64,11 @@ type siteRow struct { // overviewView assembles the landing page from the store's read model: one // SeriesShapes pass per filter summed in Go (the shipped surface offers ten // grouped passes, not a stats query — #140), the pass log's latest pass per -// Site, and the roster. A failure in any read is a 500 with a logged reason, -// never a page of silent zeroes. +// Site, and the roster. A failure in the SeriesShapes, pass or roster reads +// is a 500 with a logged reason, never a page of silent zeroes. The three +// fault-input reads (RefusingSince, SidecarOK, NoChapterShare) fail open: +// a failing read logs and contributes no fault, so the landing page still +// renders — the same fail-open the poller uses for owner notices. func (h *Handler) overviewView() (overviewView, error) { now := time.Now() cutoff := now.Add(-ownerWindow).UnixMilli()