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/ContainerImagesartifact.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/FrontendS3Cloudfrontunit.gitopsctr.io/v1/KubernetesManifestsunit.gitopsctr.io/v1/OciImagesunit.gitopsctr.io/v1/Terraformunit.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.