# Conditions and events

> Every status condition a ManagedWorkload reports, with each reason and what it means, and every event Napwake emits.

Source: https://docs.napwake.dev/next/reference/conditions-and-events/

[Conditions 21](https://docs.napwake.dev/next/reference/conditions-and-events/#status-conditions)

* [`TargetAvailable`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-targetavailable)
* [`MetricsAvailable`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-metricsavailable)
* [`PrometheusAvailable`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-prometheusavailable)
* [`PrometheusQueryEmpty`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-prometheusqueryempty)
* [`IdleVetoed`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-idlevetoed)
* [`WakeOnRequest`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-wakeonrequest)
* [`HeldByDependents`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-heldbydependents)
* [`WaitingForDependencies`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-waitingfordependencies)
* [`DependencyCycle`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-dependencycycle)
* [`DependencyNotFound`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-dependencynotfound)
* [`DependencyNotAllowed`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-dependencynotallowed)
* [`DuplicateTarget`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-duplicatetarget)
* [`Protected`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-protected)
* [`PauseRequest`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-pauserequest)
* [`WakeRequest`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-wakerequest)
* [`GitOpsConflict`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-gitopsconflict)
* [`ResumeIncomplete`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-resumeincomplete)
* [`PauseIncomplete`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-pauseincomplete)
* [`PausedWhileInUse`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-pausedwhileinuse)
* [`Autoscaled`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-autoscaled)
* [`ScaledToZero`](https://docs.napwake.dev/next/reference/conditions-and-events/#condition-scaledtozero)

[Events on the ManagedWorkload 53](https://docs.napwake.dev/next/reference/conditions-and-events/#events)

* [`IdleDetected`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-idledetected)
* [`PausedEarly`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pausedearly)
* [`PauseRequested`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pauserequested)
* [`Paused`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-paused)
* [`Resumed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-resumed)
* [`ActivityResumed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-activityresumed)
* [`Unobserved`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-unobserved)
* [`PauseRecovered`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pauserecovered)
* [`PauseRecordLost`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pauserecordlost)
* [`WokeByActivity`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-wokebyactivity)
* [`WokenByRequest`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-wokenbyrequest)
* [`WakeRequested`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-wakerequested)
* [`AutoResume`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-autoresume)
* [`ScaledUp`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-scaledup)
* [`DryRunWake`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-dryrunwake)
* [`PauseCancelled`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pausecancelled)
* [`PausedWhileInUse`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pausedwhileinuse)
* [`ScaledToZero`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-scaledtozero)
* [`IdleVetoed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-idlevetoed)
* [`HeldByDependents`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-heldbydependents)
* [`DependencyCycle`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-dependencycycle)
* [`GitOpsConflict`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-gitopsconflict)
* [`GitOpsConflictResolved`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-gitopsconflictresolved)
* [`DependencyWontStart`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-dependencywontstart)
* [`DependencyWakeFailed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-dependencywakefailed)
* [`DependenciesLearned`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-dependencieslearned)
* [`PredictionFed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-predictionfed)
* [`RegimeChange`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-regimechange)
* [`ForecastReset`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-forecastreset)
* [`ForecastLearnedHistory`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-forecastlearnedhistory)
* [`ForecastLearningLive`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-forecastlearninglive)
* [`ForecastHistoryUnavailable`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-forecasthistoryunavailable)
* [`ForwarderStarted`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-forwarderstarted)
* [`ForwarderStopped`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-forwarderstopped)
* [`TargetNotFound`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-targetnotfound)
* [`DuplicateTarget`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-duplicatetarget)
* [`NoPodMetrics`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-nopodmetrics)
* [`NoCPURequests`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-nocpurequests)
* [`MetricsUnavailable`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-metricsunavailable)
* [`QueryFailed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-queryfailed)
* [`EndpointNotConfigured`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-endpointnotconfigured)
* [`PrometheusQueryEmpty`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-prometheusqueryempty)
* [`InvalidActivityAnnotation`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-invalidactivityannotation)
* [`RoutingFailed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-routingfailed)
* [`UnsupportedLoadBalancer`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-unsupportedloadbalancer)
* [`RequestNotServed`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-requestnotserved)
* [`Protected`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-protected)
* [`NoReadinessProbe`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-noreadinessprobe)
* [`ResumeIncomplete`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-resumeincomplete)
* [`AllReplicasReady`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-allreplicasready)
* [`PauseIncomplete`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-pauseincomplete)
* [`HandBackAbandoned`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-handbackabandoned)
* [`ManagedByAnotherInstall`](https://docs.napwake.dev/next/reference/conditions-and-events/#event-managedbyanotherinstall)

[Events on the workload 5](https://docs.napwake.dev/next/reference/conditions-and-events/#events)

* [`Managed`](https://docs.napwake.dev/next/reference/conditions-and-events/#workload-event-managed)
* [`NoLongerManaged`](https://docs.napwake.dev/next/reference/conditions-and-events/#workload-event-nolongermanaged)
* [`InvalidSetting`](https://docs.napwake.dev/next/reference/conditions-and-events/#workload-event-invalidsetting)
* [`LabelIgnored`](https://docs.napwake.dev/next/reference/conditions-and-events/#workload-event-labelignored)
* [`Protected`](https://docs.napwake.dev/next/reference/conditions-and-events/#workload-event-protected)

## Status conditions

Each has a `Reason`, a `Message` and a `LastTransitionTime`. A condition appears once it first applies. After that it shows `False` with a False reason below, rather than going. Only `GitOpsConflict` and `Autoscaled` are removed.

| Type                     | `True` means                                                                                                                                                                                                                                                                                                                                                              | Reasons                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TargetAvailable`        | The target exists, and is managed                                                                                                                                                                                                                                                                                                                                         | `TargetExists`. False: `TargetNotFound`, `TargetIgnored` (labelled `napwake.dev/ignore`)                                                                                                                                                                                                                                                                                                                    |
| `MetricsAvailable`       | CPU can be measured, for the activity clock and forecast                                                                                                                                                                                                                                                                                                                  | `MetricsReported`. Unknown: `NoReadyPods`, `AwaitingPodMetrics`, while new pods have no metrics. False: `NoPodMetrics`, `NoCPURequests`, `MetricsUnavailable`                                                                                                                                                                                                                                               |
| `PrometheusAvailable`    | The activity queries answer. Only set when there are some                                                                                                                                                                                                                                                                                                                 | `QueriesEvaluated`. False: `QueryFailed`, `EndpointNotConfigured`                                                                                                                                                                                                                                                                                                                                           |
| `PrometheusQueryEmpty`   | A query has matched no series since first evaluated, usually from a misspelt metric or label. It doesn’t stop a pause                                                                                                                                                                                                                                                     | `NoSeries`. False: `QueriesMatchSeries`                                                                                                                                                                                                                                                                                                                                                                     |
| `IdleVetoed`             | Idle, but a confident forecast expects demand in the coming hour, which the message names. The pause waits                                                                                                                                                                                                                                                                | `ForecastExpectsDemand`. False: `NotVetoed`                                                                                                                                                                                                                                                                                                                                                                 |
| `WakeOnRequest`          | Its Services are routed to the doorman while paused, so a request wakes it, or with [`wake.mode: Ask`](https://docs.napwake.dev/next/concepts/wake-on-request/#asking-before-waking) a person’s click. With `Ask`, its message says the doorman asks a person’s browser first, and turns away other requests. A Services problem stays once it’s awake, the message starting `at its last pause:` | `DoormanRouted`. False: [why it isn’t routed](https://docs.napwake.dev/next/concepts/wake-on-request/#when-a-workload-isnt-routed) (`NoServices`, `ServedByOtherPods`, `UnsupportedIPFamily`, `UnsupportedLoadBalancer`, `ForwarderNotReady`, `DoormanUnavailable`, `NoFreePort`, `TooManyPorts`, `RoutingFailed`, `DoormanDisabled`, `NodeLocalTraffic`). `NotPaused`, `TargetNotFound`, `DuplicateTarget` once routing is removed |
| `HeldByDependents`       | Kept awake for its dependents                                                                                                                                                                                                                                                                                                                                             | `DependentsAwake`. False: `NoAwakeDependents`, or `NotIdle` once its own activity restarts its clock                                                                                                                                                                                                                                                                                                        |
| `WaitingForDependencies` | Its resume waits for a `waitForReady` dependency to be Ready                                                                                                                                                                                                                                                                                                              | `DependencyNotReady`. False: `DependenciesReady`. Also `DependencyWontStart`, naming a dependency it doesn’t wait for, as it can’t start or wasn’t Ready in time. Or `DependencyCycle`, naming one that waits for it in turn                                                                                                                                                                                |
| `DependencyCycle`        | `dependsOn` forms a cycle through it, so it won’t pause                                                                                                                                                                                                                                                                                                                   | `DependencyCycle`. False: `NoCycle`                                                                                                                                                                                                                                                                                                                                                                         |
| `DependencyNotFound`     | A `dependsOn` workload doesn’t exist, or can’t be seen                                                                                                                                                                                                                                                                                                                    | `DependencyNotFound`, or `DependencyNotVisible` when it’s only outside `watchNamespaces` or not readable. False: `DependenciesFound`, `NoDependencies`                                                                                                                                                                                                                                                      |
| `DependencyNotAllowed`   | A dependency, declared or learned, is in a namespace whose `napwake.dev/dependents-from` doesn’t list this one. It isn’t held, woken or waited for                                                                                                                                                                                                                        | `DependencyNotAllowed`. False: `DependenciesAllowed`, `NoDependencies`                                                                                                                                                                                                                                                                                                                                      |
| `DuplicateTarget`        | An older ManagedWorkload manages the target. This one hands back any pause it made, then does nothing                                                                                                                                                                                                                                                                     | `DuplicateTarget`. False: `Resolved`                                                                                                                                                                                                                                                                                                                                                                        |
| `Protected`              | It’s never paused. It’s in a protected namespace, Napwake’s own operator or doorman, or a StatefulSet that deletes its PVCs when scaled down                                                                                                                                                                                                                              | `ProtectedNamespace`, `NapwakeComponent`, `PVCsDeletedOnScaleDown`. False: `NotProtected`                                                                                                                                                                                                                                                                                                                   |
| `PauseRequest`           | The last [pause request](https://docs.napwake.dev/next/guides/pause/#pause-now) paused it, or found it paused. False says why not. Until the next request, it says what happened and when, such as `paused as requested at 2026-10-21 03:32 UTC`                                                                                                                                                  | `Paused`, `AlreadyPaused`. False: `DryRun`, `ForecastExpectsDemand`, `ActiveUntil`, `HeldByDependents`, `DependencyCycle`, `Protected`, `ScaledToZero`, `TargetNotFound`, `TargetIgnored`, `DuplicateTarget`, `PredatesStatus`, `PauseCancelled` (a request came as it paused)                                                                                                                              |
| `WakeRequest`            | The last [wake request](https://docs.napwake.dev/next/guides/pause/#wake-now) woke it, or found it awake. False says why not. Until the next request, it says what happened and when, such as `woken as requested at 2026-10-21 03:32 UTC`                                                                                                                                                        | `Woken`, `AlreadyAwake`. False: `TargetNotFound`, `TargetIgnored`, `DuplicateTarget`, `Protected`, `ScaledToZero`, `BeingDeleted`, `PredatesStatus`                                                                                                                                                                                                                                                         |
| `GitOpsConflict`         | A [GitOps tool](https://docs.napwake.dev/next/guides/gitops/) undid its last pause. Removed once a pause holds for an hour                                                                                                                                                                                                                                                                        | `PauseUndone`                                                                                                                                                                                                                                                                                                                                                                                               |
| `ResumeIncomplete`       | The last resume stopped waiting with replicas not Ready. It runs with the Ready ones until all are ([troubleshooting](https://docs.napwake.dev/next/operations/troubleshooting/#workload-resumed-with-replicas-not-ready))                                                                                                                                                                        | `ReplicasNotReady`. False: `AllReplicasReady`                                                                                                                                                                                                                                                                                                                                                               |
| `PauseIncomplete`        | The last pause stopped waiting for pods still running a minute past their termination grace period. It’s `Paused` regardless ([troubleshooting](https://docs.napwake.dev/next/operations/troubleshooting/#workload-paused-with-pods-still-running))                                                                                                                                               | `PodsStillRunning`. False: `PodsStopped`, `NotPaused`                                                                                                                                                                                                                                                                                                                                                       |
| `PausedWhileInUse`       | Its own use undid its last pause soon after it began. So its idle clock waits longer, until a pause holds. The message says what to change ([Paused while in use](https://docs.napwake.dev/next/concepts/idle-detection/#paused-while-in-use))                                                                                                                                                    | `WokenSoonAfterPause`, `PauseCancelled`. False: `PauseHeld`                                                                                                                                                                                                                                                                                                                                                 |
| `Autoscaled`             | An HPA or KEDA ScaledObject scales it, with its range. Removed when neither does ([HPA and KEDA](https://docs.napwake.dev/next/guides/autoscalers/))                                                                                                                                                                                                                                              | `HPA`, `KEDA`                                                                                                                                                                                                                                                                                                                                                                                               |
| `ScaledToZero`           | Scaled to zero outside Napwake, so left off. Not paused, woken or routed until its replicas are above zero                                                                                                                                                                                                                                                                | `ScaledToZero`. False: `HasReplicas`                                                                                                                                                                                                                                                                                                                                                                        |

## Events

Each user-visible change emits one event, as it happens, shown by `kubectl describe`. The opt-in controller puts `Managed`, `NoLongerManaged`, `InvalidSetting`, `LabelIgnored` and `Protected` on the Deployment or StatefulSet itself. In dry-run, events for decisions it holds back start with `[dry-run]` ([Dry run](https://docs.napwake.dev/next/guides/dry-run/#events)).

Every event on the ManagedWorkload, by what it’s about.

| About                                                                                             | Events                                                                                                                                                                                                                                                                                                                                                                                           |
| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| The lifecycle                                                                                     | `IdleDetected`, `PausedEarly` (brought forward by [`pauseEarly`](https://docs.napwake.dev/next/concepts/forecasting/#pausing-early)), `PauseRequested`, `Paused`, `Resumed`, `ActivityResumed` (in dry-run, with what the pause would have freed), `Unobserved` (a [gap in watching](https://docs.napwake.dev/next/concepts/idle-detection/#restarts-and-outages) restarted the idle clock, and how long it was)                                 |
| Its pause record lost from status                                                                 | `PauseRecovered` (from the target’s `napwake.dev/paused-from`). The warning `PauseRecordLost` (nothing to finish it from)                                                                                                                                                                                                                                                                        |
| A pause request not acted on                                                                      | Its reason says why, as the `PauseRequest` condition’s does                                                                                                                                                                                                                                                                                                                                      |
| A wake request not acted on                                                                       | Its reason says why, as the `WakeRequest` condition’s does                                                                                                                                                                                                                                                                                                                                       |
| What woke it                                                                                      | `WokeByActivity`, `WokenByRequest` (from the doorman, saying a person asked when it’s a click on **Wake it**), `WakeRequested` (from `napwake.dev/wake-requested`, as `kubectl napwake wake` sets it), `AutoResume`, `ScaledUp`, `DryRunWake`, and `PauseCancelled` (whatever would wake it came as it paused, so the pause was [called off](https://docs.napwake.dev/next/guides/pause/#a-request-calls-the-pause-off)) |
| A pause made while it was in use                                                                  | The warning `PausedWhileInUse`, with what to change ([Paused while in use](https://docs.napwake.dev/next/concepts/idle-detection/#paused-while-in-use))                                                                                                                                                                                                                                                                  |
| Left off, scaled to zero outside Napwake                                                          | `ScaledToZero`                                                                                                                                                                                                                                                                                                                                                                                   |
| What holds it awake                                                                               | `IdleVetoed`, `HeldByDependents`, `DependencyCycle`                                                                                                                                                                                                                                                                                                                                              |
| A GitOps tool undoing a pause                                                                     | `GitOpsConflict`, and `GitOpsConflictResolved` when that ends                                                                                                                                                                                                                                                                                                                                    |
| Dependencies                                                                                      | The warnings `DependencyWontStart` and `DependencyCycle` (a resume not waiting for a `waitForReady` dependency) and `DependencyWakeFailed` (one couldn’t be woken). `DependenciesLearned`, for learned ones                                                                                                                                                                                      |
| The forecast                                                                                      | `PredictionFed` each hour it learns, `RegimeChange` when demoted, `ForecastReset` when its saved state can’t be read. When Napwake begins managing a workload, `ForecastLearnedHistory` if it learned the CPU history from Prometheus. `ForecastLearningLive` if there was none, or the warning `ForecastHistoryUnavailable` if it couldn’t be read                                              |
| The GKE NEG [forwarder](https://docs.napwake.dev/next/concepts/wake-on-request/#gke-container-native-load-balancing-negs) | `ForwarderStarted` beside a paused workload, `ForwarderStopped` once it’s removed after the wake                                                                                                                                                                                                                                                                                                 |
| Problems                                                                                          | `TargetNotFound`, `DuplicateTarget`, `NoPodMetrics`, `NoCPURequests`, `MetricsUnavailable`, `QueryFailed`, `EndpointNotConfigured`, `PrometheusQueryEmpty`, `InvalidActivityAnnotation`, `RoutingFailed`, `UnsupportedLoadBalancer`, `RequestNotServed`, `Protected`, and these:                                                                                                                 |

| Problem                   | Means                                                                                                                                                                               |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `NoReadinessProbe`        | A routed workload’s pods have no readiness probe, so a waking request may reach the app before it can answer ([Readiness probes](https://docs.napwake.dev/next/concepts/wake-on-request/#readiness-probes)) |
| `ResumeIncomplete`        | In place of `Resumed`, when the resume stopped waiting for replicas not Ready. `AllReplicasReady` once they are                                                                     |
| `PauseIncomplete`         | In place of `Paused`, when the pause stopped waiting for pods that didn’t stop                                                                                                      |
| `HandBackAbandoned`       | A ManagedWorkload in a namespace being deleted let go of its workload                                                                                                               |
| `ManagedByAnotherInstall` | This install leaves the ManagedWorkload to the [one that took it on](https://docs.napwake.dev/next/getting-started/installation/#more-than-one-install)                                                     |

Next

* [Lifecycle →The phases, and what moves a workload between them.](https://docs.napwake.dev/next/concepts/lifecycle/)
* [Troubleshooting →Common problems, and how to fix them.](https://docs.napwake.dev/next/operations/troubleshooting/)
