Optionalabsent_The number on the other side of a 1:1 nobody else is in (MICA-350): the phone that left it, or was taken out of it by a privacy delete, or a number nobody held when the thread was started. No live member is there to carry it, so without this the reader sees no number at all. Absent on a group, a line thread, and a 1:1 both sides are still in.
Optionalarchived_When the caller archived it for themselves; null while it is in the inbox.
Optionallast_The newest live message, as much of it as the inbox row draws.
OptionalnameA name a member chose (a group's), or a line's label. Never a directory name for a number.
Optionalparticipant_How many live members the thread has, the caller included.
OptionalparticipantsOptionalstatusOptionaltargetOptionalunread_
The conversation and message shapes
Facets['messages']hands an app. MICA-172 — see./accounts.ts.Both extend a
@mica/shared/typesrow the SDK already imports, so moving them in acquired no new dependency: the wire shape stays shared withserver/, and what is added here is the UI's own projection of it.Nobody else's identity is in either (MICA-339). A conversation carries no creator
citizenidand noparticipant_a/participant_b; each ofparticipantsis the number on the phone in the thread (phone) and whether it is the reader's own (self); a message says whether the reader sent it (mine) and which member did (sender_id, aparticipants[].id) instead of carrying the sender'scitizenid. A name is the reader's own contact for that number, or the number.