A bot’s words travel over a lane: a connected model subscription it answers with or a channel it posts to, such as Slack or SMS. When a lane breaks, the bot may be unable to reply. Settings → Status shows each tracked lane and its current health.

The Status panel

Open Settings → Status on Desktop. On the phone layout and the installed phone app, Settings → Status opens the same list full screen. Each row has:
  • A colour and a word: Working (green), Slow (amber) or Down (red). The word is always shown, never colour alone.
  • Since when, for anything that isn’t working.
  • The affected subscription and the reason in plain words, such as needing to sign in again.
  • The bots it affects.
  • Fix, which opens Settings → Subscriptions (vendor lanes) or Settings → Connected apps (channels).
Lanes that need a look are listed first. Check again asks for a fresh reading; otherwise the panel refreshes every minute while it is open. If your runtime can’t be reached, the panel says so and keeps showing the last result. A bot whose subscription lane is down also shows Brain offline, followed by the affected subscription and reason, on its line in the Bots list in place of its last message.

What is checked

Not on the board yet: model providers and the runtime itself.

Get told when a lane goes down

When a vendor lane turns red, Allternit opens a Lane down item in Needs you naming the bots that can’t reply, and sends a push. If any of those bots has a phone number or takes texts, the item is critical, because callers are waiting on it. When the lane works again the item resolves by itself. A lane left down is reminded about again until you fix it.

Channel pause

If a channel’s last five messages all fail within ten minutes, Allternit pauses sending on that channel for two minutes, then tries one message. If that works, sending resumes; if it fails, the pause starts again. Messages are not discarded while paused; the Needs you inbox lists the ones that did not go through.

For developers

  • Gateway. Migration 0010_lane_canary.sql adds canary_runs. worker/canary.ts ticks every SUBS_GATEWAY_CANARY_SEC seconds (default 180, 0 turns it off), calls WorkerPool.probeResident for each enabled account, and records the run. A pass calls recordAdapterProbePassed, so an open drift breaker closes. GET /v1/lanes (scope tasks:read) returns { lanes: [{ account_id, provider, label, health, state, breaker, lastProbeAt, lastOkAt, lastProbeOutcome, latency_ms }] }.
  • Runtime. subscription_sync pulls v1/lanes with each minute’s sync, writes state changes to lane_samples (V259, kept 14 days), opens lane_down through netops::alerts::open on a move into red and resolves it on recovery. GET /api/v1/lanes/status (netops/lanes.rs) returns [{ laneId, kind: vendor_account|channel|model_provider|runtime, label, state: green|amber|red, since, reason, affectedBots: [{id,name}], action? }]. channel_lane_open(conn, binding_id) is the channel breaker; it is computed from channel_message_log, so it needs no state of its own.
  • UI. src/lib/lanes/lane-status.ts (one shared poller), src/components/lanes/LaneStatusBoard.tsx, and bot-status-line.ts for the Bots list line.