Skip to content

Commit 909434f

Browse files
cansofgreaseclaude
andcommitted
Show the whole year on the downtime heatmap, and say what each day was
- On five of the nine themes the heatmap's empty day was the exact colour of the panel behind it, so a year of clean days drew as blank space and only the days with an outage appeared. The map looked like a handful of floating marks rather than a calendar, and the shading across outage days read as missing because there was nothing around it to compare against. Empty days are now faintly visible on every theme - still clearly nothing-happened, but part of the grid. - Hovering a day now always tells you something. Only days with an outage or a gap in monitoring were labelled, so pointing at any ordinary day did nothing, which reads as broken rather than calm. A clean day now says its date and "no outages" - and since the grid is 366 small squares, the date alone is worth having. It also means the year is finally readable with a screen reader: before, only the bad days had a name and the rest were unlabelled, so there was no way to place them in time. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 0cf9bb6 commit 909434f

2 files changed

Lines changed: 29 additions & 16 deletions

File tree

docs/security-model.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ When a password is set:
341341
- Four things are exempt from auth: login, logout, a `GET /api/access` so the UI
342342
can tell you what state it is in before you have signed in, and
343343
`/api/quick-setup`, the first-run dialog's endpoint. The access entry is the
344-
only one the exemption table scopes by method `POST /api/access`, which
344+
only one the exemption table scopes by method - `POST /api/access`, which
345345
changes who may reach the dashboard and what the password is, is gated like
346346
every other write. The other three name a path and nothing else, so every
347347
method reaches the handler; each handler then answers `POST` alone and returns
@@ -351,19 +351,19 @@ When a password is set:
351351
response was lost would otherwise be refused by the very login that answer
352352
had just enabled. The handler gates itself on state instead of on a session.
353353
Once the answer is recorded, every later call is an "already done" 200 that
354-
writes nothing. Before that, a full answer the one that would set access and
355-
a password is refused with a 403, and which 403 depends on the 48-hour
354+
writes nothing. Before that, a full answer - the one that would set access and
355+
a password - is refused with a 403, and which 403 depends on the 48-hour
356356
first-run window: while the window is open, an install already secured out of
357357
band answers "a login is already configured" and points at Settings > Access;
358358
once the window closes, the window gate refuses ahead of that check and
359359
answers "Quick Setup is no longer offered", on any install, secured or not.
360-
Neither writes anything. The bare "dismiss" marker takes neither path it is
360+
Neither writes anything. The bare "dismiss" marker takes neither path - it is
361361
deliberately still accepted after the window has closed, so a stale dialog can
362-
always close itself but because it releases the boot monitoring hold, and is
362+
always close itself - but because it releases the boot monitoring hold, and is
363363
therefore a real write, it demands the same credentials as any gated endpoint.
364364
With the login active, no unauthenticated call to this endpoint writes
365365
anything: the only success it can reach is that "already done" no-op, and
366-
every other path is a refusal 405 for a non-`POST`, 415/400 for a body it
366+
every other path is a refusal - 405 for a non-`POST`, 415/400 for a body it
367367
cannot read, 401 for `dismiss`, 403 for a full answer. The
368368
DNS-rebinding check and the access filter run ahead of the exemption table in
369369
any case, so nothing here widens who can reach the port.

0 commit comments

Comments
 (0)