Skip to content

Finding kinds

Every kind= the read path can emit (150 in all), rendered from the same Kinds declarations that produce each command’s --help, MCP tool schema, and reference page. A check cannot emit a kind that is not here: the contract tests reject an undeclared kind, and a source sweep rejects one no test happens to exercise.

The severity column is every level the kind can carry, worst first — one kind often spans two, because the same defect is graver in some shapes than others. A kind’s absence from a run means the check looked and found nothing (zero nominal state); it never means the check was skipped, which is reported explicitly.

These are read-path FINDING kinds. The sentinel’s wire format has its own frozen vocabulary — see Signal kinds.

KindSeverityClaimEmitted by
addon.degradedcritical, warninga kube-system add-on (dns, proxy, cni, csi, metrics, connectivity) is short of replicas; critical when none are availablebundle, health, scan, triage delta
audit.default_sa_automountwarningthe pod runs as the namespace’s default ServiceAccount with its token automounted, and something in the pod can use itaudit hardening, scan
audit.exemption_expiredwarningan exemption entry has lapsed: the findings it used to annotate are being reported unqualified againaudit exemptions, scan
audit.exemption_expiringinfoan exemption entry lapses within —within — renew it or let it go deliberatelyaudit exemptions, scan
audit.host_namespacewarningthe pod shares the node’s network, PID, or IPC namespaceaudit hardening, scan
audit.hostpath_mountwarning, infothe pod mounts a host path; warning when it is writable, info when read-onlyaudit hardening, scan
audit.hpa_cannot_scalewarningthe autoscaler structurally cannot scale: min equals max, the target is missing, or a container has no request for its utilization target to divide byaudit workloads, scan
audit.legacy_metadatawarninga node pool still serves the pre-v1 instance-metadata endpoints, which any pod can readaudit cluster, scan
audit.netpol_missingwarning, infonothing restricts this direction for the subject — a namespace with no policy at all, or a workload the covering policies’ selectors miss; info for the egress direction, where no policy is a defensible defaultaudit netpol, scan
audit.no_liveness_probeinfoa container has no liveness probe, so a wedged process is never restartedaudit workloads, scan
audit.no_pdbwarningthe workload has no PodDisruptionBudget: a drain can take every replica at onceaudit workloads, scan
audit.no_readiness_probewarninga container has no readiness probe, so traffic reaches it before it can serveaudit workloads, scan
audit.no_spreadinfothe workload’s replicas are not spread across nodes or zonesaudit workloads, scan
audit.podsecurity_gapswarningthe namespace enforces no Pod Security Admission level, so none of the above is preventedaudit hardening, scan
audit.privileged_containerwarninga container runs privileged or holds a node-root capability (ALL, SYS_ADMIN): a container escape is a node compromiseaudit hardening, scan
audit.public_control_planewarning, infothe control-plane endpoint is reachable from the internet; info when authorized networks narrow itaudit cluster, scan
audit.rigid_schedulingwarning, infoplacement constraints pin the workload to too few nodes to survive losing oneaudit workloads, scan
audit.single_replicawarningthe workload runs a single replica, so any disruption is an outageaudit workloads, scan
audit.suspended_cronjobwarninga CronJob has been suspended past —cron-suspended and has skipped activations because of it: whatever it does is not happening, and nothing else reports thataudit workloads, scan
audit.upgrade_blockedwarning, infoan active maintenance exclusion, or a node image on the removed Docker runtime, will stop the upgrade when it comesaudit upgrades, scan
audit.upgrade_unattendedinfoupgrades will happen with nobody watching: no maintenance window, or no upgrade notificationsaudit upgrades, scan
audit.upgrade_unmanagedwarningnothing will close that gap on its own: no release channel, or node auto-upgrade/auto-repair offaudit upgrades, scan
audit.version_behindwarning, infothe control plane or a node pool is behind what the provider publishes, or a node pool has skewed from the control plane; info while the gap is still within the supported skewaudit upgrades, scan
audit.workload_identity_offwarningWorkload Identity is off cluster-wide, or a node pool bypasses it — pods authenticate to the cloud as the nodeaudit cluster, scan
bundle.targetinfothe head record: which workload the bundle is about and which sections followbundle
cert.expiredcriticala TLS secret’s certificate has expiredhealth
cert.expiringwarninga TLS secret’s certificate expires within —cert-warnhealth
cert.invalidwarninga TLS secret’s tls.crt does not contain a parseable X.509 certificatehealth
change.configinfoa ConfigMap in the neighborhood changedtriage changes
change.labelinfoonly labels changed on a neighborhood object — enough to move it in or out of a selectortriage changes
change.nodeinfoa Node in the neighborhood changedtriage changes
change.rolloutinfoa workload’s pod template changed — a new image, container or mount, or a controller churn eventtriage changes
change.scaleinfoa workload’s replica count changedtriage changes
change.secretinfoa Secret in the neighborhood changed (names and shortened hashes only, never values —)triage changes
change.topologyinfoa neighborhood object appeared, disappeared, or changed in a way none of the other classes nametriage changes
cloud.unavailableinfothe cloud capability this check needs is unavailable, so nothing was examined — an explicit degradation record, never silenceaudit cluster, audit upgrades, cloud ipspace, cloud orphans, cloud quota, cloud stockout, perf probe, scan, state wi, triage top
crd.unavailableinfothe API group this check reads is not served by the cluster, so nothing was examined (no coverage lies)scan, state gateway
cron.missedcritical, warningan unsuspended CronJob’s schedule said to run more than —cron-grace ago and status says it did not; critical once several activations in a row are gonebundle, health, scan, triage delta
cron.unparseablewarninga CronJob’s spec.schedule could not be parsed, so its activations cannot be judged at allbundle, health, scan, triage delta
drain.bare_podwarninga pod on this node has no owner, so eviction deletes it permanently and nothing recreates itstab drain
drain.local_storagewarninga pod on this node has emptyDir volumes: the drain needs —delete-emptydir-data and the data is loststab drain
drain.nodecritical, warningthe -A roll-up: this node is not cleanly drainable, with the blocker classes counted; critical when a PDB gridlock is among themstab drain
drain.pdb_gridlockcriticala PodDisruptionBudget covering pods on this node allows zero disruptions: the eviction API refuses and the drain hangsstab drain
drain.singletonwarninga pod on this node is the only replica of its controller — evicting it is an outagestab drain
drift.manual_editcritical, warninga manager other than the GitOps controller owns spec fields on this object; critical when one of them is high blast radius (image, replicas, env)scan, stab drift
edge.backend_missingcriticalan Ingress backend service, or the port it names, does not existbundle, scan, state edges
edge.cert_expiredcriticala TLS certificate’s NotAfter is in the pastbundle, scan, state edges
edge.cert_expiringwarninga TLS certificate expires within —cert-warnbundle, scan, state edges
edge.cert_invalidwarningtls.crt is missing or unparseable, or the secret is not kubernetes.io/tlsbundle, scan, state edges
edge.endpoints_missingcriticala selecting Service has no EndpointSlices at allbundle, scan, state edges
edge.endpoints_orphanedwarningan endpoint targetRef names a pod that no longer existsbundle, scan, state edges
edge.endpoints_unreadycritical, warningthe endpoint ready-count disagrees with the selected pods (stale or lagging slices); critical at zero readybundle, scan, state edges
edge.invalid_refwarningthe referenced object exists but is the wrong type to serve the referencebundle, scan, state edges
edge.missing_keycriticalthe referenced key is absent from an existing ConfigMap/Secretbundle, scan, state edges
edge.missing_refcriticala referenced ConfigMap, Secret, ServiceAccount, TLS secret, IngressClass, StorageClass, or governing Service does not existbundle, scan, state edges
edge.rbac_danglingwarninga (Cluster)RoleBinding for the workload’s ServiceAccount points at a missing (Cluster)Rolebundle, scan, state edges
edge.selector_emptycriticala Service selector selects zero pods, so the service routes nowherebundle, scan, state edges
edge.selector_unreadycritical, warningthe Service selects pods but some are not Ready; critical when none arebundle, scan, state edges
edge.unclassedwarningthe Ingress names no class and no IngressClass declares itself the cluster default — no controller will claim itbundle, scan, state edges
event.hpa_thrashwarningan HPA changed scale direction at least —hpa-flips times inside —hpa-window: the autoscaler is fighting itselftriage events
event.normalinfoone collapsed timeline entry for a Normal-type event family — context for the warnings around it, not a problem on its owntriage events
event.warningwarningone collapsed timeline entry for a Warning-type event family on a subjecttriage events
findings.ackinfothe receipt for the ack this call took or cleared — what was acked, by whom, and until whenfindings ack
findings.transitioncritical, warning, infoa finding subject changed state since the previous run (new|ongoing|escalated|resolved|suppressed); the severity is the underlying finding’s current one, not a judgment about the transitionfindings diff
gateway.class_not_acceptedcriticalthe Gateway’s GatewayClass is not Accepted by its controllerscan, state gateway
gateway.listener_invalidwarningone listener of an otherwise working Gateway is not resolved or not programmedscan, state gateway
gateway.missing_classcriticalthe Gateway names a GatewayClass that does not exist — nothing will program itscan, state gateway
gateway.not_acceptedcriticalthe Gateway itself is not Acceptedscan, state gateway
gateway.not_programmedcriticalthe Gateway is Accepted but not Programmed: no data plane is carrying its trafficscan, state gateway
health.categorycritical, warning, infoone scorecard line: how this category answered — healthy, degraded, or unavailable. The scorecard always answers, so healthy is explicit rather than silent; the line carries the worst severity found inside the categoryhealth
inventory.objectinfoone object in scope, rendered as kubectl’s default columns for its kind — an aggregated kubectl get, so every row is emitted, healthy or nottriage list
ipspace.rangecritical, warning, infoa pod/service/node range is at 80% of its CIDR or worse; critical from 95%, info for a range the cloud APIs cannot rate and for an —all row below the linecloud ipspace, scan
job.failedwarninga Job’s Failed condition is setbundle, health, scan, triage delta
log.fetch_errorwarninga container’s log stream could not be read, so its lines are missing from the distillationbundle, triage logs
log.overflowinfothe low-count tail —max-templates dropped, counted rather than discarded silently (no coverage lies)bundle, triage logs
log.probe_noiseinfohealth/readiness probe request lines stripped before distillation, counted so the removal is visiblebundle, triage logs
log.stacktracecritical, warning, infoa template that is a Go panic, Java exception, or Python traceback, with its innermost framesbundle, triage logs
log.templatecritical, warning, infoone distilled template and how many lines collapsed into it; severity is the guessed level — critical at fatal, warning for error-ish, info otherwisebundle, triage logs
node.conditioncritical, warninga non-standard node condition is True — NPD and its cousins publish problems that waybundle, health, scan, triage delta
node.cordonedwarningthe node is unschedulable but still holds pods: a stuck drain or a forgotten maintenance stepbundle, health, scan, triage delta
node.notreadycriticalthe node’s Ready condition is not Truebundle, health, scan, triage delta
node.preemptcritical, warning, infoa reclaim taint marks the node for termination; severity tracks how imminentbundle, health, scan, triage delta
node.pressurecriticalthe node reports Memory/Disk/PID pressurebundle, health, scan, triage delta
orphan.diskwarninga GCE disk has been unattached for at least —min-age and is still billingcloud orphans, scan
orphan.lbwarninga forwarding rule or load balancer routes to zero endpoints and is still billingcloud orphans, scan
pdb.gridlockedcritical, warningthe budget permits no disruptions; critical when healthy pods are already below the required minimumbundle, health, scan, triage delta
perf.apf_rejectscritical, warningAPF is shedding load: the apiserver is returning 429s at a priority levelperf probe, scan
perf.apf_saturationcritical, warningan API Priority and Fairness level is holding a sustained queue — warning from 10 queued, critical from 100perf probe, scan
perf.apiserver_p99critical, warningapiserver request latency p99 crossed the pack threshold for a verb/resource — warning from 1s, critical from 4shealth, perf probe, scan
perf.etcd_db_sizecritical, warningthe etcd database is approaching its quota — warning from 4 GiB, critical from 5.5 GiBperf probe, scan
perf.etcd_fsynccritical, warningetcd WAL fsync p99 crossed the pack threshold — warning from 10ms, critical from 100msperf probe, scan
perf.pack_unavailablewarninga metric the requested pack needs is not in the metrics workspace, so part of the pack could not run; the rest still did (no coverage lies)health, perf probe, scan
perf.startup_p95critical, warningpod first-ready p95 crossed the pack threshold — warning from 60s, critical from 300sperf probe, scan
pod.crashloopcriticala container is crash loopingbundle, health, scan, triage delta
pod.failedwarningthe pod reached phase Failedbundle, health, scan, triage delta
pod.imagepullcriticala container cannot pull its imagebundle, health, scan, triage delta
pod.notreadywarninga container in a Running pod has been not-ready past the —pending-age gracebundle, health, scan, triage delta
pod.oomkilledwarninga container’s last termination was an OOM killbundle, health, scan, triage delta
pod.pendingcritical, warningthe pod has been Pending longer than —pending-age with no container-level diagnosis; critical when the scheduler has declared it Unschedulable, which is a capacity or constraint problem rather than latencybundle, health, scan, triage delta
pod.restartswarninga container has restarted at least —restarts timesbundle, health, scan, triage delta
pod.waitingwarninga container is stuck in an error waiting state (CreateContainerConfigError, InvalidImageName, …)bundle, health, scan, triage delta
probe.dnscritical, warning, infothe result of one DNS resolution: info when it resolved, warning on timeout, critical otherwise — a probe result is always emitted, success included, because the answer to “can this be reached” is the point of the commandnet probe
probe.httpcritical, warning, infothe result of one HTTP GET (redirects reported, not followed): info on success, warning on timeout or 4xx, critical otherwisenet probe
probe.tcpcritical, warning, infothe result of one TCP connect: info when it connected, warning on timeout, critical otherwisenet probe
pvc.lostcriticala PersistentVolumeClaim’s bound volume is losthealth
pvc.pendingwarninga PersistentVolumeClaim is not bound; pods mounting it cannot starthealth
quota.exhaustedcriticala ResourceQuota resource is at its hard limit: the next create is rejectedbundle, health, scan, triage delta
quota.nearwarninga ResourceQuota resource is at or past —quota-warn percent of its hard limitbundle, health, scan, triage delta
quota.pressurecritical, warning, infoa cloud quota is at or above —quota-warn percent of its limit; critical from 95%, info for an —all row below the linecloud quota, scan
radius.missingwarninga neighbor the graph references but never observed, in a kind the snapshot does watch: the reference is danglingbundle, triage radius
radius.neighborinfoone object in the target’s neighborhood, with its direction, relation, and hop distance — an enumeration of impact, not a defectbundle, triage radius
route.backend_portcriticalthe route’s backendRef Service exists but does not expose the named portscan, state gateway
route.missing_backendcriticalthe route’s backendRef Service does not existscan, state gateway
route.missing_parentcriticalthe route’s parentRef names a Gateway that does not existscan, state gateway
route.not_acceptedcriticalthe Gateway refused the route’s attachment (listener, hostname, or namespace policy)scan, state gateway
scan.check_failedwarninga stage errored; the scan continued without it, so this run saw less than a whole cluster — unless EVERY stage failed and none read anything, which is a runtime error (exit 1) rather than a scanscan
scan.check_skippedinfoa stage declined this invocation because a zero-argument scan cannot supply something it needs — the coverage claim is smaller than it looksscan
scan.incompletewarningthe —timeout expired with stages still to run; not_run names themscan
spec.conditionwarninga status condition of the target that is not in its nominal statebundle, triage spec
spec.containerinfoone container of the target: image, resources, ports, probes, env (one per container)bundle, triage spec
spec.resourceinfothe object itself: metadata, owner, and the kind-specific highlights (one per target)bundle, triage spec
stockout.zonewarningthe cloud had no capacity for a machine type in this zone during the window — the reason a scale-up failed and pods stayed Pendingcloud stockout, scan
storage.missing_classcriticalthe claim names a StorageClass that does not exist — it will stay Pending foreverscan, state storage
storage.multiple_defaultswarningmore than one StorageClass is annotated as the cluster default; which one wins is not definedscan, state storage
storage.no_default_classcriticalthe claim names no class and the cluster has no default StorageClassscan, state storage
storage.no_provisionerwarningthe claim’s class is static-only (kubernetes.io/no-provisioner) and no matching PV is availablescan, state storage
storage.pv_failedwarninga PersistentVolume is Failed: its reclaim did not complete, so the backing disk stays allocated and the volume cannot be reusedscan, state storage
storage.pv_releasedinfoa PersistentVolume is Released — retained on purpose, but its capacity is unusable until spec.claimRef is clearedscan, state storage
top.nodecritical, warning, infoa node’s allocatable is close to committed — critical near the limit, info for an —all row below the thresholdtriage top
top.saturationcritical, warning, infoa container’s usage is close to its limit — critical near the limit, info for an —all row below the thresholdtriage top
top.unlimitedinfohow many containers in scope set no cpu/memory limit, and are therefore invisible to saturation analysistriage top
top.unlimited_containerinfoone container that sets no cpu/memory limit (—show-unlimited)triage top
top.unrequestedinfohow many containers in scope set no cpu/memory request, so the scheduler bin-packs them as zerotriage top
top.unrequested_containerinfoone container that sets no cpu/memory request (—show-unrequested)triage top
triage.statusinfothe triage record for an incident subject as it now stands — state, root-cause hypothesis, action, and who wrote it; a receipt, not a defecttriage status
volume.attach_errorcritical, warningthe attach or detach is failing; critical once it has been failing long enough to be stuck rather than slowscan, state volumes
volume.multi_attachcriticalan RWO claim is wanted by pods on more than one node — the second pod never startsscan, state volumes
volume.orphaned_attachmentinfoa VolumeAttachment survives its PV or its nodescan, state volumes
volume.zone_conflictcriticalthe PV is locked to a zone the pod’s node is not inscan, state volumes
webhook.ca_expiredcriticalthe webhook’s caBundle has expired: the API server cannot verify ithealth, scan, state webhooks
webhook.ca_expiringwarningthe webhook’s caBundle expires within —cert-warnhealth, scan, state webhooks
webhook.dead_backendwarningthe webhook’s service backend is missing, has no ready endpoints, or does not serve the named porthealth, scan, state webhooks
webhook.failing_closedcriticalthe webhook has no working backend and failurePolicy=Fail: every gated write is rejected cluster-widehealth, scan, state webhooks
webhook.slow_riskinfothe webhook’s timeout is long enough to slow every gated write if the backend degradeshealth, scan, state webhooks
wi.gsa_missingcriticalthe annotated Google service account does not exist — every GCP call from these pods failsscan, state wi
wi.unannotated_useinfoa pod sets GOOGLE_APPLICATION_CREDENTIALS but its ServiceAccount carries no Workload Identity annotationscan, state wi
wi.unboundcriticalthe KSA annotates a GSA but the roles/iam.workloadIdentityUser binding is missing or malformedscan, state wi
workload.replicafailurecriticalthe controller cannot create pods at all (quota, PodSecurity, admission) — no pod exists to diagnosebundle, health, scan, triage delta
workload.rolloutcritical, warningreplicas are short of desired; critical when nothing is serving at allbundle, health, scan, triage delta
workload.stalledcriticala Deployment’s Progressing condition is False: the rollout has given upbundle, health, scan, triage delta