Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 92 additions & 29 deletions extras/galactic-unicorn/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,87 @@ floats, nothing cycles.

```
+-----------+
0 |# # GGGGG | V verify runs 1-5 (oldest first)
2 |# # GGGGG | runs 6-10 (newest last)
0 |# # | V verify
1 |# #GGGGG | runs 1-5 (oldest first)
2 |# # |
3 |# #GGGGG | runs 6-10 (newest last)
4 | # |
5 | b##G# ## | P persist letter on the far edge …
7 | G#b#G ## | … dots on the near one
10 |### GGRGG | E edge a failure in the older five
15 | GGGGG ##| S server
17 | GGGGY # | newest run in progress
20 | # GGG.. | A agent a young repo: only three runs
25 |Y Y Y Y Y Y| overall status
26 | GG ## | B billing US EU
31 |## YY | P proxy
36 | GG ## | D database
41 |# GG Y | L providers US EU | GLOBAL
46 | GG G ###| I infra
5 | ## | P persist letter on the far edge …
6 | b##G## #| … dots never move
7 | ## |
8 | G#b#G# |
9 | # |
10 |### | E edge
11 |# GGRGG | a failure in the older five
12 |## |
13 |# GGGGG |
14 |### |
15 | ##| S server
16 | GGGGG# |
17 | # |
18 | GGGGY #| newest run in progress
19 | ## |
20 | # | A agent
21 |# #GGG.. | a young repo: only three runs
22 |### |
23 |# #..... |
24 |# # |
25 | Y | region header: column 3 = three dots
26 | Y Y | column 2 = two dots
27 | Y Y Y | column 1 = one dot
28 | ## | B billing
29 | # #|
30 | G G ## | US EU, on the grid the runs use
31 | # #|
32 | ## |
33 |## | P proxy
34 |# # |
35 |## Y Y |
36 |# |
37 |# |
38 | ## | D database
39 | # #|
40 | G G # #|
41 | # #|
42 | ## |
43 |# | L providers
44 |# |
45 |# G G Y | GLOBAL degraded behind two healthy regions
46 |# |
47 |### |
48 | ###| I infra
49 | # |
50 | G G G # |
51 | # |
52 | ###|
+-----------+

x= 3 4 5 6 7 = the one grid both halves use
```

Every row is a 3×5 letter with its status as single-pixel dots beside it. Ten
rows fill the board exactly.

Rows **alternate edges** — letter left, letter right, letter left. Ten 5-row
letters stacked flush leave no blank row between them, so two neighbours on the
same edge touch and blur into each other; putting them on opposite edges
separates them horizontally instead. The whole band mirrors, letter and dots
together, but the dots always read left to right, so run order and the
west-to-east region order never flip.
**Letters** alternate edges — left, right, left. Ten 5-row letters stacked flush
leave no blank row between them, so two neighbours on the same edge touch and
blur; opposite edges separate them horizontally instead.

**Dots never move.** Letters take either the first three columns or the last
three, so 3–7 are the only five never covered by a glyph, and both halves use
exactly those. A repo's run columns and the service blocks sit on one grid
running down the middle of the board. Dots always read left to right, so run
order and the west→east region order never flip with the letter.

Five columns also means a fourth region needs no layout change. A block beyond
the fifth is **logged, not dropped** — a board that omits a region silently
looks healthy by omission.

**Repos (rows 0–24)** — V/P/E/S/A, the substrate in dependency order: verify →
persist → edge → server → agent. Each row carries that repo's ten most recent
GitHub Actions runs as **two rows of five dots** — the older five on the band's
first row, the newer five two rows below, with a blank row between so they
cannot fuse.
GitHub Actions runs as **two rows of five dots** — the older five, then the
newer five — on rows 2 and 4 of the letter's five, with a blank row between so
they cannot fuse. Centring them against the glyph keeps the pair optically tied
to its letter instead of floating above dead space.

| Run | Colour |
|---|---|
Expand All @@ -54,12 +102,21 @@ cannot fuse.
| cancelled / skipped | grey (deliberately *not* red — superseded PR pushes cancel runs constantly) |
| no data yet | near-black |

**Divider (row 25)** — a dotted line carrying the aggregate `status`:
green, amber, or red (`partial_outage` and `major_outage` both read red).

**Services (rows 26–50)** — B/P/D/L/I: billing, proxy, database, LLM providers,
infrastructure. One dot per region sorted **west → east** (US left of EU, like a
map), then a gap and one dot for GLOBAL — whatever belongs to no region. Adding
**Region header (rows 25–27)** — one column per block, its **height counting the
column**: one dot for the first, two for the second, three for the third, so
there is no legend to memorise. Each column is lit in that block's worst-of
rollup colour, so the header is also a per-region summary — strictly more than
the dotted divider it replaced, in the same space.

Known limit: three header rows can count to three. A fourth or fifth block would
pack into adjacent columns but their heights would both cap at three and the
count would start lying. Three blocks (US, EU, GLOBAL) is what exists today.

**Services (rows 28–52)** — B/P/D/L/I: billing, proxy, database, LLM providers,
infrastructure. One dot per block, centred on the letter's middle row, on the
same centre grid the runs use — spaced every other column while they fit, which
reads better and keeps neighbours from merging. Sorted **west → east** (US left
of EU, like a map), with GLOBAL last — whatever belongs to no region. Adding
a region adds a dot, no code change. Each dot is the **worst** status among that
block's components, so a single sick provider cannot hide behind healthy
siblings. Green operational, amber degraded, red outage, dim blue unknown.
Expand All @@ -72,6 +129,12 @@ independently: no successful `/api/v1/status` for 90 s turns the health grid
blue, and no successful `/api/v1/ci` for 3 minutes turns the centipedes blue,
each without touching the other.

The service also reports staleness of its own: when its poll loop has not
produced a snapshot within the poll window it answers `stale: true` with
`age_seconds`, and the board goes blue on that alone. Otherwise an HTTP 200
carrying a stalled node's last healthy snapshot would render as current
indefinitely — the board would be reporting freshness it does not have.

## Orientation

The default is a counter-clockwise rotation, which is correct when the panel
Expand Down
Loading
Loading