Repository navigation
health: name the device a run of bus read failures stopped at - #409
Open
pierre-rouanet wants to merge 4 commits into
Open
pierre-rouanet wants to merge 4 commits into
pierre-rouanet wants to merge 4 commits into
Conversation
Coverage73.76% lines on this branch, against a floor of 70%. Per-file |
pierre-rouanet
force-pushed
the
bus-failure-names-the-device
branch
from
October 13, 2026 13:27
1223d5e to
5b38417
Compare
The release that names the device a failed sync read stopped at (SyncReadError), which the previous commit reads. Assisted-by: Claude:claude-opus-5-5
"motor bus: 1 read failures running" said the bus dropped a read and not where. rustypot now names the device a sync read stopped at, so duck-control keeps it (`IoError::Device`), robotd collects the devices of the current run and reports them as `BusHealth::failing` (API v42), and every client says them: udp-pad's panel and log, robotctl monitor, robotctl health, and the update gate's unhealthy reason. The IMU board is a device on the bus like the servos, and the one this was found on, so the description names it: `at 200 imu`. Its ID moves to the protocol beside JOINT_IDS for that. Assisted-by: Claude:claude-opus-5-5
pierre-rouanet
force-pushed
the
bus-failure-names-the-device
branch
from
October 13, 2026 13:27
5b38417 to
0d62c1d
Compare
pierre-rouanet
marked this pull request as ready for review
October 13, 2026 13:27
An isolated drop holds `consecutive_errors` for one 20 ms tick, and a client samples health once a second, so udp-pad saw about one drop in fifty. `BusHealth::drops` counts every failed read since robotd started, by the device it stopped at (`unnamed_drops` for the rest). A total only grows, so a report a second later still sees it. udp-pad logs a line for each total that went up, and shows the totals on the motors row; robotctl monitor and health show them too. Assisted-by: Claude:claude-opus-5-5
…-device # Conflicts: # duck-ipc-proto/src/lib.rs
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
udp-padshowed⚠ motor bus: 1 read failures runningand nothing more: the bus dropped a read, but not where. On lavandiere the drop is the IMU board, about once every 10 s.Now it shows
⚠ motor bus: 1 read failure running, at 200 imu.duck-control: a failed sync read keeps the device that
rustypotnames, asIoError::Device { what, id, cause }, withIoError::device()to read it.robotd: collects the devices named during the current run of failures and clears them with
consecutive_errors. A normal tick doesn't touch the list; only a failure and the success that ends a run do.Protocol: adds
BusHealth::failing(API v42), a field older readers can ignore.IMU_DXL_IDmoves into the protocol next toJOINT_IDS, so that the IMU board can be called the IMU rather than a bare ID.Clients:
BusHealth::describe_run()produces the line, used by:udp-pad's panel and log;robotctl monitor;robotctl health.The update gate's unhealthy reason also adds
, at ….Drops since start, by device. An isolated drop shows in
consecutive_errorsfor only one 20 ms tick, and health is sampled once a second, soudp-padcaught about one drop in fifty.BusHealth::drops(plusunnamed_dropsfor drops that can't be pinned on a device) counts every failed read sincerobotdstarted. A total only grows, so a sample a second later still sees it.udp-padlogs⚠ motor bus: read dropped at 32 head_yaw (3 since robotd started)each time a total goes up, and shows the totals on its motors row.robotctl monitorandrobotctl healthshow the totals too.The device named is where the answer went wrong, not proof the other devices are fine. A cable that breaks at one device silences every device after it, and only the first is named.
Install consequence of v42: none. The field is additive. A new client talking to an older
robotdsees nofailingand shows the line without devices, as it does today.rustypot 1.12.0: the first commit moves
duck-controlfrom 1.8.0 to 1.12.0, the release withSyncReadError(pollen-robotics/rustypot#153).🤖 Generated with Claude Code