Add multi-source PSU power triangulation and per-slot distribution table
- collector/psu.go: export PSUSlotsFromSDR() reusing slot regex patterns;
add isPSUInputPower/isPSUOutputPower helpers covering MSI/MLT/xFusion/HPE
naming; add xFusion Power<N> slot pattern; parseBoundedFloat for self-healing
(rejects zero/negative/out-of-range sensor readings); default fallback treats
unclassified PSU sensors as AC input
- benchmark_types.go: BenchmarkPSUSlotPower struct; BenchmarkServerPower gains
PSUInputIdle/Loaded, PSUOutputIdle/Loaded, PSUSlotReadingsIdle/Loaded,
GPUSlotTotalW, DCMICoverageRatio fields
- benchmark.go: sampleIPMISDRPowerSensors uses collector.PSUSlotsFromSDR instead
of custom classifier; detectDCMIPartialCoverage replaces ramp heuristic —
compares DCMI idle vs SDR PSU sum, flags <0.70 ratio as partial coverage;
detectIPMISaturationFallback kept for servers without SDR PSU sensors;
report gains PSU Load Distribution table (per-slot AC/DC idle vs loaded, Δ)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>