Nordhavn / specs / convene / surface / Screen

convene / surfaceport

Screen

Purpose

The rendering floor — the one capability the surface has to reach a person's eyes. The screen is handed a whole presentation and presents it, and there are two things the surface hands over: the reading of one conversation, and the chats a member may jump between. That is the entire contract. Presentation replaces presentation: a refresh repaints the reading from the top and a survey repaints the rail from the top, never appending — the surface owns what the presentation is, the floor owns how it is drawn, and neither keeps state for the other. The screen reads nothing back, decides nothing, and holds nothing sealed — by the time lines or chats reach it, every name is a shown name and every text is readable, and anything the floor logs or caches is already only what the member themselves could read. This is a port: it lowers to an interface the surface emits and a host implements; the demonstration binds a terminal, the browser node binds the page.

Operations

show

Given the Lines of the member's reading, presents them whole, replacing whatever was shown before — an empty reading is presented as empty, not left as yesterday's screen. Result: None

offer

Given the Chats of the member's standing, presents them whole, replacing whatever was offered before — a member with no chats is shown none, not yesterday's rail. Result: None

Notes

The floor decides everything visual — layout, styling, how "mine" is laid out against the rest, how an awaited line looks. The surface never says "bubble" or "column"; it hands over spoken and awaited lines and the floor draws them. The web node's binding lives in the carried web floor (web/), the demonstration's in the app's composition root.

spoken of by