Skip to content

Board: centre the indicators, and a counting region header in place of the divider - #45

Open
emooreatx wants to merge 5 commits into
mainfrom
fix/unicorn-centered-dots
Open

Board: centre the indicators, and a counting region header in place of the divider#45
emooreatx wants to merge 5 commits into
mainfrom
fix/unicorn-centered-dots

Conversation

@emooreatx

Copy link
Copy Markdown
Contributor

The dots sat on each band's first row, so every row read as a line of lights with four empty rows hanging beneath — the indicators looked detached from the letter they belong to, and the band looked mostly empty.

  • Run dots move to rows 2 and 4 of the letter's five (still a blank row apart, so they cannot fuse).
  • Service dots move to row 3, the middle of the band.
   0 |# #        |   V verify
   1 |# #  GGGGG |     runs 1-5
   2 |# #        |
   3 |# #  GGGGG |     runs 6-10
   4 | #         |
  28 | GG     ## |   B billing — dot centred on the letter

Rendered in the framebuffer harness and flashed to the board. Firmware only; no deploy.

🤖 Generated with Claude Code

https://claude.ai/code/session_015iuQqpxEg9gqZ3gQ5nUjyR

emooreatx and others added 2 commits August 13, 2026 15:13
The dots sat on the band's first row, so every row read as a line of lights
with four empty rows hanging beneath it — the indicators looked detached from
the letter they belong to, and the band looked mostly empty.

Run dots now sit on rows 2 and 4 of the letter's five (still a blank row apart,
so they cannot fuse), and a service row's single dot sits on row 3, the middle.
Both are optically tied to the glyph beside them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015iuQqpxEg9gqZ3gQ5nUjyR
The divider spent a row on a dotted line that restated the overall status, and
the service dots sat beside their letters — so they zigzagged with the
alternating letters and could not be read down a column. US was at x=5 on one
row and x=1 on the next.

Letters occupy either the first three columns or the last three, so columns 3-7
are the only ones never covered by a glyph. Service dots now live there at a
fixed x per block, which makes them line up, and the three rows freed by
dropping the divider carry a header for those columns: one column per block,
its height counting the column (1, 2, 3) so there is no legend to memorise, lit
in that block's worst-of rollup colour. That is strictly more than the divider
said — per-region health instead of one aggregate — in the same space.

Services shift down two rows, and the board is now exactly full: 25 rows of
repos, 3 of header, 25 of services, 53 total with nothing spare.

Known limit, deliberately not papered over: the counting header can express
three columns in three rows. `region_cols` packs a fourth or fifth block into
adjacent columns, but their heights would both cap at three and the count would
start lying. Three blocks (us, eu, global) is what we have; scaling past that
needs either position-only identity or a second dot row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015iuQqpxEg9gqZ3gQ5nUjyR
@emooreatx emooreatx changed the title Centre the board's indicators against their letters Board: centre the indicators, and a counting region header in place of the divider Aug 13, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b818c49f28

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread extras/galactic-unicorn/README.md Outdated
36 | GG ## | D database
41 |# GG Y | L providers US EU | GLOBAL
46 | GG G ###| I infra
28 | GG ## | B billing US EU

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Align the documented board layout with the renderer

The updated diagram still depicts service indicators on each band's first row and near the edge (for example, billing dots on row 28), but draw_health() now renders them on the middle row in fixed center columns, so billing's dots appear on row 30 at x=3/5. The surrounding text also still describes an overall-status divider on row 25 and services on rows 26–50, whereas the renderer now uses rows 25–27 for the counting header and 28–52 for services. This makes the flashing guide misleading when users validate or interpret the new display.

Useful? React with 👍 / 👎.

The header commit changed main.py and left the README describing the layout it
replaced: a dotted divider on row 25, services on 26-50, dots on each band's
first row beside the letter. The renderer uses 25-27 for the counting header,
28-52 for services, and puts the dots on the middle row in the fixed centre
columns. Someone validating a freshly flashed board against this diagram would
have concluded it was broken.

Caught in review of b818c49.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015iuQqpxEg9gqZ3gQ5nUjyR

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 06f249df00

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +160 to +162
HEADER_Y0 = CI_BANDS * BAND_H # 25
HEADER_H = 3
HEALTH_Y0 = HEADER_Y0 + HEADER_H # 28 — the board is now exactly full

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the embedded layout documentation

The new three-row header and shifted service origin make the module docstring obsolete: it still describes CI dots on the first/third band rows, an overall-status divider at row 25, and services at rows 26–50. Because this is the file users copy directly to the board, anyone maintaining or diagnosing the renderer from its embedded layout guide will work from coordinates that no longer match the implementation; update that guide to describe rows 25–27 and 28–52 as well as the centered indicators.

Useful? React with 👍 / 👎.

emooreatx and others added 2 commits August 13, 2026 16:20
Letters take either the first three columns or the last three, so 3-7 are the
only five never covered by a glyph. Both halves now use exactly those: the run
dots stop mirroring with their letter and sit at a fixed x, and the service
blocks pack from the left of the same grid. A repo's five run columns line up
with the five service columns beneath them, and the board reads as one channel
of data with letters on the outside rather than two zigzagging sections.

It also answers scaling: five columns hold five blocks, so a fourth region
needs no layout change — and a block beyond the fifth is LOGGED rather than
dropped, because a board that omits a region silently looks healthy by
omission. (The counting header still only reaches three; that limit stands.)

Packed blocks can share a colour with a neighbour and merge into a bar. That is
fine horizontally — a run of green reads as "all green" and anything else breaks
the run exactly where it is — unlike the vertical fusion that made the old
health rows unreadable.

Two review items fold in here:

- The module docstring still described the divider and the old row ranges, in
  the file people copy to the device. It now matches the renderer.
- The board treated any HTTP 200 as freshness, so a stalled node's last healthy
  snapshot would have rendered as current forever. It now honours the `stale` /
  `age_seconds` the service reports (CIRISStatus#46) and goes blue on the
  service's own word, not just on its ability to reach it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015iuQqpxEg9gqZ3gQ5nUjyR
…the renderer

Packing the blocks into consecutive columns lined them up cell-for-cell with the
run columns, but it looked worse on the wall: three dots in a row read as a bar,
and the spacing is what made them legible as separate regions. Spaced (3, 5, 7)
while they fit, packed only when a fourth or fifth block leaves no choice.

They still share the grid — a service dot sits under run column 1, 3 or 5 — so
the alignment that motivated this stands; only the density changed.

The README diagram is now GENERATED from the renderer's framebuffer rather than
hand-drawn beside it. Twice now the picture has documented a layout the code no
longer draws, once caught in review and once by me: my last attempt to fix it
anchored on a substring that no longer existed, threw, and committed the code
change with the stale diagram still in place. A diagram transcribed by hand from
a thing that changes every hour will drift every hour.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015iuQqpxEg9gqZ3gQ5nUjyR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant