ADR-002: Struct-as-set: {key: true} over arrays for types and dependencies
| Field | Value |
|---|---|
| Status | accepted |
| Date | 2025-01-01 |
Context
Resources need type membership and dependency declarations. Arrays require list.Contains (O(n)) and produce duplicates on unification.
Decision
Use struct-as-set pattern: {@type: {DNSServer: true, LXCContainer: true}} and {depends_on: {dns: true}}. O(1) membership, clean CUE unification, no duplicates.
Rationale
CUE unifies structs by merging keys. {A: true} & {B: true} = {A: true, B: true}. Arrays would need explicit dedup. Struct keys are unique by construction.
Consequences
- All @type fields use {[string]: true} not [...string]
- JSON-LD export converts to arrays: [for t, _ in @type {t}]
- Provider matching uses resource[@type][providerType] != | (O(1))