Admin API: Synapse appears to incorrectly track public remote rooms as private
Description
Synapse appears to incorrectly track whether a room is public. This leads to public rooms being returned from the room list admin api with "public": false despite having "join_rule": "public".
This value is fetched from the is_public column in the rooms table:
- Query: https://github.com/element-hq/synapse/blob/develop/synapse/storage/databases/main/room.py#L730
- API schema mapping: https://github.com/element-hq/synapse/blob/develop/synapse/storage/databases/main/room.py#L781
Screenshot demonstrating the issue from an admin API:
Steps to reproduce
- Join public rooms over federation
- Query room list admin API
- Observe that those rooms are marked as
"public": false, wheretruewould be expected
Homeserver
rory.gay
Synapse Version
1.127.1
Installation Method
Other (please mention below)
Database
PostgreSQL, single db, no porting, no backups
Workers
Multiple workers
Platform
Installation Method: NixOS
Configuration
Presence enabled
Experimental features:
experimental_features = {
"msc2815_enabled" = true; # Redacted event content
"msc3026_enabled" = true; # Busy presence
"msc3266_enabled" = true; # Room summary API
"msc3916_authenticated_media_enabled" = true; # Authenticated media
"msc3823_account_suspension" = true; # Account suspension
"msc4151_enabled" = true; # Report room API (CS-API)
};
Full configuration: https://cgit.rory.gay/Rory-Open-Architecture.git/tree/host/Rory-nginx/services/matrix/synapse/synapse-main.nix
Relevant log output
N/A
Anything else that would be useful to know?
No response
The public field is a boolean indicating whether the room is visible in the room directory. It is unrelated to join_rules. The fields returned by the list room API are explained in the Synapse docs. To be fair, a better field name would probably be published but I doubt it is going to be changed at this point