Files and live API data both resolve to the same typed schema, before any matching, decoding, or auditing happens.
flowchart TD
CSV[CSV export] --> Q{Spec exists for
this file type?}
API[Live exchange API] --> OBS[Observation]
Q -- yes --> SPEC[YAML spec + CEL]
Q -- no --> AI[AI spec generator]:::pending
AI --> SPEC
SPEC --> OBS
classDef pending stroke-dasharray: 4 3
click CSV call showNote("csv") "CSV export"
click SPEC call showNote("spec") "YAML spec + CEL"
click AI call showNote("ai") "AI spec generator"
click API call showNote("api") "Live exchange API"
click OBS call showNote("obs") "Observation schema"
Click a step for details.