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:
- data/hook-disposition/top100-hook-dispositions.csv
- data/hook-route-candidates/candidates.csv
- data/hook-lifecycle-review/top100-source-hook-route-review.csv
data/hook-route-candidates/selected-routes/*.yaml
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
| Disposition | Rows |
|---|---|
observed | 42 |
routed | 5 |
todo | 5 |
per-target | 1 |
| Execution mode | Rows |
|---|---|
user-executes | 35 |
target-owned | 10 |
not-yet-executable | 8 |
| Quirk class | Rows |
|---|---|
hook-phase | 23 |
hook-delete-policy | 8 |
crd-install | 5 |
hook-test | 4 |
hook-weight-ordering | 4 |
target-facts | 4 |
webhook-readiness | 4 |
per-target-hook | 1 |
How To Read One Row
Take route_name = preflight-or-presync, disposition = routed, execution_mode = user-executes:
- quirk_class - the kind of behavior (here a pre-install/upgrade hook phase).
- disposition -
routed: the route is named but not yet proven live. - route_name / default_route - where the behavior goes by default.
- alternatives - the named off-ramps for this quirk class.
- execution_mode -
user-executes: you run it; the product does not. - human_offramp / agent_offramp - how each picks a non-default route. A human selects a different recipe base/values; an agent enumerates and selects from routes.json.
- route_requirements - what the route needs (target facts, conditions).
- live_status / safe_as_automatic - proven-ness, and the strict automatic flag (
nountil the product executes it with evidence). - evidence_or_next_action - the receipt path if observed, else the next step.
Rows
| Chart | Base | Quirk | Route | Disposition | Execution | Auto |
|---|---|---|---|---|---|---|
| airflow-helm/airflow@8.9.0 | chart fallback | hook-phase | explicit-managed-action | routed | not-yet-executable | no |
| apache-airflow/airflow@1.21.0 | chart fallback | hook-phase | recipe-time-lifecycle-verification | todo | not-yet-executable | no |
| argo-cd/argo-workflows@1.0.14 | chart fallback | crd-install | preflight-or-presync-crd-apply | todo | not-yet-executable | no |
| argo-cd/argo-workflows@1.0.14 | default | crd-install | preflight-or-presync-crd-apply | observed | user-executes | no |
| argo-cd/argo-workflows@1.0.14 | minimal-crds | crd-install | self-contained-crd-base | observed | target-owned | no |
| bitnami/contour@21.1.4 | legacy | hook-phase | preflight-or-presync | observed | user-executes | no |
| bitnami/kafka@32.4.3 | chart fallback | hook-phase | explicit-managed-action | routed | not-yet-executable | no |
| bitnami/minio@17.0.21 | chart fallback | hook-phase | explicit-managed-action | routed | not-yet-executable | no |
| bitnami/thanos@17.3.1 | chart fallback | hook-phase | explicit-managed-action | todo | not-yet-executable | no |
| datadog/datadog@3.214.0 | chart fallback | per-target-hook | target-class-preflight-and-upgrade-action | per-target | user-executes | no |
| fluent/fluent-bit@0.57.6 | chart fallback | hook-delete-policy | preserve-cleanup-policy | observed | target-owned | no |
| fluent/fluent-bit@0.57.6 | chart fallback | hook-test | explicit-test-check | observed | user-executes | no |
| fluent/fluent-bit@0.57.6 | default | hook-test | explicit-test-check | observed | user-executes | no |
| gatekeeper/gatekeeper@3.22.2 | default | hook-phase | preflight-or-presync | observed | user-executes | no |
| gatekeeper/gatekeeper@3.22.2 | default | hook-phase | upgrade-action-with-receipt | observed | user-executes | no |
| gitlab/gitlab@10.0.0 | chart fallback | hook-phase | argocd-or-flux-lifecycle-hook | todo | not-yet-executable | no |
| k8s-dashboard/kubernetes-dashboard@7.14.0 | chart fallback | hook-phase | upgrade-action-with-receipt | routed | user-executes | no |
| kedacore/keda@2.19.0 | no-crds | webhook-readiness | webhook-readiness-observation | observed | target-owned | no |
| kong/kong@3.2.0 | chart fallback | hook-phase | upgrade-action-with-receipt | routed | user-executes | no |
| kyverno/kyverno@3.8.1 | chart fallback | hook-delete-policy | delete-cleanup-policy | observed | target-owned | no |
| kyverno/kyverno@3.8.1 | chart fallback | hook-delete-policy | preserve-cleanup-policy | observed | target-owned | no |
| kyverno/kyverno@3.8.1 | chart fallback | hook-phase | upgrade-action-with-receipt | observed | user-executes | no |
| kyverno/kyverno@3.8.1 | chart fallback | hook-test | explicit-test-check | observed | user-executes | no |
| kyverno/kyverno@3.8.1 | chart fallback | hook-weight-ordering | preserve-ordering | observed | target-owned | no |
| kyverno/kyverno@3.8.1 | chart fallback | target-facts | target-facts-or-preflight | observed | user-executes | no |
| kyverno/kyverno@3.8.1 | default | hook-delete-policy | delete-cleanup-policy | observed | target-owned | no |
| kyverno/kyverno@3.8.1 | default | hook-phase | upgrade-action-with-receipt | observed | user-executes | no |
| kyverno/kyverno@3.8.1 | default | hook-test | explicit-test-check | observed | user-executes | no |
| projectcalico/tigera-operator@v3.32.0 | default | hook-delete-policy | explicit-delete-cleanup-action | observed | user-executes | no |
| projectcalico/tigera-operator@v3.32.0 | default | hook-phase | preflight-or-presync | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | hook-delete-policy | preserve-cleanup-policy | observed | target-owned | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | hook-phase | postsync-check-or-observation | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | hook-phase | preflight-or-presync | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | hook-phase | upgrade-action-with-receipt | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | hook-weight-ordering | preserve-ordering | observed | target-owned | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | target-facts | target-facts-or-preflight | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.0 | chart fallback | webhook-readiness | webhook-readiness-observation | observed | target-owned | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | crd-install | preflight-or-presync-crd-apply | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | hook-delete-policy | preserve-cleanup-policy | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | hook-phase | postsync-check-or-observation | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | hook-phase | preflight-or-presync | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | hook-phase | upgrade-action-with-receipt | todo | not-yet-executable | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | hook-weight-ordering | preserve-ordering | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | target-facts | target-facts-or-preflight | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | default | webhook-readiness | webhook-readiness-observation | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | crd-install | preflight-or-presync-crd-apply | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | hook-delete-policy | preserve-cleanup-policy | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | hook-phase | postsync-check-or-observation | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | hook-phase | preflight-or-presync | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | hook-phase | upgrade-action-with-receipt | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | hook-weight-ordering | preserve-ordering | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | target-facts | target-facts-or-preflight | observed | user-executes | no |
| prometheus-community/kube-prometheus-stack@85.3.3 | no-crds | webhook-readiness | webhook-readiness-observation | observed | user-executes | no |
Boundaries
- Static join of committed CSVs and selected-route YAML receipts. No hook is executed, no cluster is touched, no ConfigHub state is changed, no
runs/receipt is edited. - A
routedortodorow is a classification, not a proof.observedrows point at the committed receipt inevidence_or_next_action. - The master matrix value
candidate-routemaps toroutedhere; thesource_dispositioncolumn keeps the original value for traceability.