-
-
Notifications
You must be signed in to change notification settings - Fork 97
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
How to communicate per-user experimental features to clients? #1532
Comments
It might depend on which features in particular are looking to be user-scoped, as advertising unstable features is (usually) a problem for the MSC to solve, however if the feature is meant to be per-user once stable then there's a different conversation to be had about the MSC/feature's merits and options. |
The current features that would be available per-user under this scheme are: I don't think these are meant to be per-user after approval? The idea is give server admins the ability to either switch these on for all users (as is currently possible) or allow for individual users to opt-in even if the features are not enabled for the whole server - presumably until the features in question are stabilized, in which case they should be available to all users of the server. |
hmm, that's a bit harder to think about. Generally speaking, the spec tries to not get involved in the exact details of unstable implementation to give the most flexibility possible to the MSC. However, giving MSC authors, and therefore MSC implementors, more tools to prove the feature is equally generally welcome. In short, I think your suggestion to make From a spec perspective, I'm not sure it's the best idea to present unstable features conditionally to users which aren't meant to be conditional upon acceptance to the spec. This is an area where the spec largely defers to implementations though, as it's not exactly the spec's place to say how unstable features are handled (except for requiring that they use unstable namespaces, and generally encouraging people to consider how bad the tech debt will be upon the MSC becoming stable). The rationale for using Ideally, to keep the spec completely independent from the mechanics of unstable feature development we'd ask that Synapse create a dedicated API surface of some sort to manage this case. Maybe it implements an optionally authed We are more opposed to de-facto spec than slightly ugly implementation, which means we could suggest using If we don't want implementations to create their own API surface and we don't want to use A problem for the MSC to solve/consider is how to prevent servers from lying to authed clients about the spec versions they implement, or what the unauthed |
Thank you so much for the thorough reply - your illumination of the rationale and context behind your suggestion was very helpful. I will submit a MSC to make |
This is solved now that MSC4026 is merged in version 1.10? |
Good catch! |
In Synapse we are implementing the ability to turn some unstable features on per-user (via the admin API). Once this is implemented, certain experimental features will be available to be toggled on per-person via the Admin API, in addition to retaining the ability to toggle on those features system-wide in the configuration.
However, this poses a problem when considering how to advertise that those features are enabled to the clients. Traditionally, clients checked the
/versions
endpoint, which in turn checked the Synapse configuration to determine what experimental features were enabled. With the changes being implemented this is no longer possible, as some experimental features may be enabled per-user. As the/versions
endpoint is not authed and as such does not have an access token that we can extract user info from to determine which unstable features are currently available, there is no way to correctly communicate to clients which experimental features are enabled.Some suggestions to remedy this are:
/versions
optionally accept authentication and ask the clients to change their request code to use the authed/versions
when checking which unstable features are enabled./capabilities
, which is authedWhich of these would be most amenable - or is there another more acceptable solution? Would this require a MSC?
The text was updated successfully, but these errors were encountered: