Make the status dot a traffic light, not green-or-nothing #25

Merged
pedromcaraujo merged 1 commit from status-dot-traffic-light into main 2026-08-08 09:27:09 +01:00

Summary

A channel waiting on you dropped back to the same dim grey as one nobody had
touched, so the state that actually wants attention was the least visible
thing in the sidebar.

  • Green while a turn runs, amber once it comes back to you, red after two
    minutes with no answer.
  • /status grows an idle_for field to carry the clock. It's tracked
    server-side (_idle_since), cleared when a channel goes busy and pruned
    when a session dies so a recreated channel doesn't inherit an old clock.
  • First sighting of an already-idle channel seeds from the transcript's age,
    so reloading the launcher doesn't reset a channel you've ignored since
    yesterday back to amber.
  • Light theme reuses the darkened tones the vitals warnings already use, so
    the three still separate as greys on a Boox.

Test plan

  • _idle_for state machine exercised standalone: seed from transcript
    age, escalate past the threshold, reset to null on busy, prune on kill.
  • Eyeball the dots on a live box: green during a turn, amber right after
    it ends, red two minutes later.
  • Check the light/e-ink theme still tells the three apart.
## Summary A channel waiting on you dropped back to the same dim grey as one nobody had touched, so the state that actually wants attention was the least visible thing in the sidebar. - Green while a turn runs, amber once it comes back to you, red after two minutes with no answer. - `/status` grows an `idle_for` field to carry the clock. It's tracked server-side (`_idle_since`), cleared when a channel goes busy and pruned when a session dies so a recreated channel doesn't inherit an old clock. - First sighting of an already-idle channel seeds from the transcript's age, so reloading the launcher doesn't reset a channel you've ignored since yesterday back to amber. - Light theme reuses the darkened tones the vitals warnings already use, so the three still separate as greys on a Boox. ## Test plan - [x] `_idle_for` state machine exercised standalone: seed from transcript age, escalate past the threshold, reset to null on busy, prune on kill. - [ ] Eyeball the dots on a live box: green during a turn, amber right after it ends, red two minutes later. - [ ] Check the light/e-ink theme still tells the three apart.
Make the status dot a traffic light, not green-or-nothing
All checks were successful
CI / check (pull_request) Successful in 25s
2b33eb7efd
A channel waiting on you dropped back to the same dim grey as one nobody
had touched, so the state that actually wants attention was the least
visible thing in the sidebar.

Give waiting its own colour and let it escalate: green while a turn runs,
amber once it comes back to you, red after two minutes of no answer.
/status grows an `idle_for` field to carry the clock — tracked server-side
since only /status has a stable place to keep it, seeded from the
transcript's age so reloading the launcher doesn't reset a channel you've
ignored since yesterday.

The light theme reuses the darkened tones the vitals warnings already use,
so the three still separate as greys on a Boox.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pedromcaraujo/forge!25
No description provided.