The latest of all three, and the SD card listed
The first release that carries the latest of all three: BMC-UI 3.26.0, bmcd 2.34.0 and tpi 1.8.0.

Firmware v2.27.0, 12 September 2026 — the first image to carry bmcd 2.34.0, BMC-UI 3.26.0, tpi 1.8.0. Every item below is the repository's own changelog entry, taken apart; the whole entry is a click away under each one.
New¶
opt=get&type=sdcard_files, also GET /api/bmc/sdcard/files: what is on¶
the microSD card bmcd 2.34.0
(SQU-198). Name, size, modified time, and whether each entry could be written to a compute module.
The whole entry
tpi flash --local already reads an image off this card, and it is the only
sane way to write a multi-gigabyte image to a module: the browser is not in
the path, the bytes do not cross the network twice, and an interrupted
upload does not mean starting over. What was missing was any way to see what
is there — so an operator had to know the path and type it, for the most
destructive thing this board does.
A non-candidate is listed, not hidden, with the reason: a 10-byte
.img says it is most likely a truncated download, and a .tpu says it is
BMC firmware and belongs on the firmware page. Hiding them makes an operator
who cannot find the file they just copied conclude the page is broken.
The verdict is from the name and the size only. Nothing opens a file: deciding by content means reading the head of every entry on every listing, and what actually protects a flash is the checksum the operator compares.
tpi health¶
tpi 1.8.0
— uptime, load across the three windows, memory including the daemon's own resident set, NAND eraseblocks available and bad, and whether the clock is actually disciplined rather than merely configured, with its offset.
tpi sdcard [path]¶
tpi 1.8.0
— what is on the microSD card and what can be written to a module.
The whole entry
The companion to tpi flash --local, which until now required the operator to know a path and type it correctly for the most destructive thing this board does. A non-candidate is listed with its reason rather than hidden: a .tpu says it is BMC firmware and belongs on the firmware page.
Every field was read off a board rather than assumed — the first draft used
load1 and free_eraseblocks, neither of which the daemon sends, and an
absent key prints nothing, so the mistake would have been silent.
Changed¶
-
The temperature moved to Board Health. It was filed under Settings, inside the fan card — a reading beside a control — so somebody asking "is this board hot?" opened the tab called Board Health, found five other numbers, and concluded the board could not tell them. BMC-UI 3.26.0
The whole entry
It now sits with uptime, load, memory and the clock, and shows the trip point that explains the fan's step, because a step with no reason beside it reads as arbitrary.
Fixed¶
- The pin gate moved to the workflow that publishes. So it can actually refuse. It ran where it could report a stale pin and not stop the release, which is how v2.26.0 shipped a
tpitwo versions behind the daemon it was packaged with. -
The console hint names what actually breaks it. A browser will not open a WebSocket to a certificate it does not trust, and the exception you granted by clicking through on the page does not extend to that connection. BMC-UI 3.26.0
The whole entry
The hint led with a rejected token and a daemon too old to serve the endpoint; both are possible and neither is what people hit.
-
tpi reboot --helpsaid the compute modules lose power. They do not. The daemon's own summary says the opposite, and every firmware flash this estate has done measured it: all four modules stayed powered and their Kubernetes nodes never restarted. tpi 1.8.0The whole entry
A warning that overstates the blast radius talks people out of a reboot they should do (SQU-200).
-
tpi power statusbroke on a rail the board could not read. The daemon answers"Unknown"as a third value — its own schema says so — and the printer parsed straight to a number, so such a board producedinvalid digit found in stringand a raw JSON dump. tpi 1.8.0The whole entry
That is exactly the board you would be running this against.
Security¶
Every path is confined to the card, in one function with its own tests¶
bmcd 2.34.0
A listing that accepts ../.. is a directory browser rooted at / on a device that can reflash four computers — and the same resolver will serve rename and delete later, so it is worth getting right once.
The whole entry
The root and the target are both canonicalised and compared, so a/../../etc
and a symlink pointing off the card are caught by the same rule rather
than by a check written against the text of the request. A leading / is
stripped rather than honoured. A path that does not exist answers "not
found", never "outside", because saying "outside" for a typo tells a client
something about the filesystem it did not earn.
Every release of the firmware · the roadmap · follow by feed