-
Notifications
You must be signed in to change notification settings - Fork 380
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
MSC3267: Reference relations #3267
Changes from all commits
b36c24f
ab551e8
a5a2c61
62b5b0f
6eedd7a
f37834d
2c2d6ae
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# MSC3267: reference relationships | ||
|
||
## Proposal | ||
|
||
This proposal defines a relation type (using | ||
[MSC2674 relations](https://github.com/matrix-org/matrix-doc/pull/2674)) | ||
for events to make a reference to another event. | ||
|
||
A `rel_type` of `m.reference` is defined as a generic way to associate an | ||
event with another event. As a bundle, `m.reference` relations appear as | ||
an object with a single `chunk` field. The `chunk` is an array of objects | ||
with a single `event_id` field for all the child events which `m.reference` | ||
the parent. | ||
Comment on lines
+9
to
+13
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is just the first "page" of results, if there's a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps we can just remove the word "all" in this sentence to eliminate any subtle confusion. |
||
|
||
There are no implied semantics by a reference relation: the feature or event | ||
type which makes use of the `rel_type` should specify what sort of semantic | ||
behaviour there is, if any. For example, describing that a poll response event | ||
*references* the poll start event, or that a location update *references* a | ||
previous location update. | ||
|
||
Reference relations are used by [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241) | ||
to tie all events together for the same verification request. | ||
|
||
For instance, an `m.room.message` which references an existing event | ||
would look like: | ||
|
||
```json5 | ||
{ | ||
// Unimportant fields omitted | ||
"type": "m.room.message", | ||
"content": { | ||
"msgtype": "m.text", | ||
"body": "i <3 shelties", | ||
"m.relates_to": { | ||
"rel_type": "m.reference", | ||
"event_id": "$another_event_id" | ||
} | ||
} | ||
} | ||
``` | ||
|
||
## Server aggregation | ||
|
||
[MSC2674](https://github.com/matrix-org/matrix-doc/pull/2674) states | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this is MSC2675 now? |
||
that values for `rel_type` should define how the server should aggregate the | ||
`rel_type`. For `m.reference`, child events are bundled to appear as follows | ||
under `m.relations`: | ||
|
||
```json5 | ||
{ | ||
"m.reference": { | ||
"chunk": [ | ||
{"event_id": "$one"}, | ||
{"event_id": "$two"}, | ||
{"event_id": "$three"} | ||
] | ||
} | ||
} | ||
``` | ||
|
||
Note that currently only the `event_id` is noted in the chunk, however a future | ||
MSC might add more fields. | ||
|
||
## Limitations | ||
|
||
Different subtypes of references could be defined through additional fields on | ||
the `m.relates_to` object, to distinguish between other forms of semantic behaviour | ||
independent of type (hypothetical threads, replies, etc if we didn't have a system | ||
for them already). This MSC doesn't attempt to define these subtypes. | ||
|
||
This relation cannot be used in conjunction with another relation due to `rel_type` | ||
being a single value. This is known and unfortunately not resolved by this MSC. | ||
A future MSC might address the concern. | ||
|
||
## Edge Cases | ||
|
||
turt2live marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Can you reference an event which doesn't have logical meaning? Eg to a [reaction](https://github.com/matrix-org/matrix-doc/pull/2677)? | ||
* Yes, at the protocol level. But you shouldn't expect clients to do anything | ||
useful with it. | ||
* The relationship is effectively pointless, so the event would appear as though | ||
there was no reference relationship. | ||
|
||
Do we need to support retrospective references? | ||
* For something like "m.duplicate" to retrospectively declare that one event | ||
dupes another, we might need to bundle two-levels deep (subject+ref and then | ||
ref+target). We can cross this bridge when we get there though, as another | ||
aggregation type | ||
|
||
## Unstable prefix | ||
|
||
Unfortunately not applicable - this MSC was used in production and appears in the | ||
specified version of the [key verification framework](https://spec.matrix.org/v1.2/client-server-api/#key-verification-framework). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be useful to link to MSC2675 here, which defines bundling related events.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, we can probably just remove the sentences about server-side aggregation given the information is repeated below under the "Server aggregation" header?