Version
main
Describe the bug.
The classification ladder checks range_min for SensorFailure at line 93
( reading < min ), then upper_fatal for Fatal, then at lines 105-108 checks if let
Some(lower_fatal) = health.range_min && reading <= lower_fatal — binding range_min
instead of health.lower_fatal (the struct has a lower_fatal field, used correctly at line
187 for display). Because line 93 already returned SensorFailure for reading <
range_min, line 105 can only fire on exact equality reading == range_min; the
actual lower_fatal threshold is never evaluated. Additionally, lines 149-166
downgrade any threshold-derived alert to Success whenever the BMC reports the
sensor status as Ok, meaning a BMC that (through fault or compromise) reports Ok
suppresses independent threshold alerting entirely.
Minimum reproducible example
Relevant log output
Other/Misc.
Found with Mythos
Code of Conduct
Version
main
Describe the bug.
The classification ladder checks range_min for SensorFailure at line 93
( reading < min ), then upper_fatal for Fatal, then at lines 105-108 checks if let
Some(lower_fatal) = health.range_min && reading <= lower_fatal — binding range_min
instead of health.lower_fatal (the struct has a lower_fatal field, used correctly at line
187 for display). Because line 93 already returned SensorFailure for reading <
range_min, line 105 can only fire on exact equality reading == range_min; the
actual lower_fatal threshold is never evaluated. Additionally, lines 149-166
downgrade any threshold-derived alert to Success whenever the BMC reports the
sensor status as Ok, meaning a BMC that (through fault or compromise) reports Ok
suppresses independent threshold alerting entirely.
Minimum reproducible example
Relevant log output
Other/Misc.
Found with Mythos
Code of Conduct