Skip to content

Relations

Relations are typed edges between atoms. The 20 types are grouped into nine families:

Hierarchy: parent_of
Data semantics: uses_entity, uses_rule, rendered_by, renders_feature
API: exposes_endpoint, returns_entity
RBAC: requires_permission, granted_to_role, scoped_to_resource
UI flow: navigates_to
State machine: transitions_to, owned_by
C4 architecture: contains, uses_container, uses_tech
Cross-cutting: depends_on, blocks, verifies
Attribution: mined_from
{
"type": "verifies",
"from": "cri_initial_load_h31a",
"to": "feat_load_habits_a7b3",
"metadata": { /* optional, kind-specific */ }
}

Each edge is a row. The pair (from, to, type) is unique within a project.

Project → Module → Feature → Block is expressed via parent_of edges, not nested fields. Each block atom is its own row in storage. This means:

  • Independent diffs.
  • Independent versioning.
  • Independent context windows.

See Atom model for the rationale.

Relations are constrained to specific from / to kind pairs. The validator rejects edges with the wrong shape. The full pair matrix lives in RFC-001; the most-used pairs:

RelationFrom kindTo kind
parent_ofmodule / featurefeature / block (description, criterion, task, etc.)
verifiescriterionfeature
rendered_byentityui_view
renders_featureui_viewfeature
uses_entityfeature / ui_viewentity
uses_rulefeaturerule
exposes_endpointservicefeature
returns_entityfeatureentity
requires_permissionfeature / ui_view(free-text role on metadata)
navigates_toui_viewui_view
transitions_toui_view (state)ui_view (state)
containsserviceservice
uses_containerfeatureservice
uses_techservicevendor
depends_onanyany
blockstasktask
mined_fromanyany

depends_on, blocks, and mined_from accept any kind pair — they’re cross-cutting and intentionally unconstrained.

When the cloud authoring service computes a Pattern C suggestion for an atom’s Layer 2, it walks specific relation types:

Atom kindWalks
featureverifies reverse → criteria with Layer 2 filled
ui_viewrendered_by → entity + its field children
ruleuses_rule reverse → features
criterionverifies → feature
fixturemetadata.linked_criteria → criteria

Without these edges, Pattern C cannot synthesise — it falls back to D (LLM) or B (codegen-time defaults). See Concepts → Relations for the full inference table.