REVIEW · DOCKET · CLI
Demo state
MainsKeeper · Docket · command line

Exceptions first.
Then the evidence.

The CLI speaks like the queue: one line that says how many things need you, a short list of them, then plain sections. Colour is an accent (pink for structure, butter for exceptions) — never the only signal.

Fictional demonstration data — not real equipmentOutput format is a design proposal.

mainskeeper status · on duplex-pi-probe · 15:22

The first thing printed is the exception count. Details follow, heaviest first. Max 88 columns.

colourmainskeeper status
$ mainskeeper status
██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ 2 exceptions on this probe
   !! 1  Docket #0409 still open — recovered 15:02, backlog not yet verified
         1,248 records pending · oldest 13:41 (1 h 41 m old)
   !! 2  History gap 14:30–14:52 — no records (probe offline)
         At least 27 minutes on battery; endpoint unknown.
         Delayed record: 14:03 on battery · received 15:17 · shown at 14:03

██ PROBE ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   host         duplex-pi-probe · Raspberry Pi OS 12 · mainskeeperd 0.4.2
   uptime       30 min (restarted 14:52)
   roles        UPS monitoring on · connectivity monitoring on
   server       █ connected · heartbeat 3 s ago · reconnected 15:02

██ UPS · Duplex Utility UPS ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   power        █ on utility
   charge       78% (recharging)          charge level, not battery health
   runtime      29 min                    UPS estimate
   load         27%
   input        119 V
   temperature  not reported
   reading      3 s old                   current

██ CONNECTIVITY ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   targets      3 of 3 answering
   last failure 13:41–15:02

██ BACKLOG · uploading ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   pending      1,248                     oldest 13:41 (1 h 41 m old)
   uploaded     382 of 1,630  █████░░░░░░░░░░░░░░░  23%  batch 16/64
   last upload  15:21:48
   retries      1 · 15:19 server 503 · accepted on retry
   drain        ~22 min at current rate  (estimate)
   buffer       38.2 MB of 512 MB
   history gap  14:30–14:52 · no records (probe offline)

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Fictional demonstration data — not real equipment · output format is a design proposal
NO_COLOR=1NO_COLOR=1 mainskeeper status
$ mainskeeper status
██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ 2 exceptions on this probe
   !! 1  Docket #0409 still open — recovered 15:02, backlog not yet verified
         1,248 records pending · oldest 13:41 (1 h 41 m old)
   !! 2  History gap 14:30–14:52 — no records (probe offline)
         At least 27 minutes on battery; endpoint unknown.
         Delayed record: 14:03 on battery · received 15:17 · shown at 14:03

██ PROBE ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   host         duplex-pi-probe · Raspberry Pi OS 12 · mainskeeperd 0.4.2
   uptime       30 min (restarted 14:52)
   roles        UPS monitoring on · connectivity monitoring on
   server       █ connected · heartbeat 3 s ago · reconnected 15:02

██ UPS · Duplex Utility UPS ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   power        █ on utility
   charge       78% (recharging)          charge level, not battery health
   runtime      29 min                    UPS estimate
   load         27%
   input        119 V
   temperature  not reported
   reading      3 s old                   current

██ CONNECTIVITY ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   targets      3 of 3 answering
   last failure 13:41–15:02

██ BACKLOG · uploading ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   pending      1,248                     oldest 13:41 (1 h 41 m old)
   uploaded     382 of 1,630  █████░░░░░░░░░░░░░░░  23%  batch 16/64
   last upload  15:21:48
   retries      1 · 15:19 server 503 · accepted on retry
   drain        ~22 min at current rate  (estimate)
   buffer       38.2 MB of 512 MB
   history gap  14:30–14:52 · no records (probe offline)

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Fictional demonstration data — not real equipment · output format is a design proposal

mainskeeper dockets · fleet queue

Same queue as the dashboard, sorted by severity then age. Severity is a word plus a block shape — full, shaded, half — so it survives NO_COLOR.

colourmainskeeper dockets
$ mainskeeper dockets
██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ 3 open dockets · 1 critical · 1 warning · 1 recovering

   #     SEVERITY      SITE        AGE         ACK                 NOTIFY
   0412  ██ CRITICAL   Broadwater  13 min      not acknowledged    email+push delivered
         BW Rack UPS on battery
   0413  ▒▒ WARNING    Shop        12 min      not acknowledged    push failed, retrying
         Contact lost with 2 of 2 probes — cause unknown
   0409  ▐▌ RECOVERING Duplex      1 h 38 min  jp 13:52 · open     delivered
         Contact restored; history uploading

   acknowledging never resolves · mainskeeper show 0412 for evidence

██ FLEET ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   collectors   ████░░ 4 of 6 reporting    UPS  █████░ 5 of 6 communicating

Fictional demonstration data — not real equipment · output format is a design proposal
NO_COLOR=1NO_COLOR=1 mainskeeper dockets
$ mainskeeper dockets
██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ 3 open dockets · 1 critical · 1 warning · 1 recovering

   #     SEVERITY      SITE        AGE         ACK                 NOTIFY
   0412  ██ CRITICAL   Broadwater  13 min      not acknowledged    email+push delivered
         BW Rack UPS on battery
   0413  ▒▒ WARNING    Shop        12 min      not acknowledged    push failed, retrying
         Contact lost with 2 of 2 probes — cause unknown
   0409  ▐▌ RECOVERING Duplex      1 h 38 min  jp 13:52 · open     delivered
         Contact restored; history uploading

   acknowledging never resolves · mainskeeper show 0412 for evidence

██ FLEET ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   collectors   ████░░ 4 of 6 reporting    UPS  █████░ 5 of 6 communicating

Fictional demonstration data — not real equipment · output format is a design proposal

mainskeeper status · calm fleet

When nothing is wrong, the first line says so and the output stays short.

colourmainskeeper status
$ mainskeeper status
██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ No exceptions on this probe
   roles        UPS monitoring on · connectivity monitoring on
   server       █ connected · heartbeat 3 s ago
   UPS          Duplex Utility UPS · on utility · 100% · reading 3 s old
   connectivity 3 of 3 targets answering
   backlog      none pending
   last episode 29 Sep 21:14–21:31 · 17 min on battery (measured) · resolved

Fictional demonstration data — not real equipment · output format is a design proposal
NO_COLOR=1NO_COLOR=1 mainskeeper status
$ mainskeeper status
██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ No exceptions on this probe
   roles        UPS monitoring on · connectivity monitoring on
   server       █ connected · heartbeat 3 s ago
   UPS          Duplex Utility UPS · on utility · 100% · reading 3 s old
   connectivity 3 of 3 targets answering
   backlog      none pending
   last episode 29 Sep 21:14–21:31 · 17 min on battery (measured) · resolved

Fictional demonstration data — not real equipment · output format is a design proposal

mainskeeper dockets · calm fleet

colourmainskeeper dockets
$ mainskeeper dockets      # calm fleet
██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ No exceptions · 0 open dockets
   collectors   ██████ 6 of 6 reporting    UPS  ██████ 6 of 6 communicating
   last event   Home weekly summary sent 09:00
   resolved     Duplex · 29 Sep 21:14–21:31 · 17 min on battery (measured)

Fictional demonstration data — not real equipment · output format is a design proposal
NO_COLOR=1NO_COLOR=1 mainskeeper dockets
$ mainskeeper dockets      # calm fleet
██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22

██ No exceptions · 0 open dockets
   collectors   ██████ 6 of 6 reporting    UPS  ██████ 6 of 6 communicating
   last event   Home weekly summary sent 09:00
   resolved     Duplex · 29 Sep 21:14–21:31 · 17 min on battery (measured)

Fictional demonstration data — not real equipment · output format is a design proposal

Voice rules

Count first“2 exceptions on this probe” or “No exceptions” is always line one after the header. Nothing else competes with it.
List, then sectionsExceptions are numbered !! 1, !! 2. Sections open with a heavy ██ NAME ▀▀▀ rule so they scan in a scrollback.
Say what's unknown“not reported”, “no records”, “endpoint unknown”, “(estimate)” — never 0, never blank, never a guessed cause.
Colour is optionalNO_COLOR or a non-TTY drops every colour; words and block shapes carry the meaning. Block characters are in IBM Plex Mono and common terminal fonts.
Monitoring onlyNo command changes equipment. mainskeeper ack 0412 acknowledges and prints “acknowledged — still open”.
Fits 88 columnsDesigned under the 92-column limit so it survives split panes and SSH sessions.