{
  "kind": "LifecycleRouteContract",
  "unofficial": true,
  "description": "Machine-readable lifecycle route contract for hook and hook-like behavior. Generated by scripts/generate-lifecycle-routes.mjs; do not hand-edit.",
  "sources": [
    "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",
    "data/hook-lifecycle/receipts"
  ],
  "vocabulary": {
    "disposition": [
      "observed",
      "routed",
      "per-target",
      "refused",
      "todo"
    ],
    "execution_mode": [
      "product-executes",
      "user-executes",
      "target-owned",
      "not-yet-executable"
    ],
    "source_disposition_map": {
      "observed": "observed",
      "routed": "routed",
      "per-target": "per-target",
      "refused": "refused",
      "recipe-needed": "todo",
      "candidate-route": "routed",
      "candidate-route-plan": "todo",
      "selected-route-receipt": "observed"
    }
  },
  "invariants": [
    "safe_as_automatic is yes only when execution_mode is product-executes and evidence proves it.",
    "No row is product-executes today: the installer does not auto-run lifecycle routes yet.",
    "refused is a deliberate final decision; unmapped/unfinished cases are todo with a next action."
  ],
  "routes": [
    {
      "chart": "airflow-helm/airflow",
      "version": "8.9.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade",
      "source_disposition": "routed",
      "disposition": "routed",
      "route_name": "explicit-managed-action",
      "default_route": "explicit-managed-action",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "metadata database and migration state; values-conditional rendering",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "blocked",
      "safe_as_automatic": false,
      "evidence_or_next_action": "decide the supported migration mode (Deployment vs hook Job) at recipe time; rehearse after image preconditions clear | blocked before attempt: dependency closure + image-availability preconditions (see blocker receipt) | data/hook-disposition/evidence/airflow-helm-airflow/evidence.yaml;data/hook-disposition/evidence/airflow-helm-airflow/hook-resources.yaml;data/hook-disposition/evidence/airflow-helm-airflow/live-rehearsal-blocker-receipt.yaml"
    },
    {
      "chart": "apache-airflow/airflow",
      "version": "1.21.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "none found by static scan",
      "source_disposition": "candidate-route-plan",
      "disposition": "todo",
      "route_name": "recipe-time-lifecycle-verification",
      "default_route": "recipe-time-lifecycle-verification",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "metadata database and migration state",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "candidate-route-plan",
      "safe_as_automatic": false,
      "evidence_or_next_action": "verify values-conditional lifecycle Jobs before claiming hook-free; route rendered migration Jobs as managed actions with receipts | data/hook-route-candidates/candidates.csv"
    },
    {
      "chart": "argo-cd/argo-workflows",
      "version": "1.0.14",
      "base_or_variant": "",
      "quirk_class": "crd-install",
      "hook_phases": "pre-install, pre-upgrade",
      "source_disposition": "candidate-route-plan",
      "disposition": "todo",
      "route_name": "preflight-or-presync-crd-apply",
      "default_route": "preflight-or-presync-crd-apply",
      "alternatives": [
        {
          "route": "self-contained-crd-base",
          "requirement": "a preset config that renders the required CRDs as ordinary objects before the workloads"
        },
        {
          "route": "target-owned-crds",
          "requirement": "the cluster or an operator owns CRD install and upgrade out of band"
        },
        {
          "route": "refuse",
          "requirement": "use a no-crds base and install/upgrade the CRDs yourself"
        }
      ],
      "route_requirements": "full CRDs required before workflow-controller and server can start; hook uses server-side apply because full CRDs exceed client-side apply annotation limits",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "candidate-route-plan",
      "safe_as_automatic": false,
      "evidence_or_next_action": "direct full-CRD package route is proven; next prove controller-run ordering under Argo CD and Flux and test a cross-version CRD upgrade | data/hook-route-candidates/candidates.csv"
    },
    {
      "chart": "argo-cd/argo-workflows",
      "version": "1.0.14",
      "base_or_variant": "default",
      "quirk_class": "crd-install",
      "hook_phases": "pre-install, pre-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync-crd-apply",
      "default_route": "preflight-or-presync-crd-apply",
      "alternatives": [
        {
          "route": "self-contained-crd-base",
          "requirement": "a preset config that renders the required CRDs as ordinary objects before the workloads"
        },
        {
          "route": "target-owned-crds",
          "requirement": "the cluster or an operator owns CRD install and upgrade out of band"
        },
        {
          "route": "refuse",
          "requirement": "use a no-crds base and install/upgrade the CRDs yourself"
        }
      ],
      "route_requirements": "The controller and server require the Argo Workflows APIs. Helm normally downloads and applies the full CRDs in a hook before those workloads start.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-route-candidates/selected-routes/argo-cd-argo-workflows-default.yaml;docs/demo/hooks-crds/argo-workflows.md;data/hook-route-candidates/argo-cd-argo-workflows.yaml;recipes/argo-cd/argo-workflows/1.0.14/variants/default/variant.yaml;recipes/argo-cd/argo-workflows/1.0.14/upstream/full-crds/argoproj.io_workflows.yaml;packages/argo-cd/argo-workflows/1.0.14/prerequisites/target-facts/default-crds.yaml;runs/live-kind-parity/argo-cd-argo-workflows-default/receipt.yaml;runs/live-helm-confighub-compare/argo-cd-argo-workflows-default/receipt.yaml"
    },
    {
      "chart": "argo-cd/argo-workflows",
      "version": "1.0.14",
      "base_or_variant": "minimal-crds",
      "quirk_class": "crd-install",
      "hook_phases": "pre-install, pre-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "self-contained-crd-base",
      "default_route": "self-contained-crd-base",
      "alternatives": [
        {
          "route": "target-owned-crds",
          "requirement": "the cluster or an operator owns CRD install and upgrade out of band"
        },
        {
          "route": "refuse",
          "requirement": "use a no-crds base and install/upgrade the CRDs yourself"
        }
      ],
      "route_requirements": "Argo Workflows default full CRDs are installed through a Helm hook using server-side apply; this base chooses the self-contained minimal-CRD route instead.",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-route-candidates/selected-routes/argo-cd-argo-workflows-minimal-crds.yaml;data/hook-route-candidates/argo-cd-argo-workflows.yaml;recipes/argo-cd/argo-workflows/1.0.14/variants/minimal-crds/variant.yaml;recipes/argo-cd/argo-workflows/1.0.14/revisions/minimal-crds/r001/receipts/install-gate.yaml;runs/next80-local-kind/argo-cd-argo-workflows-1.0.14-minimal-crds/observation-receipt.yaml;runs/argo-workflows-minimal-crds-confighub-proof/latest/confighub-proof-receipt.yaml;runs/live-helm-confighub-compare/argo-cd-argo-workflows-minimal-crds/receipt.yaml;runs/live-kind-parity/argo-cd-argo-workflows-minimal-crds/receipt.yaml"
    },
    {
      "chart": "bitnami/contour",
      "version": "21.1.4",
      "base_or_variant": "legacy",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-install, pre-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync",
      "default_route": "preflight-or-presync",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "Contour and Envoy cannot start until contourcert and envoycert exist; Helm normally creates them with a hook that is absent from the ordinary rendered YAML.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-route-candidates/selected-routes/bitnami-contour-legacy.yaml;recipes/bitnami/contour/21.1.4/lifecycle-route.yaml;recipes/bitnami/contour/21.1.4/variants/legacy/variant.yaml;packages/bitnami/contour/21.1.4/prerequisites/contour-certgen/run.sh;runs/live-kind-parity/bitnami-contour-legacy/receipt.yaml;runs/live-helm-confighub-compare/bitnami-contour-legacy/receipt.yaml"
    },
    {
      "chart": "bitnami/kafka",
      "version": "32.4.3",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade",
      "source_disposition": "routed",
      "disposition": "routed",
      "route_name": "explicit-managed-action",
      "default_route": "explicit-managed-action",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "in-cluster brokers; values-conditional opt-in",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "blocked",
      "safe_as_automatic": false,
      "evidence_or_next_action": "create an image-override or digest-pinned base, then re-run the provisioning-Job route rehearsal | blocked: pinned default image tag no longer exists upstream (see blocker receipt) | data/hook-disposition/evidence/bitnami-kafka/evidence.yaml;data/hook-disposition/evidence/bitnami-kafka/hook-resources.yaml;data/hook-disposition/evidence/bitnami-kafka/live-rehearsal-blocker-receipt.yaml"
    },
    {
      "chart": "bitnami/minio",
      "version": "17.0.21",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade",
      "source_disposition": "routed",
      "disposition": "routed",
      "route_name": "explicit-managed-action",
      "default_route": "explicit-managed-action",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "in-cluster object store; optional existing credentials Secret; values-conditional opt-in",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "blocked",
      "safe_as_automatic": false,
      "evidence_or_next_action": "choose a supported image override or newer chart version, then re-run the provisioning-Job managed-action rehearsal | blocked: pinned MinIO image tags no longer resolve upstream (see rehearsal receipt) | data/hook-route-candidates/rehearsals/bitnami-minio-provisioning/rehearsal-receipt.yaml;data/hook-route-candidates/rehearsals/bitnami-minio-provisioning/render-summary.json;data/hook-route-candidates/rehearsals/bitnami-minio-provisioning/hook-job.yaml"
    },
    {
      "chart": "bitnami/thanos",
      "version": "17.3.1",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade",
      "source_disposition": "recipe-needed",
      "disposition": "todo",
      "route_name": "explicit-managed-action",
      "default_route": "explicit-managed-action",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "vendored object store and credentials when enabled",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "none",
      "safe_as_automatic": false,
      "evidence_or_next_action": "create Thanos recipe; distinguish provisioning-off and provisioning-enabled bases; reuse MinIO provisioning receipt shape when the hook renders | none | data/hook-route-candidates/candidates.csv"
    },
    {
      "chart": "datadog/datadog",
      "version": "3.214.0",
      "base_or_variant": "",
      "quirk_class": "per-target-hook",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "per-target",
      "disposition": "per-target",
      "route_name": "target-class-preflight-and-upgrade-action",
      "default_route": "target-class-preflight-and-upgrade-action",
      "alternatives": [
        {
          "route": "per-target-scope-split",
          "requirement": "named target classes, each with its own route decision"
        }
      ],
      "route_requirements": "GKE Autopilot target class plus migration state",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "none",
      "safe_as_automatic": false,
      "evidence_or_next_action": "split normal and GKE Autopilot target scopes; route allowlist hooks as preflight and migration Job as lifecycle action with receipt | none | data/hook-route-candidates/candidates.csv"
    },
    {
      "chart": "fluent/fluent-bit",
      "version": "0.57.6",
      "base_or_variant": "",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "preserve-cleanup-policy",
      "default_route": "preserve-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/fluent-fluent-bit/default/latest.yaml"
    },
    {
      "chart": "fluent/fluent-bit",
      "version": "0.57.6",
      "base_or_variant": "",
      "quirk_class": "hook-test",
      "hook_phases": "test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "explicit-test-check",
      "default_route": "explicit-test-check",
      "alternatives": [
        {
          "route": "ci-check",
          "requirement": "run the test as a CI or post-apply check instead of a Helm test hook"
        },
        {
          "route": "skip-test",
          "requirement": "accept that the test is not run automatically"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/fluent-fluent-bit/default/latest.yaml"
    },
    {
      "chart": "fluent/fluent-bit",
      "version": "0.57.6",
      "base_or_variant": "default",
      "quirk_class": "hook-test",
      "hook_phases": "test",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "explicit-test-check",
      "default_route": "explicit-test-check",
      "alternatives": [
        {
          "route": "ci-check",
          "requirement": "run the test as a CI or post-apply check instead of a Helm test hook"
        },
        {
          "route": "skip-test",
          "requirement": "accept that the test is not run automatically"
        }
      ],
      "route_requirements": "Connectivity tests are checks against the installed target, not render-time behavior.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/fluent-fluent-bit/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/fluent/fluent-bit/0.57.6/helm-pain-report.yaml;runs/hook-lifecycle/fluent-fluent-bit/default/latest/receipt.yaml"
    },
    {
      "chart": "gatekeeper/gatekeeper",
      "version": "3.22.2",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-install, pre-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync",
      "default_route": "preflight-or-presync",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "CRD and admission-webhook prerequisites must be checked before apply.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/gatekeeper-gatekeeper/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/gatekeeper/gatekeeper/3.22.2/helm-pain-report.yaml;runs/hook-lifecycle/gatekeeper-gatekeeper/default/latest/receipt.yaml"
    },
    {
      "chart": "gatekeeper/gatekeeper",
      "version": "3.22.2",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "The pinned rendered CRD route must be recorded as a target-aware operation before stronger upgrade claims.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/gatekeeper-gatekeeper/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/gatekeeper/gatekeeper/3.22.2/helm-pain-report.yaml;runs/hook-lifecycle/gatekeeper-gatekeeper/default/latest/receipt.yaml"
    },
    {
      "chart": "gitlab/gitlab",
      "version": "10.0.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade",
      "source_disposition": "recipe-needed",
      "disposition": "todo",
      "route_name": "argocd-or-flux-lifecycle-hook",
      "default_route": "argocd-or-flux-lifecycle-hook",
      "alternatives": [
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "GitLab serious-chart prerequisites dominate; confirm supported base before routing",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "none",
      "safe_as_automatic": false,
      "evidence_or_next_action": "treat as a serious-chart review; choose a supported base; confirm whether the vendored hook renders; then write maintained route receipt or hook-inert fact | none | data/hook-route-candidates/candidates.csv"
    },
    {
      "chart": "k8s-dashboard/kubernetes-dashboard",
      "version": "7.14.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-upgrade, pre-upgrade",
      "source_disposition": "routed",
      "disposition": "routed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "none expected under default values; rendering under defaults unresolved; condition: if rendered",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "none",
      "safe_as_automatic": false,
      "evidence_or_next_action": "record hook-inert-under-default-values for the default base at recipe time; keep the route plan for postgres-mode bases | none (default base is hook-inert; no rehearsal needed for it) | data/hook-disposition/evidence/k8s-dashboard-kubernetes-dashboard/evidence.yaml;data/hook-disposition/evidence/k8s-dashboard-kubernetes-dashboard/hook-resources.yaml"
    },
    {
      "chart": "kedacore/keda",
      "version": "2.19.0",
      "base_or_variant": "no-crds",
      "quirk_class": "webhook-readiness",
      "hook_phases": "post-install, post-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "webhook-readiness-observation",
      "default_route": "webhook-readiness-observation",
      "alternatives": [
        {
          "route": "postsync-check-or-observation",
          "requirement": "a post-apply readiness check you run or observe"
        }
      ],
      "route_requirements": "The operator mounts kedaorg-certs as optional, starts certificate rotation, and creates the Secret used by the webhook and metrics API pods.",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-route-candidates/selected-routes/kedacore-keda-no-crds.yaml;recipes/kedacore/keda/2.19.0/variants/no-crds/variant.yaml;recipes/kedacore/keda/2.19.0/revisions/no-crds/r001/rendered/release-objects.yaml;runs/live-kind-parity/kedacore-keda-no-crds/receipt.yaml"
    },
    {
      "chart": "kong/kong",
      "version": "3.2.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-upgrade, pre-upgrade",
      "source_disposition": "routed",
      "disposition": "routed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "reachable database when not DB-less; values-conditional rendering",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "none",
      "safe_as_automatic": false,
      "evidence_or_next_action": "create the recipe with DB-less and postgres bases; rehearse the migration pair against a database | none (postgres-mode rehearsal needs a database and pullable images) | data/hook-disposition/evidence/kong-kong/evidence.yaml;data/hook-disposition/evidence/kong-kong/hook-resources.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "post-upgrade, pre-delete, test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "delete-cleanup-policy",
      "default_route": "delete-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "post-upgrade, pre-delete, test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "preserve-cleanup-policy",
      "default_route": "preserve-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-upgrade, pre-delete, test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "",
      "quirk_class": "hook-test",
      "hook_phases": "post-upgrade, pre-delete, test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "explicit-test-check",
      "default_route": "explicit-test-check",
      "alternatives": [
        {
          "route": "ci-check",
          "requirement": "run the test as a CI or post-apply check instead of a Helm test hook"
        },
        {
          "route": "skip-test",
          "requirement": "accept that the test is not run automatically"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "",
      "quirk_class": "hook-weight-ordering",
      "hook_phases": "post-upgrade, pre-delete, test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "preserve-ordering",
      "default_route": "preserve-ordering",
      "alternatives": [
        {
          "route": "argocd-sync-waves",
          "requirement": "a GitOps controller that maps hook weights to sync waves"
        },
        {
          "route": "apply-order",
          "requirement": "an apply step that preserves the documented order"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "",
      "quirk_class": "target-facts",
      "hook_phases": "post-upgrade, pre-delete, test",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "target-facts-or-preflight",
      "default_route": "target-facts-or-preflight",
      "alternatives": [
        {
          "route": "preflight-or-presync",
          "requirement": "a preflight step that establishes the fact before apply"
        },
        {
          "route": "refuse",
          "requirement": "supply the fact manually and accept no preflight"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "default",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "pre-delete",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "delete-cleanup-policy",
      "default_route": "delete-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "Webhook and APIService cleanup belongs to delete or rollback policy.",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/kyverno/kyverno/3.8.1/helm-pain-report.yaml;runs/hook-lifecycle/kyverno-kyverno/default/latest/receipt.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "post-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "Resource migration after upgrade must be recorded as an upgrade operation.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/kyverno/kyverno/3.8.1/helm-pain-report.yaml;runs/hook-lifecycle/kyverno-kyverno/default/latest/receipt.yaml"
    },
    {
      "chart": "kyverno/kyverno",
      "version": "3.8.1",
      "base_or_variant": "default",
      "quirk_class": "hook-test",
      "hook_phases": "test",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "explicit-test-check",
      "default_route": "explicit-test-check",
      "alternatives": [
        {
          "route": "ci-check",
          "requirement": "run the test as a CI or post-apply check instead of a Helm test hook"
        },
        {
          "route": "skip-test",
          "requirement": "accept that the test is not run automatically"
        }
      ],
      "route_requirements": "Test hooks become checks, not hidden install behavior.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/kyverno-kyverno/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/kyverno/kyverno/3.8.1/helm-pain-report.yaml;runs/hook-lifecycle/kyverno-kyverno/default/latest/receipt.yaml"
    },
    {
      "chart": "projectcalico/tigera-operator",
      "version": "v3.32.0",
      "base_or_variant": "default",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "pre-delete",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "explicit-delete-cleanup-action",
      "default_route": "explicit-delete-cleanup-action",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "Deleting this chart may require cleanup that depends on the cluster's current state. Run that cleanup as a separate, recorded step instead of assuming that deleting the rendered files is enough.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/projectcalico-tigera-operator/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/projectcalico/tigera-operator/v3.32.0/helm-pain-report.yaml;runs/hook-lifecycle/projectcalico-tigera-operator/default/latest/receipt.yaml;runs/live-helm-confighub-compare/projectcalico-tigera-operator-default/receipt.yaml;runs/public-preset-script/projectcalico-tigera-operator-default/latest/receipt.yaml"
    },
    {
      "chart": "projectcalico/tigera-operator",
      "version": "v3.32.0",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "crd-bootstrap",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync",
      "default_route": "preflight-or-presync",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "Before installing the rendered resources, the Tigera operator must create four operator.tigera.io CRDs so Kubernetes can accept the APIServer, Goldmane, Installation, and Whisker objects.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/projectcalico-tigera-operator/default/latest.yaml;data/hook-lifecycle/top100-hooks.csv;recipes/projectcalico/tigera-operator/v3.32.0/helm-pain-report.yaml;runs/hook-lifecycle/projectcalico-tigera-operator/default/latest/receipt.yaml;runs/live-helm-confighub-compare/projectcalico-tigera-operator-default/receipt.yaml;runs/public-preset-script/projectcalico-tigera-operator-default/latest/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "preserve-cleanup-policy",
      "default_route": "preserve-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "postsync-check-or-observation",
      "default_route": "postsync-check-or-observation",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "preflight-or-presync",
      "default_route": "preflight-or-presync",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "hook-weight-ordering",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "preserve-ordering",
      "default_route": "preserve-ordering",
      "alternatives": [
        {
          "route": "argocd-sync-waves",
          "requirement": "a GitOps controller that maps hook weights to sync waves"
        },
        {
          "route": "apply-order",
          "requirement": "an apply step that preserves the documented order"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "target-facts",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "target-facts-or-preflight",
      "default_route": "target-facts-or-preflight",
      "alternatives": [
        {
          "route": "preflight-or-presync",
          "requirement": "a preflight step that establishes the fact before apply"
        },
        {
          "route": "refuse",
          "requirement": "supply the fact manually and accept no preflight"
        }
      ],
      "route_requirements": "",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.0",
      "base_or_variant": "",
      "quirk_class": "webhook-readiness",
      "hook_phases": "post-install, post-upgrade, pre-install, pre-upgrade",
      "source_disposition": "observed",
      "disposition": "observed",
      "route_name": "webhook-readiness-observation",
      "default_route": "webhook-readiness-observation",
      "alternatives": [
        {
          "route": "postsync-check-or-observation",
          "requirement": "a post-apply readiness check you run or observe"
        }
      ],
      "route_requirements": "",
      "execution_mode": "target-owned",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipt-index.csv;data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "crd-install",
      "hook_phases": "pre-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync-crd-apply",
      "default_route": "preflight-or-presync-crd-apply",
      "alternatives": [
        {
          "route": "self-contained-crd-base",
          "requirement": "a preset config that renders the required CRDs as ordinary objects before the workloads"
        },
        {
          "route": "target-owned-crds",
          "requirement": "the cluster or an operator owns CRD install and upgrade out of band"
        },
        {
          "route": "refuse",
          "requirement": "use a no-crds base and install/upgrade the CRDs yourself"
        }
      ],
      "route_requirements": "The package applies the locked CRDs before the chart objects that use them.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preserve-cleanup-policy",
      "default_route": "preserve-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "The run removes both completed Jobs and their temporary RBAC objects.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "postsync-check-or-observation",
      "default_route": "postsync-check-or-observation",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "The package runs the chart's webhook patch Job after the webhook objects exist.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync",
      "default_route": "preflight-or-presync",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "The package runs the chart's certificate creation Job before applying the admission webhooks.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-upgrade, post-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "todo",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "The fresh-install receipt does not test the 85.3.3 to 86.1.0 upgrade.",
      "execution_mode": "not-yet-executable",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "not-run",
      "safe_as_automatic": false,
      "evidence_or_next_action": "Run the packaged route during an 85.3.3 to 86.1.0 upgrade and record the result."
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "hook-weight-ordering",
      "hook_phases": "pre-install, post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preserve-ordering",
      "default_route": "preserve-ordering",
      "alternatives": [
        {
          "route": "argocd-sync-waves",
          "requirement": "a GitOps controller that maps hook weights to sync waves"
        },
        {
          "route": "apply-order",
          "requirement": "an apply step that preserves the documented order"
        }
      ],
      "route_requirements": "The direct runner applies CRDs, creates the certificate, applies the workload, and patches the webhooks in that order.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "target-facts",
      "hook_phases": "pre-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "target-facts-or-preflight",
      "default_route": "target-facts-or-preflight",
      "alternatives": [
        {
          "route": "preflight-or-presync",
          "requirement": "a preflight step that establishes the fact before apply"
        },
        {
          "route": "refuse",
          "requirement": "supply the fact manually and accept no preflight"
        }
      ],
      "route_requirements": "The certificate Job creates the required admission Secret with ca, cert, and key.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "default",
      "quirk_class": "webhook-readiness",
      "hook_phases": "post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "webhook-readiness-observation",
      "default_route": "webhook-readiness-observation",
      "alternatives": [
        {
          "route": "postsync-check-or-observation",
          "requirement": "a post-apply readiness check you run or observe"
        }
      ],
      "route_requirements": "The run checks three CA bundles, the operator endpoint, a server dry-run, and six workloads.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/default/latest.yaml;runs/kps-lifecycle-route-proof/receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/default/r001/rendered/release-objects.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "crd-install",
      "hook_phases": "pre-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync-crd-apply",
      "default_route": "preflight-or-presync-crd-apply",
      "alternatives": [
        {
          "route": "self-contained-crd-base",
          "requirement": "a preset config that renders the required CRDs as ordinary objects before the workloads"
        },
        {
          "route": "target-owned-crds",
          "requirement": "the cluster or an operator owns CRD install and upgrade out of band"
        },
        {
          "route": "refuse",
          "requirement": "use a no-crds base and install/upgrade the CRDs yourself"
        }
      ],
      "route_requirements": "The no-crds render omits CRDs, so the package applies the locked CRDs before the workload.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "hook-delete-policy",
      "hook_phases": "post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preserve-cleanup-policy",
      "default_route": "preserve-cleanup-policy",
      "alternatives": [
        {
          "route": "delete-on-uninstall",
          "requirement": "accept deletion of the hook-managed object on uninstall"
        },
        {
          "route": "refuse",
          "requirement": "manage cleanup manually and keep the object"
        }
      ],
      "route_requirements": "The run removes both completed Jobs and their temporary RBAC objects.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "hook-phase",
      "hook_phases": "post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "postsync-check-or-observation",
      "default_route": "postsync-check-or-observation",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "The package runs the chart's webhook patch Job after the webhook objects exist.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preflight-or-presync",
      "default_route": "preflight-or-presync",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "The package runs the chart's certificate creation Job before applying the admission webhooks.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "hook-phase",
      "hook_phases": "pre-upgrade, post-upgrade",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "upgrade-action-with-receipt",
      "default_route": "upgrade-action-with-receipt",
      "alternatives": [
        {
          "route": "argocd-or-flux-lifecycle-hook",
          "requirement": "a GitOps controller (Argo CD/Flux) that runs sync hooks or sync waves"
        },
        {
          "route": "target-facts-or-preflight",
          "requirement": "the prerequisite supplied as a target fact or preflight before apply"
        },
        {
          "route": "refuse",
          "requirement": "accept that the catalog will not run this automatically and do it manually"
        }
      ],
      "route_requirements": "Argo CD and Flux upgraded the no-crds preset from 85.3.3 to 86.1.0, reran the four ordered stages, replaced both hook Jobs, and passed the runtime checks.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "hook-weight-ordering",
      "hook_phases": "pre-install, post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "preserve-ordering",
      "default_route": "preserve-ordering",
      "alternatives": [
        {
          "route": "argocd-sync-waves",
          "requirement": "a GitOps controller that maps hook weights to sync waves"
        },
        {
          "route": "apply-order",
          "requirement": "an apply step that preserves the documented order"
        }
      ],
      "route_requirements": "The direct runner applies CRDs, creates the certificate, applies the workload, and patches the webhooks in that order.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "target-facts",
      "hook_phases": "pre-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "target-facts-or-preflight",
      "default_route": "target-facts-or-preflight",
      "alternatives": [
        {
          "route": "preflight-or-presync",
          "requirement": "a preflight step that establishes the fact before apply"
        },
        {
          "route": "refuse",
          "requirement": "supply the fact manually and accept no preflight"
        }
      ],
      "route_requirements": "The certificate Job creates the required admission Secret with ca, cert, and key.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "85.3.3",
      "base_or_variant": "no-crds",
      "quirk_class": "webhook-readiness",
      "hook_phases": "post-install",
      "source_disposition": "selected-route-receipt",
      "disposition": "observed",
      "route_name": "webhook-readiness-observation",
      "default_route": "webhook-readiness-observation",
      "alternatives": [
        {
          "route": "postsync-check-or-observation",
          "requirement": "a post-apply readiness check you run or observe"
        }
      ],
      "route_requirements": "The run checks three CA bundles, the operator endpoint, a server dry-run, and six workloads.",
      "execution_mode": "user-executes",
      "human_offramp": "recipe-base-or-values",
      "agent_offramp": "routes-json",
      "offramp": {
        "human": "recipe-base-or-values",
        "agent": "routes-json"
      },
      "live_status": "observed",
      "safe_as_automatic": false,
      "evidence_or_next_action": "data/hook-lifecycle/receipts/prometheus-community-kube-prometheus-stack/no-crds/latest.yaml;runs/kps-lifecycle-route-proof/no-crds-receipt.yaml;packages/prometheus-community/kube-prometheus-stack/85.3.3/prerequisites/kube-prometheus-stack-lifecycle/generation-receipt.yaml;recipes/prometheus-community/kube-prometheus-stack/85.3.3/revisions/no-crds/r001/rendered/release-objects.yaml;runs/kps-gitops-lifecycle-proof/receipt.yaml"
    }
  ]
}
