Score
├── Metadata: Map<String, Value>
├── Parts: OrderedMap<PartId, Part>
├── Measures: OrderedMap<UUID, Measure>
├── Spans: Set<Span>
├── Overlays: Set<Overlay> (optional)
└── Layout: LayoutHints (optional)
Measure
├── id: UUIDv7 (stable identity)
├── number: PositiveInt (display property)
├── beat-start: Rational (absolute position)
├── sec-start: Float? (if tempo automation)
├── time, key, tempo, rehearsal...
└── content: Map<PartId, PartContent>
Event
├── id: UUIDv7 (stable identity)
├── beat: Decimal (position in measure)
├── at: Rational (absolute position)
├── pitches: List<Pitch>
├── duration: Duration
└── properties: Map<String, Value>
Span
├── id: UUIDv7 (stable identity)
├── type: slur | tie | beam | hairpin | ...
├── from: UUIDv7 (event reference)
├── to: UUIDv7 (event reference)
└── properties: Map<String, Value>