{
  "kind": "KindParityDecisions",
  "unofficial": true,
  "description": "Product-readable decisions for the committed NON-PASS two-cluster kind-parity rows. Classifies each watch/blocked row by residue, who owns the fix, and whether the chart/base is usable today. Read-only over committed evidence. Generated by scripts/generate-kind-parity-decisions.mjs; do not hand-edit.",
  "source": "data/live-kind-parity/summary.csv",
  "residue_categories": [
    "target-prerequisite-crds",
    "target-prerequisite-secret",
    "target-prerequisite-namespace",
    "hook-lifecycle",
    "render-input",
    "target-runtime",
    "remote-image",
    "readiness",
    "model-gap-target-fact",
    "model-gap-render",
    "capability-profile-diff"
  ],
  "note": "A watch row is known evidence with a named residue — not a pass and not a failure. A blocked row did not reach parity; the decision names why and who owns the fix.",
  "decisions": [
    {
      "chart": "autoscaler/cluster-autoscaler",
      "version": "9.57.0",
      "base": "controller-default-reviewed",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "model-gap-target-fact",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not something you can supply: the harness has no value generator for a required target fact, so the run blocked before parity. Catalog/model work, not a user action.",
      "next_action": "Catalog work: add the missing target-fact value generator, then rerun.",
      "reason": "no target fact value generator for autoDiscovery.clusterName",
      "receipt": "runs/live-kind-parity/autoscaler-cluster-autoscaler-controller-default-reviewed/receipt.yaml"
    },
    {
      "chart": "autoscaler/cluster-autoscaler",
      "version": "9.57.0",
      "base": "default",
      "result": "watch",
      "semantic_parity": "pass",
      "residue_category": "render-input",
      "blocker_owner": "user",
      "usable_today": "yes, after supplying values",
      "user_decision": "Usable once you supply the required Helm values. The current receipt is blocked on missing inputs, so it does not by itself prove full parity.",
      "next_action": "Provide the required values in the base/variant, then the row can move to pass.",
      "reason": "render-input: required Helm values missing (parity passed)",
      "receipt": "runs/live-kind-parity/autoscaler-cluster-autoscaler-default/receipt.yaml"
    },
    {
      "chart": "aws-ebs-csi-driver/aws-ebs-csi-driver",
      "version": "2.60.1",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=2; extra=v1|Namespace||default; objects=apps/v1|Deployment|default|ebs-csi-controller; storage.k8s.io/v1|CSIDriver||ebs.csi.aws.com",
      "receipt": "runs/live-kind-parity/aws-ebs-csi-driver-aws-ebs-csi-driver-default/receipt.yaml"
    },
    {
      "chart": "bitnami/apache",
      "version": "11.4.29",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-apache-default/receipt.yaml"
    },
    {
      "chart": "bitnami/apache",
      "version": "11.4.29",
      "base": "legacy",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=1; extra=v1|Namespace||default; objects=apps/v1|Deployment|default|apache; runtime also fails to pull docker.io/bitnami/apache:2.4.65-debian-12-r2",
      "receipt": "runs/live-kind-parity/bitnami-apache-legacy/receipt.yaml"
    },
    {
      "chart": "bitnami/contour",
      "version": "21.1.4",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "hook-lifecycle",
      "blocker_owner": "catalog",
      "usable_today": "no — needs lifecycle route",
      "user_decision": "Not usable as a pure config-only apply yet: the chart relies on a Helm hook or hook-produced object, so the catalog must route that lifecycle action explicitly.",
      "next_action": "Catalog work: add a lifecycle route for the hook action or provide the hook-produced object as a target prerequisite, then rerun.",
      "reason": "helm-hook: pre-install certificate generation failed (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-contour-default/receipt.yaml"
    },
    {
      "chart": "bitnami/contour",
      "version": "21.1.4",
      "base": "no-crds",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=5 extra=1 diffs=0; missing=apiextensions.k8s.io/v1|CustomResourceDefinition||contourconfigurations.projectcontour.io; apiextensions.k8s.io/v1|CustomResourceDefinition||contourdeployments.projectcontour.io; apiextensions.k8s.io/v1|CustomResourceDefinition||extensionservices.projectcontour.io; apiextensions.k8s.io/v1|CustomResourceDefinition||httpproxies.projectcontour.io; apiextensions.k8s.io/v1|CustomResourceDefinition||tlscertificatedelegations.projectcontour.io; extra=v1|Namespace||default; runtime also fails to pull docker.io/bitnami/contour:1.32.1-debian-12-r0; lifecycle also hits pre-install certificate-generation hook failure; runtime also requires hook/target Secret(s): envoycert",
      "receipt": "runs/live-kind-parity/bitnami-contour-no-crds/receipt.yaml"
    },
    {
      "chart": "bitnami/elasticsearch",
      "version": "22.1.6",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-elasticsearch-default/receipt.yaml"
    },
    {
      "chart": "bitnami/elasticsearch",
      "version": "22.1.6",
      "base": "ha",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-elasticsearch-ha/receipt.yaml"
    },
    {
      "chart": "bitnami/elasticsearch",
      "version": "22.1.6",
      "base": "legacy",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=4; extra=v1|Namespace||default; objects=apps/v1|StatefulSet|default|elasticsearch-coordinating; apps/v1|StatefulSet|default|elasticsearch-data; apps/v1|StatefulSet|default|elasticsearch-ingest; apps/v1|StatefulSet|default|elasticsearch-master; runtime also fails to pull docker.io/bitnami/os-shell:12-debian-12-r50",
      "receipt": "runs/live-kind-parity/bitnami-elasticsearch-legacy/receipt.yaml"
    },
    {
      "chart": "bitnami/opensearch",
      "version": "2.0.10",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "capability-profile-diff",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: live Helm rendered fields that the packaged installer render did not, because the live cluster capability profile changed the object set. Catalog/model work.",
      "next_action": "Catalog work: model the required Kubernetes capability/profile field, update the base or semantic contract, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=4; extra=v1|Namespace||default; objects=v1|Service|default|opensearch-coordinating-hl; v1|Service|default|opensearch-data-hl; v1|Service|default|opensearch-ingest-hl; v1|Service|default|opensearch-master-hl; live Helm includes Service spec.trafficDistribution=PreferClose for this cluster capability profile; runtime also fails to pull docker.io/bitnami/os-shell:12-debian-12-r51",
      "receipt": "runs/live-kind-parity/bitnami-opensearch-default/receipt.yaml"
    },
    {
      "chart": "bitnami/opensearch",
      "version": "2.0.10",
      "base": "ha",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "capability-profile-diff",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: live Helm rendered fields that the packaged installer render did not, because the live cluster capability profile changed the object set. Catalog/model work.",
      "next_action": "Catalog work: model the required Kubernetes capability/profile field, update the base or semantic contract, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=8; extra=v1|Namespace||default; objects=apps/v1|StatefulSet|default|opensearch-coordinating; apps/v1|StatefulSet|default|opensearch-data; apps/v1|StatefulSet|default|opensearch-ingest; apps/v1|StatefulSet|default|opensearch-master; v1|Service|default|opensearch-coordinating-hl; v1|Service|default|opensearch-data-hl; live Helm includes Service spec.trafficDistribution=PreferClose for this cluster capability profile; runtime also fails to pull docker.io/bitnami/os-shell:12-debian-12-r51",
      "receipt": "runs/live-kind-parity/bitnami-opensearch-ha/receipt.yaml"
    },
    {
      "chart": "bitnami/opensearch",
      "version": "2.0.10",
      "base": "legacy",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "capability-profile-diff",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: live Helm rendered fields that the packaged installer render did not, because the live cluster capability profile changed the object set. Catalog/model work.",
      "next_action": "Catalog work: model the required Kubernetes capability/profile field, update the base or semantic contract, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=8; extra=v1|Namespace||default; objects=apps/v1|StatefulSet|default|opensearch-coordinating; apps/v1|StatefulSet|default|opensearch-data; apps/v1|StatefulSet|default|opensearch-ingest; apps/v1|StatefulSet|default|opensearch-master; v1|Service|default|opensearch-coordinating-hl; v1|Service|default|opensearch-data-hl; live Helm includes Service spec.trafficDistribution=PreferClose for this cluster capability profile; runtime also fails to pull docker.io/bitnami/os-shell:12-debian-12-r51",
      "receipt": "runs/live-kind-parity/bitnami-opensearch-legacy/receipt.yaml"
    },
    {
      "chart": "bitnami/phpmyadmin",
      "version": "20.0.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-phpmyadmin-default/receipt.yaml"
    },
    {
      "chart": "bitnami/phpmyadmin",
      "version": "20.0.0",
      "base": "legacy",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=1; extra=v1|Namespace||default; objects=apps/v1|Deployment|default|phpmyadmin; runtime also fails to pull docker.io/bitnami/phpmyadmin:5.2.2-debian-12-r22",
      "receipt": "runs/live-kind-parity/bitnami-phpmyadmin-legacy/receipt.yaml"
    },
    {
      "chart": "bitnami/spark",
      "version": "10.0.3",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-spark-default/receipt.yaml"
    },
    {
      "chart": "bitnami/spark",
      "version": "10.0.3",
      "base": "ha",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-spark-ha/receipt.yaml"
    },
    {
      "chart": "bitnami/spark",
      "version": "10.0.3",
      "base": "legacy",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=2; extra=v1|Namespace||default; objects=apps/v1|StatefulSet|default|spark-master; apps/v1|StatefulSet|default|spark-worker; runtime also fails to pull docker.io/bitnami/spark:4.0.0-debian-12-r20",
      "receipt": "runs/live-kind-parity/bitnami-spark-legacy/receipt.yaml"
    },
    {
      "chart": "bitnami/zookeeper",
      "version": "13.8.7",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-zookeeper-default/receipt.yaml"
    },
    {
      "chart": "bitnami/zookeeper",
      "version": "13.8.7",
      "base": "ha",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/bitnami-zookeeper-ha/receipt.yaml"
    },
    {
      "chart": "bitnami/zookeeper",
      "version": "13.8.7",
      "base": "legacy",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=1; extra=v1|Namespace||default; objects=apps/v1|StatefulSet|default|zookeeper; runtime also fails to pull docker.io/bitnami/zookeeper:3.9.3-debian-12-r21",
      "receipt": "runs/live-kind-parity/bitnami-zookeeper-legacy/receipt.yaml"
    },
    {
      "chart": "dex/dex",
      "version": "0.24.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "target-runtime: pod crash loop (parity passed)",
      "receipt": "runs/live-kind-parity/dex-dex-default/receipt.yaml"
    },
    {
      "chart": "elastic/filebeat",
      "version": "8.5.1",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-prerequisite-secret",
      "blocker_owner": "user",
      "usable_today": "yes, after staging a Secret",
      "user_decision": "Usable once you stage the required Secret on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the named Secret as a target fact, then the row can move to pass.",
      "reason": "target-prerequisite: required Secret missing (parity passed)",
      "receipt": "runs/live-kind-parity/elastic-filebeat-default/receipt.yaml"
    },
    {
      "chart": "elastic/filebeat",
      "version": "8.5.1",
      "base": "node-or-cluster-collector",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "helm-runtime: upstream not ready (parity passed)",
      "receipt": "runs/live-kind-parity/elastic-filebeat-node-or-cluster-collector/receipt.yaml"
    },
    {
      "chart": "elastic/kibana",
      "version": "8.5.1",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "helm-runtime: upstream not ready (parity passed)",
      "receipt": "runs/live-kind-parity/elastic-kibana-default/receipt.yaml"
    },
    {
      "chart": "elastic/metricbeat",
      "version": "8.5.1",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-prerequisite-secret",
      "blocker_owner": "user",
      "usable_today": "yes, after staging a Secret",
      "user_decision": "Usable once you stage the required Secret on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the named Secret as a target fact, then the row can move to pass.",
      "reason": "target-prerequisite: required Secret missing (parity passed)",
      "receipt": "runs/live-kind-parity/elastic-metricbeat-default/receipt.yaml"
    },
    {
      "chart": "gitlab/gitlab-runner",
      "version": "0.89.0",
      "base": "default",
      "result": "watch",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "helm-runtime: upstream not ready (parity passed)",
      "receipt": "runs/live-kind-parity/gitlab-gitlab-runner-default/receipt.yaml"
    },
    {
      "chart": "grafana/pyroscope",
      "version": "2.0.2",
      "base": "ha",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=2 diffs=0; extra=apiextensions.k8s.io/v1|CustomResourceDefinition||podlogs.monitoring.grafana.com; v1|Namespace||default",
      "receipt": "runs/live-kind-parity/grafana-pyroscope-ha/receipt.yaml"
    },
    {
      "chart": "hashicorp/terraform",
      "version": "1.1.2",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=2 diffs=0; extra=apiextensions.k8s.io/v1|CustomResourceDefinition||workspaces.app.terraform.io; v1|Namespace||default; runtime also requires hook/target Secret(s): terraformrc, workspacesecrets",
      "receipt": "runs/live-kind-parity/hashicorp-terraform-default/receipt.yaml"
    },
    {
      "chart": "hashicorp/terraform",
      "version": "1.1.2",
      "base": "no-crds",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-prerequisite-secret",
      "blocker_owner": "user",
      "usable_today": "yes, after staging a Secret",
      "user_decision": "Usable once you stage the required Secret on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the named Secret as a target fact, then the row can move to pass.",
      "reason": "target-prerequisite: required Secret missing (parity passed)",
      "receipt": "runs/live-kind-parity/hashicorp-terraform-no-crds/receipt.yaml"
    },
    {
      "chart": "istio/gateway",
      "version": "1.30.0",
      "base": "controller-default-reviewed",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/istio-gateway-controller-default-reviewed/receipt.yaml"
    },
    {
      "chart": "istio/gateway",
      "version": "1.30.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "remote-image",
      "blocker_owner": "catalog or image publisher",
      "usable_today": "watch — objects match, image unavailable",
      "user_decision": "The rendered config matches regular Helm (semantic parity passed), but the workload cannot start because a referenced image is unavailable from the registry. This is an image retention/base refresh issue, not a Helm-vs-installer parity defect.",
      "next_action": "Resolve the image by digest, override to a maintained image, or refresh the catalog base with a pullable image, then rerun.",
      "reason": "remote-image: image pull failed or pinned image is unavailable (parity passed)",
      "receipt": "runs/live-kind-parity/istio-gateway-default/receipt.yaml"
    },
    {
      "chart": "istio/istiod",
      "version": "1.30.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-prerequisite-namespace",
      "blocker_owner": "user",
      "usable_today": "yes, after creating the Namespace",
      "user_decision": "Usable once you create the required Namespace on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Declare and stage the required Namespace as a target fact, then the row can move to pass.",
      "reason": "target-prerequisite: required Namespace missing (parity passed)",
      "receipt": "runs/live-kind-parity/istio-istiod-default/receipt.yaml"
    },
    {
      "chart": "jaegertracing/jaeger-operator",
      "version": "2.57.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "target-prerequisite-crds",
      "blocker_owner": "user",
      "usable_today": "yes, after staging CRDs",
      "user_decision": "Usable once you stage the required CRDs on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the chart's CRDs as target facts (or pick a CRD-rendering base), then the row can move to pass.",
      "reason": "target-prerequisite: cert-manager CRDs missing",
      "receipt": "runs/live-kind-parity/jaegertracing-jaeger-operator-default/receipt.yaml"
    },
    {
      "chart": "jaegertracing/jaeger-operator",
      "version": "2.57.0",
      "base": "no-crds",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "target-prerequisite-crds",
      "blocker_owner": "user",
      "usable_today": "yes, after staging CRDs",
      "user_decision": "Usable once you stage the required CRDs on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the chart's CRDs as target facts (or pick a CRD-rendering base), then the row can move to pass.",
      "reason": "target-prerequisite: cert-manager CRDs missing",
      "receipt": "runs/live-kind-parity/jaegertracing-jaeger-operator-no-crds/receipt.yaml"
    },
    {
      "chart": "kyverno/kyverno-policies",
      "version": "3.8.0",
      "base": "default",
      "result": "watch",
      "semantic_parity": "pass",
      "residue_category": "readiness",
      "blocker_owner": "needs readiness review",
      "usable_today": "watch — objects match, readiness unconfirmed",
      "user_decision": "Objects match regular Helm (semantic parity passed); workload readiness on the target is not yet confirmed.",
      "next_action": "Confirm workload readiness on the target and record the result.",
      "reason": "watch: object parity passed; readiness needs review",
      "receipt": "runs/live-kind-parity/kyverno-kyverno-policies-default/receipt.yaml"
    },
    {
      "chart": "nats/nack",
      "version": "0.34.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=7 diffs=0; extra=apiextensions.k8s.io/v1|CustomResourceDefinition||accounts.jetstream.nats.io; apiextensions.k8s.io/v1|CustomResourceDefinition||consumers.jetstream.nats.io; apiextensions.k8s.io/v1|CustomResourceDefinition||keyvalues.jetstream.nats.io; apiextensions.k8s.io/v1|CustomResourceDefinition||objectstores.jetstream.nats.io; apiextensions.k8s.io/v1|CustomResourceDefinition||streams.jetstream.nats.io; apiextensions.k8s.io/v1|CustomResourceDefinition||streamtemplates.jetstream.nats.io",
      "receipt": "runs/live-kind-parity/nats-nack-default/receipt.yaml"
    },
    {
      "chart": "nats/nats",
      "version": "2.14.0",
      "base": "ha",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=1 diffs=3; extra=v1|Namespace||default; objects=apps/v1|StatefulSet||nats; v1|ConfigMap||nats-config; v1|Service||nats-headless",
      "receipt": "runs/live-kind-parity/nats-nats-ha/receipt.yaml"
    },
    {
      "chart": "nats/surveyor",
      "version": "0.20.9",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "target-runtime: pod crash loop (parity passed)",
      "receipt": "runs/live-kind-parity/nats-surveyor-default/receipt.yaml"
    },
    {
      "chart": "nats/surveyor",
      "version": "0.20.9",
      "base": "default-reviewed",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "helm-runtime: upstream not ready (parity passed)",
      "receipt": "runs/live-kind-parity/nats-surveyor-default-reviewed/receipt.yaml"
    },
    {
      "chart": "nfs-subdir-external-provisioner/nfs-subdir-external-provisioner",
      "version": "4.0.18",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "render-input",
      "blocker_owner": "user",
      "usable_today": "yes, after supplying values",
      "user_decision": "Usable once you supply the required Helm values. The current receipt is blocked on missing inputs, so it does not by itself prove full parity.",
      "next_action": "Provide the required values in the base/variant, then the row can move to pass.",
      "reason": "render-input: required Helm values missing",
      "receipt": "runs/live-kind-parity/nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-default/receipt.yaml"
    },
    {
      "chart": "opencost/opencost",
      "version": "2.5.21",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-runtime",
      "blocker_owner": "needs runtime review",
      "usable_today": "watch — config correct, runtime unconfirmed",
      "user_decision": "The rendered config is correct (semantic parity passed), but the workload did not converge on the test target. This is a runtime/target residue to review, not a parity defect.",
      "next_action": "Review the runtime residue (crash loop / readiness) on the target and record a runtime-review support artifact.",
      "reason": "target-runtime: pod crash loop (parity passed)",
      "receipt": "runs/live-kind-parity/opencost-opencost-default/receipt.yaml"
    },
    {
      "chart": "prometheus-community/kube-prometheus-stack",
      "version": "86.1.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=11 diffs=0; extra=apiextensions.k8s.io/v1|CustomResourceDefinition||alertmanagerconfigs.monitoring.coreos.com; apiextensions.k8s.io/v1|CustomResourceDefinition||alertmanagers.monitoring.coreos.com; apiextensions.k8s.io/v1|CustomResourceDefinition||podmonitors.monitoring.coreos.com; apiextensions.k8s.io/v1|CustomResourceDefinition||probes.monitoring.coreos.com; apiextensions.k8s.io/v1|CustomResourceDefinition||prometheusagents.monitoring.coreos.com; apiextensions.k8s.io/v1|CustomResourceDefinition||prometheuses.monitoring.coreos.com",
      "receipt": "runs/live-kind-parity/prometheus-community-kube-prometheus-stack-default/receipt.yaml"
    },
    {
      "chart": "prometheus-community/prometheus-adapter",
      "version": "5.3.0",
      "base": "cluster-metrics-readonly",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "target-prerequisite-crds",
      "blocker_owner": "user",
      "usable_today": "yes, after staging CRDs",
      "user_decision": "Usable once you stage the required CRDs on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the chart's CRDs as target facts (or pick a CRD-rendering base), then the row can move to pass.",
      "reason": "target-prerequisite: CRDs missing",
      "receipt": "runs/live-kind-parity/prometheus-community-prometheus-adapter-cluster-metrics-readonly/receipt.yaml"
    },
    {
      "chart": "prometheus-community/prometheus-adapter",
      "version": "5.3.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "target-prerequisite-crds",
      "blocker_owner": "user",
      "usable_today": "yes, after staging CRDs",
      "user_decision": "Usable once you stage the required CRDs on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the chart's CRDs as target facts (or pick a CRD-rendering base), then the row can move to pass.",
      "reason": "target-prerequisite: CRDs missing",
      "receipt": "runs/live-kind-parity/prometheus-community-prometheus-adapter-default/receipt.yaml"
    },
    {
      "chart": "rook-release/rook-ceph-cluster",
      "version": "v1.19.5",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "pass",
      "residue_category": "target-prerequisite-namespace",
      "blocker_owner": "user",
      "usable_today": "yes, after creating the Namespace",
      "user_decision": "Usable once you create the required Namespace on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Declare and stage the required Namespace as a target fact, then the row can move to pass.",
      "reason": "target-prerequisite: required Namespace missing (parity passed)",
      "receipt": "runs/live-kind-parity/rook-release-rook-ceph-cluster-default/receipt.yaml"
    },
    {
      "chart": "traefik/traefik",
      "version": "40.2.0",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "defect",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "semantic object parity issue: missing=0 extra=26 diffs=0; extra=apiextensions.k8s.io/v1|CustomResourceDefinition||accesscontrolpolicies.hub.traefik.io; apiextensions.k8s.io/v1|CustomResourceDefinition||aiservices.hub.traefik.io; apiextensions.k8s.io/v1|CustomResourceDefinition||apiauths.hub.traefik.io; apiextensions.k8s.io/v1|CustomResourceDefinition||apibundles.hub.traefik.io; apiextensions.k8s.io/v1|CustomResourceDefinition||apicatalogitems.hub.traefik.io; apiextensions.k8s.io/v1|CustomResourceDefinition||apiplans.hub.traefik.io",
      "receipt": "runs/live-kind-parity/traefik-traefik-default/receipt.yaml"
    },
    {
      "chart": "velero/velero",
      "version": "12.0.1",
      "base": "default",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "model-gap-render",
      "blocker_owner": "catalog",
      "usable_today": "no — needs catalog work",
      "user_decision": "Not usable on this base yet, and not a user action: the installer package's rendered object model does not match the live Helm result. Catalog/model work.",
      "next_action": "Catalog work: update the base, render context, target facts, or semantic contract so the installer package matches the live Helm result, then rerun.",
      "reason": "manifest apply failed: Error from server (Invalid): BackupStorageLocation.velero.io \"default\" is invalid: [spec.credential: Invalid value: \"null\": spec.credential in body must be of type object: \"null\", spec.provider: Invalid value: \"null\": spec.provider in body must be of type string: \"null\"]\nError from server (Invalid): VolumeSnapshotLocation.velero.io \"default\" is invalid: [spec.credential: Invalid value: \"null\": spec.credential in body must be of type object: \"null\", spec.provider: Invalid value: \"null\": spec.provider in body must be of type string: \"null\"]",
      "receipt": "runs/live-kind-parity/velero-velero-default/receipt.yaml"
    },
    {
      "chart": "velero/velero",
      "version": "12.0.1",
      "base": "no-crds",
      "result": "blocked",
      "semantic_parity": "unknown",
      "residue_category": "target-prerequisite-crds",
      "blocker_owner": "user",
      "usable_today": "yes, after staging CRDs",
      "user_decision": "Usable once you stage the required CRDs on the target and rerun the check. This row is blocked by a missing target prerequisite, so the current receipt does not by itself prove full parity.",
      "next_action": "Stage the chart's CRDs as target facts (or pick a CRD-rendering base), then the row can move to pass.",
      "reason": "target-prerequisite: CRDs missing",
      "receipt": "runs/live-kind-parity/velero-velero-no-crds/receipt.yaml"
    }
  ]
}
