Firmware v2.29.0
Pins bmcd 2.36.1. BMC-UI stays at 3.27.0 and tpi is unchanged.
Firmware v2.29.0, 12 September 2026 — the first image to carry bmcd 2.36.1. Every item below is the repository's own changelog entry, taken apart; the whole entry is a click away under each one.
Fixed¶
-
Every refusal from the access endpoints answered 500. Found on bmc-2 within the hour of flashing v2.28.0, by asking the board the questions its new guards are supposed to refuse: they all refused, with the right message, and all of them came back
500 Internal Server Error.The whole entry
500 is the canonical retryable status, so a client told 500 for "that password is wrong" is invited to retry an answer that will never change, and a person reading it is told the board is broken when the request was. The guards themselves were correct throughout; only the number on them was wrong.
-
Every refusal from the new access endpoints answered 500. Measured on bmc-2 within the hour of flashing v2.28.0: "the current password is wrong" and "the new password is too short" both came back
500 Internal Server Error, which tells a client the board is broken rather than that the request was — and 500 is the canonical retryable status, so a client is being invited to retry an answer that will never change. bmcd 2.36.1The whole entry
impl ResponseError for LegacyResponse {}was empty, so actix's default status applied to everything. That was invisible until now because handlers reached through the legacy dispatcher come back as aLegacyResponserendered byResponder, which has always honoured the carried status;api::accessis the first to return one as anErrdirectly to actix.It now reports the status it was built with and renders through the same conversion the success path uses, so a refusal has one shape wherever it came from. The guards themselves were correct throughout — the right requests were refused with the right messages, with the wrong number on them.
Every release of the firmware · the roadmap · follow by feed