Customization Algorithm

A repository document, rendered for the site. View source markdown.

Generated at: 2026-07-30T12:38:02.000Z UTC · source: committed helm-expt evidence for this rendered repository document.

UNOFFICIAL/EXPERIMENTAL

This document defines how a Helm-user customization becomes a ConfigHub variant, and where each piece of new information belongs.

For the full chart-to-recipe workflow, including the main "where pieces go" table, see Introduction To The Harness. For the short guide to variant creation through human, AI assistant, and bulk flows, see Creating Variants. For a concrete chart walkthrough, see Prometheus Overlay And Promotion Example. For wrapper charts, platform values, and customer values, see Custom Overlays. For the delivery boundary, see Choosing Base Variants, Derived Variants, And Delivery Changes.

The product rule is:

Do not ask users to abandon Helm chart behavior.
Capture the behavior, classify the customization, render exact objects, then
promote only digest-bound variants with receipts.

Inputs

A customization request can arrive from:

Supported Overlay Modes

This project must support all common Helm customization inputs, but not by flattening them into one vague "variant" bucket.

Input styleSupported routeWhat gets checked
Helm values file or --setRecipe/base variant when it changes Helm render inputs, object shape, object count, or lifecycle behavior; derived ConfigHub variant only when it fills already-rendered fieldseffective values digest, render diff, Helm equivalence receipt when expected
Umbrella chart or wrapper chartRecipe import unitsource/dependency locks for wrapper and subcharts
Platform valuesManaged default in the recipe/baseeffective values digest and field provenance
Customer overlay valuesRecipe/base if rendered into objects; derived ConfigHub variant if binding already-rendered placeholders/fieldsoverlay digest, target-fact binding, or mutation receipt
Kustomize overlay/patchRecipe/base overlay when it changes install shape; post-render ConfigHub mutation only for narrow editable fieldsoverlay digest, object diff, MutationSources
Post-renderer/scriptPinned function stage or rejecttool digest, function-chain receipt, diff
Live cluster inputtarget fact, preflight, or observation receiptfact snapshot/digest and freshness

Algorithm

  1. Start from the chart recipe.

The recipe owns chart identity, source lock, dependency lock, value model, known control points, fact requirements, lifecycle policy, and allowed extension slots.

  1. Classify the requested customization.
   values-only
   target fact
   generated fact
   capability profile
   lifecycle / hook / CRD policy
   extension slot
   Kustomize overlay / patch
   post-renderer or script
   operate / observation requirement
  1. Decide whether it belongs in the recipe or the variant.

The user-facing decision should be phrased simply:

New to cub? Install the cub CLI first. You can pull and render public catalog packages without an account. Commands that save or change ConfigHub data require you to sign in.

   This changes Helm render inputs or object shape, so it needs a cub installer
   base.
   This is an approved post-render refinement of an uploaded base, so it can be
   a derived ConfigHub variant.

The supporting proof can record the exact digests, paths, facts, checks, and receipts behind that decision.

Recipe-level:

   chart source
   dependency closure
   value schema and known value paths
   fact requirements
   allowed extension slots
   lifecycle policy
   forbidden or review-only mechanisms

Variant-level:

   chosen values
   selected components
   target fact bindings
   capability profile
   generated fact bindings
   explicit overlays
   namespace and release name
  1. Render a candidate variant revision.

The revision binds:

   recipe digest
   effective values digest
   capability profile digest
   target/generated fact binding digest
   renderer/version/flags digest
   rendered object set digest
  1. Compare against regular Helm when Helm equivalence is expected.

Passing means:

What this command does. cub installer is a released, open-source plugin for the cub CLI. cub installer setup pulls a catalog package and writes its Kubernetes files locally. It does not apply those files to a cluster; use kubectl, Argo CD, or Flux for delivery. The generated scripts stop before doing any work when the plugin or kustomize is missing.

   regular helm template output
     == cub installer setup output
     plus allowed installer support objects
  1. Scan the exact rendered objects.

Scans run on the rendered object set, not on a guess about values.

  1. Gate the revision.

Gate decisions are:

   allow
   warn
   block

A warning can be acceptable for local proof but still blocked for production until review or observation requirements are satisfied.

  1. Promote or reject the variant.

If broadly useful, the variant can become catalog-supported. If organization-specific, it remains a private/local variant. If unsafe or ambiguous, it is blocked with a reason.

  1. Settle delivery prerequisites before OCI handoff.

OCI delivery should publish the reviewed object set that Kubernetes or GitOps will consume. Before that handoff, the route must be explicit:

   base variant selected
   derived ConfigHub variant selected, if needed
   target facts bound or deferred with a receipt
   generated facts bound
   scans and gates complete
   hook/CRD/lifecycle decision recorded
   approval state known
   OCI digest, signature, and access method recorded

If a late change requires Helm to rerender, changes object count or install shape, or touches fields outside the approved post-render contract, it routes back to the cub installer base path. If it is an approved post-render refinement, it can be a derived ConfigHub variant before publication or apply.

Where Common Customizations Go

CustomizationConfigHub LocationNotes
Change replica countDerived ConfigHub variant or Day-2 operation when it edits an already-rendered workload field allowed by the base; cub installer base variant when it changes topology, object count, storage, chart branches, or lifecycle behaviorTrivial scale changes should not force a new installer base. HA/topology changes still need render proof.
Use existing SecretBase variant if object shape changes; derived ConfigHub variant only if the base already exposes the referenceSecret name and keys are recorded; secret material is not stored in the public proof.
Generate password/cert onceGenerated fact binding before renderGeneration happens before approval, then the rendered revision is immutable.
Enable ingress/TLSBase variant plus target factsTLS Secret and ingress class become explicit facts.
Disable CRDsBase variant lifecycle policyCommon for GitOps/controller-owned CRD installs.
Enable CRDsBase variant plus CRD review gateCRD lifecycle and upgrade risk must be visible.
Add raw manifestsRecipe/base extension slotAllowed only when the recipe declares the slot and scan/gate checks run.
Use tpl contentRecipe/base extension slotTreated as code-like input and reviewed before promotion.
Add Kustomize patchBase overlay when it changes object shape; ConfigHub function only for narrow approved post-render editsPatch must be explicit, digest-bound, and included in the diff or MutationSources.
Set target/environment/region/customerDerived ConfigHub variantClone reviewed Units, preserve upstream links, set identity and target context.
Fill namespace, Secret reference, hosted zone, account ID, or endpoint already exposed by the baseDerived ConfigHub variantBind target facts, fill approved fields, run checks, and write mutation receipts.
Set approval gates or observation policyDerived ConfigHub variantMust be set before the reviewed object set is delivered or applied for that target.
Helm hook behaviorLifecycle policy plus hook/lifecycle receiptHook templates can be inventoried deterministically, but hook execution depends on the target cluster. Map to tests, preflight, lifecycle action, observation, explicit skip, or blocker.
Cluster lookupRecipe fact requirement plus variant fact bindingCluster-sourced data must not silently change the approved render.

Product Tier Routing

The same algorithm applies across product tiers, but the required product surface changes.

ScenarioProduct tierWhy
Public chart with supported base variantsPublic catalog proofThe repo can publish recipe/package artifacts, receipts, and local live proof.
Environment or region clone from a reviewed uploaded baseConfigHub managed variantsNeeds ConfigHub Spaces, Units, upstream links, gates, and receipts.
Wrapper chart plus platform values plus customer overlay valuesManaged overlay importNeeds private/customer inputs, render context capture, ConfigHub Server, and usually managed/commercial workflows.
Fleet of many customer/environment variantsEnterprise fleet operationsNeeds bulk creation, promotion waves, checks, observations, and support disposition.

See Product Support Tiers For Helm Scenarios.

Hook Customization Rule

A request to enable, disable, replace, or rely on Helm hook behavior is not a normal values-only customization.

Treat it as:

lifecycle / hook policy
target fact or preflight requirement
execution-or-skip decision
observation requirement

The rendered normal object set can still be deterministic. The hook action is not proven until a lifecycle receipt records whether it ran, was skipped, was converted into a test/check, or was blocked.

Confidence Labels

Each variant should carry one of these statuses:

proof-grade
catalog-candidate
catalog-supported
deprecated
blocked

Proof-grade means the variant is mechanically proven. Catalog-supported means it is also the recommended, simple, safe experience for Helm users.