// Shared record definitions, repeated explicitly in independently locked resources. external atom Document id "atom:reader:document"; external atom Highlight id "atom:reader:highlight"; external atom Comment id "atom:reader:comment"; type SourceRange = record { sourceRevision: string; start: int32; end: int32; }; type CommentContent = record { text: string; tags: list; }; type DocumentSeed = record { sourceRevision: string; content: string; }; interface HighlightData id "interface:reader:highlight-data" revision "interface:reader:highlight-data@1" { queryable value range id "highlight:range" : SourceRange { get id "highlight:range:get" execution snapshot; } queryable value color id "highlight:color" : string { get id "highlight:color:get" execution snapshot; set id "highlight:color:set" execution transaction; } queryable portable value excerpt id "highlight:excerpt" : string { get id "highlight:excerpt:get" execution snapshot; } queryable relation comments id "highlight:comments" : many-unique atom Comment { resolve id "highlight:comments:resolve" execution snapshot; } }