diff --git a/docs/specification.rst b/docs/specification.rst index 07c57f9dda..6dcdea3060 100644 --- a/docs/specification.rst +++ b/docs/specification.rst @@ -118,7 +118,7 @@ the account and looks like:: The ``localpart`` of a user ID may be a user name, or an opaque ID identifying this user. They are case-insensitive. -.. TODO +.. TODO-spec - Need to specify precise grammar for Matrix IDs A "Home Server" is a server which provides C-S APIs and has the ability to @@ -366,7 +366,7 @@ events which are visible to the client will appear in the event stream. When the request returns, an ``end`` token is included in the response. This token can be used in the next request to continue where the client left off. -.. TODO +.. TODO-spec How do we filter the event stream? Do we ever return multiple events in a single request? Don't we get lots of request setup RTT latency if we only do one event per request? Do we ever support streaming @@ -704,7 +704,7 @@ Rooms Creation -------- .. TODO kegan - - TODO: Key for invite these users? + - TODO-spec: Key for invite these users? To create a room, a client has to use the |createRoom|_ API. There are various options which can be set when creating a room: @@ -799,7 +799,7 @@ Modifying aliases .. NOTE:: This section is a work in progress. -.. TODO kegan +.. TODO-doc kegan - path to edit aliases - PUT /directory/room/ { room_id : foo } - GET /directory/room/ { room_id : foo, servers: [a.com, b.com] } @@ -811,11 +811,11 @@ Permissions .. NOTE:: This section is a work in progress. -.. TODO kegan - - TODO: What is a power level? How do they work? Defaults / required levels for X. How do they change +.. TODO-doc kegan + - What is a power level? How do they work? Defaults / required levels for X. How do they change as people join and leave rooms? What do you do if you get a clash? Examples. - - TODO: List all actions which use power levels (sending msgs, inviting users, banning people, etc...) - - TODO: Room config - what is the event and what are the keys/values and explanations for them. + - List all actions which use power levels (sending msgs, inviting users, banning people, etc...) + - Room config - what is the event and what are the keys/values and explanations for them. Link through to respective sections where necessary. How does this tie in with permissions, e.g. give example of creating a read-only room. @@ -845,7 +845,7 @@ defined in the following state events: Joining rooms ------------- -.. TODO kegan +.. TODO-doc kegan - TODO: What does the home server have to do to join a user to a room? Users need to join a room in order to send and receive events in that room. A @@ -883,7 +883,7 @@ received an invite. Inviting users -------------- -.. TODO kegan +.. TODO-doc kegan - Can invite users to a room if the room config key TODO is set to TODO. Must have required power level. - Outline invite join dance. What is it? Why is it required? How does it work? - What does the home server have to do? @@ -921,7 +921,7 @@ See the `Room events`_ section for more information on ``m.room.member``. Leaving rooms ------------- -.. TODO kegan +.. TODO-spec kegan - TODO: Grace period before deletion? - TODO: Under what conditions should a room NOT be purged? @@ -1076,7 +1076,7 @@ presence events will also be returned. There are two APIs provided: - |/rooms//initialSync|_ : A sync scoped to a single room. Presents room and event information for this room only. -.. TODO kegan +.. TODO-doc kegan - TODO: JSON response format for both types - TODO: when would you use global? when would you use scoped? @@ -1098,7 +1098,7 @@ There are several APIs provided to ``GET`` events for a room: Response format: ``[ { state event }, { state event }, ... ]`` Example: - TODO + TODO-doc |/rooms//members|_ @@ -1107,7 +1107,7 @@ There are several APIs provided to ``GET`` events for a room: Response format: ``{ "start": "", "end": "", "chunk": [ { m.room.member event }, ... ] }`` Example: - TODO + TODO-doc |/rooms//messages|_ Description: @@ -1117,16 +1117,16 @@ There are several APIs provided to ``GET`` events for a room: Response format: ``{ "start": "", "end": "" }`` Example: - TODO + TODO-doc |/rooms//initialSync|_ Description: Get all relevant events for a room. This includes state events, paginated non-state events and presence events. Response format: - `` { TODO } `` + `` { TODO-doc } `` Example: - TODO + TODO-doc Redactions ---------- @@ -1153,7 +1153,7 @@ Room Events .. NOTE:: This section is a work in progress. -.. TODO dave? +.. TODO-doc dave? - voip events? This specification outlines several standard event types, all of which are @@ -1232,7 +1232,7 @@ prefixed with ``m.`` Example: ``{ "join_rule": "public" }`` Description: - TODO : Use docs/models/rooms.rst + TODO-doc : Use docs/models/rooms.rst ``m.room.power_levels`` Summary: @@ -1480,8 +1480,9 @@ the following: - ``offline`` : The user is not connected to an event stream. - ``free_for_chat`` : The user is generally willing to receive messages moreso than default. - - ``hidden`` : TODO. Behaves as offline, but allows the user to see the - client state anyway and generally interact with client features. + - ``hidden`` : Behaves as offline, but allows the user to see the client + state anyway and generally interact with client features. (Not yet + implemented in synapse). This basic ``presence`` field applies to the user as a whole, regardless of how many client devices they have connected. The home server should synchronise @@ -1509,7 +1510,7 @@ Transmission .. NOTE:: This section is a work in progress. -.. TODO: +.. TODO-doc: - Transmitted as an EDU. - Presence lists determine who to send to. @@ -1534,17 +1535,23 @@ user, either: In the latter case, this allows for clients to display some minimal sense of presence information in a user list for a room. + Typing notifications ==================== .. NOTE:: This section is a work in progress. -.. TODO Leo +.. TODO-doc Leo - what is the event type. Are they bundled with other event types? If so, which. - what are the valid keys / values. What do they represent. Any gotchas? - Timeouts. How do they work, who sets them and how do they expire. Does one have priority over another? Give examples. +.. TODO-spec Leo + - actually define the client-server API; the only thing that currently + exists is entirely server-server + + Voice over IP ============= Matrix can also be used to set up VoIP calls. This is part of the core @@ -1681,12 +1688,13 @@ a call and the other party had accepted. Thusly, any media stream that had been setup for use on a call should be transferred and used for the call that replaces it. + Profiles ======== .. NOTE:: This section is a work in progress. -.. TODO +.. TODO-doc - Metadata extensibility - Changing profile info generates m.presence events ("presencelike") - keys on m.presence are optional, except presence which is required @@ -1712,9 +1720,10 @@ Identity .. NOTE:: This section is a work in progress. -.. TODO Dave +.. TODO-doc Dave - 3PIDs and identity server, functions + Federation ========== @@ -1884,10 +1893,9 @@ All PDUs have: The maximum depth of the previous PDUs plus one. -.. TODO paul - [[TODO(paul): Update this structure so that 'pdu_id' is a two-element - [origin,ref] pair like the prev_pdus are]] - +.. TODO-spec paul + - Update this structure so that 'pdu_id' is a two-element [origin,ref] pair + like the prev_pdus are For state updates: @@ -1967,18 +1975,10 @@ keys exist to support this: {..., "is_state":true, - "state_key":TODO - "power_level":TODO - "prev_state_id":TODO - "prev_state_origin":TODO} - -.. TODO paul - [[TODO(paul): At this point we should probably have a long description of how - State management works, with descriptions of clobbering rules, power levels, etc - etc... But some of that detail is rather up-in-the-air, on the whiteboard, and - so on. This part needs refining. And writing in its own document as the details - relate to the server/system as a whole, not specifically to server-server - federation.]] + "state_key":TODO-doc + "power_level":TODO-doc + "prev_state_id":TODO-doc + "prev_state_origin":TODO-doc} EDUs, by comparison to PDUs, do not have an ID, a context, or a list of "previous" IDs. The only mandatory fields for these are the type, origin and @@ -2005,7 +2005,7 @@ For active pushing of messages representing live activity "as it happens":: PUT .../send/:transaction_id/ Body: JSON encoding of a single Transaction - Response: TODO + Response: TODO-doc The transaction_id path argument will override any ID given in the JSON body. The destination name will be set to that of the receiving server itself. Each @@ -2068,7 +2068,7 @@ Backfilling .. NOTE:: This section is a work in progress. -.. TODO +.. TODO-doc - What it is, when is it used, how is it done SRV Records @@ -2076,9 +2076,10 @@ SRV Records .. NOTE:: This section is a work in progress. -.. TODO +.. TODO-doc - Why it is needed + Security ======== @@ -2119,7 +2120,7 @@ victim would then include in their view of the chatroom history. Other servers in the chatroom would reject the invalid messages and potentially reject the victims messages as well since they depended on the invalid messages. -.. TODO +.. TODO-spec Track trustworthiness of HS or users based on if they try to pretend they haven't seen recent events, and fake a splitbrain... --M @@ -2227,7 +2228,7 @@ standard error response of the form:: The ``retry_after_ms`` key SHOULD be included to tell the client how long they have to wait in milliseconds before they can try again. -.. TODO +.. TODO-spec - Surely we should recommend an algorithm for the rate limiting, rather than letting every homeserver come up with their own idea, causing totally unpredictable performance over federated rooms? @@ -2236,30 +2237,33 @@ have to wait in milliseconds before they can try again. - Lawful intercept + Key Escrow TODO Mark + Policy Servers ============== .. NOTE:: This section is a work in progress. -.. TODO +.. TODO-spec We should mention them in the Architecture section at least... - + + Content repository ================== .. NOTE:: This section is a work in progress. -.. TODO +.. TODO-spec - path to upload - format for thumbnail paths, mention what it is protecting against. - content size limit and associated M_ERROR. + Address book repository ======================= .. NOTE:: This section is a work in progress. -.. TODO +.. TODO-spec - format: POST(?) wodges of json, some possible processing, then return wodges of json on GET. - processing may remove dupes, merge contacts, pepper with extra info (e.g. matrix-ability of contacts), etc.