# Model-Gap Workdown

**UNOFFICIAL/EXPERIMENTAL.** Generated by
`scripts/generate-model-gap-workdown.mjs`. Do not hand-edit. Regenerate with
`npm run model-gap-workdown`.

These are the non-pass rows that **will not pass by re-running** — the
recipe/base model has to change first. They are **catalog-owned**, the
complement of the target/user-prerequisite rows: this surface says what the
catalog must change, not what a user stages in the target. **It marks nothing
fixed** — it is a workdown queue, not evidence.

Source decisions: [kind-parity-decisions](../kind-parity-decisions/summary.md) and
[live-parity-decisions](../live-parity-decisions/summary.md); residue families in
[residue-families](../../docs/reference/residue-families.md). For the full
non-green triage (which rows are runs vs fixes vs decided) see
[matrix-completion-audit](../matrix-completion-audit/summary.md).

## 23 model-gap rows

| Model-gap kind | Rows |
| --- | ---: |
| `object-set-shape` | 7 |
| `crd-lifecycle` | 5 |
| `semantic-normalization` | 5 |
| `base-design` | 3 |
| `generated-fact` | 1 |
| `missing-crd` | 1 |
| `unknown` | 1 |

| Owner class | Rows |
| --- | ---: |
| `catalog-modeling` | 21 |
| `operator-review` | 1 |
| `recipe-generator` | 1 |

## Rows

| Chart | Base | Lane | Kind | Action | Owner | Sibling that passes |
| --- | --- | --- | --- | --- | --- | --- |
| autoscaler/cluster-autoscaler@9.57.0 | controller-default-reviewed | K | generated-fact | add-target-fact-generator | recipe-generator | none |
| aws-ebs-csi-driver/aws-ebs-csi-driver@2.60.1 | default | K | object-set-shape | add-semantic-normalization | catalog-modeling | none |
| bitnami/apache@11.4.29 | legacy | K | object-set-shape | add-semantic-normalization | catalog-modeling | none |
| bitnami/contour@21.1.4 | no-crds | K | missing-crd | design-new-base | catalog-modeling | legacy (K pass) |
| bitnami/elasticsearch@22.1.6 | legacy | K | object-set-shape | add-semantic-normalization | catalog-modeling | none |
| bitnami/opensearch@2.0.10 | default | K | semantic-normalization | add-semantic-normalization | catalog-modeling | none |
| bitnami/opensearch@2.0.10 | ha | K | semantic-normalization | add-semantic-normalization | catalog-modeling | none |
| bitnami/opensearch@2.0.10 | legacy | K | semantic-normalization | add-semantic-normalization | catalog-modeling | none |
| bitnami/phpmyadmin@20.0.0 | legacy | K | object-set-shape | add-semantic-normalization | catalog-modeling | none |
| bitnami/spark@10.0.3 | legacy | K | object-set-shape | add-semantic-normalization | catalog-modeling | none |
| bitnami/zookeeper@13.8.7 | legacy | K | object-set-shape | add-semantic-normalization | catalog-modeling | none |
| grafana/pyroscope@2.0.2 | ha | K | crd-lifecycle | split-lifecycle-objects | catalog-modeling | default (K pass); no-crds (K pass) |
| hashicorp/terraform@1.1.2 | default | K | crd-lifecycle | split-lifecycle-objects | catalog-modeling | none |
| nats/nack@0.34.0 | default | K | crd-lifecycle | split-lifecycle-objects | catalog-modeling | no-crds (K pass) |
| nats/nats@2.14.0 | ha | K | object-set-shape | add-semantic-normalization | catalog-modeling | default (K pass) |
| nfs-subdir-external-provisioner/nfs-subdir-external-provisioner@4.0.18 | default | G/P | unknown | operator-review | operator-review | none |
| prometheus-community/kube-prometheus-stack@86.1.0 | default | K | crd-lifecycle | split-lifecycle-objects | catalog-modeling | no-crds (K pass) |
| prometheus-community/prometheus-adapter@5.3.0 | cluster-metrics-readonly | G/P | semantic-normalization | add-semantic-normalization | catalog-modeling | apiservice-v1-capability (G/P pass) |
| prometheus-community/prometheus-adapter@5.3.0 | default | G/P | semantic-normalization | add-semantic-normalization | catalog-modeling | apiservice-v1-capability (G/P pass) |
| traefik/traefik@40.2.0 | default | K | crd-lifecycle | split-lifecycle-objects | catalog-modeling | no-crds (K pass) |
| velero/velero@12.0.1 | default | G/P | base-design | design-new-base | catalog-modeling | none |
| velero/velero@12.0.1 | default | K | base-design | design-new-base | catalog-modeling | none |
| velero/velero@12.0.1 | no-crds | G/P | base-design | design-new-base | catalog-modeling | none |

## Model-gap kinds

- **crd-lifecycle** — The installer-applied set includes CRD lifecycle objects that regular Helm's live set excludes. Split the CRD/lifecycle objects out (the no-crds sibling is usually the off-ramp).
- **missing-crd** — The base omits CRDs that the live Helm object set includes. Reconcile the rendered object set or design a base that matches.
- **object-set-shape** — The delivered object set differs from live Helm (extra/missing objects or field diffs). Normalize the render so the shapes match.
- **generated-fact** — A required target-fact value has no generator (e.g. autoDiscovery.clusterName). Add the value generator to the recipe.
- **semantic-normalization** — A rendered field/version differs from what the target serves (e.g. an APIService version or a deprecated field). Normalize or gate it; a sibling capability base may already pass.
- **base-design** — The base renders incomplete/invalid objects because required inputs are not modeled. Design a base that supplies or refuses them.
- **unknown** — Needs an operator/engineering review to classify the model gap.

## Boundaries

- Read-only projection over committed decisions, the matrix, and receipts. No
  live run, no kind cluster, no `runs/` edit, no row marked fixed or pass.
- A recommended action is the model change needed before the row can pass; the
  rerun command is what to run *after* the change, not now.
- The `sibling_base_passes` column names an existing off-ramp where one exists;
  it does not promote it.
