fix: an asleep browser Lane is not a stalled one on the admin page #110

Merged
sulthan merged 1 commits from fix/asleep-browser-lane-not-stalled into main 2026-08-16 22:04:19 +07:00
Owner

laneRow.Stalled was Due > 0 && Checked == 0, which is exactly the shape of the on-demand wake gate declining to start Chrome (ADR-0005): under five due Series and none overdue by 15m, a browser Lane reads nothing deliberately.

kagane and novelfull each have exactly one bookmarked Series (kagane's other four series rows are orphans, comix has none), so the 5-due count rule can never fire for them and the age rule is their only wake path — meaning "1 due / 0 checked" is their state for most of every cycle. The page marked both not checking, spending the one mark that means "go look" on the commonest healthy browser-Lane state.

  • latest.LaneState.Asleep set at the wake gate (poller.go:266)
  • excluded from Stalled, never contributes to Attention
  • renders browser asleep beside the figures

Tests: TestBrowserLaneWakeThresholds asserts the snapshot reports Asleep with 3 due / 0 checked and clears it on the waking pass; TestAsleepBrowserLaneIsNotMarkedStalled asserts the fragment says "browser asleep", not "not checking", and carries no attention class. go test ./... green.

Behaviour verified in prod, not inferred: kagane and novelfull became due at 14:40Z and both polled at 14:55Z — rest + browserWakeAge — novelfull picking up Chapter 4458.

`laneRow.Stalled` was `Due > 0 && Checked == 0`, which is exactly the shape of the on-demand wake gate declining to start Chrome (ADR-0005): under five due Series and none overdue by 15m, a browser Lane reads nothing deliberately. kagane and novelfull each have exactly one bookmarked Series (kagane's other four `series` rows are orphans, comix has none), so the 5-due count rule can never fire for them and the age rule is their only wake path — meaning "1 due / 0 checked" is their state for most of every cycle. The page marked both `not checking`, spending the one mark that means "go look" on the commonest healthy browser-Lane state. - `latest.LaneState.Asleep` set at the wake gate (`poller.go:266`) - excluded from `Stalled`, never contributes to `Attention` - renders `browser asleep` beside the figures Tests: `TestBrowserLaneWakeThresholds` asserts the snapshot reports `Asleep` with 3 due / 0 checked and clears it on the waking pass; `TestAsleepBrowserLaneIsNotMarkedStalled` asserts the fragment says "browser asleep", not "not checking", and carries no `attention` class. `go test ./...` green. Behaviour verified in prod, not inferred: kagane and novelfull became due at 14:40Z and both polled at 14:55Z — rest + `browserWakeAge` — novelfull picking up Chapter 4458.
sulthan added 1 commit 2026-08-16 22:04:13 +07:00
laneRow.Stalled was Due > 0 && Checked == 0, which is exactly the shape
of the on-demand wake gate declining to start Chrome (ADR-0005): under
five due Series and none overdue by 15m, a browser Lane reads nothing on
purpose. kagane and novelfull each have one bookmarked Series, so that is
their state for most of every cycle and the page marked both "not
checking" — spending the one mark that means "go look" on the commonest
healthy state.

LaneState.Asleep is set at the wake gate, excluded from Stalled, kept out
of Attention, and rendered as "browser asleep". Verified in prod: those
Lanes wake on the age rule 15m past due (kagane and novelfull both polled
at 14:55Z for a 14:40Z due moment, novelfull picking up Chapter 4458).
sulthan merged commit f568fb5e8c into main 2026-08-16 22:04:19 +07:00
Sign in to join this conversation.