Skip to content

Add the delivered client-tag specification#346

Open
ghost wants to merge 1 commit into
masterfrom
unknown repository
Open

Add the delivered client-tag specification#346
ghost wants to merge 1 commit into
masterfrom
unknown repository

Conversation

@ghost

@ghost ghost commented Nov 4, 2018

Copy link
Copy Markdown

Comment thread client-tags/delivered.md
## Format
`delivered` is sent as a [`TAGMSG`][tags] and MUST include the [`draft/msgid`][id] of the original message as the client tag parameter.

Clients MUST send a `delivered` tag immediately upon receipt of the message, including the [`draft/msgid`][id] as the client tag parameter. If the message is delivered and read at the same time, clients MAY send both the `delivered` and `read` tags in the same `TAGMSG` or send `delivered` followed by `read` as separate `TAGMSG`s. Clients SHOULD NOT elect to send only a `read` tag and MUST NOT send `read` before `delivered`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes existing clients non-conformant, because they don't send the delivered tag which they MUST send. Replace with SHOULD?

@jesopo

jesopo commented Nov 5, 2018

Copy link
Copy Markdown

#python on freenode almost always has 1700+ people in it; does that mean I'm to expect 1700+ delivered TAGMSGs to every message I send? Same goes for #347

Comment thread client-tags/delivered.md
The final version of the specification will use the unprefixed tag name.

## Description
The specification includes the `delivered` client tag for message tracking. Theis tag provides for delivery receipts, and enables users to know when and by whom a message has been delivered to.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/Theis/This/

s/when and by whom a message has been delivered to/when and to whom a message has been delivered/

Comment thread client-tags/delivered.md
## Description
The specification includes the `delivered` client tag for message tracking. Theis tag provides for delivery receipts, and enables users to know when and by whom a message has been delivered to.

For the purpose of this specification, the term "delivery receipt" synonymous with the use of the `delivered` client tag.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"delivery receipt" is synonymous

Comment thread client-tags/delivered.md
## Format
`delivered` is sent as a [`TAGMSG`][tags] and MUST include the [`draft/msgid`][id] of the original message as the client tag parameter.

Clients MUST send a `delivered` tag immediately upon receipt of the message, including the [`draft/msgid`][id] as the client tag parameter. If the message is delivered and read at the same time, clients MAY send both the `delivered` and `read` tags in the same `TAGMSG` or send `delivered` followed by `read` as separate `TAGMSG`s. Clients SHOULD NOT elect to send only a `read` tag and MUST NOT send `read` before `delivered`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are the arguments against allowing read to be sent without first sending delivered? The client must necessarily have received a message in order to have read it, after all. Sending read implies delivered.

@dgw

dgw commented Nov 5, 2018

Copy link
Copy Markdown
Contributor

@jesopo In all likelihood, this tag would never be activated on huge public channels. The draft itself says it's intended for situations where all users know each other, not large channels of unknown users.

So yes, you would expect a huge flood of delivered messages, if enabled on a large channel like #python, but the spec isn't intended for use in those cases.

@jesopo

jesopo commented Nov 5, 2018

Copy link
Copy Markdown

@jesopo In all likelihood, this tag would never be activated on huge public channels. The draft itself says it's intended for situations where all users know each other, not large channels of unknown users.

So yes, you would expect a huge flood of delivered messages, if enabled on a large channel like #python, but the spec isn't intended for use in those cases.

So how are we going to communicate to clients that they should/shouldn't send delivered on a per-channel basis?

@jwheare

jwheare commented Nov 5, 2018

Copy link
Copy Markdown
Member

One option would be to require clients to have a configurable limit on the size of a channel in which these notifications are sent. This would allow for different community norms to dictate what’s a “sensible” limit while forcing clients to not just always send these blindly but actually consider how the impact scales up.

Another option is to let servers process and filter these tags out, either automatically on a global config basis and/or with a channel mode. This strays a bit away from the benefit of c2c tags, but that might not be an issue.

These options aren’t necessarily mutually exclusive.

Even with no server filtering, chan/server ops can use standard moderation tools to deal with abusive, rude, or broken clients.

@jesopo

jesopo commented Nov 8, 2018

Copy link
Copy Markdown

If we leave it up to the server to just ignore them in certain circumstances, servers are still going to be hit with a LOT of data in big channels that it will just dispose of. If we don't let the server decide when a channel is too big, we'll have channels where only half the channel replies when the other half doesn't.

I'd much more prefer a way for the server to tell clients when they join and when the threshold is hit whether or not the channel should have delivered TAGMSGs send to it - this would limit the amount of bunk data sent to the server and synchronise all the clients in the channel.

@jesopo

jesopo commented Feb 14, 2019

Copy link
Copy Markdown

can I send delivered and read (#347) in the same TAGMSG? only thing that really makes sense for a bot.

@jwheare

jwheare commented Feb 14, 2019

Copy link
Copy Markdown
Member

Sure, but I’m still not sure it’s a great idea to send on channels.

@jesopo

jesopo commented Feb 14, 2019

Copy link
Copy Markdown

I agree.

Added a nice small implementation of this in bitbot-irc/bitbot@6a67c37d that does both +draft/delivered & +draft/read in one TAGMSG on private PRIVMSG and NOTICE

@jesopo

jesopo commented Feb 14, 2019

Copy link
Copy Markdown

I still think that we can only support this in-channel if the server tells clients when they should stop sending delivered and read - not sure this is worth the fuss when this only seems useful (to me) when it's a one-to-one conversation.

@edk0

edk0 commented Mar 4, 2019

Copy link
Copy Markdown
Contributor

I believe the amounts of data involved would be manageable for even relatively large channels if the proposal were modified to enable server-side aggregation of delivery messages

@jesopo

jesopo commented Mar 4, 2019

Copy link
Copy Markdown

server aggregation gets a 👍 from me but I think that will need a slightly larger conversation than is in-scope for this PR - as I understand it servers mostly ignore the content of +client tags and pass them through.

@Herringway

Copy link
Copy Markdown

Having to reply to every individual message makes this difficult to recommend for channel usage, being able to specify ranges instead would make this easier. read messages in channels would be much more reasonable with that ability, though delivered messages would still likely generate a lot of traffic... perhaps sending only read messages to channels should be allowed? I can see that possibly being useful for an extension to CHATHISTORY in the future.

@emersion

emersion commented Jul 21, 2020

Copy link
Copy Markdown
Contributor

Note: a server could auto-send a delivered tag after a PONG if a client doesn't support sending those. Would need a CAP to allow this.

-> @msgid=42 PRIVMSG #ch :hi
-> PING 42
<- PONG 42
# Broadcast to other clients:
-> @+draft/delivered=42 :nick!ident@host TAGMSG #ch

@slingamn

Copy link
Copy Markdown
Contributor

It's not clear to me from the spec how this is supposed to work with channels. For a channel message, does the delivery-receipt TAGMSG target the channel, or the sender of the original message only? If the first, that's an O(n^2) blowup in messages (1 initial PRIVMSG, n delivery receipts from the channel participants, each of which has to be relayed to n recipients). Server-side aggregation could mitigate this, but I don't like the idea of forcing servers to implement business logic for a specific client-only tag on pain of severe performance problems.

It also seems to me that an important part of the rationale for this is made moot by CHATHISTORY:

The ability to send delivery receipts can also prove useful when connections are unstable and some messages may be dropped prior to reaching their intended target.

@NoSuck

NoSuck commented Oct 18, 2020

Copy link
Copy Markdown

Imagine that the comment you now read never actually reached GitHub servers and was therefore never posted. Now imagine that my web browser alone displayed the comment as if it had been posted. That is the current state of affairs with IRC. If v3 is to fix anything, I hope it will be this gaping, fundamental hole—not only for small channels but for all.

@emersion

Copy link
Copy Markdown
Contributor

The "delivered" tag won't fix this. Instead, the existing echo-message and labeled-response extensions can.

@jwheare

jwheare commented Feb 25, 2021

Copy link
Copy Markdown
Member

There was strong concensus in the 24 Feb 2021 meeting that this should definitely be restricted to PMs only, and removed from the roadmap pending further implementation interest.

@jwheare jwheare removed this from the Roadmap milestone Feb 25, 2021
@ircv3 ircv3 temporarily blocked fo1981 Apr 12, 2022
@ircv3 ircv3 deleted a comment from fo1981 Apr 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants