diff --git a/app/igneum-app/src/ember.rs b/app/igneum-app/src/ember.rs index c1cb4db8..0dfbd87a 100644 --- a/app/igneum-app/src/ember.rs +++ b/app/igneum-app/src/ember.rs @@ -774,8 +774,13 @@ impl Run { let power_changed = (step.watts - before_w).abs() >= 1.5; if step.point.clock_mhz > 0 || step.point.mem_mhz > 0 || !power_changed { rb.acked && power_ok + } else if rb.limit_w <= 0.0 { + // a card with no limit readback at all (AMD through ADLX reports an offset, never watts; run 6 on + // 6 October 2026 aborted the 9070 XT's ladder at its first step on "card reports 0 W"): the + // acknowledgement is the proof + rb.acked } else { - rb.limit_w > 0.0 && power_ok + power_ok } } @@ -976,6 +981,17 @@ mod tests { assert!(Plan::full(&Limits::default(), Point::default(), 1.0).is_empty()); } + #[test] + fn a_power_step_on_a_card_without_a_limit_readback_is_applied_on_the_acknowledgement() { + // AMD through ADLX: the limit reads back as an offset, never watts (run 6, 6 October 2026) + let step = Step { point: Point { clock_mhz: 0, power_pct: 90, mem_mhz: 0 }, watts: 90.0, kind: Kind::Power }; + assert!(Run::applied(&step, Readback { limit_w: 0.0, acked: true }, 100.0)); + assert!(!Run::applied(&step, Readback { limit_w: 0.0, acked: false }, 100.0)); + // NVIDIA: the watts must read back + assert!(!Run::applied(&step, Readback { limit_w: 100.0, acked: true }, 100.0)); + assert!(Run::applied(&step, Readback { limit_w: 90.0, acked: false }, 100.0)); + } + #[test] fn limits_never_exceed_the_vendor_or_undercut_the_floor() { let l = l5090();