convene-surface
The root descriptor for the surface crate — the presentation domain. This is the layer a
person actually touches, and it has its own professional experts: not case workers and not protocol
designers, but the people who decide what a reading looks like — a message list, a composer, a
session. Their vocabulary is this crate's vocabulary. The surface turns the comms domain's readable
timeline into lines a person reads, turns the words a person typed into a send, and lays the chats
a member may enter before them as a list to jump between — nothing more.
Everything the system knows stays one layer down: the surface holds no key material of its own, no
message store, and no ordering rules; it consumes core's projections and performs core's
contexts, in the reader's own seat.
Two ideas carry the design. The surface presents; it never decides. Who may read is the epochs' business; what order messages stand in is the fold's business; whether a send is allowed is the sender's own ring's business. The surface's one judgement of its own is presentational: a blank composer is not a message. A member replies to what they saw. The surface is where a person's reading and a person's writing meet, so the message a post follows is the last message the reading showed — the causal parent is the tip of the presented timeline, not a store's opinion.
Below itself the surface names one seam to the floor — Screen, "present this reading" — which a
host binds to whatever actually draws: a terminal for the demonstration, the web page in the browser
node. Modeling stops there; layout, styling, and widgets are the floor's craft, not this domain's.
Build
kind: library
Depends on
- convene-core — the comms domain: the surface reads its
TimelineEntries, names itsMembers, and performs itsSendandReceivein the signed-in member's seat.
Contains
data/— what the surface is: theLinea person reads, theChatthey jump to, theComposerthey write into, and theSessionthat is their signed-in seat.projections/— the read-only shaping:MessageList, the fold from the member's readable timeline to the lines the screen shows, andChatList, the fold from everything the device has unsealed to the chats the member may enter — and the one-lineage selection each seat reads by.contexts/— what the surface does:Post(the send button),Refresh(the screen's pull), andSurvey(the rail's pull).ports/— the downward seam to the rendering floor:Screen.