> ## Documentation Index
> Fetch the complete documentation index at: https://autopilot.docs.xano.com/llms.txt
> Use this file to discover all available pages before exploring further.

# HPA Audit

> A fleet-wide view of every HorizontalPodAutoscaler in the cluster — the signals worth tuning, and bulk actions to tune them.

The **HPA Audit** page is the horizontal (autoscaling) analogue of the
[Resource Audit](/operations/resource-audit) — a single table of every HPA in the cluster,
with the signals operators tune on and the actions to tune them in bulk. Where Resource Audit
*cleans up* sizing drift, HPA Audit *applies a tuning policy*.

## What it shows

Each row surfaces the facts you'd otherwise chase across `kubectl`:

* **Saturation** — an HPA that's out of headroom (`maxReplicas − currentReplicas ≤ 1`). A fixed (min == max) HPA is never flagged saturated.
* **Responsiveness posture + source** — the resolved scale-up/down behavior and where it came from (`original` / `override` / `policy` / `scheduled`).
* **CPU target + source**, and config-drift facets: fixed-replicas, sensitivity override, scale-down disabled, "using default."
* **Over-provisioned min** — an HPA pinned at an over-committed `minReplicas` with a recommended right-sized value and the replicas it would save.
* **Auto status** — whether [Auto-Optimization](/platform/hpa-autoscaling) is effective for this HPA, and its per-HPA override.

### Inert HPAs are demoted

An HPA that **can't scale on CPU** — fixed-replicas, a disabled CPU target (≥ 100%, a value
the pod can never reach), or a memory/custom-metric HPA — is marked **inert** (nothing to
tune). The default **"Tunable only"** filter hides inert HPAs so the actionable ones aren't
drowned by a fleet of decorative single-replica ones. A fleet-summary strip (total / saturated
/ inert / using-default / overridden / scale-down-disabled) sits above the table, and facet
filters narrow it.

## Bulk tuning

Select up to 500 HPAs and apply one action — every mutation reuses the exact per-HPA logic the
single-workload controls use, so single and bulk never diverge:

| Action               | What it does                                                                                |
| -------------------- | ------------------------------------------------------------------------------------------- |
| `set-responsiveness` | Write a scale-up/down responsiveness preset (or custom behavior)                            |
| `set-cpu-target`     | Set the CPU utilization target (1–100)                                                      |
| `set-replicas`       | Set min/max — directly fixes saturated HPAs                                                 |
| `set-min-floor`      | Set/clear the enforced `minReplicas` floor (`ops-ai.io/min-replicas` on the workload owner) |
| `set-auto`           | Opt an HPA into or out of Auto (`enabled` / `disabled` / `policy` = clear)                  |
| `set-idle`           | Enable/disable Idle Mode (only when a policy enables idle)                                  |
| `clear-override`     | Revert to policy/original behavior                                                          |

## Where to find it

The **HPA Audit** page is in the **Nodes** navigation group. Recommendations (right-sized min,
CPU target) render as clickable chips that open a pre-filled modal — you confirm, Autopilot
never auto-applies them.

<Info>
  The audit is read-and-tune, not autonomous: it surfaces what could change and lets you apply
  it. Turnkey autonomous tuning is [Auto-Optimization](/platform/hpa-autoscaling); this page is
  where you steer it across the fleet.
</Info>
