- Shipped
- September 7, 2026 at 2:43 AM UTC
- Author
- Kamo
- Commit
- a59e9ab
Two screens, one idea: a phone line usually is not one person's. MEMBER SETTINGS → PHONE A card modelled on the Email tab's mailbox list, because the two screens answer the same question about different things and nobody should have to learn a second mental model. What it does NOT copy is the word "primary". A mailbox belongs to a person; a support line is answered by four, and the singular fact is not ownership but where an incoming text lands — so the column is "Replies", the state is "Comes here", and the action is "Send replies here". Two facts a flat list cannot show are given their own columns: whether the line can text at all — the state that has been silently blocking sends — and how many other people hold it. The empty state distinguishes "your org has numbers, pick one" from "your org has none", and only the second sends anybody to another screen. THE COMPOSE WINDOW A "Send from" selector that renders NOTHING unless the member holds more than one line. A control that is always present and usually answers itself makes the common case worse to serve the rare one, so a one-line member sees the window exactly as it has always been. When it does appear, each option says what is actually being weighed: whether replies come back to you, and who else is on that line. A line that cannot text is shown but disabled — hiding it would leave somebody hunting for a number they know they have. No choice is sent unless the member made one. The server picks their default otherwise, which is what every one-line member already had, and a number they do not hold is refused rather than substituted — lines are shared, so quietly sending from a different one puts the reply in a thread nobody is watching. SmsWindowIdentity's E.164 assertion now checks the first argument rather than the whole call, so the wire format and the send-from line stay separable concerns.