Add a v6 event format with correct depth limits (#2114)

* Add a v6 event format with correct `depth` limits

* Changelog

* numbers are hard
This commit is contained in:
Travis Ralston 2025-03-27 10:23:09 -06:00 committed by GitHub
parent cb6d039c57
commit 71ce620fc0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 85 additions and 17 deletions

View file

@ -0,0 +1 @@
Clarify the maximum `depth` value for room versions 6, 7, 8, 9, 10, and 11.

View file

@ -0,0 +1,4 @@
Events in rooms of this version have the following structure:
{{% definition path="api/server-server/definitions/pdu_v6" %}}

View file

@ -281,7 +281,7 @@ completeness.
### Event format ### Event format
{{% rver-fragment name="v4-event-format" %}} {{% rver-fragment name="v6-event-format" %}}
### State resolution ### State resolution

View file

@ -39,6 +39,13 @@ in [room version 5](/rooms/v5).
[See above](#redactions). [See above](#redactions).
### Event format
{{% added-in v=6 %}} Through enforcement of [Canonical JSON](#canonical-json),
the `depth` limit has been reduced in this room version.
{{% rver-fragment name="v6-event-format" %}}
### Authorization rules ### Authorization rules
{{% added-in v=6 %}} Rule 4, which related specifically to events {{% added-in v=6 %}} Rule 4, which related specifically to events
@ -229,10 +236,6 @@ completeness.
{{% rver-fragment name="v4-event-ids" %}} {{% rver-fragment name="v4-event-ids" %}}
### Event format
{{% rver-fragment name="v4-event-format" %}}
#### Deprecated event content schemas #### Deprecated event content schemas
{{% rver-fragment name="v1-deprecated-formatting-off-spec" %}} {{% rver-fragment name="v1-deprecated-formatting-off-spec" %}}

View file

@ -225,7 +225,7 @@ completeness.
### Event format ### Event format
{{% rver-fragment name="v4-event-format" %}} {{% rver-fragment name="v6-event-format" %}}
#### Deprecated event content schemas #### Deprecated event content schemas

View file

@ -109,7 +109,7 @@ completeness.
### Event format ### Event format
{{% rver-fragment name="v4-event-format" %}} {{% rver-fragment name="v6-event-format" %}}
#### Deprecated event content schemas #### Deprecated event content schemas

View file

@ -74,7 +74,7 @@ completeness.
### Event format ### Event format
{{% rver-fragment name="v4-event-format" %}} {{% rver-fragment name="v6-event-format" %}}
#### Deprecated event content schemas #### Deprecated event content schemas

View file

@ -41,13 +41,6 @@ properties:
type: object type: object
description: The content of the event. description: The content of the event.
example: {"key": "value"} example: {"key": "value"}
depth:
type: integer
description: |-
The maximum depth of the `prev_events`, plus one. Must be less than the
maximum value for an integer (2^63 - 1). If the room's depth is already at
the limit, the depth must be set to the limit.
example: 12
hashes: hashes:
$ref: "event_hash.yaml" $ref: "event_hash.yaml"
signatures: signatures:

View file

@ -28,6 +28,13 @@ allOf:
type: string type: string
description: For redaction events, the ID of the event being redacted. description: For redaction events, the ID of the event being redacted.
example: "$def456:matrix.org" example: "$def456:matrix.org"
depth:
type: integer
description: |-
The maximum depth of the `prev_events`, plus one. Must be less than the
maximum value for an integer (2^63 - 1). If the room's depth is already at
the limit, the depth must be set to the limit.
example: 12
auth_events: auth_events:
type: array type: array
description: |- description: |-

View file

@ -17,6 +17,16 @@ description: A persistent data unit (event) for room version 11 and beyond.
example: example:
$ref: "../examples/pdu_v11.json" $ref: "../examples/pdu_v11.json"
allOf: allOf:
# v11 is the v4 event, but without redacts. # v11 is the v6 event, but without redacts.
- $ref: "components/pdu_base.yaml" - $ref: "components/pdu_base.yaml"
- $ref: "components/auth_events_prev_events_v4.yaml" - $ref: "components/auth_events_prev_events_v4.yaml"
- type: object
properties:
# v6 enforces Canonical JSON and therefore needs a depth limit change
depth:
type: integer
description: |-
The maximum depth of the `prev_events`, plus one. Must be less than the
maximum value for an integer (2^53 - 1). If the room's depth is already at
the limit, the depth must be set to the limit.
example: 12

View file

@ -24,6 +24,13 @@ allOf:
type: string type: string
description: For redaction events, the ID of the event being redacted. description: For redaction events, the ID of the event being redacted.
example: "$def/456+oldevent" example: "$def/456+oldevent"
depth:
type: integer
description: |-
The maximum depth of the `prev_events`, plus one. Must be less than the
maximum value for an integer (2^63 - 1). If the room's depth is already at
the limit, the depth must be set to the limit.
example: 12
auth_events: auth_events:
type: array type: array
items: items:

View file

@ -26,3 +26,10 @@ allOf:
type: string type: string
description: For redaction events, the ID of the event being redacted. description: For redaction events, the ID of the event being redacted.
example: "$def_456-oldevent" example: "$def_456-oldevent"
depth:
type: integer
description: |-
The maximum depth of the `prev_events`, plus one. Must be less than the
maximum value for an integer (2^63 - 1). If the room's depth is already at
the limit, the depth must be set to the limit.
example: 12

View file

@ -0,0 +1,36 @@
# Copyright 2025 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
type: object
title: Persistent Data Unit
description: |-
A persistent data unit (event) for room versions 4, 5, 6, 7, 8, 9 and 10.
example:
$ref: "../examples/pdu_v4.json"
allOf:
- $ref: "components/pdu_base.yaml"
- $ref: "components/auth_events_prev_events_v4.yaml"
- type: object
properties:
redacts:
type: string
description: For redaction events, the ID of the event being redacted.
example: "$def_456-oldevent"
# v6 enforces Canonical JSON and therefore needs a depth limit change
depth:
type: integer
description: |-
The maximum depth of the `prev_events`, plus one. Must be less than the
maximum value for an integer (2^53 - 1). If the room's depth is already at
the limit, the depth must be set to the limit.
example: 12