ChatList
Purpose
The fold from everything waiting at a member's own edge — every lineage — to the chats they may
jump between, and the selection a single seat reads by. The sealed records a member's edge holds
arrive from every conversation they were ever let into, mixed and in no promised order; this
projection is where they are opened and told apart. A record that unseals under a key the ring
holds joins the fold; a record the ring cannot open is noise on a public drop and is dropped
without ceremony, exactly as a reading treats a copy it cannot open. It settles two things beyond
the opening — the naming and the selection — and carries no judgement of its own beyond them: the
chain's assembly, and its refusal of a fork as substitution evidence, is each lineage's Group
composing underneath, at the rail as everywhere. A chat is named by its
people: the domain has no group name and an invitee never learns a founder's local title, so each
lineage presents under the shown names of its current members — the reader excluded, because a
person does not list themselves among the people they talk to, and the reader's own shown name when
they alone remain. A seat reads by its own lineage: the revisions of one lineage are one
conversation's epochs and no other's — the judgement every one-conversation seat composes by, so no
floor need carry it.
Props
- sealed: the
SealedRevisionswaiting at the reader's own edge, of any lineage, in no promised order - ring: the reader's
KeyRing, opened - reader: the
Memberwhose chats these are
Role Players
(none)
Role Methods
(none)
Functionalities
present
Opens the sealed records that unseal under a key the ring holds — the rest are dropped, noise and
not evidence — and produces the Chats, one per distinct lineage among the opened revisions, in
the order the lineages first appear. Each chat carries its lineage and its names: the shown names
of the members of that lineage's current revision, as the lineage's Group answers it, with
the reader excluded, and the reader's own shown name when they alone remain. It fails when an
opened lineage's revisions refuse to assemble — a forked lineage is substitution evidence, carried
in a substitution Alarm, at the rail as everywhere.
Result: the Chats, one per lineage, in the lineages' first-appearance order; fails when an opened lineage's assembly refuses
revisions of
Given a lineage Text, produces the GroupRevisions of that lineage, opened from the sealed
records the ring can unseal, assembled eldest first through that lineage's Group — what a seat
in that conversation reads by. A lineage no opened revision belongs to gets an empty answer. It
fails when the lineage's revisions refuse to assemble — the seat is not handed substitution
evidence as its reading.
Result: the GroupRevisions of the lineage, assembled eldest first; fails when the lineage's assembly refuses
Scenarios
Two lineages fold to two chats
Given: sealed records — one under key id "k-0163" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun" and sofie.lind shown as "Sofie Lind", then one under key id "k-0301" sealing "g-9001" of lineage "g-9001" with members karin.dahl shown as "Karin Dahl" and sofie.lind shown as "Sofie Lind" — sofie's opened ring holding the GroupKeys "k-0163" and "k-0301", and reader sofie.lind shown as "Sofie Lind"
When: present is called
Then: two chats in that order — "g-7421" named by "Anne Bruun", then "g-9001" named by "Karin Dahl" — the reader listed in neither
A chat is named by its current epoch, not its history
Given: sealed records — one under key id "k-0142" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun", and one under key id "k-0150" sealing its child "g-7421.2" of lineage "g-7421" naming parent "g-7421" with members anne.bruun shown as "Anne Bruun" and karin.dahl shown as "Karin Dahl" — anne's opened ring holding "k-0142" and "k-0150", and reader anne.bruun shown as "Anne Bruun" When: present is called Then: one chat, "g-7421" named by "Karin Dahl" — the current revision's members, the reader excluded
A founder alone hears their own name
Given: one sealed record under key id "k-0142" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun", anne's opened ring holding "k-0142", and reader anne.bruun shown as "Anne Bruun" When: present is called Then: one chat, "g-7421" named by "Anne Bruun" — the reader alone remains, and the chat still has somebody to name
A seat's selection holds one lineage only
Given: sealed records — one under key id "k-0163" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun" and sofie.lind shown as "Sofie Lind", one under key id "k-0301" sealing "g-9001" of lineage "g-9001" with members sofie.lind shown as "Sofie Lind", and one under key id "k-0180" sealing "g-7421.2" of lineage "g-7421" naming parent "g-7421" with members anne.bruun shown as "Anne Bruun", sofie.lind shown as "Sofie Lind", and karin.dahl shown as "Karin Dahl" — sofie's opened ring holding "k-0163", "k-0301", and "k-0180", and reader sofie.lind shown as "Sofie Lind" When: revisions of "g-7421" is called Then: the answer is "g-7421" and "g-7421.2", in that order — "g-9001" is another conversation's epoch
The seat's reading is chain order, not arrival order
Given: sealed records fetched child first — one under key id "k-0150" sealing "g-7421.2" of lineage "g-7421" naming parent "g-7421" with members anne.bruun shown as "Anne Bruun" and sofie.lind shown as "Sofie Lind", then one under key id "k-0142" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun" — anne's opened ring holding "k-0142" and "k-0150", and reader anne.bruun shown as "Anne Bruun" When: revisions of "g-7421" is called Then: the answer is "g-7421" then "g-7421.2" — assembled eldest first by parent references, not by the order the records stood
An unknown lineage answers empty
Given: one sealed record under key id "k-0142" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun", anne's opened ring holding "k-0142", and reader anne.bruun shown as "Anne Bruun" When: revisions of "g-5555" is called Then: the answer is empty — no revision belongs to that lineage
A record the ring cannot open is dropped, not presented
Given: sealed records — one under key id "k-0163" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun" and karin.dahl shown as "Karin Dahl", and one under key id "k-0264" sealing "g-7421.2" of lineage "g-7421" — karin's opened ring holding only the GroupKey "k-0163", and reader karin.dahl shown as "Karin Dahl"
When: present is called
Then: one chat is produced — "g-7421" named by "Anne Bruun" — and the record under "k-0264" is dropped without ceremony
A forked lineage is refused at the rail
Given: sealed records — one under key id "k-0142" sealing "g-7421" of lineage "g-7421" with members anne.bruun shown as "Anne Bruun", one under key id "k-0264" sealing "g-7421.4" of lineage "g-7421" naming parent "g-7421", and one under key id "k-0271" sealing "g-7421.4b" of lineage "g-7421" naming parent "g-7421" — anne's opened ring holding "k-0142", "k-0264", and "k-0271", and reader anne.bruun shown as "Anne Bruun"
When: present is called
Then: the presenting fails because two revisions name the parent "g-7421" — a substitution Alarm carries the fork as evidence, at the rail as everywhere