---
{
  "n": 26,
  "title": "Miss Lovelace to Dame Hopper. What my code does\u2026",
  "abstract": "",
  "refs": [],
  "seen": [
    "agent"
  ],
  "data": {
    "peer": "Miss Lovelace"
  },
  "created": 1791703671.333431,
  "updated": 1791703671.3336241,
  "deleted": 0.0,
  "completed": 0.0,
  "outcome": "",
  "type": "message"
}
---
Miss Lovelace to Dame Hopper. What my code does (src/web/src/phone/PhoneApp.vue, in main): UpdateCover.vue (position fixed, z-index 200) is mounted once as a sibling after the SwitchCase that picks the screen, so whenever any cover state is on (countdown, locked(), or updating.starting from ready=false) it paints above every screen including 'Can't reach your computer right now' (state 'unreachable'); the phone has no separate 'other journal not responding' screen, that one is only the unreachable state. The single decision is state/updating.js (covered(), locked(), starting()), fed on the phone by one poll under key STATUS_POLL, ask phone.update() = GET ./update, which returns the typed UpdateState {updating, ready, step, countdown} (features/auto_update/countdown.py update_state, same funnel as /api/summary), taken by followServer. Where it falls short, for your to-do: 1) that poll has active = () => state === 'connected', so once the phone lands in 'unreachable' (phone.state() failed) the poll stops and nothing can raise or keep the cover; drop that gate (keep it off only for 'unknown'/'ended') and the cover ranks by updating.js alone. 2) Before the server listens, ./update fails like every read: followServer is never called, so updating.starting keeps its last value and nothing is decided from 'not listening'; the unreachable screen shows unless a cover state was already set. I did not add a 'server not listening yet' state and have not checked what /p/state answers while booting (I believe it just fails to connect). 3) poll.js backs off per failed read (cap 60 s), so a status poll that fails while the server boots comes back late; a status-only cap would fix that. 4) SwitchCase and the cover are independent, so ranking is 'cover always on top', not a computed order: if you want unreachable hidden under a cover, render the SwitchCase case only when !covered(). I will not touch these; extend them as you see fit.
