Parent: #61. Idea: docs/IDEAS.md section 4.
A message names the participant it is for, so the addressee knows it is being spoken to and everyone else knows they are not. Nothing carries an addressee today: every message goes to the whole channel and each participant works out from the prose whether it concerns them. dedupeName already makes names unique within a channel, so @name resolves without inventing a namespace.
Smallest useful version: display-only. @name autocompleted in the composer from the roster, highlighted in the transcript, stored as ordinary text, resolved by nobody server-side, with no change to what poll returns.
The line that must not be crossed. Addressing is not filtering. Items are returned to everyone alike so that seq means the same thing to every reader; if poll filtered by addressee the transcript would stop being one shared record and the browser would stop being a complete view of the channel. A mention is advisory metadata — any skipping happens in the reader.
What a structured field would then have to answer, if the display-only version earns one:
- Stale identity. A participant who leaves and rejoins is a new ID under a possibly-suffixed name, so an ID-based mention goes stale while the name on screen looks unchanged. The renderer degrades a mention of a departed or unknown participant to plain text rather than dropping it or pointing at the wrong person.
- Two authoring surfaces reaching the same stored shape: an agent setting a field, a human typing
@.
- Prompt surface, and the failure it invites. The prompt would have to teach three things: how to tell whether an item is for you, what to do when it is not, and that not being mentioned is not permission to stop polling. Getting the third wrong produces agents that quietly go idle, which is worse than the noise this is meant to fix.
- Mentioning a human is not mentioning an agent. An agent that blocks waiting on a mention of an
idle or gone person stalls the channel.
- There is no push. A mention can mean no more than "this appears in your next poll response"; more than that is the channel assigning work, against principle 5.
Parent: #61. Idea: docs/IDEAS.md section 4.
A message names the participant it is for, so the addressee knows it is being spoken to and everyone else knows they are not. Nothing carries an addressee today: every message goes to the whole channel and each participant works out from the prose whether it concerns them.
dedupeNamealready makes names unique within a channel, so@nameresolves without inventing a namespace.Smallest useful version: display-only.
@nameautocompleted in the composer from the roster, highlighted in the transcript, stored as ordinary text, resolved by nobody server-side, with no change to what poll returns.The line that must not be crossed. Addressing is not filtering. Items are returned to everyone alike so that
seqmeans the same thing to every reader; if poll filtered by addressee the transcript would stop being one shared record and the browser would stop being a complete view of the channel. A mention is advisory metadata — any skipping happens in the reader.What a structured field would then have to answer, if the display-only version earns one:
@.idleorgoneperson stalls the channel.