Lifecycle Routes

A repository document, rendered for the site. View source markdown.

Generated at: 2026-07-30T12:38:02.000Z UTC · source: committed helm-expt evidence for this rendered repository document.

UNOFFICIAL/EXPERIMENTAL. Generated by scripts/generate-lifecycle-routes.mjs. Do not hand-edit. Regenerate with npm run lifecycle:routes.

This is a machine-readable answer to one question a Helm user asks when a chart has a hook or hidden lifecycle behavior:

Where does it go? Who executes it? What is the default? What are my off-ramps?

Render parity proves the desired non-hook objects. This contract is the separate fact about the lifecycle behavior: its route, who runs it, and whether the product runs it automatically (today, nothing does - see below).

The full field definitions and the deterministic mapping tables are in contract.md. The two data forms are routes.csv (spreadsheet) and routes.json (stable interface for agents).

What This Covers

53 route rows across 18 chart/version lifecycle behaviors, joined from:

It starts with hooks and existing routed hook candidates, and reaches the adjacent Tier-1 lifecycle quirks those rows already touch (crd-install, target-facts, webhook-readiness). Quirk classes with no per-chart route data yet (for example generated-facts, lookup) are deliberately out of scope until that data exists - a small correct contract, not a broad guess.

The Honest Headline

0 of 53 rows are safe to show as automatic.

Nothing the catalog renders today is auto-executed by the cub installer. Every route is user-executes, target-owned (a controller or GitOps engine runs it), or not-yet-executable. That is the entire point of the contract: a routed disposition means the route and its executor are named and an off-ramp exists - not that the product silently runs it. safe_as_automatic only becomes yes when execution_mode is product-executes and evidence proves it.

Distribution

DispositionRows
observed42
routed5
todo5
per-target1
Execution modeRows
user-executes35
target-owned10
not-yet-executable8
Quirk classRows
hook-phase23
hook-delete-policy8
crd-install5
hook-test4
hook-weight-ordering4
target-facts4
webhook-readiness4
per-target-hook1

How To Read One Row

Take route_name = preflight-or-presync, disposition = routed, execution_mode = user-executes:

Rows

ChartBaseQuirkRouteDispositionExecutionAuto
airflow-helm/airflow@8.9.0chart fallbackhook-phaseexplicit-managed-actionroutednot-yet-executableno
apache-airflow/airflow@1.21.0chart fallbackhook-phaserecipe-time-lifecycle-verificationtodonot-yet-executableno
argo-cd/argo-workflows@1.0.14chart fallbackcrd-installpreflight-or-presync-crd-applytodonot-yet-executableno
argo-cd/argo-workflows@1.0.14defaultcrd-installpreflight-or-presync-crd-applyobserveduser-executesno
argo-cd/argo-workflows@1.0.14minimal-crdscrd-installself-contained-crd-baseobservedtarget-ownedno
bitnami/contour@21.1.4legacyhook-phasepreflight-or-presyncobserveduser-executesno
bitnami/kafka@32.4.3chart fallbackhook-phaseexplicit-managed-actionroutednot-yet-executableno
bitnami/minio@17.0.21chart fallbackhook-phaseexplicit-managed-actionroutednot-yet-executableno
bitnami/thanos@17.3.1chart fallbackhook-phaseexplicit-managed-actiontodonot-yet-executableno
datadog/datadog@3.214.0chart fallbackper-target-hooktarget-class-preflight-and-upgrade-actionper-targetuser-executesno
fluent/fluent-bit@0.57.6chart fallbackhook-delete-policypreserve-cleanup-policyobservedtarget-ownedno
fluent/fluent-bit@0.57.6chart fallbackhook-testexplicit-test-checkobserveduser-executesno
fluent/fluent-bit@0.57.6defaulthook-testexplicit-test-checkobserveduser-executesno
gatekeeper/gatekeeper@3.22.2defaulthook-phasepreflight-or-presyncobserveduser-executesno
gatekeeper/gatekeeper@3.22.2defaulthook-phaseupgrade-action-with-receiptobserveduser-executesno
gitlab/gitlab@10.0.0chart fallbackhook-phaseargocd-or-flux-lifecycle-hooktodonot-yet-executableno
k8s-dashboard/kubernetes-dashboard@7.14.0chart fallbackhook-phaseupgrade-action-with-receiptrouteduser-executesno
kedacore/keda@2.19.0no-crdswebhook-readinesswebhook-readiness-observationobservedtarget-ownedno
kong/kong@3.2.0chart fallbackhook-phaseupgrade-action-with-receiptrouteduser-executesno
kyverno/kyverno@3.8.1chart fallbackhook-delete-policydelete-cleanup-policyobservedtarget-ownedno
kyverno/kyverno@3.8.1chart fallbackhook-delete-policypreserve-cleanup-policyobservedtarget-ownedno
kyverno/kyverno@3.8.1chart fallbackhook-phaseupgrade-action-with-receiptobserveduser-executesno
kyverno/kyverno@3.8.1chart fallbackhook-testexplicit-test-checkobserveduser-executesno
kyverno/kyverno@3.8.1chart fallbackhook-weight-orderingpreserve-orderingobservedtarget-ownedno
kyverno/kyverno@3.8.1chart fallbacktarget-factstarget-facts-or-preflightobserveduser-executesno
kyverno/kyverno@3.8.1defaulthook-delete-policydelete-cleanup-policyobservedtarget-ownedno
kyverno/kyverno@3.8.1defaulthook-phaseupgrade-action-with-receiptobserveduser-executesno
kyverno/kyverno@3.8.1defaulthook-testexplicit-test-checkobserveduser-executesno
projectcalico/tigera-operator@v3.32.0defaulthook-delete-policyexplicit-delete-cleanup-actionobserveduser-executesno
projectcalico/tigera-operator@v3.32.0defaulthook-phasepreflight-or-presyncobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbackhook-delete-policypreserve-cleanup-policyobservedtarget-ownedno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbackhook-phasepostsync-check-or-observationobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbackhook-phasepreflight-or-presyncobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbackhook-phaseupgrade-action-with-receiptobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbackhook-weight-orderingpreserve-orderingobservedtarget-ownedno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbacktarget-factstarget-facts-or-preflightobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.0chart fallbackwebhook-readinesswebhook-readiness-observationobservedtarget-ownedno
prometheus-community/kube-prometheus-stack@85.3.3defaultcrd-installpreflight-or-presync-crd-applyobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3defaulthook-delete-policypreserve-cleanup-policyobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3defaulthook-phasepostsync-check-or-observationobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3defaulthook-phasepreflight-or-presyncobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3defaulthook-phaseupgrade-action-with-receipttodonot-yet-executableno
prometheus-community/kube-prometheus-stack@85.3.3defaulthook-weight-orderingpreserve-orderingobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3defaulttarget-factstarget-facts-or-preflightobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3defaultwebhook-readinesswebhook-readiness-observationobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdscrd-installpreflight-or-presync-crd-applyobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdshook-delete-policypreserve-cleanup-policyobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdshook-phasepostsync-check-or-observationobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdshook-phasepreflight-or-presyncobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdshook-phaseupgrade-action-with-receiptobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdshook-weight-orderingpreserve-orderingobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdstarget-factstarget-facts-or-preflightobserveduser-executesno
prometheus-community/kube-prometheus-stack@85.3.3no-crdswebhook-readinesswebhook-readiness-observationobserveduser-executesno

Boundaries