Show an unreachable origin in the web UI (step 19)
A watcher that cannot fetch leaves the server perfectly reachable and every branch row stale — a calm list that implies nothing changed. The state was already recorded and served at /api/watcher; only nothing rendered it. The banner lives in the shared nav fragment, so every view inherits it, and is fed from the view's own polling tick without being chained to it. It stays separate from live-indicator: that one reports whether the browser reaches the server, this one whether the server reaches origin. Also caps the log volume the outage exposed: a lasting fetch failure is logged when its message changes, not on every cycle, and the recovery is logged once. Same for an invalid atTimes slot. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
18a41e9ced
commit
0193386642
@@ -86,6 +86,12 @@ tbody tr:nth-child(even) { background: var(--row); }
|
||||
tbody tr:last-child td { border-bottom: 0; }
|
||||
tbody tr:hover { background: color-mix(in srgb, var(--link) 8%, transparent); }
|
||||
tbody.is-stale { opacity: 0.55; }
|
||||
|
||||
/* Server-side staleness: the watcher cannot reach origin. Distinct from the live
|
||||
indicator, which reports whether this browser reaches the server. */
|
||||
.watcher-banner { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; margin: -8px 0 18px; padding: 9px 12px; border-radius: 8px; background: var(--failed-bg); color: var(--failed-text); font-size: 13px; }
|
||||
.watcher-banner strong { text-transform: uppercase; letter-spacing: 0.03em; font-size: 12px; }
|
||||
.watcher-banner[hidden] { display: none; }
|
||||
.branch { font-weight: 650; }
|
||||
.duration-cell { white-space: nowrap; }
|
||||
/* queue wait time of a pending build — italic to distinguish it from real build time */
|
||||
|
||||
Reference in New Issue
Block a user