Skip to content

Resource model

This reference is generated from the same typed definitions used by resource inspection. A plane is an independent persisted representation; a relationship never implies that one resource is embedded in another.

Families and placements

Family Selectors Storage identity Operator address Installed API kinds Source Desired Observed
artifact artifact, artifacts producer/name (--producer) parent-qualified-name/name (child via receipt-describes-artifacts) artifact.gitopsctr.io/v1/ContainerImages
artifact.gitopsctr.io/v1/FrontendBundle
environment · observed-artifacts · observed · default
environment environment, environments name name (root) gitopsctr.io/v1/Environment project · source-environments · authored · default
project project, projects name name (root) gitopsctr.io/v1/Project project · source-project · authored
promotion promotion, promotions name name (root) gitopsctr.io/v1/Promotion environment · desired-promotions · desired · default
receipt receipt, receipts name subject-qualified-name (mirror via receipt-observes-unit) gitopsctr.io/v1/Receipt environment · observed-receipts · observed · default
stack stack, stacks name name (root) gitopsctr.io/v1/Stack environment · source-stacks · authored environment · desired-stacks · desired · default
stacktemplate stacktemplate, stacktemplates name name (root) gitopsctr.io/v1/StackTemplate project · source-stacktemplates · authored environment · desired-stacktemplates · desired · default
unit unit, units name name (root) or stack/logical-unit (child via stack-owns-unit) unit.gitopsctr.io/v1/FrontendS3Cloudfront
unit.gitopsctr.io/v1/KubernetesManifests
unit.gitopsctr.io/v1/OciImages
unit.gitopsctr.io/v1/Terraform
unit.gitopsctr.io/v1/ViteOciBundle
environment · source-units · authored environment · desired-units · desired · default

Local identity plus placement drives collection discovery and duplicate detection. Each family's root, child, or mirror rule defines the qualified address that the CLI renders and accepts; the collection adapter encodes that same address into its canonical path while the document retains its local metadata.name. Environment and family remain separate command context. The repository adapter—not the controller or presentation layer—owns physical path discovery and encoding. default selects the persisted representation used by the family's inspection view; it does not make that representation authoritative for another plane.

Observation relationships

Relationship Observer Subject Cardinality Identity binding Freshness binding
receipt-observes-unit observed/receipt desired/unit zero-or-one /spec/subject/apiVersion, /spec/subject/kind, /spec/subject/name /spec/desired/unitBlob ↔ subject Git blob

A Receipt is therefore a separately stored observation of a desired Unit. A missing Receipt is allowed; matching unitBlob evidence is current, a different blob is stale, and more than one Receipt for the same subject violates the declared cardinality.

Artifact description relationships

Relationship Describer Artifact Producer Descriptor location Verified bindings
receipt-describes-artifacts observed/receipt observed/artifact desired/unit /status/artifacts identity, producer /producer, source pin, digest, and media type

Receipt artifact descriptors identify separately stored Artifact resources and bind their producer, media type, and serialized-byte digest. Artifact resources are not Receipt fields and are not Unit status.

Desired graph relationships

Relationship Source Target Identity fence
stack-owns-unit desired/stack desired/unit Stack.apiVersion, Stack.kind, Stack.metadata.name, Stack.metadata.uid, Unit.apiVersion, Unit.kind, Unit.metadata.name, Unit.metadata.ownerReferences[0].apiVersion, Unit.metadata.ownerReferences[0].kind, Unit.metadata.ownerReferences[0].name, Unit.metadata.ownerReferences[0].uid
stack-selects-stacktemplate desired/stack desired/stacktemplate Stack.apiVersion, Stack.kind, Stack.metadata.name, Stack.metadata.uid, Stack.spec.templateRef.name, Stack.spec.templateRef.uid, Stack.spec.templateRef.contentDigest, Stack.spec.structuralProjection.identity.stackUid, Stack.spec.structuralProjection.identity.templateUid, Stack.spec.structuralProjection.identity.templateContentDigest, StackTemplate.apiVersion, StackTemplate.kind, StackTemplate.metadata.name, StackTemplate.metadata.uid, StackTemplate.spec.contentDigest

Desired Stack relationships are registry contracts: a StackTemplate selection may be fenced by the template name, UID, and semantic content digest, while generated Units are fenced by the Stack owner UID.