Conversation
Purpose
The named surface members write into — the case channel as its members think of it. A conversation
belongs to exactly one group lineage and is stable across membership changes: revisions come and go,
the conversation keeps its identity. The channel of the book — the work of carrying a message between
the application and the wire — is something else entirely: not a value in this layer but the seam
below it, the Relay port the transport realises. The two are deliberately distinct names for
deliberately different things.
Attributes
- conversation id: is
Textthat identifies the conversation, such as "conv-7421" - name: is
Textthat carries the name members see, such as "Case 7421" - lineage: is
Textthat names the group lineage whose members may read the conversation, such as "g-7421"
Invariants
- The name is not empty.
- A conversation belongs to exactly one lineage.
Scenarios
A case conversation over its lineage
Given: conversation id "conv-7421", name "Case 7421", and lineage "g-7421" When: a Conversation is created Then: it is accepted and reads back with that id, name, and lineage
A conversation without a name is rejected
Given: conversation id "conv-7421", an empty name, and lineage "g-7421" When: a Conversation is created Then: the creation is rejected because the name is empty