Problem statement
The boxed cost-finding cards introduced on 2026-05-03 render an inline
request ████░░░░ limit ratio bar driven by pkg/rules.Signal. However,
todo.md explicitly documents that 7 of the 30 detectors do not yet
populate Signal, causing their cards to render with an empty bar slot —
degrading the primary visual output for some of the most common and
high-savings findings.
Proposed solution
For each affected detector in pkg/rules/, populate Signal during
Detect() using the already-parsed resource values from the Workload
model:
// Example: oversized-cpu-limit detector
func (d *OversizedCPULimitDetector) Detect(w parser.Workload) []Finding {
// ... existing logic ...
return []Finding{{
DetectorID: "oversized-cpu-limit",
Severity: SeverityMed,
Signal: &Signal{
Observed: w.Resources.Limits.CPU,
Limit: recommendedCeiling(w.Resources.Limits.CPU),
Unit: "CPU",
},
}}
}
Each fix requires a corresponding golden fixture update in
testdata/fixtures/ per CONTRIBUTING.md requirements.
Alternatives considered
Detectors Affected (confirmed in todo.md)
| Detector ID |
Finding Type |
Signal Missing |
oversized-cpu-limit |
CPU limit far exceeds typical utilization |
No ratio bar |
oversized-memory-limit |
Memory limit grossly overprovisioned |
No ratio bar |
excessive-replica-count |
Replica count disproportionate to load profile |
No ratio bar |
tiny-cpu-request |
CPU request too low — throttling risk |
No ratio bar |
tiny-memory-request |
Memory request below safe operating floor |
No ratio bar |
cpu-without-memory-request |
CPU set, memory missing entirely |
No ratio bar |
memory-without-cpu-request |
Memory set, CPU missing entirely |
No ratio bar |
Impact
These are not edge-case detectors — overprovisioned CPU/memory limits and
asymmetric resource pairs are among the most frequently triggered findings
on real-world Helm charts.
When these detectors fire, users see a cost card with a blank ratio bar where
quantitative evidence should appear:
┌─ MED · api ──────────────────────────── save ~$18.40/mo ─┐
│ │
│ CPU limit appears overprovisioned │
│ │
│ CPU (no bar) │
│ │
│ confidence: ●●○ medium │
└──────────────────────────────────────────────────────────┘
This directly undercuts the "prove it with numbers" trust contract the
output is designed to establish, and weakens the CLI's CI gate credibility
when the bar — the primary quantitative signal — is absent.
What Signal Should Carry Per Detector
| Detector |
Signal.Observed |
Signal.Limit |
Signal.Unit |
oversized-cpu-limit |
parsed limit value |
recommended ceiling |
"CPU" |
oversized-memory-limit |
parsed limit value |
recommended ceiling |
"Mi" |
excessive-replica-count |
declared replicas |
recommended max |
"replicas" |
tiny-cpu-request |
parsed request value |
minimum safe floor |
"CPU" |
tiny-memory-request |
parsed request value |
minimum safe floor |
"Mi" |
cpu-without-memory-request |
CPU request present |
0 (absent) |
"Mi" |
memory-without-cpu-request |
memory request present |
0 (absent) |
"CPU" |
Scope
New analysis rule
Are you willing to contribute?
Problem statement
The boxed cost-finding cards introduced on 2026-05-03 render an inline
request ████░░░░ limitratio bar driven bypkg/rules.Signal. However,todo.mdexplicitly documents that 7 of the 30 detectors do not yetpopulate
Signal, causing their cards to render with an empty bar slot —degrading the primary visual output for some of the most common and
high-savings findings.
Proposed solution
For each affected detector in
pkg/rules/, populateSignalduringDetect()using the already-parsed resource values from theWorkloadmodel:
Each fix requires a corresponding golden fixture update in
testdata/fixtures/perCONTRIBUTING.mdrequirements.Alternatives considered
Detectors Affected (confirmed in
todo.md)oversized-cpu-limitoversized-memory-limitexcessive-replica-counttiny-cpu-requesttiny-memory-requestcpu-without-memory-requestmemory-without-cpu-requestImpact
These are not edge-case detectors — overprovisioned CPU/memory limits and
asymmetric resource pairs are among the most frequently triggered findings
on real-world Helm charts.
When these detectors fire, users see a cost card with a blank ratio bar where
quantitative evidence should appear:
┌─ MED · api ──────────────────────────── save ~$18.40/mo ─┐
│ │
│ CPU limit appears overprovisioned │
│ │
│ CPU (no bar) │
│ │
│ confidence: ●●○ medium │
└──────────────────────────────────────────────────────────┘
This directly undercuts the "prove it with numbers" trust contract the
output is designed to establish, and weakens the CLI's CI gate credibility
when the bar — the primary quantitative signal — is absent.
What
SignalShould Carry Per DetectorSignal.ObservedSignal.LimitSignal.Unitoversized-cpu-limit"CPU"oversized-memory-limit"Mi"excessive-replica-count"replicas"tiny-cpu-request"CPU"tiny-memory-request"Mi"cpu-without-memory-request0(absent)"Mi"memory-without-cpu-request0(absent)"CPU"Scope
New analysis rule
Are you willing to contribute?