# Kind-Parity Decisions

**UNOFFICIAL/EXPERIMENTAL.** Generated by
`scripts/generate-kind-parity-decisions.mjs`. Do not hand-edit. Regenerate with
`npm run kind-parity:decisions`.

This classifies the committed **non-pass** two-cluster kind-parity (K-lane) rows
into product-readable decisions: for each `watch`/`blocked` row, what it means
for a Helm user, **who has to fix it** (you vs the catalog), whether the
chart/base is **usable today**, and the exact next action. It reads the
committed receipts, so generic blocked rows get a real reason.

Source: [data/live-kind-parity/summary.csv](../live-kind-parity/summary.md) (read-only). Forms:
[decisions.csv](./decisions.csv), [decisions.json](./decisions.json).

## What watch and blocked mean

- **watch** — known evidence with a named residue. Semantic parity passed (the
  rendered objects match regular Helm); a target/runtime/readiness condition
  still needs review. **Not a pass, not a failure.**
- **blocked** — the run did not reach parity. The decision names why and who
  owns the fix (often the catalog, not the user).

## This batch

49 non-pass rows: 3 watch, 46 blocked.
12 are resolved by the **user** (stage a prerequisite or supply
values); 19 need **catalog/model** work; the rest need a runtime or
readiness review.

| Residue category | Rows |
| --- | ---: |
| `model-gap-render` | 14 |
| `remote-image` | 10 |
| `target-runtime` | 7 |
| `target-prerequisite-crds` | 5 |
| `capability-profile-diff` | 3 |
| `target-prerequisite-secret` | 3 |
| `render-input` | 2 |
| `target-prerequisite-namespace` | 2 |
| `hook-lifecycle` | 1 |
| `model-gap-target-fact` | 1 |
| `readiness` | 1 |

| Who fixes it | Rows |
| --- | ---: |
| `catalog` | 19 |
| `user` | 12 |
| `catalog or image publisher` | 10 |
| `needs runtime review` | 7 |
| `needs readiness review` | 1 |

## Rows

| Chart | Base | Result | Residue | Who fixes it | Usable today |
| --- | --- | --- | --- | --- | --- |
| autoscaler/cluster-autoscaler@9.57.0 | controller-default-reviewed | blocked | model-gap-target-fact | catalog | no — needs catalog work |
| autoscaler/cluster-autoscaler@9.57.0 | default | watch | render-input | user | yes, after supplying values |
| aws-ebs-csi-driver/aws-ebs-csi-driver@2.60.1 | default | blocked | model-gap-render | catalog | no — needs catalog work |
| bitnami/apache@11.4.29 | default | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/apache@11.4.29 | legacy | blocked | model-gap-render | catalog | no — needs catalog work |
| bitnami/contour@21.1.4 | default | blocked | hook-lifecycle | catalog | no — needs lifecycle route |
| bitnami/contour@21.1.4 | no-crds | blocked | model-gap-render | catalog | no — needs catalog work |
| bitnami/elasticsearch@22.1.6 | default | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/elasticsearch@22.1.6 | ha | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/elasticsearch@22.1.6 | legacy | blocked | model-gap-render | catalog | no — needs catalog work |
| bitnami/opensearch@2.0.10 | default | blocked | capability-profile-diff | catalog | no — needs catalog work |
| bitnami/opensearch@2.0.10 | ha | blocked | capability-profile-diff | catalog | no — needs catalog work |
| bitnami/opensearch@2.0.10 | legacy | blocked | capability-profile-diff | catalog | no — needs catalog work |
| bitnami/phpmyadmin@20.0.0 | default | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/phpmyadmin@20.0.0 | legacy | blocked | model-gap-render | catalog | no — needs catalog work |
| bitnami/spark@10.0.3 | default | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/spark@10.0.3 | ha | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/spark@10.0.3 | legacy | blocked | model-gap-render | catalog | no — needs catalog work |
| bitnami/zookeeper@13.8.7 | default | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/zookeeper@13.8.7 | ha | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| bitnami/zookeeper@13.8.7 | legacy | blocked | model-gap-render | catalog | no — needs catalog work |
| dex/dex@0.24.0 | default | blocked | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| elastic/filebeat@8.5.1 | default | blocked | target-prerequisite-secret | user | yes, after staging a Secret |
| elastic/filebeat@8.5.1 | node-or-cluster-collector | blocked | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| elastic/kibana@8.5.1 | default | blocked | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| elastic/metricbeat@8.5.1 | default | blocked | target-prerequisite-secret | user | yes, after staging a Secret |
| gitlab/gitlab-runner@0.89.0 | default | watch | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| grafana/pyroscope@2.0.2 | ha | blocked | model-gap-render | catalog | no — needs catalog work |
| hashicorp/terraform@1.1.2 | default | blocked | model-gap-render | catalog | no — needs catalog work |
| hashicorp/terraform@1.1.2 | no-crds | blocked | target-prerequisite-secret | user | yes, after staging a Secret |
| istio/gateway@1.30.0 | controller-default-reviewed | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| istio/gateway@1.30.0 | default | blocked | remote-image | catalog or image publisher | watch — objects match, image unavailable |
| istio/istiod@1.30.0 | default | blocked | target-prerequisite-namespace | user | yes, after creating the Namespace |
| jaegertracing/jaeger-operator@2.57.0 | default | blocked | target-prerequisite-crds | user | yes, after staging CRDs |
| jaegertracing/jaeger-operator@2.57.0 | no-crds | blocked | target-prerequisite-crds | user | yes, after staging CRDs |
| kyverno/kyverno-policies@3.8.0 | default | watch | readiness | needs readiness review | watch — objects match, readiness unconfirmed |
| nats/nack@0.34.0 | default | blocked | model-gap-render | catalog | no — needs catalog work |
| nats/nats@2.14.0 | ha | blocked | model-gap-render | catalog | no — needs catalog work |
| nats/surveyor@0.20.9 | default | blocked | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| nats/surveyor@0.20.9 | default-reviewed | blocked | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| nfs-subdir-external-provisioner/nfs-subdir-external-provisioner@4.0.18 | default | blocked | render-input | user | yes, after supplying values |
| opencost/opencost@2.5.21 | default | blocked | target-runtime | needs runtime review | watch — config correct, runtime unconfirmed |
| prometheus-community/kube-prometheus-stack@86.1.0 | default | blocked | model-gap-render | catalog | no — needs catalog work |
| prometheus-community/prometheus-adapter@5.3.0 | cluster-metrics-readonly | blocked | target-prerequisite-crds | user | yes, after staging CRDs |
| prometheus-community/prometheus-adapter@5.3.0 | default | blocked | target-prerequisite-crds | user | yes, after staging CRDs |
| rook-release/rook-ceph-cluster@v1.19.5 | default | blocked | target-prerequisite-namespace | user | yes, after creating the Namespace |
| traefik/traefik@40.2.0 | default | blocked | model-gap-render | catalog | no — needs catalog work |
| velero/velero@12.0.1 | default | blocked | model-gap-render | catalog | no — needs catalog work |
| velero/velero@12.0.1 | no-crds | blocked | target-prerequisite-crds | user | yes, after staging CRDs |

## How To Read One Decision

`residue_category` is the kind of gap; `blocker_owner` is who acts (`user`,
`catalog`, or a review); `usable_today` is the honest answer for a Helm user;
`user_decision` is the plain explanation; `next_action` is the concrete step;
`reason` is the authoritative residue (read from the receipt for blocked rows);
`receipt` is the committed evidence.

## Boundaries

- Read-only classification of committed kind-parity evidence. No live run, no
  kind cluster, no `runs/` receipt edited, nothing written into
  `data/live-kind-parity/`.
- A decision never turns a `watch` into a `pass` or a `failure`; it explains
  the residue and routes the fix.
