{
  "apiVersion": "catalog.confighub.com/v1alpha1",
  "kind": "CatalogListing",
  "listingVersion": "1",
  "generatedFrom": {
    "catalog": {
      "path": "data/base-variant-records/records.json",
      "sha256": "sha256:33e9d603109b517560aaa5e244acc3a825977fd5e417b436da07b63930ac2a78",
      "url": "https://github.com/confighub/helm-expt/blob/main/data/base-variant-records/records.json"
    },
    "record": {
      "path": "data/base-variant-records/records/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
      "sha256": "sha256:2cfa4e1a26375d433ec8996b66ff4de91a5485cf45646cb030a63b1dd377bd29",
      "url": "https://github.com/confighub/helm-expt/blob/main/data/base-variant-records/records/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
    },
    "recordKind": "BaseVariantRecord",
    "recordSchema": "schemas/base-variant-record.schema.json"
  },
  "identity": {
    "id": "kai-scheduler-kai-scheduler-v0-16-9-default",
    "url": "https://confighub.github.io/helm-expt/site/listings/kai-scheduler-kai-scheduler-v0-16-9-default.json",
    "name": "kai-scheduler/kai-scheduler",
    "format": "helm",
    "formatLabel": "Helm chart",
    "version": "v0.16.9",
    "base": "default",
    "page": "https://confighub.github.io/helm-expt/site/charts/kai-scheduler-kai-scheduler-v0-16-9.html"
  },
  "discovery": {
    "status": "not-classified",
    "roles": [],
    "boundary": "Discovery only: a role does not establish readiness, compatibility or support. An operator needs custom resources; an agent needs its destination. Read the listing prerequisites and coverage before composing."
  },
  "source": {
    "format": "helm",
    "name": "kai-scheduler/kai-scheduler",
    "version": "v0.16.9",
    "reference": "kai-scheduler/kai-scheduler@v0.16.9",
    "ociRef": "oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt/kai-scheduler-kai-scheduler:v0.16.9@sha256:7d360f97ada7c492e506acdd433c9212d21f5a6d26d8d8cbf1f0b68a268e94ab",
    "record": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
    "recordUrl": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
    "selection": {
      "name": "default",
      "kind": "catalog-preset",
      "provider": "Config Workshop",
      "record": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
      "recordUrl": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
    },
    "pin": {
      "digest": "sha256:f9eb3133dc4da7fe4703dd9f4fd02568044f7880192008e824eb2cc82e02894c",
      "role": "helm-variant-revision",
      "revision": "r001",
      "record": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml",
      "recordUrl": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml"
    },
    "fixedAtBuildTime": [
      "chart=kai-scheduler/kai-scheduler",
      "version=v0.16.9",
      "base=default",
      "valuesProfile=recipes/kai-scheduler/kai-scheduler/v0.16.9/effective-values.yaml",
      "namespace=kai-scheduler",
      "releaseName=kai-scheduler",
      "capabilityProfile={\"apiVersions\":[],\"kubeVersion\":\"1.31.0\"}"
    ]
  },
  "flattened": {
    "method": "helm-render",
    "materializationStatus": "captured",
    "format": "kubernetes-yaml",
    "objectCount": 37,
    "digest": "sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76",
    "digestRole": "canonical-object-set",
    "verdict": "flatten-with-routes",
    "verdictStatus": "decided",
    "action": "retain-exact-objects-with-routes",
    "scope": "kai-scheduler/kai-scheduler@v0.16.9/default; recheck after source, lifecycle-sensitive variant, destination, or delivery-runtime changes",
    "boundaries": [
      "Helm rendered the pinned chart and values into the exact objects retained by this base."
    ],
    "objects": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
    "objectsUrl": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
    "inventory": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/object-inventory.yaml",
    "inventoryUrl": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/object-inventory.yaml",
    "digestRecord": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml",
    "digestRecordUrl": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml",
    "verdictRecord": "recipes/kai-scheduler/kai-scheduler/v0.16.9/publication/flattening-safety-verdict.yaml",
    "verdictRecordUrl": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/publication/flattening-safety-verdict.yaml",
    "retainedObjects": {
      "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
      "url": "https://raw.githubusercontent.com/confighub/helm-expt/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
      "sha256": "sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76"
    }
  },
  "oci": {
    "sourcePackageRef": "oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt/kai-scheduler-kai-scheduler:v0.16.9@sha256:7d360f97ada7c492e506acdd433c9212d21f5a6d26d8d8cbf1f0b68a268e94ab",
    "bundles": [
      {
        "role": "source-package",
        "state": "not-recorded",
        "status": "not-recorded",
        "reference": "",
        "referenceState": "none",
        "digests": []
      },
      {
        "role": "literal-config",
        "state": "published",
        "status": "published-with-receipt",
        "reference": "oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt/bundles/catalog-kai-scheduler-kai-scheduler-v0-16-9-default:latest@sha256:8063202c689d2cd7221cad04da18d409462c7d78049ee75472d88e9c5bd971c5",
        "referenceState": "published",
        "digests": [
          {
            "field": "layerDigest",
            "value": "sha256:1682e8d8ed952d7c7b6c94b15b7dd19a59be57bd16e3361bb95348892b29b7b5"
          },
          {
            "field": "receiptSha256",
            "value": "sha256:203e6325e7f1a249edb1b7b1e1109d9b376efaa3a006917753e4a7353764b464"
          },
          {
            "field": "publicationReceiptSha256",
            "value": "sha256:c3f03b2f8e01d0943745a7f27476f71814587f5a886f304ddc3354849930f132"
          },
          {
            "field": "manifestDigest",
            "value": "sha256:8063202c689d2cd7221cad04da18d409462c7d78049ee75472d88e9c5bd971c5"
          },
          {
            "field": "objectSetSha256",
            "value": "sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76"
          }
        ],
        "receipt": "data/certified-bundles/receipts/catalog/kai-scheduler-v0.16.9-default/receipt.yaml",
        "receiptUrl": "https://github.com/confighub/helm-expt/blob/main/data/certified-bundles/receipts/catalog/kai-scheduler-v0.16.9-default/receipt.yaml",
        "referenceField": "observedReference",
        "note": "The receipt and publication receipt declare these route files; this binding does not prove a remote pullback or route execution."
      },
      {
        "role": "confighub-upload",
        "state": "not-recorded",
        "status": "not-recorded",
        "reference": "",
        "referenceState": "none",
        "digests": []
      },
      {
        "role": "confighub-release",
        "state": "not-published",
        "status": "not-recorded-for-this-base",
        "reference": "",
        "referenceState": "none",
        "digests": [],
        "note": "No current ConfigHub Space release OCI receipt is recorded for this exact base."
      }
    ],
    "runtimes": [
      {
        "runtime": "argo-cd",
        "state": "not-run",
        "status": "not-recorded-for-this-base"
      },
      {
        "runtime": "flux",
        "state": "not-run",
        "status": "not-recorded-for-this-base"
      },
      {
        "runtime": "direct",
        "state": "not-run",
        "status": "not-recorded-for-this-base"
      }
    ]
  },
  "images": {
    "count": 1,
    "pinnedByDigest": 0,
    "namedByTag": 1,
    "references": [
      {
        "reference": "ghcr.io/kai-scheduler/kai-scheduler/operator:v0.16.9",
        "pinned": false
      }
    ],
    "readFrom": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
    "record": "data/catalog-images/images.json",
    "recordUrl": "https://github.com/confighub/helm-expt/blob/main/data/catalog-images/images.json",
    "boundary": "what the objects name, not what the registry holds now; cub config check --images resolves a tag to the bytes behind it"
  },
  "variants": {
    "base": "default",
    "known": [
      {
        "id": "kai-scheduler-kai-scheduler-v0-16-9-aicr-eks-training",
        "base": "aicr-eks-training",
        "url": "https://confighub.github.io/helm-expt/site/listings/kai-scheduler-kai-scheduler-v0-16-9-aicr-eks-training.json",
        "self": false,
        "digest": "sha256:47d9baab7ac158b03e2a19620e2d40bfd4f7b2944cf8b54dd00053ecfc57fb25"
      },
      {
        "id": "kai-scheduler-kai-scheduler-v0-16-9-default",
        "base": "default",
        "url": "https://confighub.github.io/helm-expt/site/listings/kai-scheduler-kai-scheduler-v0-16-9-default.json",
        "self": true,
        "digest": "sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76"
      }
    ],
    "howToMakeOne": {
      "model": "The catalog builds a base by pinning one source version, fixing one set of inputs, and retaining the exact objects that come out. A new variant starts from a retained base and changes only the fields it owns, so the base stays comparable and the change stays reviewable.",
      "steps": [
        "Materialize this base and confirm the object set hashes to sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76. The exact objects are recorded at recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml.",
        "Put those objects in a local directory called rendered, then preview the retention before writing anything.",
        "Retain the base in ConfigHub, carrying the object-set hash as an annotation so the accepted identity travels with it.",
        "Create the new variant from that base and change only the fields the variant owns.",
        "Preview the promotion and read the mutations before any write command runs."
      ],
      "commands": [
        {
          "step": "Preview the retention",
          "command": "cub variant upload --dry-run --component kai-scheduler-kai-scheduler --variant default --space kai-scheduler-kai-scheduler-v0-16-9-default --unit-annotation workshop.confighub.com/object-set-sha256=sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76 ./rendered",
          "writes": false
        },
        {
          "step": "Retain this base",
          "command": "cub variant upload --component kai-scheduler-kai-scheduler --variant default --space kai-scheduler-kai-scheduler-v0-16-9-default --unit-annotation workshop.confighub.com/object-set-sha256=sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76 ./rendered",
          "writes": true
        },
        {
          "step": "Create a staging variant",
          "command": "cub variant create staging kai-scheduler-kai-scheduler-v0-16-9-default --space-pattern template:kai-scheduler-kai-scheduler-v0-16-9-default-staging --environment Staging --unit-annotation workshop.confighub.com/object-set-sha256=sha256:7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76",
          "writes": true
        },
        {
          "step": "Preview the promotion",
          "command": "cub variant promote kai-scheduler-kai-scheduler-v0-16-9-default-staging --dry-run -o mutations",
          "writes": false
        }
      ],
      "reference": "https://github.com/confighub/helm-expt/blob/main/data/config-workshop-command-contract/summary.md"
    }
  },
  "routing": {
    "routeStatus": "recorded",
    "requirementsStatus": "recorded",
    "targetFactsStatus": "recorded",
    "resolutionStatus": "awaits-variant-and-target",
    "resolutionRule": "Re-resolve after a lifecycle-sensitive variant change, destination assignment, or delivery-runtime change; bind the result to the exact configuration digest.",
    "requirements": [
      {
        "id": "lifecycle-action-pre-install-pre-upgrade",
        "type": "lifecycle-action",
        "origin": "base",
        "detail": "Before an install or an upgrade, move the CRDs forward and migrate topologies. Helm runs these in hook-weight order before it applies the chart's objects. The crd-upgrader Job applies the CRD files inside its image, with the kai-scheduler-crd-manager ServiceAccount and its ClusterRole and ClusterRoleBinding. The topology-migration Job runs a script from a hook ConfigMap that copies Kueue Topology objects, where a cluster has them, to KAI Topology objects, with its own ServiceAccount, ClusterRole and ClusterRoleBinding. The kai-config Config object is not in this file; the post-install action applies it. A workflow that applies this base's CRD bundle first does the crd-upgrader's work. Helm deletes the Jobs when they succeed; a workflow that applies them must delete them itself."
      },
      {
        "id": "lifecycle-action-post-install-post-upgrade",
        "type": "lifecycle-action",
        "origin": "base",
        "detail": "After an install or an upgrade, apply the Config that tells the operator what to run. In this chart version the kai-config Config object is not a chart object. This Job applies it with kubectl apply --server-side from the kai-config-manifest hook ConfigMap, using the kai-config-deployer ServiceAccount and its ClusterRole and ClusterRoleBinding. It is required on a first install: the operator deploys no scheduler until the Config exists. A workflow may instead apply the Config manifest held in that ConfigMap directly."
      },
      {
        "id": "lifecycle-action-post-delete",
        "type": "lifecycle-action",
        "origin": "base",
        "detail": "After a delete, remove what the operator created. The post-delete-cleanup Job deletes the Deployments the operator created in the release namespace and the kai-config Config object, with its own ServiceAccount, ClusterRole and ClusterRoleBinding. It renders only while postCleanup.enabled is true, which is the chart default; the AICR values turn it off. A flattened delete that skips it leaves the operator-created Deployments and the Config. The keep-annotated Namespace, Queues and SchedulingShard are deleted with the base instead of kept."
      },
      {
        "id": "bindrequests.scheduling.run.ai",
        "type": "target-fact",
        "origin": "base",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts"
      },
      {
        "id": "configs.kai.scheduler",
        "type": "target-fact",
        "origin": "base",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts"
      },
      {
        "id": "podgroups.scheduling.run.ai",
        "type": "target-fact",
        "origin": "base",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts"
      },
      {
        "id": "queues.scheduling.run.ai",
        "type": "target-fact",
        "origin": "base",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts"
      },
      {
        "id": "schedulingshards.kai.scheduler",
        "type": "target-fact",
        "origin": "base",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts"
      },
      {
        "id": "topologies.kai.scheduler",
        "type": "target-fact",
        "origin": "base",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts"
      },
      {
        "id": "prune-protection",
        "type": "lifecycle-action",
        "origin": "base",
        "detail": "Helm was asked to keep these objects when the release goes away. A reconciler that prunes anything absent from its desired state will delete them instead, and for a custom resource definition that takes every resource of that kind with it. This route protects 2 objects. The rule when one leaves the desired state is to leave in place and report, never delete."
      }
    ],
    "routes": [
      {
        "id": "crd-ordering",
        "phase": "pre-apply",
        "status": "requires-destination-resolution",
        "sourceStatus": "recorded-not-run",
        "automatic": false,
        "actor": "delivery workflow",
        "mechanism": "Install and establish the 6 CRDs before the other objects. The base holds two Queue objects and a SchedulingShard, which Kubernetes rejects until their CRDs are established, and the operator watches all six kinds as soon as it starts. The bundle holds exactly the CRDs this base renders.",
        "supportedRuntimes": [],
        "requirementRefs": [
          "bindrequests.scheduling.run.ai",
          "configs.kai.scheduler",
          "podgroups.scheduling.run.ai",
          "queues.scheduling.run.ai",
          "schedulingshards.kai.scheduler",
          "topologies.kai.scheduler"
        ],
        "checks": [],
        "evidence": [
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/target-facts/default-crds.yaml",
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/lifecycle-actions.yaml"
        ]
      },
      {
        "id": "lifecycle-action-pre-install-pre-upgrade",
        "phase": "destination-resolution",
        "status": "requires-destination-resolution",
        "sourceStatus": "recorded-not-run",
        "automatic": false,
        "actor": "delivery workflow",
        "mechanism": "Before an install or an upgrade, move the CRDs forward and migrate topologies. Helm runs these in hook-weight order before it applies the chart's objects. The crd-upgrader Job applies the CRD files inside its image, with the kai-scheduler-crd-manager ServiceAccount and its ClusterRole and ClusterRoleBinding. The topology-migration Job runs a script from a hook ConfigMap that copies Kueue Topology objects, where a cluster has them, to KAI Topology objects, with its own ServiceAccount, ClusterRole and ClusterRoleBinding. The kai-config Config object is not in this file; the post-install action applies it. A workflow that applies this base's CRD bundle first does the crd-upgrader's work. Helm deletes the Jobs when they succeed; a workflow that applies them must delete them itself.",
        "supportedRuntimes": [],
        "requirementRefs": [
          "lifecycle-action-pre-install-pre-upgrade"
        ],
        "checks": [],
        "evidence": [
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/lifecycle-actions.yaml",
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/pre-install-pre-upgrade.yaml"
        ]
      },
      {
        "id": "lifecycle-action-post-install-post-upgrade",
        "phase": "destination-resolution",
        "status": "requires-destination-resolution",
        "sourceStatus": "recorded-not-run",
        "automatic": false,
        "actor": "delivery workflow",
        "mechanism": "After an install or an upgrade, apply the Config that tells the operator what to run. In this chart version the kai-config Config object is not a chart object. This Job applies it with kubectl apply --server-side from the kai-config-manifest hook ConfigMap, using the kai-config-deployer ServiceAccount and its ClusterRole and ClusterRoleBinding. It is required on a first install: the operator deploys no scheduler until the Config exists. A workflow may instead apply the Config manifest held in that ConfigMap directly.",
        "supportedRuntimes": [],
        "requirementRefs": [
          "lifecycle-action-post-install-post-upgrade"
        ],
        "checks": [],
        "evidence": [
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/lifecycle-actions.yaml",
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/post-install-post-upgrade.yaml"
        ]
      },
      {
        "id": "lifecycle-action-post-delete",
        "phase": "destination-resolution",
        "status": "requires-destination-resolution",
        "sourceStatus": "recorded-not-run",
        "automatic": false,
        "actor": "delivery workflow",
        "mechanism": "After a delete, remove what the operator created. The post-delete-cleanup Job deletes the Deployments the operator created in the release namespace and the kai-config Config object, with its own ServiceAccount, ClusterRole and ClusterRoleBinding. It renders only while postCleanup.enabled is true, which is the chart default; the AICR values turn it off. A flattened delete that skips it leaves the operator-created Deployments and the Config. The keep-annotated Namespace, Queues and SchedulingShard are deleted with the base instead of kept.",
        "supportedRuntimes": [],
        "requirementRefs": [
          "lifecycle-action-post-delete"
        ],
        "checks": [],
        "evidence": [
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/lifecycle-actions.yaml",
          "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/post-delete.yaml"
        ]
      },
      {
        "id": "prune-protection",
        "phase": "destination-resolution",
        "status": "requires-destination-resolution",
        "sourceStatus": "recorded-not-run",
        "automatic": false,
        "actor": "selected applier",
        "mechanism": "Helm was asked to keep these objects when the release goes away. A reconciler that prunes anything absent from its desired state will delete them instead, and for a custom resource definition that takes every resource of that kind with it. This route protects 2 objects. The rule when one leaves the desired state is to leave in place and report, never delete.",
        "supportedRuntimes": [
          "Argo CD",
          "Flux",
          "cub-direct applier"
        ],
        "requirementRefs": [
          "prune-protection"
        ],
        "checks": [],
        "evidence": [
          "data/certified-bundles/routes/catalog/kai-scheduler-kai-scheduler-v0.16.9-default/prune-protection.yaml"
        ]
      }
    ],
    "records": [
      {
        "name": "prune-protection.yaml",
        "path": "data/certified-bundles/routes/catalog/kai-scheduler-kai-scheduler-v0.16.9-default/prune-protection.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/data/certified-bundles/routes/catalog/kai-scheduler-kai-scheduler-v0.16.9-default/prune-protection.yaml"
      },
      {
        "name": "kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
        "path": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
      },
      {
        "name": "post-delete.yaml",
        "path": "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/post-delete.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/post-delete.yaml"
      },
      {
        "name": "post-install-post-upgrade.yaml",
        "path": "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/post-install-post-upgrade.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/post-install-post-upgrade.yaml"
      },
      {
        "name": "pre-install-pre-upgrade.yaml",
        "path": "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/pre-install-pre-upgrade.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/default/pre-install-pre-upgrade.yaml"
      },
      {
        "name": "lifecycle-actions.yaml",
        "path": "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/lifecycle-actions.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/kai-scheduler-lifecycle/lifecycle-actions.yaml"
      },
      {
        "name": "default-crds.yaml",
        "path": "packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/target-facts/default-crds.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/packages/kai-scheduler/kai-scheduler/v0.16.9/prerequisites/target-facts/default-crds.yaml"
      }
    ]
  },
  "lifecycle": {
    "installTimeStatus": "partly-declared",
    "installTimeInputs": [
      {
        "name": "bindrequests.scheduling.run.ai",
        "kind": "requiredCRDs",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts",
        "status": "declared-not-checked"
      },
      {
        "name": "configs.kai.scheduler",
        "kind": "requiredCRDs",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts",
        "status": "declared-not-checked"
      },
      {
        "name": "podgroups.scheduling.run.ai",
        "kind": "requiredCRDs",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts",
        "status": "declared-not-checked"
      },
      {
        "name": "queues.scheduling.run.ai",
        "kind": "requiredCRDs",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts",
        "status": "declared-not-checked"
      },
      {
        "name": "schedulingshards.kai.scheduler",
        "kind": "requiredCRDs",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts",
        "status": "declared-not-checked"
      },
      {
        "name": "topologies.kai.scheduler",
        "kind": "requiredCRDs",
        "detail": "CRD included in this base; it must be established before Kubernetes accepts the rendered Queue and SchedulingShard objects and before the operator starts",
        "status": "declared-not-checked"
      }
    ],
    "promotion": {
      "state": "not-recorded",
      "status": "missing-confighub-proof"
    },
    "coverage": {
      "render_parity": {
        "status": "checked",
        "declared": "yes"
      },
      "confighub_scan_ops": {
        "status": "not_checked",
        "declared": "todo"
      },
      "local_kubernetes": {
        "status": "not_checked",
        "declared": "todo"
      },
      "lifecycle_observation": {
        "status": "not_applicable",
        "declared": "n/a"
      },
      "gitops_oci_live": {
        "status": "not_checked",
        "declared": "todo"
      },
      "live_dual_parity": {
        "status": "not_checked",
        "declared": "todo"
      },
      "two_cluster_kind": {
        "status": "not_checked",
        "declared": "todo"
      },
      "variant_promotion": {
        "status": "not_checked",
        "declared": "missing-confighub-proof"
      }
    },
    "policy": {
      "profile": "catalog-standard",
      "productionAdds": [
        "workflow-approval"
      ]
    },
    "operations": {
      "resourceClass": "not-yet-classified",
      "ownerClass": "not-yet-classified",
      "changeCadence": "not-yet-classified"
    },
    "ownership": {
      "status": "partly-declared",
      "sourceControlled": [
        "Fields produced from the recorded chart values and render context"
      ],
      "variantControlled": [
        "Post-render object fields recorded in ConfigHub after upload"
      ],
      "targetSupplied": [
        "bindrequests.scheduling.run.ai",
        "configs.kai.scheduler",
        "podgroups.scheduling.run.ai",
        "queues.scheduling.run.ai",
        "schedulingshards.kai.scheduler",
        "topologies.kai.scheduler"
      ],
      "deliveryProtected": [],
      "rule": "Re-evaluate ownership when the source, variant, destination, or delivery behavior changes; overlapping source and variant edits require review."
    },
    "notes": []
  },
  "assessment": {
    "stages": [
      {
        "id": "inspection",
        "question": "What do I have?",
        "answer": "Inspect the helm source, choices, locks, and any existing output before selecting a destination.",
        "evidenceState": "completed",
        "resultState": "available",
        "nextAction": "Inspect or compare the source and exact files before choosing a destination.",
        "destinationAccessRequired": false,
        "deploymentRequired": false,
        "requiredInputs": [
          "The chart and values, a rendered object set, or a package that contains them"
        ],
        "records": [
          {
            "name": "kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
            "path": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
            "url": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
          },
          {
            "name": "release-objects.yaml",
            "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
            "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml"
          },
          {
            "name": "object-inventory.yaml",
            "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/object-inventory.yaml",
            "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/object-inventory.yaml"
          }
        ]
      },
      {
        "id": "materialization",
        "question": "What will it produce?",
        "answer": "The kai-config object that tells the operator which scheduler services to run is delivered by a Helm hook, and no base holds it, so should it be part of the base instead of a lifecycle action that nothing runs automatically?",
        "evidenceState": "completed",
        "resultState": "watch",
        "nextAction": "Review the exact object set and its digest, and settle the open question before relying on this base.",
        "destinationAccessRequired": false,
        "deploymentRequired": false,
        "requiredInputs": [
          "The pinned chart, version, values, namespace, release name, and render capabilities"
        ],
        "records": [
          {
            "name": "kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
            "path": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
            "url": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
          },
          {
            "name": "variant-revision.yaml",
            "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml",
            "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml"
          }
        ]
      },
      {
        "id": "destination",
        "question": "Can this destination accept it?",
        "answer": "The destination has not been checked for this exact configuration. A recorded source or render result is not a destination pass.",
        "evidenceState": "not-run",
        "resultState": "not-run",
        "nextAction": "Choose a destination and check its APIs, prerequisites, policies, credentials, controllers, and hardware before apply.",
        "destinationAccessRequired": true,
        "deploymentRequired": false,
        "requiredInputs": [
          "The exact candidate configuration",
          "The selected destination and its current APIs, prerequisites, policies, credentials, controllers, and hardware facts"
        ],
        "records": [
          {
            "name": "kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
            "path": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
            "url": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
          }
        ]
      },
      {
        "id": "post-deployment",
        "question": "Did it work?",
        "answer": "No post-deployment result is recorded for this exact configuration. Publication, upload, or rendering is not proof that it ran correctly.",
        "evidenceState": "not-run",
        "resultState": "not-run",
        "nextAction": "Deliver the exact revision, then record controller, resource, health, runtime, drift, and rollback results separately.",
        "destinationAccessRequired": true,
        "deploymentRequired": true,
        "requiredInputs": [
          "The exact delivered revision and destination",
          "Live controller, resource, health, runtime, drift, and rollback observations required by the claim"
        ],
        "records": []
      }
    ]
  },
  "evidence": {
    "links": [
      {
        "name": "kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
        "path": "data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/data/helm-render-intents/intents/kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
      },
      {
        "name": "flattening-safety-verdict.yaml",
        "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/publication/flattening-safety-verdict.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/publication/flattening-safety-verdict.yaml"
      },
      {
        "name": "object-inventory.yaml",
        "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/object-inventory.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/object-inventory.yaml"
      },
      {
        "name": "release-objects.yaml",
        "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml"
      },
      {
        "name": "variant-revision.yaml",
        "path": "recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml",
        "url": "https://github.com/confighub/helm-expt/blob/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/variant-revision.yaml"
      }
    ],
    "attributes": []
  },
  "nextSteps": [
    {
      "id": "get-objects",
      "label": "Get the exact objects",
      "state": "run-for-this-entry",
      "summary": "The Catalog rendered this entry and retains its 37 objects in one file.",
      "basis": [
        "flattened.materializationStatus",
        "flattened.retainedObjects",
        "flattened.inventory",
        "flattened.digest"
      ],
      "commands": [
        {
          "comment": "fetch the retained objects for this entry",
          "command": "curl -fsSL -o kai-scheduler-kai-scheduler-v0-16-9-default.yaml https://raw.githubusercontent.com/confighub/helm-expt/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/default/r001/rendered/release-objects.yaml"
        },
        {
          "comment": "check the bytes against the listing",
          "command": "shasum -a 256 kai-scheduler-kai-scheduler-v0-16-9-default.yaml",
          "expect": "7254c6c835430dbc6c8513ccb0d7d5a94b2d4fd0cdc7d4029fed5e13c541dd76  kai-scheduler-kai-scheduler-v0-16-9-default.yaml"
        },
        {
          "comment": "render this base from the signed package; step 3 uploads this directory",
          "command": "cub installer setup --pull oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt/kai-scheduler-kai-scheduler:v0.16.9@sha256:7d360f97ada7c492e506acdd433c9212d21f5a6d26d8d8cbf1f0b68a268e94ab --base default --work-dir ./kai-scheduler-kai-scheduler-v0-16-9-default --non-interactive --namespace kai-scheduler"
        }
      ],
      "notes": [
        "An upload can create more Units than the objects counted here. The installer renders a Namespace, and the upload adds an `installer-record` Unit."
      ]
    },
    {
      "id": "compare",
      "label": "Compare with another version or base",
      "state": "not-run-for-this-entry",
      "summary": "The listing records no comparison for this entry. The commands run on the retained files, with no account.",
      "basis": [
        "variants.known",
        "source.name",
        "flattened.format"
      ],
      "commands": [
        {
          "comment": "fetch the aicr-eks-training base of the same version",
          "command": "curl -fsSL -o kai-scheduler-kai-scheduler-v0-16-9-aicr-eks-training.yaml https://raw.githubusercontent.com/confighub/helm-expt/main/recipes/kai-scheduler/kai-scheduler/v0.16.9/revisions/aicr-eks-training/r001/rendered/release-objects.yaml"
        },
        {
          "comment": "list what differs between the two bases",
          "command": "cub config diff kai-scheduler-kai-scheduler-v0-16-9-default.yaml kai-scheduler-kai-scheduler-v0-16-9-aicr-eks-training.yaml --summary"
        },
        {
          "comment": "fetch the default base at version v0.14.1",
          "command": "curl -fsSL -o kai-scheduler-kai-scheduler-v0-14-1-default.yaml https://raw.githubusercontent.com/confighub/helm-expt/main/recipes/kai-scheduler/kai-scheduler/v0.14.1/revisions/default/r001/rendered/release-objects.yaml"
        },
        {
          "comment": "list what changed from v0.14.1 to v0.16.9",
          "command": "cub config diff kai-scheduler-kai-scheduler-v0-14-1-default.yaml kai-scheduler-kai-scheduler-v0-16-9-default.yaml --summary"
        }
      ],
      "siblings": [
        {
          "id": "kai-scheduler-kai-scheduler-v0-14-1-aicr-eks-training",
          "url": "https://confighub.github.io/helm-expt/site/listings/kai-scheduler-kai-scheduler-v0-14-1-aicr-eks-training.json",
          "version": "v0.14.1",
          "base": "aicr-eks-training",
          "relation": "other-version"
        },
        {
          "id": "kai-scheduler-kai-scheduler-v0-14-1-default",
          "url": "https://confighub.github.io/helm-expt/site/listings/kai-scheduler-kai-scheduler-v0-14-1-default.json",
          "version": "v0.14.1",
          "base": "default",
          "relation": "other-version"
        },
        {
          "id": "kai-scheduler-kai-scheduler-v0-16-9-aicr-eks-training",
          "url": "https://confighub.github.io/helm-expt/site/listings/kai-scheduler-kai-scheduler-v0-16-9-aicr-eks-training.json",
          "version": "v0.16.9",
          "base": "aicr-eks-training",
          "relation": "other-base"
        }
      ]
    },
    {
      "id": "upload",
      "label": "Upload it as a variant",
      "state": "not-run-for-this-entry",
      "summary": "The Catalog has not uploaded this entry. The commands use its signed installer package.",
      "basis": [
        "source.ociRef",
        "oci.bundles[literal-config]",
        "oci.bundles[confighub-upload]",
        "oci.bundles[confighub-release]",
        "lifecycle.coverage.confighub_scan_ops"
      ],
      "commands": [
        {
          "comment": "sign in; steps 3 to 5 write to your ConfigHub organization",
          "command": "cub auth login",
          "needsAccount": true
        },
        {
          "comment": "upload step 1's directory as a Space of Units, under names you choose",
          "command": "cub installer upload --work-dir ./kai-scheduler-kai-scheduler-v0-16-9-default --space <your-space> --component <your-component>",
          "needsAccount": true,
          "writes": true
        },
        {
          "comment": "list the Units the upload created",
          "command": "cub unit list --space <your-space>",
          "needsAccount": true
        }
      ],
      "notes": [
        "Replace each value in angle brackets with a name of your own. The entry id may already exist as a Space in your organization, and the package name as a Component.",
        "In the live walk, a Space named for the nginx entry's id and a Component named bitnami-nginx already existed, so the walk chose its own names. The `--component` flag sets the Component label the upload writes on the Space, which is the package name when you omit it.",
        "The cub installer plugin reads your organization from `CUB_CONTEXT` and ignores `--context`. If you use a context other than your default, export `CUB_CONTEXT` first, or the plugin works in your default organization."
      ],
      "liveWalk": {
        "date": "2026-10-08",
        "path": "docs/user/live-walk-entry-steps-2026-10-08.md",
        "url": "https://github.com/confighub/helm-expt/blob/main/docs/user/live-walk-entry-steps-2026-10-08.md",
        "versions": "cub v0.8.7, ConfigHub server v0.8.9, installer plugin 0.1.0 and Argo CD v3.5.4"
      }
    },
    {
      "id": "deploy",
      "label": "Deploy it",
      "state": "not-run-for-this-entry",
      "summary": "No delivery run is recorded for this entry. Argo CD has not run, Flux has not run, and kubectl has not run.",
      "basis": [
        "oci.runtimes",
        "lifecycle.installTimeInputs"
      ],
      "commands": [
        {
          "comment": "clone the base onto a Target as a dev variant",
          "command": "cub variant create dev <your-space> --target workshop/target --space-pattern \"template:<your-space>-dev\"",
          "needsAccount": true,
          "writes": true
        },
        {
          "comment": "publish the Release that the cluster's Argo CD pulls",
          "command": "cub release publish <your-space>-dev",
          "needsAccount": true,
          "writes": true
        },
        {
          "comment": "delete the installer record, which Argo CD cannot read",
          "command": "cub unit delete --space <your-space>-dev installer-record",
          "needsAccount": true,
          "writes": true
        },
        {
          "comment": "publish again without it",
          "command": "cub release publish <your-space>-dev",
          "needsAccount": true,
          "writes": true
        }
      ],
      "notes": [
        "Use the Space name you chose in step 3. The delete command is needed because the cloned `installer-record` Unit carries the Target and Argo CD v3.5.4 cannot read it, a defect seen on cub v0.8.7 and server v0.8.9.",
        "Without that line the walk deployed nothing and Argo CD showed Unknown, while every cub command exited 0. The walk ran the four commands in this order and did not try them without the first publish.",
        "ConfigHub shows nothing when Argo CD fails to read a Release. Run `kubectl -n argocd get applications.argoproj.io` and read the Sync column, because Healthy alone is not a pass. Argo CD took between 18 seconds and about 5 minutes to read a Release on a cluster made without argobot.",
        "The walk made its cluster with `cub cluster up --no-argobot`. That command creates two Spaces, a Worker, a Target and a Trigger, opens ports 30010 to 30019 on the machine, and installs Argo CD from an unpinned upstream manifest.",
        "Removing the ConfigHub side does not remove the workload. In the walk, deleting the Application Unit and the Spaces left the Application and its pods running, because the root Application does not prune."
      ],
      "liveWalk": {
        "date": "2026-10-08",
        "path": "docs/user/live-walk-entry-steps-2026-10-08.md",
        "url": "https://github.com/confighub/helm-expt/blob/main/docs/user/live-walk-entry-steps-2026-10-08.md",
        "versions": "cub v0.8.7, ConfigHub server v0.8.9, installer plugin 0.1.0 and Argo CD v3.5.4"
      },
      "carries": [
        "bindrequests.scheduling.run.ai",
        "configs.kai.scheduler",
        "podgroups.scheduling.run.ai",
        "queues.scheduling.run.ai",
        "schedulingshards.kai.scheduler",
        "topologies.kai.scheduler"
      ]
    },
    {
      "id": "promote",
      "label": "Promote a change",
      "state": "not-run-for-this-entry",
      "summary": "No promotion is recorded for this entry.",
      "basis": [
        "lifecycle.promotion"
      ],
      "commands": [
        {
          "comment": "preview what the dev variant would take from the base",
          "command": "cub variant promote <your-space>-dev --dry-run -o mutations",
          "needsAccount": true
        },
        {
          "comment": "promote once you have read the preview",
          "command": "cub variant promote <your-space>-dev --change-desc \"Pull the reviewed base forward\"",
          "needsAccount": true,
          "writes": true
        },
        {
          "comment": "delete the installer record that the promotion adds back",
          "command": "cub unit delete --space <your-space>-dev installer-record",
          "needsAccount": true,
          "writes": true
        },
        {
          "comment": "publish the Release that carries the change",
          "command": "cub release publish <your-space>-dev",
          "needsAccount": true,
          "writes": true
        }
      ],
      "notes": [
        "The promotion changes the dev Space and publishes nothing. It also adds the `installer-record` Unit back with the Target. The change reaches the cluster only after the delete and the publish.",
        "The preview lists the whole installer record as added. In the walk, the preview of a one-label change to gpu-operator ran to 405 lines, and about 400 of them were that record."
      ],
      "liveWalk": {
        "date": "2026-10-08",
        "path": "docs/user/live-walk-entry-steps-2026-10-08.md",
        "url": "https://github.com/confighub/helm-expt/blob/main/docs/user/live-walk-entry-steps-2026-10-08.md",
        "versions": "cub v0.8.7, ConfigHub server v0.8.9, installer plugin 0.1.0 and Argo CD v3.5.4"
      }
    }
  ]
}
