Pulse 2.4.1
A maintenance release for the strict-monitoring card on Android 16 — four bugs in
the live line, all reported from a device and none of them visible from reading the
code.
Updates in place from any 2.x and keeps your monitors.
The line no longer opens with grey
The window was measured from the oldest retained check of any age and then clamped
to a day — so a single check older than that stretched the line to a full day and was
then skipped for falling before the window's own start. Everything between the left
edge and the first drawable check stayed blank, under a label claiming "last 24h".
The label now describes the line actually drawn: last 16h 23m rather than a day that
was two thirds empty.
The tracker moves
It could not before. The tail returned the shortest interval in the fleet — a
constant that read neither the clock nor the last check — and because the elapsed part
of the bar is always exactly 48 buckets, a fixed tail pins the tracker with it.
Drawing the real countdown to scale does not help either: a bucket is the span over 48,
so on fifteen hours of history a bucket is nearly nineteen minutes and a fifteen-minute
countdown floors to the same value full and empty alike. The tail now spends a fixed
sixth of the bar and empties across it as the next check falls due.
It is also paced by one monitor — the fastest — rather than by whichever is due
soonest. With eight monitors staggered on a fifteen-minute interval something is always
nearly due, so the old value sat near its floor and reset every couple of minutes: it
was moving, in a sawtooth indistinguishable from stuck.
Measured on the reporter's phone across nine minutes: tail 5 buckets → 2, tracker
90.2% → 95.7%.
Compressing a busy line no longer invents outages
Capping the number of segments used to absorb the shortest non-outage band into a
neighbour — and the neighbours of an up-band are outages by construction, so the
absorbed uptime could only ever be handed to an outage, and the two red runs were then
fused into one. Every merge turned uptime into downtime.
Measured on a monitor that alternated pass/fail every half hour for a day: 24 buckets
genuinely failed, the line drew 40, and the longest drawn run was 33 — a claimed
sixteen and a half hours of continuous downtime that never happened.
The drawn red total now matches the real one exactly.
A live outage can no longer be painted over
Carry-forward ran on the fleet-merged tone, so a monitor checked every five minutes
filled every bucket after an hourly monitor's failure with green — the line drew green
all the way to the right edge, under a red tracker and a "1 DOWN" chip. Each monitor
now carries its own last verdict before the fleet merge.
Reading the line
| What you see | What it means |
|---|---|
| Green / red stretch | how long that outcome lasted — to scale |
| Taller red block | where an outage began — so a single failed check is findable |
| Grey tail past the dot | the wait until the next check |
Repository fix
2.4.0 shipped LiveCard, LiveTimeline, their tests and the dark-scheme colours in
its APK but left those six files untracked, so the v2.4.0 tag does not compile. They
are committed here. Nothing else was missing, and the published 2.4.0 APK itself was
fine.
Install
adb install -r Pulse-2.4.1-release.apk
Signed with my own key, so Play Protect will ask you to confirm. There is no Play
listing.
355 JVM tests and 173 on-device tests, all passing.