Line
Purpose
One line of a member's presented reading — the surface's word for what one place in the timeline looks like on a screen. Because the timeline below it has exactly two shapes, a line has exactly two: spoken, where a message opened and the line carries who said it and what they said, under the speaker's shown name, in the reader's own voice when they themselves said it; or awaited, where the reading has a visible hole — a message named as a parent that has not itself arrived. A line is presentation, not knowledge: it carries the shown name the reader resolves, not the wire's identifiers, and it never carries key material or sealed bytes.
Attributes
- kind: is one of "spoken", "awaited" that names the line's shape
Spoken attributes
- message id: the
MessageIdof the message this line presents - speaker: is
Textthat names the sender as the reader knows them — their shown name when the reader has seen one, their sub otherwise - words: is
Textthat carries the readable text - voice: is
Textthat says whose voice the line speaks in — one of the recognised voices, "mine" or "theirs"
Awaited attributes
- awaiting: the
MessageIdthe reading still waits for
Invariants
- A spoken line carries its speaker and its words; an awaited line carries only the id it awaits.
- A spoken line's voice is one of the recognised voices: "mine" or "theirs".
Scenarios
A spoken line carries who said what
Given: kind "spoken", the MessageId "m-8001", speaker "Anne Bruun", words "The hearing moved to Thursday.", and voice "theirs"
When: a Line is created
Then: it is accepted as a spoken line carrying "The hearing moved to Thursday." from "Anne Bruun", in the voice "theirs"
An awaited line names the hole
Given: kind "awaited" and an awaiting MessageId "m-8000"
When: a Line is created
Then: it is accepted as an awaited line waiting for "m-8000"
An unknown shape is rejected
Given: kind "whispered", with no words and no awaiting id When: a Line is created Then: the creation is rejected because the kind is not a recognised line shape