@@ -137,16 +137,22 @@ either a thread root's event ID or `main` for the main timeline.
137
137
138
138
Threading introduces a concept of multiple conversations being held in the same
139
139
room and thus deserve their own read receipts and notification counts. An event is
140
- considered to be "in a thread" if it meets any of the following criteria:
141
- * It has a ` rel_type ` of ` m.thread ` .
142
- * It has child events with a ` rel_type ` of ` m.thread ` (in which case it'd be the
143
- thread root).
144
- * Following the event relationships, it has a parent event which qualifies for
145
- one of the above. Implementations should not recurse infinitely, though: a
146
- maximum of 3 hops is recommended to cover indirect relationships.
147
-
148
- Events not in a thread but still in the room are considered to be part of the
149
- "main timeline", or a special thread with an ID of ` main ` .
140
+ considered to be "in a thread" if:
141
+
142
+ * It has a rel_type of m.thread, or
143
+ * It has a parent event with this rel_type, or a parent of a parent, or further
144
+ up the chain of relations. (Implementations should not recurse to arbitrary
145
+ depth: a maximum of 3 hops is recommended to cover indirect relationships.)
146
+
147
+ Events not in a thread but still in the room are considered to be in the "main
148
+ timeline". Threaded receipts for the main timeine use a special thread ID of
149
+ ` main ` .
150
+
151
+ Thread roots are considered to be in the main timeline, as are events that are
152
+ related to a thread root via non-thread relations. Note that clients providing a
153
+ single-thread view will probably want to include thread roots and some of their
154
+ child events (e.g. reactions) in that view, even though from a receipt point of
155
+ view they are not part of that thread.
150
156
151
157
The following is an example DAG for a room, with dotted lines showing event
152
158
relationships and solid lines showing topological ordering.
0 commit comments