Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MSC2285: Private read receipts #2285

Merged
merged 30 commits into from
Jul 17, 2022
Merged
Changes from 3 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
97c3c03
What if we let people hide their read receipts?
turt2live Sep 6, 2019
a4e5b45
Add unstable prefix
turt2live May 25, 2021
40d2aa2
Update proposals/2285-hidden-read-receipts.md
turt2live Aug 10, 2021
4a77139
Use a separate `receiptType` for hidden read receipts (#3750)
SimonBrandner Mar 3, 2022
94fdb2a
Clarify notification behaviour and other things
SimonBrandner May 4, 2022
2cc2ed9
Mention adding `m.fully_read` to `/receipt`
SimonBrandner May 4, 2022
c895850
Rename MSC to `Private read receipts`
SimonBrandner May 5, 2022
84d18d0
Apply suggestions from review
SimonBrandner Jun 28, 2022
55e2060
Apply suggestions from review
SimonBrandner Jun 28, 2022
de850aa
Remove trailing comma
SimonBrandner Jun 28, 2022
f551a77
Apply suggestions from review
SimonBrandner Jun 28, 2022
927b622
Apply suggestions from review
SimonBrandner Jun 28, 2022
18f49eb
`r0` -> `v3`
SimonBrandner Jun 28, 2022
904582f
Describe how to determine server support while stable
SimonBrandner Jul 1, 2022
287c503
Be more precise about the failure mode
SimonBrandner Jul 1, 2022
37f1d53
Improve wording
SimonBrandner Jul 1, 2022
f5c2659
Improve wording
SimonBrandner Jul 1, 2022
887cc0a
Improve wording
SimonBrandner Jul 1, 2022
e8ba93f
Be more explicit
SimonBrandner Jul 1, 2022
9eedb28
Be more explicit around server support
SimonBrandner Jul 2, 2022
8b1b73a
Simplify text
SimonBrandner Jul 4, 2022
4ad1c10
Be more explicit about detecting server support
SimonBrandner Jul 12, 2022
714695c
Add note about consistency
SimonBrandner Jul 12, 2022
aa41d84
Clarify how exactly to detect support
turt2live Jul 12, 2022
5c891d0
Try to fix clarity around precedence
turt2live Jul 12, 2022
252474a
Be clearer about alternatives
SimonBrandner Jul 13, 2022
33ba33c
Add sentence about `/receipt` federation
SimonBrandner Jul 13, 2022
dfd4c9f
Merge remote-tracking branch 'upstream/travis/msc/hidden-read-receipt…
SimonBrandner Jul 13, 2022
23f4a2a
Be more explicit about adding `m.read.private` to `/receipt`
SimonBrandner Jul 13, 2022
839c198
Fix wrong RR type
SimonBrandner Jul 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions proposals/2285-hidden-read-receipts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# MSC2285: Hidden read receipts
turt2live marked this conversation as resolved.
Show resolved Hide resolved

Currently users must send read receipts in order to affect their notification counts, which
alerts to other people that the user has read their message. For primarily privacy reasons,
it may be desirable to users to not advertise to others that they've read a message.

## Proposal
turt2live marked this conversation as resolved.
Show resolved Hide resolved

When sending a `m.read` receipt, a `m.hidden: true` flag can be included (optional) to tell
turt2live marked this conversation as resolved.
Show resolved Hide resolved
the server to not send it to anyone else. This allows the user to affect their notification
counts without advertising that they've read the message. `m.hidden` defaults to `false`.

For example:
```
POST /_matrix/client/r0/rooms/!a:example.org/receipt/m.read/$123
{
"m.hidden": true
turt2live marked this conversation as resolved.
Show resolved Hide resolved
}
```

SimonBrandner marked this conversation as resolved.
Show resolved Hide resolved
The same applies to read markers (which allow you to update your read receipt):
```
POST /_matrix/client/r0/rooms/!a:example.org/read_markers
{
"m.fully_read": "$123",
"m.read": "$123",
"m.hidden": true
turt2live marked this conversation as resolved.
Show resolved Hide resolved
}
```

Note that fully read markers are not sent to other users and are local to the user sending them.
Therefore, no changes are required or implied by `m.hidden` for `m.fully_read` - just `m.read`.

Servers processing read receipts MUST NOT send hidden receipts to any other user than the sender.
Servers MUST NOT send hidden receipts over federation to any server.
turt2live marked this conversation as resolved.
Show resolved Hide resolved

## Tradeoffs

Clients which support read receipts would end up rendering the user's receipt as jumping down
when they send a message. This is no different from how IRC and similarly bridged users are
perceived today.
turt2live marked this conversation as resolved.
Show resolved Hide resolved

## Security considerations

Servers could ignore the flag without telling the user. The user must already trust the homeserver
to a degree however, and the methods of notifying the user to the problem are difficult to
implement. Users can always run their own homeservers to ensure it behaves correctly.

## Why not X kind of EDUs?
turt2live marked this conversation as resolved.
Show resolved Hide resolved

In short: don't send those EDUs. Typing notifications, device messages, etc can all be mitigated
by simply not calling the endpoints. Read receipts have a side effect of causing stuck
notifications for users however, which is why they are solved here.

## Unstable prefix

While this MSC is not considered stable, implementations should use `org.matrix.msc2285` as a namespace
for identifiers. `m.hidden` becomes `org.matrix.msc2285.hidden` for example.

To detect server support, clients can either rely on the spec version (when stable) or the presence of
a `org.matrix.msc2285` flag in `unstable_features` on `/versions`. Clients are recommended to check for
server support to ensure they are not misleading the user about "hidden read receipts".