@@ -408,41 +408,9 @@ development or testing data.
408408that a particular MSC works) do not have to follow this process.
409409
4104101 . Have an idea for a feature.
411- 1 . Implement the feature using unstable endpoints, vendor prefixes, and
412- unstable feature flags as appropriate.
413- - When using unstable endpoints, they MUST include a vendor
414- prefix. For example:
415- ` /_matrix/client/unstable/com.example/login ` . Vendor prefixes
416- throughout Matrix always use the Java package naming convention.
417- The MSC for the feature should identify which preferred vendor
418- prefix is to be used by early adopters.
419- - Note that unstable namespaces do not automatically inherit
420- endpoints from stable namespaces: for example, the fact that
421- ` /_matrix/client/r0/sync ` exists does not imply that
422- ` /_matrix/client/unstable/com.example/sync ` exists.
423- - If the client needs to be sure the server supports the feature,
424- an unstable feature flag that MUST be vendor prefixed is to be
425- used. This kind of flag shows up in the ` unstable_features `
426- section of ` /versions ` as, for example, ` com.example.new_login ` .
427- The MSC for the feature should identify which preferred feature
428- flag is to be used by early adopters.
429- - When using this approach correctly, the implementation can
430- ship/release the feature at any time, so long as the
431- implementation is able to accept the technical debt that results
432- from needing to provide adequate backwards and forwards
433- compatibility. The implementation MUST support the flag (and
434- server-side implementation) disappearing and be generally safe
435- for users. Note that implementations early in the MSC review
436- process may also be required to provide backwards compatibility
437- with earlier editions of the proposal.
438- - If the implementation cannot support the technical debt (or if
439- it's impossible to provide forwards/backwards compatibility -
440- e.g. a user authentication change which can't be safely rolled
441- back), the implementation should not attempt to implement the
442- feature and should instead wait for a spec release.
443- - If at any point after early release, the idea changes in a
444- backwards-incompatible way, the feature flag should also change
445- so that implementations can adapt as needed.
411+ 1 . Implement the feature using [ unstable endpoints, vendor prefixes, and
412+ unstable feature flags] ( #unstable-endpoints-features-and-vendor-prefixes )
413+ as appropriate.
4464141 . In parallel, or ahead of implementation, open an MSC and solicit
447415 review per above.
4484161 . Before FCP can be called, the Spec Core Team will require evidence
@@ -452,10 +420,7 @@ that a particular MSC works) do not have to follow this process.
452420 forwards/backwards compatibility concerns mentioned here.
4534211 . The FCP process is completed, and assuming nothing is flagged the
454422 MSC lands.
455- 1 . Implementations can now switch to using stable prefixes
456- (for example, for an endpoint, moving from
457- ` /unstable/org.matrix.mscxxxx/frobnicate `
458- to ` /v1/frobnicate ` ), assuming that the change
423+ 1 . Implementations can now switch to using stable prefixes, assuming that the change
459424 is backwards compatible with older implementations. In the rare occasion
460425 where backwards compatibility is not possible without a new spec release,
461426 implementations should continue to use unstable prefixes.
@@ -471,13 +436,6 @@ that a particular MSC works) do not have to follow this process.
471436 started supporting the new spec release, some noise should be raised
472437 in the general direction of the implementation.
473438
474- {{% boxes/note %}}
475- MSCs MUST still describe what the stable endpoints/feature looks like
476- with a note towards the bottom for what the unstable feature
477- flag/prefixes are. For example, an MSC would propose ` /_matrix/client/r0/new/endpoint ` , not `/_ matrix/client/unstable/
478- com.example/new/endpoint`.
479- {{% /boxes/note %}}
480-
481439In summary:
482440
483441- Implementations MUST NOT use stable endpoints before the MSC has
@@ -489,14 +447,83 @@ In summary:
489447- Implementations SHOULD be wary of the technical debt they are
490448 incurring by moving faster than the spec.
491449- The vendor prefix is chosen by the developer of the feature, using
492- the Java package naming convention. The foundation's preferred
493- vendor prefix is ` org.matrix ` .
450+ the Java package naming convention.
494451- The vendor prefixes, unstable feature flags, and unstable endpoints
495452 should be included in the MSC, though the MSC MUST be written in a
496453 way that proposes new stable endpoints. Typically this is solved by
497454 a small table at the bottom mapping the various values from stable
498455 to unstable.
499456
457+ #### Unstable endpoints, features and vendor prefixes
458+
459+ Unstable endpoints MUST use ` /unstable ` as the endpoint version and a
460+ vendor prefix in Java package naming format. For example:
461+ ` /_matrix/client/unstable/org.matrix.mscxxxx/login ` . The foundation's
462+ preferred vendor prefix is ` org.matrix ` .
463+
464+ Note that unstable namespaces do not automatically inherit endpoints from
465+ stable namespaces: for example, the fact that ` /_matrix/client/v3/sync `
466+ exists does not imply that ` /_matrix/client/unstable/org.matrix.mscxxxx/sync `
467+ exists.
468+
469+ Vendor prefixes MUST also be used for:
470+
471+ - New parameters on existing endpoints. For example:
472+ ` /_matrix/client/v3/publicRooms?org.matrix.mscxxxx.ordered_by=member_count ` .
473+ - New properties in existing JSON objects. For example:
474+
475+ ``` json
476+ {
477+ "avatar_url" : " mxc://matrix.org/SDGdghriugerRg" ,
478+ "displayname" : " Alice Margatroid" ,
479+ "org.matrix.mscxxxx.phone" : [{
480+ "type" : " landline" ,
481+ "number" : " +1-206-555-7000"
482+ }],
483+ ...
484+ }
485+ ```
486+ - New values for existing parameters or properties. For example:
487+
488+ ```json
489+ {
490+ "errcode" : " ORG.MATRIX.MSCXXXX.M_INVALID_EMAIL" ,
491+ "error" : " The email address you provided is invalid."
492+ }
493+ ```
494+
495+ If the client needs to be sure the server supports the feature, an
496+ unstable feature flag that MUST also be vendor prefixed is to be used.
497+ This flag shows up in the `unstable_features` section of
498+ [`/_matrix/client/versions` ](/client-server-api/#get_matrixclientversions)
499+ as, for example, `org.matrix.mscxxxx.new_login`.
500+
501+ {{% boxes/note % }}
502+ MSCs MUST still describe what the stable endpoints/feature looks like
503+ with a note towards the bottom for what the unstable feature
504+ flag/prefixes are. For example, an MSC would propose `/_matrix/client/v1/new/endpoint`,
505+ not `/_matrix/client/unstable/org.matrix.mscxxxx/new/endpoint`.
506+ {{% /boxes/note % }}
507+
508+ When using this approach correctly, the implementation can release
509+ the feature at any time, so long as the implementation is able to
510+ accept the technical debt that results from needing to provide
511+ adequate backwards and forwards compatibility. The implementation
512+ MUST support the flag (and server-side implementation) disappearing
513+ and be generally safe for users. Note that implementations early in
514+ the MSC review process may also be required to provide backwards
515+ compatibility with earlier editions of the proposal.
516+
517+ If the implementation cannot support the technical debt (or if it's
518+ impossible to provide forwards/backwards compatibility - e.g. a user
519+ authentication change which can't be safely rolled back), the
520+ implementation should not attempt to implement the feature and should
521+ instead wait for a spec release.
522+
523+ If at any point after early release, the idea changes in a
524+ backwards-incompatible way, the feature flag should also change so
525+ that implementations can adapt as needed.
526+
500527### Placeholder MSCs
501528
502529Some proposals may contain security-sensitive or private context which can't be
0 commit comments