The repository monitor stopped borrowing a website monitor's screens. Everything
in this release is about the kind of monitor that answers "what happened" rather
than "is it up".
The history is the repository's history
A repository monitor recorded exactly what every other monitor records: ok, a
latency and a status code. Its detail screen was therefore sixty rows of
Healthy · 304 · 487 ms, which times the round trip to api.github.com and says
nothing whatsoever about the repository. The fact somebody added the monitor for,
the star count going from 11 to 13, was visible only as "13 now", with nothing
able to say when it happened or in how many steps.
Every check now writes down what it saw of the repository, and the screen lists
what changed between one check and the next:
13 stars · was 12 · +1
#6 [Bug] self-signed https certs? · Issue opened
Released v3.3.0 · New release published
1 issue closed · 0 open now
1 fork · was 0 · +1
Pushed to the repository
Runs of polls that found nothing collapse into one line, 5 checks · nothing changed, and a single quiet poll between two events gets no line at all: the
timestamps either side already say it. A failed poll never collapses. Being
refused by GitHub, or having a token rejected, is the one reason the counts on
the card above could be out of date, so it keeps its own row and says
Nothing learned about the repository.
Every check at the bottom of the list brings the old poll list back, which is
the answer to "is this thing even running", and Activity goes back.
Two decisions worth writing down. The rows are differenced from the samples
rather than stored as events, so a history trim cannot leave a row behind
claiming something the samples can no longer support. And counts are carried
forward whenever an endpoint answered 304, because a sample recording "unknown"
for a count that simply had not changed would read later as the repository losing
its stars and getting them back.
The new fields all default, and are absent on every kind of monitor except this
one, so an old snapshot and an old backup both still restore.
The card leads with its numbers
The repository card stacked a caption over a count in each of three tiles, which
spent a third of the card's height on three short numbers and put the word STARS
above a gold star that had already said it.
One line each now, three even tiles across the full width with the content
centred, count first and unit after, the way 491 ms reads: 13 ★,
0 open issues, 0 forks. The star is the only unit drawn as a glyph, because
it is the only one anybody reads as a picture. open issues is the tightest
label of the three and shrinks a point rather than truncating.
The hero line above it says what the repository is doing instead of
Last response 491 ms, and it respects the watch configuration: a monitor set to
releases only is not given a star count it never asked for.
The star is a star
It was a stroke outline tinted amber. A hollow star is the "not starred yet"
glyph on every site that has one, so an outline said the opposite of what a count
of 13 means, and at the 11dp a dashboard tag draws it a 1.7px outline closes up
into a smudge.
It is filled now, the one filled glyph in a stroke set, and it has its own colour
rather than borrowing amber: amber means degraded everywhere else in this app,
and a star count is not a warning about anything. #FFC53D on dark, darkened for
the light scheme the same way every other accent there is. The stars section of
the setup screen follows it, which stops that section reading as a warning too.
The widget
A repository row on the widget showed 491 ms, which is how long api.github.com
took to answer, beside a dot that only meant the poll had worked. Between them
that was the whole row.
It shows the star count with a gold star after it now, and a detailed row's
second line gives the open issue count and the latest tag instead of a host. A
monitor watching only issues or only releases shows that instead. A failure still
wins the slot: when the poll is broken, how broken it is matters more than a count
nothing is verifying.
Narrow columns drop the trailing value on purpose, since the dot carries health
and a latency reading is one tap away. A repository row has no such fallback, so
two and three column widgets were leaving every repository showing a name and
nothing else. Repository rows keep their value at any width, which costs the name
very little: "13" against "4100 ms".
The star is tinted per preset, so the white widget gets the dark gold instead of a
pale smudge.
Also in here
A debug build paints its bell yellow and calls itself "Nightbell debug". It
installs alongside a release build, and until now the launcher showed two
identical bells with no way to tell them apart short of opening one. The five
drawables that paint the mark all read one colour resource, which is what made
that possible.
Two bugs found on the way. The detail screen's history toggles were read inside
the LazyColumn content lambda, which is not a composable, so nothing
recomposed when they changed: the pre-existing "Show all N checks" button had the
same problem and is fixed with them. And WidgetInstrumentedTest was asserting a
literal "Nightbell" as the widget's wordmark, which the debug rename broke; it
reads the resource now.
581 JVM tests and 258 on device.